onlymcp 0.9.0 → 0.10.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/dist/apiClient.d.ts +99 -7
- package/dist/apiClient.js +58 -2
- package/dist/apiClient.js.map +1 -1
- package/dist/auth/deviceLogin.js +5 -1
- package/dist/auth/deviceLogin.js.map +1 -1
- package/dist/bin/cli.js +204 -24
- package/dist/bin/cli.js.map +1 -1
- package/dist/bin/mcp.js +16 -2
- package/dist/bin/mcp.js.map +1 -1
- package/dist/export/unpack.d.ts +33 -0
- package/dist/export/unpack.js +54 -0
- package/dist/export/unpack.js.map +1 -0
- package/dist/identity.d.ts +25 -0
- package/dist/identity.js +106 -0
- package/dist/identity.js.map +1 -0
- package/dist/import/collect.d.ts +14 -1
- package/dist/import/collect.js +25 -3
- package/dist/import/collect.js.map +1 -1
- package/dist/import/frontmatter.d.ts +31 -5
- package/dist/import/frontmatter.js +64 -22
- package/dist/import/frontmatter.js.map +1 -1
- package/dist/import/plan.d.ts +22 -1
- package/dist/import/plan.js +66 -19
- package/dist/import/plan.js.map +1 -1
- package/dist/import/prune.d.ts +46 -0
- package/dist/import/prune.js +61 -0
- package/dist/import/prune.js.map +1 -0
- package/dist/import/upload.js +10 -1
- package/dist/import/upload.js.map +1 -1
- package/dist/install.d.ts +7 -0
- package/dist/install.js +6 -2
- package/dist/install.js.map +1 -1
- package/dist/instructions.d.ts +3 -1
- package/dist/instructions.js +19 -2
- package/dist/instructions.js.map +1 -1
- package/dist/memorySync.d.ts +28 -0
- package/dist/memorySync.js +56 -0
- package/dist/memorySync.js.map +1 -0
- package/dist/paths.d.ts +12 -0
- package/dist/paths.js +34 -8
- package/dist/paths.js.map +1 -1
- package/dist/stubs.d.ts +1 -0
- package/dist/stubs.js +83 -11
- package/dist/stubs.js.map +1 -1
- package/dist/tools/memoryGraph.d.ts +69 -0
- package/dist/tools/memoryGraph.js +123 -0
- package/dist/tools/memoryGraph.js.map +1 -0
- package/package.json +3 -2
package/dist/paths.d.ts
CHANGED
|
@@ -1,2 +1,14 @@
|
|
|
1
1
|
export declare function cacheDir(): string;
|
|
2
|
+
/**
|
|
3
|
+
* Die Ordner, in die Stubs geschrieben werden.
|
|
4
|
+
*
|
|
5
|
+
* Zurueck kommt jeweils die WURZEL eines Clients, nicht sein `skills`-Ordner:
|
|
6
|
+
* writeStubs legt darunter `skills/` und `agents/` an, weil beide Scanner
|
|
7
|
+
* nebeneinander stehen. Bis Aufgabe 12 gab ONLYMCP_STUB_DIRS `~/.codex/skills`
|
|
8
|
+
* zurueck und die Stubs landeten in `~/.codex/skills/skills` - also an einer
|
|
9
|
+
* Stelle, die Codex nie liest.
|
|
10
|
+
*
|
|
11
|
+
* Mehrzahl, weil mehrere Clients gleichzeitig auf demselben Geraet laufen
|
|
12
|
+
* koennen und jeder einen anderen Ordner scannt.
|
|
13
|
+
*/
|
|
2
14
|
export declare function stubDirs(): string[];
|
package/dist/paths.js
CHANGED
|
@@ -1,28 +1,54 @@
|
|
|
1
|
+
import { existsSync } from 'node:fs';
|
|
1
2
|
import { homedir } from 'node:os';
|
|
2
3
|
import { join } from 'node:path';
|
|
4
|
+
// ONLYMCP_HOME wird an zwei Stellen unterschiedlich gelesen, und das ist
|
|
5
|
+
// Absicht: hier unten als Ersatz fuer ~/.claude/onlymcp (der eigene Ordner
|
|
6
|
+
// dieses Werkzeugs), in clientHome() als Ersatz fuer das Heimatverzeichnis
|
|
7
|
+
// (so wie install.ts es liest). Ein Test setzt die Variable auf einen
|
|
8
|
+
// Wegwerf-Ordner und trifft damit beides, ohne je ein echtes ~/.claude
|
|
9
|
+
// anzufassen.
|
|
3
10
|
function base() {
|
|
4
11
|
return process.env.ONLYMCP_HOME ?? join(homedir(), '.claude', 'onlymcp');
|
|
5
12
|
}
|
|
13
|
+
function clientHome() {
|
|
14
|
+
return process.env.ONLYMCP_HOME ?? homedir();
|
|
15
|
+
}
|
|
6
16
|
export function cacheDir() {
|
|
7
17
|
return join(base(), 'cache');
|
|
8
18
|
}
|
|
19
|
+
/**
|
|
20
|
+
* Die Ordner, in die Stubs geschrieben werden.
|
|
21
|
+
*
|
|
22
|
+
* Zurueck kommt jeweils die WURZEL eines Clients, nicht sein `skills`-Ordner:
|
|
23
|
+
* writeStubs legt darunter `skills/` und `agents/` an, weil beide Scanner
|
|
24
|
+
* nebeneinander stehen. Bis Aufgabe 12 gab ONLYMCP_STUB_DIRS `~/.codex/skills`
|
|
25
|
+
* zurueck und die Stubs landeten in `~/.codex/skills/skills` - also an einer
|
|
26
|
+
* Stelle, die Codex nie liest.
|
|
27
|
+
*
|
|
28
|
+
* Mehrzahl, weil mehrere Clients gleichzeitig auf demselben Geraet laufen
|
|
29
|
+
* koennen und jeder einen anderen Ordner scannt.
|
|
30
|
+
*/
|
|
9
31
|
export function stubDirs() {
|
|
10
|
-
// Mehrzahl, weil mehrere Clients gleichzeitig auf demselben Geraet laufen
|
|
11
|
-
// koennen und jeder einen anderen Ordner scannt.
|
|
12
32
|
const dirs = [];
|
|
13
33
|
// Claude Code setzt CLAUDE_PLUGIN_ROOT, wenn es den MCP-Server aus dem
|
|
14
|
-
// Plugin heraus startet.
|
|
15
|
-
//
|
|
34
|
+
// Plugin heraus startet. Dort liegen Stubs an einer Stelle, die der Skill-
|
|
35
|
+
// und Agent-Scanner ohnehin liest.
|
|
16
36
|
if (process.env.CLAUDE_PLUGIN_ROOT)
|
|
17
37
|
dirs.push(process.env.CLAUDE_PLUGIN_ROOT);
|
|
18
|
-
// Alle uebrigen Clients mit eigenem Scanner, gesetzt von `onlymcp install
|
|
19
|
-
//
|
|
20
|
-
//
|
|
38
|
+
// Alle uebrigen Clients mit eigenem Scanner, gesetzt von `onlymcp install`.
|
|
39
|
+
// Mehrere durch Doppelpunkt getrennt wie PATH: ein Client mehr ist ein
|
|
40
|
+
// Eintrag mehr, keine Codeaenderung.
|
|
21
41
|
for (const d of (process.env.ONLYMCP_STUB_DIRS ?? '').split(':')) {
|
|
22
42
|
if (d)
|
|
23
43
|
dirs.push(d);
|
|
24
44
|
}
|
|
25
|
-
//
|
|
45
|
+
// Was ohne jede Konfiguration da ist. Geprueft, nicht angelegt: wer kein
|
|
46
|
+
// Codex installiert hat, soll durch `onlymcp sync` kein ~/.codex bekommen.
|
|
47
|
+
for (const d of [join(clientHome(), '.claude'), join(clientHome(), '.codex')]) {
|
|
48
|
+
if (existsSync(d) && !dirs.includes(d))
|
|
49
|
+
dirs.push(d);
|
|
50
|
+
}
|
|
51
|
+
// Letzter Rueckfall fuer CLI und Tests ohne jeden Client-Kontext.
|
|
26
52
|
return dirs.length > 0 ? dirs : [join(base(), 'plugin')];
|
|
27
53
|
}
|
|
28
54
|
//# sourceMappingURL=paths.js.map
|
package/dist/paths.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"paths.js","sourceRoot":"","sources":["../src/paths.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,SAAS,CAAC;AAClC,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC;AAEjC,SAAS,IAAI;IACX,OAAO,OAAO,CAAC,GAAG,CAAC,YAAY,IAAI,IAAI,CAAC,OAAO,EAAE,EAAE,SAAS,EAAE,SAAS,CAAC,CAAC;AAC3E,CAAC;AAED,MAAM,UAAU,QAAQ;IACtB,OAAO,IAAI,CAAC,IAAI,EAAE,EAAE,OAAO,CAAC,CAAC;AAC/B,CAAC;AAED,MAAM,UAAU,QAAQ;IACtB,
|
|
1
|
+
{"version":3,"file":"paths.js","sourceRoot":"","sources":["../src/paths.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,SAAS,CAAC;AACrC,OAAO,EAAE,OAAO,EAAE,MAAM,SAAS,CAAC;AAClC,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC;AAEjC,yEAAyE;AACzE,2EAA2E;AAC3E,2EAA2E;AAC3E,sEAAsE;AACtE,uEAAuE;AACvE,cAAc;AACd,SAAS,IAAI;IACX,OAAO,OAAO,CAAC,GAAG,CAAC,YAAY,IAAI,IAAI,CAAC,OAAO,EAAE,EAAE,SAAS,EAAE,SAAS,CAAC,CAAC;AAC3E,CAAC;AAED,SAAS,UAAU;IACjB,OAAO,OAAO,CAAC,GAAG,CAAC,YAAY,IAAI,OAAO,EAAE,CAAC;AAC/C,CAAC;AAED,MAAM,UAAU,QAAQ;IACtB,OAAO,IAAI,CAAC,IAAI,EAAE,EAAE,OAAO,CAAC,CAAC;AAC/B,CAAC;AAED;;;;;;;;;;;GAWG;AACH,MAAM,UAAU,QAAQ;IACtB,MAAM,IAAI,GAAa,EAAE,CAAC;IAC1B,uEAAuE;IACvE,2EAA2E;IAC3E,mCAAmC;IACnC,IAAI,OAAO,CAAC,GAAG,CAAC,kBAAkB;QAAE,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,kBAAkB,CAAC,CAAC;IAC9E,4EAA4E;IAC5E,uEAAuE;IACvE,qCAAqC;IACrC,KAAK,MAAM,CAAC,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,iBAAiB,IAAI,EAAE,CAAC,CAAC,KAAK,CAAC,GAAG,CAAC,EAAE,CAAC;QACjE,IAAI,CAAC;YAAE,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IACtB,CAAC;IACD,yEAAyE;IACzE,2EAA2E;IAC3E,KAAK,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,UAAU,EAAE,EAAE,SAAS,CAAC,EAAE,IAAI,CAAC,UAAU,EAAE,EAAE,QAAQ,CAAC,CAAC,EAAE,CAAC;QAC9E,IAAI,UAAU,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC,CAAC;YAAE,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IACvD,CAAC;IACD,kEAAkE;IAClE,OAAO,IAAI,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,EAAE,EAAE,QAAQ,CAAC,CAAC,CAAC;AAC3D,CAAC"}
|
package/dist/stubs.d.ts
CHANGED
package/dist/stubs.js
CHANGED
|
@@ -1,5 +1,6 @@
|
|
|
1
|
-
import { mkdir, writeFile } from 'node:fs/promises';
|
|
1
|
+
import { mkdir, readFile, writeFile } from 'node:fs/promises';
|
|
2
2
|
import { dirname, join } from 'node:path';
|
|
3
|
+
import { headerField, headerOf } from './import/frontmatter.js';
|
|
3
4
|
// Der Client prueft den Pfad, den der Server geschickt hat, unabhaengig davon,
|
|
4
5
|
// dass der Server ihn beim Schreiben schon geprueft hat: hier wird aus einem
|
|
5
6
|
// Pfad ein echter Schreibvorgang auf einer echten Platte.
|
|
@@ -10,7 +11,31 @@ import { isSafeSkillFilePath } from './skillFilePath.js';
|
|
|
10
11
|
// entstehen sollte, darf trotzdem nie als Pfadsegment landen: ein falsch
|
|
11
12
|
// konfiguriertes oder kompromittiertes ONLYMCP_API_URL soll niemals Dateien
|
|
12
13
|
// ausserhalb von `dir` schreiben koennen, egal was der Server zurueckgibt.
|
|
13
|
-
const
|
|
14
|
+
const SAFE_AGENT_NAME = /^[a-z0-9]+(-[a-z0-9]+)*$/;
|
|
15
|
+
// Skills duerfen seit Aufgabe 11 einen Namensraum tragen.
|
|
16
|
+
const SAFE_SKILL_NAME = /^[a-z0-9]+(-[a-z0-9]+)*(:[a-z0-9]+(-[a-z0-9]+)*)?$/;
|
|
17
|
+
/**
|
|
18
|
+
* Das Merkmal, an dem `collect` einen Stub wiedererkennt.
|
|
19
|
+
*
|
|
20
|
+
* Es ist der Grund, warum Stubs ueberhaupt in `~/.claude/skills` liegen
|
|
21
|
+
* duerfen: ohne dieses Feld laedt der naechste `onlymcp import` jeden
|
|
22
|
+
* Platzhalter als Skill hoch und ersetzt damit den echten Inhalt durch den
|
|
23
|
+
* Satz "ruf get_skill auf".
|
|
24
|
+
*/
|
|
25
|
+
const MARKER = 'x-onlymcp-stub';
|
|
26
|
+
/**
|
|
27
|
+
* Der Ordnername eines Stubs.
|
|
28
|
+
*
|
|
29
|
+
* Ein Skill kann `superpowers:brainstorming` heissen, ein Ordner auf einer
|
|
30
|
+
* Windows-Platte kann keinen Doppelpunkt tragen, und der Scanner eines
|
|
31
|
+
* Clients erwartet ohnehin, dass `name:` zum Ordner passt. Der Stub heisst
|
|
32
|
+
* deshalb lokal `superpowers-brainstorming` und ruft im Text den echten
|
|
33
|
+
* Namen auf. `x-onlymcp-name` haelt fest, welcher das ist - daran erkennt
|
|
34
|
+
* der naechste Lauf, ob der Ordner ihm gehoert oder einem anderen Skill.
|
|
35
|
+
*/
|
|
36
|
+
function stubDirName(name) {
|
|
37
|
+
return name.replace(/:/g, '-');
|
|
38
|
+
}
|
|
14
39
|
// Frontmatter ist YAML, aber die Werte (description, model, jeder Tool-Name)
|
|
15
40
|
// kommen ungeprueft vom Server. Ein Wert mit Zeilenumbruch koennte sonst aus
|
|
16
41
|
// seiner eigenen Zeile ausbrechen und zusaetzliche Frontmatter-Felder
|
|
@@ -18,23 +43,61 @@ const SAFE_NAME = /^[a-z0-9]+(-[a-z0-9]+)*$/;
|
|
|
18
43
|
// werden deshalb entfernt, nicht escaped: ein Skill-/Agent-Name oder eine
|
|
19
44
|
// Beschreibung braucht nie einen Zeilenumbruch, um sinnvoll zu sein.
|
|
20
45
|
function yamlSafe(value) {
|
|
21
|
-
return value.replace(/[\r\n]+/g, ' ').trim();
|
|
46
|
+
return (value ?? '').replace(/[\r\n]+/g, ' ').trim();
|
|
47
|
+
}
|
|
48
|
+
/**
|
|
49
|
+
* Darf an diese Stelle geschrieben werden?
|
|
50
|
+
*
|
|
51
|
+
* Seit Aufgabe 12 liegen die Stubs in `~/.claude/skills` und `~/.codex/skills`
|
|
52
|
+
* - denselben Ordnern, aus denen importiert wird. Eine bestehende Datei, die
|
|
53
|
+
* kein Stub ist, ist die echte Arbeit eines Menschen und wird nicht
|
|
54
|
+
* ueberschrieben. Gehoert ein vorhandener Stub einem anderen Skill (zwei
|
|
55
|
+
* Plugins mit demselben Skill-Namen ergeben denselben Ordnernamen), bleibt
|
|
56
|
+
* ebenfalls stehen, was da ist: der erste hat ihn, der zweite wird gemeldet.
|
|
57
|
+
*/
|
|
58
|
+
async function mayWrite(path, owner) {
|
|
59
|
+
let existing;
|
|
60
|
+
try {
|
|
61
|
+
existing = await readFile(path, 'utf8');
|
|
62
|
+
}
|
|
63
|
+
catch {
|
|
64
|
+
return true; // nicht da, also frei
|
|
65
|
+
}
|
|
66
|
+
const head = headerOf(existing);
|
|
67
|
+
if (head === null || headerField(head, MARKER) !== 'true')
|
|
68
|
+
return false;
|
|
69
|
+
const mine = headerField(head, 'x-onlymcp-name');
|
|
70
|
+
return mine === undefined || mine === owner;
|
|
22
71
|
}
|
|
23
72
|
export async function writeStubs(api, dir) {
|
|
24
73
|
const [{ skills }, { agents }] = await Promise.all([api.listSkills(), api.listAgents()]);
|
|
25
74
|
let files = 0;
|
|
75
|
+
let written = 0;
|
|
76
|
+
/** Was stehen geblieben ist, weil dort schon etwas Echtes lag. */
|
|
77
|
+
const kept = [];
|
|
26
78
|
for (const s of skills) {
|
|
27
|
-
if (!
|
|
79
|
+
if (!SAFE_SKILL_NAME.test(s.name))
|
|
28
80
|
continue;
|
|
29
|
-
const target = join(dir, 'skills', s.name);
|
|
81
|
+
const target = join(dir, 'skills', stubDirName(s.name));
|
|
82
|
+
const skillMd = join(target, 'SKILL.md');
|
|
83
|
+
if (!(await mayWrite(skillMd, s.name))) {
|
|
84
|
+
// Auch die Begleitdateien bleiben aus: sie in einen fremden Skill-Ordner
|
|
85
|
+
// zu legen machte aus einer geschonten Datei einen halb ueberschriebenen
|
|
86
|
+
// Ordner.
|
|
87
|
+
kept.push(`skills/${stubDirName(s.name)}`);
|
|
88
|
+
continue;
|
|
89
|
+
}
|
|
30
90
|
await mkdir(target, { recursive: true });
|
|
31
|
-
await writeFile(
|
|
32
|
-
name: ${s.name}
|
|
33
|
-
description: Synchronisiert ueber OnlyMCP. Inhalt wird bei Bedarf geladen.
|
|
91
|
+
await writeFile(skillMd, `---
|
|
92
|
+
name: ${stubDirName(s.name)}
|
|
93
|
+
description: ${yamlSafe(s.description) || 'Synchronisiert ueber OnlyMCP. Inhalt wird bei Bedarf geladen.'}
|
|
94
|
+
${MARKER}: true
|
|
95
|
+
x-onlymcp-name: ${s.name}
|
|
34
96
|
---
|
|
35
97
|
|
|
36
98
|
Rufe \`get_skill({ name: "${s.name}" })\` am OnlyMCP-Server auf und befolge, was zurueckkommt.
|
|
37
99
|
`, 'utf8');
|
|
100
|
+
written += 1;
|
|
38
101
|
// Die Begleitdateien liegen danach WIRKLICH auf der Platte, nicht hinter
|
|
39
102
|
// einem Werkzeug. Genau das macht das Merkmal aus: ein Skill, dessen Text
|
|
40
103
|
// "lies references/palette.md" sagt, funktioniert unveraendert, weil die
|
|
@@ -67,21 +130,30 @@ Rufe \`get_skill({ name: "${s.name}" })\` am OnlyMCP-Server auf und befolge, was
|
|
|
67
130
|
}
|
|
68
131
|
}
|
|
69
132
|
await mkdir(join(dir, 'agents'), { recursive: true });
|
|
133
|
+
let agentsWritten = 0;
|
|
70
134
|
for (const a of agents) {
|
|
71
|
-
if (!
|
|
135
|
+
if (!SAFE_AGENT_NAME.test(a.name))
|
|
72
136
|
continue;
|
|
137
|
+
const dest = join(dir, 'agents', `${a.name}.md`);
|
|
138
|
+
if (!(await mayWrite(dest, a.name))) {
|
|
139
|
+
kept.push(`agents/${a.name}.md`);
|
|
140
|
+
continue;
|
|
141
|
+
}
|
|
73
142
|
const description = yamlSafe(a.description);
|
|
74
143
|
const model = a.model ? yamlSafe(a.model) : '';
|
|
75
144
|
const tools = a.tools.map(yamlSafe).join(', ');
|
|
76
|
-
await writeFile(
|
|
145
|
+
await writeFile(dest, `---
|
|
77
146
|
name: ${a.name}
|
|
78
147
|
description: ${description}
|
|
79
148
|
${model ? `model: ${model}\n` : ''}tools: ${tools}
|
|
149
|
+
${MARKER}: true
|
|
150
|
+
x-onlymcp-name: ${a.name}
|
|
80
151
|
---
|
|
81
152
|
|
|
82
153
|
Rufe \`get_agent_definition({ name: "${a.name}" })\` am OnlyMCP-Server auf und befolge, was zurueckkommt.
|
|
83
154
|
`, 'utf8');
|
|
155
|
+
agentsWritten += 1;
|
|
84
156
|
}
|
|
85
|
-
return { skills:
|
|
157
|
+
return { skills: written, agents: agentsWritten, files, kept };
|
|
86
158
|
}
|
|
87
159
|
//# sourceMappingURL=stubs.js.map
|
package/dist/stubs.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"stubs.js","sourceRoot":"","sources":["../src/stubs.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,EAAE,SAAS,EAAE,MAAM,kBAAkB,CAAC;
|
|
1
|
+
{"version":3,"file":"stubs.js","sourceRoot":"","sources":["../src/stubs.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,69 @@
|
|
|
1
|
+
import { z } from 'zod';
|
|
2
|
+
import type { ApiClient } from '../apiClient.js';
|
|
3
|
+
/**
|
|
4
|
+
* Die vier Werkzeuge aus Paket 03 Aufgabe 14: suchen, Baum, verschieben,
|
|
5
|
+
* Links. Dieselben vier wie auf der gehosteten Oberflaeche (Spec 7), hier
|
|
6
|
+
* ueber die REST-API statt ueber die Datenbank - damit eine Rangfolge, ein
|
|
7
|
+
* Baum und eine Umbenennung nicht davon abhaengen, welcher Server gefragt
|
|
8
|
+
* wurde.
|
|
9
|
+
*/
|
|
10
|
+
type Result = {
|
|
11
|
+
content: {
|
|
12
|
+
type: 'text';
|
|
13
|
+
text: string;
|
|
14
|
+
}[];
|
|
15
|
+
isError?: boolean;
|
|
16
|
+
};
|
|
17
|
+
export declare const MemorySearchInput: z.ZodObject<{
|
|
18
|
+
query: z.ZodString;
|
|
19
|
+
types: z.ZodOptional<z.ZodString>;
|
|
20
|
+
limit: z.ZodOptional<z.ZodNumber>;
|
|
21
|
+
}, z.core.$strip>;
|
|
22
|
+
export declare function createMemorySearchTool(api: ApiClient): {
|
|
23
|
+
name: string;
|
|
24
|
+
description: string;
|
|
25
|
+
inputSchema: z.ZodObject<{
|
|
26
|
+
query: z.ZodString;
|
|
27
|
+
types: z.ZodOptional<z.ZodString>;
|
|
28
|
+
limit: z.ZodOptional<z.ZodNumber>;
|
|
29
|
+
}, z.core.$strip>;
|
|
30
|
+
handler(args: z.infer<typeof MemorySearchInput>): Promise<Result>;
|
|
31
|
+
};
|
|
32
|
+
export declare const MemoryTreeInput: z.ZodObject<{
|
|
33
|
+
scope: z.ZodOptional<z.ZodString>;
|
|
34
|
+
}, z.core.$strip>;
|
|
35
|
+
export declare function createMemoryTreeTool(api: ApiClient): {
|
|
36
|
+
name: string;
|
|
37
|
+
description: string;
|
|
38
|
+
inputSchema: z.ZodObject<{
|
|
39
|
+
scope: z.ZodOptional<z.ZodString>;
|
|
40
|
+
}, z.core.$strip>;
|
|
41
|
+
handler(args: z.infer<typeof MemoryTreeInput>): Promise<Result>;
|
|
42
|
+
};
|
|
43
|
+
export declare const MemoryMoveInput: z.ZodObject<{
|
|
44
|
+
from: z.ZodString;
|
|
45
|
+
to: z.ZodString;
|
|
46
|
+
updateLinks: z.ZodOptional<z.ZodBoolean>;
|
|
47
|
+
}, z.core.$strip>;
|
|
48
|
+
export declare function createMemoryMoveTool(api: ApiClient): {
|
|
49
|
+
name: string;
|
|
50
|
+
description: string;
|
|
51
|
+
inputSchema: z.ZodObject<{
|
|
52
|
+
from: z.ZodString;
|
|
53
|
+
to: z.ZodString;
|
|
54
|
+
updateLinks: z.ZodOptional<z.ZodBoolean>;
|
|
55
|
+
}, z.core.$strip>;
|
|
56
|
+
handler(args: z.infer<typeof MemoryMoveInput>): Promise<Result>;
|
|
57
|
+
};
|
|
58
|
+
export declare const MemoryLinksInput: z.ZodObject<{
|
|
59
|
+
path: z.ZodString;
|
|
60
|
+
}, z.core.$strip>;
|
|
61
|
+
export declare function createMemoryLinksTool(api: ApiClient): {
|
|
62
|
+
name: string;
|
|
63
|
+
description: string;
|
|
64
|
+
inputSchema: z.ZodObject<{
|
|
65
|
+
path: z.ZodString;
|
|
66
|
+
}, z.core.$strip>;
|
|
67
|
+
handler(args: z.infer<typeof MemoryLinksInput>): Promise<Result>;
|
|
68
|
+
};
|
|
69
|
+
export {};
|
|
@@ -0,0 +1,123 @@
|
|
|
1
|
+
import { z } from 'zod';
|
|
2
|
+
import { ApiError } from '../apiClient.js';
|
|
3
|
+
import { isSafeMemoryPath } from '../memoryPath.js';
|
|
4
|
+
const text = (s) => ({ content: [{ type: 'text', text: s }] });
|
|
5
|
+
const failure = (s) => ({ content: [{ type: 'text', text: s }], isError: true });
|
|
6
|
+
function codeOf(e) {
|
|
7
|
+
return e instanceof ApiError ? e.code : 'errors.UNKNOWN';
|
|
8
|
+
}
|
|
9
|
+
export const MemorySearchInput = z.object({
|
|
10
|
+
query: z.string().min(1).max(200),
|
|
11
|
+
types: z.string().max(64).optional(),
|
|
12
|
+
limit: z.number().int().min(1).max(50).optional(),
|
|
13
|
+
});
|
|
14
|
+
export function createMemorySearchTool(api) {
|
|
15
|
+
return {
|
|
16
|
+
name: 'memory_search',
|
|
17
|
+
description: 'Volltextsuche ueber Memory, Skills und Agents. Liefert die besten Treffer mit je einem kurzen Ausschnitt.',
|
|
18
|
+
inputSchema: MemorySearchInput,
|
|
19
|
+
async handler(args) {
|
|
20
|
+
try {
|
|
21
|
+
const { hits } = await api.searchContent(args.query, {
|
|
22
|
+
types: args.types?.split(',').map((t) => t.trim()).filter((t) => t !== ''),
|
|
23
|
+
limit: args.limit,
|
|
24
|
+
});
|
|
25
|
+
if (hits.length === 0)
|
|
26
|
+
return text(`Nichts gefunden zu ${args.query}`);
|
|
27
|
+
// Die Adresse zuerst: der naechste Aufruf ist memory_read(path) oder
|
|
28
|
+
// get_skill(name), und was dafuer gebraucht wird, darf nicht im
|
|
29
|
+
// Ausschnitt untergehen.
|
|
30
|
+
return text(hits
|
|
31
|
+
.map((h) => `${h.kind} ${h.path ?? h.name}${h.scope === 'team' ? ' (team)' : ''}\n ${h.snippet}`)
|
|
32
|
+
.join('\n'));
|
|
33
|
+
}
|
|
34
|
+
catch (e) {
|
|
35
|
+
return failure(codeOf(e));
|
|
36
|
+
}
|
|
37
|
+
},
|
|
38
|
+
};
|
|
39
|
+
}
|
|
40
|
+
export const MemoryTreeInput = z.object({ scope: z.string().max(96).optional() });
|
|
41
|
+
export function createMemoryTreeTool(api) {
|
|
42
|
+
return {
|
|
43
|
+
name: 'memory_tree',
|
|
44
|
+
description: 'Die Ordnerstruktur dieses Kontos: jeder Ordner, auch leere, und die Dateien darin.',
|
|
45
|
+
inputSchema: MemoryTreeInput,
|
|
46
|
+
async handler(args) {
|
|
47
|
+
try {
|
|
48
|
+
const { nodes } = await api.memoryTree(args.scope ?? 'all');
|
|
49
|
+
if (nodes.length === 0)
|
|
50
|
+
return text('(leer)');
|
|
51
|
+
return text(nodes
|
|
52
|
+
.map((n) => {
|
|
53
|
+
const depth = n.path.split('/').length - 1;
|
|
54
|
+
const label = n.kind === 'folder' ? `${n.name}/` : n.name;
|
|
55
|
+
return `${' '.repeat(depth)}${label}${n.scope === 'team' ? ' (team)' : ''}`;
|
|
56
|
+
})
|
|
57
|
+
.join('\n'));
|
|
58
|
+
}
|
|
59
|
+
catch (e) {
|
|
60
|
+
return failure(codeOf(e));
|
|
61
|
+
}
|
|
62
|
+
},
|
|
63
|
+
};
|
|
64
|
+
}
|
|
65
|
+
export const MemoryMoveInput = z.object({
|
|
66
|
+
from: z.string().min(3).max(256),
|
|
67
|
+
to: z.string().min(3).max(256),
|
|
68
|
+
updateLinks: z.boolean().optional(),
|
|
69
|
+
});
|
|
70
|
+
export function createMemoryMoveTool(api) {
|
|
71
|
+
return {
|
|
72
|
+
name: 'memory_move',
|
|
73
|
+
description: 'Verschiebt oder benennt eine Memory-Datei um. Jede [[Verknuepfung]] auf den alten Namen wird mitgezogen, sofern nicht abgewaehlt.',
|
|
74
|
+
inputSchema: MemoryMoveInput,
|
|
75
|
+
async handler(args) {
|
|
76
|
+
// Beide Pfade hier geprueft und nicht erst am Server: siehe
|
|
77
|
+
// memoryPath.ts - encodeURIComponent laesst ".." als zwei Punkte durch.
|
|
78
|
+
if (!isSafeMemoryPath(args.from) || !isSafeMemoryPath(args.to))
|
|
79
|
+
return failure('errors.INVALID_PATH');
|
|
80
|
+
const updateLinks = args.updateLinks ?? true;
|
|
81
|
+
try {
|
|
82
|
+
const r = await api.moveMemory(args.from, args.to, updateLinks);
|
|
83
|
+
return text(`${r.from} nach ${r.to} verschoben` +
|
|
84
|
+
(updateLinks ? `, ${r.rewritten} Verknuepfungen angepasst, ${r.skipped} unveraendert` : ''));
|
|
85
|
+
}
|
|
86
|
+
catch (e) {
|
|
87
|
+
return failure(codeOf(e));
|
|
88
|
+
}
|
|
89
|
+
},
|
|
90
|
+
};
|
|
91
|
+
}
|
|
92
|
+
export const MemoryLinksInput = z.object({ path: z.string().min(3).max(256) });
|
|
93
|
+
export function createMemoryLinksTool(api) {
|
|
94
|
+
return {
|
|
95
|
+
name: 'memory_links',
|
|
96
|
+
description: 'Die [[Verknuepfungen]] einer Memory-Datei, getrennt nach denen, die irgendwohin zeigen, und denen, die ins Leere gehen.',
|
|
97
|
+
inputSchema: MemoryLinksInput,
|
|
98
|
+
async handler(args) {
|
|
99
|
+
if (!isSafeMemoryPath(args.path))
|
|
100
|
+
return failure('errors.INVALID_PATH');
|
|
101
|
+
try {
|
|
102
|
+
const file = await api.readMemory(args.path);
|
|
103
|
+
const { resolved, unresolved } = file.links;
|
|
104
|
+
if (resolved.length === 0 && unresolved.length === 0) {
|
|
105
|
+
return text(`${args.path} verweist auf nichts.`);
|
|
106
|
+
}
|
|
107
|
+
// Eine offene Verknuepfung ist kein Fehler und wird nicht versteckt:
|
|
108
|
+
// sie ist eine Notiz, die jemand schreiben wollte und noch nicht
|
|
109
|
+
// geschrieben hat. Genau dafuer gibt es die Trennung (Spec 4.3).
|
|
110
|
+
return text([
|
|
111
|
+
resolved.length > 0 ? `Aufgeloest: ${resolved.join(', ')}` : '',
|
|
112
|
+
unresolved.length > 0 ? `Offen (noch keine Datei dieses Namens): ${unresolved.join(', ')}` : '',
|
|
113
|
+
]
|
|
114
|
+
.filter((line) => line !== '')
|
|
115
|
+
.join('\n'));
|
|
116
|
+
}
|
|
117
|
+
catch (e) {
|
|
118
|
+
return failure(codeOf(e));
|
|
119
|
+
}
|
|
120
|
+
},
|
|
121
|
+
};
|
|
122
|
+
}
|
|
123
|
+
//# sourceMappingURL=memoryGraph.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"memoryGraph.js","sourceRoot":"","sources":["../../src/tools/memoryGraph.ts"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "onlymcp",
|
|
3
|
-
"version": "0.
|
|
3
|
+
"version": "0.10.0",
|
|
4
4
|
"description": "Skills, Agents und Memory aus der OnlyMCP-Cloud in jedem MCP-Client. Enthaelt den stdio-MCP-Server und die CLI zum Einrichten von Claude Code, Codex und Gemini CLI.",
|
|
5
5
|
"license": "MIT",
|
|
6
6
|
"author": "Francesco Palazzo",
|
|
@@ -39,11 +39,12 @@
|
|
|
39
39
|
"prepublishOnly": "pnpm build"
|
|
40
40
|
},
|
|
41
41
|
"dependencies": {
|
|
42
|
+
"@clack/prompts": "^1.7.0",
|
|
42
43
|
"@modelcontextprotocol/sdk": "^1.30.0",
|
|
43
44
|
"@napi-rs/keyring": "^1.3.0",
|
|
44
|
-
"@clack/prompts": "^1.7.0",
|
|
45
45
|
"cacache": "^21.0.1",
|
|
46
46
|
"commander": "^15.0.0",
|
|
47
|
+
"fflate": "^0.8.3",
|
|
47
48
|
"open": "^11.0.1",
|
|
48
49
|
"qrcode": "^1.5.4",
|
|
49
50
|
"zod": "^4.4.3"
|