@vibegrid/mcp 0.2.2 → 0.3.0-beta.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.
Files changed (2) hide show
  1. package/dist/index.js +35 -6
  2. package/package.json +2 -2
package/dist/index.js CHANGED
@@ -35,7 +35,7 @@ var DEFAULT_AGENT_COMMANDS = {
35
35
  };
36
36
 
37
37
  // ../server/src/database.ts
38
- import Database from "better-sqlite3";
38
+ import Database from "libsql";
39
39
  import path from "path";
40
40
  import os from "os";
41
41
  import fs from "fs";
@@ -120,6 +120,13 @@ function recoverCorruptDatabase() {
120
120
  }
121
121
  logger_default.warn(`[database] Database was corrupted and has been reset. Backup saved to: ${backupPath}`);
122
122
  }
123
+ function dbSignalChange() {
124
+ try {
125
+ const signalPath = path.join(CONFIG_DIR, ".db-signal");
126
+ fs.writeFileSync(signalPath, Date.now().toString());
127
+ } catch {
128
+ }
129
+ }
123
130
  function closeDatabase() {
124
131
  if (db) {
125
132
  db.close();
@@ -407,6 +414,15 @@ function loadDefaults(d) {
407
414
  },
408
415
  ...map.updateChannel !== void 0 && {
409
416
  updateChannel: map.updateChannel
417
+ },
418
+ ...map.webAccessEnabled !== void 0 && {
419
+ webAccessEnabled: map.webAccessEnabled
420
+ },
421
+ ...map.mobileAccessEnabled !== void 0 && {
422
+ mobileAccessEnabled: map.mobileAccessEnabled
423
+ },
424
+ ...map.networkAccessEnabled !== void 0 && {
425
+ networkAccessEnabled: map.networkAccessEnabled
410
426
  }
411
427
  };
412
428
  }
@@ -1002,18 +1018,19 @@ var ConfigManager = class {
1002
1018
  }
1003
1019
  }
1004
1020
  /**
1005
- * Watch the SQLite WAL file for external writes (e.g. MCP stdio process).
1006
- * On change, debounce and notify callbacks so the GUI picks up fresh data.
1021
+ * Watch for external DB writes (e.g. MCP stdio process).
1022
+ * Detects: .db-signal (explicit), .db-wal changes, and .db changes (post-checkpoint).
1007
1023
  */
1008
1024
  watchDb() {
1009
1025
  if (this.dbWatcher) return;
1026
+ const WATCH_SUFFIXES = [".db-signal", ".db-wal", ".db"];
1010
1027
  try {
1011
1028
  this.dbWatcher = fs2.watch(DB_DIR, (eventType, filename) => {
1012
- if (!filename || !filename.endsWith(".db-wal")) return;
1029
+ if (!filename || !WATCH_SUFFIXES.some((s) => filename.endsWith(s))) return;
1013
1030
  if (this.debounceTimer) clearTimeout(this.debounceTimer);
1014
1031
  this.debounceTimer = setTimeout(() => {
1015
1032
  this.notifyChanged();
1016
- }, 1e3);
1033
+ }, 300);
1017
1034
  });
1018
1035
  } catch {
1019
1036
  }
@@ -1139,6 +1156,7 @@ function registerTaskTools(server) {
1139
1156
  ...(status === "done" || status === "cancelled") && { completedAt: now }
1140
1157
  };
1141
1158
  dbInsertTask(task);
1159
+ dbSignalChange();
1142
1160
  return { content: [{ type: "text", text: JSON.stringify(task, null, 2) }] };
1143
1161
  }
1144
1162
  );
@@ -1190,6 +1208,7 @@ function registerTaskTools(server) {
1190
1208
  if (!isDone && wasDone) updates.completedAt = void 0;
1191
1209
  }
1192
1210
  dbUpdateTask(args.id, updates);
1211
+ dbSignalChange();
1193
1212
  const updated = dbGetTask(args.id);
1194
1213
  return { content: [{ type: "text", text: JSON.stringify(updated, null, 2) }] };
1195
1214
  }
@@ -1207,6 +1226,7 @@ function registerTaskTools(server) {
1207
1226
  };
1208
1227
  }
1209
1228
  dbDeleteTask(args.id);
1229
+ dbSignalChange();
1210
1230
  return { content: [{ type: "text", text: `Deleted task: ${task.title}` }] };
1211
1231
  }
1212
1232
  );
@@ -1370,6 +1390,7 @@ function registerProjectTools(server) {
1370
1390
  ...args.icon_color && { iconColor: args.icon_color }
1371
1391
  };
1372
1392
  dbInsertProject(project);
1393
+ dbSignalChange();
1373
1394
  return { content: [{ type: "text", text: JSON.stringify(project, null, 2) }] };
1374
1395
  }
1375
1396
  );
