@bennys001/claude-code-memory 0.9.12 → 0.10.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/dist/index.js +109 -70
- package/package.json +1 -1
package/dist/index.js
CHANGED
|
@@ -4,7 +4,7 @@
|
|
|
4
4
|
var package_default = {
|
|
5
5
|
name: "@bennys001/claude-code-memory",
|
|
6
6
|
publishConfig: { access: "public" },
|
|
7
|
-
version: "0.
|
|
7
|
+
version: "0.10.0",
|
|
8
8
|
description: "MCP server that gives Claude Code persistent memory via an Obsidian knowledge vault",
|
|
9
9
|
module: "dist/index.js",
|
|
10
10
|
main: "dist/index.js",
|
|
@@ -866,6 +866,64 @@ function registerResearchTool(server, entries, vaultPath) {
|
|
|
866
866
|
});
|
|
867
867
|
}
|
|
868
868
|
|
|
869
|
+
// src/index.ts
|
|
870
|
+
import { spawn as spawn2 } from "child_process";
|
|
871
|
+
|
|
872
|
+
// src/cli/claude-code.ts
|
|
873
|
+
import { spawn } from "child_process";
|
|
874
|
+
var SERVER_CMD = ["bunx", "@bennys001/claude-code-memory", "--stdio"];
|
|
875
|
+
var REGISTER_ARGS = [
|
|
876
|
+
"mcp",
|
|
877
|
+
"add",
|
|
878
|
+
"--transport",
|
|
879
|
+
"stdio",
|
|
880
|
+
"--scope",
|
|
881
|
+
"user",
|
|
882
|
+
"ccm",
|
|
883
|
+
"--",
|
|
884
|
+
...SERVER_CMD
|
|
885
|
+
];
|
|
886
|
+
var MANUAL_COMMAND = `claude mcp add --transport stdio --scope user ccm -- ${SERVER_CMD.join(" ")}`;
|
|
887
|
+
function registerMcpServer() {
|
|
888
|
+
return new Promise((resolve4) => {
|
|
889
|
+
let stdout = "";
|
|
890
|
+
let stderr = "";
|
|
891
|
+
const proc = spawn("claude", REGISTER_ARGS, { stdio: "pipe" });
|
|
892
|
+
proc.stdout.on("data", (data) => {
|
|
893
|
+
stdout += data.toString();
|
|
894
|
+
});
|
|
895
|
+
proc.stderr.on("data", (data) => {
|
|
896
|
+
stderr += data.toString();
|
|
897
|
+
});
|
|
898
|
+
proc.on("error", (err) => {
|
|
899
|
+
if (err.code === "ENOENT") {
|
|
900
|
+
resolve4({
|
|
901
|
+
success: false,
|
|
902
|
+
error: "Claude CLI not found in PATH",
|
|
903
|
+
manualCommand: MANUAL_COMMAND
|
|
904
|
+
});
|
|
905
|
+
} else {
|
|
906
|
+
resolve4({
|
|
907
|
+
success: false,
|
|
908
|
+
error: err.message,
|
|
909
|
+
manualCommand: MANUAL_COMMAND
|
|
910
|
+
});
|
|
911
|
+
}
|
|
912
|
+
});
|
|
913
|
+
proc.on("close", (code) => {
|
|
914
|
+
if (code === 0) {
|
|
915
|
+
resolve4({ success: true, output: (stdout || stderr).trim() });
|
|
916
|
+
} else {
|
|
917
|
+
resolve4({
|
|
918
|
+
success: false,
|
|
919
|
+
error: (stderr || stdout).trim() || `Process exited with code ${code}`,
|
|
920
|
+
manualCommand: MANUAL_COMMAND
|
|
921
|
+
});
|
|
922
|
+
}
|
|
923
|
+
});
|
|
924
|
+
});
|
|
925
|
+
}
|
|
926
|
+
|
|
869
927
|
// src/cli/init.ts
|
|
870
928
|
import { mkdir as mkdir2 } from "fs/promises";
|
|
871
929
|
import { join as join6 } from "path";
|
|
@@ -1028,73 +1086,6 @@ async function registerVaultWithObsidian(vaultPath, configPath = DEFAULT_CONFIG_
|
|
|
1028
1086
|
return { registered: true, vaultId };
|
|
1029
1087
|
}
|
|
1030
1088
|
|
|
1031
|
-
// src/cli/claude-code.ts
|
|
1032
|
-
import { spawn } from "child_process";
|
|
1033
|
-
import { resolve as resolvePath } from "path";
|
|
1034
|
-
function buildServerCommand() {
|
|
1035
|
-
const runtime = resolvePath(process.argv[0]);
|
|
1036
|
-
const script = resolvePath(process.argv[1]);
|
|
1037
|
-
return [runtime, script, "--stdio"];
|
|
1038
|
-
}
|
|
1039
|
-
function buildRegisterArgs(serverCmd) {
|
|
1040
|
-
return [
|
|
1041
|
-
"mcp",
|
|
1042
|
-
"add",
|
|
1043
|
-
"--transport",
|
|
1044
|
-
"stdio",
|
|
1045
|
-
"--scope",
|
|
1046
|
-
"user",
|
|
1047
|
-
"ccm",
|
|
1048
|
-
"--",
|
|
1049
|
-
...serverCmd
|
|
1050
|
-
];
|
|
1051
|
-
}
|
|
1052
|
-
function formatManualCommand(serverCmd) {
|
|
1053
|
-
return `claude mcp add --transport stdio --scope user ccm -- ${serverCmd.join(" ")}`;
|
|
1054
|
-
}
|
|
1055
|
-
function registerMcpServer() {
|
|
1056
|
-
const serverCmd = buildServerCommand();
|
|
1057
|
-
const registerArgs = buildRegisterArgs(serverCmd);
|
|
1058
|
-
const manualCommand = formatManualCommand(serverCmd);
|
|
1059
|
-
return new Promise((resolve4) => {
|
|
1060
|
-
let stdout = "";
|
|
1061
|
-
let stderr = "";
|
|
1062
|
-
const proc = spawn("claude", registerArgs, { stdio: "pipe" });
|
|
1063
|
-
proc.stdout.on("data", (data) => {
|
|
1064
|
-
stdout += data.toString();
|
|
1065
|
-
});
|
|
1066
|
-
proc.stderr.on("data", (data) => {
|
|
1067
|
-
stderr += data.toString();
|
|
1068
|
-
});
|
|
1069
|
-
proc.on("error", (err) => {
|
|
1070
|
-
if (err.code === "ENOENT") {
|
|
1071
|
-
resolve4({
|
|
1072
|
-
success: false,
|
|
1073
|
-
error: "Claude CLI not found in PATH",
|
|
1074
|
-
manualCommand
|
|
1075
|
-
});
|
|
1076
|
-
} else {
|
|
1077
|
-
resolve4({
|
|
1078
|
-
success: false,
|
|
1079
|
-
error: err.message,
|
|
1080
|
-
manualCommand
|
|
1081
|
-
});
|
|
1082
|
-
}
|
|
1083
|
-
});
|
|
1084
|
-
proc.on("close", (code) => {
|
|
1085
|
-
if (code === 0) {
|
|
1086
|
-
resolve4({ success: true, output: (stdout || stderr).trim() });
|
|
1087
|
-
} else {
|
|
1088
|
-
resolve4({
|
|
1089
|
-
success: false,
|
|
1090
|
-
error: (stderr || stdout).trim() || `Process exited with code ${code}`,
|
|
1091
|
-
manualCommand
|
|
1092
|
-
});
|
|
1093
|
-
}
|
|
1094
|
-
});
|
|
1095
|
-
});
|
|
1096
|
-
}
|
|
1097
|
-
|
|
1098
1089
|
// src/cli/init.ts
|
|
1099
1090
|
var VAULT_PATH = join6(homedir3(), ".ccm", "knowledge-base");
|
|
1100
1091
|
var SUBDIRS = ["gotchas", "decisions", "patterns", "references", "_templates"];
|
|
@@ -1181,6 +1172,10 @@ function formatInitSummary(result) {
|
|
|
1181
1172
|
var VAULT_PATH2 = join7(homedir4(), ".ccm", "knowledge-base");
|
|
1182
1173
|
function parseCliArgs() {
|
|
1183
1174
|
const args = process.argv.slice(2);
|
|
1175
|
+
if (args.includes("--version") || args.includes("-v"))
|
|
1176
|
+
return "version";
|
|
1177
|
+
if (args.includes("--update"))
|
|
1178
|
+
return "update";
|
|
1184
1179
|
if (args.includes("--init"))
|
|
1185
1180
|
return "init";
|
|
1186
1181
|
if (args.includes("--stdio"))
|
|
@@ -1191,11 +1186,47 @@ function printHelp() {
|
|
|
1191
1186
|
console.log(`${C.bold}claude-code-memory${C.reset} ${C.dim}(ccm)${C.reset} \u2014 Persistent memory for Claude Code
|
|
1192
1187
|
|
|
1193
1188
|
${C.bold}Usage:${C.reset}
|
|
1194
|
-
${C.cyan}bunx @bennys001/claude-code-memory --init${C.reset}
|
|
1189
|
+
${C.cyan}bunx @bennys001/claude-code-memory --init${C.reset} Set up vault and register MCP server
|
|
1190
|
+
${C.cyan}ccm --update${C.reset} Update to the latest version
|
|
1191
|
+
${C.cyan}ccm --version${C.reset} Show installed version
|
|
1195
1192
|
|
|
1196
1193
|
${C.dim}Vault:${C.reset} ~/.ccm/knowledge-base/
|
|
1197
1194
|
${C.dim}Docs:${C.reset} https://github.com/bennys001/claude-code-memory`);
|
|
1198
1195
|
}
|
|
1196
|
+
async function fetchLatestVersion() {
|
|
1197
|
+
const res = await fetch("https://registry.npmjs.org/@bennys001/claude-code-memory/latest");
|
|
1198
|
+
if (!res.ok)
|
|
1199
|
+
throw new Error(`npm registry returned ${res.status}`);
|
|
1200
|
+
const data = await res.json();
|
|
1201
|
+
return data.version;
|
|
1202
|
+
}
|
|
1203
|
+
function runCommand(cmd, args) {
|
|
1204
|
+
return new Promise((resolve4, reject) => {
|
|
1205
|
+
const proc = spawn2(cmd, args, { stdio: "inherit" });
|
|
1206
|
+
proc.on("error", reject);
|
|
1207
|
+
proc.on("close", (code) => {
|
|
1208
|
+
if (code === 0)
|
|
1209
|
+
resolve4();
|
|
1210
|
+
else
|
|
1211
|
+
reject(new Error(`${cmd} ${args.join(" ")} exited with code ${code}`));
|
|
1212
|
+
});
|
|
1213
|
+
});
|
|
1214
|
+
}
|
|
1215
|
+
async function runUpdate() {
|
|
1216
|
+
console.log(`${C.dim}Checking for updates...${C.reset}`);
|
|
1217
|
+
const latest = await fetchLatestVersion();
|
|
1218
|
+
if (latest === package_default.version) {
|
|
1219
|
+
console.log(`Already on the latest version: ${C.green}v${package_default.version}${C.reset}`);
|
|
1220
|
+
return;
|
|
1221
|
+
}
|
|
1222
|
+
console.log(`${C.dim}v${package_default.version}${C.reset} \u2192 ${C.green}v${latest}${C.reset}
|
|
1223
|
+
`);
|
|
1224
|
+
await runCommand("bun", ["pm", "cache", "rm"]);
|
|
1225
|
+
await runCommand("claude", ["mcp", "remove", "ccm"]);
|
|
1226
|
+
await runCommand("claude", ["mcp", "add", "--transport", "stdio", "--scope", "user", "ccm", "--", ...SERVER_CMD]);
|
|
1227
|
+
console.log(`
|
|
1228
|
+
${C.green}Updated to v${latest}${C.reset}`);
|
|
1229
|
+
}
|
|
1199
1230
|
async function runInit() {
|
|
1200
1231
|
const result = await executeInit();
|
|
1201
1232
|
console.log(formatInitSummary(result));
|
|
@@ -1226,9 +1257,17 @@ async function runServer() {
|
|
|
1226
1257
|
process.on("SIGTERM", shutdown);
|
|
1227
1258
|
}
|
|
1228
1259
|
var cli = parseCliArgs();
|
|
1229
|
-
if (cli === "
|
|
1260
|
+
if (cli === "version") {
|
|
1261
|
+
console.log(package_default.version);
|
|
1262
|
+
process.exit(0);
|
|
1263
|
+
} else if (cli === "help") {
|
|
1230
1264
|
printHelp();
|
|
1231
1265
|
process.exit(0);
|
|
1266
|
+
} else if (cli === "update") {
|
|
1267
|
+
runUpdate().catch((err) => {
|
|
1268
|
+
console.error("Fatal:", err);
|
|
1269
|
+
process.exit(1);
|
|
1270
|
+
});
|
|
1232
1271
|
} else if (cli === "init") {
|
|
1233
1272
|
runInit().catch((err) => {
|
|
1234
1273
|
console.error("Fatal:", err);
|
package/package.json
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@bennys001/claude-code-memory",
|
|
3
3
|
"publishConfig": { "access": "public" },
|
|
4
|
-
"version": "0.
|
|
4
|
+
"version": "0.10.0",
|
|
5
5
|
"description": "MCP server that gives Claude Code persistent memory via an Obsidian knowledge vault",
|
|
6
6
|
"module": "dist/index.js",
|
|
7
7
|
"main": "dist/index.js",
|