@vheins/local-memory-mcp 0.8.0 → 0.8.2

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.
@@ -42,7 +42,7 @@ import {
42
42
  setLogLevel,
43
43
  updateSessionFromInitialize,
44
44
  updateSessionRoots
45
- } from "../chunk-CQK2B6SF.js";
45
+ } from "../chunk-MC6NSQJ6.js";
46
46
 
47
47
  // src/mcp/server.ts
48
48
  import readline from "readline";
@@ -1875,68 +1875,73 @@ function createRouter(db2, vectors2, options) {
1875
1875
  throw new Error(`Unsupported method: ${method}`);
1876
1876
  }
1877
1877
  }
1878
+ const WRITE_TOOLS = /* @__PURE__ */ new Set([
1879
+ "memory-store",
1880
+ "memory-acknowledge",
1881
+ "memory-update",
1882
+ "memory-delete",
1883
+ "memory-bulk-delete",
1884
+ "memory-summarize",
1885
+ "task-create",
1886
+ "task-create-interactive",
1887
+ "task-update",
1888
+ "task-delete"
1889
+ ]);
1878
1890
  async function handleToolCall(params, signal, onProgress) {
1879
1891
  const { name } = params || {};
1880
1892
  const args = normalizeToolArguments(params?.arguments, getSessionContext?.());
1881
1893
  const toolName = String(name).replace(/\./g, "-");
1882
1894
  let result;
1883
1895
  const repo = args?.repo || args?.scope?.repo || "unknown";
1884
- switch (toolName) {
1885
- case "memory-store":
1886
- result = await handleMemoryStore(args, db2, vectors2);
1887
- break;
1888
- case "memory-acknowledge":
1889
- result = await handleMemoryAcknowledge(args, db2);
1890
- break;
1891
- case "memory-update":
1892
- result = await handleMemoryUpdate(args, db2, vectors2);
1893
- break;
1894
- case "memory-recap":
1895
- result = await handleMemoryRecap(args, db2);
1896
- break;
1897
- case "memory-search":
1898
- result = await handleMemorySearch(args, db2, vectors2);
1899
- break;
1900
- case "memory-summarize":
1901
- result = await handleMemorySummarize(args, db2);
1902
- break;
1903
- case "memory-synthesize":
1904
- result = await handleMemorySynthesize(args, db2, vectors2, {
1905
- session: getSessionContext?.(),
1906
- sampleMessage: options?.sampleMessage,
1907
- elicit: options?.elicit
1908
- });
1909
- break;
1910
- case "memory-delete":
1911
- case "memory-bulk-delete":
1912
- result = await handleMemoryDelete(args, db2, vectors2, onProgress);
1913
- break;
1914
- case "memory-detail":
1915
- result = await handleMemoryDetail(args, db2);
1916
- break;
1917
- case "task-create":
1918
- result = await handleTaskCreate(args, db2);
1919
- break;
1920
- case "task-create-interactive":
1921
- result = await handleTaskCreateInteractive(args, db2, {
1922
- session: getSessionContext?.(),
1923
- elicit: options?.elicit
1924
- });
1925
- break;
1926
- case "task-update":
1927
- result = await handleTaskUpdate(args, db2, vectors2);
1928
- break;
1929
- case "task-delete":
1930
- result = await handleTaskDelete(args, db2);
1931
- break;
1932
- case "task-list":
1933
- result = await handleTaskList(args, db2);
1934
- break;
1935
- case "task-detail":
1936
- result = await handleTaskGet(args, db2);
1937
- break;
1938
- default:
1939
- throw new Error(`Unknown tool: ${name}`);
1896
+ const isWrite = WRITE_TOOLS.has(toolName);
1897
+ const executeToolLogic = async () => {
1898
+ switch (toolName) {
1899
+ case "memory-store":
1900
+ return await handleMemoryStore(args, db2, vectors2);
1901
+ case "memory-acknowledge":
1902
+ return await handleMemoryAcknowledge(args, db2);
1903
+ case "memory-update":
1904
+ return await handleMemoryUpdate(args, db2, vectors2);
1905
+ case "memory-recap":
1906
+ return await handleMemoryRecap(args, db2);
1907
+ case "memory-search":
1908
+ return await handleMemorySearch(args, db2, vectors2);
1909
+ case "memory-summarize":
1910
+ return await handleMemorySummarize(args, db2);
1911
+ case "memory-synthesize":
1912
+ return await handleMemorySynthesize(args, db2, vectors2, {
1913
+ session: getSessionContext?.(),
1914
+ sampleMessage: options?.sampleMessage,
1915
+ elicit: options?.elicit
1916
+ });
1917
+ case "memory-delete":
1918
+ case "memory-bulk-delete":
1919
+ return await handleMemoryDelete(args, db2, vectors2, onProgress);
1920
+ case "memory-detail":
1921
+ return await handleMemoryDetail(args, db2);
1922
+ case "task-create":
1923
+ return await handleTaskCreate(args, db2);
1924
+ case "task-create-interactive":
1925
+ return await handleTaskCreateInteractive(args, db2, {
1926
+ session: getSessionContext?.(),
1927
+ elicit: options?.elicit
1928
+ });
1929
+ case "task-update":
1930
+ return await handleTaskUpdate(args, db2, vectors2);
1931
+ case "task-delete":
1932
+ return await handleTaskDelete(args, db2);
1933
+ case "task-list":
1934
+ return await handleTaskList(args, db2);
1935
+ case "task-detail":
1936
+ return await handleTaskGet(args, db2);
1937
+ default:
1938
+ throw new Error(`Unknown tool: ${name}`);
1939
+ }
1940
+ };
1941
+ if (isWrite) {
1942
+ result = await db2.withWrite(executeToolLogic);
1943
+ } else {
1944
+ result = await executeToolLogic();
1940
1945
  }
1941
1946
  try {
1942
1947
  const actionType = toolName.split("-")[1] || toolName;
@@ -1949,7 +1954,11 @@ function createRouter(db2, vectors2, options) {
1949
1954
  taskId: args?.id || args?.task_id || sc?.id,
1950
1955
  resultCount: Array.isArray(sc?.results) ? sc.results.length : sc?.count || 0
1951
1956
  };
1952
- db2.actions.logAction(actionType, repo, logOptions);
1957
+ if (isWrite) {
1958
+ db2.actions.logAction(actionType, repo, logOptions);
1959
+ } else {
1960
+ await db2.withWrite(() => db2.actions.logAction(actionType, repo, logOptions));
1961
+ }
1953
1962
  } catch (e) {
1954
1963
  logger.error("Failed to log action", { toolName, error: String(e) });
1955
1964
  }
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@vheins/local-memory-mcp",
3
- "version": "0.8.0",
3
+ "version": "0.8.2",
4
4
  "description": "MCP Local Memory Service for coding copilot agents",
5
5
  "mcpName": "io.github.vheins/local-memory-mcp",
6
6
  "type": "module",
@@ -44,6 +44,7 @@
44
44
  "format": "prettier --write \"src/**/*.{ts,js,svelte}\""
45
45
  },
46
46
  "dependencies": {
47
+ "@types/proper-lockfile": "^4.1.4",
47
48
  "@xenova/transformers": "^2.17.2",
48
49
  "better-sqlite3": "^12.9.0",
49
50
  "chart.js": "^4.5.1",
@@ -51,6 +52,7 @@
51
52
  "express": "^5.2.1",
52
53
  "gray-matter": "^4.0.3",
53
54
  "marked": "^18.0.0",
55
+ "proper-lockfile": "^4.1.2",
54
56
  "qs": "^6.15.0",
55
57
  "zod": "^4.3.5"
56
58
  },