@ccjr1120/memory-one 0.1.13 → 0.1.14

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/README.md CHANGED
@@ -47,12 +47,13 @@ memoryone open
47
47
  1. 在左侧进入 **MCP 服务** 页面。
48
48
  2. 默认开启 Bearer Key 认证。保持认证时,先在 **MCP Key 管理** 中创建 Key,并选择该 Agent 可以使用的工具。
49
49
  3. 使用 Codex 时,在 **Codex → 连接与增强** 中选择 Key 并配置连接,然后在同一卡片中启用 **Codex 增强**。
50
- 4. 使用其他 Agent 时,复制页面中的 MCP 服务地址,并按客户端要求填写 Key
51
- 5. 重启 Agent 或开启新会话。
50
+ 4. 使用 Claude Code 时,在 **Claude → 连接与增强** 中选择 Key 并配置连接,然后在同一卡片中启用 **Claude 增强**。
51
+ 5. 使用其他 Agent 时,复制页面中的 MCP 服务地址,并按客户端要求填写 Key。
52
+ 6. 重启 Agent 或开启新会话。
52
53
 
53
- Memory One 会检测 `~/.codex/config.toml` 中现有的 `memory-one` MCP 配置。单击配置后,只会替换该 MCP 服务的配置,并保留 Codex 的其他设置。
54
+ Memory One 会检测 Codex 的 `~/.codex/config.toml` 和 Claude Code 的 `~/.claude.json` 中现有的 `memory-one` MCP 配置。单击配置后,只会替换对应的 Memory One MCP 配置,并保留其他设置。
54
55
 
55
- 关闭 Bearer Key 认证后,整个 MCP 服务都不再要求 Key。Codex 自动配置也会移除 Authorization Header,此时无需创建或选择 Key。
56
+ 关闭 Bearer Key 认证后,整个 MCP 服务都不再要求 Key。Codex Claude Code 自动配置都会移除 Authorization Header,此时无需创建或选择 Key。
56
57
 
57
58
  Memory One 默认要求客户端通过 Bearer Key 访问 MCP 服务。复制的配置格式如下:
58
59
 
@@ -74,15 +75,15 @@ Memory One 默认要求客户端通过 Bearer Key 访问 MCP 服务。复制的
74
75
 
75
76
  Memory One 默认仅监听本机;如需从其他设备访问,还需要自行配置网络访问方式。
76
77
 
77
- Codex 增强用于告诉 Codex 主动使用 Memory One,而不只是连接 MCP。在 Codex 卡片中单击 **启用全局记忆**;已有旧版指令时,单击 **更新全局指令**。
78
+ Codex 增强和 Claude 增强用于告诉客户端主动使用 Memory One,而不只是连接 MCP。在对应客户端卡片中单击 **启用全局记忆**;已有旧版指令时,单击 **更新全局指令**。
78
79
 
79
- 启用后,Codex 会被要求:
80
+ 启用后,Codex 和 Claude Code 会被要求:
80
81
 
81
82
  - 每项新任务开始前调用一次 `memory-get-context`;如果当前任务对话中已有其结果,不要重复调用,后续按需使用 `memory-search`。
82
83
  - 在 Git 项目中使用仓库根目录的绝对路径作为 `scope`。
83
84
  - 将用户表达的长期偏好、决定、纠正和项目约定及时写入或更新到 Memory One。
84
85
 
85
- Memory One 只会替换 `~/.codex/AGENTS.md` 中由自己管理的 `memory-one:codex` 标记区块,不会覆盖其他内容。该操作只会在你主动单击按钮后执行。
86
+ Memory One 只会替换 `~/.codex/AGENTS.md` 中由自己管理的 `memory-one:codex` 标记区块,或 `~/.claude/CLAUDE.md` 中由自己管理的 `memory-one:claude` 标记区块,不会覆盖其他内容。该操作只会在你主动单击按钮后执行。
86
87
 
87
88
  ## 3. 开始使用
88
89
 
