@memrosetta/cli 0.3.2 → 0.4.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/dist/chunk-356QK7TK.js +533 -0
- package/dist/chunk-3LSITXZ4.js +69 -0
- package/dist/chunk-6IOTBMUB.js +570 -0
- package/dist/chunk-72IW6TAV.js +59 -0
- package/dist/chunk-BGXZ3MDD.js +341 -0
- package/dist/chunk-EZVP3OY7.js +52 -0
- package/dist/chunk-FCHV2JMZ.js +347 -0
- package/dist/{chunk-F7ZMZ6HN.js → chunk-HXZ7MAT6.js} +2 -1
- package/dist/chunk-IM6H35RB.js +341 -0
- package/dist/chunk-JGE6RXXH.js +48 -0
- package/dist/chunk-JPBSMZ26.js +343 -0
- package/dist/chunk-KSKRPUZZ.js +43 -0
- package/dist/chunk-L6S3TXHR.js +326 -0
- package/dist/chunk-MISLIVUL.js +70 -0
- package/dist/chunk-NU5ZJJXP.js +63 -0
- package/dist/{chunk-326TFH4F.js → chunk-OCCU5YEG.js} +11 -42
- package/dist/chunk-PW52BB6L.js +61 -0
- package/dist/chunk-RABFL4EN.js +528 -0
- package/dist/chunk-RDUU53MG.js +343 -0
- package/dist/chunk-RYPYJJ2K.js +70 -0
- package/dist/chunk-SEPYQK3J.js +60 -0
- package/dist/{chunk-CATBN3ZT.js → chunk-TQOH7ZXN.js} +6 -18
- package/dist/chunk-Y6NH6K27.js +209 -0
- package/dist/{clear-MTL4CQM3.js → clear-47OFIDME.js} +10 -5
- package/dist/clear-4RQW6SYW.js +39 -0
- package/dist/clear-5SZVGYBX.js +39 -0
- package/dist/clear-BYRCL5ZN.js +39 -0
- package/dist/clear-ETQ7XFMV.js +39 -0
- package/dist/clear-P6H55OKZ.js +39 -0
- package/dist/clear-T3TWJQKL.js +39 -0
- package/dist/{compress-Z46R4N4M.js → compress-HDNYPXZ3.js} +10 -5
- package/dist/compress-S6MS4QW7.js +33 -0
- package/dist/compress-SEFTKZMU.js +33 -0
- package/dist/compress-TVWXLW3L.js +33 -0
- package/dist/compress-VLYNZ5BQ.js +33 -0
- package/dist/compress-YNY6YNFU.js +33 -0
- package/dist/compress-ZXWRRGHT.js +33 -0
- package/dist/{count-4TZ3C524.js → count-26AGY5XL.js} +10 -5
- package/dist/count-AMSEVDWR.js +24 -0
- package/dist/count-AVG5ZIRW.js +24 -0
- package/dist/count-CJIYYJKN.js +24 -0
- package/dist/count-KFFD4ML7.js +24 -0
- package/dist/count-UUAD3GEJ.js +24 -0
- package/dist/count-Z67KBEMV.js +24 -0
- package/dist/feedback-QDOWDWHM.js +40 -0
- package/dist/feedback-XGBKFQXC.js +40 -0
- package/dist/{get-B6AL75EW.js → get-75MGS4LN.js} +4 -2
- package/dist/get-NY5H3MUA.js +30 -0
- package/dist/hooks/on-prompt.js +2 -2
- package/dist/hooks/on-stop.js +2 -2
- package/dist/index.js +35 -18
- package/dist/ingest-A3BAI2C4.js +95 -0
- package/dist/ingest-E7QDD5NY.js +95 -0
- package/dist/ingest-GSJMWDV5.js +95 -0
- package/dist/ingest-IGI7RXR4.js +95 -0
- package/dist/ingest-JPIHSH7W.js +95 -0
- package/dist/ingest-QGXA4Y6C.js +95 -0
- package/dist/ingest-TZEVA25F.js +95 -0
- package/dist/init-2PRW64KV.js +146 -0
- package/dist/init-C3CONL23.js +146 -0
- package/dist/init-DAKOWQSW.js +169 -0
- package/dist/init-FYPMJDRN.js +146 -0
- package/dist/{init-C335O4TX.js → init-GCT4XEI6.js} +2 -2
- package/dist/init-GRVRJ6RO.js +205 -0
- package/dist/init-HBEIXY3N.js +146 -0
- package/dist/init-LK4UQISR.js +205 -0
- package/dist/init-MISGIVCC.js +146 -0
- package/dist/init-MNM4TXXJ.js +146 -0
- package/dist/{init-YAGOXYWG.js → init-OQW3KXTR.js} +2 -2
- package/dist/init-SIEKAILM.js +113 -0
- package/dist/init-TM7GTHTJ.js +146 -0
- package/dist/init-VYWOSISP.js +146 -0
- package/dist/init-WCL7FZOJ.js +182 -0
- package/dist/init-ZLUDTJAP.js +182 -0
- package/dist/invalidate-BY5VNFSE.js +25 -0
- package/dist/{invalidate-C54IVIGL.js → invalidate-D2O4VWZU.js} +4 -2
- package/dist/{maintain-ZPHG47YY.js → maintain-B65WIMGJ.js} +10 -5
- package/dist/maintain-EWOU3DGT.js +37 -0
- package/dist/maintain-FELKLG7O.js +37 -0
- package/dist/maintain-SGM56XKE.js +37 -0
- package/dist/maintain-VX2VWB2L.js +37 -0
- package/dist/maintain-WRRDXEG3.js +37 -0
- package/dist/maintain-XTCSOQBU.js +37 -0
- package/dist/{relate-R6DQUJCQ.js → relate-2QMG5H2I.js} +5 -3
- package/dist/relate-C22YYJZT.js +46 -0
- package/dist/relate-L5464WV5.js +47 -0
- package/dist/relate-SGZLG7JU.js +47 -0
- package/dist/relate-V5RYMJJ5.js +47 -0
- package/dist/relate-W4BXPFJA.js +46 -0
- package/dist/reset-45EUG44R.js +95 -0
- package/dist/reset-5NDHFUC3.js +95 -0
- package/dist/reset-C7I3LA5M.js +95 -0
- package/dist/reset-CYY4KYAB.js +129 -0
- package/dist/reset-F6F2R6BR.js +95 -0
- package/dist/reset-K3K4K5CT.js +95 -0
- package/dist/reset-K4WZJ4WU.js +95 -0
- package/dist/{reset-P63V46RN.js → reset-NNQQJN6L.js} +2 -2
- package/dist/{reset-GPV46GSD.js → reset-P5FXLI4E.js} +2 -2
- package/dist/reset-SORHIEKY.js +112 -0
- package/dist/reset-SVJMWYAK.js +95 -0
- package/dist/reset-W22RJGYZ.js +112 -0
- package/dist/reset-W3QVA632.js +95 -0
- package/dist/reset-WYEU6XJQ.js +112 -0
- package/dist/{search-YEYKOEXC.js → search-2SU5WQYK.js} +9 -4
- package/dist/search-5EE3XB2R.js +48 -0
- package/dist/search-BJ2YV5IS.js +48 -0
- package/dist/search-L6P3XY47.js +48 -0
- package/dist/search-PT4POELX.js +48 -0
- package/dist/search-UA7Y55LQ.js +48 -0
- package/dist/search-ZKLRJXFT.js +48 -0
- package/dist/status-3XVXJF7M.js +170 -0
- package/dist/status-4THJLSJL.js +131 -0
- package/dist/status-4UYY7TOE.js +131 -0
- package/dist/status-7G3RMR6A.js +139 -0
- package/dist/status-7M4TJVDH.js +170 -0
- package/dist/status-7MEEKEC2.js +131 -0
- package/dist/status-BQL4VJ6Y.js +149 -0
- package/dist/status-BTEVCZ5K.js +125 -0
- package/dist/status-F3NZGGPH.js +131 -0
- package/dist/status-GQMXOMRN.js +131 -0
- package/dist/status-HJGTMHTD.js +131 -0
- package/dist/{status-AMMF6QGI.js → status-IEKR6SSH.js} +35 -6
- package/dist/status-JJGVWESB.js +139 -0
- package/dist/status-LDVRVYZH.js +131 -0
- package/dist/{status-XNQRRFWF.js → status-TATIX3R6.js} +1 -1
- package/dist/{status-PYD6U7U7.js → status-TVY32MZD.js} +10 -3
- package/dist/{store-ZMERYHI6.js → store-2USP33HQ.js} +12 -7
- package/dist/store-6D5OJ2DX.js +91 -0
- package/dist/store-I4JNJWAZ.js +91 -0
- package/dist/store-R4LXYE57.js +91 -0
- package/dist/store-UMR2NOT7.js +91 -0
- package/dist/store-XCFYGYBE.js +91 -0
- package/dist/store-ZDI5AH4M.js +91 -0
- package/dist/sync-643GTA5X.js +319 -0
- package/dist/sync-BPVMHW34.js +319 -0
- package/dist/sync-OZQLBYT2.js +317 -0
- package/dist/sync-WURX2HJZ.js +321 -0
- package/dist/update-XJLMXCDZ.js +36 -0
- package/dist/{working-memory-2RRQFX4Q.js → working-memory-2U33JHJB.js} +10 -6
- package/dist/working-memory-35TMFU3P.js +53 -0
- package/dist/working-memory-IBWGIXLW.js +53 -0
- package/dist/working-memory-RZE3GYQZ.js +53 -0
- package/dist/working-memory-UYVEJJYW.js +53 -0
- package/dist/working-memory-VP6L2QV6.js +53 -0
- package/dist/working-memory-WGB5DZ3B.js +53 -0
- package/package.json +5 -4
- package/dist/chunk-MWLPPS7U.js +0 -133
- package/dist/ingest-ZOR3XSAE.js +0 -152
- package/dist/init-7VFBCA4O.js +0 -26
|
@@ -1,7 +1,14 @@
|
|
|
1
1
|
import {
|
|
2
|
-
|
|
2
|
+
isClaudeCodeConfigured,
|
|
3
|
+
isCursorConfigured,
|
|
4
|
+
isGenericMCPConfigured
|
|
5
|
+
} from "./chunk-L6S3TXHR.js";
|
|
6
|
+
import {
|
|
7
|
+
getDefaultDbPath
|
|
8
|
+
} from "./chunk-EZVP3OY7.js";
|
|
9
|
+
import {
|
|
3
10
|
output
|
|
4
|
-
} from "./chunk-
|
|
11
|
+
} from "./chunk-ET6TNQOJ.js";
|
|
5
12
|
|
|
6
13
|
// src/commands/status.ts
|
|
7
14
|
import { existsSync, statSync } from "fs";
|
|
@@ -30,8 +37,13 @@ async function run(options) {
|
|
|
30
37
|
} catch {
|
|
31
38
|
}
|
|
32
39
|
}
|
|
40
|
+
const claudeCodeStatus = isClaudeCodeConfigured();
|
|
41
|
+
const cursorStatus = isCursorConfigured();
|
|
42
|
+
const mcpStatus = isGenericMCPConfigured();
|
|
33
43
|
if (format === "text") {
|
|
34
|
-
process.stdout.write(
|
|
44
|
+
process.stdout.write("MemRosetta Status\n");
|
|
45
|
+
process.stdout.write(`${"=".repeat(40)}
|
|
46
|
+
|
|
35
47
|
`);
|
|
36
48
|
process.stdout.write(
|
|
37
49
|
`Database: ${dbPath} (${exists ? `exists, ${sizeFormatted}` : "not found"})
|
|
@@ -45,11 +57,23 @@ async function run(options) {
|
|
|
45
57
|
`
|
|
46
58
|
);
|
|
47
59
|
} else {
|
|
48
|
-
process.stdout.write(
|
|
49
|
-
`);
|
|
60
|
+
process.stdout.write("Users: 0\n");
|
|
50
61
|
}
|
|
51
62
|
process.stdout.write(
|
|
52
63
|
`Embeddings: ${embeddingsEnabled ? "enabled (bge-small-en-v1.5)" : "disabled"}
|
|
64
|
+
`
|
|
65
|
+
);
|
|
66
|
+
process.stdout.write("\nIntegrations:\n");
|
|
67
|
+
process.stdout.write(
|
|
68
|
+
` Claude Code: ${claudeCodeStatus ? "configured (hooks + MCP)" : "not configured"}
|
|
69
|
+
`
|
|
70
|
+
);
|
|
71
|
+
process.stdout.write(
|
|
72
|
+
` Cursor: ${cursorStatus ? "configured (MCP)" : "not configured"}
|
|
73
|
+
`
|
|
74
|
+
);
|
|
75
|
+
process.stdout.write(
|
|
76
|
+
` MCP (generic): ${mcpStatus ? "configured" : "not configured"}
|
|
53
77
|
`
|
|
54
78
|
);
|
|
55
79
|
return;
|
|
@@ -65,7 +89,12 @@ async function run(options) {
|
|
|
65
89
|
},
|
|
66
90
|
memories: memoryCount,
|
|
67
91
|
users: userList,
|
|
68
|
-
embeddings: embeddingsEnabled
|
|
92
|
+
embeddings: embeddingsEnabled,
|
|
93
|
+
integrations: {
|
|
94
|
+
claudeCode: claudeCodeStatus,
|
|
95
|
+
cursor: cursorStatus,
|
|
96
|
+
mcp: mcpStatus
|
|
97
|
+
}
|
|
69
98
|
},
|
|
70
99
|
format
|
|
71
100
|
);
|
|
@@ -0,0 +1,139 @@
|
|
|
1
|
+
import {
|
|
2
|
+
isClaudeCodeConfigured,
|
|
3
|
+
isCodexConfigured,
|
|
4
|
+
isCursorConfigured,
|
|
5
|
+
isGenericMCPConfigured
|
|
6
|
+
} from "./chunk-356QK7TK.js";
|
|
7
|
+
import {
|
|
8
|
+
getDefaultDbPath
|
|
9
|
+
} from "./chunk-POK32V2J.js";
|
|
10
|
+
import {
|
|
11
|
+
output
|
|
12
|
+
} from "./chunk-ET6TNQOJ.js";
|
|
13
|
+
import {
|
|
14
|
+
getConfig
|
|
15
|
+
} from "./chunk-TU5EHSDE.js";
|
|
16
|
+
|
|
17
|
+
// src/commands/status.ts
|
|
18
|
+
import { existsSync, statSync } from "fs";
|
|
19
|
+
import { createRequire } from "module";
|
|
20
|
+
function getVersion() {
|
|
21
|
+
const require2 = createRequire(import.meta.url);
|
|
22
|
+
const pkg = require2("../../package.json");
|
|
23
|
+
return pkg.version;
|
|
24
|
+
}
|
|
25
|
+
async function run(options) {
|
|
26
|
+
const { format, db, noEmbeddings } = options;
|
|
27
|
+
const config = getConfig();
|
|
28
|
+
const dbPath = db ?? config.dbPath ?? getDefaultDbPath();
|
|
29
|
+
const exists = existsSync(dbPath);
|
|
30
|
+
let sizeBytes = 0;
|
|
31
|
+
let sizeFormatted = "0B";
|
|
32
|
+
let memoryCount = 0;
|
|
33
|
+
let userList = [];
|
|
34
|
+
const embeddingsEnabled = !noEmbeddings && config.enableEmbeddings !== false;
|
|
35
|
+
if (exists) {
|
|
36
|
+
const stat = statSync(dbPath);
|
|
37
|
+
sizeBytes = stat.size;
|
|
38
|
+
sizeFormatted = formatSize(sizeBytes);
|
|
39
|
+
try {
|
|
40
|
+
const Database = (await import("better-sqlite3")).default;
|
|
41
|
+
const dbConn = new Database(dbPath);
|
|
42
|
+
dbConn.pragma("journal_mode = WAL");
|
|
43
|
+
const countRow = dbConn.prepare("SELECT COUNT(*) as count FROM memories").get();
|
|
44
|
+
memoryCount = countRow.count;
|
|
45
|
+
const userRows = dbConn.prepare("SELECT DISTINCT user_id FROM memories ORDER BY user_id").all();
|
|
46
|
+
userList = userRows.map((r) => r.user_id);
|
|
47
|
+
dbConn.close();
|
|
48
|
+
} catch {
|
|
49
|
+
}
|
|
50
|
+
}
|
|
51
|
+
const claudeCodeStatus = isClaudeCodeConfigured();
|
|
52
|
+
const cursorStatus = isCursorConfigured();
|
|
53
|
+
const codexStatus = isCodexConfigured();
|
|
54
|
+
const mcpStatus = isGenericMCPConfigured();
|
|
55
|
+
if (format === "text") {
|
|
56
|
+
process.stdout.write("MemRosetta Status\n");
|
|
57
|
+
process.stdout.write(`${"=".repeat(40)}
|
|
58
|
+
|
|
59
|
+
`);
|
|
60
|
+
process.stdout.write(
|
|
61
|
+
`Database: ${dbPath} (${exists ? `exists, ${sizeFormatted}` : "not found"})
|
|
62
|
+
`
|
|
63
|
+
);
|
|
64
|
+
process.stdout.write(`Memories: ${memoryCount}
|
|
65
|
+
`);
|
|
66
|
+
if (userList.length > 0) {
|
|
67
|
+
process.stdout.write(
|
|
68
|
+
`Users: ${userList.length} (${userList.join(", ")})
|
|
69
|
+
`
|
|
70
|
+
);
|
|
71
|
+
} else {
|
|
72
|
+
process.stdout.write("Users: 0\n");
|
|
73
|
+
}
|
|
74
|
+
const embeddingModelLabel = getEmbeddingModelLabel();
|
|
75
|
+
process.stdout.write(
|
|
76
|
+
`Embeddings: ${embeddingsEnabled ? `enabled (${embeddingModelLabel})` : "disabled"}
|
|
77
|
+
`
|
|
78
|
+
);
|
|
79
|
+
process.stdout.write("\nIntegrations:\n");
|
|
80
|
+
process.stdout.write(
|
|
81
|
+
` Claude Code: ${claudeCodeStatus ? "configured (hooks + MCP)" : "not configured"}
|
|
82
|
+
`
|
|
83
|
+
);
|
|
84
|
+
process.stdout.write(
|
|
85
|
+
` Cursor: ${cursorStatus ? "configured (MCP)" : "not configured"}
|
|
86
|
+
`
|
|
87
|
+
);
|
|
88
|
+
process.stdout.write(
|
|
89
|
+
` Codex: ${codexStatus ? "configured (MCP)" : "not configured"}
|
|
90
|
+
`
|
|
91
|
+
);
|
|
92
|
+
process.stdout.write(
|
|
93
|
+
` MCP (generic): ${mcpStatus ? "configured" : "not configured"}
|
|
94
|
+
`
|
|
95
|
+
);
|
|
96
|
+
return;
|
|
97
|
+
}
|
|
98
|
+
output(
|
|
99
|
+
{
|
|
100
|
+
version: getVersion(),
|
|
101
|
+
database: {
|
|
102
|
+
path: dbPath,
|
|
103
|
+
exists,
|
|
104
|
+
sizeBytes,
|
|
105
|
+
sizeFormatted
|
|
106
|
+
},
|
|
107
|
+
memories: memoryCount,
|
|
108
|
+
users: userList,
|
|
109
|
+
embeddings: embeddingsEnabled,
|
|
110
|
+
embeddingModel: getEmbeddingModelLabel(),
|
|
111
|
+
embeddingPreset: getConfig().embeddingPreset ?? "en",
|
|
112
|
+
integrations: {
|
|
113
|
+
claudeCode: claudeCodeStatus,
|
|
114
|
+
cursor: cursorStatus,
|
|
115
|
+
codex: codexStatus,
|
|
116
|
+
mcp: mcpStatus
|
|
117
|
+
}
|
|
118
|
+
},
|
|
119
|
+
format
|
|
120
|
+
);
|
|
121
|
+
}
|
|
122
|
+
function formatSize(bytes) {
|
|
123
|
+
if (bytes < 1024) return `${bytes}B`;
|
|
124
|
+
if (bytes < 1024 * 1024) return `${(bytes / 1024).toFixed(1)}KB`;
|
|
125
|
+
return `${(bytes / (1024 * 1024)).toFixed(1)}MB`;
|
|
126
|
+
}
|
|
127
|
+
var PRESET_MODEL_LABELS = {
|
|
128
|
+
en: "bge-small-en-v1.5",
|
|
129
|
+
multilingual: "multilingual-e5-small",
|
|
130
|
+
ko: "ko-sroberta-multitask"
|
|
131
|
+
};
|
|
132
|
+
function getEmbeddingModelLabel() {
|
|
133
|
+
const config = getConfig();
|
|
134
|
+
const preset = config.embeddingPreset ?? "en";
|
|
135
|
+
return PRESET_MODEL_LABELS[preset] ?? preset;
|
|
136
|
+
}
|
|
137
|
+
export {
|
|
138
|
+
run
|
|
139
|
+
};
|
|
@@ -0,0 +1,131 @@
|
|
|
1
|
+
import {
|
|
2
|
+
isClaudeCodeConfigured,
|
|
3
|
+
isCursorConfigured,
|
|
4
|
+
isGenericMCPConfigured
|
|
5
|
+
} from "./chunk-FCHV2JMZ.js";
|
|
6
|
+
import {
|
|
7
|
+
getConfig
|
|
8
|
+
} from "./chunk-TU5EHSDE.js";
|
|
9
|
+
import {
|
|
10
|
+
getDefaultDbPath
|
|
11
|
+
} from "./chunk-2ZBEEETG.js";
|
|
12
|
+
import {
|
|
13
|
+
output
|
|
14
|
+
} from "./chunk-ET6TNQOJ.js";
|
|
15
|
+
|
|
16
|
+
// src/commands/status.ts
|
|
17
|
+
import { existsSync, statSync } from "fs";
|
|
18
|
+
import { createRequire } from "module";
|
|
19
|
+
function getVersion() {
|
|
20
|
+
const require2 = createRequire(import.meta.url);
|
|
21
|
+
const pkg = require2("../../package.json");
|
|
22
|
+
return pkg.version;
|
|
23
|
+
}
|
|
24
|
+
async function run(options) {
|
|
25
|
+
const { format, db, noEmbeddings } = options;
|
|
26
|
+
const dbPath = db ?? getDefaultDbPath();
|
|
27
|
+
const exists = existsSync(dbPath);
|
|
28
|
+
let sizeBytes = 0;
|
|
29
|
+
let sizeFormatted = "0B";
|
|
30
|
+
let memoryCount = 0;
|
|
31
|
+
let userList = [];
|
|
32
|
+
const embeddingsEnabled = !noEmbeddings;
|
|
33
|
+
if (exists) {
|
|
34
|
+
const stat = statSync(dbPath);
|
|
35
|
+
sizeBytes = stat.size;
|
|
36
|
+
sizeFormatted = formatSize(sizeBytes);
|
|
37
|
+
try {
|
|
38
|
+
const Database = (await import("better-sqlite3")).default;
|
|
39
|
+
const dbConn = new Database(dbPath);
|
|
40
|
+
dbConn.pragma("journal_mode = WAL");
|
|
41
|
+
const countRow = dbConn.prepare("SELECT COUNT(*) as count FROM memories").get();
|
|
42
|
+
memoryCount = countRow.count;
|
|
43
|
+
const userRows = dbConn.prepare("SELECT DISTINCT user_id FROM memories ORDER BY user_id").all();
|
|
44
|
+
userList = userRows.map((r) => r.user_id);
|
|
45
|
+
dbConn.close();
|
|
46
|
+
} catch {
|
|
47
|
+
}
|
|
48
|
+
}
|
|
49
|
+
const claudeCodeStatus = isClaudeCodeConfigured();
|
|
50
|
+
const cursorStatus = isCursorConfigured();
|
|
51
|
+
const mcpStatus = isGenericMCPConfigured();
|
|
52
|
+
if (format === "text") {
|
|
53
|
+
process.stdout.write("MemRosetta Status\n");
|
|
54
|
+
process.stdout.write(`${"=".repeat(40)}
|
|
55
|
+
|
|
56
|
+
`);
|
|
57
|
+
process.stdout.write(
|
|
58
|
+
`Database: ${dbPath} (${exists ? `exists, ${sizeFormatted}` : "not found"})
|
|
59
|
+
`
|
|
60
|
+
);
|
|
61
|
+
process.stdout.write(`Memories: ${memoryCount}
|
|
62
|
+
`);
|
|
63
|
+
if (userList.length > 0) {
|
|
64
|
+
process.stdout.write(
|
|
65
|
+
`Users: ${userList.length} (${userList.join(", ")})
|
|
66
|
+
`
|
|
67
|
+
);
|
|
68
|
+
} else {
|
|
69
|
+
process.stdout.write("Users: 0\n");
|
|
70
|
+
}
|
|
71
|
+
const embeddingModelLabel = getEmbeddingModelLabel();
|
|
72
|
+
process.stdout.write(
|
|
73
|
+
`Embeddings: ${embeddingsEnabled ? `enabled (${embeddingModelLabel})` : "disabled"}
|
|
74
|
+
`
|
|
75
|
+
);
|
|
76
|
+
process.stdout.write("\nIntegrations:\n");
|
|
77
|
+
process.stdout.write(
|
|
78
|
+
` Claude Code: ${claudeCodeStatus ? "configured (hooks + MCP)" : "not configured"}
|
|
79
|
+
`
|
|
80
|
+
);
|
|
81
|
+
process.stdout.write(
|
|
82
|
+
` Cursor: ${cursorStatus ? "configured (MCP)" : "not configured"}
|
|
83
|
+
`
|
|
84
|
+
);
|
|
85
|
+
process.stdout.write(
|
|
86
|
+
` MCP (generic): ${mcpStatus ? "configured" : "not configured"}
|
|
87
|
+
`
|
|
88
|
+
);
|
|
89
|
+
return;
|
|
90
|
+
}
|
|
91
|
+
output(
|
|
92
|
+
{
|
|
93
|
+
version: getVersion(),
|
|
94
|
+
database: {
|
|
95
|
+
path: dbPath,
|
|
96
|
+
exists,
|
|
97
|
+
sizeBytes,
|
|
98
|
+
sizeFormatted
|
|
99
|
+
},
|
|
100
|
+
memories: memoryCount,
|
|
101
|
+
users: userList,
|
|
102
|
+
embeddings: embeddingsEnabled,
|
|
103
|
+
embeddingModel: getEmbeddingModelLabel(),
|
|
104
|
+
embeddingPreset: getConfig().embeddingPreset ?? "en",
|
|
105
|
+
integrations: {
|
|
106
|
+
claudeCode: claudeCodeStatus,
|
|
107
|
+
cursor: cursorStatus,
|
|
108
|
+
mcp: mcpStatus
|
|
109
|
+
}
|
|
110
|
+
},
|
|
111
|
+
format
|
|
112
|
+
);
|
|
113
|
+
}
|
|
114
|
+
function formatSize(bytes) {
|
|
115
|
+
if (bytes < 1024) return `${bytes}B`;
|
|
116
|
+
if (bytes < 1024 * 1024) return `${(bytes / 1024).toFixed(1)}KB`;
|
|
117
|
+
return `${(bytes / (1024 * 1024)).toFixed(1)}MB`;
|
|
118
|
+
}
|
|
119
|
+
var PRESET_MODEL_LABELS = {
|
|
120
|
+
en: "bge-small-en-v1.5",
|
|
121
|
+
multilingual: "multilingual-e5-small",
|
|
122
|
+
ko: "ko-sroberta-multitask"
|
|
123
|
+
};
|
|
124
|
+
function getEmbeddingModelLabel() {
|
|
125
|
+
const config = getConfig();
|
|
126
|
+
const preset = config.embeddingPreset ?? "en";
|
|
127
|
+
return PRESET_MODEL_LABELS[preset] ?? preset;
|
|
128
|
+
}
|
|
129
|
+
export {
|
|
130
|
+
run
|
|
131
|
+
};
|
|
@@ -2,17 +2,18 @@ import {
|
|
|
2
2
|
isClaudeCodeConfigured,
|
|
3
3
|
isCodexConfigured,
|
|
4
4
|
isCursorConfigured,
|
|
5
|
+
isGeminiConfigured,
|
|
5
6
|
isGenericMCPConfigured
|
|
6
|
-
} from "./chunk-
|
|
7
|
+
} from "./chunk-IS4IKWPL.js";
|
|
7
8
|
import {
|
|
8
9
|
getDefaultDbPath
|
|
9
|
-
} from "./chunk-
|
|
10
|
+
} from "./chunk-72IW6TAV.js";
|
|
10
11
|
import {
|
|
11
12
|
output
|
|
12
13
|
} from "./chunk-ET6TNQOJ.js";
|
|
13
14
|
import {
|
|
14
15
|
getConfig
|
|
15
|
-
} from "./chunk-
|
|
16
|
+
} from "./chunk-SEPYQK3J.js";
|
|
16
17
|
|
|
17
18
|
// src/commands/status.ts
|
|
18
19
|
import { existsSync, statSync, readFileSync } from "fs";
|
|
@@ -102,6 +103,7 @@ async function run(options) {
|
|
|
102
103
|
const claudeCodeStatus = isClaudeCodeConfigured();
|
|
103
104
|
const cursorStatus = isCursorConfigured();
|
|
104
105
|
const codexStatus = isCodexConfigured();
|
|
106
|
+
const geminiStatus = isGeminiConfigured();
|
|
105
107
|
const mcpStatus = isGenericMCPConfigured();
|
|
106
108
|
if (format === "text") {
|
|
107
109
|
process.stdout.write("MemRosetta Status\n");
|
|
@@ -153,6 +155,10 @@ async function run(options) {
|
|
|
153
155
|
);
|
|
154
156
|
process.stdout.write(
|
|
155
157
|
` Codex: ${codexStatus ? "configured (MCP)" : "not configured"}
|
|
158
|
+
`
|
|
159
|
+
);
|
|
160
|
+
process.stdout.write(
|
|
161
|
+
` Gemini: ${geminiStatus ? "configured (MCP)" : "not configured"}
|
|
156
162
|
`
|
|
157
163
|
);
|
|
158
164
|
process.stdout.write(
|
|
@@ -185,6 +191,7 @@ async function run(options) {
|
|
|
185
191
|
claudeCode: claudeCodeStatus,
|
|
186
192
|
cursor: cursorStatus,
|
|
187
193
|
codex: codexStatus,
|
|
194
|
+
gemini: geminiStatus,
|
|
188
195
|
mcp: mcpStatus
|
|
189
196
|
}
|
|
190
197
|
},
|
|
@@ -2,12 +2,17 @@ import {
|
|
|
2
2
|
hasFlag,
|
|
3
3
|
optionalOption,
|
|
4
4
|
requireOption
|
|
5
|
-
} from "./chunk-
|
|
5
|
+
} from "./chunk-NU5ZJJXP.js";
|
|
6
|
+
import {
|
|
7
|
+
getEngine
|
|
8
|
+
} from "./chunk-72IW6TAV.js";
|
|
6
9
|
import {
|
|
7
|
-
getEngine,
|
|
8
10
|
output,
|
|
9
11
|
outputError
|
|
10
|
-
} from "./chunk-
|
|
12
|
+
} from "./chunk-ET6TNQOJ.js";
|
|
13
|
+
import {
|
|
14
|
+
getDefaultUserId
|
|
15
|
+
} from "./chunk-SEPYQK3J.js";
|
|
11
16
|
|
|
12
17
|
// src/commands/store.ts
|
|
13
18
|
var VALID_TYPES = /* @__PURE__ */ new Set(["fact", "preference", "decision", "event"]);
|
|
@@ -25,16 +30,16 @@ async function run(options) {
|
|
|
25
30
|
const raw = await readStdin();
|
|
26
31
|
try {
|
|
27
32
|
const parsed = JSON.parse(raw);
|
|
28
|
-
if (!parsed.
|
|
33
|
+
if (!parsed.content || !parsed.memoryType) {
|
|
29
34
|
outputError(
|
|
30
|
-
"stdin JSON must have
|
|
35
|
+
"stdin JSON must have content and memoryType",
|
|
31
36
|
format
|
|
32
37
|
);
|
|
33
38
|
process.exitCode = 1;
|
|
34
39
|
return;
|
|
35
40
|
}
|
|
36
41
|
input = {
|
|
37
|
-
userId: String(parsed.userId),
|
|
42
|
+
userId: parsed.userId ? String(parsed.userId) : getDefaultUserId(),
|
|
38
43
|
content: String(parsed.content),
|
|
39
44
|
memoryType: String(parsed.memoryType),
|
|
40
45
|
namespace: parsed.namespace ? String(parsed.namespace) : void 0,
|
|
@@ -48,7 +53,7 @@ async function run(options) {
|
|
|
48
53
|
return;
|
|
49
54
|
}
|
|
50
55
|
} else {
|
|
51
|
-
const userId =
|
|
56
|
+
const userId = optionalOption(args, "--user") ?? getDefaultUserId();
|
|
52
57
|
const content = requireOption(args, "--content", "content");
|
|
53
58
|
const memoryType = requireOption(args, "--type", "type");
|
|
54
59
|
if (!VALID_TYPES.has(memoryType)) {
|
|
@@ -0,0 +1,91 @@
|
|
|
1
|
+
import {
|
|
2
|
+
hasFlag,
|
|
3
|
+
optionalOption,
|
|
4
|
+
requireOption
|
|
5
|
+
} from "./chunk-TGGGIJC4.js";
|
|
6
|
+
import {
|
|
7
|
+
getEngine
|
|
8
|
+
} from "./chunk-POK32V2J.js";
|
|
9
|
+
import {
|
|
10
|
+
output,
|
|
11
|
+
outputError
|
|
12
|
+
} from "./chunk-ET6TNQOJ.js";
|
|
13
|
+
import {
|
|
14
|
+
getDefaultUserId
|
|
15
|
+
} from "./chunk-TU5EHSDE.js";
|
|
16
|
+
|
|
17
|
+
// src/commands/store.ts
|
|
18
|
+
var VALID_TYPES = /* @__PURE__ */ new Set(["fact", "preference", "decision", "event"]);
|
|
19
|
+
async function readStdin() {
|
|
20
|
+
const chunks = [];
|
|
21
|
+
for await (const chunk of process.stdin) {
|
|
22
|
+
chunks.push(chunk);
|
|
23
|
+
}
|
|
24
|
+
return Buffer.concat(chunks).toString("utf-8").trim();
|
|
25
|
+
}
|
|
26
|
+
async function run(options) {
|
|
27
|
+
const { args, format, db, noEmbeddings } = options;
|
|
28
|
+
let input;
|
|
29
|
+
if (hasFlag(args, "--stdin")) {
|
|
30
|
+
const raw = await readStdin();
|
|
31
|
+
try {
|
|
32
|
+
const parsed = JSON.parse(raw);
|
|
33
|
+
if (!parsed.content || !parsed.memoryType) {
|
|
34
|
+
outputError(
|
|
35
|
+
"stdin JSON must have content and memoryType",
|
|
36
|
+
format
|
|
37
|
+
);
|
|
38
|
+
process.exitCode = 1;
|
|
39
|
+
return;
|
|
40
|
+
}
|
|
41
|
+
input = {
|
|
42
|
+
userId: parsed.userId ? String(parsed.userId) : getDefaultUserId(),
|
|
43
|
+
content: String(parsed.content),
|
|
44
|
+
memoryType: String(parsed.memoryType),
|
|
45
|
+
namespace: parsed.namespace ? String(parsed.namespace) : void 0,
|
|
46
|
+
keywords: Array.isArray(parsed.keywords) ? parsed.keywords : void 0,
|
|
47
|
+
confidence: typeof parsed.confidence === "number" ? parsed.confidence : void 0,
|
|
48
|
+
sourceId: parsed.sourceId ? String(parsed.sourceId) : void 0
|
|
49
|
+
};
|
|
50
|
+
} catch {
|
|
51
|
+
outputError("Invalid JSON from stdin", format);
|
|
52
|
+
process.exitCode = 1;
|
|
53
|
+
return;
|
|
54
|
+
}
|
|
55
|
+
} else {
|
|
56
|
+
const userId = optionalOption(args, "--user") ?? getDefaultUserId();
|
|
57
|
+
const content = requireOption(args, "--content", "content");
|
|
58
|
+
const memoryType = requireOption(args, "--type", "type");
|
|
59
|
+
if (!VALID_TYPES.has(memoryType)) {
|
|
60
|
+
outputError(
|
|
61
|
+
`Invalid type: ${memoryType}. Must be one of: fact, preference, decision, event`,
|
|
62
|
+
format
|
|
63
|
+
);
|
|
64
|
+
process.exitCode = 1;
|
|
65
|
+
return;
|
|
66
|
+
}
|
|
67
|
+
const namespace = optionalOption(args, "--namespace");
|
|
68
|
+
const keywordsRaw = optionalOption(args, "--keywords");
|
|
69
|
+
const confidenceRaw = optionalOption(args, "--confidence");
|
|
70
|
+
const sourceId = optionalOption(args, "--source-id");
|
|
71
|
+
const eventStart = optionalOption(args, "--event-start");
|
|
72
|
+
const eventEnd = optionalOption(args, "--event-end");
|
|
73
|
+
input = {
|
|
74
|
+
userId,
|
|
75
|
+
content,
|
|
76
|
+
memoryType,
|
|
77
|
+
namespace,
|
|
78
|
+
keywords: keywordsRaw ? keywordsRaw.split(",") : void 0,
|
|
79
|
+
confidence: confidenceRaw ? parseFloat(confidenceRaw) : void 0,
|
|
80
|
+
sourceId,
|
|
81
|
+
eventDateStart: eventStart,
|
|
82
|
+
eventDateEnd: eventEnd
|
|
83
|
+
};
|
|
84
|
+
}
|
|
85
|
+
const engine = await getEngine({ db, noEmbeddings });
|
|
86
|
+
const memory = await engine.store(input);
|
|
87
|
+
output(memory, format);
|
|
88
|
+
}
|
|
89
|
+
export {
|
|
90
|
+
run
|
|
91
|
+
};
|
|
@@ -0,0 +1,91 @@
|
|
|
1
|
+
import {
|
|
2
|
+
hasFlag,
|
|
3
|
+
optionalOption,
|
|
4
|
+
requireOption
|
|
5
|
+
} from "./chunk-HXZ7MAT6.js";
|
|
6
|
+
import {
|
|
7
|
+
getDefaultUserId
|
|
8
|
+
} from "./chunk-TU5EHSDE.js";
|
|
9
|
+
import {
|
|
10
|
+
getEngine
|
|
11
|
+
} from "./chunk-2ZBEEETG.js";
|
|
12
|
+
import {
|
|
13
|
+
output,
|
|
14
|
+
outputError
|
|
15
|
+
} from "./chunk-ET6TNQOJ.js";
|
|
16
|
+
|
|
17
|
+
// src/commands/store.ts
|
|
18
|
+
var VALID_TYPES = /* @__PURE__ */ new Set(["fact", "preference", "decision", "event"]);
|
|
19
|
+
async function readStdin() {
|
|
20
|
+
const chunks = [];
|
|
21
|
+
for await (const chunk of process.stdin) {
|
|
22
|
+
chunks.push(chunk);
|
|
23
|
+
}
|
|
24
|
+
return Buffer.concat(chunks).toString("utf-8").trim();
|
|
25
|
+
}
|
|
26
|
+
async function run(options) {
|
|
27
|
+
const { args, format, db, noEmbeddings } = options;
|
|
28
|
+
let input;
|
|
29
|
+
if (hasFlag(args, "--stdin")) {
|
|
30
|
+
const raw = await readStdin();
|
|
31
|
+
try {
|
|
32
|
+
const parsed = JSON.parse(raw);
|
|
33
|
+
if (!parsed.content || !parsed.memoryType) {
|
|
34
|
+
outputError(
|
|
35
|
+
"stdin JSON must have content and memoryType",
|
|
36
|
+
format
|
|
37
|
+
);
|
|
38
|
+
process.exitCode = 1;
|
|
39
|
+
return;
|
|
40
|
+
}
|
|
41
|
+
input = {
|
|
42
|
+
userId: parsed.userId ? String(parsed.userId) : getDefaultUserId(),
|
|
43
|
+
content: String(parsed.content),
|
|
44
|
+
memoryType: String(parsed.memoryType),
|
|
45
|
+
namespace: parsed.namespace ? String(parsed.namespace) : void 0,
|
|
46
|
+
keywords: Array.isArray(parsed.keywords) ? parsed.keywords : void 0,
|
|
47
|
+
confidence: typeof parsed.confidence === "number" ? parsed.confidence : void 0,
|
|
48
|
+
sourceId: parsed.sourceId ? String(parsed.sourceId) : void 0
|
|
49
|
+
};
|
|
50
|
+
} catch {
|
|
51
|
+
outputError("Invalid JSON from stdin", format);
|
|
52
|
+
process.exitCode = 1;
|
|
53
|
+
return;
|
|
54
|
+
}
|
|
55
|
+
} else {
|
|
56
|
+
const userId = optionalOption(args, "--user") ?? getDefaultUserId();
|
|
57
|
+
const content = requireOption(args, "--content", "content");
|
|
58
|
+
const memoryType = requireOption(args, "--type", "type");
|
|
59
|
+
if (!VALID_TYPES.has(memoryType)) {
|
|
60
|
+
outputError(
|
|
61
|
+
`Invalid type: ${memoryType}. Must be one of: fact, preference, decision, event`,
|
|
62
|
+
format
|
|
63
|
+
);
|
|
64
|
+
process.exitCode = 1;
|
|
65
|
+
return;
|
|
66
|
+
}
|
|
67
|
+
const namespace = optionalOption(args, "--namespace");
|
|
68
|
+
const keywordsRaw = optionalOption(args, "--keywords");
|
|
69
|
+
const confidenceRaw = optionalOption(args, "--confidence");
|
|
70
|
+
const sourceId = optionalOption(args, "--source-id");
|
|
71
|
+
const eventStart = optionalOption(args, "--event-start");
|
|
72
|
+
const eventEnd = optionalOption(args, "--event-end");
|
|
73
|
+
input = {
|
|
74
|
+
userId,
|
|
75
|
+
content,
|
|
76
|
+
memoryType,
|
|
77
|
+
namespace,
|
|
78
|
+
keywords: keywordsRaw ? keywordsRaw.split(",") : void 0,
|
|
79
|
+
confidence: confidenceRaw ? parseFloat(confidenceRaw) : void 0,
|
|
80
|
+
sourceId,
|
|
81
|
+
eventDateStart: eventStart,
|
|
82
|
+
eventDateEnd: eventEnd
|
|
83
|
+
};
|
|
84
|
+
}
|
|
85
|
+
const engine = await getEngine({ db, noEmbeddings });
|
|
86
|
+
const memory = await engine.store(input);
|
|
87
|
+
output(memory, format);
|
|
88
|
+
}
|
|
89
|
+
export {
|
|
90
|
+
run
|
|
91
|
+
};
|