@s_s/mnemo 1.0.0
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.md +193 -0
- package/build/core/config.d.ts +54 -0
- package/build/core/config.js +61 -0
- package/build/core/config.js.map +1 -0
- package/build/core/embedding.d.ts +37 -0
- package/build/core/embedding.js +119 -0
- package/build/core/embedding.js.map +1 -0
- package/build/core/notes.d.ts +36 -0
- package/build/core/notes.js +187 -0
- package/build/core/notes.js.map +1 -0
- package/build/index.d.ts +2 -0
- package/build/index.js +31 -0
- package/build/index.js.map +1 -0
- package/build/prompts/templates.d.ts +21 -0
- package/build/prompts/templates.js +102 -0
- package/build/prompts/templates.js.map +1 -0
- package/build/tools/compress.d.ts +5 -0
- package/build/tools/compress.js +197 -0
- package/build/tools/compress.js.map +1 -0
- package/build/tools/save.d.ts +5 -0
- package/build/tools/save.js +67 -0
- package/build/tools/save.js.map +1 -0
- package/build/tools/search.d.ts +5 -0
- package/build/tools/search.js +107 -0
- package/build/tools/search.js.map +1 -0
- package/build/tools/setup.d.ts +5 -0
- package/build/tools/setup.js +120 -0
- package/build/tools/setup.js.map +1 -0
- package/package.json +49 -0
|
@@ -0,0 +1,107 @@
|
|
|
1
|
+
import { z } from 'zod';
|
|
2
|
+
import { searchNotes, isEmbeddingReady } from '../core/embedding.js';
|
|
3
|
+
import { readNote } from '../core/notes.js';
|
|
4
|
+
/**
|
|
5
|
+
* Register the memory_search tool
|
|
6
|
+
*/
|
|
7
|
+
export function registerSearchTool(server) {
|
|
8
|
+
server.registerTool('memory_search', {
|
|
9
|
+
title: 'Search Memory',
|
|
10
|
+
description: 'Search through persistent memories using semantic similarity. Use this at the start of conversations to load relevant context, when the user references past discussions, or when you need background information for a task.',
|
|
11
|
+
inputSchema: {
|
|
12
|
+
query: z
|
|
13
|
+
.string()
|
|
14
|
+
.describe("Natural language description of what you're looking for. E.g., 'architecture decisions for the mnemo project', 'user preferences about code style'"),
|
|
15
|
+
top_k: z
|
|
16
|
+
.number()
|
|
17
|
+
.int()
|
|
18
|
+
.min(1)
|
|
19
|
+
.max(20)
|
|
20
|
+
.default(5)
|
|
21
|
+
.optional()
|
|
22
|
+
.describe('Maximum number of results to return (default: 5)'),
|
|
23
|
+
source_filter: z
|
|
24
|
+
.string()
|
|
25
|
+
.optional()
|
|
26
|
+
.describe("Filter results by source agent tool, e.g., 'opencode', 'claude-code'"),
|
|
27
|
+
tag_filter: z
|
|
28
|
+
.array(z.string())
|
|
29
|
+
.optional()
|
|
30
|
+
.describe('Filter results to only include notes that have ALL of the specified tags. E.g., ["architecture", "decision"]'),
|
|
31
|
+
},
|
|
32
|
+
}, async ({ query, top_k, source_filter, tag_filter }) => {
|
|
33
|
+
try {
|
|
34
|
+
if (!isEmbeddingReady()) {
|
|
35
|
+
return {
|
|
36
|
+
content: [
|
|
37
|
+
{
|
|
38
|
+
type: 'text',
|
|
39
|
+
text: 'Mnemo is still loading the embedding model. Please try again in a few seconds.',
|
|
40
|
+
},
|
|
41
|
+
],
|
|
42
|
+
};
|
|
43
|
+
}
|
|
44
|
+
// When tag_filter is used, fetch more results to compensate for post-filtering
|
|
45
|
+
const fetchK = tag_filter && tag_filter.length > 0 ? (top_k || 5) * 3 : top_k || 5;
|
|
46
|
+
let results = await searchNotes(query, fetchK, source_filter);
|
|
47
|
+
// Post-filter by tags if specified
|
|
48
|
+
if (tag_filter && tag_filter.length > 0) {
|
|
49
|
+
results = results.filter((r) => {
|
|
50
|
+
const noteTags = r.tags.split(',').filter(Boolean);
|
|
51
|
+
return tag_filter.every((t) => noteTags.includes(t));
|
|
52
|
+
});
|
|
53
|
+
results = results.slice(0, top_k || 5);
|
|
54
|
+
}
|
|
55
|
+
if (results.length === 0) {
|
|
56
|
+
return {
|
|
57
|
+
content: [
|
|
58
|
+
{
|
|
59
|
+
type: 'text',
|
|
60
|
+
text: 'No relevant memories found.',
|
|
61
|
+
},
|
|
62
|
+
],
|
|
63
|
+
};
|
|
64
|
+
}
|
|
65
|
+
// For each result, load the full note content
|
|
66
|
+
const enrichedResults = await Promise.all(results.map(async (r) => {
|
|
67
|
+
const note = await readNote(r.id);
|
|
68
|
+
return {
|
|
69
|
+
id: r.id,
|
|
70
|
+
score: r.score,
|
|
71
|
+
content: note?.content || r.text,
|
|
72
|
+
tags: note?.meta.tags || r.tags.split(',').filter(Boolean),
|
|
73
|
+
source: r.source,
|
|
74
|
+
created: r.created,
|
|
75
|
+
};
|
|
76
|
+
}));
|
|
77
|
+
const output = enrichedResults
|
|
78
|
+
.map((r, i) => `### Memory ${i + 1} (relevance: ${(r.score * 100).toFixed(1)}%)\n` +
|
|
79
|
+
`- **ID:** ${r.id}\n` +
|
|
80
|
+
`- **Tags:** [${Array.isArray(r.tags) ? r.tags.join(', ') : r.tags}]\n` +
|
|
81
|
+
`- **Source:** ${r.source}\n` +
|
|
82
|
+
`- **Created:** ${r.created}\n\n` +
|
|
83
|
+
`${r.content}`)
|
|
84
|
+
.join('\n\n---\n\n');
|
|
85
|
+
return {
|
|
86
|
+
content: [
|
|
87
|
+
{
|
|
88
|
+
type: 'text',
|
|
89
|
+
text: `Found ${results.length} relevant memories:\n\n${output}`,
|
|
90
|
+
},
|
|
91
|
+
],
|
|
92
|
+
};
|
|
93
|
+
}
|
|
94
|
+
catch (error) {
|
|
95
|
+
return {
|
|
96
|
+
content: [
|
|
97
|
+
{
|
|
98
|
+
type: 'text',
|
|
99
|
+
text: `Failed to search memories: ${error instanceof Error ? error.message : String(error)}`,
|
|
100
|
+
},
|
|
101
|
+
],
|
|
102
|
+
isError: true,
|
|
103
|
+
};
|
|
104
|
+
}
|
|
105
|
+
});
|
|
106
|
+
}
|
|
107
|
+
//# sourceMappingURL=search.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"search.js","sourceRoot":"","sources":["../../src/tools/search.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,120 @@
|
|
|
1
|
+
import fs from 'node:fs/promises';
|
|
2
|
+
import os from 'node:os';
|
|
3
|
+
import { z } from 'zod';
|
|
4
|
+
import { AGENT_TYPES } from '../core/config.js';
|
|
5
|
+
import { getAgentConfig, injectPrompt, hasPromptInjected } from '../prompts/templates.js';
|
|
6
|
+
/**
|
|
7
|
+
* Detect which agent tool is being used by checking config file existence
|
|
8
|
+
*/
|
|
9
|
+
async function detectAgentType(cwd) {
|
|
10
|
+
const home = os.homedir();
|
|
11
|
+
// Check for agent-specific config files
|
|
12
|
+
const checks = [
|
|
13
|
+
{
|
|
14
|
+
type: 'opencode',
|
|
15
|
+
paths: [`${cwd}/opencode.json`, `${cwd}/opencode.jsonc`, `${home}/.config/opencode/opencode.json`],
|
|
16
|
+
},
|
|
17
|
+
{
|
|
18
|
+
type: 'claude-code',
|
|
19
|
+
paths: [`${cwd}/CLAUDE.md`, `${home}/.claude/CLAUDE.md`],
|
|
20
|
+
},
|
|
21
|
+
{
|
|
22
|
+
type: 'openclaw',
|
|
23
|
+
paths: [`${home}/.openclaw/openclaw.json`],
|
|
24
|
+
},
|
|
25
|
+
{
|
|
26
|
+
type: 'codex',
|
|
27
|
+
paths: [`${cwd}/.codex/config.toml`, `${home}/.codex/config.toml`],
|
|
28
|
+
},
|
|
29
|
+
];
|
|
30
|
+
for (const check of checks) {
|
|
31
|
+
for (const p of check.paths) {
|
|
32
|
+
try {
|
|
33
|
+
await fs.access(p);
|
|
34
|
+
return check.type;
|
|
35
|
+
}
|
|
36
|
+
catch {
|
|
37
|
+
continue;
|
|
38
|
+
}
|
|
39
|
+
}
|
|
40
|
+
}
|
|
41
|
+
return null;
|
|
42
|
+
}
|
|
43
|
+
/**
|
|
44
|
+
* Register the memory_setup tool
|
|
45
|
+
*/
|
|
46
|
+
export function registerSetupTool(server) {
|
|
47
|
+
server.registerTool('memory_setup', {
|
|
48
|
+
title: 'Memory Setup',
|
|
49
|
+
description: "Initialize Mnemo memory management. Writes memory management instructions into the agent's configuration file (e.g., AGENTS.md for OpenCode). Should be called once when setting up Mnemo for the first time.",
|
|
50
|
+
inputSchema: {
|
|
51
|
+
agent_type: z
|
|
52
|
+
.enum(AGENT_TYPES)
|
|
53
|
+
.optional()
|
|
54
|
+
.describe('Agent tool type. If not specified, will try to auto-detect. Valid values: opencode, claude-code, openclaw, codex'),
|
|
55
|
+
scope: z
|
|
56
|
+
.enum(['project', 'global'])
|
|
57
|
+
.default('project')
|
|
58
|
+
.describe("Where to write the prompt: 'project' for current project, 'global' for user-level config"),
|
|
59
|
+
},
|
|
60
|
+
}, async ({ agent_type, scope }) => {
|
|
61
|
+
const cwd = process.cwd();
|
|
62
|
+
const home = os.homedir();
|
|
63
|
+
// Determine agent type
|
|
64
|
+
let agentType = agent_type;
|
|
65
|
+
if (!agentType) {
|
|
66
|
+
const detected = await detectAgentType(cwd);
|
|
67
|
+
if (!detected) {
|
|
68
|
+
return {
|
|
69
|
+
content: [
|
|
70
|
+
{
|
|
71
|
+
type: 'text',
|
|
72
|
+
text: `Could not auto-detect agent type. Please specify agent_type parameter. Valid values: ${AGENT_TYPES.join(', ')}`,
|
|
73
|
+
},
|
|
74
|
+
],
|
|
75
|
+
isError: true,
|
|
76
|
+
};
|
|
77
|
+
}
|
|
78
|
+
agentType = detected;
|
|
79
|
+
}
|
|
80
|
+
const config = getAgentConfig(agentType);
|
|
81
|
+
const targetPath = scope === 'global' ? config.globalPath(home) : config.projectPath(cwd);
|
|
82
|
+
// Read existing content or start fresh
|
|
83
|
+
let existingContent = '';
|
|
84
|
+
try {
|
|
85
|
+
existingContent = await fs.readFile(targetPath, 'utf-8');
|
|
86
|
+
}
|
|
87
|
+
catch {
|
|
88
|
+
// File doesn't exist yet, that's fine
|
|
89
|
+
}
|
|
90
|
+
// Check if already installed
|
|
91
|
+
if (hasPromptInjected(existingContent)) {
|
|
92
|
+
// Update in place
|
|
93
|
+
const updated = injectPrompt(existingContent);
|
|
94
|
+
await fs.writeFile(targetPath, updated, 'utf-8');
|
|
95
|
+
return {
|
|
96
|
+
content: [
|
|
97
|
+
{
|
|
98
|
+
type: 'text',
|
|
99
|
+
text: `Mnemo memory instructions updated in ${targetPath}`,
|
|
100
|
+
},
|
|
101
|
+
],
|
|
102
|
+
};
|
|
103
|
+
}
|
|
104
|
+
// Inject prompt
|
|
105
|
+
const updated = injectPrompt(existingContent);
|
|
106
|
+
// Ensure parent directory exists
|
|
107
|
+
const dir = targetPath.substring(0, targetPath.lastIndexOf('/'));
|
|
108
|
+
await fs.mkdir(dir, { recursive: true });
|
|
109
|
+
await fs.writeFile(targetPath, updated, 'utf-8');
|
|
110
|
+
return {
|
|
111
|
+
content: [
|
|
112
|
+
{
|
|
113
|
+
type: 'text',
|
|
114
|
+
text: `Mnemo memory management initialized successfully.\n\nAgent type: ${agentType}\nConfig file: ${targetPath}\n\nMnemo is now ready to use.`,
|
|
115
|
+
},
|
|
116
|
+
],
|
|
117
|
+
};
|
|
118
|
+
});
|
|
119
|
+
}
|
|
120
|
+
//# sourceMappingURL=setup.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"setup.js","sourceRoot":"","sources":["../../src/tools/setup.ts"],"names":[],"mappings":"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"}
|
package/package.json
ADDED
|
@@ -0,0 +1,49 @@
|
|
|
1
|
+
{
|
|
2
|
+
"name": "@s_s/mnemo",
|
|
3
|
+
"version": "1.0.0",
|
|
4
|
+
"description": "Memory management MCP server for AI coding assistants",
|
|
5
|
+
"type": "module",
|
|
6
|
+
"main": "./build/index.js",
|
|
7
|
+
"bin": {
|
|
8
|
+
"mnemo": "build/index.js"
|
|
9
|
+
},
|
|
10
|
+
"files": [
|
|
11
|
+
"build"
|
|
12
|
+
],
|
|
13
|
+
"scripts": {
|
|
14
|
+
"build": "tsc",
|
|
15
|
+
"dev": "tsc --watch",
|
|
16
|
+
"start": "node build/index.js",
|
|
17
|
+
"prettier": "prettier --check \"**/*\"",
|
|
18
|
+
"prettier:fix": "prettier -c --write \"**/*\"",
|
|
19
|
+
"prettier:staged": "prettier --write",
|
|
20
|
+
"test": "vitest run",
|
|
21
|
+
"test:watch": "vitest",
|
|
22
|
+
"release": "bash scripts/release.sh",
|
|
23
|
+
"prepare": "husky"
|
|
24
|
+
},
|
|
25
|
+
"keywords": [
|
|
26
|
+
"mcp",
|
|
27
|
+
"memory",
|
|
28
|
+
"agent"
|
|
29
|
+
],
|
|
30
|
+
"author": "",
|
|
31
|
+
"license": "MIT",
|
|
32
|
+
"dependencies": {
|
|
33
|
+
"@huggingface/transformers": "^3.8.1",
|
|
34
|
+
"@modelcontextprotocol/sdk": "^1.27.1",
|
|
35
|
+
"vectra": "^0.12.3",
|
|
36
|
+
"zod": "^4.3.6"
|
|
37
|
+
},
|
|
38
|
+
"devDependencies": {
|
|
39
|
+
"@types/node": "^25.3.3",
|
|
40
|
+
"husky": "^9.1.7",
|
|
41
|
+
"lint-staged": "^16.3.2",
|
|
42
|
+
"prettier": "^3.8.1",
|
|
43
|
+
"typescript": "^5.9.3",
|
|
44
|
+
"vitest": "^4.0.18"
|
|
45
|
+
},
|
|
46
|
+
"lint-staged": {
|
|
47
|
+
"**/*.{js,ts,md}": "npm run prettier:staged --"
|
|
48
|
+
}
|
|
49
|
+
}
|