@pcircle/memesh 4.2.6 → 4.2.8
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/marketplace.json +1 -1
- package/.claude-plugin/plugin.json +1 -1
- package/README.de.md +106 -2
- package/README.es.md +106 -2
- package/README.fr.md +106 -2
- package/README.ja.md +106 -2
- package/README.ko.md +106 -2
- package/README.md +89 -3
- package/README.pt.md +106 -2
- package/README.th.md +124 -6
- package/README.vi.md +106 -2
- package/README.zh-CN.md +105 -2
- package/README.zh-TW.md +105 -2
- package/dashboard/dist/index.html +7 -7
- package/dist/cli/view-live.d.ts.map +1 -1
- package/dist/cli/view-live.js +3 -1
- package/dist/cli/view-live.js.map +1 -1
- package/dist/core/analytics.d.ts +0 -31
- package/dist/core/analytics.d.ts.map +1 -1
- package/dist/core/analytics.js +0 -59
- package/dist/core/analytics.js.map +1 -1
- package/dist/core/config.d.ts +0 -1
- package/dist/core/config.d.ts.map +1 -1
- package/dist/core/config.js +25 -4
- package/dist/core/config.js.map +1 -1
- package/dist/core/digest-validator.d.ts +1 -1
- package/dist/core/digest-validator.d.ts.map +1 -1
- package/dist/core/digest-validator.js +7 -2
- package/dist/core/digest-validator.js.map +1 -1
- package/dist/core/doctor.d.ts +6 -0
- package/dist/core/doctor.d.ts.map +1 -1
- package/dist/core/doctor.js +121 -5
- package/dist/core/doctor.js.map +1 -1
- package/dist/core/dreamer.d.ts.map +1 -1
- package/dist/core/dreamer.js.map +1 -1
- package/dist/core/embedder.d.ts +1 -0
- package/dist/core/embedder.d.ts.map +1 -1
- package/dist/core/embedder.js +14 -2
- package/dist/core/embedder.js.map +1 -1
- package/dist/core/extractor.d.ts.map +1 -1
- package/dist/core/extractor.js +10 -1
- package/dist/core/extractor.js.map +1 -1
- package/dist/core/failure-analyzer.d.ts.map +1 -1
- package/dist/core/failure-analyzer.js +16 -2
- package/dist/core/failure-analyzer.js.map +1 -1
- package/dist/core/install-hooks.d.ts +6 -0
- package/dist/core/install-hooks.d.ts.map +1 -1
- package/dist/core/install-hooks.js +37 -0
- package/dist/core/install-hooks.js.map +1 -1
- package/dist/core/llm-telemetry.d.ts +12 -0
- package/dist/core/llm-telemetry.d.ts.map +1 -1
- package/dist/core/llm-telemetry.js +21 -3
- package/dist/core/llm-telemetry.js.map +1 -1
- package/dist/core/operations.d.ts +5 -0
- package/dist/core/operations.d.ts.map +1 -1
- package/dist/core/operations.js +16 -0
- package/dist/core/operations.js.map +1 -1
- package/dist/core/paths.d.ts +2 -0
- package/dist/core/paths.d.ts.map +1 -1
- package/dist/core/paths.js +43 -0
- package/dist/core/paths.js.map +1 -1
- package/dist/core/project-tags.d.ts +20 -0
- package/dist/core/project-tags.d.ts.map +1 -0
- package/dist/core/project-tags.js +42 -0
- package/dist/core/project-tags.js.map +1 -0
- package/dist/core/schema-export.d.ts.map +1 -1
- package/dist/core/schema-export.js +17 -1
- package/dist/core/schema-export.js.map +1 -1
- package/dist/core/skill-usage-log.d.ts +1 -1
- package/dist/core/skill-usage-log.d.ts.map +1 -1
- package/dist/core/skill-usage-log.js +2 -2
- package/dist/core/skill-usage-log.js.map +1 -1
- package/dist/core/verifier.d.ts.map +1 -1
- package/dist/core/verifier.js +1 -6
- package/dist/core/verifier.js.map +1 -1
- package/dist/skills-manifest.json +10 -10
- package/dist/transports/cli/cli.js +156 -9
- package/dist/transports/cli/cli.js.map +1 -1
- package/dist/transports/http/server.d.ts.map +1 -1
- package/dist/transports/http/server.js +7 -1
- package/dist/transports/http/server.js.map +1 -1
- package/package.json +1 -1
- package/scripts/hooks/_shared.js +79 -3
- package/scripts/hooks/pre-compact.js +32 -8
- package/scripts/hooks/session-start.js +168 -17
- package/scripts/hooks/session-summary.js +137 -23
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"view-live.d.ts","sourceRoot":"","sources":["../../src/cli/view-live.ts"],"names":[],"mappings":"AAwBA,wBAAgB,yBAAyB,IAAI,MAAM,
|
|
1
|
+
{"version":3,"file":"view-live.d.ts","sourceRoot":"","sources":["../../src/cli/view-live.ts"],"names":[],"mappings":"AAwBA,wBAAgB,yBAAyB,IAAI,MAAM,CA8nElD"}
|
package/dist/cli/view-live.js
CHANGED
|
@@ -423,7 +423,9 @@ export function generateLiveDashboardHtml() {
|
|
|
423
423
|
var isLight = document.body.classList.contains('light');
|
|
424
424
|
themeBtn.textContent = isLight ? '\\ud83c\\udf19' : '\\u2600\\ufe0f';
|
|
425
425
|
localStorage.setItem('memesh-theme', isLight ? 'light' : 'dark');
|
|
426
|
-
|
|
426
|
+
// Theme is persisted client-side in localStorage only. An earlier
|
|
427
|
+
// POST /v1/config { theme } wrote a config.theme that nothing ever
|
|
428
|
+
// read back; removed with that dead field.
|
|
427
429
|
// Update graph label colors if graph has been rendered
|
|
428
430
|
var newLabelColor = isLight ? '#09090b' : '#fafafa';
|
|
429
431
|
var graphWrap = document.getElementById('graph-svg-wrap');
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"view-live.js","sourceRoot":"","sources":["../../src/cli/view-live.ts"],"names":[],"mappings":"AAMA,OAAO,EAAE,MAAM,IAAI,CAAC;AACpB,OAAO,IAAI,MAAM,MAAM,CAAC;AACxB,OAAO,EAAE,aAAa,EAAE,MAAM,KAAK,CAAC;AAEpC,MAAM,SAAS,GAAG,IAAI,CAAC,OAAO,CAAC,aAAa,CAAC,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC;AAC/D,MAAM,SAAS,GAAG,EAAE;KACjB,YAAY,CAAC,IAAI,CAAC,IAAI,CAAC,SAAS,EAAE,QAAQ,EAAE,cAAc,CAAC,EAAE,MAAM,CAAC;KACpE,OAAO,CAAC,aAAa,EAAE,YAAY,CAAC,CAAC;AAWxC,MAAM,UAAU,yBAAyB;IACvC,MAAM,GAAG,GAAG;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA2XX,CAAC,IAAI,EAAE,CAAC;IAIT,MAAM,MAAM,GAAG
|
|
1
|
+
{"version":3,"file":"view-live.js","sourceRoot":"","sources":["../../src/cli/view-live.ts"],"names":[],"mappings":"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"}
|
package/dist/core/analytics.d.ts
CHANGED
|
@@ -4,26 +4,6 @@ export interface HealthFactor {
|
|
|
4
4
|
weight: number;
|
|
5
5
|
detail: string;
|
|
6
6
|
}
|
|
7
|
-
export interface RecallEffectiveness {
|
|
8
|
-
overallHitRate: number;
|
|
9
|
-
totalHits: number;
|
|
10
|
-
totalMisses: number;
|
|
11
|
-
trackedEntities: number;
|
|
12
|
-
topEffective: Array<{
|
|
13
|
-
name: string;
|
|
14
|
-
type: string;
|
|
15
|
-
hits: number;
|
|
16
|
-
misses: number;
|
|
17
|
-
hitRate: number;
|
|
18
|
-
}>;
|
|
19
|
-
mostIgnored: Array<{
|
|
20
|
-
name: string;
|
|
21
|
-
type: string;
|
|
22
|
-
hits: number;
|
|
23
|
-
misses: number;
|
|
24
|
-
hitRate: number;
|
|
25
|
-
}>;
|
|
26
|
-
}
|
|
27
7
|
export declare const NOISE_TYPES: Set<string>;
|
|
28
8
|
export type AgeBucket = 'week' | 'month' | 'quarter' | 'older';
|
|
29
9
|
export interface AgeMatrixEntry {
|
|
@@ -58,17 +38,6 @@ export interface AnalyticsResult {
|
|
|
58
38
|
created: number;
|
|
59
39
|
recalled: number;
|
|
60
40
|
}>;
|
|
61
|
-
valueMetrics: {
|
|
62
|
-
totalRecalls: number;
|
|
63
|
-
lessonCount: number;
|
|
64
|
-
lessonsWithWarnings: number;
|
|
65
|
-
typeDistribution: unknown[];
|
|
66
|
-
};
|
|
67
|
-
recallEffectiveness: RecallEffectiveness | null;
|
|
68
|
-
cleanup: {
|
|
69
|
-
staleEntities: unknown[];
|
|
70
|
-
duplicateCandidates: unknown[];
|
|
71
|
-
};
|
|
72
41
|
ageMatrix: AgeMatrixEntry[];
|
|
73
42
|
knowledgeRadar: KnowledgeRadarEntry[];
|
|
74
43
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"analytics.d.ts","sourceRoot":"","sources":["../../src/core/analytics.ts"],"names":[],"mappings":"AASA,OAAO,KAAK,QAAQ,MAAM,gBAAgB,CAAC;AAG3C,MAAM,WAAW,YAAY;IAC3B,KAAK,EAAE,MAAM,CAAC;IACd,MAAM,EAAE,MAAM,CAAC;IACf,MAAM,EAAE,MAAM,CAAC;CAChB;
|
|
1
|
+
{"version":3,"file":"analytics.d.ts","sourceRoot":"","sources":["../../src/core/analytics.ts"],"names":[],"mappings":"AASA,OAAO,KAAK,QAAQ,MAAM,gBAAgB,CAAC;AAG3C,MAAM,WAAW,YAAY;IAC3B,KAAK,EAAE,MAAM,CAAC;IACd,MAAM,EAAE,MAAM,CAAC;IACf,MAAM,EAAE,MAAM,CAAC;CAChB;AAGD,eAAO,MAAM,WAAW,aAGtB,CAAC;AAEH,MAAM,MAAM,SAAS,GAAG,MAAM,GAAG,OAAO,GAAG,SAAS,GAAG,OAAO,CAAC;AAE/D,MAAM,WAAW,cAAc;IAC7B,IAAI,EAAE,MAAM,CAAC;IACb,MAAM,EAAE,SAAS,CAAC;IAClB,KAAK,EAAE,MAAM,CAAC;CACf;AAED,MAAM,WAAW,mBAAmB;IAClC,IAAI,EAAE,MAAM,CAAC;IACb,KAAK,EAAE,MAAM,CAAC;IACd,KAAK,EAAE,MAAM,EAAE,CAAC;CACjB;AAED,MAAM,WAAW,UAAU;IAGzB,cAAc,EAAE,MAAM,CAAC;IAEvB,KAAK,EAAE,KAAK,CAAC;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,KAAK,EAAE,MAAM,CAAA;KAAE,CAAC,CAAC;IAI9C,YAAY,EAAE,aAAa,GAAG,gCAAgC,CAAC;CAChE;AAED,MAAM,WAAW,eAAe;IAC9B,WAAW,EAAE,MAAM,CAAC;IACpB,aAAa,EAAE;QACb,QAAQ,EAAE,YAAY,CAAC;QACvB,OAAO,EAAE,YAAY,CAAC;QACtB,SAAS,EAAE,YAAY,CAAC;QACxB,OAAO,EAAE,YAAY,CAAC;KACvB,CAAC;IACF,UAAU,EAAE,UAAU,CAAC;IACvB,QAAQ,EAAE,KAAK,CAAC;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,OAAO,EAAE,MAAM,CAAC;QAAC,QAAQ,EAAE,MAAM,CAAA;KAAE,CAAC,CAAC;IACrE,SAAS,EAAE,cAAc,EAAE,CAAC;IAC5B,cAAc,EAAE,mBAAmB,EAAE,CAAC;CACvC;AAOD,wBAAgB,gBAAgB,CAAC,EAAE,EAAE,QAAQ,CAAC,QAAQ,GAAG,eAAe,CA0MvE;AAED,MAAM,WAAW,iBAAiB;IAChC,QAAQ,EAAE;QACR,gBAAgB,EAAE,MAAM,CAAC;QACzB,gBAAgB,EAAE,MAAM,CAAC;QACzB,UAAU,EAAE,MAAM,CAAC;KACpB,CAAC;IACF,SAAS,EAAE;QACT,cAAc,EAAE,MAAM,CAAC;QACvB,iBAAiB,EAAE,MAAM,CAAC;KAC3B,CAAC;IACF,aAAa,EAAE;QACb,UAAU,EAAE,MAAM,CAAC;QACnB,cAAc,EAAE,MAAM,CAAC;QACvB,cAAc,EAAE,MAAM,CAAC;KACxB,CAAC;CACH;AAMD,wBAAgB,kBAAkB,CAChC,EAAE,EAAE,QAAQ,CAAC,QAAQ,EACrB,UAAU,SAAK,GACd,iBAAiB,CA8DnB"}
|
package/dist/core/analytics.js
CHANGED
|
@@ -63,62 +63,6 @@ export function computeAnalytics(db) {
|
|
|
63
63
|
}
|
|
64
64
|
}
|
|
65
65
|
const timeline = Array.from(timelineMap.values()).sort((a, b) => a.date.localeCompare(b.date));
|
|
66
|
-
const totalRecalls = db.prepare("SELECT COALESCE(SUM(access_count), 0) as c FROM entities").get().c;
|
|
67
|
-
const lessonsWithWarnings = db.prepare("SELECT COUNT(*) as c FROM entities WHERE type = 'lesson_learned' AND access_count > 0").get().c;
|
|
68
|
-
const typeDistribution = db.prepare("SELECT type, COUNT(*) as count FROM entities GROUP BY type ORDER BY count DESC").all();
|
|
69
|
-
const valueMetrics = {
|
|
70
|
-
totalRecalls,
|
|
71
|
-
lessonCount,
|
|
72
|
-
lessonsWithWarnings,
|
|
73
|
-
typeDistribution,
|
|
74
|
-
};
|
|
75
|
-
const staleEntities = db.prepare(`
|
|
76
|
-
SELECT id, name, type, confidence,
|
|
77
|
-
CAST((julianday('now') - julianday(COALESCE(last_accessed_at, created_at))) AS INTEGER) as days_unused
|
|
78
|
-
FROM entities
|
|
79
|
-
WHERE status = 'active'
|
|
80
|
-
AND confidence < 0.4
|
|
81
|
-
AND (last_accessed_at IS NULL OR last_accessed_at < datetime('now', '-30 days'))
|
|
82
|
-
ORDER BY confidence ASC
|
|
83
|
-
LIMIT 10
|
|
84
|
-
`).all();
|
|
85
|
-
const duplicateCandidates = db.prepare(`
|
|
86
|
-
SELECT e1.name as name1, e2.name as name2, e1.type
|
|
87
|
-
FROM entities e1
|
|
88
|
-
JOIN entities e2 ON e1.id < e2.id AND e1.type = e2.type
|
|
89
|
-
WHERE e1.status = 'active' AND e2.status = 'active'
|
|
90
|
-
AND (INSTR(LOWER(e1.name), LOWER(e2.name)) > 0 OR INSTR(LOWER(e2.name), LOWER(e1.name)) > 0)
|
|
91
|
-
LIMIT 5
|
|
92
|
-
`).all();
|
|
93
|
-
const cleanup = { staleEntities, duplicateCandidates };
|
|
94
|
-
let recallEffectiveness = null;
|
|
95
|
-
try {
|
|
96
|
-
const recallColCheck = db.prepare("PRAGMA table_info(entities)").all();
|
|
97
|
-
if (recallColCheck.some((c) => c.name === 'recall_hits')) {
|
|
98
|
-
const totals = db.prepare(`SELECT COALESCE(SUM(recall_hits), 0) as hits, COALESCE(SUM(recall_misses), 0) as misses,
|
|
99
|
-
COUNT(*) as tracked FROM entities WHERE (recall_hits > 0 OR recall_misses > 0)`).get();
|
|
100
|
-
const total = totals.hits + totals.misses;
|
|
101
|
-
const overallHitRate = total > 0 ? totals.hits / total : 0;
|
|
102
|
-
const topEffective = db.prepare(`SELECT name, type, COALESCE(recall_hits, 0) as hits, COALESCE(recall_misses, 0) as misses,
|
|
103
|
-
CAST(COALESCE(recall_hits, 0) AS REAL) / (COALESCE(recall_hits, 0) + COALESCE(recall_misses, 0)) as hitRate
|
|
104
|
-
FROM entities WHERE (COALESCE(recall_hits, 0) + COALESCE(recall_misses, 0)) > 0
|
|
105
|
-
ORDER BY hitRate DESC, hits DESC LIMIT 5`).all();
|
|
106
|
-
const mostIgnored = db.prepare(`SELECT name, type, COALESCE(recall_hits, 0) as hits, COALESCE(recall_misses, 0) as misses,
|
|
107
|
-
CAST(COALESCE(recall_hits, 0) AS REAL) / (COALESCE(recall_hits, 0) + COALESCE(recall_misses, 0)) as hitRate
|
|
108
|
-
FROM entities WHERE (COALESCE(recall_hits, 0) + COALESCE(recall_misses, 0)) > 0
|
|
109
|
-
ORDER BY hitRate ASC, misses DESC LIMIT 5`).all();
|
|
110
|
-
recallEffectiveness = {
|
|
111
|
-
overallHitRate,
|
|
112
|
-
totalHits: totals.hits,
|
|
113
|
-
totalMisses: totals.misses,
|
|
114
|
-
trackedEntities: totals.tracked,
|
|
115
|
-
topEffective,
|
|
116
|
-
mostIgnored,
|
|
117
|
-
};
|
|
118
|
-
}
|
|
119
|
-
}
|
|
120
|
-
catch {
|
|
121
|
-
}
|
|
122
66
|
const ageMatrixRaw = db.prepare(`
|
|
123
67
|
SELECT type,
|
|
124
68
|
CASE
|
|
@@ -196,9 +140,6 @@ export function computeAnalytics(db) {
|
|
|
196
140
|
healthFactors,
|
|
197
141
|
loopMetric,
|
|
198
142
|
timeline,
|
|
199
|
-
valueMetrics,
|
|
200
|
-
recallEffectiveness,
|
|
201
|
-
cleanup,
|
|
202
143
|
ageMatrix,
|
|
203
144
|
knowledgeRadar,
|
|
204
145
|
};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"analytics.js","sourceRoot":"","sources":["../../src/core/analytics.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"analytics.js","sourceRoot":"","sources":["../../src/core/analytics.ts"],"names":[],"mappings":"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"}
|
package/dist/core/config.d.ts
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"config.d.ts","sourceRoot":"","sources":["../../src/core/config.ts"],"names":[],"mappings":"AAOA,MAAM,WAAW,SAAS;IACxB,QAAQ,EAAE,WAAW,GAAG,QAAQ,GAAG,QAAQ,CAAC;IAC5C,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,MAAM,CAAC,EAAE,MAAM,CAAC;CACjB;AAkBD,MAAM,WAAW,cAAc;IAC7B,QAAQ,EAAE,MAAM,GAAG,QAAQ,GAAG,QAAQ,CAAC;IACvC,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB;AAED,MAAM,WAAW,YAAY;IAC3B,GAAG,CAAC,EAAE,SAAS,CAAC;IAgBhB,YAAY,CAAC,EAAE,SAAS,EAAE,CAAC;IAM3B,QAAQ,CAAC,EAAE,cAAc,CAAC;IAC1B,WAAW,CAAC,EAAE,OAAO,CAAC;IACtB,YAAY,CAAC,EAAE,MAAM,CAAC;IAMtB,0BAA0B,CAAC,EAAE,OAAO,CAAC;IAWrC,UAAU,CAAC,EAAE,KAAK,GAAG,OAAO,GAAG,OAAO,GAAG,OAAO,CAAC;IACjD,
|
|
1
|
+
{"version":3,"file":"config.d.ts","sourceRoot":"","sources":["../../src/core/config.ts"],"names":[],"mappings":"AAOA,MAAM,WAAW,SAAS;IACxB,QAAQ,EAAE,WAAW,GAAG,QAAQ,GAAG,QAAQ,CAAC;IAC5C,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,MAAM,CAAC,EAAE,MAAM,CAAC;CACjB;AAkBD,MAAM,WAAW,cAAc;IAC7B,QAAQ,EAAE,MAAM,GAAG,QAAQ,GAAG,QAAQ,CAAC;IACvC,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB;AAED,MAAM,WAAW,YAAY;IAC3B,GAAG,CAAC,EAAE,SAAS,CAAC;IAgBhB,YAAY,CAAC,EAAE,SAAS,EAAE,CAAC;IAM3B,QAAQ,CAAC,EAAE,cAAc,CAAC;IAC1B,WAAW,CAAC,EAAE,OAAO,CAAC;IACtB,YAAY,CAAC,EAAE,MAAM,CAAC;IAMtB,0BAA0B,CAAC,EAAE,OAAO,CAAC;IAWrC,UAAU,CAAC,EAAE,KAAK,GAAG,OAAO,GAAG,OAAO,GAAG,OAAO,CAAC;IACjD,cAAc,CAAC,EAAE,OAAO,CAAC;CAC1B;AAED,MAAM,WAAW,YAAY;IAC3B,IAAI,EAAE,IAAI,CAAC;IACX,YAAY,EAAE,IAAI,CAAC;IACnB,OAAO,EAAE,IAAI,CAAC;IACd,kBAAkB,EAAE,IAAI,CAAC;IACzB,UAAU,EAAE,MAAM,GAAG,QAAQ,GAAG,WAAW,GAAG,QAAQ,GAAG,OAAO,CAAC;IACjE,GAAG,EAAE,SAAS,GAAG,IAAI,CAAC;IAOtB,YAAY,EAAE,SAAS,EAAE,CAAC;IAC1B,WAAW,EAAE,CAAC,GAAG,CAAC,CAAC;CACpB;AA2BD,wBAAgB,UAAU,IAAI,YAAY,CA2BzC;AAED,wBAAgB,WAAW,CAAC,MAAM,EAAE,YAAY,GAAG,IAAI,CAetD;AAED,wBAAgB,YAAY,CAC1B,OAAO,EAAE,IAAI,CAAC,OAAO,CAAC,YAAY,CAAC,EAAE,KAAK,CAAC,GAAG;IAAE,GAAG,CAAC,EAAE,SAAS,GAAG,IAAI,CAAA;CAAE,GACvE,YAAY,CAmBd;AAID,wBAAgB,UAAU,CAAC,GAAG,EAAE,MAAM,GAAG,MAAM,CAG9C;AAiED,wBAAgB,kBAAkB,CAAC,MAAM,CAAC,EAAE,YAAY,GAAG,YAAY,CAyBtE;AA+CD,wBAAgB,qBAAqB,CAAC,MAAM,CAAC,EAAE,YAAY,GAAG,MAAM,CAOnE;AAQD,wBAAgB,eAAe,CAAC,MAAM,CAAC,EAAE,YAAY,GAAG,IAAI,CAM3D;AAID,wBAAgB,YAAY,IAAI,MAAM,CAAwB;AAC9D,wBAAgB,aAAa,IAAI,MAAM,CAA6B"}
|
package/dist/core/config.js
CHANGED
|
@@ -10,14 +10,26 @@ function configDir() {
|
|
|
10
10
|
function configFilePath() {
|
|
11
11
|
return path.join(configDir(), 'config.json');
|
|
12
12
|
}
|
|
13
|
+
let lastConfigReadWarning = null;
|
|
13
14
|
export function readConfig() {
|
|
15
|
+
const p = configFilePath();
|
|
16
|
+
if (!fs.existsSync(p))
|
|
17
|
+
return {};
|
|
14
18
|
try {
|
|
15
|
-
const p = configFilePath();
|
|
16
|
-
if (!fs.existsSync(p))
|
|
17
|
-
return {};
|
|
18
19
|
return JSON.parse(fs.readFileSync(p, 'utf8'));
|
|
19
20
|
}
|
|
20
|
-
catch {
|
|
21
|
+
catch (err) {
|
|
22
|
+
const msg = err instanceof Error ? err.message : String(err);
|
|
23
|
+
const key = `${p}::${msg}`;
|
|
24
|
+
if (key !== lastConfigReadWarning) {
|
|
25
|
+
lastConfigReadWarning = key;
|
|
26
|
+
try {
|
|
27
|
+
process.stderr.write(`[memesh config] ${p} exists but could not be read/parsed (${msg}). ` +
|
|
28
|
+
`Every setting in it — LLM provider, fallbacks, embedder — is being ignored, ` +
|
|
29
|
+
`so Smart Mode is off until this is fixed.\n`);
|
|
30
|
+
}
|
|
31
|
+
catch { }
|
|
32
|
+
}
|
|
21
33
|
return {};
|
|
22
34
|
}
|
|
23
35
|
}
|
|
@@ -58,7 +70,16 @@ export function maskApiKey(key) {
|
|
|
58
70
|
return '***';
|
|
59
71
|
return key.slice(0, 4) + '***' + key.slice(-4);
|
|
60
72
|
}
|
|
73
|
+
function envAutoDetectDisabled() {
|
|
74
|
+
const raw = process.env.MEMESH_AUTO_DETECT_LLM;
|
|
75
|
+
if (raw === undefined)
|
|
76
|
+
return false;
|
|
77
|
+
const v = raw.trim().toLowerCase();
|
|
78
|
+
return v === '0' || v === 'false' || v === 'no' || v === 'off';
|
|
79
|
+
}
|
|
61
80
|
function detectFromEnv() {
|
|
81
|
+
if (envAutoDetectDisabled())
|
|
82
|
+
return null;
|
|
62
83
|
if (process.env.ANTHROPIC_API_KEY) {
|
|
63
84
|
return { provider: 'anthropic', model: 'claude-haiku-4-5', apiKey: process.env.ANTHROPIC_API_KEY };
|
|
64
85
|
}
|
package/dist/core/config.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"config.js","sourceRoot":"","sources":["../../src/core/config.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,IAAI,CAAC;AACpB,OAAO,IAAI,MAAM,MAAM,CAAC;AACxB,OAAO,EAAE,aAAa,EAAE,MAAM,QAAQ,CAAC;AACvC,OAAO,EAAE,SAAS,EAAE,MAAM,YAAY,CAAC;
|
|
1
|
+
{"version":3,"file":"config.js","sourceRoot":"","sources":["../../src/core/config.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"digest-validator.d.ts","sourceRoot":"","sources":["../../src/core/digest-validator.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"digest-validator.d.ts","sourceRoot":"","sources":["../../src/core/digest-validator.ts"],"names":[],"mappings":"AAsCA,OAAO,EAAW,KAAK,UAAU,EAAE,MAAM,iBAAiB,CAAC;AAC3D,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,aAAa,CAAC;AAG7C,MAAM,WAAW,eAAe;IAC9B,KAAK,EAAE,MAAM,CAAC;IACd,MAAM,EAAE,MAAM,CAAC;CAChB;AAOD,MAAM,WAAW,gBAAgB;IAY/B,MAAM,EAAE,MAAM,GAAG,QAAQ,GAAG,QAAQ,GAAG,aAAa,CAAC;IACrD,gBAAgB,EAAE,eAAe,EAAE,CAAC;IAEpC,WAAW,EAAE,MAAM,CAAC;CACrB;AAED,MAAM,WAAW,qBAAqB;IACpC,SAAS,CAAC,EAAE,SAAS,EAAE,CAAC;IACxB,SAAS,CAAC,EAAE,CAAC,QAAQ,EAAE,UAAU,EAAE,KAAK,IAAI,CAAC;CAC9C;AAgBD,wBAAsB,cAAc,CAClC,kBAAkB,EAAE,MAAM,EAAE,EAC5B,kBAAkB,EAAE,MAAM,EAAE,EAC5B,GAAG,EAAE,SAAS,EACd,IAAI,GAAE,qBAA0B,GAC/B,OAAO,CAAC,gBAAgB,CAAC,CA8C3B;AAaD,wBAAgB,sBAAsB,CAAC,IAAI,EAAE,MAAM,GAAG,gBAAgB,CAoDrE"}
|
|
@@ -27,8 +27,13 @@ export async function validateDigest(digestObservations, sourceObservations, llm
|
|
|
27
27
|
onAttempt: opts.onAttempt,
|
|
28
28
|
});
|
|
29
29
|
}
|
|
30
|
-
catch {
|
|
31
|
-
|
|
30
|
+
catch (err) {
|
|
31
|
+
const msg = err instanceof Error ? err.message : String(err);
|
|
32
|
+
try {
|
|
33
|
+
process.stderr.write(`[memesh digest-validator] validation did not run: ${msg}\n`);
|
|
34
|
+
}
|
|
35
|
+
catch { }
|
|
36
|
+
return { status: 'unavailable', suspiciousClaims: [], rawResponse: '' };
|
|
32
37
|
}
|
|
33
38
|
return parseValidatorResponse(rawResponse);
|
|
34
39
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"digest-validator.js","sourceRoot":"","sources":["../../src/core/digest-validator.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"digest-validator.js","sourceRoot":"","sources":["../../src/core/digest-validator.ts"],"names":[],"mappings":"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"}
|
package/dist/core/doctor.d.ts
CHANGED
|
@@ -1,5 +1,6 @@
|
|
|
1
1
|
import fs from 'fs';
|
|
2
2
|
import { detectCapabilities, getConfigPath } from './config.js';
|
|
3
|
+
import { probeProvider } from './llm-validator.js';
|
|
3
4
|
import { openDatabase, closeDatabase, isDatabaseOpen } from '../db.js';
|
|
4
5
|
import { getUpdateCheck } from './version-check.js';
|
|
5
6
|
import { getCurrentInstallChannel, getInstallChannelSupport } from './install-channel.js';
|
|
@@ -11,6 +12,7 @@ export interface DoctorCheck {
|
|
|
11
12
|
status: DoctorCheckStatus;
|
|
12
13
|
summary: string;
|
|
13
14
|
fix?: string;
|
|
15
|
+
informational?: boolean;
|
|
14
16
|
}
|
|
15
17
|
export interface DoctorResult {
|
|
16
18
|
status: DoctorOverallStatus;
|
|
@@ -20,6 +22,9 @@ interface DoctorOptions {
|
|
|
20
22
|
packageRoot: string;
|
|
21
23
|
packageVersion: string;
|
|
22
24
|
probeHttp?: boolean;
|
|
25
|
+
probeCapabilities?: boolean;
|
|
26
|
+
embedTextImpl?: (text: string) => Promise<Float32Array | null>;
|
|
27
|
+
probeProviderImpl?: typeof probeProvider;
|
|
23
28
|
httpBaseUrl?: string;
|
|
24
29
|
platform?: NodeJS.Platform;
|
|
25
30
|
openDatabaseImpl?: typeof openDatabase;
|
|
@@ -40,6 +45,7 @@ interface DoctorOptions {
|
|
|
40
45
|
ok: false;
|
|
41
46
|
message: string;
|
|
42
47
|
};
|
|
48
|
+
resolveShellMemeshImpl?: () => string | null;
|
|
43
49
|
}
|
|
44
50
|
export declare function runDoctor(options: DoctorOptions): Promise<DoctorResult>;
|
|
45
51
|
export declare function formatDoctorReport(result: DoctorResult, packageVersion: string): string[];
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"doctor.d.ts","sourceRoot":"","sources":["../../src/core/doctor.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,IAAI,CAAC;AAKpB,OAAO,EAAE,kBAAkB,EAAE,aAAa,
|
|
1
|
+
{"version":3,"file":"doctor.d.ts","sourceRoot":"","sources":["../../src/core/doctor.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,IAAI,CAAC;AAKpB,OAAO,EAAE,kBAAkB,EAAE,aAAa,EAAqB,MAAM,aAAa,CAAC;AAEnF,OAAO,EAAE,aAAa,EAAE,MAAM,oBAAoB,CAAC;AACnD,OAAO,EAAE,YAAY,EAAE,aAAa,EAAyB,cAAc,EAAE,MAAM,UAAU,CAAC;AAC9F,OAAO,EAAE,cAAc,EAAE,MAAM,oBAAoB,CAAC;AACpD,OAAO,EAAE,wBAAwB,EAAE,wBAAwB,EAAE,MAAM,sBAAsB,CAAC;AAI1F,MAAM,MAAM,iBAAiB,GAAG,MAAM,GAAG,MAAM,GAAG,MAAM,CAAC;AACzD,MAAM,MAAM,mBAAmB,GAAG,MAAM,GAAG,oBAAoB,GAAG,MAAM,CAAC;AAEzE,MAAM,WAAW,WAAW;IAC1B,EAAE,EAAE,MAAM,CAAC;IACX,KAAK,EAAE,MAAM,CAAC;IACd,MAAM,EAAE,iBAAiB,CAAC;IAC1B,OAAO,EAAE,MAAM,CAAC;IAChB,GAAG,CAAC,EAAE,MAAM,CAAC;IAqBb,aAAa,CAAC,EAAE,OAAO,CAAC;CACzB;AAED,MAAM,WAAW,YAAY;IAC3B,MAAM,EAAE,mBAAmB,CAAC;IAC5B,MAAM,EAAE,WAAW,EAAE,CAAC;CACvB;AAUD,UAAU,aAAa;IACrB,WAAW,EAAE,MAAM,CAAC;IACpB,cAAc,EAAE,MAAM,CAAC;IACvB,SAAS,CAAC,EAAE,OAAO,CAAC;IAQpB,iBAAiB,CAAC,EAAE,OAAO,CAAC;IAC5B,aAAa,CAAC,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,OAAO,CAAC,YAAY,GAAG,IAAI,CAAC,CAAC;IAC/D,iBAAiB,CAAC,EAAE,OAAO,aAAa,CAAC;IACzC,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,QAAQ,CAAC,EAAE,MAAM,CAAC,QAAQ,CAAC;IAC3B,gBAAgB,CAAC,EAAE,OAAO,YAAY,CAAC;IACvC,iBAAiB,CAAC,EAAE,OAAO,aAAa,CAAC;IACzC,kBAAkB,CAAC,EAAE,OAAO,cAAc,CAAC;IAC3C,sBAAsB,CAAC,EAAE,OAAO,kBAAkB,CAAC;IACnD,iBAAiB,CAAC,EAAE,OAAO,aAAa,CAAC;IACzC,kBAAkB,CAAC,EAAE,OAAO,cAAc,CAAC;IAC3C,4BAA4B,CAAC,EAAE,OAAO,wBAAwB,CAAC;IAC/D,4BAA4B,CAAC,EAAE,OAAO,wBAAwB,CAAC;IAC/D,cAAc,CAAC,EAAE,OAAO,EAAE,CAAC,UAAU,CAAC;IACtC,gBAAgB,CAAC,EAAE,OAAO,EAAE,CAAC,YAAY,CAAC;IAC1C,YAAY,CAAC,EAAE,OAAO,EAAE,CAAC,QAAQ,CAAC;IAClC,SAAS,CAAC,EAAE,OAAO,KAAK,CAAC;IAMzB,sBAAsB,CAAC,EAAE,CAAC,WAAW,EAAE,MAAM,KAAK;QAAE,EAAE,EAAE,IAAI,CAAA;KAAE,GAAG;QAAE,EAAE,EAAE,KAAK,CAAC;QAAC,OAAO,EAAE,MAAM,CAAA;KAAE,CAAC;IAMhG,sBAAsB,CAAC,EAAE,MAAM,MAAM,GAAG,IAAI,CAAC;CAC9C;AAuwCD,wBAAsB,SAAS,CAAC,OAAO,EAAE,aAAa,GAAG,OAAO,CAAC,YAAY,CAAC,CA+M7E;AAaD,wBAAgB,kBAAkB,CAAC,MAAM,EAAE,YAAY,EAAE,cAAc,EAAE,MAAM,GAAG,MAAM,EAAE,CAgBzF"}
|
package/dist/core/doctor.js
CHANGED
|
@@ -4,11 +4,14 @@ import { createHash } from 'crypto';
|
|
|
4
4
|
import { createRequire } from 'module';
|
|
5
5
|
import { pathToFileURL } from 'url';
|
|
6
6
|
import { detectCapabilities, getConfigPath } from './config.js';
|
|
7
|
+
import { embedText, isOnnxModelCached } from './embedder.js';
|
|
8
|
+
import { probeProvider } from './llm-validator.js';
|
|
7
9
|
import { openDatabase, closeDatabase, getPendingReindexInfo, isDatabaseOpen } from '../db.js';
|
|
8
10
|
import { getUpdateCheck } from './version-check.js';
|
|
9
11
|
import { getCurrentInstallChannel, getInstallChannelSupport } from './install-channel.js';
|
|
10
12
|
import { getInstallRecord } from './install-id.js';
|
|
11
13
|
import { getDbPath, memeshDir } from './paths.js';
|
|
14
|
+
const EMBEDDING_PROBE_TIMEOUT_MS = 15000;
|
|
12
15
|
const EXPECTED_HOOK_TYPES = ['PreToolUse', 'SessionStart', 'PostToolUse', 'Stop', 'PreCompact'];
|
|
13
16
|
const LOCALE_README_FILES = [
|
|
14
17
|
'README.de.md',
|
|
@@ -90,6 +93,9 @@ function resolveDatabasePath() {
|
|
|
90
93
|
function createCheck(id, label, status, summary, fix) {
|
|
91
94
|
return { id, label, status, summary, fix };
|
|
92
95
|
}
|
|
96
|
+
function createInfo(id, label, summary, fix) {
|
|
97
|
+
return { id, label, status: 'pass', summary, fix, informational: true };
|
|
98
|
+
}
|
|
93
99
|
function parseJsonFile(filePath, readFileSyncImpl) {
|
|
94
100
|
try {
|
|
95
101
|
const raw = readFileSyncImpl(filePath, 'utf8');
|
|
@@ -279,6 +285,19 @@ function inspectHookActivity(openDatabaseImpl, closeDatabaseImpl, existsSyncImpl
|
|
|
279
285
|
catch { }
|
|
280
286
|
}
|
|
281
287
|
}
|
|
288
|
+
function defaultResolveShellMemesh() {
|
|
289
|
+
try {
|
|
290
|
+
const cmd = process.platform === 'win32' ? 'where' : 'which';
|
|
291
|
+
const localRequire = createRequire(import.meta.url);
|
|
292
|
+
const { execFileSync } = localRequire('child_process');
|
|
293
|
+
const out = execFileSync(cmd, ['memesh'], { encoding: 'utf8', stdio: ['ignore', 'pipe', 'ignore'] });
|
|
294
|
+
const first = String(out).split(/\r?\n/).map((s) => s.trim()).find(Boolean);
|
|
295
|
+
return first || null;
|
|
296
|
+
}
|
|
297
|
+
catch {
|
|
298
|
+
return null;
|
|
299
|
+
}
|
|
300
|
+
}
|
|
282
301
|
function defaultNativeBindingProbe(packageRoot) {
|
|
283
302
|
try {
|
|
284
303
|
const localRequire = createRequire(pathToFileURL(path.join(packageRoot, 'package.json')).href);
|
|
@@ -309,6 +328,26 @@ function inspectNativeBinding(packageRoot, _existsSyncImpl, probeImpl = defaultN
|
|
|
309
328
|
}
|
|
310
329
|
return createCheck('native-binding', 'Native SQLite binding', 'fail', `better-sqlite3 failed to load: ${result.message}`, `Run: cd "${packageRoot}" && npm rebuild better-sqlite3`);
|
|
311
330
|
}
|
|
331
|
+
function inspectShellCli(installChannel, packageRoot, resolveShellMemeshImpl) {
|
|
332
|
+
const shellPath = resolveShellMemeshImpl();
|
|
333
|
+
const isSameAsCurrent = shellPath ? path.resolve(shellPath).startsWith(path.resolve(packageRoot)) : false;
|
|
334
|
+
const hasDistinctShellCli = !!shellPath && !isSameAsCurrent;
|
|
335
|
+
if (installChannel === 'npm-global') {
|
|
336
|
+
return createCheck('shell-cli', 'Shell CLI on PATH', 'pass', shellPath
|
|
337
|
+
? `\`memesh\` resolves to ${shellPath} (npm-global install — terminals across the machine pick it up).`
|
|
338
|
+
: 'Running from npm-global install — shell access available in this terminal.');
|
|
339
|
+
}
|
|
340
|
+
if (hasDistinctShellCli) {
|
|
341
|
+
return createCheck('shell-cli', 'Shell CLI on PATH', 'pass', `\`memesh\` resolves to ${shellPath} (separate from this install at ${packageRoot}). Both paths coexist and share the same DB.`);
|
|
342
|
+
}
|
|
343
|
+
if (installChannel === 'plugin-marketplace') {
|
|
344
|
+
return createCheck('shell-cli', 'Shell CLI on PATH', 'warn', 'Plugin is installed but `memesh` is not on the shell PATH. Typing `memesh` in a regular terminal will report `command not found`. '
|
|
345
|
+
+ 'Claude Code MCP / hooks / `/memesh` skill still work — this only affects standalone shell usage and other MCP clients (Cursor, Cline, etc.).', 'Run `npm install -g @pcircle/memesh` to add the shell CLI. Both paths coexist; they share the same `~/.memesh/knowledge-graph.db`.');
|
|
346
|
+
}
|
|
347
|
+
return createCheck('shell-cli', 'Shell CLI on PATH', 'pass', shellPath
|
|
348
|
+
? `\`memesh\` resolves to ${shellPath}.`
|
|
349
|
+
: `No shell-PATH \`memesh\` detected. If you want terminal access, run \`npm install -g @pcircle/memesh\` (this install is a ${installChannel}, so the check is informational only).`);
|
|
350
|
+
}
|
|
312
351
|
function inspectDashboardArtifact(packageRoot, existsSyncImpl) {
|
|
313
352
|
const dashboardPath = path.join(packageRoot, 'dashboard', 'dist', 'index.html');
|
|
314
353
|
if (!existsSyncImpl(dashboardPath)) {
|
|
@@ -438,15 +477,88 @@ function verifySkillsManifest(packageRoot, existsSyncImpl, readFileSyncImpl) {
|
|
|
438
477
|
].filter(Boolean).join('; ');
|
|
439
478
|
return createCheck('skills-manifest', 'Skills + hooks integrity', 'fail', `Manifest verification failed: ${detail}.`, 'Reinstall the package: `npm install -g @pcircle/memesh`. If the problem reproduces on a fresh install, open a security issue at https://github.com/PCIRCLE-AI/memesh-llm-memory/security.');
|
|
440
479
|
}
|
|
480
|
+
async function inspectConfigParse(getConfigPathImpl, existsSyncImpl, readFileSyncImpl) {
|
|
481
|
+
const configPath = getConfigPathImpl();
|
|
482
|
+
if (!existsSyncImpl(configPath)) {
|
|
483
|
+
return createCheck('config_parse', 'Config parses', 'pass', 'No config file yet — defaults apply. This is normal for a fresh install.');
|
|
484
|
+
}
|
|
485
|
+
try {
|
|
486
|
+
const raw = readFileSyncImpl(configPath, 'utf8');
|
|
487
|
+
const parsed = JSON.parse(raw);
|
|
488
|
+
if (parsed === null || typeof parsed !== 'object' || Array.isArray(parsed)) {
|
|
489
|
+
return createCheck('config_parse', 'Config parses', 'fail', `${configPath} parsed but is not a JSON object — every setting is being ignored.`, `Fix or remove ${configPath}, then re-run memesh doctor.`);
|
|
490
|
+
}
|
|
491
|
+
return createCheck('config_parse', 'Config parses', 'pass', `${configPath} is valid JSON and its settings are in effect.`);
|
|
492
|
+
}
|
|
493
|
+
catch (err) {
|
|
494
|
+
const msg = err instanceof Error ? err.message : String(err);
|
|
495
|
+
return createCheck('config_parse', 'Config parses', 'fail', `${configPath} could not be read or parsed (${msg}). Every setting in it — LLM provider, fallbacks, embedder — is being silently ignored right now.`, `Fix the JSON or remove the file to fall back to defaults: mv ${configPath} ${configPath}.bak`);
|
|
496
|
+
}
|
|
497
|
+
}
|
|
498
|
+
async function inspectEmbeddingProbe(capabilities, probeCapabilities, embedTextImpl) {
|
|
499
|
+
if (capabilities.embeddings === 'tfidf') {
|
|
500
|
+
return createInfo('embeddings_probe', 'Embeddings work', 'No neural embedder configured — recall runs on FTS5 keyword search alone. That is a supported mode, not a fault.');
|
|
501
|
+
}
|
|
502
|
+
if (!probeCapabilities) {
|
|
503
|
+
const isLocal = capabilities.embeddings === 'onnx';
|
|
504
|
+
if (!isLocal) {
|
|
505
|
+
return createInfo('embeddings_probe', 'Embeddings work', `NOT VERIFIED. Config names "${capabilities.embeddings}", but generating a test embedding is a network call (billed on hosted providers) so it was not made — a revoked key or an unreachable host would look identical to a healthy setup here.`, 'Run: memesh doctor --probe (generates one test embedding to confirm)');
|
|
506
|
+
}
|
|
507
|
+
if (!isOnnxModelCached()) {
|
|
508
|
+
return createInfo('embeddings_probe', 'Embeddings work', `NOT VERIFIED. Config names "onnx" but the model is not in the local cache yet, and probing would download ~90 MB — which a diagnostic command must not do on its own.`, 'Run: memesh doctor --probe (downloads the model once, then verifies)');
|
|
509
|
+
}
|
|
510
|
+
}
|
|
511
|
+
let timer;
|
|
512
|
+
try {
|
|
513
|
+
const vector = await Promise.race([
|
|
514
|
+
embedTextImpl('memesh doctor embedding probe'),
|
|
515
|
+
new Promise((_, reject) => {
|
|
516
|
+
timer = setTimeout(() => reject(new Error(`no response within ${EMBEDDING_PROBE_TIMEOUT_MS / 1000}s`)), EMBEDDING_PROBE_TIMEOUT_MS);
|
|
517
|
+
}),
|
|
518
|
+
]);
|
|
519
|
+
if (!vector || vector.length === 0) {
|
|
520
|
+
return createCheck('embeddings_probe', 'Embeddings work', 'warn', `Config selects "${capabilities.embeddings}" but generating a test embedding returned nothing. Semantic recall is degraded to FTS5-only; keyword search still works.`, 'Run: memesh doctor --probe for detail, or check network access to the embedding provider.');
|
|
521
|
+
}
|
|
522
|
+
return createCheck('embeddings_probe', 'Embeddings work', 'pass', `Generated a ${vector.length}-dim test embedding via "${capabilities.embeddings}".`);
|
|
523
|
+
}
|
|
524
|
+
catch (err) {
|
|
525
|
+
const msg = err instanceof Error ? err.message : String(err);
|
|
526
|
+
return createCheck('embeddings_probe', 'Embeddings work', 'warn', `Config selects "${capabilities.embeddings}" but the embedder threw (${msg}). Semantic recall is degraded to FTS5-only.`, 'Check the embedding provider is reachable, or set: memesh config set embedder.provider onnx');
|
|
527
|
+
}
|
|
528
|
+
finally {
|
|
529
|
+
clearTimeout(timer);
|
|
530
|
+
}
|
|
531
|
+
}
|
|
532
|
+
async function inspectLlmProbe(capabilities, probeCapabilities, probeProviderImpl) {
|
|
533
|
+
const llm = capabilities.llm;
|
|
534
|
+
if (!llm) {
|
|
535
|
+
return createInfo('llm_probe', 'LLM reachable', 'No LLM configured — Core Mode. Write-side features (consolidate, lessons, auto-tag, dream) are off by design.');
|
|
536
|
+
}
|
|
537
|
+
if (!probeCapabilities) {
|
|
538
|
+
return createInfo('llm_probe', 'LLM reachable', `NOT VERIFIED. Config names ${llm.provider} (${llm.model ?? 'default'}), but no live call was made — an expired key or an unreachable host would look identical to a healthy setup here.`, 'Run: memesh doctor --probe (makes one small live call to confirm)');
|
|
539
|
+
}
|
|
540
|
+
try {
|
|
541
|
+
const result = await probeProviderImpl(llm.provider, llm.apiKey);
|
|
542
|
+
if (result.valid) {
|
|
543
|
+
return createCheck('llm_probe', 'LLM reachable', 'pass', `${llm.provider} answered a live probe.`);
|
|
544
|
+
}
|
|
545
|
+
return createCheck('llm_probe', 'LLM reachable', 'fail', `${llm.provider} is configured but did not answer: ${result.error ?? 'unknown error'}. Every LLM-backed feature is silently doing nothing.`, 'Check the API key / host, then re-run: memesh doctor --probe');
|
|
546
|
+
}
|
|
547
|
+
catch (err) {
|
|
548
|
+
const msg = err instanceof Error ? err.message : String(err);
|
|
549
|
+
return createCheck('llm_probe', 'LLM reachable', 'fail', `${llm.provider} probe threw: ${msg}. Every LLM-backed feature is silently doing nothing.`, 'Check the API key / host, then re-run: memesh doctor --probe');
|
|
550
|
+
}
|
|
551
|
+
}
|
|
441
552
|
function summarizeOverallStatus(checks) {
|
|
442
|
-
|
|
553
|
+
const assertions = checks.filter((check) => !check.informational);
|
|
554
|
+
if (assertions.some((check) => check.status === 'fail'))
|
|
443
555
|
return 'FAIL';
|
|
444
|
-
if (
|
|
556
|
+
if (assertions.some((check) => check.status === 'warn'))
|
|
445
557
|
return 'PASS_WITH_CONCERNS';
|
|
446
558
|
return 'PASS';
|
|
447
559
|
}
|
|
448
560
|
export async function runDoctor(options) {
|
|
449
|
-
const { packageRoot, packageVersion, probeHttp = false, httpBaseUrl = 'http://127.0.0.1:3737', platform = process.platform, openDatabaseImpl = openDatabase, closeDatabaseImpl = closeDatabase, isDatabaseOpenImpl = isDatabaseOpen, detectCapabilitiesImpl = detectCapabilities, getConfigPathImpl = getConfigPath, getUpdateCheckImpl = getUpdateCheck, getCurrentInstallChannelImpl = getCurrentInstallChannel, getInstallChannelSupportImpl = getInstallChannelSupport, existsSyncImpl = fs.existsSync, readFileSyncImpl = fs.readFileSync, statSyncImpl = fs.statSync, fetchImpl = fetch, nativeBindingProbeImpl, } = options;
|
|
561
|
+
const { packageRoot, packageVersion, probeHttp = false, probeCapabilities = false, embedTextImpl = embedText, probeProviderImpl = probeProvider, httpBaseUrl = 'http://127.0.0.1:3737', platform = process.platform, openDatabaseImpl = openDatabase, closeDatabaseImpl = closeDatabase, isDatabaseOpenImpl = isDatabaseOpen, detectCapabilitiesImpl = detectCapabilities, getConfigPathImpl = getConfigPath, getUpdateCheckImpl = getUpdateCheck, getCurrentInstallChannelImpl = getCurrentInstallChannel, getInstallChannelSupportImpl = getInstallChannelSupport, existsSyncImpl = fs.existsSync, readFileSyncImpl = fs.readFileSync, statSyncImpl = fs.statSync, fetchImpl = fetch, nativeBindingProbeImpl, resolveShellMemeshImpl = defaultResolveShellMemesh, } = options;
|
|
450
562
|
const wasDbOpenBeforeUs = isDatabaseOpenImpl();
|
|
451
563
|
const safeCloseDatabaseImpl = wasDbOpenBeforeUs
|
|
452
564
|
? () => undefined
|
|
@@ -535,9 +647,13 @@ export async function runDoctor(options) {
|
|
|
535
647
|
checks.push(inspectHookActivity(openDatabaseImpl, safeCloseDatabaseImpl, existsSyncImpl, statSyncImpl));
|
|
536
648
|
checks.push(inspectDashboardArtifact(packageRoot, existsSyncImpl));
|
|
537
649
|
checks.push(inspectNativeBinding(packageRoot, existsSyncImpl, nativeBindingProbeImpl));
|
|
650
|
+
checks.push(inspectShellCli(install, packageRoot, resolveShellMemeshImpl));
|
|
538
651
|
checks.push(verifySkillsManifest(packageRoot, existsSyncImpl, readFileSyncImpl));
|
|
539
652
|
const capabilities = detectCapabilitiesImpl();
|
|
540
|
-
checks.push(
|
|
653
|
+
checks.push(createInfo('capabilities', 'Capabilities (configured)', `Search level ${capabilities.searchLevel} (${capabilities.searchLevel === 1 ? 'Smart Mode' : 'Core'}); embeddings: ${capabilities.embeddings}; LLM: ${capabilities.llm ? `${capabilities.llm.provider} (${capabilities.llm.model ?? 'default'})` : 'not configured'}. Configured values only — see the probe rows below for what actually works.`));
|
|
654
|
+
checks.push(await inspectConfigParse(getConfigPathImpl, existsSyncImpl, readFileSyncImpl));
|
|
655
|
+
checks.push(await inspectEmbeddingProbe(capabilities, probeCapabilities, embedTextImpl));
|
|
656
|
+
checks.push(await inspectLlmProbe(capabilities, probeCapabilities, probeProviderImpl));
|
|
541
657
|
checks.push(await inspectUpdateStatus(packageVersion, getUpdateCheckImpl, installSupport));
|
|
542
658
|
try {
|
|
543
659
|
const record = getInstallRecord();
|
|
@@ -568,7 +684,7 @@ export function formatDoctorReport(result, packageVersion) {
|
|
|
568
684
|
const lines = [`MeMesh doctor v${packageVersion}`, `Overall: ${result.status}`];
|
|
569
685
|
for (const check of result.checks) {
|
|
570
686
|
lines.push('');
|
|
571
|
-
lines.push(`[${iconForStatus(check.status)}] ${check.label}`);
|
|
687
|
+
lines.push(`[${check.informational ? 'INFO' : iconForStatus(check.status)}] ${check.label}`);
|
|
572
688
|
lines.push(` ${check.summary}`);
|
|
573
689
|
if (check.fix) {
|
|
574
690
|
lines.push(` Fix: ${check.fix}`);
|