@basegrid_tech/mcp 0.18.6 → 0.18.7

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 +52 -13
  2. package/package.json +3 -3
package/dist/index.js CHANGED
@@ -74,6 +74,7 @@ var QUICK_COMMAND_LIMITS = {
74
74
  maxBody: 4e3,
75
75
  maxShellPath: 512
76
76
  };
77
+ var DEFAULT_FONT_SIZE = 13;
77
78
 
78
79
  // ../shared/src/agent-defaults.ts
79
80
  var DEFAULT_AGENT_COMMANDS = {
@@ -283,7 +284,7 @@ function initDatabase() {
283
284
  createSchema();
284
285
  seedSystemDefaults();
285
286
  } catch (err) {
286
- logger_default.error("[database] Failed to open database:", err);
287
+ logger_default.error({ err }, "[database] Failed to open database");
287
288
  const message = err instanceof Error ? err.message : String(err);
288
289
  const isCorrupt = /corrupt|notadb|malformed|not a database|file is not a database/i.test(
289
290
  message
@@ -348,7 +349,7 @@ function recoverCorruptDatabase() {
348
349
  if (fs3.existsSync(file)) fs3.unlinkSync(file);
349
350
  }
350
351
  } catch (backupErr) {
351
- logger_default.error("[database] Failed to back up corrupt database:", backupErr);
352
+ logger_default.error({ err: backupErr }, "[database] Failed to back up corrupt database");
352
353
  }
353
354
  try {
354
355
  db = new Database(DB_PATH);
@@ -358,7 +359,7 @@ function recoverCorruptDatabase() {
358
359
  seedSystemDefaults();
359
360
  logger_default.info("[database] Successfully created fresh database after corruption recovery");
360
361
  } catch (freshErr) {
361
- logger_default.error("[database] Failed to create fresh database after corruption:", freshErr);
362
+ logger_default.error({ err: freshErr }, "[database] Failed to create fresh database after corruption");
362
363
  throw freshErr;
363
364
  }
364
365
  logger_default.warn(`[database] Database was corrupted and has been reset. Backup saved to: ${backupPath}`);
@@ -528,6 +529,7 @@ function createSchema() {
528
529
  email TEXT NOT NULL,
529
530
  plan TEXT NOT NULL DEFAULT 'free',
530
531
  plan_expires_at TEXT,
532
+ member_since TEXT,
531
533
  encrypted_access_token TEXT NOT NULL,
532
534
  encrypted_refresh_token TEXT NOT NULL,
533
535
  token_expires_at INTEGER NOT NULL,
@@ -1327,6 +1329,7 @@ function migrateSchema(d) {
1327
1329
  email TEXT NOT NULL,
1328
1330
  plan TEXT NOT NULL DEFAULT 'free',
1329
1331
  plan_expires_at TEXT,
1332
+ member_since TEXT,
1330
1333
  encrypted_access_token TEXT NOT NULL,
1331
1334
  encrypted_refresh_token TEXT NOT NULL,
1332
1335
  token_expires_at INTEGER NOT NULL,
@@ -1571,9 +1574,36 @@ function migrateSchema(d) {
1571
1574
  })();
1572
1575
  logger_default.info("[database] migrated schema to version 35 (video artifact type)");
1573
1576
  }
1577
+ if (version < 36) {
1578
+ d.transaction(() => {
1579
+ d.exec(`
1580
+ CREATE TABLE IF NOT EXISTS pending_worktree_cleanup (
1581
+ worktree_path TEXT PRIMARY KEY,
1582
+ project_path TEXT NOT NULL,
1583
+ last_error TEXT NOT NULL,
1584
+ attempts INTEGER NOT NULL DEFAULT 0,
1585
+ updated_at INTEGER NOT NULL
1586
+ );
1587
+ `);
1588
+ d.prepare(
1589
+ "INSERT OR REPLACE INTO schema_meta (key, value) VALUES ('schema_version', '36')"
1590
+ ).run();
1591
+ })();
1592
+ logger_default.info("[database] migrated schema to version 36 (persistent worktree cleanup queue)");
1593
+ }
1574
1594
  }
1575
1595
  function verifySchema(d) {
1576
1596
  const expectedTables = [
1597
+ {
1598
+ name: "pending_worktree_cleanup",
1599
+ ddl: `CREATE TABLE IF NOT EXISTS pending_worktree_cleanup (
1600
+ worktree_path TEXT PRIMARY KEY,
1601
+ project_path TEXT NOT NULL,
1602
+ last_error TEXT NOT NULL,
1603
+ attempts INTEGER NOT NULL DEFAULT 0,
1604
+ updated_at INTEGER NOT NULL
1605
+ )`
1606
+ },
1577
1607
  {
1578
1608
  name: "source_connections",
1579
1609
  ddl: `CREATE TABLE IF NOT EXISTS source_connections (
@@ -1629,7 +1659,7 @@ function verifySchema(d) {
1629
1659
  d.exec(ddl);
1630
1660
  logger_default.warn(`[database] self-heal: created missing table ${name}`);
1631
1661
  } catch (err) {
1632
- logger_default.error(`[database] self-heal: failed to create table ${name}:`, err);
1662
+ logger_default.error({ err }, `[database] self-heal: failed to create table ${name}`);
1633
1663
  }
1634
1664
  }
1635
1665
  const expectedByTable = {
@@ -1757,7 +1787,8 @@ function verifySchema(d) {
1757
1787
  ddl: "ALTER TABLE external_worktree_settings ADD COLUMN hidden_paths TEXT NOT NULL DEFAULT '[]'"
1758
1788
  }
1759
1789
  ],
1760
- quick_commands: [{ column: "shell", ddl: "ALTER TABLE quick_commands ADD COLUMN shell TEXT" }]
1790
+ quick_commands: [{ column: "shell", ddl: "ALTER TABLE quick_commands ADD COLUMN shell TEXT" }],
1791
+ account: [{ column: "member_since", ddl: "ALTER TABLE account ADD COLUMN member_since TEXT" }]
1761
1792
  };
1762
1793
  for (const [table, columns] of Object.entries(expectedByTable)) {
1763
1794
  const existing = new Set(
@@ -1769,7 +1800,7 @@ function verifySchema(d) {
1769
1800
  d.exec(ddl);
1770
1801
  logger_default.warn(`[database] self-heal: added missing column ${table}.${column}`);
1771
1802
  } catch (err) {
1772
- logger_default.error(`[database] self-heal: failed to add ${table}.${column}:`, err);
1803
+ logger_default.error({ err }, `[database] self-heal: failed to add ${table}.${column}`);
1773
1804
  }
1774
1805
  }
1775
1806
  }
@@ -1901,7 +1932,7 @@ function loadDefaults(d) {
1901
1932
  defaults: {
1902
1933
  ...result,
1903
1934
  shell: result.shell ?? defaultShell,
1904
- fontSize: result.fontSize ?? 12,
1935
+ fontSize: result.fontSize ?? DEFAULT_FONT_SIZE,
1905
1936
  theme: result.theme ?? "dark"
1906
1937
  },
1907
1938
  unknownKeys
@@ -2567,11 +2598,19 @@ var ConfigManager = class {
2567
2598
  closeDatabase();
2568
2599
  }
2569
2600
  /** Полный сброс — удаляет БД и переинициализирует пустую схему.
2570
- * Инвалидирует кэш и будит подписчиков, чтобы UI увидел пустой конфиг. */
2601
+ * Инвалидирует кэш и будит подписчиков, чтобы UI увидел пустой конфиг.
2602
+ * Вотчер останавливаем только на время сброса и сразу поднимаем обратно:
2603
+ * иначе `.db-signal`-touch'и от внешних писателей (MCP stdio-процесс)
2604
+ * игнорировались бы до перезапуска сервера. */
2571
2605
  factoryReset() {
2606
+ const wasWatching = this.dbWatcher !== null;
2572
2607
  this.stopWatchingDb();
2573
2608
  this.cachedConfig = null;
2574
- factoryResetDatabase();
2609
+ try {
2610
+ factoryResetDatabase();
2611
+ } finally {
2612
+ if (wasWatching) this.watchDb();
2613
+ }
2575
2614
  this.notifyChanged();
2576
2615
  }
2577
2616
  loadConfig() {
@@ -2582,12 +2621,12 @@ var ConfigManager = class {
2582
2621
  this.cachedConfig = seeded;
2583
2622
  return seeded;
2584
2623
  } catch (err) {
2585
- logger_default.error("[config-manager] loadConfig failed, returning defaults:", err);
2624
+ logger_default.error({ err }, "[config-manager] loadConfig failed, returning defaults");
2586
2625
  return {
2587
2626
  version: 1,
2588
2627
  defaults: {
2589
2628
  shell: process.platform === "win32" ? process.env.COMSPEC || "powershell.exe" : process.env.SHELL || "/bin/zsh",
2590
- fontSize: 13,
2629
+ fontSize: DEFAULT_FONT_SIZE,
2591
2630
  theme: "dark"
2592
2631
  },
2593
2632
  projects: [],
@@ -2672,7 +2711,7 @@ var ConfigManager = class {
2672
2711
  saveConfig(config);
2673
2712
  this.cachedConfig = null;
2674
2713
  } catch (err) {
2675
- logger_default.error("[config-manager] saveConfig failed:", err);
2714
+ logger_default.error({ err }, "[config-manager] saveConfig failed");
2676
2715
  throw err;
2677
2716
  }
2678
2717
  }
@@ -4505,7 +4544,7 @@ console.warn = (...args) => _origError("[mcp:warn]", ...args);
4505
4544
  console.error = (...args) => _origError("[mcp:error]", ...args);
4506
4545
  async function main() {
4507
4546
  configManager.init();
4508
- const version = true ? "0.18.6" : createRequire(import.meta.url)("../package.json").version;
4547
+ const version = true ? "0.18.7" : createRequire(import.meta.url)("../package.json").version;
4509
4548
  const server = createMcpServer(version);
4510
4549
  const transport = new StdioServerTransport();
4511
4550
  await server.connect(transport);
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@basegrid_tech/mcp",
3
- "version": "0.18.6",
3
+ "version": "0.18.7",
4
4
  "description": "BaseGrid MCP server — task management, git, and workflow tools for AI coding agents",
5
5
  "type": "module",
6
6
  "license": "MIT",
@@ -42,8 +42,8 @@
42
42
  "zod": "^4.3.6"
43
43
  },
44
44
  "devDependencies": {
45
- "@basegrid/server": "0.18.6",
46
- "@basegrid/shared": "0.18.6",
45
+ "@basegrid/server": "0.18.7",
46
+ "@basegrid/shared": "0.18.7",
47
47
  "tsup": "^8.5.1",
48
48
  "tsx": "^4.21.0",
49
49
  "typescript": "^6.0.3"