@basegrid_tech/mcp 0.18.5 → 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.
- package/dist/index.js +66 -13
- 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
|
|
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
|
|
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
|
|
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,
|
|
@@ -1557,9 +1560,50 @@ function migrateSchema(d) {
|
|
|
1557
1560
|
})();
|
|
1558
1561
|
logger_default.info("[database] migrated schema to version 34 (artifact gallery)");
|
|
1559
1562
|
}
|
|
1563
|
+
if (version < 35) {
|
|
1564
|
+
d.transaction(() => {
|
|
1565
|
+
d.exec(`
|
|
1566
|
+
UPDATE artifacts
|
|
1567
|
+
SET type = 'video'
|
|
1568
|
+
WHERE type = 'other'
|
|
1569
|
+
AND lower(ext) IN ('mp4', 'm4v', 'webm', 'mov');
|
|
1570
|
+
`);
|
|
1571
|
+
d.prepare(
|
|
1572
|
+
"INSERT OR REPLACE INTO schema_meta (key, value) VALUES ('schema_version', '35')"
|
|
1573
|
+
).run();
|
|
1574
|
+
})();
|
|
1575
|
+
logger_default.info("[database] migrated schema to version 35 (video artifact type)");
|
|
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
|
+
}
|
|
1560
1594
|
}
|
|
1561
1595
|
function verifySchema(d) {
|
|
1562
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
|
+
},
|
|
1563
1607
|
{
|
|
1564
1608
|
name: "source_connections",
|
|
1565
1609
|
ddl: `CREATE TABLE IF NOT EXISTS source_connections (
|
|
@@ -1615,7 +1659,7 @@ function verifySchema(d) {
|
|
|
1615
1659
|
d.exec(ddl);
|
|
1616
1660
|
logger_default.warn(`[database] self-heal: created missing table ${name}`);
|
|
1617
1661
|
} catch (err) {
|
|
1618
|
-
logger_default.error(`[database] self-heal: failed to create table ${name}
|
|
1662
|
+
logger_default.error({ err }, `[database] self-heal: failed to create table ${name}`);
|
|
1619
1663
|
}
|
|
1620
1664
|
}
|
|
1621
1665
|
const expectedByTable = {
|
|
@@ -1743,7 +1787,8 @@ function verifySchema(d) {
|
|
|
1743
1787
|
ddl: "ALTER TABLE external_worktree_settings ADD COLUMN hidden_paths TEXT NOT NULL DEFAULT '[]'"
|
|
1744
1788
|
}
|
|
1745
1789
|
],
|
|
1746
|
-
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" }]
|
|
1747
1792
|
};
|
|
1748
1793
|
for (const [table, columns] of Object.entries(expectedByTable)) {
|
|
1749
1794
|
const existing = new Set(
|
|
@@ -1755,7 +1800,7 @@ function verifySchema(d) {
|
|
|
1755
1800
|
d.exec(ddl);
|
|
1756
1801
|
logger_default.warn(`[database] self-heal: added missing column ${table}.${column}`);
|
|
1757
1802
|
} catch (err) {
|
|
1758
|
-
logger_default.error(`[database] self-heal: failed to add ${table}.${column}
|
|
1803
|
+
logger_default.error({ err }, `[database] self-heal: failed to add ${table}.${column}`);
|
|
1759
1804
|
}
|
|
1760
1805
|
}
|
|
1761
1806
|
}
|
|
@@ -1887,7 +1932,7 @@ function loadDefaults(d) {
|
|
|
1887
1932
|
defaults: {
|
|
1888
1933
|
...result,
|
|
1889
1934
|
shell: result.shell ?? defaultShell,
|
|
1890
|
-
fontSize: result.fontSize ??
|
|
1935
|
+
fontSize: result.fontSize ?? DEFAULT_FONT_SIZE,
|
|
1891
1936
|
theme: result.theme ?? "dark"
|
|
1892
1937
|
},
|
|
1893
1938
|
unknownKeys
|
|
@@ -2553,11 +2598,19 @@ var ConfigManager = class {
|
|
|
2553
2598
|
closeDatabase();
|
|
2554
2599
|
}
|
|
2555
2600
|
/** Полный сброс — удаляет БД и переинициализирует пустую схему.
|
|
2556
|
-
* Инвалидирует кэш и будит подписчиков, чтобы UI увидел пустой конфиг.
|
|
2601
|
+
* Инвалидирует кэш и будит подписчиков, чтобы UI увидел пустой конфиг.
|
|
2602
|
+
* Вотчер останавливаем только на время сброса и сразу поднимаем обратно:
|
|
2603
|
+
* иначе `.db-signal`-touch'и от внешних писателей (MCP stdio-процесс)
|
|
2604
|
+
* игнорировались бы до перезапуска сервера. */
|
|
2557
2605
|
factoryReset() {
|
|
2606
|
+
const wasWatching = this.dbWatcher !== null;
|
|
2558
2607
|
this.stopWatchingDb();
|
|
2559
2608
|
this.cachedConfig = null;
|
|
2560
|
-
|
|
2609
|
+
try {
|
|
2610
|
+
factoryResetDatabase();
|
|
2611
|
+
} finally {
|
|
2612
|
+
if (wasWatching) this.watchDb();
|
|
2613
|
+
}
|
|
2561
2614
|
this.notifyChanged();
|
|
2562
2615
|
}
|
|
2563
2616
|
loadConfig() {
|
|
@@ -2568,12 +2621,12 @@ var ConfigManager = class {
|
|
|
2568
2621
|
this.cachedConfig = seeded;
|
|
2569
2622
|
return seeded;
|
|
2570
2623
|
} catch (err) {
|
|
2571
|
-
logger_default.error("[config-manager] loadConfig failed, returning defaults
|
|
2624
|
+
logger_default.error({ err }, "[config-manager] loadConfig failed, returning defaults");
|
|
2572
2625
|
return {
|
|
2573
2626
|
version: 1,
|
|
2574
2627
|
defaults: {
|
|
2575
2628
|
shell: process.platform === "win32" ? process.env.COMSPEC || "powershell.exe" : process.env.SHELL || "/bin/zsh",
|
|
2576
|
-
fontSize:
|
|
2629
|
+
fontSize: DEFAULT_FONT_SIZE,
|
|
2577
2630
|
theme: "dark"
|
|
2578
2631
|
},
|
|
2579
2632
|
projects: [],
|
|
@@ -2658,7 +2711,7 @@ var ConfigManager = class {
|
|
|
2658
2711
|
saveConfig(config);
|
|
2659
2712
|
this.cachedConfig = null;
|
|
2660
2713
|
} catch (err) {
|
|
2661
|
-
logger_default.error("[config-manager] saveConfig failed
|
|
2714
|
+
logger_default.error({ err }, "[config-manager] saveConfig failed");
|
|
2662
2715
|
throw err;
|
|
2663
2716
|
}
|
|
2664
2717
|
}
|
|
@@ -4491,7 +4544,7 @@ console.warn = (...args) => _origError("[mcp:warn]", ...args);
|
|
|
4491
4544
|
console.error = (...args) => _origError("[mcp:error]", ...args);
|
|
4492
4545
|
async function main() {
|
|
4493
4546
|
configManager.init();
|
|
4494
|
-
const version = true ? "0.18.
|
|
4547
|
+
const version = true ? "0.18.7" : createRequire(import.meta.url)("../package.json").version;
|
|
4495
4548
|
const server = createMcpServer(version);
|
|
4496
4549
|
const transport = new StdioServerTransport();
|
|
4497
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.
|
|
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.
|
|
46
|
-
"@basegrid/shared": "0.18.
|
|
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"
|