mnueron 0.1.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/ARCHITECTURE.md +161 -0
- package/INSTALL.md +262 -0
- package/LICENSE +21 -0
- package/README.md +305 -0
- package/dashboard/index.html +838 -0
- package/dist/cli.js +685 -0
- package/dist/cli.js.map +1 -0
- package/dist/config.js +44 -0
- package/dist/config.js.map +1 -0
- package/dist/dashboard/server.js +234 -0
- package/dist/dashboard/server.js.map +1 -0
- package/dist/detectors/claude_code.js +72 -0
- package/dist/detectors/claude_code.js.map +1 -0
- package/dist/detectors/claude_desktop.js +37 -0
- package/dist/detectors/claude_desktop.js.map +1 -0
- package/dist/detectors/cursor.js +36 -0
- package/dist/detectors/cursor.js.map +1 -0
- package/dist/detectors/extra.js +59 -0
- package/dist/detectors/extra.js.map +1 -0
- package/dist/detectors/index.js +14 -0
- package/dist/detectors/index.js.map +1 -0
- package/dist/detectors/json_detector.js +95 -0
- package/dist/detectors/json_detector.js.map +1 -0
- package/dist/detectors/types.js +13 -0
- package/dist/detectors/types.js.map +1 -0
- package/dist/import/claude.js +82 -0
- package/dist/import/claude.js.map +1 -0
- package/dist/import/openai.js +102 -0
- package/dist/import/openai.js.map +1 -0
- package/dist/index.js +77 -0
- package/dist/index.js.map +1 -0
- package/dist/plugins/loader.js +175 -0
- package/dist/plugins/loader.js.map +1 -0
- package/dist/plugins/types.js +24 -0
- package/dist/plugins/types.js.map +1 -0
- package/dist/setup.js +123 -0
- package/dist/setup.js.map +1 -0
- package/dist/store/chunking.js +150 -0
- package/dist/store/chunking.js.map +1 -0
- package/dist/store/embeddings.js +126 -0
- package/dist/store/embeddings.js.map +1 -0
- package/dist/store/local.js +720 -0
- package/dist/store/local.js.map +1 -0
- package/dist/store/provider.js +7 -0
- package/dist/store/provider.js.map +1 -0
- package/dist/store/redactor.js +114 -0
- package/dist/store/redactor.js.map +1 -0
- package/dist/store/remote.js +62 -0
- package/dist/store/remote.js.map +1 -0
- package/dist/tools.js +312 -0
- package/dist/tools.js.map +1 -0
- package/package.json +55 -0
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"local.js","sourceRoot":"","sources":["../../src/store/local.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"provider.js","sourceRoot":"","sources":["../../src/store/provider.ts"],"names":[],"mappings":"AAAA;;;;GAIG"}
|
|
@@ -0,0 +1,114 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Secret redaction at write time.
|
|
3
|
+
*
|
|
4
|
+
* Why: an AI agent that captures conversations will inevitably ingest a
|
|
5
|
+
* conversation where the user pasted an API key. That key now sits in
|
|
6
|
+
* plaintext SQLite at ~/.mnueron/memories.db. Bad. Redact at write time,
|
|
7
|
+
* before content hits storage.
|
|
8
|
+
*
|
|
9
|
+
* Strategy:
|
|
10
|
+
* 1. Pattern-match well-known secret formats (AWS, GitHub, OpenAI,
|
|
11
|
+
* Anthropic, Stripe, Slack, Google, JWT, etc.) and replace with
|
|
12
|
+
* stable placeholders like [REDACTED:aws_access_key].
|
|
13
|
+
* 2. Catch private-key blocks (-----BEGIN ... PRIVATE KEY-----).
|
|
14
|
+
* 3. Stamp metadata.redacted_count + metadata.redacted_kinds so the
|
|
15
|
+
* dashboard / agent can show "3 secrets redacted from this memory."
|
|
16
|
+
*
|
|
17
|
+
* Out of scope (for v1):
|
|
18
|
+
* - Generic high-entropy scanner. Tempting but creates false positives
|
|
19
|
+
* on hashes, UUIDs, base64-encoded data, etc. Most actual leaks are
|
|
20
|
+
* in known-format keys, so pattern matching covers the 90% case.
|
|
21
|
+
* - Reversing redaction (we never store the original).
|
|
22
|
+
*
|
|
23
|
+
* This module is intentionally pure (no DB / no network) so it can be
|
|
24
|
+
* called from any save path and unit-tested trivially.
|
|
25
|
+
*/
|
|
26
|
+
// Ordered most-specific-first. The first pattern that matches wins; later
|
|
27
|
+
// patterns won't see content that's already been replaced (because the
|
|
28
|
+
// placeholder doesn't look like any other pattern).
|
|
29
|
+
const PATTERNS = [
|
|
30
|
+
// Private key blocks (PEM format) — must run before single-line patterns
|
|
31
|
+
// since the body of a key block can match many other regexes.
|
|
32
|
+
{
|
|
33
|
+
name: 'private_key',
|
|
34
|
+
re: /-----BEGIN\s+(?:RSA|DSA|EC|OPENSSH|PGP|ENCRYPTED|PRIVATE)\s*(?:PRIVATE\s+)?KEY-----[\s\S]+?-----END\s+(?:RSA|DSA|EC|OPENSSH|PGP|ENCRYPTED|PRIVATE)\s*(?:PRIVATE\s+)?KEY-----/g,
|
|
35
|
+
},
|
|
36
|
+
// Anthropic
|
|
37
|
+
{ name: 'anthropic_key', re: /\bsk-ant-(?:api03|admin01)-[A-Za-z0-9_-]{80,120}\b/g },
|
|
38
|
+
// OpenAI — handle both legacy sk-... and project-scoped sk-proj-...
|
|
39
|
+
{ name: 'openai_key', re: /\bsk-(?:proj-|svcacct-|admin-)?[A-Za-z0-9_-]{40,255}\b/g },
|
|
40
|
+
// GitHub: classic, fine-grained, server-to-server, user-to-server, refresh, OAuth
|
|
41
|
+
{ name: 'github_token', re: /\bgh[pousr]_[A-Za-z0-9_]{36,255}\b/g },
|
|
42
|
+
// AWS access key + secret pair
|
|
43
|
+
{ name: 'aws_access_key', re: /\b(?:AKIA|ASIA|AIDA|AROA|ANPA|AGPA|AIPA|ANVA|ABIA|ACCA)[0-9A-Z]{16}\b/g },
|
|
44
|
+
// Stripe — sk_live_, sk_test_, pk_live_, pk_test_, rk_live_, rk_test_
|
|
45
|
+
{ name: 'stripe_key', re: /\b(?:sk|pk|rk)_(?:test|live)_[A-Za-z0-9]{24,255}\b/g },
|
|
46
|
+
// Slack — xoxb-, xoxp-, xoxa-, xoxr-, xoxs-
|
|
47
|
+
{ name: 'slack_token', re: /\bxox[abprs]-[0-9]{10,13}-[0-9]{10,13}-[A-Za-z0-9]{24,}\b/g },
|
|
48
|
+
// Google API keys (AIza...) and OAuth
|
|
49
|
+
{ name: 'google_api_key', re: /\bAIza[A-Za-z0-9_-]{35}\b/g },
|
|
50
|
+
{ name: 'google_oauth_token', re: /\bya29\.[A-Za-z0-9_-]{40,}\b/g },
|
|
51
|
+
// mnueron tokens (these end up in user-pasted commands; redact our own)
|
|
52
|
+
{ name: 'mnueron_token', re: /\bmnu_[A-Za-z0-9_-]{30,}\b/g },
|
|
53
|
+
// JWTs — three base64url-encoded segments separated by dots
|
|
54
|
+
{ name: 'jwt', re: /\beyJ[A-Za-z0-9_-]{10,}\.eyJ[A-Za-z0-9_-]{10,}\.[A-Za-z0-9_-]{10,}\b/g },
|
|
55
|
+
// Bearer-in-URL — common in cURL examples pasted into chats
|
|
56
|
+
// Group 1 is what we keep ("token=" / "api_key=" etc), group 2 is redacted.
|
|
57
|
+
{
|
|
58
|
+
name: 'url_token_param',
|
|
59
|
+
re: /\b(token|api[_-]?key|access[_-]?token|auth[_-]?token|bearer)=([A-Za-z0-9_.\-+/=]{16,})/gi,
|
|
60
|
+
redactWith: (match) => {
|
|
61
|
+
const eq = match.indexOf('=');
|
|
62
|
+
return match.slice(0, eq + 1) + '[REDACTED:url_token_param]';
|
|
63
|
+
},
|
|
64
|
+
},
|
|
65
|
+
// Generic Bearer header in HTTP/cURL: "Authorization: Bearer xxx"
|
|
66
|
+
{
|
|
67
|
+
name: 'authorization_bearer',
|
|
68
|
+
re: /\bAuthorization:\s*Bearer\s+([A-Za-z0-9_.\-+/=]{16,})/gi,
|
|
69
|
+
redactWith: (match) => {
|
|
70
|
+
const idx = match.toLowerCase().indexOf('bearer ');
|
|
71
|
+
const head = match.slice(0, idx + 7);
|
|
72
|
+
return head + '[REDACTED:authorization_bearer]';
|
|
73
|
+
},
|
|
74
|
+
},
|
|
75
|
+
// DSN-style secrets: https://USER:PASSWORD@host
|
|
76
|
+
{
|
|
77
|
+
name: 'url_basic_auth',
|
|
78
|
+
re: /\b(https?:\/\/)([^:@\s]+):([^@\s]+)@/g,
|
|
79
|
+
redactWith: (match) => match.replace(/:[^:@\s]+@/, ':[REDACTED:url_basic_auth]@'),
|
|
80
|
+
},
|
|
81
|
+
];
|
|
82
|
+
/**
|
|
83
|
+
* Run every pattern over `content`, replacing matches. Returns the
|
|
84
|
+
* redacted content + count + kinds found.
|
|
85
|
+
*/
|
|
86
|
+
export function redact(content) {
|
|
87
|
+
if (!content)
|
|
88
|
+
return { content: content ?? '', count: 0, kinds: [] };
|
|
89
|
+
let out = content;
|
|
90
|
+
let count = 0;
|
|
91
|
+
const kinds = new Set();
|
|
92
|
+
for (const p of PATTERNS) {
|
|
93
|
+
// Reset lastIndex in case the same regex object is reused.
|
|
94
|
+
p.re.lastIndex = 0;
|
|
95
|
+
out = out.replace(p.re, (match) => {
|
|
96
|
+
count++;
|
|
97
|
+
kinds.add(p.name);
|
|
98
|
+
return p.redactWith ? p.redactWith(match) : `[REDACTED:${p.name}]`;
|
|
99
|
+
});
|
|
100
|
+
}
|
|
101
|
+
return { content: out, count, kinds: [...kinds] };
|
|
102
|
+
}
|
|
103
|
+
/**
|
|
104
|
+
* Convenience for callers that just want yes/no.
|
|
105
|
+
*/
|
|
106
|
+
export function containsSecret(content) {
|
|
107
|
+
for (const p of PATTERNS) {
|
|
108
|
+
p.re.lastIndex = 0;
|
|
109
|
+
if (p.re.test(content))
|
|
110
|
+
return true;
|
|
111
|
+
}
|
|
112
|
+
return false;
|
|
113
|
+
}
|
|
114
|
+
//# sourceMappingURL=redactor.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"redactor.js","sourceRoot":"","sources":["../../src/store/redactor.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;GAwBG;AAmBH,0EAA0E;AAC1E,uEAAuE;AACvE,oDAAoD;AACpD,MAAM,QAAQ,GAAc;IAC1B,yEAAyE;IACzE,8DAA8D;IAC9D;QACE,IAAI,EAAE,aAAa;QACnB,EAAE,EAAE,+KAA+K;KACpL;IAED,YAAY;IACZ,EAAE,IAAI,EAAE,eAAe,EAAE,EAAE,EAAE,qDAAqD,EAAE;IAEpF,oEAAoE;IACpE,EAAE,IAAI,EAAE,YAAY,EAAE,EAAE,EAAE,yDAAyD,EAAE;IAErF,kFAAkF;IAClF,EAAE,IAAI,EAAE,cAAc,EAAE,EAAE,EAAE,qCAAqC,EAAE;IAEnE,+BAA+B;IAC/B,EAAE,IAAI,EAAE,gBAAgB,EAAE,EAAE,EAAE,wEAAwE,EAAE;IAExG,sEAAsE;IACtE,EAAE,IAAI,EAAE,YAAY,EAAE,EAAE,EAAE,qDAAqD,EAAE;IAEjF,4CAA4C;IAC5C,EAAE,IAAI,EAAE,aAAa,EAAE,EAAE,EAAE,4DAA4D,EAAE;IAEzF,sCAAsC;IACtC,EAAE,IAAI,EAAE,gBAAgB,EAAE,EAAE,EAAE,4BAA4B,EAAE;IAC5D,EAAE,IAAI,EAAE,oBAAoB,EAAE,EAAE,EAAE,+BAA+B,EAAE;IAEnE,wEAAwE;IACxE,EAAE,IAAI,EAAE,eAAe,EAAE,EAAE,EAAE,6BAA6B,EAAE;IAE5D,4DAA4D;IAC5D,EAAE,IAAI,EAAE,KAAK,EAAE,EAAE,EAAE,uEAAuE,EAAE;IAE5F,4DAA4D;IAC5D,4EAA4E;IAC5E;QACE,IAAI,EAAE,iBAAiB;QACvB,EAAE,EAAE,0FAA0F;QAC9F,UAAU,EAAE,CAAC,KAAa,EAAE,EAAE;YAC5B,MAAM,EAAE,GAAG,KAAK,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC;YAC9B,OAAO,KAAK,CAAC,KAAK,CAAC,CAAC,EAAE,EAAE,GAAG,CAAC,CAAC,GAAG,4BAA4B,CAAC;QAC/D,CAAC;KACF;IAED,kEAAkE;IAClE;QACE,IAAI,EAAE,sBAAsB;QAC5B,EAAE,EAAE,yDAAyD;QAC7D,UAAU,EAAE,CAAC,KAAa,EAAE,EAAE;YAC5B,MAAM,GAAG,GAAG,KAAK,CAAC,WAAW,EAAE,CAAC,OAAO,CAAC,SAAS,CAAC,CAAC;YACnD,MAAM,IAAI,GAAG,KAAK,CAAC,KAAK,CAAC,CAAC,EAAE,GAAG,GAAG,CAAC,CAAC,CAAC;YACrC,OAAO,IAAI,GAAG,iCAAiC,CAAC;QAClD,CAAC;KACF;IAED,gDAAgD;IAChD;QACE,IAAI,EAAE,gBAAgB;QACtB,EAAE,EAAE,uCAAuC;QAC3C,UAAU,EAAE,CAAC,KAAa,EAAE,EAAE,CAAC,KAAK,CAAC,OAAO,CAAC,YAAY,EAAE,6BAA6B,CAAC;KAC1F;CACF,CAAC;AAEF;;;GAGG;AACH,MAAM,UAAU,MAAM,CAAC,OAAe;IACpC,IAAI,CAAC,OAAO;QAAE,OAAO,EAAE,OAAO,EAAE,OAAO,IAAI,EAAE,EAAE,KAAK,EAAE,CAAC,EAAE,KAAK,EAAE,EAAE,EAAE,CAAC;IAErE,IAAI,GAAG,GAAG,OAAO,CAAC;IAClB,IAAI,KAAK,GAAG,CAAC,CAAC;IACd,MAAM,KAAK,GAAG,IAAI,GAAG,EAAU,CAAC;IAEhC,KAAK,MAAM,CAAC,IAAI,QAAQ,EAAE,CAAC;QACzB,2DAA2D;QAC3D,CAAC,CAAC,EAAE,CAAC,SAAS,GAAG,CAAC,CAAC;QACnB,GAAG,GAAG,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,KAAa,EAAE,EAAE;YACxC,KAAK,EAAE,CAAC;YACR,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC;YAClB,OAAO,CAAC,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC,CAAC,UAAU,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,aAAa,CAAC,CAAC,IAAI,GAAG,CAAC;QACrE,CAAC,CAAC,CAAC;IACL,CAAC;IAED,OAAO,EAAE,OAAO,EAAE,GAAG,EAAE,KAAK,EAAE,KAAK,EAAE,CAAC,GAAG,KAAK,CAAC,EAAE,CAAC;AACpD,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,cAAc,CAAC,OAAe;IAC5C,KAAK,MAAM,CAAC,IAAI,QAAQ,EAAE,CAAC;QACzB,CAAC,CAAC,EAAE,CAAC,SAAS,GAAG,CAAC,CAAC;QACnB,IAAI,CAAC,CAAC,EAAE,CAAC,IAAI,CAAC,OAAO,CAAC;YAAE,OAAO,IAAI,CAAC;IACtC,CAAC;IACD,OAAO,KAAK,CAAC;AACf,CAAC"}
|
|
@@ -0,0 +1,62 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Remote HTTP provider — talks to the hosted multi-tenant backend.
|
|
3
|
+
* Multi-company isolation happens server-side via the token → org_id binding.
|
|
4
|
+
* The MCP client doesn't need to know which org it's hitting; the token decides.
|
|
5
|
+
*/
|
|
6
|
+
export class RemoteProvider {
|
|
7
|
+
baseUrl;
|
|
8
|
+
token;
|
|
9
|
+
constructor(baseUrl, token) {
|
|
10
|
+
this.baseUrl = baseUrl;
|
|
11
|
+
this.token = token;
|
|
12
|
+
}
|
|
13
|
+
async req(method, path, body) {
|
|
14
|
+
const res = await fetch(`${this.baseUrl}${path}`, {
|
|
15
|
+
method,
|
|
16
|
+
headers: {
|
|
17
|
+
'Authorization': `Bearer ${this.token}`,
|
|
18
|
+
'Content-Type': 'application/json',
|
|
19
|
+
'User-Agent': 'mnueron-mcp/0.1',
|
|
20
|
+
},
|
|
21
|
+
body: body ? JSON.stringify(body) : undefined,
|
|
22
|
+
});
|
|
23
|
+
if (!res.ok) {
|
|
24
|
+
const text = await res.text().catch(() => '');
|
|
25
|
+
throw new Error(`mnueron API ${res.status} ${method} ${path}: ${text}`);
|
|
26
|
+
}
|
|
27
|
+
if (res.status === 204)
|
|
28
|
+
return undefined;
|
|
29
|
+
return (await res.json());
|
|
30
|
+
}
|
|
31
|
+
save(input) {
|
|
32
|
+
return this.req('POST', '/v1/memories', input);
|
|
33
|
+
}
|
|
34
|
+
bulkSave(inputs) {
|
|
35
|
+
return this.req('POST', '/v1/memories/bulk', { items: inputs });
|
|
36
|
+
}
|
|
37
|
+
search(input) {
|
|
38
|
+
return this.req('POST', '/v1/memories/search', input);
|
|
39
|
+
}
|
|
40
|
+
list(input) {
|
|
41
|
+
const params = new URLSearchParams();
|
|
42
|
+
if (input.namespace)
|
|
43
|
+
params.set('namespace', input.namespace);
|
|
44
|
+
if (input.limit)
|
|
45
|
+
params.set('limit', String(input.limit));
|
|
46
|
+
if (input.before)
|
|
47
|
+
params.set('before', String(input.before));
|
|
48
|
+
return this.req('GET', `/v1/memories?${params}`);
|
|
49
|
+
}
|
|
50
|
+
get(id) {
|
|
51
|
+
return this.req('GET', `/v1/memories/${id}`);
|
|
52
|
+
}
|
|
53
|
+
async delete(id) {
|
|
54
|
+
await this.req('DELETE', `/v1/memories/${id}`);
|
|
55
|
+
return true;
|
|
56
|
+
}
|
|
57
|
+
namespaces() {
|
|
58
|
+
return this.req('GET', '/v1/namespaces');
|
|
59
|
+
}
|
|
60
|
+
async close() { }
|
|
61
|
+
}
|
|
62
|
+
//# sourceMappingURL=remote.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"remote.js","sourceRoot":"","sources":["../../src/store/remote.ts"],"names":[],"mappings":"AAIA;;;;GAIG;AACH,MAAM,OAAO,cAAc;IAEf;IACA;IAFV,YACU,OAAe,EACf,KAAa;QADb,YAAO,GAAP,OAAO,CAAQ;QACf,UAAK,GAAL,KAAK,CAAQ;IACpB,CAAC;IAEI,KAAK,CAAC,GAAG,CAAI,MAAc,EAAE,IAAY,EAAE,IAAc;QAC/D,MAAM,GAAG,GAAG,MAAM,KAAK,CAAC,GAAG,IAAI,CAAC,OAAO,GAAG,IAAI,EAAE,EAAE;YAChD,MAAM;YACN,OAAO,EAAE;gBACP,eAAe,EAAE,UAAU,IAAI,CAAC,KAAK,EAAE;gBACvC,cAAc,EAAE,kBAAkB;gBAClC,YAAY,EAAE,iBAAiB;aAChC;YACD,IAAI,EAAE,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,SAAS;SAC9C,CAAC,CAAC;QACH,IAAI,CAAC,GAAG,CAAC,EAAE,EAAE,CAAC;YACZ,MAAM,IAAI,GAAG,MAAM,GAAG,CAAC,IAAI,EAAE,CAAC,KAAK,CAAC,GAAG,EAAE,CAAC,EAAE,CAAC,CAAC;YAC9C,MAAM,IAAI,KAAK,CAAC,eAAe,GAAG,CAAC,MAAM,IAAI,MAAM,IAAI,IAAI,KAAK,IAAI,EAAE,CAAC,CAAC;QAC1E,CAAC;QACD,IAAI,GAAG,CAAC,MAAM,KAAK,GAAG;YAAE,OAAO,SAAc,CAAC;QAC9C,OAAO,CAAC,MAAM,GAAG,CAAC,IAAI,EAAE,CAAM,CAAC;IACjC,CAAC;IAED,IAAI,CAAC,KAAsB;QACzB,OAAO,IAAI,CAAC,GAAG,CAAS,MAAM,EAAE,cAAc,EAAE,KAAK,CAAC,CAAC;IACzD,CAAC;IAED,QAAQ,CAAC,MAAyB;QAChC,OAAO,IAAI,CAAC,GAAG,CACb,MAAM,EAAE,mBAAmB,EAAE,EAAE,KAAK,EAAE,MAAM,EAAE,CAC/C,CAAC;IACJ,CAAC;IAED,MAAM,CAAC,KAAkB;QACvB,OAAO,IAAI,CAAC,GAAG,CAAW,MAAM,EAAE,qBAAqB,EAAE,KAAK,CAAC,CAAC;IAClE,CAAC;IAED,IAAI,CAAC,KAAgB;QACnB,MAAM,MAAM,GAAG,IAAI,eAAe,EAAE,CAAC;QACrC,IAAI,KAAK,CAAC,SAAS;YAAE,MAAM,CAAC,GAAG,CAAC,WAAW,EAAE,KAAK,CAAC,SAAS,CAAC,CAAC;QAC9D,IAAI,KAAK,CAAC,KAAK;YAAE,MAAM,CAAC,GAAG,CAAC,OAAO,EAAE,MAAM,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC,CAAC;QAC1D,IAAI,KAAK,CAAC,MAAM;YAAE,MAAM,CAAC,GAAG,CAAC,QAAQ,EAAE,MAAM,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC,CAAC;QAC7D,OAAO,IAAI,CAAC,GAAG,CAAW,KAAK,EAAE,gBAAgB,MAAM,EAAE,CAAC,CAAC;IAC7D,CAAC;IAED,GAAG,CAAC,EAAU;QACZ,OAAO,IAAI,CAAC,GAAG,CAAgB,KAAK,EAAE,gBAAgB,EAAE,EAAE,CAAC,CAAC;IAC9D,CAAC;IAED,KAAK,CAAC,MAAM,CAAC,EAAU;QACrB,MAAM,IAAI,CAAC,GAAG,CAAO,QAAQ,EAAE,gBAAgB,EAAE,EAAE,CAAC,CAAC;QACrD,OAAO,IAAI,CAAC;IACd,CAAC;IAED,UAAU;QACR,OAAO,IAAI,CAAC,GAAG,CAAkB,KAAK,EAAE,gBAAgB,CAAC,CAAC;IAC5D,CAAC;IAED,KAAK,CAAC,KAAK,KAA0B,CAAC;CACvC"}
|
package/dist/tools.js
ADDED
|
@@ -0,0 +1,312 @@
|
|
|
1
|
+
import { importClaudeExport } from './import/claude.js';
|
|
2
|
+
import { importOpenAIExport } from './import/openai.js';
|
|
3
|
+
// Sentinel registry for callers that don't pass one (CLI commands, tests).
|
|
4
|
+
const EMPTY_REGISTRY = {
|
|
5
|
+
processors: [],
|
|
6
|
+
sources: [],
|
|
7
|
+
exporters: [],
|
|
8
|
+
embedders: [],
|
|
9
|
+
loaded: [],
|
|
10
|
+
};
|
|
11
|
+
/**
|
|
12
|
+
* Run every plugin's onBeforeSave in sequence. Each plugin sees the output
|
|
13
|
+
* of the prior one. Returning `null` from any plugin cancels the save.
|
|
14
|
+
*/
|
|
15
|
+
async function runBeforeSave(input, registry) {
|
|
16
|
+
let current = input;
|
|
17
|
+
for (const p of registry.processors) {
|
|
18
|
+
if (!p.onBeforeSave || current === null)
|
|
19
|
+
continue;
|
|
20
|
+
try {
|
|
21
|
+
current = await p.onBeforeSave(current);
|
|
22
|
+
}
|
|
23
|
+
catch (e) {
|
|
24
|
+
process.stderr.write(`[mnueron] processor ${p.id} onBeforeSave threw: ${e?.message ?? e}\n`);
|
|
25
|
+
}
|
|
26
|
+
}
|
|
27
|
+
return current;
|
|
28
|
+
}
|
|
29
|
+
/**
|
|
30
|
+
* Run every plugin's onAfterRecall on each memory. Failures are logged but
|
|
31
|
+
* don't drop the memory from results.
|
|
32
|
+
*/
|
|
33
|
+
async function runAfterRecall(memories, registry) {
|
|
34
|
+
if (registry.processors.length === 0)
|
|
35
|
+
return memories;
|
|
36
|
+
const out = [];
|
|
37
|
+
for (const m of memories) {
|
|
38
|
+
let curr = m;
|
|
39
|
+
for (const p of registry.processors) {
|
|
40
|
+
if (!p.onAfterRecall)
|
|
41
|
+
continue;
|
|
42
|
+
try {
|
|
43
|
+
curr = await p.onAfterRecall(curr);
|
|
44
|
+
}
|
|
45
|
+
catch (e) {
|
|
46
|
+
process.stderr.write(`[mnueron] processor ${p.id} onAfterRecall threw: ${e?.message ?? e}\n`);
|
|
47
|
+
}
|
|
48
|
+
}
|
|
49
|
+
out.push(curr);
|
|
50
|
+
}
|
|
51
|
+
return out;
|
|
52
|
+
}
|
|
53
|
+
// Max content length included in list/recall responses. ~800 chars is enough
|
|
54
|
+
// for a smart agent to see whether a memory is relevant; if it wants the
|
|
55
|
+
// rest, memory_get(id) gives the full text.
|
|
56
|
+
const PREVIEW_CHARS = 800;
|
|
57
|
+
function toPreview(m) {
|
|
58
|
+
const full = m.content ?? '';
|
|
59
|
+
const truncated = full.length > PREVIEW_CHARS;
|
|
60
|
+
return {
|
|
61
|
+
id: m.id,
|
|
62
|
+
namespace: m.namespace,
|
|
63
|
+
content_preview: truncated ? full.slice(0, PREVIEW_CHARS) + '…' : full,
|
|
64
|
+
content_full_length: full.length,
|
|
65
|
+
content_truncated: truncated,
|
|
66
|
+
tags: m.tags,
|
|
67
|
+
source: m.source,
|
|
68
|
+
source_ref: m.source_ref,
|
|
69
|
+
score: m.score,
|
|
70
|
+
created_at: m.created_at,
|
|
71
|
+
updated_at: m.updated_at,
|
|
72
|
+
};
|
|
73
|
+
}
|
|
74
|
+
export const TOOL_DEFINITIONS = [
|
|
75
|
+
{
|
|
76
|
+
name: 'memory_save',
|
|
77
|
+
description: 'Save a memory for later recall. Use for facts about the user, project conventions, decisions, or anything worth remembering across sessions.',
|
|
78
|
+
inputSchema: {
|
|
79
|
+
type: 'object',
|
|
80
|
+
properties: {
|
|
81
|
+
content: { type: 'string', description: 'The text to remember.' },
|
|
82
|
+
namespace: { type: 'string', description: 'Optional logical group (e.g. project name). Defaults to user default.' },
|
|
83
|
+
tags: { type: 'array', items: { type: 'string' }, description: 'Optional tags for filtering.' },
|
|
84
|
+
source: { type: 'string', description: 'Where this memory came from (default: "agent").' },
|
|
85
|
+
},
|
|
86
|
+
required: ['content'],
|
|
87
|
+
},
|
|
88
|
+
},
|
|
89
|
+
{
|
|
90
|
+
name: 'memory_recall',
|
|
91
|
+
description: 'Search saved memories by relevance. Returns PREVIEWS (first ~800 chars) plus full length and id for each match. ' +
|
|
92
|
+
'Use memory_get(id) to fetch the complete text of a specific result. ' +
|
|
93
|
+
'Defaults to top 5 results. Search is hybrid (keyword + semantic), so the query can be a natural-language description.',
|
|
94
|
+
inputSchema: {
|
|
95
|
+
type: 'object',
|
|
96
|
+
properties: {
|
|
97
|
+
query: { type: 'string', description: 'Natural-language search.' },
|
|
98
|
+
namespace: { type: 'string', description: 'Limit to one namespace.' },
|
|
99
|
+
k: { type: 'number', description: 'Top-k results to return. Default 5. Max 25.' },
|
|
100
|
+
tags: { type: 'array', items: { type: 'string' }, description: 'Filter by tags.' },
|
|
101
|
+
},
|
|
102
|
+
required: ['query'],
|
|
103
|
+
},
|
|
104
|
+
},
|
|
105
|
+
{
|
|
106
|
+
name: 'memory_get',
|
|
107
|
+
description: 'Fetch a memory by id. Default returns up to 8000 characters. For long memories, set max_chars higher, or use offset + max_chars to page through.',
|
|
108
|
+
inputSchema: {
|
|
109
|
+
type: 'object',
|
|
110
|
+
properties: {
|
|
111
|
+
id: { type: 'string', description: 'The memory id from memory_recall.' },
|
|
112
|
+
max_chars: { type: 'number', description: 'Cap on characters returned. Default 8000, max 100000.' },
|
|
113
|
+
offset: { type: 'number', description: 'Start character offset (for paging through long content). Default 0.' },
|
|
114
|
+
},
|
|
115
|
+
required: ['id'],
|
|
116
|
+
},
|
|
117
|
+
},
|
|
118
|
+
{
|
|
119
|
+
name: 'memory_get_thread',
|
|
120
|
+
description: 'Fetch every chunk of a chunked conversation, ordered by position. Use this after memory_recall returns a chunk and you want the full thread context. Pass either the chunk id (we will resolve its parent_ref) or the parent_ref directly.',
|
|
121
|
+
inputSchema: {
|
|
122
|
+
type: 'object',
|
|
123
|
+
properties: {
|
|
124
|
+
id_or_parent_ref: {
|
|
125
|
+
type: 'string',
|
|
126
|
+
description: 'A chunk id from memory_recall, OR a parent_ref value from metadata.parent_ref.',
|
|
127
|
+
},
|
|
128
|
+
},
|
|
129
|
+
required: ['id_or_parent_ref'],
|
|
130
|
+
},
|
|
131
|
+
},
|
|
132
|
+
{
|
|
133
|
+
name: 'memory_list',
|
|
134
|
+
description: 'List recent memories. Returns PREVIEWS only — call memory_get(id) for full content. Default limit 20, max 100. Use for browsing a namespace.',
|
|
135
|
+
inputSchema: {
|
|
136
|
+
type: 'object',
|
|
137
|
+
properties: {
|
|
138
|
+
namespace: { type: 'string' },
|
|
139
|
+
limit: { type: 'number', description: 'Default 20, max 100.' },
|
|
140
|
+
before: { type: 'number', description: 'Unix ms cursor for pagination.' },
|
|
141
|
+
},
|
|
142
|
+
},
|
|
143
|
+
},
|
|
144
|
+
{
|
|
145
|
+
name: 'memory_delete',
|
|
146
|
+
description: 'Delete a memory by id.',
|
|
147
|
+
inputSchema: {
|
|
148
|
+
type: 'object',
|
|
149
|
+
properties: { id: { type: 'string' } },
|
|
150
|
+
required: ['id'],
|
|
151
|
+
},
|
|
152
|
+
},
|
|
153
|
+
{
|
|
154
|
+
name: 'memory_namespaces',
|
|
155
|
+
description: 'List all namespaces and their memory counts.',
|
|
156
|
+
inputSchema: { type: 'object', properties: {} },
|
|
157
|
+
},
|
|
158
|
+
{
|
|
159
|
+
name: 'memory_import_chat',
|
|
160
|
+
description: 'Import past conversations into memory. Accepts a path to a Claude conversation export or an OpenAI conversations export. Each conversation becomes a memory.',
|
|
161
|
+
inputSchema: {
|
|
162
|
+
type: 'object',
|
|
163
|
+
properties: {
|
|
164
|
+
path: { type: 'string', description: 'Absolute path to the export file.' },
|
|
165
|
+
format: {
|
|
166
|
+
type: 'string',
|
|
167
|
+
enum: ['claude', 'openai', 'auto'],
|
|
168
|
+
description: 'Source format. auto sniffs by file content.',
|
|
169
|
+
},
|
|
170
|
+
namespace: { type: 'string', description: 'Target namespace for imported memories.' },
|
|
171
|
+
summarize: {
|
|
172
|
+
type: 'boolean',
|
|
173
|
+
description: 'If true, summarize long chats (requires summarizer; otherwise raw text is stored). Default false.',
|
|
174
|
+
},
|
|
175
|
+
},
|
|
176
|
+
required: ['path'],
|
|
177
|
+
},
|
|
178
|
+
},
|
|
179
|
+
];
|
|
180
|
+
export async function handleToolCall(provider, defaultNamespace, name, args, registry = EMPTY_REGISTRY) {
|
|
181
|
+
switch (name) {
|
|
182
|
+
case 'memory_save': {
|
|
183
|
+
const initial = {
|
|
184
|
+
content: String(args.content ?? ''),
|
|
185
|
+
namespace: args.namespace ?? defaultNamespace,
|
|
186
|
+
tags: args.tags ?? [],
|
|
187
|
+
source: args.source ?? 'agent',
|
|
188
|
+
};
|
|
189
|
+
const transformed = await runBeforeSave(initial, registry);
|
|
190
|
+
if (transformed === null) {
|
|
191
|
+
// A plugin dropped the save (e.g. policy/redaction filter).
|
|
192
|
+
return { dropped: true, reason: 'a plugin cancelled the save' };
|
|
193
|
+
}
|
|
194
|
+
return await provider.save(transformed);
|
|
195
|
+
}
|
|
196
|
+
case 'memory_recall': {
|
|
197
|
+
const k = Math.min(25, Math.max(1, args.k ?? 5));
|
|
198
|
+
const memories = await provider.search({
|
|
199
|
+
query: String(args.query ?? ''),
|
|
200
|
+
namespace: args.namespace,
|
|
201
|
+
k,
|
|
202
|
+
tags: args.tags,
|
|
203
|
+
});
|
|
204
|
+
const processed = await runAfterRecall(memories, registry);
|
|
205
|
+
return processed.map(toPreview);
|
|
206
|
+
}
|
|
207
|
+
case 'memory_get': {
|
|
208
|
+
const id = String(args.id ?? '');
|
|
209
|
+
if (!id)
|
|
210
|
+
throw new Error('id is required');
|
|
211
|
+
const mem = await provider.get(id);
|
|
212
|
+
if (!mem)
|
|
213
|
+
throw new Error(`memory not found: ${id}`);
|
|
214
|
+
// Run onAfterRecall plugins before slicing — gives plugins a chance to
|
|
215
|
+
// redact / decorate the full content, then we slice the result.
|
|
216
|
+
const [processed] = await runAfterRecall([mem], registry);
|
|
217
|
+
// Cap content size to keep responses context-friendly. The agent can
|
|
218
|
+
// page via offset + max_chars if it needs more.
|
|
219
|
+
const fullLength = processed.content?.length ?? 0;
|
|
220
|
+
const maxChars = Math.min(100000, Math.max(100, args.max_chars ?? 8000));
|
|
221
|
+
const offset = Math.max(0, Math.min(fullLength, args.offset ?? 0));
|
|
222
|
+
const slice = (processed.content ?? '').slice(offset, offset + maxChars);
|
|
223
|
+
const truncated = offset + slice.length < fullLength;
|
|
224
|
+
return {
|
|
225
|
+
...processed,
|
|
226
|
+
content: slice,
|
|
227
|
+
content_full_length: fullLength,
|
|
228
|
+
content_offset: offset,
|
|
229
|
+
content_returned_chars: slice.length,
|
|
230
|
+
content_truncated: truncated,
|
|
231
|
+
content_next_offset: truncated ? offset + slice.length : null,
|
|
232
|
+
};
|
|
233
|
+
}
|
|
234
|
+
case 'memory_get_thread': {
|
|
235
|
+
const idOrRef = String(args.id_or_parent_ref ?? '');
|
|
236
|
+
if (!idOrRef)
|
|
237
|
+
throw new Error('id_or_parent_ref is required');
|
|
238
|
+
const findThread = provider.findThread;
|
|
239
|
+
if (typeof findThread !== 'function') {
|
|
240
|
+
throw new Error('memory_get_thread is only supported in local mode for now');
|
|
241
|
+
}
|
|
242
|
+
const chunks = findThread.call(provider, idOrRef);
|
|
243
|
+
if (chunks.length === 0)
|
|
244
|
+
return { chunks: [], count: 0 };
|
|
245
|
+
const processed = await runAfterRecall(chunks, registry);
|
|
246
|
+
return {
|
|
247
|
+
count: processed.length,
|
|
248
|
+
parent_ref: processed[0].source_ref ?? null,
|
|
249
|
+
chunks: processed.map(toPreview),
|
|
250
|
+
};
|
|
251
|
+
}
|
|
252
|
+
case 'memory_list': {
|
|
253
|
+
const limit = Math.min(100, Math.max(1, args.limit ?? 20));
|
|
254
|
+
const memories = await provider.list({
|
|
255
|
+
namespace: args.namespace,
|
|
256
|
+
limit,
|
|
257
|
+
before: args.before,
|
|
258
|
+
});
|
|
259
|
+
const processed = await runAfterRecall(memories, registry);
|
|
260
|
+
return processed.map(toPreview);
|
|
261
|
+
}
|
|
262
|
+
case 'memory_delete': {
|
|
263
|
+
const ok = await provider.delete(String(args.id));
|
|
264
|
+
return { deleted: ok };
|
|
265
|
+
}
|
|
266
|
+
case 'memory_namespaces': {
|
|
267
|
+
return await provider.namespaces();
|
|
268
|
+
}
|
|
269
|
+
case 'memory_import_chat': {
|
|
270
|
+
const path = String(args.path ?? '');
|
|
271
|
+
const ns = args.namespace ?? defaultNamespace;
|
|
272
|
+
let format = args.format ?? 'auto';
|
|
273
|
+
if (format === 'auto')
|
|
274
|
+
format = await sniffFormat(path);
|
|
275
|
+
let items;
|
|
276
|
+
if (format === 'claude') {
|
|
277
|
+
items = await importClaudeExport(path, ns);
|
|
278
|
+
}
|
|
279
|
+
else if (format === 'openai') {
|
|
280
|
+
items = await importOpenAIExport(path, ns);
|
|
281
|
+
}
|
|
282
|
+
else {
|
|
283
|
+
throw new Error(`Unknown format: ${format}`);
|
|
284
|
+
}
|
|
285
|
+
// Run onBeforeSave plugin hooks against every imported item.
|
|
286
|
+
// Items dropped by plugins are filtered out and counted separately.
|
|
287
|
+
let droppedByPlugin = 0;
|
|
288
|
+
const filtered = [];
|
|
289
|
+
for (const it of items) {
|
|
290
|
+
const transformed = await runBeforeSave(it, registry);
|
|
291
|
+
if (transformed === null)
|
|
292
|
+
droppedByPlugin++;
|
|
293
|
+
else
|
|
294
|
+
filtered.push(transformed);
|
|
295
|
+
}
|
|
296
|
+
const result = await provider.bulkSave(filtered);
|
|
297
|
+
return { ...result, namespace: ns, format, dropped_by_plugin: droppedByPlugin };
|
|
298
|
+
}
|
|
299
|
+
default:
|
|
300
|
+
throw new Error(`Unknown tool: ${name}`);
|
|
301
|
+
}
|
|
302
|
+
}
|
|
303
|
+
async function sniffFormat(path) {
|
|
304
|
+
const { readFile } = await import('node:fs/promises');
|
|
305
|
+
const head = (await readFile(path, 'utf8')).slice(0, 4000);
|
|
306
|
+
if (head.includes('"chat_messages"'))
|
|
307
|
+
return 'claude';
|
|
308
|
+
if (head.includes('"mapping"'))
|
|
309
|
+
return 'openai';
|
|
310
|
+
return 'claude';
|
|
311
|
+
}
|
|
312
|
+
//# sourceMappingURL=tools.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"tools.js","sourceRoot":"","sources":["../src/tools.ts"],"names":[],"mappings":"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"}
|
package/package.json
ADDED
|
@@ -0,0 +1,55 @@
|
|
|
1
|
+
{
|
|
2
|
+
"name": "mnueron",
|
|
3
|
+
"version": "0.1.0",
|
|
4
|
+
"description": "MNUERON — persistent memory for Claude Desktop, Claude Code, Cursor, and any AI dev tool or app. Local-first, free, with optional hosted multi-tenant backend.",
|
|
5
|
+
"type": "module",
|
|
6
|
+
"main": "dist/index.js",
|
|
7
|
+
"bin": {
|
|
8
|
+
"mnueron": "dist/cli.js",
|
|
9
|
+
"mnueron-mcp": "dist/index.js"
|
|
10
|
+
},
|
|
11
|
+
"scripts": {
|
|
12
|
+
"build": "tsc",
|
|
13
|
+
"start": "node dist/index.js",
|
|
14
|
+
"dev": "tsx src/index.ts",
|
|
15
|
+
"cli": "tsx src/cli.ts",
|
|
16
|
+
"setup": "node dist/cli.js setup"
|
|
17
|
+
},
|
|
18
|
+
"dependencies": {
|
|
19
|
+
"@modelcontextprotocol/sdk": "^1.0.4",
|
|
20
|
+
"@xenova/transformers": "^2.17.2",
|
|
21
|
+
"better-sqlite3": "^12.10.0",
|
|
22
|
+
"sqlite-vec": "^0.1.7",
|
|
23
|
+
"zod": "^3.23.8"
|
|
24
|
+
},
|
|
25
|
+
"devDependencies": {
|
|
26
|
+
"@types/better-sqlite3": "^7.6.11",
|
|
27
|
+
"@types/node": "^22.10.0",
|
|
28
|
+
"tsx": "^4.19.2",
|
|
29
|
+
"typescript": "^5.7.0"
|
|
30
|
+
},
|
|
31
|
+
"engines": {
|
|
32
|
+
"node": ">=20.0.0"
|
|
33
|
+
},
|
|
34
|
+
"files": [
|
|
35
|
+
"dist/",
|
|
36
|
+
"dashboard/",
|
|
37
|
+
"README.md",
|
|
38
|
+
"INSTALL.md",
|
|
39
|
+
"ARCHITECTURE.md",
|
|
40
|
+
"LICENSE"
|
|
41
|
+
],
|
|
42
|
+
"keywords": [
|
|
43
|
+
"ai",
|
|
44
|
+
"memory",
|
|
45
|
+
"agents",
|
|
46
|
+
"llm",
|
|
47
|
+
"claude",
|
|
48
|
+
"openai",
|
|
49
|
+
"mcp",
|
|
50
|
+
"model-context-protocol",
|
|
51
|
+
"cursor",
|
|
52
|
+
"claude-code"
|
|
53
|
+
],
|
|
54
|
+
"license": "MIT"
|
|
55
|
+
}
|