@pcircle/memesh 3.2.1 → 4.0.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/README.de.md +28 -7
- package/README.es.md +28 -7
- package/README.fr.md +28 -7
- package/README.ja.md +28 -7
- package/README.ko.md +28 -7
- package/README.md +47 -14
- package/README.pt.md +28 -7
- package/README.th.md +28 -7
- package/README.vi.md +28 -7
- package/README.zh-CN.md +28 -7
- package/README.zh-TW.md +28 -7
- package/dashboard/dist/index.html +2 -2
- package/dist/core/auto-tagger.d.ts +5 -0
- package/dist/core/auto-tagger.d.ts.map +1 -0
- package/dist/core/auto-tagger.js +99 -0
- package/dist/core/auto-tagger.js.map +1 -0
- package/dist/core/config.d.ts +1 -0
- package/dist/core/config.d.ts.map +1 -1
- package/dist/core/config.js +29 -1
- package/dist/core/config.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 +134 -48
- package/dist/core/embedder.js.map +1 -1
- package/dist/core/lifecycle.d.ts +7 -0
- package/dist/core/lifecycle.d.ts.map +1 -1
- package/dist/core/lifecycle.js +91 -0
- package/dist/core/lifecycle.js.map +1 -1
- package/dist/core/operations.d.ts +8 -0
- package/dist/core/operations.d.ts.map +1 -1
- package/dist/core/operations.js +53 -2
- package/dist/core/operations.js.map +1 -1
- package/dist/core/patterns.d.ts +39 -0
- package/dist/core/patterns.d.ts.map +1 -0
- package/dist/core/patterns.js +109 -0
- package/dist/core/patterns.js.map +1 -0
- package/dist/core/schema-export.d.ts.map +1 -1
- package/dist/core/schema-export.js +17 -0
- package/dist/core/schema-export.js.map +1 -1
- package/dist/core/scoring.d.ts +6 -0
- package/dist/core/scoring.d.ts.map +1 -1
- package/dist/core/scoring.js +8 -3
- package/dist/core/scoring.js.map +1 -1
- package/dist/db.d.ts.map +1 -1
- package/dist/db.js +31 -2
- package/dist/db.js.map +1 -1
- package/dist/knowledge-graph.d.ts +4 -1
- package/dist/knowledge-graph.d.ts.map +1 -1
- package/dist/knowledge-graph.js +23 -5
- package/dist/knowledge-graph.js.map +1 -1
- package/dist/transports/cli/cli.js +31 -1
- 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 +61 -34
- package/dist/transports/http/server.js.map +1 -1
- package/dist/transports/mcp/handlers.d.ts +17 -0
- package/dist/transports/mcp/handlers.d.ts.map +1 -1
- package/dist/transports/mcp/handlers.js +91 -1
- package/dist/transports/mcp/handlers.js.map +1 -1
- package/dist/transports/schemas.d.ts +10 -0
- package/dist/transports/schemas.d.ts.map +1 -1
- package/dist/transports/schemas.js +4 -0
- package/dist/transports/schemas.js.map +1 -1
- package/hooks/hooks.json +12 -0
- package/package.json +5 -1
- package/plugin.json +1 -1
- package/scripts/hooks/pre-edit-recall.js +172 -0
- package/scripts/hooks/session-start.js +79 -2
- package/scripts/hooks/session-summary.js +80 -1
- package/skills/memesh/SKILL.md +110 -52
- package/skills/memesh-review/SKILL.md +69 -26
|
@@ -0,0 +1,5 @@
|
|
|
1
|
+
import type { LLMConfig } from './config.js';
|
|
2
|
+
export declare function autoTag(name: string, type: string, observations: string[], llmConfig: LLMConfig): Promise<string[]>;
|
|
3
|
+
export declare function autoTagAndApply(entityId: number, name: string, type: string, observations: string[], llmConfig: LLMConfig): Promise<void>;
|
|
4
|
+
export declare function parseTags(text: string): string[];
|
|
5
|
+
//# sourceMappingURL=auto-tagger.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"auto-tagger.d.ts","sourceRoot":"","sources":["../../src/core/auto-tagger.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,aAAa,CAAC;AAU7C,wBAAsB,OAAO,CAC3B,IAAI,EAAE,MAAM,EACZ,IAAI,EAAE,MAAM,EACZ,YAAY,EAAE,MAAM,EAAE,EACtB,SAAS,EAAE,SAAS,GACnB,OAAO,CAAC,MAAM,EAAE,CAAC,CAenB;AAMD,wBAAsB,eAAe,CACnC,QAAQ,EAAE,MAAM,EAChB,IAAI,EAAE,MAAM,EACZ,IAAI,EAAE,MAAM,EACZ,YAAY,EAAE,MAAM,EAAE,EACtB,SAAS,EAAE,SAAS,GACnB,OAAO,CAAC,IAAI,CAAC,CAaf;AAED,wBAAgB,SAAS,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,EAAE,CAehD"}
|
|
@@ -0,0 +1,99 @@
|
|
|
1
|
+
import { getDatabase } from '../db.js';
|
|
2
|
+
const VALID_PREFIXES = ['project:', 'topic:', 'tech:', 'severity:', 'scope:'];
|
|
3
|
+
export async function autoTag(name, type, observations, llmConfig) {
|
|
4
|
+
const prompt = `Given this memory entity, suggest 2-5 tags. Each tag must use one of these prefixes: project:, topic:, tech:, severity:, scope:.
|
|
5
|
+
|
|
6
|
+
Entity name: ${name}
|
|
7
|
+
Entity type: ${type}
|
|
8
|
+
Facts: ${observations.slice(0, 5).join('; ')}
|
|
9
|
+
|
|
10
|
+
Return ONLY a JSON array of tag strings, nothing else. Example: ["project:memesh", "topic:auth", "tech:sqlite"]`;
|
|
11
|
+
try {
|
|
12
|
+
const text = await callLLM(prompt, llmConfig);
|
|
13
|
+
return parseTags(text);
|
|
14
|
+
}
|
|
15
|
+
catch {
|
|
16
|
+
return [];
|
|
17
|
+
}
|
|
18
|
+
}
|
|
19
|
+
export async function autoTagAndApply(entityId, name, type, observations, llmConfig) {
|
|
20
|
+
const tags = await autoTag(name, type, observations, llmConfig);
|
|
21
|
+
if (tags.length === 0)
|
|
22
|
+
return;
|
|
23
|
+
try {
|
|
24
|
+
const db = getDatabase();
|
|
25
|
+
const insertTag = db.prepare('INSERT OR IGNORE INTO tags (entity_id, tag) VALUES (?, ?)');
|
|
26
|
+
for (const tag of tags) {
|
|
27
|
+
insertTag.run(entityId, tag);
|
|
28
|
+
}
|
|
29
|
+
}
|
|
30
|
+
catch {
|
|
31
|
+
}
|
|
32
|
+
}
|
|
33
|
+
export function parseTags(text) {
|
|
34
|
+
try {
|
|
35
|
+
const match = text.match(/\[[\s\S]*?\]/);
|
|
36
|
+
if (!match)
|
|
37
|
+
return [];
|
|
38
|
+
const arr = JSON.parse(match[0]);
|
|
39
|
+
if (!Array.isArray(arr))
|
|
40
|
+
return [];
|
|
41
|
+
return arr
|
|
42
|
+
.filter((t) => typeof t === 'string')
|
|
43
|
+
.map((t) => t.toLowerCase().trim())
|
|
44
|
+
.filter((t) => VALID_PREFIXES.some(p => t.startsWith(p)))
|
|
45
|
+
.slice(0, 5);
|
|
46
|
+
}
|
|
47
|
+
catch {
|
|
48
|
+
return [];
|
|
49
|
+
}
|
|
50
|
+
}
|
|
51
|
+
async function callLLM(prompt, config) {
|
|
52
|
+
let apiKey = config.apiKey;
|
|
53
|
+
if (!apiKey) {
|
|
54
|
+
if (config.provider === 'anthropic')
|
|
55
|
+
apiKey = process.env.ANTHROPIC_API_KEY;
|
|
56
|
+
else if (config.provider === 'openai')
|
|
57
|
+
apiKey = process.env.OPENAI_API_KEY;
|
|
58
|
+
}
|
|
59
|
+
if (config.provider === 'anthropic') {
|
|
60
|
+
if (!apiKey)
|
|
61
|
+
throw new Error('No API key');
|
|
62
|
+
const res = await fetch('https://api.anthropic.com/v1/messages', {
|
|
63
|
+
method: 'POST',
|
|
64
|
+
headers: { 'x-api-key': apiKey, 'anthropic-version': '2023-06-01', 'content-type': 'application/json' },
|
|
65
|
+
body: JSON.stringify({ model: config.model || 'claude-haiku-4-5', max_tokens: 200, messages: [{ role: 'user', content: prompt }] }),
|
|
66
|
+
});
|
|
67
|
+
if (!res.ok)
|
|
68
|
+
throw new Error(`API ${res.status}`);
|
|
69
|
+
const data = await res.json();
|
|
70
|
+
return data.content?.[0]?.text || '';
|
|
71
|
+
}
|
|
72
|
+
if (config.provider === 'openai') {
|
|
73
|
+
if (!apiKey)
|
|
74
|
+
throw new Error('No API key');
|
|
75
|
+
const res = await fetch('https://api.openai.com/v1/chat/completions', {
|
|
76
|
+
method: 'POST',
|
|
77
|
+
headers: { 'Authorization': `Bearer ${apiKey}`, 'Content-Type': 'application/json' },
|
|
78
|
+
body: JSON.stringify({ model: config.model || 'gpt-4o-mini', max_tokens: 200, messages: [{ role: 'user', content: prompt }] }),
|
|
79
|
+
});
|
|
80
|
+
if (!res.ok)
|
|
81
|
+
throw new Error(`API ${res.status}`);
|
|
82
|
+
const data = await res.json();
|
|
83
|
+
return data.choices?.[0]?.message?.content || '';
|
|
84
|
+
}
|
|
85
|
+
if (config.provider === 'ollama') {
|
|
86
|
+
const host = process.env.OLLAMA_HOST || 'http://localhost:11434';
|
|
87
|
+
const res = await fetch(`${host}/api/generate`, {
|
|
88
|
+
method: 'POST',
|
|
89
|
+
headers: { 'Content-Type': 'application/json' },
|
|
90
|
+
body: JSON.stringify({ model: config.model || 'llama3.2', prompt, stream: false }),
|
|
91
|
+
});
|
|
92
|
+
if (!res.ok)
|
|
93
|
+
throw new Error(`Ollama ${res.status}`);
|
|
94
|
+
const data = await res.json();
|
|
95
|
+
return data.response || '';
|
|
96
|
+
}
|
|
97
|
+
return '';
|
|
98
|
+
}
|
|
99
|
+
//# sourceMappingURL=auto-tagger.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"auto-tagger.js","sourceRoot":"","sources":["../../src/core/auto-tagger.ts"],"names":[],"mappings":"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"}
|
package/dist/core/config.d.ts
CHANGED
|
@@ -27,6 +27,7 @@ export declare function writeConfig(config: MeMeshConfig): void;
|
|
|
27
27
|
export declare function updateConfig(partial: Partial<MeMeshConfig>): MeMeshConfig;
|
|
28
28
|
export declare function maskApiKey(key: string): string;
|
|
29
29
|
export declare function detectCapabilities(config?: MeMeshConfig): Capabilities;
|
|
30
|
+
export declare function getEmbeddingDimension(config?: MeMeshConfig): number;
|
|
30
31
|
export declare function logCapabilities(config?: MeMeshConfig): void;
|
|
31
32
|
export declare function getConfigDir(): string;
|
|
32
33
|
export declare function getConfigPath(): string;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"config.d.ts","sourceRoot":"","sources":["../../src/core/config.ts"],"names":[],"mappings":"
|
|
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;AAED,MAAM,WAAW,YAAY;IAC3B,GAAG,CAAC,EAAE,SAAS,CAAC;IAChB,WAAW,CAAC,EAAE,OAAO,CAAC;IACtB,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,KAAK,CAAC,EAAE,OAAO,GAAG,MAAM,CAAC;IACzB,IAAI,CAAC,EAAE;QAAE,aAAa,CAAC,EAAE,OAAO,CAAA;KAAE,CAAC;IACnC,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;IACtB,WAAW,EAAE,CAAC,GAAG,CAAC,CAAC;CACpB;AASD,wBAAgB,UAAU,IAAI,YAAY,CAOzC;AAED,wBAAgB,WAAW,CAAC,MAAM,EAAE,YAAY,GAAG,IAAI,CAGtD;AAED,wBAAgB,YAAY,CAAC,OAAO,EAAE,OAAO,CAAC,YAAY,CAAC,GAAG,YAAY,CASzE;AAID,wBAAgB,UAAU,CAAC,GAAG,EAAE,MAAM,GAAG,MAAM,CAG9C;AAyBD,wBAAgB,kBAAkB,CAAC,MAAM,CAAC,EAAE,YAAY,GAAG,YAAY,CActE;AAgCD,wBAAgB,qBAAqB,CAAC,MAAM,CAAC,EAAE,YAAY,GAAG,MAAM,CAKnE;AAQD,wBAAgB,eAAe,CAAC,MAAM,CAAC,EAAE,YAAY,GAAG,IAAI,CAM3D;AAID,wBAAgB,YAAY,IAAI,MAAM,CAAuB;AAC7D,wBAAgB,aAAa,IAAI,MAAM,CAAwB"}
|
package/dist/core/config.js
CHANGED
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
import fs from 'fs';
|
|
2
2
|
import path from 'path';
|
|
3
3
|
import os from 'os';
|
|
4
|
+
import { createRequire } from 'module';
|
|
4
5
|
const CONFIG_DIR = path.join(os.homedir(), '.memesh');
|
|
5
6
|
const CONFIG_PATH = path.join(CONFIG_DIR, 'config.json');
|
|
6
7
|
export function readConfig() {
|
|
@@ -57,11 +58,38 @@ export function detectCapabilities(config) {
|
|
|
57
58
|
vectorSearch: true,
|
|
58
59
|
scoring: true,
|
|
59
60
|
knowledgeEvolution: true,
|
|
60
|
-
embeddings: llm
|
|
61
|
+
embeddings: detectEmbeddingSource(llm),
|
|
61
62
|
llm,
|
|
62
63
|
searchLevel: llm ? 1 : 0,
|
|
63
64
|
};
|
|
64
65
|
}
|
|
66
|
+
function detectEmbeddingSource(llm) {
|
|
67
|
+
if (!llm)
|
|
68
|
+
return 'tfidf';
|
|
69
|
+
if (llm.provider === 'openai')
|
|
70
|
+
return 'openai';
|
|
71
|
+
if (llm.provider === 'ollama')
|
|
72
|
+
return 'ollama';
|
|
73
|
+
try {
|
|
74
|
+
const require = createRequire(import.meta.url);
|
|
75
|
+
require.resolve('@xenova/transformers');
|
|
76
|
+
return 'onnx';
|
|
77
|
+
}
|
|
78
|
+
catch {
|
|
79
|
+
return 'tfidf';
|
|
80
|
+
}
|
|
81
|
+
}
|
|
82
|
+
const EMBEDDING_DIMENSIONS = {
|
|
83
|
+
openai: 1536,
|
|
84
|
+
ollama: 768,
|
|
85
|
+
onnx: 384,
|
|
86
|
+
};
|
|
87
|
+
export function getEmbeddingDimension(config) {
|
|
88
|
+
const cfg = config ?? readConfig();
|
|
89
|
+
const llm = cfg.llm ?? detectFromEnv() ?? detectOllama() ?? null;
|
|
90
|
+
const source = detectEmbeddingSource(llm);
|
|
91
|
+
return EMBEDDING_DIMENSIONS[source] ?? 384;
|
|
92
|
+
}
|
|
65
93
|
export function logCapabilities(config) {
|
|
66
94
|
const caps = detectCapabilities(config);
|
|
67
95
|
process.stderr.write(`MeMesh: Level ${caps.searchLevel} (${caps.searchLevel === 1 ? 'Smart Mode' : 'Core'})\n`);
|
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,MAAM,IAAI,CAAC;AA+
|
|
1
|
+
{"version":3,"file":"config.js","sourceRoot":"","sources":["../../src/core/config.ts"],"names":[],"mappings":"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"}
|
package/dist/core/embedder.d.ts
CHANGED
|
@@ -1,4 +1,5 @@
|
|
|
1
1
|
export declare function isEmbeddingAvailable(): boolean;
|
|
2
|
+
export { getEmbeddingDimension } from './config.js';
|
|
2
3
|
export declare function resetEmbeddingState(): void;
|
|
3
4
|
export declare function embedText(text: string): Promise<Float32Array | null>;
|
|
4
5
|
export declare function embedAndStore(entityId: number, text: string): Promise<void>;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"embedder.d.ts","sourceRoot":"","sources":["../../src/core/embedder.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"embedder.d.ts","sourceRoot":"","sources":["../../src/core/embedder.ts"],"names":[],"mappings":"AAwBA,wBAAgB,oBAAoB,IAAI,OAAO,CAK9C;AAGD,OAAO,EAAE,qBAAqB,EAAE,MAAM,aAAa,CAAC;AAKpD,wBAAgB,mBAAmB,IAAI,IAAI,CAK1C;AAMD,wBAAsB,SAAS,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,YAAY,GAAG,IAAI,CAAC,CAW1E;AAOD,wBAAsB,aAAa,CAAC,QAAQ,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAoCjF;AAKD,wBAAgB,YAAY,CAC1B,cAAc,EAAE,YAAY,EAC5B,KAAK,GAAE,MAAW,GACjB,KAAK,CAAC;IAAE,EAAE,EAAE,MAAM,CAAC;IAAC,QAAQ,EAAE,MAAM,CAAA;CAAE,CAAC,CAczC"}
|
package/dist/core/embedder.js
CHANGED
|
@@ -2,59 +2,34 @@ import { createRequire } from 'node:module';
|
|
|
2
2
|
import { getDatabase } from '../db.js';
|
|
3
3
|
import { homedir } from 'os';
|
|
4
4
|
import { join } from 'path';
|
|
5
|
-
|
|
6
|
-
let
|
|
7
|
-
let
|
|
8
|
-
let
|
|
5
|
+
import { detectCapabilities } from './config.js';
|
|
6
|
+
let onnxPipelineInstance = null;
|
|
7
|
+
let onnxPipelineLoading = null;
|
|
8
|
+
let onnxAvailableChecked = false;
|
|
9
|
+
let onnxAvailableResult = false;
|
|
9
10
|
export function isEmbeddingAvailable() {
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
availableResult = true;
|
|
17
|
-
}
|
|
18
|
-
catch {
|
|
19
|
-
availableResult = false;
|
|
20
|
-
}
|
|
21
|
-
return availableResult;
|
|
11
|
+
const caps = detectCapabilities();
|
|
12
|
+
if (caps.llm?.provider === 'openai')
|
|
13
|
+
return true;
|
|
14
|
+
if (caps.llm?.provider === 'ollama')
|
|
15
|
+
return true;
|
|
16
|
+
return isOnnxAvailable();
|
|
22
17
|
}
|
|
18
|
+
export { getEmbeddingDimension } from './config.js';
|
|
23
19
|
export function resetEmbeddingState() {
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
}
|
|
29
|
-
async function getPipeline() {
|
|
30
|
-
if (pipelineInstance)
|
|
31
|
-
return pipelineInstance;
|
|
32
|
-
if (pipelineLoading)
|
|
33
|
-
return pipelineLoading;
|
|
34
|
-
pipelineLoading = (async () => {
|
|
35
|
-
const mod = await import('@xenova/transformers');
|
|
36
|
-
const createPipeline = mod.pipeline;
|
|
37
|
-
const env = mod.env;
|
|
38
|
-
if (env) {
|
|
39
|
-
env.cacheDir = join(homedir(), '.memesh', 'models');
|
|
40
|
-
env.allowLocalModels = true;
|
|
41
|
-
}
|
|
42
|
-
pipelineInstance = await createPipeline('feature-extraction', 'Xenova/all-MiniLM-L6-v2');
|
|
43
|
-
return pipelineInstance;
|
|
44
|
-
})();
|
|
45
|
-
return pipelineLoading;
|
|
20
|
+
onnxAvailableChecked = false;
|
|
21
|
+
onnxAvailableResult = false;
|
|
22
|
+
onnxPipelineInstance = null;
|
|
23
|
+
onnxPipelineLoading = null;
|
|
46
24
|
}
|
|
47
25
|
export async function embedText(text) {
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
return new Float32Array(output.data);
|
|
54
|
-
}
|
|
55
|
-
catch {
|
|
56
|
-
return null;
|
|
26
|
+
const caps = detectCapabilities();
|
|
27
|
+
if (caps.llm) {
|
|
28
|
+
const result = await embedWithProvider(text, caps.llm);
|
|
29
|
+
if (result)
|
|
30
|
+
return result;
|
|
57
31
|
}
|
|
32
|
+
return embedWithOnnx(text);
|
|
58
33
|
}
|
|
59
34
|
export async function embedAndStore(entityId, text) {
|
|
60
35
|
const embedding = await embedText(text);
|
|
@@ -62,9 +37,22 @@ export async function embedAndStore(entityId, text) {
|
|
|
62
37
|
return;
|
|
63
38
|
try {
|
|
64
39
|
const db = getDatabase();
|
|
40
|
+
const storedDim = db.prepare("SELECT value FROM memesh_metadata WHERE key = 'embedding_dimension'").get();
|
|
41
|
+
const expectedDim = storedDim ? parseInt(storedDim.value, 10) : 0;
|
|
42
|
+
const actualDim = embedding.length;
|
|
43
|
+
if (expectedDim > 0 && actualDim !== expectedDim) {
|
|
44
|
+
process.stderr.write(`MeMesh: Embedding dimension mismatch (got ${actualDim}, expected ${expectedDim}). ` +
|
|
45
|
+
`This usually means the configured provider failed and fallback was used. ` +
|
|
46
|
+
`Skipping vector write for entity ${entityId}. ` +
|
|
47
|
+
`Run 'memesh reindex' after fixing provider configuration.\n`);
|
|
48
|
+
return;
|
|
49
|
+
}
|
|
65
50
|
db.prepare('INSERT OR REPLACE INTO entities_vec (rowid, embedding) VALUES (?, ?)').run(entityId, Buffer.from(embedding.buffer));
|
|
66
51
|
}
|
|
67
|
-
catch {
|
|
52
|
+
catch (err) {
|
|
53
|
+
if (err && typeof err === 'object' && 'message' in err) {
|
|
54
|
+
process.stderr.write(`MeMesh: Vector write failed for entity ${entityId}: ${err.message}\n`);
|
|
55
|
+
}
|
|
68
56
|
}
|
|
69
57
|
}
|
|
70
58
|
export function vectorSearch(queryEmbedding, limit = 20) {
|
|
@@ -78,4 +66,102 @@ export function vectorSearch(queryEmbedding, limit = 20) {
|
|
|
78
66
|
return [];
|
|
79
67
|
}
|
|
80
68
|
}
|
|
69
|
+
async function embedWithProvider(text, config) {
|
|
70
|
+
try {
|
|
71
|
+
if (config.provider === 'openai')
|
|
72
|
+
return await embedWithOpenAI(text, config);
|
|
73
|
+
if (config.provider === 'ollama')
|
|
74
|
+
return await embedWithOllama(text, config);
|
|
75
|
+
return null;
|
|
76
|
+
}
|
|
77
|
+
catch {
|
|
78
|
+
return null;
|
|
79
|
+
}
|
|
80
|
+
}
|
|
81
|
+
async function embedWithOpenAI(text, config) {
|
|
82
|
+
const apiKey = config.apiKey || process.env.OPENAI_API_KEY;
|
|
83
|
+
if (!apiKey)
|
|
84
|
+
return null;
|
|
85
|
+
const res = await fetch('https://api.openai.com/v1/embeddings', {
|
|
86
|
+
method: 'POST',
|
|
87
|
+
headers: { 'Authorization': `Bearer ${apiKey}`, 'Content-Type': 'application/json' },
|
|
88
|
+
body: JSON.stringify({
|
|
89
|
+
model: 'text-embedding-3-small',
|
|
90
|
+
input: text.slice(0, 8000),
|
|
91
|
+
}),
|
|
92
|
+
});
|
|
93
|
+
if (!res.ok)
|
|
94
|
+
return null;
|
|
95
|
+
const data = await res.json();
|
|
96
|
+
const embedding = data.data?.[0]?.embedding;
|
|
97
|
+
if (!embedding || !Array.isArray(embedding))
|
|
98
|
+
return null;
|
|
99
|
+
return new Float32Array(embedding);
|
|
100
|
+
}
|
|
101
|
+
async function embedWithOllama(text, config) {
|
|
102
|
+
const host = process.env.OLLAMA_HOST || 'http://localhost:11434';
|
|
103
|
+
const model = config.model || 'nomic-embed-text';
|
|
104
|
+
const res = await fetch(`${host}/api/embed`, {
|
|
105
|
+
method: 'POST',
|
|
106
|
+
headers: { 'Content-Type': 'application/json' },
|
|
107
|
+
body: JSON.stringify({ model, input: text.slice(0, 8000) }),
|
|
108
|
+
});
|
|
109
|
+
if (!res.ok)
|
|
110
|
+
return null;
|
|
111
|
+
const data = await res.json();
|
|
112
|
+
const embedding = data.embeddings?.[0];
|
|
113
|
+
if (!embedding || !Array.isArray(embedding))
|
|
114
|
+
return null;
|
|
115
|
+
return new Float32Array(embedding);
|
|
116
|
+
}
|
|
117
|
+
function isOnnxAvailable() {
|
|
118
|
+
if (onnxAvailableChecked)
|
|
119
|
+
return onnxAvailableResult;
|
|
120
|
+
onnxAvailableChecked = true;
|
|
121
|
+
try {
|
|
122
|
+
const require = createRequire(import.meta.url);
|
|
123
|
+
require.resolve('@xenova/transformers');
|
|
124
|
+
onnxAvailableResult = true;
|
|
125
|
+
}
|
|
126
|
+
catch {
|
|
127
|
+
onnxAvailableResult = false;
|
|
128
|
+
}
|
|
129
|
+
return onnxAvailableResult;
|
|
130
|
+
}
|
|
131
|
+
async function getOnnxPipeline() {
|
|
132
|
+
if (onnxPipelineInstance)
|
|
133
|
+
return onnxPipelineInstance;
|
|
134
|
+
if (onnxPipelineLoading)
|
|
135
|
+
return onnxPipelineLoading;
|
|
136
|
+
onnxPipelineLoading = (async () => {
|
|
137
|
+
try {
|
|
138
|
+
const mod = await import('@xenova/transformers');
|
|
139
|
+
const createPipeline = mod.pipeline;
|
|
140
|
+
const env = mod.env;
|
|
141
|
+
if (env) {
|
|
142
|
+
env.cacheDir = join(homedir(), '.memesh', 'models');
|
|
143
|
+
env.allowLocalModels = true;
|
|
144
|
+
}
|
|
145
|
+
onnxPipelineInstance = await createPipeline('feature-extraction', 'Xenova/all-MiniLM-L6-v2');
|
|
146
|
+
return onnxPipelineInstance;
|
|
147
|
+
}
|
|
148
|
+
catch (err) {
|
|
149
|
+
onnxPipelineLoading = null;
|
|
150
|
+
throw err;
|
|
151
|
+
}
|
|
152
|
+
})();
|
|
153
|
+
return onnxPipelineLoading;
|
|
154
|
+
}
|
|
155
|
+
async function embedWithOnnx(text) {
|
|
156
|
+
if (!isOnnxAvailable())
|
|
157
|
+
return null;
|
|
158
|
+
try {
|
|
159
|
+
const pipe = await getOnnxPipeline();
|
|
160
|
+
const output = await pipe(text, { pooling: 'mean', normalize: true });
|
|
161
|
+
return new Float32Array(output.data);
|
|
162
|
+
}
|
|
163
|
+
catch {
|
|
164
|
+
return null;
|
|
165
|
+
}
|
|
166
|
+
}
|
|
81
167
|
//# sourceMappingURL=embedder.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"embedder.js","sourceRoot":"","sources":["../../src/core/embedder.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"embedder.js","sourceRoot":"","sources":["../../src/core/embedder.ts"],"names":[],"mappings":"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"}
|
package/dist/core/lifecycle.d.ts
CHANGED
|
@@ -6,4 +6,11 @@ export declare function getDecayStatus(db: Database.Database): {
|
|
|
6
6
|
lastDecayAt: string | null;
|
|
7
7
|
entitiesBelowThreshold: number;
|
|
8
8
|
};
|
|
9
|
+
declare const PRESERVED_TYPES: Set<string>;
|
|
10
|
+
declare const NOISE_TYPES: Set<string>;
|
|
11
|
+
export declare function compressWeeklyNoise(db: Database.Database): {
|
|
12
|
+
compressed: number;
|
|
13
|
+
weeksProcessed: number;
|
|
14
|
+
};
|
|
15
|
+
export { PRESERVED_TYPES, NOISE_TYPES };
|
|
9
16
|
//# sourceMappingURL=lifecycle.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"lifecycle.d.ts","sourceRoot":"","sources":["../../src/core/lifecycle.ts"],"names":[],"mappings":"AAAA,OAAO,QAAQ,MAAM,gBAAgB,CAAC;AActC,wBAAgB,YAAY,CAAC,EAAE,EAAE,QAAQ,CAAC,QAAQ,GAAG;IAAE,OAAO,EAAE,MAAM,CAAA;CAAE,CAwCvE;AAKD,wBAAgB,cAAc,CAAC,EAAE,EAAE,QAAQ,CAAC,QAAQ,GAAG;IACrD,WAAW,EAAE,MAAM,GAAG,IAAI,CAAC;IAC3B,sBAAsB,EAAE,MAAM,CAAC;CAChC,CAoBA"}
|
|
1
|
+
{"version":3,"file":"lifecycle.d.ts","sourceRoot":"","sources":["../../src/core/lifecycle.ts"],"names":[],"mappings":"AAAA,OAAO,QAAQ,MAAM,gBAAgB,CAAC;AActC,wBAAgB,YAAY,CAAC,EAAE,EAAE,QAAQ,CAAC,QAAQ,GAAG;IAAE,OAAO,EAAE,MAAM,CAAA;CAAE,CAwCvE;AAKD,wBAAgB,cAAc,CAAC,EAAE,EAAE,QAAQ,CAAC,QAAQ,GAAG;IACrD,WAAW,EAAE,MAAM,GAAG,IAAI,CAAC;IAC3B,sBAAsB,EAAE,MAAM,CAAC;CAChC,CAoBA;AAGD,QAAA,MAAM,eAAe,aAInB,CAAC;AAGH,QAAA,MAAM,WAAW,aAEf,CAAC;AAeH,wBAAgB,mBAAmB,CAAC,EAAE,EAAE,QAAQ,CAAC,QAAQ,GAAG;IAAE,UAAU,EAAE,MAAM,CAAC;IAAC,cAAc,EAAE,MAAM,CAAA;CAAE,CAkHzG;AAGD,OAAO,EAAE,eAAe,EAAE,WAAW,EAAE,CAAC"}
|
package/dist/core/lifecycle.js
CHANGED
|
@@ -40,6 +40,97 @@ export function getDecayStatus(db) {
|
|
|
40
40
|
entitiesBelowThreshold: belowThreshold,
|
|
41
41
|
};
|
|
42
42
|
}
|
|
43
|
+
const PRESERVED_TYPES = new Set([
|
|
44
|
+
'decision', 'pattern', 'lesson_learned', 'bug_fix', 'architecture',
|
|
45
|
+
'convention', 'feature', 'best_practice', 'concept', 'tool', 'note',
|
|
46
|
+
'plan', 'release', 'refactoring', 'maintenance',
|
|
47
|
+
]);
|
|
48
|
+
const NOISE_TYPES = new Set([
|
|
49
|
+
'session_keypoint', 'commit', 'session-insight', 'session-summary',
|
|
50
|
+
]);
|
|
51
|
+
const COMPRESS_INTERVAL_MS = 24 * 60 * 60 * 1000;
|
|
52
|
+
const NOISE_AGE_DAYS = 7;
|
|
53
|
+
const NOISE_THRESHOLD = 20;
|
|
54
|
+
export function compressWeeklyNoise(db) {
|
|
55
|
+
ensureMetadataTable(db);
|
|
56
|
+
const lastRun = db.prepare("SELECT value FROM memesh_metadata WHERE key = 'last_noise_compress_at'").get();
|
|
57
|
+
if (lastRun) {
|
|
58
|
+
const elapsed = Date.now() - new Date(lastRun.value).getTime();
|
|
59
|
+
if (elapsed < COMPRESS_INTERVAL_MS) {
|
|
60
|
+
return { compressed: 0, weeksProcessed: 0 };
|
|
61
|
+
}
|
|
62
|
+
}
|
|
63
|
+
const cols = db.prepare('PRAGMA table_info(entities)').all();
|
|
64
|
+
if (!cols.some((c) => c.name === 'status')) {
|
|
65
|
+
return { compressed: 0, weeksProcessed: 0 };
|
|
66
|
+
}
|
|
67
|
+
const cutoff = new Date(Date.now() - NOISE_AGE_DAYS * 24 * 60 * 60 * 1000).toISOString();
|
|
68
|
+
const noiseTypePlaceholders = Array.from(NOISE_TYPES).map(() => '?').join(',');
|
|
69
|
+
const noiseTypeValues = Array.from(NOISE_TYPES);
|
|
70
|
+
const weekGroups = db.prepare(`
|
|
71
|
+
SELECT strftime('%Y-W%W', created_at) as week,
|
|
72
|
+
COUNT(*) as count
|
|
73
|
+
FROM entities
|
|
74
|
+
WHERE type IN (${noiseTypePlaceholders})
|
|
75
|
+
AND status = 'active'
|
|
76
|
+
AND created_at < ?
|
|
77
|
+
GROUP BY week
|
|
78
|
+
HAVING count >= ?
|
|
79
|
+
ORDER BY week
|
|
80
|
+
`).all(...noiseTypeValues, cutoff, NOISE_THRESHOLD);
|
|
81
|
+
let totalCompressed = 0;
|
|
82
|
+
for (const { week, count } of weekGroups) {
|
|
83
|
+
const entities = db.prepare(`
|
|
84
|
+
SELECT e.id, e.name, e.type
|
|
85
|
+
FROM entities e
|
|
86
|
+
WHERE e.type IN (${noiseTypePlaceholders})
|
|
87
|
+
AND e.status = 'active'
|
|
88
|
+
AND strftime('%Y-W%W', e.created_at) = ?
|
|
89
|
+
AND e.created_at < ?
|
|
90
|
+
`).all(...noiseTypeValues, week, cutoff);
|
|
91
|
+
if (entities.length === 0)
|
|
92
|
+
continue;
|
|
93
|
+
const typeCounts = new Map();
|
|
94
|
+
for (const e of entities) {
|
|
95
|
+
typeCounts.set(e.type, (typeCounts.get(e.type) || 0) + 1);
|
|
96
|
+
}
|
|
97
|
+
const typeBreakdown = Array.from(typeCounts.entries())
|
|
98
|
+
.map(([t, c]) => `${c} ${t}`)
|
|
99
|
+
.join(', ');
|
|
100
|
+
const summaryName = `weekly-summary-${week}`;
|
|
101
|
+
const existing = db.prepare('SELECT id FROM entities WHERE name = ?').get(summaryName);
|
|
102
|
+
if (existing) {
|
|
103
|
+
db.prepare('INSERT INTO observations (entity_id, content) VALUES (?, ?)').run(existing.id, `+${entities.length} entities archived (${typeBreakdown})`);
|
|
104
|
+
}
|
|
105
|
+
else {
|
|
106
|
+
db.prepare('INSERT INTO entities (name, type) VALUES (?, ?)').run(summaryName, 'weekly-summary');
|
|
107
|
+
const summaryRow = db.prepare('SELECT id FROM entities WHERE name = ?').get(summaryName);
|
|
108
|
+
const obsText = `${week}: ${count} auto-tracked entities compressed (${typeBreakdown})`;
|
|
109
|
+
db.prepare('INSERT INTO observations (entity_id, content) VALUES (?, ?)').run(summaryRow.id, obsText);
|
|
110
|
+
db.prepare('INSERT INTO entities_fts (rowid, name, observations) VALUES (?, ?, ?)').run(summaryRow.id, summaryName, obsText);
|
|
111
|
+
const entityIdPlaceholders = entities.map(() => '?').join(',');
|
|
112
|
+
const projectTags = db.prepare(`
|
|
113
|
+
SELECT DISTINCT t.tag FROM tags t
|
|
114
|
+
JOIN entities e ON e.id = t.entity_id
|
|
115
|
+
WHERE e.id IN (${entityIdPlaceholders})
|
|
116
|
+
AND t.tag LIKE 'project:%'
|
|
117
|
+
`).all(...entities.map(e => e.id));
|
|
118
|
+
for (const { tag } of projectTags) {
|
|
119
|
+
db.prepare('INSERT OR IGNORE INTO tags (entity_id, tag) VALUES (?, ?)').run(summaryRow.id, tag);
|
|
120
|
+
}
|
|
121
|
+
db.prepare('INSERT OR IGNORE INTO tags (entity_id, tag) VALUES (?, ?)').run(summaryRow.id, 'source:noise-filter');
|
|
122
|
+
}
|
|
123
|
+
const archiveIdPlaceholders = entities.map(() => '?').join(',');
|
|
124
|
+
db.prepare(`
|
|
125
|
+
UPDATE entities SET status = 'archived'
|
|
126
|
+
WHERE id IN (${archiveIdPlaceholders})
|
|
127
|
+
`).run(...entities.map(e => e.id));
|
|
128
|
+
totalCompressed += entities.length;
|
|
129
|
+
}
|
|
130
|
+
db.prepare("INSERT OR REPLACE INTO memesh_metadata (key, value) VALUES ('last_noise_compress_at', ?)").run(new Date().toISOString());
|
|
131
|
+
return { compressed: totalCompressed, weeksProcessed: weekGroups.length };
|
|
132
|
+
}
|
|
133
|
+
export { PRESERVED_TYPES, NOISE_TYPES };
|
|
43
134
|
function ensureMetadataTable(db) {
|
|
44
135
|
db.exec(`
|
|
45
136
|
CREATE TABLE IF NOT EXISTS memesh_metadata (
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"lifecycle.js","sourceRoot":"","sources":["../../src/core/lifecycle.ts"],"names":[],"mappings":"AAEA,MAAM,iBAAiB,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,IAAI,CAAC;AAC9C,MAAM,oBAAoB,GAAG,EAAE,CAAC;AAChC,MAAM,YAAY,GAAG,GAAG,CAAC;AACzB,MAAM,cAAc,GAAG,IAAI,CAAC;AAS5B,MAAM,UAAU,YAAY,CAAC,EAAqB;IAChD,mBAAmB,CAAC,EAAE,CAAC,CAAC;IAGxB,MAAM,SAAS,GAAG,EAAE,CAAC,OAAO,CAC1B,+DAA+D,CAChE,CAAC,GAAG,EAAmC,CAAC;IAEzC,IAAI,SAAS,EAAE,CAAC;QACd,MAAM,OAAO,GAAG,IAAI,CAAC,GAAG,EAAE,GAAG,IAAI,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,CAAC,OAAO,EAAE,CAAC;QACjE,IAAI,OAAO,GAAG,iBAAiB,EAAE,CAAC;YAChC,OAAO,EAAE,OAAO,EAAE,CAAC,EAAE,CAAC;QACxB,CAAC;IACH,CAAC;IAGD,MAAM,IAAI,GAAG,EAAE,CAAC,OAAO,CAAC,6BAA6B,CAAC,CAAC,GAAG,EAA6B,CAAC;IACxF,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,KAAK,YAAY,CAAC,EAAE,CAAC;QAC/C,OAAO,EAAE,OAAO,EAAE,CAAC,EAAE,CAAC;IACxB,CAAC;IAGD,MAAM,SAAS,GAAG,IAAI,IAAI,CACxB,IAAI,CAAC,GAAG,EAAE,GAAG,oBAAoB,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,IAAI,CACxD,CAAC,WAAW,EAAE,CAAC;IAEhB,MAAM,MAAM,GAAG,EAAE,CAAC,OAAO,CAAC;;;;;;GAMzB,CAAC,CAAC,GAAG,CAAC,YAAY,EAAE,cAAc,EAAE,SAAS,EAAE,cAAc,CAAC,CAAC;IAGhE,EAAE,CAAC,OAAO,CACR,iFAAiF,CAClF,CAAC,GAAG,CAAC,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE,CAAC,CAAC;IAEhC,OAAO,EAAE,OAAO,EAAE,MAAM,CAAC,OAAO,EAAE,CAAC;AACrC,CAAC;AAKD,MAAM,UAAU,cAAc,CAAC,EAAqB;IAIlD,mBAAmB,CAAC,EAAE,CAAC,CAAC;IAExB,MAAM,SAAS,GAAG,EAAE,CAAC,OAAO,CAC1B,+DAA+D,CAChE,CAAC,GAAG,EAAmC,CAAC;IAEzC,MAAM,IAAI,GAAG,EAAE,CAAC,OAAO,CAAC,6BAA6B,CAAC,CAAC,GAAG,EAA6B,CAAC;IACxF,IAAI,cAAc,GAAG,CAAC,CAAC;IACvB,IAAI,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,KAAK,YAAY,CAAC,EAAE,CAAC;QAC9C,MAAM,GAAG,GAAG,EAAE,CAAC,OAAO,CACpB,iFAAiF,CAClF,CAAC,GAAG,EAAmB,CAAC;QACzB,cAAc,GAAG,GAAG,CAAC,CAAC,CAAC;IACzB,CAAC;IAED,OAAO;QACL,WAAW,EAAE,SAAS,EAAE,KAAK,IAAI,IAAI;QACrC,sBAAsB,EAAE,cAAc;KACvC,CAAC;AACJ,CAAC;
|
|
1
|
+
{"version":3,"file":"lifecycle.js","sourceRoot":"","sources":["../../src/core/lifecycle.ts"],"names":[],"mappings":"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"}
|
|
@@ -4,6 +4,14 @@ export declare function recall(args: RecallInput): Entity[];
|
|
|
4
4
|
export declare function recallEnhanced(args: RecallInput): Promise<Entity[]>;
|
|
5
5
|
export { consolidate } from './consolidator.js';
|
|
6
6
|
export { exportMemories, importMemories } from './serializer.js';
|
|
7
|
+
export { compressWeeklyNoise } from './lifecycle.js';
|
|
7
8
|
export declare function learn(args: LearnInput): LearnResult;
|
|
8
9
|
export declare function forget(args: ForgetInput): ForgetResult;
|
|
10
|
+
export declare function reindex(opts?: {
|
|
11
|
+
namespace?: string;
|
|
12
|
+
}): Promise<{
|
|
13
|
+
processed: number;
|
|
14
|
+
embedded: number;
|
|
15
|
+
skipped: number;
|
|
16
|
+
}>;
|
|
9
17
|
//# sourceMappingURL=operations.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"operations.d.ts","sourceRoot":"","sources":["../../src/core/operations.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"operations.d.ts","sourceRoot":"","sources":["../../src/core/operations.ts"],"names":[],"mappings":"AAoBA,OAAO,KAAK,EACV,aAAa,EACb,cAAc,EACd,WAAW,EACX,WAAW,EACX,YAAY,EACZ,UAAU,EACV,WAAW,EACX,MAAM,EACP,MAAM,YAAY,CAAC;AAOpB,wBAAgB,QAAQ,CAAC,IAAI,EAAE,aAAa,GAAG,cAAc,CA+D5D;AAQD,wBAAgB,MAAM,CAAC,IAAI,EAAE,WAAW,GAAG,MAAM,EAAE,CAmBlD;AASD,wBAAsB,cAAc,CAAC,IAAI,EAAE,WAAW,GAAG,OAAO,CAAC,MAAM,EAAE,CAAC,CAsHzE;AAGD,OAAO,EAAE,WAAW,EAAE,MAAM,mBAAmB,CAAC;AAGhD,OAAO,EAAE,cAAc,EAAE,cAAc,EAAE,MAAM,iBAAiB,CAAC;AAGjE,OAAO,EAAE,mBAAmB,EAAE,MAAM,gBAAgB,CAAC;AAOrD,wBAAgB,KAAK,CAAC,IAAI,EAAE,UAAU,GAAG,WAAW,CAmBnD;AAMD,wBAAgB,MAAM,CAAC,IAAI,EAAE,WAAW,GAAG,YAAY,CAuBtD;AAOD,wBAAsB,OAAO,CAAC,IAAI,CAAC,EAAE;IAAE,SAAS,CAAC,EAAE,MAAM,CAAA;CAAE,GAAG,OAAO,CAAC;IACpE,SAAS,EAAE,MAAM,CAAC;IAClB,QAAQ,EAAE,MAAM,CAAC;IACjB,OAAO,EAAE,MAAM,CAAC;CACjB,CAAC,CAoDD"}
|