@basegrid_tech/mcp 0.15.1 → 0.15.3

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 +150 -10
  2. package/package.json +3 -3
package/dist/index.js CHANGED
@@ -8,19 +8,59 @@ import { StdioServerTransport } from "@modelcontextprotocol/sdk/server/stdio.js"
8
8
  import fs4 from "fs";
9
9
 
10
10
  // ../shared/src/types.ts
11
- var CLAUDE_DEFAULT_MODEL_ID = "claude-sonnet-5";
11
+ var CLAUDE_DEFAULT_MODEL_ID = "claude-opus-5";
12
12
  var CLAUDE_DEFAULT_EFFORT = "medium";
13
13
  var CLAUDE_OBSOLETE_MODEL_IDS = [
14
14
  "claude-opus-4-7[1m]",
15
- "claude-opus-4-6[1m]"
15
+ "claude-opus-4-6[1m]",
16
+ // Opus 4.1 уходит в retirement 2026-08-05 — после этой даты Anthropic
17
+ // отвечает 404, поэтому убран из пикера и мигрируется на дефолт.
18
+ "claude-opus-4-1"
16
19
  ];
17
- var CODEX_DEFAULT_MODEL_ID = "gpt-5.5";
20
+ var CODEX_EFFORT_LEVELS = [
21
+ "low",
22
+ "medium",
23
+ "high",
24
+ "xhigh",
25
+ "max",
26
+ "ultra"
27
+ ];
28
+ var CODEX_DEFAULT_MODEL_ID = "gpt-5.6-terra";
18
29
  var CODEX_OBSOLETE_MODEL_IDS = [
19
30
  "gpt-5-codex",
20
- "gpt-5.4-mini",
21
- "gpt-5.2"
31
+ "gpt-5.2",
32
+ // Выпали из shipping-списка CLI к 0.145.0. `gpt-5.4-mini` наоборот
33
+ // вернулся в пикер, поэтому в obsolete его больше нет.
34
+ "gpt-5.4",
35
+ "gpt-5.3-codex-spark",
36
+ "gpt-5.3-codex",
37
+ "gpt-5.2-codex"
22
38
  ];
23
39
  var CODEX_DEFAULT_EFFORT = "medium";