@@ -111,9 +112,9 @@ Memory One 只会替换 `~/.codex/AGENTS.md` 中由自己管理的 `memory-one:c
111
112
 
112
113
  ![记忆总览](./docs/screenshots/memory-overview.png)
113
114
 
114
- MCP 服务与 Codex 配置:
115
+ MCP 服务与 Codex、Claude Code 配置:
115
116
 
116
- ![MCP 服务与 Codex 配置](./docs/screenshots/mcp-codex.png)
117
+ ![MCP 服务与 Codex、Claude Code 配置](./docs/screenshots/mcp-codex.png)
117
118
 
118
119
  ## 使用内置记忆管家
119
120
 
@@ -225,7 +226,7 @@ npm uninstall --global @ccjr1120/memory-one
225
226
 
226
227
  1. Agent 已配置 Memory One MCP 地址。
227
228
  2. 如果开启了 Bearer Key 认证,确认客户端已填写有效 Key,且 Key 已授权 `memory-get-context`。
228
- 3. 使用 Codex 时,确认已在 Codex 卡片中启用 **全局任务前置记忆**。
229
+ 3. 使用 Codex Claude Code 时,确认已在对应卡片中启用 **全局任务前置记忆**。
229
230
  4. 启用后已经重启 Agent 或开启新会话。
230
231
 
231
232
  ### 记忆管家提示配置不完整
package/dist/app.js CHANGED
@@ -4,6 +4,7 @@ import { Client } from "@modelcontextprotocol/sdk/client/index.js";
4
4
  import { StreamableHTTPClientTransport } from "@modelcontextprotocol/sdk/client/streamableHttp.js";
5
5
  import { MemoryStore } from "./storage.js";
6
6
  import { ContextCache } from "./mcp/context-cache.js";
7
+ import { createClaudeIntegrationService } from "./integrations/claude.js";
7
8
  import { createCodexIntegrationService } from "./integrations/codex.js";
8
9
  import { registerMemoryRoutes } from "./routes/memories.js";
9
10
  import { registerDataRoutes } from "./routes/data.js";
@@ -24,11 +25,12 @@ export function createApp(options = {}) {
24
25
  return { client, transport };
25
26
  };
26
27
  const codex = createCodexIntegrationService(store);
28
+ const claude = createClaudeIntegrationService(store);
27
29
  registerSystemRoutes(app, packageVersion);
28
30
  registerMemoryRoutes(app, store);
29
31
  registerDataRoutes(app, store);
30
32
  registerSettingsRoutes(app, store);
31
- registerIntegrationRoutes(app, codex);
33
+ registerIntegrationRoutes(app, codex, claude);
32
34
  registerAgentRoutes(app, store, connectMemoryMcp);
33
35
  registerMcpRoutes(app, store, internalMcpToken, contextCache);
34
36
  return { app, store };
package/dist/app.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"app.js","sourceRoot":"","sources":["../src/app.ts"],"names":[],"mappings":"AAAA,OAAO,OAAO,MAAM,SAAS,CAAC;AAC9B,OAAO,EAAE,UAAU,EAAE,MAAM,aAAa,CAAC;AACzC,OAAO,EAAE,MAAM,EAAE,MAAM,2CAA2C,CAAC;AACnE,OAAO,EAAE,6BAA6B,EAAE,MAAM,oDAAoD,CAAC;AACnG,OAAO,EAAE,WAAW,EAAE,MAAM,cAAc,CAAC;AAC3C,OAAO,EAAE,YAAY,EAAE,MAAM,wBAAwB,CAAC;AACtD,OAAO,EAAE,6BAA6B,EAAE,MAAM,yBAAyB,CAAC;AACxE,OAAO,EAAE,oBAAoB,EAAE,MAAM,sBAAsB,CAAC;AAC5D,OAAO,EAAE,kBAAkB,EAAE,MAAM,kBAAkB,CAAC;AACtD,OAAO,EAAE,sBAAsB,EAAE,MAAM,sBAAsB,CAAC;AAC9D,OAAO,EAAE,yBAAyB,EAAE,MAAM,0BAA0B,CAAC;AACrE,OAAO,EAAE,mBAAmB,EAAE,MAAM,mBAAmB,CAAC;AACxD,OAAO,EAAE,iBAAiB,EAAE,MAAM,iBAAiB,CAAC;AACpD,OAAO,EAAE,cAAc,EAAE,oBAAoB,EAAE,MAAM,oBAAoB,CAAC;AAE1E,MAAM,UAAU,SAAS,CAAC,UAA+B,EAAE;IACzD,MAAM,KAAK,GAAG,IAAI,WAAW,CAAC,OAAO,CAAC,MAAM,IAAI,OAAO,CAAC,GAAG,CAAC,cAAc,IAAI,gBAAgB,CAAC,CAAC;IAChG,MAAM,gBAAgB,GAAG,UAAU,EAAE,CAAC;IACtC,MAAM,YAAY,GAAG,IAAI,YAAY,EAAE,CAAC;IACxC,MAAM,GAAG,GAAG,OAAO,CAAC,EAAE,MAAM,EAAE,IAAI,EAAE,CAAC,CAAC;IACtC,MAAM,gBAAgB,GAAG,KAAK,IAAI,EAAE;QAClC,MAAM,MAAM,GAAG,IAAI,MAAM,CAAC,EAAE,IAAI,EAAE,kBAAkB,EAAE,OAAO,EAAE,OAAO,EAAE,CAAC,CAAC;QAC1E,MAAM,SAAS,GAAG,IAAI,6BAA6B,CAAC,IAAI,GAAG,CAAC,oBAAoB,OAAO,CAAC,GAAG,CAAC,WAAW,IAAI,IAAI,MAAM,CAAC,EAAE,EAAE,WAAW,EAAE,EAAE,OAAO,EAAE,EAAE,uBAAuB,EAAE,gBAAgB,EAAE,EAAE,EAAE,CAAC,CAAC;QACrM,MAAM,MAAM,CAAC,OAAO,CAAC,SAAS,CAAC,CAAC;QAChC,OAAO,EAAE,MAAM,EAAE,SAAS,EAAE,CAAC;IAC/B,CAAC,CAAC;IACF,MAAM,KAAK,GAAG,6BAA6B,CAAC,KAAK,CAAC,CAAC;IAEnD,oBAAoB,CAAC,GAAG,EAAE,cAAc,CAAC,CAAC;IAC1C,oBAAoB,CAAC,GAAG,EAAE,KAAK,CAAC,CAAC;IACjC,kBAAkB,CAAC,GAAG,EAAE,KAAK,CAAC,CAAC;IAC/B,sBAAsB,CAAC,GAAG,EAAE,KAAK,CAAC,CAAC;IACnC,yBAAyB,CAAC,GAAG,EAAE,KAAK,CAAC,CAAC;IACtC,mBAAmB,CAAC,GAAG,EAAE,KAAK,EAAE,gBAAuB,CAAC,CAAC;IACzD,iBAAiB,CAAC,GAAG,EAAE,KAAK,EAAE,gBAAgB,EAAE,YAAY,CAAC,CAAC;IAC9D,OAAO,EAAE,GAAG,EAAE,KAAK,EAAE,CAAC;AACxB,CAAC"}
1
+ {"version":3,"file":"app.js","sourceRoot":"","sources":["../src/app.ts"],"names":[],"mappings":"AAAA,OAAO,OAAO,MAAM,SAAS,CAAC;AAC9B,OAAO,EAAE,UAAU,EAAE,MAAM,aAAa,CAAC;AACzC,OAAO,EAAE,MAAM,EAAE,MAAM,2CAA2C,CAAC;AACnE,OAAO,EAAE,6BAA6B,EAAE,MAAM,oDAAoD,CAAC;AACnG,OAAO,EAAE,WAAW,EAAE,MAAM,cAAc,CAAC;AAC3C,OAAO,EAAE,YAAY,EAAE,MAAM,wBAAwB,CAAC;AACtD,OAAO,EAAE,8BAA8B,EAAE,MAAM,0BAA0B,CAAC;AAC1E,OAAO,EAAE,6BAA6B,EAAE,MAAM,yBAAyB,CAAC;AACxE,OAAO,EAAE,oBAAoB,EAAE,MAAM,sBAAsB,CAAC;AAC5D,OAAO,EAAE,kBAAkB,EAAE,MAAM,kBAAkB,CAAC;AACtD,OAAO,EAAE,sBAAsB,EAAE,MAAM,sBAAsB,CAAC;AAC9D,OAAO,EAAE,yBAAyB,EAAE,MAAM,0BAA0B,CAAC;AACrE,OAAO,EAAE,mBAAmB,EAAE,MAAM,mBAAmB,CAAC;AACxD,OAAO,EAAE,iBAAiB,EAAE,MAAM,iBAAiB,CAAC;AACpD,OAAO,EAAE,cAAc,EAAE,oBAAoB,EAAE,MAAM,oBAAoB,CAAC;AAE1E,MAAM,UAAU,SAAS,CAAC,UAA+B,EAAE;IACzD,MAAM,KAAK,GAAG,IAAI,WAAW,CAAC,OAAO,CAAC,MAAM,IAAI,OAAO,CAAC,GAAG,CAAC,cAAc,IAAI,gBAAgB,CAAC,CAAC;IAChG,MAAM,gBAAgB,GAAG,UAAU,EAAE,CAAC;IACtC,MAAM,YAAY,GAAG,IAAI,YAAY,EAAE,CAAC;IACxC,MAAM,GAAG,GAAG,OAAO,CAAC,EAAE,MAAM,EAAE,IAAI,EAAE,CAAC,CAAC;IACtC,MAAM,gBAAgB,GAAG,KAAK,IAAI,EAAE;QAClC,MAAM,MAAM,GAAG,IAAI,MAAM,CAAC,EAAE,IAAI,EAAE,kBAAkB,EAAE,OAAO,EAAE,OAAO,EAAE,CAAC,CAAC;QAC1E,MAAM,SAAS,GAAG,IAAI,6BAA6B,CAAC,IAAI,GAAG,CAAC,oBAAoB,OAAO,CAAC,GAAG,CAAC,WAAW,IAAI,IAAI,MAAM,CAAC,EAAE,EAAE,WAAW,EAAE,EAAE,OAAO,EAAE,EAAE,uBAAuB,EAAE,gBAAgB,EAAE,EAAE,EAAE,CAAC,CAAC;QACrM,MAAM,MAAM,CAAC,OAAO,CAAC,SAAS,CAAC,CAAC;QAChC,OAAO,EAAE,MAAM,EAAE,SAAS,EAAE,CAAC;IAC/B,CAAC,CAAC;IACF,MAAM,KAAK,GAAG,6BAA6B,CAAC,KAAK,CAAC,CAAC;IACnD,MAAM,MAAM,GAAG,8BAA8B,CAAC,KAAK,CAAC,CAAC;IAErD,oBAAoB,CAAC,GAAG,EAAE,cAAc,CAAC,CAAC;IAC1C,oBAAoB,CAAC,GAAG,EAAE,KAAK,CAAC,CAAC;IACjC,kBAAkB,CAAC,GAAG,EAAE,KAAK,CAAC,CAAC;IAC/B,sBAAsB,CAAC,GAAG,EAAE,KAAK,CAAC,CAAC;IACnC,yBAAyB,CAAC,GAAG,EAAE,KAAK,EAAE,MAAM,CAAC,CAAC;IAC9C,mBAAmB,CAAC,GAAG,EAAE,KAAK,EAAE,gBAAuB,CAAC,CAAC;IACzD,iBAAiB,CAAC,GAAG,EAAE,KAAK,EAAE,gBAAgB,EAAE,YAAY,CAAC,CAAC;IAC9D,OAAO,EAAE,GAAG,EAAE,KAAK,EAAE,CAAC;AACxB,CAAC"}
@@ -0,0 +1,107 @@
1
+ import { mkdir, readFile, writeFile } from "node:fs/promises";
2
+ import { homedir } from "node:os";
3
+ import { dirname, join } from "node:path";
4
+ const claudeConfigDir = process.env.CLAUDE_CONFIG_DIR ?? join(homedir(), ".claude");
5
+ const claudeMcpConfigPath = process.env.CLAUDE_CONFIG_DIR
6
+ ? join(claudeConfigDir, ".claude.json")
7
+ : join(homedir(), ".claude.json");
8
+ const claudeAgentsPath = join(claudeConfigDir, "CLAUDE.md");
9
+ const claudeGuidanceStart = "<!-- memory-one:claude:start -->";
10
+ const claudeGuidanceEnd = "<!-- memory-one:claude:end -->";
11
+ const claudeGuidance = `${claudeGuidanceStart}
12
+ ## Memory One
13
+
14
+ Before starting any new user task, call the Memory One MCP tool \`memory-get-context\` once to retrieve persistent context.
15
+
16
+ - When working in a project, resolve the Git repository root and pass its absolute directory path as \`scope\`. Use the same scope when storing project-specific memory; omit \`scope\` for general preferences and knowledge.
17
+ - Apply the returned persistent preferences and project conventions before planning, answering, editing files, or calling task-specific tools.
18
+ - If a \`memory-get-context\` result already exists in the current task conversation, do not call it again; use \`memory-search\` when a specific historical preference, decision, fact, or project convention is needed.
19
+ - Only save a memory when the user explicitly asks to remember or save it; if a durable preference, decision, project convention, personal fact, or correction seems worth keeping but the user did not ask, ask for confirmation instead. Use \`memory_update\` only after the user explicitly asks to change an existing memory. Do not save clearly transient, one-off details.
20
+ - Before storing, prefer updating or superseding a similar memory instead of creating a near-duplicate.
21
+ - Do not skip retrieval merely because the task appears self-contained.
22
+ ${claudeGuidanceEnd}`;
23
+ async function readClaudeAgents() {
24
+ try {
25
+ return await readFile(claudeAgentsPath, "utf8");
26
+ }
27
+ catch (error) {
28
+ if (error.code === "ENOENT")
29
+ return "";
30
+ throw error;
31
+ }
32
+ }
33
+ function removeManagedClaudeGuidance(content) {
34
+ const start = content.indexOf(claudeGuidanceStart);
35
+ const end = content.indexOf(claudeGuidanceEnd, start + claudeGuidanceStart.length);
36
+ if (start < 0 || end < 0)
37
+ return content;
38
+ const before = content.slice(0, start).trimEnd();
39
+ const after = content.slice(end + claudeGuidanceEnd.length).trimStart();
40
+ return [before, after].filter(Boolean).join("\n\n");
41
+ }
42
+ async function readClaudeConfig() {
43
+ try {
44
+ const content = await readFile(claudeMcpConfigPath, "utf8");
45
+ return { content, config: JSON.parse(content) };
46
+ }
47
+ catch (error) {
48
+ if (error.code === "ENOENT")
49
+ return { content: "", config: {} };
50
+ throw error;
51
+ }
52
+ }
53
+ export function createClaudeIntegrationService(store) {
54
+ const getClaudeIntegration = async () => {
55
+ const content = await readClaudeAgents();
56
+ const start = content.indexOf(claudeGuidanceStart);
57
+ const end = content.indexOf(claudeGuidanceEnd, start + claudeGuidanceStart.length);
58
+ const installed = start >= 0 && end >= 0;
59
+ const managed = installed ? content.slice(start, end + claudeGuidanceEnd.length) : "";
60
+ return { path: claudeAgentsPath, status: installed ? managed === claudeGuidance ? "configured" : "update_available" : "not_configured" };
61
+ };
62
+ const installClaudeIntegration = async () => {
63
+ const content = await readClaudeAgents();
64
+ const preserved = removeManagedClaudeGuidance(content);
65
+ await mkdir(dirname(claudeAgentsPath), { recursive: true });
66
+ await writeFile(claudeAgentsPath, `${preserved ? `${preserved}\n\n` : ""}${claudeGuidance}\n`, "utf8");
67
+ return getClaudeIntegration();
68
+ };
69
+ const getClaudeMcpIntegration = async (expectedEndpoint) => {
70
+ const { content, config } = await readClaudeConfig();
71
+ const server = config.mcpServers?.["memory-one"];
72
+ const endpoint = server?.url ?? null;
73
+ const authorization = server?.headers?.Authorization ?? server?.headers?.authorization;
74
+ const key = authorization?.match(/^Bearer\s+(.+)$/i)?.[1]?.trim();
75
+ const keyRecord = key ? store.verifyMcpKey(key) : null;
76
+ const authRequired = store.getMcpConfig().use_bearer_key;
77
+ const configured = endpoint === expectedEndpoint && (authRequired ? Boolean(keyRecord) : !authorization);
78
+ return {
79
+ path: claudeMcpConfigPath,
80
+ detected: Boolean(content),
81
+ endpoint,
82
+ auth_required: authRequired,
83
+ configured_key_id: keyRecord?.id ?? null,
84
+ status: configured ? "configured" : server ? "update_available" : "not_configured",
85
+ };
86
+ };
87
+ const installClaudeMcpIntegration = async (endpoint, keyId) => {
88
+ const authRequired = store.getMcpConfig().use_bearer_key;
89
+ const key = authRequired && keyId ? store.getMcpKey(keyId) : null;
90
+ if (authRequired && (!key?.secret || key.revoked_at))
91
+ throw new Error("mcp_key_not_found");
92
+ const { config } = await readClaudeConfig();
93
+ config.mcpServers = {
94
+ ...(config.mcpServers ?? {}),
95
+ "memory-one": {
96
+ type: "http",
97
+ url: endpoint,
98
+ ...(authRequired ? { headers: { Authorization: `Bearer ${key.secret}` } } : {}),
99
+ },
100
+ };
101
+ await mkdir(dirname(claudeMcpConfigPath), { recursive: true });
102
+ await writeFile(claudeMcpConfigPath, `${JSON.stringify(config, null, 2)}\n`, "utf8");
103
+ return getClaudeMcpIntegration(endpoint);
104
+ };
105
+ return { getClaudeIntegration, installClaudeIntegration, getClaudeMcpIntegration, installClaudeMcpIntegration };
106
+ }
107
+ //# sourceMappingURL=claude.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"claude.js","sourceRoot":"","sources":["../../src/integrations/claude.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,EAAE,QAAQ,EAAE,SAAS,EAAE,MAAM,kBAAkB,CAAC;AAC9D,OAAO,EAAE,OAAO,EAAE,MAAM,SAAS,CAAC;AAClC,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC;AAG1C,MAAM,eAAe,GAAG,OAAO,CAAC,GAAG,CAAC,iBAAiB,IAAI,IAAI,CAAC,OAAO,EAAE,EAAE,SAAS,CAAC,CAAC;AACpF,MAAM,mBAAmB,GAAG,OAAO,CAAC,GAAG,CAAC,iBAAiB;IACvD,CAAC,CAAC,IAAI,CAAC,eAAe,EAAE,cAAc,CAAC;IACvC,CAAC,CAAC,IAAI,CAAC,OAAO,EAAE,EAAE,cAAc,CAAC,CAAC;AACpC,MAAM,gBAAgB,GAAG,IAAI,CAAC,eAAe,EAAE,WAAW,CAAC,CAAC;AAC5D,MAAM,mBAAmB,GAAG,kCAAkC,CAAC;AAC/D,MAAM,iBAAiB,GAAG,gCAAgC,CAAC;AAC3D,MAAM,cAAc,GAAG,GAAG,mBAAmB;;;;;;;;;;;EAW3C,iBAAiB,EAAE,CAAC;AAOtB,KAAK,UAAU,gBAAgB;IAC7B,IAAI,CAAC;QACH,OAAO,MAAM,QAAQ,CAAC,gBAAgB,EAAE,MAAM,CAAC,CAAC;IAClD,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,IAAK,KAA+B,CAAC,IAAI,KAAK,QAAQ;YAAE,OAAO,EAAE,CAAC;QAClE,MAAM,KAAK,CAAC;IACd,CAAC;AACH,CAAC;AAED,SAAS,2BAA2B,CAAC,OAAe;IAClD,MAAM,KAAK,GAAG,OAAO,CAAC,OAAO,CAAC,mBAAmB,CAAC,CAAC;IACnD,MAAM,GAAG,GAAG,OAAO,CAAC,OAAO,CAAC,iBAAiB,EAAE,KAAK,GAAG,mBAAmB,CAAC,MAAM,CAAC,CAAC;IACnF,IAAI,KAAK,GAAG,CAAC,IAAI,GAAG,GAAG,CAAC;QAAE,OAAO,OAAO,CAAC;IACzC,MAAM,MAAM,GAAG,OAAO,CAAC,KAAK,CAAC,CAAC,EAAE,KAAK,CAAC,CAAC,OAAO,EAAE,CAAC;IACjD,MAAM,KAAK,GAAG,OAAO,CAAC,KAAK,CAAC,GAAG,GAAG,iBAAiB,CAAC,MAAM,CAAC,CAAC,SAAS,EAAE,CAAC;IACxE,OAAO,CAAC,MAAM,EAAE,KAAK,CAAC,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;AACtD,CAAC;AAED,KAAK,UAAU,gBAAgB;IAC7B,IAAI,CAAC;QACH,MAAM,OAAO,GAAG,MAAM,QAAQ,CAAC,mBAAmB,EAAE,MAAM,CAAC,CAAC;QAC5D,OAAO,EAAE,OAAO,EAAE,MAAM,EAAE,IAAI,CAAC,KAAK,CAAC,OAAO,CAAoB,EAAE,CAAC;IACrE,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,IAAK,KAA+B,CAAC,IAAI,KAAK,QAAQ;YAAE,OAAO,EAAE,OAAO,EAAE,EAAE,EAAE,MAAM,EAAE,EAAE,EAAE,CAAC;QAC3F,MAAM,KAAK,CAAC;IACd,CAAC;AACH,CAAC;AAED,MAAM,UAAU,8BAA8B,CAAC,KAAkB;IAC/D,MAAM,oBAAoB,GAAG,KAAK,IAAI,EAAE;QACtC,MAAM,OAAO,GAAG,MAAM,gBAAgB,EAAE,CAAC;QACzC,MAAM,KAAK,GAAG,OAAO,CAAC,OAAO,CAAC,mBAAmB,CAAC,CAAC;QACnD,MAAM,GAAG,GAAG,OAAO,CAAC,OAAO,CAAC,iBAAiB,EAAE,KAAK,GAAG,mBAAmB,CAAC,MAAM,CAAC,CAAC;QACnF,MAAM,SAAS,GAAG,KAAK,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC,CAAC;QACzC,MAAM,OAAO,GAAG,SAAS,CAAC,CAAC,CAAC,OAAO,CAAC,KAAK,CAAC,KAAK,EAAE,GAAG,GAAG,iBAAiB,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC;QACtF,OAAO,EAAE,IAAI,EAAE,gBAAgB,EAAE,MAAM,EAAE,SAAS,CAAC,CAAC,CAAC,OAAO,KAAK,cAAc,CAAC,CAAC,CAAC,YAAY,CAAC,CAAC,CAAC,kBAAkB,CAAC,CAAC,CAAC,gBAAgB,EAAE,CAAC;IAC3I,CAAC,CAAC;IAEF,MAAM,wBAAwB,GAAG,KAAK,IAAI,EAAE;QAC1C,MAAM,OAAO,GAAG,MAAM,gBAAgB,EAAE,CAAC;QACzC,MAAM,SAAS,GAAG,2BAA2B,CAAC,OAAO,CAAC,CAAC;QACvD,MAAM,KAAK,CAAC,OAAO,CAAC,gBAAgB,CAAC,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;QAC5D,MAAM,SAAS,CAAC,gBAAgB,EAAE,GAAG,SAAS,CAAC,CAAC,CAAC,GAAG,SAAS,MAAM,CAAC,CAAC,CAAC,EAAE,GAAG,cAAc,IAAI,EAAE,MAAM,CAAC,CAAC;QACvG,OAAO,oBAAoB,EAAE,CAAC;IAChC,CAAC,CAAC;IAEF,MAAM,uBAAuB,GAAG,KAAK,EAAE,gBAAwB,EAAE,EAAE;QACjE,MAAM,EAAE,OAAO,EAAE,MAAM,EAAE,GAAG,MAAM,gBAAgB,EAAE,CAAC;QACrD,MAAM,MAAM,GAAG,MAAM,CAAC,UAAU,EAAE,CAAC,YAAY,CAAC,CAAC;QACjD,MAAM,QAAQ,GAAG,MAAM,EAAE,GAAG,IAAI,IAAI,CAAC;QACrC,MAAM,aAAa,GAAG,MAAM,EAAE,OAAO,EAAE,aAAa,IAAI,MAAM,EAAE,OAAO,EAAE,aAAa,CAAC;QACvF,MAAM,GAAG,GAAG,aAAa,EAAE,KAAK,CAAC,kBAAkB,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,IAAI,EAAE,CAAC;QAClE,MAAM,SAAS,GAAG,GAAG,CAAC,CAAC,CAAC,KAAK,CAAC,YAAY,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC;QACvD,MAAM,YAAY,GAAG,KAAK,CAAC,YAAY,EAAE,CAAC,cAAc,CAAC;QACzD,MAAM,UAAU,GAAG,QAAQ,KAAK,gBAAgB,IAAI,CAAC,YAAY,CAAC,CAAC,CAAC,OAAO,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,CAAC,aAAa,CAAC,CAAC;QACzG,OAAO;YACL,IAAI,EAAE,mBAAmB;YACzB,QAAQ,EAAE,OAAO,CAAC,OAAO,CAAC;YAC1B,QAAQ;YACR,aAAa,EAAE,YAAY;YAC3B,iBAAiB,EAAE,SAAS,EAAE,EAAE,IAAI,IAAI;YACxC,MAAM,EAAE,UAAU,CAAC,CAAC,CAAC,YAAY,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,kBAAkB,CAAC,CAAC,CAAC,gBAAgB;SACnF,CAAC;IACJ,CAAC,CAAC;IAEF,MAAM,2BAA2B,GAAG,KAAK,EAAE,QAAgB,EAAE,KAAc,EAAE,EAAE;QAC7E,MAAM,YAAY,GAAG,KAAK,CAAC,YAAY,EAAE,CAAC,cAAc,CAAC;QACzD,MAAM,GAAG,GAAG,YAAY,IAAI,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,SAAS,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC;QAClE,IAAI,YAAY,IAAI,CAAC,CAAC,GAAG,EAAE,MAAM,IAAI,GAAG,CAAC,UAAU,CAAC;YAAE,MAAM,IAAI,KAAK,CAAC,mBAAmB,CAAC,CAAC;QAC3F,MAAM,EAAE,MAAM,EAAE,GAAG,MAAM,gBAAgB,EAAE,CAAC;QAC5C,MAAM,CAAC,UAAU,GAAG;YAClB,GAAG,CAAC,MAAM,CAAC,UAAU,IAAI,EAAE,CAAC;YAC5B,YAAY,EAAE;gBACZ,IAAI,EAAE,MAAM;gBACZ,GAAG,EAAE,QAAQ;gBACb,GAAG,CAAC,YAAY,CAAC,CAAC,CAAC,EAAE,OAAO,EAAE,EAAE,aAAa,EAAE,UAAU,GAAI,CAAC,MAAM,EAAE,EAAE,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;aACjF;SACF,CAAC;QACF,MAAM,KAAK,CAAC,OAAO,CAAC,mBAAmB,CAAC,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;QAC/D,MAAM,SAAS,CAAC,mBAAmB,EAAE,GAAG,IAAI,CAAC,SAAS,CAAC,MAAM,EAAE,IAAI,EAAE,CAAC,CAAC,IAAI,EAAE,MAAM,CAAC,CAAC;QACrF,OAAO,uBAAuB,CAAC,QAAQ,CAAC,CAAC;IAC3C,CAAC,CAAC;IAEF,OAAO,EAAE,oBAAoB,EAAE,wBAAwB,EAAE,uBAAuB,EAAE,2BAA2B,EAAE,CAAC;AAClH,CAAC"}
@@ -1,4 +1,4 @@
1
- export function registerIntegrationRoutes(app, codex) {
1
+ export function registerIntegrationRoutes(app, codex, claude) {
2
2
  app.get("/api/integrations/codex", async () => codex.getCodexIntegration());
3
3
  app.post("/api/integrations/codex/install", async () => codex.installCodexIntegration());
4
4
  app.get("/api/integrations/codex/mcp", async (request) => {
@@ -18,5 +18,24 @@ export function registerIntegrationRoutes(app, codex) {
18
18
  throw error;
19
19
  }
20
20
  });
21
+ app.get("/api/integrations/claude", async () => claude.getClaudeIntegration());
22
+ app.post("/api/integrations/claude/install", async () => claude.installClaudeIntegration());
23
+ app.get("/api/integrations/claude/mcp", async (request) => {
24
+ const { endpoint = "" } = request.query;
25
+ return claude.getClaudeMcpIntegration(endpoint);
26
+ });
27
+ app.post("/api/integrations/claude/mcp/install", async (request, reply) => {
28
+ const body = request.body ?? {};
29
+ if (!body.endpoint)
30
+ return reply.code(422).send({ detail: "claude_mcp_config_required" });
31
+ try {
32
+ return await claude.installClaudeMcpIntegration(body.endpoint, body.key_id);
33
+ }
34
+ catch (error) {
35
+ if (error instanceof Error && error.message === "mcp_key_not_found")
36
+ return reply.code(404).send({ detail: error.message });
37
+ throw error;
38
+ }
39
+ });
21
40
  }
22
41
  //# sourceMappingURL=integrations.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"integrations.js","sourceRoot":"","sources":["../../src/routes/integrations.ts"],"names":[],"mappings":"AAGA,MAAM,UAAU,yBAAyB,CAAC,GAAoB,EAAE,KAA8B;IAC5F,GAAG,CAAC,GAAG,CAAC,yBAAyB,EAAE,KAAK,IAAI,EAAE,CAAC,KAAK,CAAC,mBAAmB,EAAE,CAAC,CAAC;IAC5E,GAAG,CAAC,IAAI,CAAC,iCAAiC,EAAE,KAAK,IAAI,EAAE,CAAC,KAAK,CAAC,uBAAuB,EAAE,CAAC,CAAC;IACzF,GAAG,CAAC,GAAG,CAAC,6BAA6B,EAAE,KAAK,EAAE,OAAO,EAAE,EAAE;QACvD,MAAM,EAAE,QAAQ,GAAG,EAAE,EAAE,GAAG,OAAO,CAAC,KAA8B,CAAC;QACjE,OAAO,KAAK,CAAC,sBAAsB,CAAC,QAAQ,CAAC,CAAC;IAChD,CAAC,CAAC,CAAC;IACH,GAAG,CAAC,IAAI,CAAC,qCAAqC,EAAE,KAAK,EAAE,OAAO,EAAE,KAAK,EAAE,EAAE;QACvE,MAAM,IAAI,GAAI,OAAO,CAAC,IAA2D,IAAI,EAAE,CAAC;QACxF,IAAI,CAAC,IAAI,CAAC,QAAQ;YAAE,OAAO,KAAK,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,EAAE,MAAM,EAAE,2BAA2B,EAAE,CAAC,CAAC;QACzF,IAAI,CAAC;YACH,OAAO,MAAM,KAAK,CAAC,0BAA0B,CAAC,IAAI,CAAC,QAAQ,EAAE,IAAI,CAAC,MAAM,CAAC,CAAC;QAC5E,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,IAAI,KAAK,YAAY,KAAK,IAAI,KAAK,CAAC,OAAO,KAAK,mBAAmB;gBAAE,OAAO,KAAK,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,EAAE,MAAM,EAAE,KAAK,CAAC,OAAO,EAAE,CAAC,CAAC;YAC5H,MAAM,KAAK,CAAC;QACd,CAAC;IACH,CAAC,CAAC,CAAC;AACL,CAAC"}
1
+ {"version":3,"file":"integrations.js","sourceRoot":"","sources":["../../src/routes/integrations.ts"],"names":[],"mappings":"AAIA,MAAM,UAAU,yBAAyB,CAAC,GAAoB,EAAE,KAA8B,EAAE,MAAgC;IAC9H,GAAG,CAAC,GAAG,CAAC,yBAAyB,EAAE,KAAK,IAAI,EAAE,CAAC,KAAK,CAAC,mBAAmB,EAAE,CAAC,CAAC;IAC5E,GAAG,CAAC,IAAI,CAAC,iCAAiC,EAAE,KAAK,IAAI,EAAE,CAAC,KAAK,CAAC,uBAAuB,EAAE,CAAC,CAAC;IACzF,GAAG,CAAC,GAAG,CAAC,6BAA6B,EAAE,KAAK,EAAE,OAAO,EAAE,EAAE;QACvD,MAAM,EAAE,QAAQ,GAAG,EAAE,EAAE,GAAG,OAAO,CAAC,KAA8B,CAAC;QACjE,OAAO,KAAK,CAAC,sBAAsB,CAAC,QAAQ,CAAC,CAAC;IAChD,CAAC,CAAC,CAAC;IACH,GAAG,CAAC,IAAI,CAAC,qCAAqC,EAAE,KAAK,EAAE,OAAO,EAAE,KAAK,EAAE,EAAE;QACvE,MAAM,IAAI,GAAI,OAAO,CAAC,IAA2D,IAAI,EAAE,CAAC;QACxF,IAAI,CAAC,IAAI,CAAC,QAAQ;YAAE,OAAO,KAAK,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,EAAE,MAAM,EAAE,2BAA2B,EAAE,CAAC,CAAC;QACzF,IAAI,CAAC;YACH,OAAO,MAAM,KAAK,CAAC,0BAA0B,CAAC,IAAI,CAAC,QAAQ,EAAE,IAAI,CAAC,MAAM,CAAC,CAAC;QAC5E,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,IAAI,KAAK,YAAY,KAAK,IAAI,KAAK,CAAC,OAAO,KAAK,mBAAmB;gBAAE,OAAO,KAAK,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,EAAE,MAAM,EAAE,KAAK,CAAC,OAAO,EAAE,CAAC,CAAC;YAC5H,MAAM,KAAK,CAAC;QACd,CAAC;IACH,CAAC,CAAC,CAAC;IAEH,GAAG,CAAC,GAAG,CAAC,0BAA0B,EAAE,KAAK,IAAI,EAAE,CAAC,MAAM,CAAC,oBAAoB,EAAE,CAAC,CAAC;IAC/E,GAAG,CAAC,IAAI,CAAC,kCAAkC,EAAE,KAAK,IAAI,EAAE,CAAC,MAAM,CAAC,wBAAwB,EAAE,CAAC,CAAC;IAC5F,GAAG,CAAC,GAAG,CAAC,8BAA8B,EAAE,KAAK,EAAE,OAAO,EAAE,EAAE;QACxD,MAAM,EAAE,QAAQ,GAAG,EAAE,EAAE,GAAG,OAAO,CAAC,KAA8B,CAAC;QACjE,OAAO,MAAM,CAAC,uBAAuB,CAAC,QAAQ,CAAC,CAAC;IAClD,CAAC,CAAC,CAAC;IACH,GAAG,CAAC,IAAI,CAAC,sCAAsC,EAAE,KAAK,EAAE,OAAO,EAAE,KAAK,EAAE,EAAE;QACxE,MAAM,IAAI,GAAI,OAAO,CAAC,IAA2D,IAAI,EAAE,CAAC;QACxF,IAAI,CAAC,IAAI,CAAC,QAAQ;YAAE,OAAO,KAAK,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,EAAE,MAAM,EAAE,4BAA4B,EAAE,CAAC,CAAC;QAC1F,IAAI,CAAC;YACH,OAAO,MAAM,MAAM,CAAC,2BAA2B,CAAC,IAAI,CAAC,QAAQ,EAAE,IAAI,CAAC,MAAM,CAAC,CAAC;QAC9E,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,IAAI,KAAK,YAAY,KAAK,IAAI,KAAK,CAAC,OAAO,KAAK,mBAAmB;gBAAE,OAAO,KAAK,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,EAAE,MAAM,EAAE,KAAK,CAAC,OAAO,EAAE,CAAC,CAAC;YAC5H,MAAM,KAAK,CAAC;QACd,CAAC;IACH,CAAC,CAAC,CAAC;AACL,CAAC"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@ccjr1120/memory-one",
3
- "version": "0.1.13",
3
+ "version": "0.1.14",
4
4
  "description": "A local HTTP MCP service for personal agent memory",
5
5
  "type": "module",
6
6
  "bin": {
@@ -1 +1 @@
1
- import{r,S as d,E as p,j as E,c as f}from"./index-DWgbu5Rx.js";var j=({code:i,language:e,maxHeight:o,raw:a,className:u,startLine:m,lineNumbers:n,...h})=>{let{shikiTheme:l}=r.useContext(d),t=p(),[c,s]=r.useState(a);return r.useEffect(()=>{if(!t){s(a);return}let g=t.highlight({code:i,language:e,themes:l},x=>{s(x)});g&&s(g)},[i,e,l,t,a]),E.jsx(f,{className:u,language:e,lineNumbers:n,maxHeight:o,result:c,startLine:m,...h})};export{j as HighlightedCodeBlockBody};
1
+ import{r,S as d,E as p,j as E,c as f}from"./index-BA7CLyps.js";var j=({code:i,language:e,maxHeight:o,raw:a,className:u,startLine:m,lineNumbers:n,...h})=>{let{shikiTheme:l}=r.useContext(d),t=p(),[c,s]=r.useState(a);return r.useEffect(()=>{if(!t){s(a);return}let g=t.highlight({code:i,language:e,themes:l},x=>{s(x)});g&&s(g)},[i,e,l,t,a]),E.jsx(f,{className:u,language:e,lineNumbers:n,maxHeight:o,result:c,startLine:m,...h})};export{j as HighlightedCodeBlockBody};