@@ -1397,6 +1418,7 @@ function registerProjectTools(server) {
1397
1418
  if (args.icon !== void 0) updates.icon = args.icon;
1398
1419
  if (args.icon_color !== void 0) updates.iconColor = args.icon_color;
1399
1420
  dbUpdateProject(args.name, updates);
1421
+ dbSignalChange();
1400
1422
  const updated = dbGetProject(args.name);
1401
1423
  return { content: [{ type: "text", text: JSON.stringify(updated, null, 2) }] };
1402
1424
  }
@@ -1413,6 +1435,7 @@ function registerProjectTools(server) {
1413
1435
  };
1414
1436
  }
1415
1437
  dbDeleteProject(args.name);
1438
+ dbSignalChange();
1416
1439
  return { content: [{ type: "text", text: `Deleted project: ${args.name}` }] };
1417
1440
  }
1418
1441
  );
@@ -1871,6 +1894,7 @@ function registerWorkflowTools(server) {
1871
1894
  ...args.stagger_delay_ms && { staggerDelayMs: args.stagger_delay_ms }
1872
1895
  };
1873
1896
  dbInsertWorkflow(workflow);
1897
+ dbSignalChange();
1874
1898
  return { content: [{ type: "text", text: JSON.stringify(workflow, null, 2) }] };
1875
1899
  }
1876
1900
  );
@@ -1905,6 +1929,7 @@ function registerWorkflowTools(server) {
1905
1929
  if (args.enabled !== void 0) updates.enabled = args.enabled;
1906
1930
  if (args.stagger_delay_ms !== void 0) updates.staggerDelayMs = args.stagger_delay_ms;
1907
1931
  dbUpdateWorkflow(args.id, updates);
1932
+ dbSignalChange();
1908
1933
  return {
1909
1934
  content: [{ type: "text", text: JSON.stringify({ ...workflow, ...updates }, null, 2) }]
1910
1935
  };
@@ -1924,6 +1949,7 @@ function registerWorkflowTools(server) {
1924
1949
  };
1925
1950
  }
1926
1951
  dbDeleteWorkflow(args.id);
1952
+ dbSignalChange();
1927
1953
  return { content: [{ type: "text", text: `Deleted workflow: ${workflow.name}` }] };
1928
1954
  }
1929
1955
  );
@@ -2429,6 +2455,7 @@ function registerWorkspaceTools(server) {
2429
2455
  ...args.icon_color && { iconColor: args.icon_color }
2430
2456
  };
2431
2457
  dbInsertWorkspace(workspace);
2458
+ dbSignalChange();
2432
2459
  return { content: [{ type: "text", text: JSON.stringify(workspace, null, 2) }] };
2433
2460
  }
2434
2461
  );
@@ -2456,6 +2483,7 @@ function registerWorkspaceTools(server) {
2456
2483
  if (args.icon_color !== void 0) updates.iconColor = args.icon_color;
2457
2484
  if (args.order !== void 0) updates.order = args.order;
2458
2485
  dbUpdateWorkspace(args.id, updates);
2486
+ dbSignalChange();
2459
2487
  const updated = dbListWorkspaces().find((w) => w.id === args.id);
2460
2488
  return { content: [{ type: "text", text: JSON.stringify(updated, null, 2) }] };
2461
2489
  }
@@ -2480,6 +2508,7 @@ function registerWorkspaceTools(server) {
2480
2508
  };
2481
2509
  }
2482
2510
  dbDeleteWorkspace(args.id);
2511
+ dbSignalChange();
2483
2512
  return { content: [{ type: "text", text: `Deleted workspace: ${workspace.name}` }] };
2484
2513
  }
2485
2514
  );
@@ -2507,7 +2536,7 @@ console.warn = (...args) => _origError("[mcp:warn]", ...args);
2507
2536
  console.error = (...args) => _origError("[mcp:error]", ...args);
2508
2537
  async function main() {
2509
2538
  configManager.init();
2510
- const version = true ? "0.2.2" : createRequire(import.meta.url)("../package.json").version;
2539
+ const version = true ? "0.3.0-beta.1" : createRequire(import.meta.url)("../package.json").version;
2511
2540
  const server = createMcpServer(version);
2512
2541
  const transport = new StdioServerTransport();
2513
2542
  await server.connect(transport);
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@vibegrid/mcp",
3
- "version": "0.2.2",
3
+ "version": "0.3.0-beta.1",
4
4
  "description": "VibeGrid MCP server — task management, git, and workflow tools for AI coding agents",
5
5
  "type": "module",
6
6
  "license": "MIT",
@@ -31,7 +31,7 @@
31
31
  },
32
32
  "dependencies": {
33
33
  "@modelcontextprotocol/sdk": "^1.27.1",
34
- "better-sqlite3": "^12.8.0",
34
+ "libsql": "^0.5.22",
35
35
  "pino": "^9.6.0",
36
36
  "ws": "^8.18.0",
37
37
  "zod": "^4.3.6"