40
+ var CODEX_EFFORTS_BY_MODEL = {
41
+ "gpt-5.6-terra": ["low", "medium", "high", "xhigh", "max", "ultra"],
42
+ "gpt-5.6-luna": ["low", "medium", "high", "xhigh", "max"],
43
+ "gpt-5.5": ["low", "medium", "high", "xhigh"],
44
+ "gpt-5.4-mini": ["low", "medium", "high", "xhigh"]
45
+ };
46
+ var CODEX_EFFORTS_FALLBACK = ["low", "medium", "high", "xhigh"];
47
+ function getCodexEfforts(model) {
48
+ if (!model) return CODEX_EFFORTS_FALLBACK;
49
+ return CODEX_EFFORTS_BY_MODEL[model] ?? CODEX_EFFORTS_FALLBACK;
50
+ }
51
+ function normalizeCodexEffort(value, model) {
52
+ const supported = getCodexEfforts(model);
53
+ const raw = value === "minimal" ? "low" : value;
54
+ if (typeof raw === "string" && supported.includes(raw)) {
55
+ return raw;
56
+ }
57
+ const idx = CODEX_EFFORT_LEVELS.indexOf(raw);
58
+ if (idx < 0) return CODEX_DEFAULT_EFFORT;
59
+ for (let i = idx; i >= 0; i--) {
60
+ if (supported.includes(CODEX_EFFORT_LEVELS[i])) return CODEX_EFFORT_LEVELS[i];
61
+ }
62
+ return CODEX_DEFAULT_EFFORT;
63
+ }
24
64
  var DEFAULT_WORKSPACE = {
25
65
  id: "personal",
26
66
  name: "Personal",
@@ -675,6 +715,12 @@ function createSchema() {
675
715
  updated_at INTEGER NOT NULL
676
716
  );
677
717
 
718
+ CREATE TABLE IF NOT EXISTS worktree_view_modes (
719
+ worktree_path TEXT PRIMARY KEY,
720
+ view_mode TEXT NOT NULL,
721
+ updated_at INTEGER NOT NULL
722
+ );
723
+
678
724
  CREATE TABLE IF NOT EXISTS worktree_list_cache (
679
725
  project_path TEXT NOT NULL,
680
726
  worktree_path TEXT NOT NULL,
@@ -685,6 +731,7 @@ function createSchema() {
685
731
  alias_generated_at INTEGER,
686
732
  sort_order INTEGER NOT NULL DEFAULT 0,
687
733
  is_auto_generated INTEGER,
734
+ ownership TEXT,
688
735
  updated_at INTEGER NOT NULL,
689
736
  PRIMARY KEY (project_path, worktree_path)
690
737
  );
@@ -692,6 +739,17 @@ function createSchema() {
692
739
  CREATE INDEX IF NOT EXISTS idx_worktree_list_project
693
740
  ON worktree_list_cache(project_path);
694
741
 
742
+ CREATE TABLE IF NOT EXISTS external_worktree_settings (
743
+ project_path TEXT PRIMARY KEY,
744
+ visibility TEXT NOT NULL DEFAULT 'hide',
745
+ prompt_dismissed_at INTEGER,
746
+ discovery_suppressed_at INTEGER,
747
+ imported_paths TEXT NOT NULL DEFAULT '[]',
748
+ hidden_paths TEXT NOT NULL DEFAULT '[]',
749
+ baseline_paths TEXT NOT NULL DEFAULT '[]',
750
+ updated_at INTEGER NOT NULL
751
+ );
752
+
695
753
  CREATE TABLE IF NOT EXISTS usage_metrics (
696
754
  id INTEGER PRIMARY KEY AUTOINCREMENT,
697
755
  terminal_id TEXT NOT NULL,
@@ -1306,6 +1364,53 @@ function migrateSchema(d) {
1306
1364
  })();
1307
1365
  logger_default.info("[database] migrated schema to version 27 (projects.basegrid_config overrides)");
1308
1366
  }
1367
+ if (version < 28) {
1368
+ d.transaction(() => {
1369
+ const cols = d.prepare("PRAGMA table_info(worktree_list_cache)").all();
1370
+ if (!cols.some((c) => c.name === "ownership")) {
1371
+ d.exec("ALTER TABLE worktree_list_cache ADD COLUMN ownership TEXT");
1372
+ }
1373
+ d.exec("UPDATE worktree_list_cache SET ownership = 'managed' WHERE ownership IS NULL");
1374
+ d.prepare(
1375
+ "INSERT OR REPLACE INTO schema_meta (key, value) VALUES ('schema_version', '28')"
1376
+ ).run();
1377
+ })();
1378
+ logger_default.info("[database] migrated schema to version 28 (worktree_list_cache.ownership)");
1379
+ }
1380
+ if (version < 29) {
1381
+ d.transaction(() => {
1382
+ d.exec(`
1383
+ CREATE TABLE IF NOT EXISTS external_worktree_settings (
1384
+ project_path TEXT PRIMARY KEY,
1385
+ visibility TEXT NOT NULL DEFAULT 'hide',
1386
+ prompt_dismissed_at INTEGER,
1387
+ discovery_suppressed_at INTEGER,
1388
+ imported_paths TEXT NOT NULL DEFAULT '[]',
1389
+ hidden_paths TEXT NOT NULL DEFAULT '[]',
1390
+ baseline_paths TEXT NOT NULL DEFAULT '[]',
1391
+ updated_at INTEGER NOT NULL
1392
+ );
1393
+ `);
1394
+ d.prepare(
1395
+ "INSERT OR REPLACE INTO schema_meta (key, value) VALUES ('schema_version', '29')"
1396
+ ).run();
1397
+ })();
1398
+ logger_default.info("[database] migrated schema to version 29 (external_worktree_settings)");
1399
+ }
1400
+ if (version < 30) {
1401
+ d.transaction(() => {
1402
+ const cols = d.prepare("PRAGMA table_info(external_worktree_settings)").all();
1403
+ if (!cols.some((c) => c.name === "hidden_paths")) {
1404
+ d.exec(
1405
+ "ALTER TABLE external_worktree_settings ADD COLUMN hidden_paths TEXT NOT NULL DEFAULT '[]'"
1406
+ );
1407
+ }
1408
+ d.prepare(
1409
+ "INSERT OR REPLACE INTO schema_meta (key, value) VALUES ('schema_version', '30')"
1410
+ ).run();
1411
+ })();
1412
+ logger_default.info("[database] migrated schema to version 30 (external_worktree_settings.hidden_paths)");
1413
+ }
1309
1414
  }
1310
1415
  function verifySchema(d) {
1311
1416
  const expectedTables = [
@@ -1472,6 +1577,16 @@ function verifySchema(d) {
1472
1577
  {
1473
1578
  column: "is_auto_generated",
1474
1579
  ddl: "ALTER TABLE worktree_list_cache ADD COLUMN is_auto_generated INTEGER"
1580
+ },
1581
+ {
1582
+ column: "ownership",
1583
+ ddl: "ALTER TABLE worktree_list_cache ADD COLUMN ownership TEXT"
1584
+ }
1585
+ ],
1586
+ external_worktree_settings: [
1587
+ {
1588
+ column: "hidden_paths",
1589
+ ddl: "ALTER TABLE external_worktree_settings ADD COLUMN hidden_paths TEXT NOT NULL DEFAULT '[]'"
1475
1590
  }
1476
1591
  ]
1477
1592
  };
@@ -1526,6 +1641,7 @@ var DEFAULTS_KEYS_MAP = {
1526
1641
  minimizeToTray: true,
1527
1642
  slashCommandFallbackDescription: true,
1528
1643
  taskViewMode: true,
1644
+ usagePopoverMode: true,
1529
1645
  taskListCollapsedStatuses: true,
1530
1646
  layoutMode: true,
1531
1647
  mainViewMode: true,
@@ -2222,6 +2338,22 @@ function listWorkflowRunsByTask(taskId, limit = 20) {
2222
2338
  nodeStates: nodesByRunId.get(r.id) ?? []
2223
2339
  }));
2224
2340
  }
