@memoraone/mcp 0.1.48 → 0.1.49
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/cli.cjs +266 -298
- package/dist/daemon.cjs +18 -55
- package/dist/index.cjs +10 -47
- package/dist/pluginPairing.cjs +223 -254
- package/package.json +1 -1
package/dist/daemon.cjs
CHANGED
|
@@ -32,7 +32,7 @@ __export(daemon_exports, {
|
|
|
32
32
|
runDaemon: () => runDaemon
|
|
33
33
|
});
|
|
34
34
|
module.exports = __toCommonJS(daemon_exports);
|
|
35
|
-
var
|
|
35
|
+
var fs9 = __toESM(require("fs"), 1);
|
|
36
36
|
var net = __toESM(require("net"), 1);
|
|
37
37
|
var import_stdio2 = require("@modelcontextprotocol/sdk/server/stdio.js");
|
|
38
38
|
|
|
@@ -169,11 +169,9 @@ function ensureBaseDir() {
|
|
|
169
169
|
}
|
|
170
170
|
|
|
171
171
|
// src/projectBinding.ts
|
|
172
|
-
var fs7 = __toESM(require("fs/promises"), 1);
|
|
173
172
|
var path10 = __toESM(require("path"), 1);
|
|
174
173
|
|
|
175
174
|
// src/localState/resolveLocalBinding.ts
|
|
176
|
-
var fs6 = __toESM(require("fs/promises"), 1);
|
|
177
175
|
var path9 = __toESM(require("path"), 1);
|
|
178
176
|
|
|
179
177
|
// src/localState/bindingStore.ts
|
|
@@ -1149,19 +1147,9 @@ async function refreshInstallationAccessToken(options) {
|
|
|
1149
1147
|
}
|
|
1150
1148
|
|
|
1151
1149
|
// src/localState/resolveLocalBinding.ts
|
|
1152
|
-
async function detectLegacyM1Warning(workspaceRoot) {
|
|
1153
|
-
const candidate = path9.join(path9.resolve(workspaceRoot), CANONICAL_M1_FILENAME);
|
|
1154
|
-
try {
|
|
1155
|
-
await fs6.access(candidate);
|
|
1156
|
-
return candidate;
|
|
1157
|
-
} catch {
|
|
1158
|
-
return void 0;
|
|
1159
|
-
}
|
|
1160
|
-
}
|
|
1161
1150
|
async function ensureRepositoryBindingForRoot(workspaceRoot, options = {}) {
|
|
1162
1151
|
const resolved = path9.resolve(workspaceRoot);
|
|
1163
1152
|
const identity = await captureRootFilesystemIdentity(resolved, options.identityDeps);
|
|
1164
|
-
const legacyM1WarningPath = await detectLegacyM1Warning(resolved);
|
|
1165
1153
|
const index = await loadPathIndex(options.homeDir);
|
|
1166
1154
|
const lookup = lookupPathIndex(index, resolved, identity);
|
|
1167
1155
|
if (lookup.kind === "path") {
|
|
@@ -1185,8 +1173,7 @@ async function ensureRepositoryBindingForRoot(workspaceRoot, options = {}) {
|
|
|
1185
1173
|
return {
|
|
1186
1174
|
repositoryBindingId: record.repositoryBindingId,
|
|
1187
1175
|
identity,
|
|
1188
|
-
created: false
|
|
1189
|
-
legacyM1WarningPath
|
|
1176
|
+
created: false
|
|
1190
1177
|
};
|
|
1191
1178
|
}
|
|
1192
1179
|
}
|
|
@@ -1210,8 +1197,7 @@ async function ensureRepositoryBindingForRoot(workspaceRoot, options = {}) {
|
|
|
1210
1197
|
repositoryBindingId: record.repositoryBindingId,
|
|
1211
1198
|
identity,
|
|
1212
1199
|
created: false,
|
|
1213
|
-
renamedFrom: lookup.previousPath
|
|
1214
|
-
legacyM1WarningPath
|
|
1200
|
+
renamedFrom: lookup.previousPath
|
|
1215
1201
|
};
|
|
1216
1202
|
}
|
|
1217
1203
|
}
|
|
@@ -1224,8 +1210,7 @@ async function ensureRepositoryBindingForRoot(workspaceRoot, options = {}) {
|
|
|
1224
1210
|
return {
|
|
1225
1211
|
repositoryBindingId,
|
|
1226
1212
|
identity,
|
|
1227
|
-
created: true
|
|
1228
|
-
legacyM1WarningPath
|
|
1213
|
+
created: true
|
|
1229
1214
|
};
|
|
1230
1215
|
}
|
|
1231
1216
|
async function lookupLocalBindingIdentity(workspaceRoot, options = {}) {
|
|
@@ -1254,7 +1239,7 @@ async function lookupLocalBindingIdentity(workspaceRoot, options = {}) {
|
|
|
1254
1239
|
}
|
|
1255
1240
|
async function resolveLocalBinding(workspaceRoot, options = {}) {
|
|
1256
1241
|
const resolved = path9.resolve(workspaceRoot);
|
|
1257
|
-
const { repositoryBindingId
|
|
1242
|
+
const { repositoryBindingId } = await ensureRepositoryBindingForRoot(
|
|
1258
1243
|
resolved,
|
|
1259
1244
|
{ ...options, createIfMissing: false }
|
|
1260
1245
|
);
|
|
@@ -1297,14 +1282,12 @@ async function resolveLocalBinding(workspaceRoot, options = {}) {
|
|
|
1297
1282
|
installationPublicId: record.installationPublicId ?? creds.installationPublicId,
|
|
1298
1283
|
environment: record.environment,
|
|
1299
1284
|
bindingSource: "local-binding",
|
|
1300
|
-
status: record.status
|
|
1301
|
-
legacyM1WarningPath
|
|
1285
|
+
status: record.status
|
|
1302
1286
|
};
|
|
1303
1287
|
}
|
|
1304
1288
|
|
|
1305
1289
|
// src/projectBinding.ts
|
|
1306
1290
|
var uuidRegex2 = /^[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12}$/i;
|
|
1307
|
-
var CANONICAL_M1_FILENAME = "memoraone.m1";
|
|
1308
1291
|
function normalizeEnvironment(raw) {
|
|
1309
1292
|
if (raw === void 0 || raw === null || typeof raw !== "string") {
|
|
1310
1293
|
return void 0;
|
|
@@ -1320,23 +1303,9 @@ function toResolvedBinding(local) {
|
|
|
1320
1303
|
installationPublicId: local.installationPublicId,
|
|
1321
1304
|
environment: local.environment,
|
|
1322
1305
|
bindingSource: "local-binding",
|
|
1323
|
-
status: local.status
|
|
1324
|
-
legacyM1WarningPath: local.legacyM1WarningPath
|
|
1306
|
+
status: local.status
|
|
1325
1307
|
};
|
|
1326
1308
|
}
|
|
1327
|
-
async function warnLegacyM1IfPresent(workspaceRoot) {
|
|
1328
|
-
const candidate = path10.join(path10.resolve(workspaceRoot), CANONICAL_M1_FILENAME);
|
|
1329
|
-
try {
|
|
1330
|
-
await fs7.access(candidate);
|
|
1331
|
-
process.stderr.write(
|
|
1332
|
-
`[memoraone-mcp] warning: ignoring legacy ${CANONICAL_M1_FILENAME} (not used for credentials or binding)
|
|
1333
|
-
`
|
|
1334
|
-
);
|
|
1335
|
-
return candidate;
|
|
1336
|
-
} catch {
|
|
1337
|
-
return void 0;
|
|
1338
|
-
}
|
|
1339
|
-
}
|
|
1340
1309
|
async function resolveAuthoritativeBinding(workspaceRoot, _options = {}) {
|
|
1341
1310
|
const candidates = normalizeWorkspaceSearchRoots(workspaceRoot);
|
|
1342
1311
|
if (candidates.length === 0) {
|
|
@@ -1346,7 +1315,6 @@ async function resolveAuthoritativeBinding(workspaceRoot, _options = {}) {
|
|
|
1346
1315
|
}
|
|
1347
1316
|
const bindings = [];
|
|
1348
1317
|
for (const root of candidates) {
|
|
1349
|
-
await warnLegacyM1IfPresent(root);
|
|
1350
1318
|
try {
|
|
1351
1319
|
const local = await resolveLocalBinding(root);
|
|
1352
1320
|
bindings.push(toResolvedBinding(local));
|
|
@@ -1505,7 +1473,7 @@ function decodeResolvedBinding(value) {
|
|
|
1505
1473
|
}
|
|
1506
1474
|
|
|
1507
1475
|
// src/bindingSidecar.ts
|
|
1508
|
-
var
|
|
1476
|
+
var fs6 = __toESM(require("fs"), 1);
|
|
1509
1477
|
var path11 = __toESM(require("path"), 1);
|
|
1510
1478
|
function bindingSidecarPath(socketPath) {
|
|
1511
1479
|
if (socketPath.endsWith(".sock")) {
|
|
@@ -1530,11 +1498,11 @@ function writeBindingSidecar(socketPath, binding, ideType = resolveBindingIdeTyp
|
|
|
1530
1498
|
if (/["']?(accessToken|refreshToken|apiKey|clientRedeemKey|clientRefreshKey)["']?\s*:/.test(text)) {
|
|
1531
1499
|
throw new Error("[memoraone-mcp] Refusing to write sidecar containing secrets");
|
|
1532
1500
|
}
|
|
1533
|
-
|
|
1501
|
+
fs6.writeFileSync(bindingSidecarPath(socketPath), text, "utf8");
|
|
1534
1502
|
}
|
|
1535
1503
|
function removeBindingSidecar(socketPath) {
|
|
1536
1504
|
try {
|
|
1537
|
-
|
|
1505
|
+
fs6.unlinkSync(bindingSidecarPath(socketPath));
|
|
1538
1506
|
} catch {
|
|
1539
1507
|
}
|
|
1540
1508
|
}
|
|
@@ -1546,7 +1514,7 @@ var import_stdio = require("@modelcontextprotocol/sdk/server/stdio.js");
|
|
|
1546
1514
|
|
|
1547
1515
|
// src/config.ts
|
|
1548
1516
|
var process2 = __toESM(require("process"), 1);
|
|
1549
|
-
var
|
|
1517
|
+
var fs7 = __toESM(require("fs"), 1);
|
|
1550
1518
|
var path12 = __toESM(require("path"), 1);
|
|
1551
1519
|
var dotenv = __toESM(require("dotenv"), 1);
|
|
1552
1520
|
var import_v4 = require("zod/v4");
|
|
@@ -1571,7 +1539,7 @@ function resolveApiUrl(env2) {
|
|
|
1571
1539
|
|
|
1572
1540
|
// src/config.ts
|
|
1573
1541
|
var dotenvPath = path12.resolve(process2.cwd(), ".env");
|
|
1574
|
-
if (
|
|
1542
|
+
if (fs7.existsSync(dotenvPath)) {
|
|
1575
1543
|
try {
|
|
1576
1544
|
dotenv.config({ path: dotenvPath });
|
|
1577
1545
|
} catch (err) {
|
|
@@ -2899,7 +2867,7 @@ function handleBindingStatus(binding, options = {}) {
|
|
|
2899
2867
|
|
|
2900
2868
|
// src/heartbeat.ts
|
|
2901
2869
|
var crypto5 = __toESM(require("crypto"), 1);
|
|
2902
|
-
var
|
|
2870
|
+
var fs8 = __toESM(require("fs"), 1);
|
|
2903
2871
|
var path15 = __toESM(require("path"), 1);
|
|
2904
2872
|
|
|
2905
2873
|
// src/localState/mcpSessionId.ts
|
|
@@ -2939,7 +2907,7 @@ function resolvePackageVersion() {
|
|
|
2939
2907
|
];
|
|
2940
2908
|
for (const candidate of candidates) {
|
|
2941
2909
|
try {
|
|
2942
|
-
const pkg = JSON.parse(
|
|
2910
|
+
const pkg = JSON.parse(fs8.readFileSync(candidate, "utf8"));
|
|
2943
2911
|
if (typeof pkg.version === "string" && pkg.version.trim()) {
|
|
2944
2912
|
return pkg.version.trim();
|
|
2945
2913
|
}
|
|
@@ -3828,11 +3796,6 @@ async function main(opts = {}) {
|
|
|
3828
3796
|
if (debugLog) {
|
|
3829
3797
|
console.error("[memoraone-mcp][debug] Resolved installation credentials from OS keyring");
|
|
3830
3798
|
}
|
|
3831
|
-
if (binding.legacyM1WarningPath) {
|
|
3832
|
-
console.error(
|
|
3833
|
-
`[memoraone-mcp] warning: ignoring legacy memoraone.m1 at ${binding.legacyM1WarningPath}`
|
|
3834
|
-
);
|
|
3835
|
-
}
|
|
3836
3799
|
const projectId = binding.projectId;
|
|
3837
3800
|
const existing = getBoundProjectId();
|
|
3838
3801
|
if (existing !== null && existing !== projectId) {
|
|
@@ -3984,7 +3947,7 @@ function parseBindingFromEnv(repositoryBindingId) {
|
|
|
3984
3947
|
}
|
|
3985
3948
|
async function ensureSocketClean(socketPath) {
|
|
3986
3949
|
try {
|
|
3987
|
-
|
|
3950
|
+
fs9.accessSync(socketPath);
|
|
3988
3951
|
} catch {
|
|
3989
3952
|
return;
|
|
3990
3953
|
}
|
|
@@ -3996,7 +3959,7 @@ async function ensureSocketClean(socketPath) {
|
|
|
3996
3959
|
});
|
|
3997
3960
|
client.on("error", () => {
|
|
3998
3961
|
try {
|
|
3999
|
-
|
|
3962
|
+
fs9.unlinkSync(socketPath);
|
|
4000
3963
|
log("stale socket removed");
|
|
4001
3964
|
} catch {
|
|
4002
3965
|
}
|
|
@@ -4027,8 +3990,8 @@ async function runDaemon() {
|
|
|
4027
3990
|
await ensureSocketClean(socketPath);
|
|
4028
3991
|
const cleanupSocketFile = () => {
|
|
4029
3992
|
try {
|
|
4030
|
-
if (
|
|
4031
|
-
|
|
3993
|
+
if (fs9.existsSync(socketPath)) {
|
|
3994
|
+
fs9.unlinkSync(socketPath);
|
|
4032
3995
|
log("socket removed");
|
|
4033
3996
|
}
|
|
4034
3997
|
removeBindingSidecar(socketPath);
|
package/dist/index.cjs
CHANGED
|
@@ -1012,11 +1012,9 @@ var MemoraClient = class {
|
|
|
1012
1012
|
var memoraClient_default = MemoraClient;
|
|
1013
1013
|
|
|
1014
1014
|
// src/projectBinding.ts
|
|
1015
|
-
var fs8 = __toESM(require("fs/promises"), 1);
|
|
1016
1015
|
var path11 = __toESM(require("path"), 1);
|
|
1017
1016
|
|
|
1018
1017
|
// src/localState/resolveLocalBinding.ts
|
|
1019
|
-
var fs7 = __toESM(require("fs/promises"), 1);
|
|
1020
1018
|
var path10 = __toESM(require("path"), 1);
|
|
1021
1019
|
|
|
1022
1020
|
// src/localState/pathIndex.ts
|
|
@@ -1234,19 +1232,9 @@ function identityMatchesStored(stored, current) {
|
|
|
1234
1232
|
}
|
|
1235
1233
|
|
|
1236
1234
|
// src/localState/resolveLocalBinding.ts
|
|
1237
|
-
async function detectLegacyM1Warning(workspaceRoot) {
|
|
1238
|
-
const candidate = path10.join(path10.resolve(workspaceRoot), CANONICAL_M1_FILENAME);
|
|
1239
|
-
try {
|
|
1240
|
-
await fs7.access(candidate);
|
|
1241
|
-
return candidate;
|
|
1242
|
-
} catch {
|
|
1243
|
-
return void 0;
|
|
1244
|
-
}
|
|
1245
|
-
}
|
|
1246
1235
|
async function ensureRepositoryBindingForRoot(workspaceRoot, options = {}) {
|
|
1247
1236
|
const resolved = path10.resolve(workspaceRoot);
|
|
1248
1237
|
const identity = await captureRootFilesystemIdentity(resolved, options.identityDeps);
|
|
1249
|
-
const legacyM1WarningPath = await detectLegacyM1Warning(resolved);
|
|
1250
1238
|
const index = await loadPathIndex(options.homeDir);
|
|
1251
1239
|
const lookup = lookupPathIndex(index, resolved, identity);
|
|
1252
1240
|
if (lookup.kind === "path") {
|
|
@@ -1270,8 +1258,7 @@ async function ensureRepositoryBindingForRoot(workspaceRoot, options = {}) {
|
|
|
1270
1258
|
return {
|
|
1271
1259
|
repositoryBindingId: record.repositoryBindingId,
|
|
1272
1260
|
identity,
|
|
1273
|
-
created: false
|
|
1274
|
-
legacyM1WarningPath
|
|
1261
|
+
created: false
|
|
1275
1262
|
};
|
|
1276
1263
|
}
|
|
1277
1264
|
}
|
|
@@ -1295,8 +1282,7 @@ async function ensureRepositoryBindingForRoot(workspaceRoot, options = {}) {
|
|
|
1295
1282
|
repositoryBindingId: record.repositoryBindingId,
|
|
1296
1283
|
identity,
|
|
1297
1284
|
created: false,
|
|
1298
|
-
renamedFrom: lookup.previousPath
|
|
1299
|
-
legacyM1WarningPath
|
|
1285
|
+
renamedFrom: lookup.previousPath
|
|
1300
1286
|
};
|
|
1301
1287
|
}
|
|
1302
1288
|
}
|
|
@@ -1309,8 +1295,7 @@ async function ensureRepositoryBindingForRoot(workspaceRoot, options = {}) {
|
|
|
1309
1295
|
return {
|
|
1310
1296
|
repositoryBindingId,
|
|
1311
1297
|
identity,
|
|
1312
|
-
created: true
|
|
1313
|
-
legacyM1WarningPath
|
|
1298
|
+
created: true
|
|
1314
1299
|
};
|
|
1315
1300
|
}
|
|
1316
1301
|
async function lookupLocalBindingIdentity(workspaceRoot, options = {}) {
|
|
@@ -1339,7 +1324,7 @@ async function lookupLocalBindingIdentity(workspaceRoot, options = {}) {
|
|
|
1339
1324
|
}
|
|
1340
1325
|
async function resolveLocalBinding(workspaceRoot, options = {}) {
|
|
1341
1326
|
const resolved = path10.resolve(workspaceRoot);
|
|
1342
|
-
const { repositoryBindingId
|
|
1327
|
+
const { repositoryBindingId } = await ensureRepositoryBindingForRoot(
|
|
1343
1328
|
resolved,
|
|
1344
1329
|
{ ...options, createIfMissing: false }
|
|
1345
1330
|
);
|
|
@@ -1382,13 +1367,11 @@ async function resolveLocalBinding(workspaceRoot, options = {}) {
|
|
|
1382
1367
|
installationPublicId: record.installationPublicId ?? creds.installationPublicId,
|
|
1383
1368
|
environment: record.environment,
|
|
1384
1369
|
bindingSource: "local-binding",
|
|
1385
|
-
status: record.status
|
|
1386
|
-
legacyM1WarningPath
|
|
1370
|
+
status: record.status
|
|
1387
1371
|
};
|
|
1388
1372
|
}
|
|
1389
1373
|
|
|
1390
1374
|
// src/projectBinding.ts
|
|
1391
|
-
var CANONICAL_M1_FILENAME = "memoraone.m1";
|
|
1392
1375
|
function toResolvedBinding(local) {
|
|
1393
1376
|
return {
|
|
1394
1377
|
repositoryBindingId: local.repositoryBindingId,
|
|
@@ -1397,23 +1380,9 @@ function toResolvedBinding(local) {
|
|
|
1397
1380
|
installationPublicId: local.installationPublicId,
|
|
1398
1381
|
environment: local.environment,
|
|
1399
1382
|
bindingSource: "local-binding",
|
|
1400
|
-
status: local.status
|
|
1401
|
-
legacyM1WarningPath: local.legacyM1WarningPath
|
|
1383
|
+
status: local.status
|
|
1402
1384
|
};
|
|
1403
1385
|
}
|
|
1404
|
-
async function warnLegacyM1IfPresent(workspaceRoot) {
|
|
1405
|
-
const candidate = path11.join(path11.resolve(workspaceRoot), CANONICAL_M1_FILENAME);
|
|
1406
|
-
try {
|
|
1407
|
-
await fs8.access(candidate);
|
|
1408
|
-
process.stderr.write(
|
|
1409
|
-
`[memoraone-mcp] warning: ignoring legacy ${CANONICAL_M1_FILENAME} (not used for credentials or binding)
|
|
1410
|
-
`
|
|
1411
|
-
);
|
|
1412
|
-
return candidate;
|
|
1413
|
-
} catch {
|
|
1414
|
-
return void 0;
|
|
1415
|
-
}
|
|
1416
|
-
}
|
|
1417
1386
|
async function resolveAuthoritativeBinding(workspaceRoot, _options = {}) {
|
|
1418
1387
|
const candidates = normalizeWorkspaceSearchRoots(workspaceRoot);
|
|
1419
1388
|
if (candidates.length === 0) {
|
|
@@ -1423,7 +1392,6 @@ async function resolveAuthoritativeBinding(workspaceRoot, _options = {}) {
|
|
|
1423
1392
|
}
|
|
1424
1393
|
const bindings = [];
|
|
1425
1394
|
for (const root of candidates) {
|
|
1426
|
-
await warnLegacyM1IfPresent(root);
|
|
1427
1395
|
try {
|
|
1428
1396
|
const local = await resolveLocalBinding(root);
|
|
1429
1397
|
bindings.push(toResolvedBinding(local));
|
|
@@ -1854,7 +1822,7 @@ async function waitForPluginStartupBinding(resolve11, options = {}) {
|
|
|
1854
1822
|
}
|
|
1855
1823
|
|
|
1856
1824
|
// src/bindingSidecar.ts
|
|
1857
|
-
var
|
|
1825
|
+
var fs7 = __toESM(require("fs"), 1);
|
|
1858
1826
|
var path14 = __toESM(require("path"), 1);
|
|
1859
1827
|
function bindingSidecarPath(socketPath) {
|
|
1860
1828
|
if (socketPath.endsWith(".sock")) {
|
|
@@ -1879,7 +1847,7 @@ function writeBindingSidecar(socketPath, binding, ideType = resolveBindingIdeTyp
|
|
|
1879
1847
|
if (/["']?(accessToken|refreshToken|apiKey|clientRedeemKey|clientRefreshKey)["']?\s*:/.test(text)) {
|
|
1880
1848
|
throw new Error("[memoraone-mcp] Refusing to write sidecar containing secrets");
|
|
1881
1849
|
}
|
|
1882
|
-
|
|
1850
|
+
fs7.writeFileSync(bindingSidecarPath(socketPath), text, "utf8");
|
|
1883
1851
|
}
|
|
1884
1852
|
|
|
1885
1853
|
// src/bridgeClientRoots.ts
|
|
@@ -2825,7 +2793,7 @@ function handleBindingStatus(binding, options = {}) {
|
|
|
2825
2793
|
|
|
2826
2794
|
// src/heartbeat.ts
|
|
2827
2795
|
var crypto5 = __toESM(require("crypto"), 1);
|
|
2828
|
-
var
|
|
2796
|
+
var fs8 = __toESM(require("fs"), 1);
|
|
2829
2797
|
var path15 = __toESM(require("path"), 1);
|
|
2830
2798
|
|
|
2831
2799
|
// src/localState/mcpSessionId.ts
|
|
@@ -2865,7 +2833,7 @@ function resolvePackageVersion() {
|
|
|
2865
2833
|
];
|
|
2866
2834
|
for (const candidate of candidates) {
|
|
2867
2835
|
try {
|
|
2868
|
-
const pkg = JSON.parse(
|
|
2836
|
+
const pkg = JSON.parse(fs8.readFileSync(candidate, "utf8"));
|
|
2869
2837
|
if (typeof pkg.version === "string" && pkg.version.trim()) {
|
|
2870
2838
|
return pkg.version.trim();
|
|
2871
2839
|
}
|
|
@@ -3754,11 +3722,6 @@ async function main(opts = {}) {
|
|
|
3754
3722
|
if (debugLog) {
|
|
3755
3723
|
console.error("[memoraone-mcp][debug] Resolved installation credentials from OS keyring");
|
|
3756
3724
|
}
|
|
3757
|
-
if (binding.legacyM1WarningPath) {
|
|
3758
|
-
console.error(
|
|
3759
|
-
`[memoraone-mcp] warning: ignoring legacy memoraone.m1 at ${binding.legacyM1WarningPath}`
|
|
3760
|
-
);
|
|
3761
|
-
}
|
|
3762
3725
|
const projectId = binding.projectId;
|
|
3763
3726
|
const existing = getBoundProjectId();
|
|
3764
3727
|
if (existing !== null && existing !== projectId) {
|