@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.
@@ -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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"}
@@ -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.6.0" }, { capabilities: { tools: {}, resources: {}, prompts: {} } });
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.6.0" }, { capabilities: { tools: {}, resources: {}, prompts: {} } });
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.1",
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",