2341
+ var LIMIT_HISTORY_WINDOW_MINUTES = {
2342
+ session: 300,
2343
+ // Claude, 5 часов
2344
+ weekly: 10080,
2345
+ // Claude, 7 дней
2346
+ fable: 10080,
2347
+ // Claude Fable, 7 дней
2348
+ // Длительность окон Codex зависит от тарифа (free — одно 30-дневное ведро,
2349
+ // платные — 5ч + неделя), а сервер её не знает. Отдаём с запасом на 30 дней;
2350
+ // спарклайн в рендерере обрезает точки по реальному окну.
2351
+ "codex-session": 43200,
2352
+ "codex-weekly": 43200
2353
+ };
2354
+ var LIMIT_HISTORY_WINDOW_TYPES = Object.keys(
2355
+ LIMIT_HISTORY_WINDOW_MINUTES
2356
+ );
2225
2357
 
2226
2358
  // ../server/src/config-manager.ts
2227
2359
  var DB_DIR = getDataDir();
@@ -2308,20 +2440,28 @@ var ConfigManager = class {
2308
2440
  seedCodexDefaults(config) {
2309
2441
  const stored = config.defaults.codexDefaultModel;
2310
2442
  const needsModel = stored == null || typeof stored === "string" && CODEX_OBSOLETE_MODEL_IDS.includes(stored);
2311
- const needsEffort = config.defaults.codexDefaultEffort == null;
2312
- if (!needsModel && !needsEffort) return config;
2443
+ const model = needsModel ? CODEX_DEFAULT_MODEL_ID : stored;
2444
+ const storedEffort = config.defaults.codexDefaultEffort;
2445
+ const effort = storedEffort == null ? CODEX_DEFAULT_EFFORT : normalizeCodexEffort(storedEffort, model);
2446
+ const needsEffort = effort !== storedEffort;
2447
+ const storedReviewEffort = config.defaults.reviewCodexEffort;
2448
+ const reviewModel = config.defaults.reviewCodexModel ?? model;
2449
+ const reviewEffort = storedReviewEffort == null ? void 0 : normalizeCodexEffort(storedReviewEffort, reviewModel);
2450
+ const needsReviewEffort = reviewEffort !== void 0 && reviewEffort !== storedReviewEffort;
2451
+ if (!needsModel && !needsEffort && !needsReviewEffort) return config;
2313
2452
  const seeded = {
2314
2453
  ...config,
2315
2454
  defaults: {
2316
2455
  ...config.defaults,
2317
2456
  ...needsModel ? { codexDefaultModel: CODEX_DEFAULT_MODEL_ID } : {},
2318
- ...needsEffort ? { codexDefaultEffort: CODEX_DEFAULT_EFFORT } : {}
2457
+ ...needsEffort ? { codexDefaultEffort: effort } : {},
2458
+ ...needsReviewEffort ? { reviewCodexEffort: reviewEffort } : {}
2319
2459
  }
2320
2460
  };
2321
2461
  try {
2322
2462
  saveConfig(seeded);
2323
2463
  logger_default.info(
2324
- `[config-manager] seeded codex defaults: model=${needsModel ? CODEX_DEFAULT_MODEL_ID : "(kept)"} effort=${needsEffort ? CODEX_DEFAULT_EFFORT : "(kept)"}`
2464
+ `[config-manager] seeded codex defaults: model=${needsModel ? CODEX_DEFAULT_MODEL_ID : "(kept)"} effort=${needsEffort ? effort : "(kept)"} reviewEffort=${needsReviewEffort ? reviewEffort : "(kept)"}`
2325
2465
  );
2326
2466
  } catch (err) {
2327
2467
  logger_default.warn(
@@ -3769,7 +3909,7 @@ console.warn = (...args) => _origError("[mcp:warn]", ...args);
3769
3909
  console.error = (...args) => _origError("[mcp:error]", ...args);
3770
3910
  async function main() {
3771
3911
  configManager.init();
3772
- const version = true ? "0.15.1" : createRequire(import.meta.url)("../package.json").version;
3912
+ const version = true ? "0.15.3" : createRequire(import.meta.url)("../package.json").version;
3773
3913
  const server = createMcpServer(version);
3774
3914
  const transport = new StdioServerTransport();
3775
3915
  await server.connect(transport);
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@basegrid_tech/mcp",
3
- "version": "0.15.1",
3
+ "version": "0.15.3",
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.15.1",
46
- "@basegrid/shared": "0.15.1",
45
+ "@basegrid/server": "0.15.3",
46
+ "@basegrid/shared": "0.15.3",
47
47
  "tsup": "^8.5.1",
48
48
  "tsx": "^4.21.0",
49
49
  "typescript": "^6.0.3"