@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.
Files changed (2) hide show
  1. package/dist/index.js +109 -70
  2. 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.9.12",
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 === "help") {
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.9.12",
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",