@mneme-ai/mcp 1.24.2 → 1.25.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.
@@ -1 +1 @@
1
- {"version":3,"file":"_registry.d.ts","sourceRoot":"","sources":["../../src/tools/_registry.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAEH,OAAO,KAAK,EAAE,SAAS,EAAE,YAAY,EAAE,MAAM,aAAa,CAAC;AAmC3D;sEACsE;AACtE,wBAAgB,aAAa,IAAI,SAAS,EAAE,CAqC3C;AAED,mDAAmD;AACnD,wBAAgB,YAAY,IAAI,GAAG,CAAC,MAAM,EAAE,SAAS,CAAC,CASrD;AAED,uEAAuE;AACvE,wBAAgB,eAAe,IAAI,GAAG,CAAC,YAAY,EAAE,SAAS,EAAE,CAAC,CAOhE"}
1
+ {"version":3,"file":"_registry.d.ts","sourceRoot":"","sources":["../../src/tools/_registry.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAEH,OAAO,KAAK,EAAE,SAAS,EAAE,YAAY,EAAE,MAAM,aAAa,CAAC;AAoC3D;sEACsE;AACtE,wBAAgB,aAAa,IAAI,SAAS,EAAE,CAsC3C;AAED,mDAAmD;AACnD,wBAAgB,YAAY,IAAI,GAAG,CAAC,MAAM,EAAE,SAAS,CAAC,CASrD;AAED,uEAAuE;AACvE,wBAAgB,eAAe,IAAI,GAAG,CAAC,YAAY,EAAE,SAAS,EAAE,CAAC,CAOhE"}
@@ -37,6 +37,7 @@ import { nucleusTools } from "./_nucleus.js";
37
37
  import { inboxTools } from "./_inbox.js";
38
38
  import { antivirusTools } from "./_antivirus.js";
39
39
  import { whatsNewTool } from "./_whats_new.js";
40
+ import { retrievalLabTools } from "./_retrieval_lab.js";
40
41
  /** All Mneme tools, in display order. The capabilities syllabus comes first
41
42
  * so AI clients that read tool lists top-down see it immediately. */
42
43
  export function buildAllTools() {
@@ -65,6 +66,7 @@ export function buildAllTools() {
65
66
  ...inboxTools,
66
67
  ...antivirusTools,
67
68
  whatsNewTool,
69
+ ...retrievalLabTools,
68
70
  smartDoTool,
69
71
  ...memoryTools,
70
72
  ...peopleTools,
@@ -1 +1 @@
1
- {"version":3,"file":"_registry.js","sourceRoot":"","sources":["../../src/tools/_registry.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAIH,OAAO,EAAE,WAAW,EAAE,MAAM,aAAa,CAAC;AAC1C,OAAO,EAAE,WAAW,EAAE,MAAM,aAAa,CAAC;AAC1C,OAAO,EAAE,UAAU,EAAE,MAAM,YAAY,CAAC;AACxC,OAAO,EAAE,cAAc,EAAE,MAAM,gBAAgB,CAAC;AAChD,OAAO,EAAE,aAAa,EAAE,MAAM,eAAe,CAAC;AAC9C,OAAO,EAAE,YAAY,EAAE,MAAM,cAAc,CAAC;AAC5C,OAAO,EAAE,UAAU,EAAE,MAAM,YAAY,CAAC;AACxC,OAAO,EAAE,QAAQ,EAAE,MAAM,UAAU,CAAC;AACpC,OAAO,EAAE,SAAS,EAAE,MAAM,WAAW,CAAC;AACtC,OAAO,EAAE,gBAAgB,EAAE,MAAM,oBAAoB,CAAC;AACtD,OAAO,EAAE,WAAW,EAAE,MAAM,gBAAgB,CAAC;AAC7C,OAAO,EAAE,UAAU,EAAE,MAAM,mBAAmB,CAAC;AAC/C,OAAO,EAAE,oBAAoB,EAAE,MAAM,mBAAmB,CAAC;AACzD,OAAO,EAAE,gBAAgB,EAAE,MAAM,yBAAyB,CAAC;AAC3D,OAAO,EAAE,gBAAgB,EAAE,MAAM,0BAA0B,CAAC;AAC5D,OAAO,EAAE,aAAa,EAAE,MAAM,gBAAgB,CAAC;AAC/C,OAAO,EAAE,WAAW,EAAE,MAAM,oBAAoB,CAAC;AACjD,OAAO,EAAE,aAAa,EAAE,MAAM,iBAAiB,CAAC;AAChD,OAAO,EAAE,aAAa,EAAE,MAAM,aAAa,CAAC;AAC5C,OAAO,EAAE,WAAW,EAAE,MAAM,eAAe,CAAC;AAC5C,OAAO,EAAE,WAAW,EAAE,MAAM,cAAc,CAAC;AAC3C,OAAO,EAAE,eAAe,EAAE,MAAM,kBAAkB,CAAC;AACnD,OAAO,EAAE,sBAAsB,EAAE,MAAM,0BAA0B,CAAC;AAClE,OAAO,EAAE,aAAa,EAAE,aAAa,EAAE,MAAM,gBAAgB,CAAC;AAC9D,OAAO,EAAE,SAAS,EAAE,MAAM,YAAY,CAAC;AACvC,OAAO,EAAE,YAAY,EAAE,MAAM,eAAe,CAAC;AAC7C,OAAO,EAAE,iBAAiB,EAAE,gBAAgB,EAAE,MAAM,eAAe,CAAC;AACpE,OAAO,EAAE,YAAY,EAAE,MAAM,gBAAgB,CAAC;AAC9C,OAAO,EAAE,YAAY,EAAE,MAAM,eAAe,CAAC;AAC7C,OAAO,EAAE,UAAU,EAAE,MAAM,aAAa,CAAC;AACzC,OAAO,EAAE,cAAc,EAAE,MAAM,iBAAiB,CAAC;AACjD,OAAO,EAAE,YAAY,EAAE,MAAM,iBAAiB,CAAC;AAE/C;sEACsE;AACtE,MAAM,UAAU,aAAa;IAC3B,OAAO;QACL,gBAAgB;QAChB,oBAAoB;QACpB,UAAU;QACV,gBAAgB;QAChB,gBAAgB;QAChB,aAAa;QACb,GAAG,WAAW;QACd,GAAG,aAAa;QAChB,aAAa;QACb,WAAW;QACX,GAAG,WAAW;QACd,GAAG,eAAe;QAClB,GAAG,sBAAsB;QACzB,GAAG,aAAa;QAChB,GAAG,aAAa;QAChB,GAAG,SAAS;QACZ,GAAG,YAAY;QACf,iBAAiB;QACjB,gBAAgB;QAChB,YAAY;QACZ,GAAG,YAAY;QACf,GAAG,UAAU;QACb,GAAG,cAAc;QACjB,YAAY;QACZ,WAAW;QACX,GAAG,WAAW;QACd,GAAG,WAAW;QACd,GAAG,UAAU;QACb,GAAG,cAAc;QACjB,GAAG,aAAa;QAChB,GAAG,YAAY;QACf,GAAG,UAAU;QACb,GAAG,QAAQ;QACX,GAAG,SAAS;KACb,CAAC;AACJ,CAAC;AAED,mDAAmD;AACnD,MAAM,UAAU,YAAY;IAC1B,MAAM,GAAG,GAAG,IAAI,GAAG,EAAqB,CAAC;IACzC,KAAK,MAAM,CAAC,IAAI,aAAa,EAAE,EAAE,CAAC;QAChC,IAAI,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,IAAI,CAAC,EAAE,CAAC;YACpB,MAAM,IAAI,KAAK,CAAC,4BAA4B,CAAC,CAAC,IAAI,EAAE,CAAC,CAAC;QACxD,CAAC;QACD,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC;IACrB,CAAC;IACD,OAAO,GAAG,CAAC;AACb,CAAC;AAED,uEAAuE;AACvE,MAAM,UAAU,eAAe;IAC7B,MAAM,GAAG,GAAG,IAAI,GAAG,EAA6B,CAAC;IACjD,KAAK,MAAM,CAAC,IAAI,aAAa,EAAE,EAAE,CAAC;QAChC,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,QAAQ,CAAC;YAAE,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,QAAQ,EAAE,EAAE,CAAC,CAAC;QAClD,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,QAAQ,CAAE,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAC/B,CAAC;IACD,OAAO,GAAG,CAAC;AACb,CAAC"}
1
+ {"version":3,"file":"_registry.js","sourceRoot":"","sources":["../../src/tools/_registry.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,17 @@
1
+ /**
2
+ * Mneme Retrieval Lab -- MCP tools.
3
+ *
4
+ * mneme.retrieval.lab.list_configs -- arm pool + active config
5
+ * mneme.retrieval.lab.leaderboard -- ranked by mean composite + UCB1
6
+ * mneme.retrieval.lab.tune -- run one trial on demand
7
+ * mneme.retrieval.cross_encoder.rerank -- rerank candidates with bge-reranker-base
8
+ * mneme.retrieval.hyde.rewrite -- expand query via HyDE
9
+ */
10
+ import type { MnemeTool } from "./_types.js";
11
+ export declare const labListConfigsTool: MnemeTool;
12
+ export declare const labLeaderboardTool: MnemeTool;
13
+ export declare const labTuneTool: MnemeTool;
14
+ export declare const crossEncoderRerankTool: MnemeTool;
15
+ export declare const hydeRewriteTool: MnemeTool;
16
+ export declare const retrievalLabTools: MnemeTool[];
17
+ //# sourceMappingURL=_retrieval_lab.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"_retrieval_lab.d.ts","sourceRoot":"","sources":["../../src/tools/_retrieval_lab.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAGH,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,aAAa,CAAC;AAI7C,eAAO,MAAM,kBAAkB,EAAE,SAsChC,CAAC;AAEF,eAAO,MAAM,kBAAkB,EAAE,SAoChC,CAAC;AAEF,eAAO,MAAM,WAAW,EAAE,SA+BzB,CAAC;AAEF,eAAO,MAAM,sBAAsB,EAAE,SA4CpC,CAAC;AAEF,eAAO,MAAM,eAAe,EAAE,SA6C7B,CAAC;AAEF,eAAO,MAAM,iBAAiB,EAAE,SAAS,EAMxC,CAAC"}
@@ -0,0 +1,213 @@
1
+ /**
2
+ * Mneme Retrieval Lab -- MCP tools.
3
+ *
4
+ * mneme.retrieval.lab.list_configs -- arm pool + active config
5
+ * mneme.retrieval.lab.leaderboard -- ranked by mean composite + UCB1
6
+ * mneme.retrieval.lab.tune -- run one trial on demand
7
+ * mneme.retrieval.cross_encoder.rerank -- rerank candidates with bge-reranker-base
8
+ * mneme.retrieval.hyde.rewrite -- expand query via HyDE
9
+ */
10
+ import { retrievalLab } from "@mneme-ai/core";
11
+ const ROOT = (rt) => rt.meta.rootPath;
12
+ export const labListConfigsTool = {
13
+ name: "mneme.retrieval.lab.list_configs",
14
+ category: "meta",
15
+ description: "List the candidate retrieval configs the auto-tuner picks among, " +
16
+ "plus the currently-active config (the one every search() in Mneme " +
17
+ "uses right now). Configs vary on embedder backend, RRF k, vector/BM25 " +
18
+ "weight, reranker, HyDE on/off, and candidate-K.",
19
+ whenToUse: "User asks 'what retrieval configs are running?' or 'why is search slow?'",
20
+ triggers: ["retrieval configs", "retrieval lab", "what retrieval"],
21
+ inputSchema: { type: "object", properties: {} },
22
+ outputSchema: {
23
+ type: "object",
24
+ properties: {
25
+ configs: { type: "array" }, active: { type: "string" }, total: { type: "number" },
26
+ },
27
+ },
28
+ examples: [{ userQuery: "What retrieval configs is Mneme trying?" }],
29
+ pitfalls: [
30
+ "Paid embedders (voyage-3, openai-3-*) only appear active if API keys are present in the env.",
31
+ ],
32
+ composeWith: ["mneme.retrieval.lab.leaderboard", "mneme.retrieval.lab.tune"],
33
+ handler: async (rt) => {
34
+ const lb = retrievalLab.readLeaderboard(ROOT(rt));
35
+ const available = retrievalLab.availableEmbedders().map((e) => e.id);
36
+ return {
37
+ data: {
38
+ configs: retrievalLab.CANDIDATE_CONFIGS.map((c) => ({
39
+ ...c,
40
+ available: available.includes(c.embedder),
41
+ })),
42
+ active: lb.active,
43
+ total: retrievalLab.CANDIDATE_CONFIGS.length,
44
+ },
45
+ wisdom: `${retrievalLab.CANDIDATE_CONFIGS.length} candidate configs; active = "${lb.active}". ${available.length} embedder backends usable on this machine.`,
46
+ confidence: { level: "high" },
47
+ };
48
+ },
49
+ };
50
+ export const labLeaderboardTool = {
51
+ name: "mneme.retrieval.lab.leaderboard",
52
+ category: "meta",
53
+ description: "Show the auto-tuner leaderboard: each config + trial count + mean " +
54
+ "precision/recall/NDCG/latency + UCB1. The current active config is " +
55
+ "the highest-mean entry with at least 2 trials. Pareto frontier (best " +
56
+ "tradeoff between quality and latency) is included separately.",
57
+ whenToUse: "Inspect the auto-tuner's progress; explain why config X is active.",
58
+ triggers: ["retrieval leaderboard", "retrieval pareto", "retrieval tuning state"],
59
+ inputSchema: { type: "object", properties: {} },
60
+ outputSchema: {
61
+ type: "object",
62
+ properties: { entries: { type: "array" }, active: { type: "string" }, totalTrials: { type: "number" }, paretoIds: { type: "array" } },
63
+ },
64
+ examples: [{ userQuery: "Which retrieval config is winning right now?" }],
65
+ pitfalls: [
66
+ "Configs with trialCount=0 show ucb1=Infinity by design (untried arms get priority).",
67
+ ],
68
+ composeWith: ["mneme.retrieval.lab.tune", "mneme.retrieval.lab.list_configs"],
69
+ handler: async (rt) => {
70
+ const lb = retrievalLab.readLeaderboard(ROOT(rt));
71
+ const pareto = retrievalLab.paretoFrontier(lb).map((e) => e.configId);
72
+ const tried = lb.entries.filter((e) => e.trialCount > 0)
73
+ .sort((a, b) => b.meanComposite - a.meanComposite);
74
+ return {
75
+ data: {
76
+ entries: lb.entries, active: lb.active, totalTrials: lb.totalTrials,
77
+ paretoIds: pareto,
78
+ },
79
+ wisdom: tried.length === 0
80
+ ? `Leaderboard is empty -- start the daemon (\`mneme nucleus daemon --detach\`) and trials will run automatically every 15 min.`
81
+ : `${tried.length} configs tried (${lb.totalTrials} trials). Active: "${lb.active}" (composite ${tried[0]?.meanComposite.toFixed(3)}, latency ${Math.round(tried[0]?.meanLatencyMs ?? 0)}ms).`,
82
+ confidence: { level: "high" },
83
+ };
84
+ },
85
+ };
86
+ export const labTuneTool = {
87
+ name: "mneme.retrieval.lab.tune",
88
+ category: "meta",
89
+ description: "Run ONE retrieval-config trial on demand. Picks the next arm via " +
90
+ "UCB1 (or accepts a specific configId), runs the eval suite, folds " +
91
+ "the result into the leaderboard. Each trial is HMAC-SHA256 signed.",
92
+ whenToUse: "Force a trial without waiting for the daemon's 15-min cycle.",
93
+ triggers: ["tune retrieval", "retrieval trial", "rerun tuner"],
94
+ inputSchema: {
95
+ type: "object",
96
+ properties: { configId: { type: "string", description: "Optional: trial this exact config. Default: UCB1 picks." } },
97
+ },
98
+ outputSchema: { type: "object", properties: { trial: { type: "object" }, newActive: { type: "string" } } },
99
+ examples: [{ userQuery: "Run one retrieval-tuning trial." }],
100
+ pitfalls: [],
101
+ composeWith: ["mneme.retrieval.lab.leaderboard"],
102
+ handler: async (rt, args) => {
103
+ const root = ROOT(rt);
104
+ const wantId = typeof args["configId"] === "string" ? args["configId"] : null;
105
+ const config = wantId
106
+ ? retrievalLab.getConfig(wantId)
107
+ : retrievalLab.pickNextArm(retrievalLab.readLeaderboard(root)).config;
108
+ const trial = retrievalLab.runTrial(root, config);
109
+ const lb = retrievalLab.recordTrial(root, trial);
110
+ return {
111
+ data: { trial, newActive: lb.active },
112
+ wisdom: `Trial of "${config.id}" complete: composite ${trial.compositeScore.toFixed(3)}, latency ${trial.meanLatencyMs}ms. Active config = "${lb.active}".`,
113
+ confidence: { level: "high" },
114
+ };
115
+ },
116
+ };
117
+ export const crossEncoderRerankTool = {
118
+ name: "mneme.retrieval.cross_encoder.rerank",
119
+ category: "meta",
120
+ description: "Rerank a list of candidate texts using bge-reranker-base (a cross-" +
121
+ "encoder transformer). Cross-encoders score (query, candidate) pairs " +
122
+ "JOINTLY and consistently lift NDCG@10 by 5-15% on retrieval tasks " +
123
+ "(at the cost of ~30-100ms per candidate on CPU). Use AFTER first-" +
124
+ "stage retrieval to refine the top results.",
125
+ whenToUse: "You have ~10-50 candidate chunks and want a higher-precision top-K.",
126
+ triggers: ["cross-encoder rerank", "rerank with bge", "reranker"],
127
+ inputSchema: {
128
+ type: "object",
129
+ required: ["query", "candidates"],
130
+ properties: {
131
+ query: { type: "string" },
132
+ candidates: {
133
+ type: "array",
134
+ items: { type: "object", required: ["id", "text"], properties: { id: { type: "string" }, text: { type: "string" } } },
135
+ },
136
+ topK: { type: "number" },
137
+ },
138
+ },
139
+ outputSchema: { type: "object", properties: { ranked: { type: "array" }, totalMs: { type: "number" }, modelLoaded: { type: "boolean" } } },
140
+ examples: [{ userQuery: "Rerank these 20 commit chunks against 'how does auth handle expired tokens?'" }],
141
+ pitfalls: [
142
+ "First call loads the bge-reranker-base WASM model (~50MB), can take 5-15s. Subsequent calls are fast (cached).",
143
+ "Falls back to term-density scoring if @huggingface/transformers can't be loaded.",
144
+ ],
145
+ composeWith: ["mneme.retrieval.hyde.rewrite", "mneme.retrieval.lab.tune"],
146
+ handler: async (_rt, args) => {
147
+ const r = await retrievalLab.rerankCrossEncoder({
148
+ query: String(args["query"] ?? ""),
149
+ candidates: args["candidates"] ?? [],
150
+ topK: typeof args["topK"] === "number" ? args["topK"] : undefined,
151
+ });
152
+ return {
153
+ data: r,
154
+ wisdom: r.modelLoaded
155
+ ? `Reranked ${r.ranked.length} candidates in ${r.totalMs}ms via bge-reranker-base.`
156
+ : `Cross-encoder unavailable; fell back to term-density (${r.fallbackReason ?? "unknown"}).`,
157
+ confidence: { level: r.modelLoaded ? "high" : "medium" },
158
+ };
159
+ },
160
+ };
161
+ export const hydeRewriteTool = {
162
+ name: "mneme.retrieval.hyde.rewrite",
163
+ category: "meta",
164
+ description: "Apply HyDE (Hypothetical Document Embeddings) query rewrite: returns " +
165
+ "a system-prompt payload the AI agent uses to generate a hypothetical " +
166
+ "ANSWER, OR -- if the agent already supplied one -- returns the " +
167
+ "wrapped result ready for embedding. Lifts retrieval recall on most " +
168
+ "corpora without any extra deps.",
169
+ whenToUse: "Before embedding a query for retrieval, especially when the question is abstract or natural-language.",
170
+ triggers: ["hyde rewrite", "expand query", "hypothetical embedding"],
171
+ inputSchema: {
172
+ type: "object",
173
+ required: ["query"],
174
+ properties: {
175
+ query: { type: "string" },
176
+ agentSuppliedRewrite: { type: "string", description: "Optional: AI's hypothetical answer if already generated." },
177
+ mode: { type: "string", enum: ["prompt", "apply"], description: "'prompt' returns the system-prompt payload; 'apply' returns the rewrite (using agentSuppliedRewrite or deterministic fallback)." },
178
+ },
179
+ },
180
+ outputSchema: { type: "object", properties: { mode: { type: "string" }, payload: { type: "object" } } },
181
+ examples: [{ userQuery: "HyDE-rewrite this query: 'how does auth handle expired tokens?'" }],
182
+ pitfalls: [
183
+ "Deterministic fallback (no agent rewrite) is less effective than a real LLM rewrite -- best to loop back: get prompt -> generate -> resubmit with agentSuppliedRewrite.",
184
+ ],
185
+ composeWith: ["mneme.retrieval.cross_encoder.rerank"],
186
+ handler: async (_rt, args) => {
187
+ const query = String(args["query"] ?? "");
188
+ const mode = (args["mode"] === "apply" ? "apply" : "prompt");
189
+ if (mode === "prompt") {
190
+ const payload = retrievalLab.buildHyDePrompt(query);
191
+ return {
192
+ data: { mode: "prompt", payload },
193
+ wisdom: `HyDE prompt ready. Generate a hypothetical answer (${payload.maxChars} chars max), then call this tool again with mode='apply' + agentSuppliedRewrite.`,
194
+ confidence: { level: "high" },
195
+ };
196
+ }
197
+ const supplied = typeof args["agentSuppliedRewrite"] === "string" ? args["agentSuppliedRewrite"] : null;
198
+ const result = retrievalLab.applyHyde(query, supplied);
199
+ return {
200
+ data: { mode: "apply", payload: result },
201
+ wisdom: `HyDE rewrite (${result.source}): "${result.rewritten.slice(0, 80)}..."`,
202
+ confidence: { level: result.source === "agent-supplied" ? "high" : "medium" },
203
+ };
204
+ },
205
+ };
206
+ export const retrievalLabTools = [
207
+ labListConfigsTool,
208
+ labLeaderboardTool,
209
+ labTuneTool,
210
+ crossEncoderRerankTool,
211
+ hydeRewriteTool,
212
+ ];
213
+ //# sourceMappingURL=_retrieval_lab.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"_retrieval_lab.js","sourceRoot":"","sources":["../../src/tools/_retrieval_lab.ts"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@mneme-ai/mcp",
3
- "version": "1.24.2",
3
+ "version": "1.25.0",
4
4
  "description": "MCP server that exposes Mneme to Claude Code, Cursor, Continue, and other AI clients",
5
5
  "type": "module",
6
6
  "main": "./dist/index.js",
@@ -45,8 +45,8 @@
45
45
  "node": ">=22.13.0 <25.0.0"
46
46
  },
47
47
  "dependencies": {
48
- "@mneme-ai/core": "1.24.2",
49
- "@mneme-ai/embeddings": "1.24.2",
48
+ "@mneme-ai/core": "1.25.0",
49
+ "@mneme-ai/embeddings": "1.25.0",
50
50
  "@modelcontextprotocol/sdk": "^1.0.4"
51
51
  }
52
52
  }