@mnemopay/sdk 0.7.1 → 0.7.3
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/cli/setup.d.ts +12 -0
- package/dist/cli/setup.d.ts.map +1 -0
- package/dist/cli/setup.js +161 -0
- package/dist/cli/setup.js.map +1 -0
- package/dist/mcp/server.js +2 -2
- package/package.json +3 -2
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
#!/usr/bin/env node
|
|
2
|
+
/**
|
|
3
|
+
* npx @mnemopay/sdk setup
|
|
4
|
+
*
|
|
5
|
+
* Auto-configures Claude Code hooks for MnemoPay session lifecycle:
|
|
6
|
+
* - Stop hook: blocks exit once, prompts Claude to save session summary
|
|
7
|
+
* - UserPromptSubmit hook: injects recall reminder on each message
|
|
8
|
+
*
|
|
9
|
+
* Works on Windows, macOS, and Linux.
|
|
10
|
+
*/
|
|
11
|
+
export {};
|
|
12
|
+
//# sourceMappingURL=setup.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"setup.d.ts","sourceRoot":"","sources":["../../src/cli/setup.ts"],"names":[],"mappings":";AACA;;;;;;;;GAQG"}
|
|
@@ -0,0 +1,161 @@
|
|
|
1
|
+
#!/usr/bin/env node
|
|
2
|
+
"use strict";
|
|
3
|
+
/**
|
|
4
|
+
* npx @mnemopay/sdk setup
|
|
5
|
+
*
|
|
6
|
+
* Auto-configures Claude Code hooks for MnemoPay session lifecycle:
|
|
7
|
+
* - Stop hook: blocks exit once, prompts Claude to save session summary
|
|
8
|
+
* - UserPromptSubmit hook: injects recall reminder on each message
|
|
9
|
+
*
|
|
10
|
+
* Works on Windows, macOS, and Linux.
|
|
11
|
+
*/
|
|
12
|
+
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
13
|
+
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
14
|
+
};
|
|
15
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
16
|
+
const fs_1 = __importDefault(require("fs"));
|
|
17
|
+
const path_1 = __importDefault(require("path"));
|
|
18
|
+
const os_1 = __importDefault(require("os"));
|
|
19
|
+
const STOP_HOOK_CONTENT = `#!/bin/bash
|
|
20
|
+
MARKER="$HOME/.claude/hooks/.mnemo-stop"
|
|
21
|
+
|
|
22
|
+
if [ ! -f "$MARKER" ]; then
|
|
23
|
+
touch "$MARKER"
|
|
24
|
+
printf '{"decision":"block","reason":"Before stopping: call mcp__mnemopay__remember with a concise summary of this session (what was accomplished, decisions made, follow-up needed). Use importance 0.85 and tags [\\"session-summary\\"]."}\n'
|
|
25
|
+
else
|
|
26
|
+
rm "$MARKER"
|
|
27
|
+
printf '{}\n'
|
|
28
|
+
fi
|
|
29
|
+
`;
|
|
30
|
+
const USER_PROMPT_HOOK_COMMAND = `bash -c "echo '{\\"systemMessage\\":\\"You have persistent memory via MnemoPay MCP. ` +
|
|
31
|
+
`If this is the start of a new topic or session, call mcp__mnemopay__recall to load relevant context. ` +
|
|
32
|
+
`Store any important new facts or decisions with mcp__mnemopay__remember.\\"}'"\n`.trimEnd();
|
|
33
|
+
function log(msg) {
|
|
34
|
+
process.stdout.write(msg + "\n");
|
|
35
|
+
}
|
|
36
|
+
function err(msg) {
|
|
37
|
+
process.stderr.write("✗ " + msg + "\n");
|
|
38
|
+
}
|
|
39
|
+
function claudeDir() {
|
|
40
|
+
return path_1.default.join(os_1.default.homedir(), ".claude");
|
|
41
|
+
}
|
|
42
|
+
function hooksDir() {
|
|
43
|
+
return path_1.default.join(claudeDir(), "hooks");
|
|
44
|
+
}
|
|
45
|
+
function settingsPath() {
|
|
46
|
+
return path_1.default.join(claudeDir(), "settings.json");
|
|
47
|
+
}
|
|
48
|
+
function stopHookPath() {
|
|
49
|
+
return path_1.default.join(hooksDir(), "stop-hook.sh");
|
|
50
|
+
}
|
|
51
|
+
function stopHookCommand() {
|
|
52
|
+
// On Windows, bash is invoked via Git Bash or WSL — use forward-slash path
|
|
53
|
+
const p = stopHookPath().replace(/\\/g, "/");
|
|
54
|
+
return `bash ${p}`;
|
|
55
|
+
}
|
|
56
|
+
function ensureDir(dir) {
|
|
57
|
+
if (!fs_1.default.existsSync(dir)) {
|
|
58
|
+
fs_1.default.mkdirSync(dir, { recursive: true });
|
|
59
|
+
log(` created ${dir}`);
|
|
60
|
+
}
|
|
61
|
+
}
|
|
62
|
+
function writeStopHook() {
|
|
63
|
+
const p = stopHookPath();
|
|
64
|
+
fs_1.default.writeFileSync(p, STOP_HOOK_CONTENT, { encoding: "utf8" });
|
|
65
|
+
// Make executable on Unix
|
|
66
|
+
if (process.platform !== "win32") {
|
|
67
|
+
fs_1.default.chmodSync(p, 0o755);
|
|
68
|
+
}
|
|
69
|
+
log(` wrote ${p}`);
|
|
70
|
+
}
|
|
71
|
+
function readSettings() {
|
|
72
|
+
const p = settingsPath();
|
|
73
|
+
if (!fs_1.default.existsSync(p))
|
|
74
|
+
return {};
|
|
75
|
+
try {
|
|
76
|
+
return JSON.parse(fs_1.default.readFileSync(p, "utf8"));
|
|
77
|
+
}
|
|
78
|
+
catch {
|
|
79
|
+
err(`Could not parse ${p} — backing up and starting fresh`);
|
|
80
|
+
fs_1.default.copyFileSync(p, p + ".bak");
|
|
81
|
+
return {};
|
|
82
|
+
}
|
|
83
|
+
}
|
|
84
|
+
function hasHook(groups, matcher) {
|
|
85
|
+
if (!groups)
|
|
86
|
+
return false;
|
|
87
|
+
return groups.some((g) => g.matcher === matcher);
|
|
88
|
+
}
|
|
89
|
+
function injectHooks(settings) {
|
|
90
|
+
let changed = false;
|
|
91
|
+
if (!settings.hooks) {
|
|
92
|
+
settings.hooks = {};
|
|
93
|
+
changed = true;
|
|
94
|
+
}
|
|
95
|
+
// Stop hook
|
|
96
|
+
if (!hasHook(settings.hooks.Stop, "")) {
|
|
97
|
+
settings.hooks.Stop = [
|
|
98
|
+
...(settings.hooks.Stop ?? []),
|
|
99
|
+
{
|
|
100
|
+
matcher: "",
|
|
101
|
+
hooks: [
|
|
102
|
+
{
|
|
103
|
+
type: "command",
|
|
104
|
+
command: stopHookCommand(),
|
|
105
|
+
timeout: 10000,
|
|
106
|
+
},
|
|
107
|
+
],
|
|
108
|
+
},
|
|
109
|
+
];
|
|
110
|
+
changed = true;
|
|
111
|
+
log(" injected Stop hook");
|
|
112
|
+
}
|
|
113
|
+
else {
|
|
114
|
+
log(" Stop hook already present — skipped");
|
|
115
|
+
}
|
|
116
|
+
// UserPromptSubmit hook
|
|
117
|
+
if (!hasHook(settings.hooks.UserPromptSubmit, "")) {
|
|
118
|
+
settings.hooks.UserPromptSubmit = [
|
|
119
|
+
...(settings.hooks.UserPromptSubmit ?? []),
|
|
120
|
+
{
|
|
121
|
+
matcher: "",
|
|
122
|
+
hooks: [
|
|
123
|
+
{
|
|
124
|
+
type: "command",
|
|
125
|
+
command: USER_PROMPT_HOOK_COMMAND,
|
|
126
|
+
timeout: 5000,
|
|
127
|
+
},
|
|
128
|
+
],
|
|
129
|
+
},
|
|
130
|
+
];
|
|
131
|
+
changed = true;
|
|
132
|
+
log(" injected UserPromptSubmit hook");
|
|
133
|
+
}
|
|
134
|
+
else {
|
|
135
|
+
log(" UserPromptSubmit hook already present — skipped");
|
|
136
|
+
}
|
|
137
|
+
return { settings, changed };
|
|
138
|
+
}
|
|
139
|
+
function main() {
|
|
140
|
+
log("\nMnemoPay Claude Code Setup\n");
|
|
141
|
+
// 1. Ensure directories
|
|
142
|
+
ensureDir(claudeDir());
|
|
143
|
+
ensureDir(hooksDir());
|
|
144
|
+
// 2. Write stop-hook.sh
|
|
145
|
+
writeStopHook();
|
|
146
|
+
// 3. Read + patch settings.json
|
|
147
|
+
const raw = readSettings();
|
|
148
|
+
const { settings, changed } = injectHooks(raw);
|
|
149
|
+
if (changed) {
|
|
150
|
+
fs_1.default.writeFileSync(settingsPath(), JSON.stringify(settings, null, 2), "utf8");
|
|
151
|
+
log(` saved ${settingsPath()}`);
|
|
152
|
+
}
|
|
153
|
+
log("\nDone! Claude Code hooks are configured for MnemoPay.\n");
|
|
154
|
+
log("What happens now:");
|
|
155
|
+
log(" • On session end — Claude is prompted to save a session summary");
|
|
156
|
+
log(" • On each message — Claude is reminded to recall relevant memories\n");
|
|
157
|
+
log("Make sure MnemoPay MCP is connected:");
|
|
158
|
+
log(" claude mcp add mnemopay -s user -- npx -y @mnemopay/sdk\n");
|
|
159
|
+
}
|
|
160
|
+
main();
|
|
161
|
+
//# sourceMappingURL=setup.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"setup.js","sourceRoot":"","sources":["../../src/cli/setup.ts"],"names":[],"mappings":"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"}
|
package/dist/mcp/server.js
CHANGED
|
@@ -331,7 +331,7 @@ async function executeTool(agent, name, args) {
|
|
|
331
331
|
// ─── Server setup ───────────────────────────────────────────────────────────
|
|
332
332
|
async function startServer() {
|
|
333
333
|
const agent = createAgent();
|
|
334
|
-
const server = new index_js_1.Server({ name: "mnemopay", version: "0.
|
|
334
|
+
const server = new index_js_1.Server({ name: "mnemopay", version: "0.7.1" }, { capabilities: { tools: {}, resources: {}, prompts: {} } });
|
|
335
335
|
// ── Tools ───────────────────────────────────────────────────────────────
|
|
336
336
|
server.setRequestHandler(types_js_1.ListToolsRequestSchema, async () => ({
|
|
337
337
|
tools: TOOLS,
|
|
@@ -628,7 +628,7 @@ async function startServer() {
|
|
|
628
628
|
// ─── Smithery sandbox — allows tool scanning without real credentials ──────
|
|
629
629
|
function createSandboxServer() {
|
|
630
630
|
const agent = index_js_2.MnemoPay.quick("smithery-sandbox");
|
|
631
|
-
const server = new index_js_1.Server({ name: "mnemopay", version: "0.
|
|
631
|
+
const server = new index_js_1.Server({ name: "mnemopay", version: "0.7.1" }, { capabilities: { tools: {}, resources: {}, prompts: {} } });
|
|
632
632
|
server.setRequestHandler(types_js_1.ListToolsRequestSchema, async () => ({ tools: TOOLS }));
|
|
633
633
|
server.setRequestHandler(types_js_1.CallToolRequestSchema, async (request) => {
|
|
634
634
|
const { name, arguments: args } = request.params;
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@mnemopay/sdk",
|
|
3
|
-
"version": "0.7.
|
|
3
|
+
"version": "0.7.3",
|
|
4
4
|
"description": "Give any AI agent memory and a wallet in 5 lines. Unified SDK for Mnemosyne (cognitive memory) + AgentPay (escrow economics).",
|
|
5
5
|
"main": "dist/index.js",
|
|
6
6
|
"types": "dist/index.d.ts",
|
|
@@ -39,7 +39,8 @@
|
|
|
39
39
|
}
|
|
40
40
|
},
|
|
41
41
|
"bin": {
|
|
42
|
-
"mnemopay-mcp": "dist/mcp/server.js"
|
|
42
|
+
"mnemopay-mcp": "dist/mcp/server.js",
|
|
43
|
+
"mnemopay-setup": "dist/cli/setup.js"
|
|
43
44
|
},
|
|
44
45
|
"files": [
|
|
45
46
|
"dist",
|