virlow-mcp 3.14.5 → 3.14.6

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/cli.js +33 -3
  2. package/package.json +4 -4
package/dist/cli.js CHANGED
@@ -103,8 +103,38 @@ var VirlowApi = class {
103
103
  updateNote(id, body) {
104
104
  return this.request("PUT", `/api/notes/${id}`, body);
105
105
  }
106
- listFolders() {
107
- return this.request("GET", "/api/folders");
106
+ /**
107
+ * Every folder, not the first page of them.
108
+ *
109
+ * `GET /api/folders` is paginated and defaults to 20. This asked for it with
110
+ * no parameters and treated the answer as the whole set, so on an account
111
+ * with more folders than that the rest simply did not exist as far as this
112
+ * client was concerned.
113
+ *
114
+ * Nothing about that failed loudly. Folder exposure was computed from a
115
+ * partial list, so notes in later folders were invisible; and
116
+ * `resolveMemoryTree` could not find a Memories folder that was really
117
+ * there, tried to create one, and got a correct 409 "Memories folder already
118
+ * exists" — permanently, on every memory tool call, for any account past one
119
+ * page of folders. The recovery path re-listed and found nothing, because
120
+ * re-listing had the same blind spot.
121
+ *
122
+ * 50 is the API's maximum page size, so this is the fewest round trips
123
+ * available. `pages` comes from the response rather than being inferred from
124
+ * a short page: a server that clamps the limit would otherwise stop this
125
+ * after one request with no sign anything was missing.
126
+ */
127
+ async listFolders() {
128
+ const PAGE_SIZE = 50;
129
+ const folders = [];
130
+ for (let page = 1; ; page += 1) {
131
+ const result = await this.request("GET", `/api/folders?page=${page}&limit=${PAGE_SIZE}`);
132
+ folders.push(...result.folders);
133
+ const pages = result.pagination?.pages ?? 1;
134
+ if (page >= pages || result.folders.length === 0)
135
+ break;
136
+ }
137
+ return { folders };
108
138
  }
109
139
  createFolder(name, parentId, kind) {
110
140
  const body = {
@@ -1923,7 +1953,7 @@ function startUnlockServer(api, vault, opts = {}) {
1923
1953
  }
1924
1954
 
1925
1955
  // src/version.ts
1926
- var VERSION = true ? "3.14.5" : "dev";
1956
+ var VERSION = true ? "3.14.6" : "dev";
1927
1957
 
1928
1958
  // src/server.ts
1929
1959
  function defaultEmbeddingCacheDir() {
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "virlow-mcp",
3
- "version": "3.14.5",
3
+ "version": "3.14.6",
4
4
  "description": "Local MCP server for Virlow Secure Notes: end-to-end-encrypted AI memories and notes for Cursor, Claude, Codex, and any MCP client.",
5
5
  "license": "MIT",
6
6
  "type": "module",
@@ -34,9 +34,9 @@
34
34
  "esbuild": "^0.25.0",
35
35
  "typescript": "^5.8.0",
36
36
  "vitest": "^3.0.0",
37
- "@batalabs/virlow-crypto": "3.14.5",
38
- "@batalabs/virlow-memory": "3.14.5",
39
- "@batalabs/virlow-mcp-core": "3.14.5"
37
+ "@batalabs/virlow-crypto": "3.14.6",
38
+ "@batalabs/virlow-memory": "3.14.6",
39
+ "@batalabs/virlow-mcp-core": "3.14.6"
40
40
  },
41
41
  "scripts": {
42
42
  "build": "node build.mjs",