claude-memory-layer 2.5.0 → 2.5.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.
- package/.claude-plugin/plugin.json +1 -1
- package/dist/.claude-plugin/plugin.json +1 -1
- package/dist/cli/index.js +101 -57
- package/dist/cli/index.js.map +4 -4
- package/dist/core/index.js +72 -14
- package/dist/core/index.js.map +4 -4
- package/dist/hooks/codex-session-import-worker.js +1 -1
- package/dist/hooks/codex-session-start.js +4 -4
- package/dist/hooks/codex-user-prompt-submit.js +2 -2
- package/dist/hooks/post-tool-use.js +1 -1
- package/dist/hooks/semantic-daemon.js +1 -1
- package/dist/hooks/session-end-handler.js +1 -1
- package/dist/hooks/session-end.js +1 -1
- package/dist/hooks/session-start.js +4 -4
- package/dist/hooks/stop.js +1 -1
- package/dist/hooks/user-prompt-submit.js +2 -2
- package/dist/index.js +85 -27
- package/dist/index.js.map +4 -4
- package/dist/mcp/index.js +4 -4
- package/dist/server/api/index.js +1 -1
- package/dist/server/index.js +1 -1
- package/dist/services/codex-host-ingest.js +1 -1
- package/dist/services/lesson-host-service.js +1 -1
- package/dist/services/memory-service.js +1 -1
- package/package.json +1 -1
package/dist/cli/index.js
CHANGED
|
@@ -38,7 +38,7 @@ function emptyLatencyAggregate() {
|
|
|
38
38
|
return { count: 0, failedCount: 0, totalMs: 0, maxMs: 0 };
|
|
39
39
|
}
|
|
40
40
|
function runtimeVersion() {
|
|
41
|
-
const value = "2.5.
|
|
41
|
+
const value = "2.5.1"?.trim();
|
|
42
42
|
return sanitizeRuntimeVersion(value || "development");
|
|
43
43
|
}
|
|
44
44
|
function sanitizeRuntimeVersion(value) {
|
|
@@ -25704,7 +25704,7 @@ import { Command } from "commander";
|
|
|
25704
25704
|
import { exec } from "child_process";
|
|
25705
25705
|
import * as fs40 from "fs";
|
|
25706
25706
|
import * as path50 from "path";
|
|
25707
|
-
import * as
|
|
25707
|
+
import * as os27 from "os";
|
|
25708
25708
|
import { pathToFileURL as pathToFileURL2 } from "url";
|
|
25709
25709
|
|
|
25710
25710
|
// src/services/lesson-consolidation-service.ts
|
|
@@ -32160,20 +32160,77 @@ init_sqlite_wrapper();
|
|
|
32160
32160
|
|
|
32161
32161
|
// src/core/mongo-sync-worker.ts
|
|
32162
32162
|
import { randomUUID as randomUUID27 } from "crypto";
|
|
32163
|
-
import * as
|
|
32163
|
+
import * as os19 from "os";
|
|
32164
32164
|
import { MongoClient } from "mongodb";
|
|
32165
|
+
|
|
32166
|
+
// src/core/mongo-sync-config.ts
|
|
32167
|
+
import * as dns from "dns";
|
|
32168
|
+
import * as os18 from "os";
|
|
32169
|
+
var UNPARSEABLE_URI = "<unparseable MongoDB connection string>";
|
|
32170
|
+
function splitMongoUri(uri) {
|
|
32171
|
+
const match = /^([a-z][a-z0-9+.-]*:\/\/)(.*)$/is.exec(uri);
|
|
32172
|
+
if (!match) return null;
|
|
32173
|
+
const [, scheme, rest] = match;
|
|
32174
|
+
const authorityEnd = rest.search(/[/?]/);
|
|
32175
|
+
const authority = authorityEnd === -1 ? rest : rest.slice(0, authorityEnd);
|
|
32176
|
+
const remainder = authorityEnd === -1 ? "" : rest.slice(authorityEnd);
|
|
32177
|
+
if (remainder.includes("@") || authority.indexOf("@") !== authority.lastIndexOf("@")) return null;
|
|
32178
|
+
const atIdx = authority.indexOf("@");
|
|
32179
|
+
const creds = atIdx === -1 ? null : authority.slice(0, atIdx);
|
|
32180
|
+
const hosts = authority.slice(atIdx + 1);
|
|
32181
|
+
if (!hosts) return null;
|
|
32182
|
+
const colonIdx = creds?.indexOf(":") ?? -1;
|
|
32183
|
+
const queryIdx = remainder.indexOf("?");
|
|
32184
|
+
return {
|
|
32185
|
+
scheme,
|
|
32186
|
+
username: creds === null ? null : colonIdx === -1 ? creds : creds.slice(0, colonIdx),
|
|
32187
|
+
password: creds === null || colonIdx === -1 ? null : creds.slice(colonIdx + 1),
|
|
32188
|
+
hosts,
|
|
32189
|
+
path: queryIdx === -1 ? remainder : remainder.slice(0, queryIdx),
|
|
32190
|
+
query: queryIdx === -1 ? null : remainder.slice(queryIdx + 1)
|
|
32191
|
+
};
|
|
32192
|
+
}
|
|
32165
32193
|
function redactMongoUri(uri) {
|
|
32166
|
-
const
|
|
32167
|
-
if (
|
|
32168
|
-
const
|
|
32169
|
-
|
|
32170
|
-
|
|
32171
|
-
|
|
32172
|
-
|
|
32173
|
-
|
|
32174
|
-
|
|
32175
|
-
|
|
32194
|
+
const parts = splitMongoUri(uri);
|
|
32195
|
+
if (!parts) return UNPARSEABLE_URI;
|
|
32196
|
+
const creds = parts.username === null ? "" : parts.password === null ? `${parts.username}@` : `${parts.username}:***@`;
|
|
32197
|
+
const query = parts.query === null ? "" : "?***";
|
|
32198
|
+
return `${parts.scheme}${creds}${parts.hosts}${parts.path}${query}`;
|
|
32199
|
+
}
|
|
32200
|
+
var PARSE_ERROR_NAMES = /* @__PURE__ */ new Set([
|
|
32201
|
+
"MongoParseError",
|
|
32202
|
+
"MongoInvalidArgumentError",
|
|
32203
|
+
"MongoAPIError",
|
|
32204
|
+
"MongoRuntimeError",
|
|
32205
|
+
"MongoMissingCredentialsError",
|
|
32206
|
+
"TypeError",
|
|
32207
|
+
"URIError"
|
|
32208
|
+
]);
|
|
32209
|
+
var PARSE_HINT = "connection string could not be parsed; percent-encode special characters in the password and check option names";
|
|
32210
|
+
var ERRNO_CODES = /* @__PURE__ */ new Set([
|
|
32211
|
+
...Object.keys(os18.constants.errno),
|
|
32212
|
+
...Object.values(dns).filter((value) => typeof value === "string" && /^E[A-Z_]+$/.test(value)),
|
|
32213
|
+
"EAI_AGAIN"
|
|
32214
|
+
]);
|
|
32215
|
+
function describeMongoConnectionError(error, uri) {
|
|
32216
|
+
const name = error instanceof Error ? error.name : "Error";
|
|
32217
|
+
if (!splitMongoUri(uri) || PARSE_ERROR_NAMES.has(name)) return `${name}: ${PARSE_HINT}`;
|
|
32218
|
+
const facts = connectionErrorFacts(error);
|
|
32219
|
+
return facts.length > 0 ? `${name} (${facts.join(", ")})` : name;
|
|
32176
32220
|
}
|
|
32221
|
+
function connectionErrorFacts(error) {
|
|
32222
|
+
const facts = /* @__PURE__ */ new Set();
|
|
32223
|
+
let current = error;
|
|
32224
|
+
for (let depth = 0; depth < 5 && current instanceof Error; depth++) {
|
|
32225
|
+
const { code, codeName } = current;
|
|
32226
|
+
if (typeof code === "string" && ERRNO_CODES.has(code)) facts.add(code);
|
|
32227
|
+
if (typeof codeName === "string" && /^[A-Za-z]+$/.test(codeName)) facts.add(codeName);
|
|
32228
|
+
current = current.cause;
|
|
32229
|
+
}
|
|
32230
|
+
return [...facts];
|
|
32231
|
+
}
|
|
32232
|
+
|
|
32233
|
+
// src/core/mongo-sync-worker.ts
|
|
32177
32234
|
function isRecord8(value) {
|
|
32178
32235
|
return typeof value === "object" && value !== null && !Array.isArray(value);
|
|
32179
32236
|
}
|
|
@@ -32306,7 +32363,8 @@ var MongoSyncWorker = class {
|
|
|
32306
32363
|
this.events = this.db.collection("cml_events");
|
|
32307
32364
|
} catch (err) {
|
|
32308
32365
|
const safeUri = redactMongoUri(this.config.uri);
|
|
32309
|
-
|
|
32366
|
+
const reason = describeMongoConnectionError(err, this.config.uri);
|
|
32367
|
+
throw new Error(`MongoDB connection failed (${safeUri}, db=${this.config.dbName}): ${reason}`);
|
|
32310
32368
|
}
|
|
32311
32369
|
}
|
|
32312
32370
|
async disconnect() {
|
|
@@ -32367,7 +32425,7 @@ var MongoSyncWorker = class {
|
|
|
32367
32425
|
if (batch.length === 0) break;
|
|
32368
32426
|
const startSeq = await this.allocateSeqRange("events", batch.length);
|
|
32369
32427
|
const now = /* @__PURE__ */ new Date();
|
|
32370
|
-
const hostname2 =
|
|
32428
|
+
const hostname2 = os19.hostname();
|
|
32371
32429
|
const ops = batch.map((item, idx) => {
|
|
32372
32430
|
const event = item.event;
|
|
32373
32431
|
const seq = startSeq + idx;
|
|
@@ -32708,7 +32766,7 @@ function defaultInvocation(options) {
|
|
|
32708
32766
|
|
|
32709
32767
|
// src/apps/cli/mcp-client-config.ts
|
|
32710
32768
|
import * as fs25 from "node:fs";
|
|
32711
|
-
import * as
|
|
32769
|
+
import * as os20 from "node:os";
|
|
32712
32770
|
import * as path32 from "node:path";
|
|
32713
32771
|
function isClaudeMemoryMcpServer(serverName, server) {
|
|
32714
32772
|
if (!server || typeof server !== "object" || Array.isArray(server)) return false;
|
|
@@ -32720,7 +32778,7 @@ function isClaudeMemoryMcpServer(serverName, server) {
|
|
|
32720
32778
|
return /memory/i.test(serverName) && /(?:^|[\s/])(?:\.\/)?(?:dist|src)\/(?:extensions\/)?mcp\/index\.(?:js|ts)(?:\s|$)/i.test(invocation);
|
|
32721
32779
|
}
|
|
32722
32780
|
function readMcpClientConfigs(options = {}) {
|
|
32723
|
-
const homeDir = options.homeDir ??
|
|
32781
|
+
const homeDir = options.homeDir ?? os20.homedir();
|
|
32724
32782
|
const cwd = options.cwd ?? process.cwd();
|
|
32725
32783
|
return [
|
|
32726
32784
|
readConfig("claude-code", path32.join(homeDir, ".claude.json"), (text) => {
|
|
@@ -34110,7 +34168,7 @@ init_retrieval_trace_ledger();
|
|
|
34110
34168
|
init_lesson_usage_audit();
|
|
34111
34169
|
init_retrieval_telemetry();
|
|
34112
34170
|
import * as fs33 from "node:fs";
|
|
34113
|
-
import * as
|
|
34171
|
+
import * as os21 from "node:os";
|
|
34114
34172
|
import * as path41 from "node:path";
|
|
34115
34173
|
var MEMORY_AUDIT_SCHEMA_VERSION = "memory-audit-v1";
|
|
34116
34174
|
var TEST_NAME_PATTERN = /(^|[-_])(?:tmp|temp|test|testing|fixture|scratch|sandbox|playground|happy-testing-ground|happy-codex-instructions)([-_]|$)/i;
|
|
@@ -34397,7 +34455,7 @@ function auditOneStore(store, options) {
|
|
|
34397
34455
|
}
|
|
34398
34456
|
function buildMemoryAuditReport(options = {}) {
|
|
34399
34457
|
const projectClasses = validateProjectClasses(options.projectClasses ?? {});
|
|
34400
|
-
const homeDir = options.homeDir ??
|
|
34458
|
+
const homeDir = options.homeDir ?? os21.homedir();
|
|
34401
34459
|
const memoryRoot = path41.join(homeDir, ".claude-code", "memory");
|
|
34402
34460
|
const now = options.now ?? /* @__PURE__ */ new Date();
|
|
34403
34461
|
const discovered = discoverMemoryStores(memoryRoot);
|
|
@@ -35281,7 +35339,7 @@ init_project_path();
|
|
|
35281
35339
|
init_memory_service();
|
|
35282
35340
|
init_vector_store();
|
|
35283
35341
|
import * as fs34 from "node:fs";
|
|
35284
|
-
import * as
|
|
35342
|
+
import * as os22 from "node:os";
|
|
35285
35343
|
import * as path43 from "node:path";
|
|
35286
35344
|
var DEFAULT_MAINTENANCE_MIN_FREE_BYTES = 5 * 1024 * 1024 * 1024;
|
|
35287
35345
|
var DEFAULT_MAINTENANCE_MAX_PROJECTS = 25;
|
|
@@ -35298,7 +35356,7 @@ function parseMaintenanceMinFreeBytes(value) {
|
|
|
35298
35356
|
return Math.floor(gigabytes * 1024 * 1024 * 1024);
|
|
35299
35357
|
}
|
|
35300
35358
|
function getMaintenanceDiskStatus(options = {}) {
|
|
35301
|
-
const homeDir = options.homeDir ??
|
|
35359
|
+
const homeDir = options.homeDir ?? os22.homedir();
|
|
35302
35360
|
const memoryRoot = path43.join(homeDir, ".claude-code", "memory");
|
|
35303
35361
|
const probePath = findExistingAncestor(memoryRoot);
|
|
35304
35362
|
const stats = fs34.statfsSync(probePath);
|
|
@@ -35326,7 +35384,7 @@ function discoverMaintenanceTargets(options = {}) {
|
|
|
35326
35384
|
modifiedAtMs: getStoreModifiedAtMs(storagePath)
|
|
35327
35385
|
}] : [];
|
|
35328
35386
|
}
|
|
35329
|
-
const homeDir = options.homeDir ??
|
|
35387
|
+
const homeDir = options.homeDir ?? os22.homedir();
|
|
35330
35388
|
const memoryRoot = path43.join(homeDir, ".claude-code", "memory");
|
|
35331
35389
|
const registry = loadSessionRegistry({ homeDir });
|
|
35332
35390
|
const latestByHash = /* @__PURE__ */ new Map();
|
|
@@ -35571,7 +35629,7 @@ function maintenanceAggregateReport(report) {
|
|
|
35571
35629
|
function maintenanceRunRequiresAttention(report) {
|
|
35572
35630
|
return report.errors > 0 || report.blocked > 0 || report.quarantined > 0 || report.compactionFailures > 0 || !report.disk.healthy;
|
|
35573
35631
|
}
|
|
35574
|
-
function writeMaintenanceLastRunStatus(report, homeDir =
|
|
35632
|
+
function writeMaintenanceLastRunStatus(report, homeDir = os22.homedir()) {
|
|
35575
35633
|
const filePath = getMaintenanceLastRunStatusPath(homeDir);
|
|
35576
35634
|
const status = {
|
|
35577
35635
|
version: 3,
|
|
@@ -35600,7 +35658,7 @@ function writeMaintenanceLastRunStatus(report, homeDir = os21.homedir()) {
|
|
|
35600
35658
|
fs34.renameSync(tempPath, filePath);
|
|
35601
35659
|
return filePath;
|
|
35602
35660
|
}
|
|
35603
|
-
function readMaintenanceLastRunStatus(homeDir =
|
|
35661
|
+
function readMaintenanceLastRunStatus(homeDir = os22.homedir()) {
|
|
35604
35662
|
try {
|
|
35605
35663
|
const value = JSON.parse(fs34.readFileSync(getMaintenanceLastRunStatusPath(homeDir), "utf8"));
|
|
35606
35664
|
if (value.version !== 1 && value.version !== 2 && value.version !== 3 || typeof value.startedAt !== "string" || !Number.isFinite(Date.parse(value.startedAt)) || typeof value.finishedAt !== "string" || !Number.isFinite(Date.parse(value.finishedAt))) return null;
|
|
@@ -35860,7 +35918,7 @@ function sanitizeMaintenanceError(message) {
|
|
|
35860
35918
|
// src/apps/cli/maintenance-scheduler.ts
|
|
35861
35919
|
import { execFileSync as execFileSync4 } from "node:child_process";
|
|
35862
35920
|
import * as fs35 from "node:fs";
|
|
35863
|
-
import * as
|
|
35921
|
+
import * as os23 from "node:os";
|
|
35864
35922
|
import * as path44 from "node:path";
|
|
35865
35923
|
var MAINTENANCE_LABEL = "com.claude-memory-layer.maintenance";
|
|
35866
35924
|
var DEFAULT_MAINTENANCE_INTERVAL_SECONDS = 300;
|
|
@@ -35877,7 +35935,7 @@ function resolveMaintenancePlatform(platform = process.platform) {
|
|
|
35877
35935
|
if (platform === "darwin" || platform === "linux") return platform;
|
|
35878
35936
|
throw new Error(`maintenance scheduling is not supported on ${platform}; use "claude-memory-layer maintenance run" from your scheduler`);
|
|
35879
35937
|
}
|
|
35880
|
-
function getMaintenanceSchedulerPaths(platform = process.platform, homeDir =
|
|
35938
|
+
function getMaintenanceSchedulerPaths(platform = process.platform, homeDir = os23.homedir()) {
|
|
35881
35939
|
const supported = resolveMaintenancePlatform(platform);
|
|
35882
35940
|
const logPath = path44.join(homeDir, ".claude-code", "memory", "logs", "maintenance.log");
|
|
35883
35941
|
if (supported === "darwin") {
|
|
@@ -35954,7 +36012,7 @@ WantedBy=timers.target
|
|
|
35954
36012
|
}
|
|
35955
36013
|
function installMaintenanceScheduler(options, deps = {}) {
|
|
35956
36014
|
const platform = resolveMaintenancePlatform(options.platform);
|
|
35957
|
-
const homeDir = options.homeDir ??
|
|
36015
|
+
const homeDir = options.homeDir ?? os23.homedir();
|
|
35958
36016
|
const intervalSeconds = parseMaintenanceInterval(options.intervalSeconds);
|
|
35959
36017
|
validateExecutablePath(options.nodePath, "Node executable");
|
|
35960
36018
|
validateExecutablePath(options.cliPath, "CLI entrypoint");
|
|
@@ -36011,7 +36069,7 @@ function installMaintenanceScheduler(options, deps = {}) {
|
|
|
36011
36069
|
}
|
|
36012
36070
|
function getMaintenanceSchedulerStatus(options = {}, deps = {}) {
|
|
36013
36071
|
const platform = resolveMaintenancePlatform(options.platform);
|
|
36014
|
-
const paths = getMaintenanceSchedulerPaths(platform, options.homeDir ??
|
|
36072
|
+
const paths = getMaintenanceSchedulerPaths(platform, options.homeDir ?? os23.homedir());
|
|
36015
36073
|
const installed = paths.definitionPaths.every((file) => fs35.existsSync(file));
|
|
36016
36074
|
if (!installed) return { ...paths, installed: false, active: false };
|
|
36017
36075
|
const runner = deps.execFileSync ?? execFileSync4;
|
|
@@ -36020,7 +36078,7 @@ function getMaintenanceSchedulerStatus(options = {}, deps = {}) {
|
|
|
36020
36078
|
}
|
|
36021
36079
|
function uninstallMaintenanceScheduler(options = {}, deps = {}) {
|
|
36022
36080
|
const platform = resolveMaintenancePlatform(options.platform);
|
|
36023
|
-
const paths = getMaintenanceSchedulerPaths(platform, options.homeDir ??
|
|
36081
|
+
const paths = getMaintenanceSchedulerPaths(platform, options.homeDir ?? os23.homedir());
|
|
36024
36082
|
const runner = deps.execFileSync ?? execFileSync4;
|
|
36025
36083
|
if (platform === "darwin") {
|
|
36026
36084
|
const [plistPath] = paths.definitionPaths;
|
|
@@ -36118,7 +36176,7 @@ function systemdUnavailableMessage() {
|
|
|
36118
36176
|
|
|
36119
36177
|
// src/apps/cli/import-command.ts
|
|
36120
36178
|
init_project_path();
|
|
36121
|
-
import * as
|
|
36179
|
+
import * as os24 from "node:os";
|
|
36122
36180
|
import * as path45 from "node:path";
|
|
36123
36181
|
function resolveImportCommandLockOptions(options, deps = {}) {
|
|
36124
36182
|
if (options.lockPath !== void 0 && options.lockPath.trim().length === 0) {
|
|
@@ -36126,7 +36184,7 @@ function resolveImportCommandLockOptions(options, deps = {}) {
|
|
|
36126
36184
|
}
|
|
36127
36185
|
const useGlobalStorage = options.all === true && !options.project && !options.session;
|
|
36128
36186
|
if (useGlobalStorage) {
|
|
36129
|
-
const globalStoragePath = path45.join((deps.homedir ??
|
|
36187
|
+
const globalStoragePath = path45.join((deps.homedir ?? os24.homedir)(), ".claude-code", "memory");
|
|
36130
36188
|
return {
|
|
36131
36189
|
storageScope: "global",
|
|
36132
36190
|
lockPath: options.lockPath ?? path45.join(globalStoragePath, "vector-worker.lock")
|
|
@@ -36156,7 +36214,7 @@ init_sqlite_wrapper();
|
|
|
36156
36214
|
init_project_path();
|
|
36157
36215
|
init_session_registry();
|
|
36158
36216
|
import * as fs36 from "node:fs";
|
|
36159
|
-
import * as
|
|
36217
|
+
import * as os25 from "node:os";
|
|
36160
36218
|
import * as path46 from "node:path";
|
|
36161
36219
|
function parseProjectScopeAuditDays(value) {
|
|
36162
36220
|
if (value === void 0) return 7;
|
|
@@ -36168,7 +36226,7 @@ function parseProjectScopeAuditDays(value) {
|
|
|
36168
36226
|
}
|
|
36169
36227
|
function auditProjectScope(options = {}, deps = {}) {
|
|
36170
36228
|
const resolved = {
|
|
36171
|
-
homeDir: options.homeDir ??
|
|
36229
|
+
homeDir: options.homeDir ?? os25.homedir(),
|
|
36172
36230
|
days: parseProjectScopeAuditDays(options.days),
|
|
36173
36231
|
groupByProject: options.groupByProject === true
|
|
36174
36232
|
};
|
|
@@ -36399,11 +36457,11 @@ function isLocalDirectory2(directory) {
|
|
|
36399
36457
|
init_existing_store();
|
|
36400
36458
|
init_repo_identity();
|
|
36401
36459
|
import * as fs37 from "node:fs";
|
|
36402
|
-
import * as
|
|
36460
|
+
import * as os26 from "node:os";
|
|
36403
36461
|
import * as path47 from "node:path";
|
|
36404
36462
|
function inspectProjectBootstrapHealth(options) {
|
|
36405
36463
|
const projectPath = path47.resolve(options.projectPath);
|
|
36406
|
-
const homeDir = options.homeDir ??
|
|
36464
|
+
const homeDir = options.homeDir ?? os26.homedir();
|
|
36407
36465
|
const identity = resolveCanonicalRepoIdentity(projectPath);
|
|
36408
36466
|
const store = resolveExistingStore(projectPath, { homeDir });
|
|
36409
36467
|
const settingsText = readText(path47.join(homeDir, ".claude", "settings.json"));
|
|
@@ -36900,20 +36958,6 @@ async function findOldestGap(remote, projectKey, localSeqs, pullCursor) {
|
|
|
36900
36958
|
};
|
|
36901
36959
|
}
|
|
36902
36960
|
|
|
36903
|
-
// src/core/mongo-sync-config.ts
|
|
36904
|
-
function redactMongoUri2(uri) {
|
|
36905
|
-
const schemeIdx = uri.indexOf("://");
|
|
36906
|
-
if (schemeIdx === -1) return uri;
|
|
36907
|
-
const atIdx = uri.indexOf("@", schemeIdx + 3);
|
|
36908
|
-
if (atIdx === -1) return uri;
|
|
36909
|
-
const creds = uri.slice(schemeIdx + 3, atIdx);
|
|
36910
|
-
const colonIdx = creds.indexOf(":");
|
|
36911
|
-
if (colonIdx === -1) return uri;
|
|
36912
|
-
const prefix = uri.slice(0, schemeIdx + 3 + colonIdx + 1);
|
|
36913
|
-
const suffix = uri.slice(atIdx);
|
|
36914
|
-
return `${prefix}***${suffix}`;
|
|
36915
|
-
}
|
|
36916
|
-
|
|
36917
36961
|
// src/apps/cli/mongo-sync-command.ts
|
|
36918
36962
|
init_sqlite_event_store();
|
|
36919
36963
|
init_project_path();
|
|
@@ -37074,8 +37118,8 @@ async function runMongoSyncAudit(options, deps = {}) {
|
|
|
37074
37118
|
const report = await auditMongoSync(store, connection.collection, { projectKey });
|
|
37075
37119
|
return { status: report.status, projectKey, detail: summarizeAudit(report), report };
|
|
37076
37120
|
} catch (error) {
|
|
37077
|
-
const safeUri =
|
|
37078
|
-
const message = (error
|
|
37121
|
+
const safeUri = redactMongoUri(uri);
|
|
37122
|
+
const message = describeMongoConnectionError(error, uri);
|
|
37079
37123
|
return { status: "fail", projectKey, detail: `Mongo sync audit failed (${safeUri}, db=${dbName}): ${message}` };
|
|
37080
37124
|
} finally {
|
|
37081
37125
|
await connection?.close().catch(() => void 0);
|
|
@@ -37238,8 +37282,8 @@ function normalizeClass(value) {
|
|
|
37238
37282
|
}
|
|
37239
37283
|
|
|
37240
37284
|
// src/apps/cli/index.ts
|
|
37241
|
-
var CLAUDE_SETTINGS_PATH = path50.join(
|
|
37242
|
-
var CODEX_HOOKS_PATH = path50.join(
|
|
37285
|
+
var CLAUDE_SETTINGS_PATH = path50.join(os27.homedir(), ".claude", "settings.json");
|
|
37286
|
+
var CODEX_HOOKS_PATH = path50.join(os27.homedir(), ".codex", "hooks.json");
|
|
37243
37287
|
function getPluginPath() {
|
|
37244
37288
|
const possiblePaths = [
|
|
37245
37289
|
path50.join(__dirname, ".."),
|
|
@@ -37255,7 +37299,7 @@ function getPluginPath() {
|
|
|
37255
37299
|
return p;
|
|
37256
37300
|
}
|
|
37257
37301
|
}
|
|
37258
|
-
return path50.join(
|
|
37302
|
+
return path50.join(os27.homedir(), ".npm-global", "lib", "node_modules", "claude-memory-layer", "dist");
|
|
37259
37303
|
}
|
|
37260
37304
|
function readEnginesNodeRange(packageRoot) {
|
|
37261
37305
|
try {
|
|
@@ -37334,7 +37378,7 @@ function resolveHealthProjectIdentity(projectPath) {
|
|
|
37334
37378
|
return { scope: "project", id: /^[a-f0-9]{8}$/.test(normalized) ? normalized : hashProjectPath(normalized) };
|
|
37335
37379
|
}
|
|
37336
37380
|
function scanCanonicalProjectStores(canonicalId) {
|
|
37337
|
-
const memoryRoot = path50.join(
|
|
37381
|
+
const memoryRoot = path50.join(os27.homedir(), ".claude-code", "memory");
|
|
37338
37382
|
const projectsRoot = path50.join(memoryRoot, "projects");
|
|
37339
37383
|
let scannedStoreCount = 0;
|
|
37340
37384
|
let matchingStoreCount = 0;
|
|
@@ -37770,7 +37814,7 @@ async function runOperationCli(action, label) {
|
|
|
37770
37814
|
}
|
|
37771
37815
|
}
|
|
37772
37816
|
var program = new Command();
|
|
37773
|
-
program.name("claude-memory-layer").description("Claude Code Memory Plugin CLI").version("2.5.
|
|
37817
|
+
program.name("claude-memory-layer").description("Claude Code Memory Plugin CLI").version("2.5.1");
|
|
37774
37818
|
program.command("market-context").description("Fetch read-only DART/FRED/Finnhub context with structured MarketContextSnapshot bull/bear/risk/catalyst analysis").option("--company <name>", "Company name for DART fallback search and report subject").option("--dart-corp-code <code>", "Exact DART corp_code for issuer-specific filings").option("--symbol <ticker>", "Listed ticker for Finnhub company profile").option("--providers <list>", "Comma-separated providers: dart,fred,finnhub").option("--fred-series <list>", "Comma-separated FRED series IDs").option("--json", "Print structured JSON including analysis.marketSnapshot").option("--no-snapshot", "Disable MarketContextSnapshot and DART company snapshot analysis").action(async (options) => {
|
|
37775
37819
|
try {
|
|
37776
37820
|
await runMarketContextCommand(options);
|
|
@@ -37919,7 +37963,7 @@ program.command("doctor").description("Diagnose the environment: Node version, e
|
|
|
37919
37963
|
...readMcpClientConfigs({ cwd: process.cwd() }).map((read) => checkMcpClientConfig(read, packageRoot, mcpServerEntry)),
|
|
37920
37964
|
checkProjectStoreAccess(projectStorePath)
|
|
37921
37965
|
];
|
|
37922
|
-
const memoryRoot = path50.join(
|
|
37966
|
+
const memoryRoot = path50.join(os27.homedir(), ".claude-code", "memory");
|
|
37923
37967
|
const { output, exitCode } = await runDoctor(checks, {
|
|
37924
37968
|
fix: options.fix === true,
|
|
37925
37969
|
repairEmbeddingBackend: (check) => repairEmbeddingBackend(check, {
|