@ccjr1120/memory-one 0.1.12 → 0.1.13

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.
Files changed (52) hide show
  1. package/README.md +15 -7
  2. package/dist/agent/providers.js +113 -0
  3. package/dist/agent/providers.js.map +1 -0
  4. package/dist/agent/run.js +98 -0
  5. package/dist/agent/run.js.map +1 -0
  6. package/dist/agent/types.js +2 -0
  7. package/dist/agent/types.js.map +1 -0
  8. package/dist/api/client.js +26 -0
  9. package/dist/api/client.js.map +1 -0
  10. package/dist/app.js +36 -0
  11. package/dist/app.js.map +1 -0
  12. package/dist/integrations/codex.js +143 -0
  13. package/dist/integrations/codex.js.map +1 -0
  14. package/dist/lib/copy.js +203 -0
  15. package/dist/lib/copy.js.map +1 -0
  16. package/dist/lib/format.js +11 -0
  17. package/dist/lib/format.js.map +1 -0
  18. package/dist/lib/kinds.js +5 -0
  19. package/dist/lib/kinds.js.map +1 -0
  20. package/dist/lib/views.js +31 -0
  21. package/dist/lib/views.js.map +1 -0
  22. package/dist/mcp/context-cache.js +14 -0
  23. package/dist/mcp/context-cache.js.map +1 -0
  24. package/dist/mcp/server.js +80 -0
  25. package/dist/mcp/server.js.map +1 -0
  26. package/dist/routes/agent.js +268 -0
  27. package/dist/routes/agent.js.map +1 -0
  28. package/dist/routes/data.js +18 -0
  29. package/dist/routes/data.js.map +1 -0
  30. package/dist/routes/integrations.js +22 -0
  31. package/dist/routes/integrations.js.map +1 -0
  32. package/dist/routes/mcp.js +22 -0
  33. package/dist/routes/mcp.js.map +1 -0
  34. package/dist/routes/memories.js +46 -0
  35. package/dist/routes/memories.js.map +1 -0
  36. package/dist/routes/settings.js +36 -0
  37. package/dist/routes/settings.js.map +1 -0
  38. package/dist/routes/system.js +25 -0
  39. package/dist/routes/system.js.map +1 -0
  40. package/dist/server.js +2 -762
  41. package/dist/server.js.map +1 -1
  42. package/dist/storage.js +218 -11
  43. package/dist/storage.js.map +1 -1
  44. package/dist/types.js +2 -0
  45. package/dist/types.js.map +1 -0
  46. package/package.json +4 -6
  47. package/public/assets/{highlighted-body-KPVGNVTW-DUlL1c8y.js → highlighted-body-KPVGNVTW-jxw5D7vG.js} +1 -1
  48. package/public/assets/index-C3mrwXZF.css +1 -0
  49. package/public/assets/index-DWgbu5Rx.js +190 -0
  50. package/public/index.html +2 -2
  51. package/public/assets/index-Corxd8nB.css +0 -1
  52. package/public/assets/index-KtcznaoB.js +0 -190
@@ -0,0 +1,203 @@
1
+ export const ui = {
2
+ zh: {
3
+ brandSubtitle: "个人记忆库",
4
+ workspace: "工作区",
5
+ collections: "集合",
6
+ connect: "连接",
7
+ navAll: "全部记忆",
8
+ navTimeline: "时间线",
9
+ navPreferences: "偏好与习惯",
10
+ navScopes: "Scope 分类",
11
+ navTags: "标签",
12
+ navMcp: "MCP 服务",
13
+ navSettings: "设置",
14
+ localStorage: "本地存储",
15
+ memories: "MEMORIES",
16
+ scopes: "SCOPES",
17
+ scopesNote: "分类数量",
18
+ lastSync: "LAST SYNC",
19
+ justNow: "刚刚",
20
+ localDatabase: "本地数据库",
21
+ localOnly: "完全本地",
22
+ localOnlyDesc: "你的记忆只留在这台设备",
23
+ newMemory: "新建记忆",
24
+ search: "搜索记忆...",
25
+ allScopes: "所有 Scope",
26
+ reading: "读取中...",
27
+ countSuffix: "条记忆",
28
+ sortRecent: "按最近更新排序",
29
+ sortTimeline: "按发生时间排序",
30
+ sortGrouped: "按 Scope 分组",
31
+ globalMemory: "全局记忆",
32
+ emptyMatch: "这里还没有匹配的记忆",
33
+ emptyHelp: "试试换一个关键词或调整筛选条件。",
34
+ loadFailed: "记忆读取失败",
35
+ retry: "重试",
36
+ noTags: "暂无标签",
37
+ settingsManaged: "设置已由本地配置管理",
38
+ detailEyebrow: "记忆详情",
39
+ close: "关闭",
40
+ detailEmpty: "选择一条记忆",
41
+ detailEmptyDesc: "查看完整内容、来源和元数据",
42
+ confidence: "置信度",
43
+ created: "创建时间",
44
+ updated: "最后更新",
45
+ source: "来源",
46
+ agentWritten: "Agent 写入",
47
+ scope: "Scope",
48
+ signals: "信号",
49
+ importance: "重要性",
50
+ recallCount: "召回次数",
51
+ times: "次",
52
+ original: "查看原始记录",
53
+ switchLanguage: "切换到 English",
54
+ newMemoryEyebrow: "新建记忆",
55
+ composerTitle: "保存一条记忆",
56
+ content: "记忆内容",
57
+ contentPlaceholder: "例如:用户偏好使用简洁的工具界面。",
58
+ type: "类型",
59
+ scopeOptional: "可选,例如:/path/to/project",
60
+ sourcePlaceholder: "例如:Claude Code / 手动添加",
61
+ writeLocal: "写入本地 SQLite",
62
+ preferenceRecall: "召回方式",
63
+ persistentPreference: "常驻偏好",
64
+ conditionalPreference: "条件偏好",
65
+ persistentPreferenceHint: "每次任务开始时固定返回",
66
+ cancel: "取消",
67
+ save: "保存记忆",
68
+ languageCode: "EN",
69
+ timelineItems: "条",
70
+ languageName: "中文",
71
+ languageTitle: "界面语言",
72
+ languageDescription: "选择工作台使用的语言。",
73
+ languageZh: "中文",
74
+ languageEn: "English",
75
+ languageSaved: "语言已更新",
76
+ languageSaveFailed: "语言更新失败,请稍后重试。",
77
+ backupEyebrow: "数据备份",
78
+ backupTitle: "导出与导入",
79
+ backupDescription: "导出记忆与安全配置,或从 JSON 备份恢复。替换模式会覆盖当前记忆。",
80
+ exportBackup: "导出 JSON",
81
+ importMerge: "合并导入",
82
+ importReplace: "替换导入",
83
+ replaceConfirm: "替换导入会删除当前所有记忆,并使用备份内容替代。确定继续吗?",
84
+ backupImported: (imported, skipped) => `导入 ${imported} 条记忆,跳过 ${skipped} 条。`,
85
+ backupFailed: "备份操作失败,请检查文件后重试。",
86
+ recentRecalls: "最近召回",
87
+ setupTitle: "选择语言",
88
+ setupDescription: "选择工作台使用的语言,之后可在设置中修改。",
89
+ continue: "继续",
90
+ savedNote: "已保存",
91
+ savedCount: "已保存",
92
+ openMenu: "打开菜单",
93
+ toggleLight: "切换浅色模式",
94
+ toggleDark: "切换深色模式",
95
+ storageNote: "记忆仅保存在当前设备。",
96
+ savedMemories: "已保存",
97
+ countMemories: "条记忆",
98
+ recallTimes: "次召回",
99
+ mcpKicker: "Agent 集成",
100
+ mcpTitle: "连接你的 Agent",
101
+ mcpDescription: "Memory One 通过 Streamable HTTP 提供记忆工具。创建一个按工具授权的 Key 后,把带 Authorization Header 的配置加入 MCP 客户端。",
102
+ mcpOnline: "HTTP 在线",
103
+ mcpEndpoint: "服务地址",
104
+ mcpCopyEndpoint: "复制服务地址",
105
+ transport: "传输方式",
106
+ auth: "认证",
107
+ noAuth: "必须使用 Bearer Key",
108
+ category: "记忆分类",
109
+ categoryValue: "全局 / 可选 scope",
110
+ toolsLabel: "可用工具",
111
+ toolsTitle: "Agent 可以使用的工具",
112
+ toolsCount: "个工具",
113
+ http: "HTTP",
114
+ localMemory: "本地记忆 / 01",
115
+ serverEndpoint: "服务端点",
116
+ versionNotice: (latest, current) => `发现新版本 ${latest},当前版本 ${current}`,
117
+ callCount: "次",
118
+ appearance: "界面显示",
119
+ appearanceEyebrow: "界面显示",
120
+ darkMode: "深色模式",
121
+ darkModeDescription: "在浅色和深色界面之间切换。",
122
+ storageEyebrow: "本地存储",
123
+ agentName: "记忆管家",
124
+ agentDescription: "基于记忆回答你的问题",
125
+ collapse: "收起",
126
+ agentPage: "Agent 页面",
127
+ chat: "对话",
128
+ backToChat: "返回对话",
129
+ configuration: "配置",
130
+ processing: "正在处理",
131
+ readingMemory: "正在读取记忆并生成回复",
132
+ agentPlaceholder: "向记忆管家提问...",
133
+ send: "发送",
134
+ requestFormat: "请求格式",
135
+ chooseRequestFormat: "选择请求格式",
136
+ model: "模型",
137
+ chooseOrEnterModel: "选择或输入模型",
138
+ fetchModels: "获取列表",
139
+ saving: "保存中",
140
+ saved: "已保存",
141
+ saveConfiguration: "保存配置",
142
+ configSaveFailed: "配置保存失败,请稍后重试。",
143
+ missingBaseUrl: "请先填写 Base URL。",
144
+ missingApiKey: "请先完成 Agent 配置。",
145
+ providerRequestFailed: "模型供应商请求失败,请检查供应商、模型和 Base URL。",
146
+ agentRequestFailed: "暂时无法连接记忆管家,请稍后再试。",
147
+ fetchedModels: (count) => `已获取 ${count} 个模型`,
148
+ noModels: "没有可用模型",
149
+ modelListFailed: "模型列表获取失败,请检查配置。",
150
+ welcome: "你好,我是记忆管家。可以帮你搜索、保存、修改、删除记忆,也可以总结你的偏好和特点。",
151
+ suggestionTraits: "总结我的特点",
152
+ suggestionProjects: "搜索最近的项目约定",
153
+ suggestionConcise: "记住我喜欢简洁的界面",
154
+ openAgent: "打开记忆管家",
155
+ agentTabs: "Agent 页面",
156
+ },
157
+ en: {
158
+ brandSubtitle: "Personal memory", workspace: "Workspace", collections: "Collections", connect: "Connect",
159
+ navAll: "All memories", navTimeline: "Timeline", navPreferences: "Preferences", navScopes: "Scopes", navTags: "Tags", navMcp: "MCP service", navSettings: "Settings",
160
+ localStorage: "Local storage", memories: "MEMORIES", scopes: "SCOPES", scopesNote: "Scope count", lastSync: "LAST SYNC", justNow: "Just now", localDatabase: "Local database", localOnly: "Local only", localOnlyDesc: "Your memories stay on this device", newMemory: "New memory", search: "Search memories...", allScopes: "All scopes", reading: "Loading...", countSuffix: " memories", sortRecent: "Sorted by recently updated", sortTimeline: "Sorted by event time", sortGrouped: "Grouped by scope", globalMemory: "Global memories", emptyMatch: "No matching memories", emptyHelp: "Try another search or adjust the filters.", loadFailed: "Could not load memories", retry: "Retry", noTags: "No tags", settingsManaged: "Managed by local settings", detailEyebrow: "Memory details", close: "Close", detailEmpty: "Select a memory", detailEmptyDesc: "View its content and metadata", confidence: "Confidence", created: "Created", updated: "Updated", source: "Source", agentWritten: "Agent", scope: "Scope", signals: "Signals", importance: "Importance", recallCount: "Recalls", times: "times", original: "View original", switchLanguage: "Switch to Chinese", languageCode: "中", timelineItems: "items",
161
+ languageName: "English", languageTitle: "Interface language", languageDescription: "Choose the language used by the workspace.", languageZh: "中文", languageEn: "English", languageSaved: "Language updated", languageSaveFailed: "Could not update language. Try again.", setupTitle: "Choose a language", setupDescription: "Choose a language for the workspace. You can change it later in Settings.", continue: "Continue", savedNote: "Saved", savedCount: "Saved", openMenu: "Open menu", toggleLight: "Switch to light mode", toggleDark: "Switch to dark mode", storageNote: "Memories stay on this device.", savedMemories: "Saved", countMemories: " memories", recallTimes: " recalls", backupEyebrow: "DATA BACKUP", backupTitle: "Export and import", backupDescription: "Export memories and safe configuration, or restore from a JSON backup. Replace mode overwrites current memories.", exportBackup: "Export JSON", importMerge: "Merge import", importReplace: "Replace import", replaceConfirm: "Replace import deletes all current memories and substitutes the backup. Continue?", backupImported: (imported, skipped) => `Imported ${imported} memories; skipped ${skipped}.`, backupFailed: "Backup operation failed. Check the file and try again.", recentRecalls: "Recent recalls",
162
+ newMemoryEyebrow: "New memory", composerTitle: "Save a memory", content: "Memory", contentPlaceholder: "For example: The user prefers a concise interface.", type: "Type", scopeOptional: "Optional, for example: /path/to/project", sourcePlaceholder: "For example: Claude Code / Manual", writeLocal: "Save locally", preferenceRecall: "Recall mode", persistentPreference: "Persistent preference", conditionalPreference: "Conditional preference", persistentPreferenceHint: "Always returned at the start of every task", cancel: "Cancel", save: "Save memory", mcpKicker: "Agent integration", mcpTitle: "Connect your agent", mcpDescription: "Expose Memory One through Streamable HTTP. Create a scoped key and add it to your MCP client.", mcpOnline: "HTTP online", mcpEndpoint: "Service address", mcpCopyEndpoint: "Copy service address", transport: "Transport", auth: "Authentication", noAuth: "Bearer Key required", category: "Memory scope", categoryValue: "Global / optional scope", toolsLabel: "Available tools", toolsTitle: "Tools available to agents", toolsCount: "tools", http: "HTTP", localMemory: "LOCAL MEMORY / 01", serverEndpoint: "Service endpoint", versionNotice: (latest, current) => `New version ${latest}; current version ${current}`, callCount: "calls",
163
+ appearance: "Appearance",
164
+ appearanceEyebrow: "APPEARANCE",
165
+ darkMode: "Dark mode",
166
+ darkModeDescription: "Switch between light and dark themes.",
167
+ storageEyebrow: "STORAGE",
168
+ agentName: "Memory assistant",
169
+ agentDescription: "Answer questions using your memories",
170
+ collapse: "Collapse",
171
+ agentPage: "Agent page",
172
+ chat: "Chat",
173
+ backToChat: "Back to chat",
174
+ configuration: "Configuration",
175
+ processing: "Processing",
176
+ readingMemory: "Reading memories and preparing a reply",
177
+ agentPlaceholder: "Ask the memory assistant a question...",
178
+ send: "Send",
179
+ requestFormat: "Request format",
180
+ chooseRequestFormat: "Choose a request format",
181
+ model: "Model",
182
+ chooseOrEnterModel: "Choose or enter a model",
183
+ fetchModels: "Fetch models",
184
+ saving: "Saving",
185
+ saved: "Saved",
186
+ saveConfiguration: "Save configuration",
187
+ configSaveFailed: "Could not save the configuration. Try again.",
188
+ missingBaseUrl: "Enter a Base URL first.",
189
+ missingApiKey: "Complete the agent configuration first.",
190
+ providerRequestFailed: "The model provider request failed. Check the provider, model, and Base URL.",
191
+ agentRequestFailed: "Could not connect to the memory assistant. Try again.",
192
+ fetchedModels: (count) => `${count} models found`,
193
+ noModels: "No models available",
194
+ modelListFailed: "Could not fetch models. Check the configuration.",
195
+ welcome: "Hi, I’m the memory assistant. I can search, save, update, and delete memories, or summarize your preferences.",
196
+ suggestionTraits: "Summarize my preferences",
197
+ suggestionProjects: "Search recent project conventions",
198
+ suggestionConcise: "Remember that I prefer concise interfaces",
199
+ openAgent: "Open memory assistant",
200
+ agentTabs: "Agent page",
201
+ },
202
+ };
203
+ //# sourceMappingURL=copy.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"copy.js","sourceRoot":"","sources":["../../src/lib/copy.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,11 @@
1
+ export const formatDate = (value, language) => value
2
+ ? new Intl.DateTimeFormat(language === "zh" ? "zh-CN" : "en-US", {
3
+ month: "short",
4
+ day: "numeric",
5
+ hour: "2-digit",
6
+ minute: "2-digit",
7
+ }).format(new Date(value))
8
+ : language === "zh"
9
+ ? "未标记时间"
10
+ : "No date";
11
+ //# sourceMappingURL=format.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"format.js","sourceRoot":"","sources":["../../src/lib/format.ts"],"names":[],"mappings":"AAEA,MAAM,CAAC,MAAM,UAAU,GAAG,CAAC,KAAgC,EAAE,QAAkB,EAAE,EAAE,CACjF,KAAK;IACH,CAAC,CAAC,IAAI,IAAI,CAAC,cAAc,CAAC,QAAQ,KAAK,IAAI,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,OAAO,EAAE;QAC7D,KAAK,EAAE,OAAO;QACd,GAAG,EAAE,SAAS;QACd,IAAI,EAAE,SAAS;QACf,MAAM,EAAE,SAAS;KAClB,CAAC,CAAC,MAAM,CAAC,IAAI,IAAI,CAAC,KAAK,CAAC,CAAC;IAC5B,CAAC,CAAC,QAAQ,KAAK,IAAI;QACjB,CAAC,CAAC,OAAO;QACT,CAAC,CAAC,SAAS,CAAC"}
@@ -0,0 +1,5 @@
1
+ export const kindLabels = {
2
+ zh: { all: "全部", fact: "事实", preference: "偏好", episode: "事件", procedure: "方法", message: "对话" },
3
+ en: { all: "All", fact: "Fact", preference: "Preference", episode: "Episode", procedure: "Procedure", message: "Message" },
4
+ };
5
+ //# sourceMappingURL=kinds.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"kinds.js","sourceRoot":"","sources":["../../src/lib/kinds.ts"],"names":[],"mappings":"AAEA,MAAM,CAAC,MAAM,UAAU,GAA6C;IAClE,EAAE,EAAE,EAAE,GAAG,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,UAAU,EAAE,IAAI,EAAE,OAAO,EAAE,IAAI,EAAE,SAAS,EAAE,IAAI,EAAE,OAAO,EAAE,IAAI,EAAE;IAC9F,EAAE,EAAE,EAAE,GAAG,EAAE,KAAK,EAAE,IAAI,EAAE,MAAM,EAAE,UAAU,EAAE,YAAY,EAAE,OAAO,EAAE,SAAS,EAAE,SAAS,EAAE,WAAW,EAAE,OAAO,EAAE,SAAS,EAAE;CAC3H,CAAC"}
@@ -0,0 +1,31 @@
1
+ export const viewCopy = {
2
+ zh: {
3
+ all: { title: "全部记忆", description: "保存 Agent 需要记住的事实、偏好和经验。" },
4
+ timeline: { title: "时间线", description: "按发生和写入时间回看记忆。" },
5
+ preferences: { title: "偏好与习惯", description: "查看 Agent 需要遵循的个人偏好和习惯。" },
6
+ projects: { title: "Scope 分类", description: "按 scope 分类查看记忆。" },
7
+ tags: { title: "标签", description: "按标签查看记忆。" },
8
+ settings: { title: "设置", description: "调整界面语言和显示方式。" },
9
+ mcp: { title: "MCP 服务", description: "连接 Agent,管理服务访问。" },
10
+ },
11
+ en: {
12
+ all: { title: "All memories", description: "Facts, preferences, and experience for your agents to remember." },
13
+ timeline: { title: "Timeline", description: "Review memories by when they happened or were saved." },
14
+ preferences: { title: "Preferences", description: "Review preferences your agents should follow." },
15
+ projects: { title: "Scopes", description: "Browse memories by scope." },
16
+ tags: { title: "Tags", description: "Browse memories by tag." },
17
+ settings: { title: "Settings", description: "Adjust language and display settings." },
18
+ mcp: { title: "MCP service", description: "Connect agents and manage service access." },
19
+ },
20
+ };
21
+ export const viewRoutes = {
22
+ all: "/",
23
+ timeline: "/timeline",
24
+ projects: "/scopes",
25
+ preferences: "/preferences",
26
+ tags: "/tags",
27
+ settings: "/settings",
28
+ mcp: "/mcp-service",
29
+ };
30
+ export const viewByPath = Object.fromEntries(Object.entries(viewRoutes).map(([view, path]) => [path, view]));
31
+ //# sourceMappingURL=views.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"views.js","sourceRoot":"","sources":["../../src/lib/views.ts"],"names":[],"mappings":"AAWA,MAAM,CAAC,MAAM,QAAQ,GAA2E;IAC9F,EAAE,EAAE;QACF,GAAG,EAAE,EAAE,KAAK,EAAE,MAAM,EAAE,WAAW,EAAE,yBAAyB,EAAE;QAC9D,QAAQ,EAAE,EAAE,KAAK,EAAE,KAAK,EAAE,WAAW,EAAE,eAAe,EAAE;QACxD,WAAW,EAAE,EAAE,KAAK,EAAE,OAAO,EAAE,WAAW,EAAE,wBAAwB,EAAE;QACtE,QAAQ,EAAE,EAAE,KAAK,EAAE,UAAU,EAAE,WAAW,EAAE,iBAAiB,EAAE;QAC/D,IAAI,EAAE,EAAE,KAAK,EAAE,IAAI,EAAE,WAAW,EAAE,UAAU,EAAE;QAC9C,QAAQ,EAAE,EAAE,KAAK,EAAE,IAAI,EAAE,WAAW,EAAE,cAAc,EAAE;QACtD,GAAG,EAAE,EAAE,KAAK,EAAE,QAAQ,EAAE,WAAW,EAAE,kBAAkB,EAAE;KAC1D;IACD,EAAE,EAAE;QACF,GAAG,EAAE,EAAE,KAAK,EAAE,cAAc,EAAE,WAAW,EAAE,iEAAiE,EAAE;QAC9G,QAAQ,EAAE,EAAE,KAAK,EAAE,UAAU,EAAE,WAAW,EAAE,sDAAsD,EAAE;QACpG,WAAW,EAAE,EAAE,KAAK,EAAE,aAAa,EAAE,WAAW,EAAE,+CAA+C,EAAE;QACnG,QAAQ,EAAE,EAAE,KAAK,EAAE,QAAQ,EAAE,WAAW,EAAE,2BAA2B,EAAE;QACvE,IAAI,EAAE,EAAE,KAAK,EAAE,MAAM,EAAE,WAAW,EAAE,yBAAyB,EAAE;QAC/D,QAAQ,EAAE,EAAE,KAAK,EAAE,UAAU,EAAE,WAAW,EAAE,uCAAuC,EAAE;QACrF,GAAG,EAAE,EAAE,KAAK,EAAE,aAAa,EAAE,WAAW,EAAE,2CAA2C,EAAE;KACxF;CACF,CAAC;AAEF,MAAM,CAAC,MAAM,UAAU,GAAG;IACxB,GAAG,EAAE,GAAG;IACR,QAAQ,EAAE,WAAW;IACrB,QAAQ,EAAE,SAAS;IACnB,WAAW,EAAE,cAAc;IAC3B,IAAI,EAAE,OAAO;IACb,QAAQ,EAAE,WAAW;IACrB,GAAG,EAAE,cAAc;CACoB,CAAC;AAE1C,MAAM,CAAC,MAAM,UAAU,GAAG,MAAM,CAAC,WAAW,CAC1C,MAAM,CAAC,OAAO,CAAC,UAAU,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,IAAI,EAAE,IAAI,CAAC,EAAE,EAAE,CAAC,CAAC,IAAI,EAAE,IAAI,CAAC,CAAC,CACvC,CAAC"}
@@ -0,0 +1,14 @@
1
+ export class ContextCache {
2
+ values = new Map();
3
+ get(identity, scope, limit, version) {
4
+ const item = this.values.get(this.key(identity, scope, limit));
5
+ return item?.version === version ? item.value : null;
6
+ }
7
+ set(identity, scope, limit, version, value) {
8
+ this.values.set(this.key(identity, scope, limit), { version, value });
9
+ }
10
+ key(identity, scope, limit) {
11
+ return `${identity}\u0000${scope ?? "global"}\u0000${limit}`;
12
+ }
13
+ }
14
+ //# sourceMappingURL=context-cache.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"context-cache.js","sourceRoot":"","sources":["../../src/mcp/context-cache.ts"],"names":[],"mappings":"AAGA,MAAM,OAAO,YAAY;IACN,MAAM,GAAG,IAAI,GAAG,EAAsB,CAAC;IAExD,GAAG,CAAC,QAAgB,EAAE,KAAoB,EAAE,KAAa,EAAE,OAAe;QACxE,MAAM,IAAI,GAAG,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,IAAI,CAAC,GAAG,CAAC,QAAQ,EAAE,KAAK,EAAE,KAAK,CAAC,CAAC,CAAC;QAC/D,OAAO,IAAI,EAAE,OAAO,KAAK,OAAO,CAAC,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,IAAI,CAAC;IACvD,CAAC;IAED,GAAG,CAAC,QAAgB,EAAE,KAAoB,EAAE,KAAa,EAAE,OAAe,EAAE,KAAc;QACxF,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,IAAI,CAAC,GAAG,CAAC,QAAQ,EAAE,KAAK,EAAE,KAAK,CAAC,EAAE,EAAE,OAAO,EAAE,KAAK,EAAE,CAAC,CAAC;IACxE,CAAC;IAEO,GAAG,CAAC,QAAgB,EAAE,KAAoB,EAAE,KAAa;QAC/D,OAAO,GAAG,QAAQ,SAAS,KAAK,IAAI,QAAQ,SAAS,KAAK,EAAE,CAAC;IAC/D,CAAC;CACF"}
@@ -0,0 +1,80 @@
1
+ import { McpServer } from "@modelcontextprotocol/sdk/server/mcp.js";
2
+ import { z } from "zod";
3
+ import { CONTEXT_TOKEN_BUDGET } from "../storage.js";
4
+ export const mcpToolNames = ["memory_store", "memory-search", "memory-get-context", "memory_get", "memory_list", "memory_update", "memory_delete", "memory_feedback"];
5
+ const storageScope = "user";
6
+ const json = (value) => ({ content: [{ type: "text", text: JSON.stringify(value) }] });
7
+ export const exposeMemory = (memory) => {
8
+ if (!memory || typeof memory !== "object" || "error" in memory)
9
+ return memory;
10
+ const { project, ...rest } = memory;
11
+ return { ...rest, scope: project ?? "global" };
12
+ };
13
+ const exposeMemories = (memories) => memories.map(exposeMemory);
14
+ const exposeWriteResult = (result) => ({
15
+ memory: exposeMemory(result.memory),
16
+ duplicate: result.duplicate,
17
+ similar: exposeMemories(result.similar),
18
+ superseded: result.superseded ? exposeMemory(result.superseded) : null,
19
+ });
20
+ const toStorageInput = (input) => {
21
+ const { scope, ...rest } = input;
22
+ return { ...rest, scope: storageScope, project: typeof scope === "string" && scope !== "global" ? scope : null };
23
+ };
24
+ const toStoragePatch = (patch) => {
25
+ const { scope, ...rest } = patch;
26
+ return "scope" in patch ? { ...rest, project: typeof scope === "string" && scope !== "global" ? scope : null } : rest;
27
+ };
28
+ export function createMcpServer(store, allowedTools, contextCache, cacheIdentity = "internal") {
29
+ const mcp = new McpServer({ name: "memory-one", version: "0.1.0" }, {
30
+ instructions: "Memory One provides durable experience for every task. At the start of each new user task, call memory-get-context before planning, answering, editing, or using task-specific tools. It returns persistent preferences and project conventions without a query. If its result is already present in the current task conversation, do not call it again; use memory-search for focused retrieval of specific historical information. 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. Before storing, prefer updating or superseding a similar memory instead of creating a near-duplicate. Use memory_feedback after retrieved memories prove useful or unhelpful. Only use memory_delete when the user explicitly asks to forget a specific memory. Scope is optional."
31
+ });
32
+ const registerTool = (name, description, schema, handler) => {
33
+ if (!allowedTools || allowedTools.has(name)) {
34
+ mcp.tool(name, description, schema, async (input) => {
35
+ const startedAt = performance.now();
36
+ try {
37
+ const result = await handler(input);
38
+ store.recordToolCall(name, true, Math.round((performance.now() - startedAt) * 100) / 100);
39
+ return result;
40
+ }
41
+ catch (error) {
42
+ store.recordToolCall(name, false, Math.round((performance.now() - startedAt) * 100) / 100);
43
+ throw error;
44
+ }
45
+ });
46
+ }
47
+ };
48
+ registerTool("memory_store", "Use only when the user explicitly asks to remember or save a durable preference, decision, project convention, personal fact, or correction. If the information may be useful but the user did not ask to save it, ask for confirmation first. Do not store transient chatter or one-off task details. If an older memory should be replaced, pass its supersedes_id. Scope is an optional category such as a project directory, work area, or session.", {
49
+ content: z.string(), kind: z.string().default("fact"), scope: z.string().nullable().optional(),
50
+ session_id: z.string().nullable().optional(), source: z.string().nullable().optional(), occurred_at: z.string().nullable().optional(),
51
+ confidence: z.number().default(1), importance: z.number().default(0.5), metadata: z.record(z.string(), z.unknown()).nullable().optional(),
52
+ supersedes_id: z.string().nullable().optional(),
53
+ }, async (input) => json(exposeWriteResult(store.createWithIntegrity(toStorageInput(input)))));
54
+ registerTool("memory-search", "Use when a specific historical preference, decision, fact, or project convention may matter. Search with 5–12 concise high-signal concepts or identifiers, not the full user message; use scope as an optional category filter.", { query: z.string(), scope: z.string().nullable().optional(), limit: z.number().int().default(20) }, async ({ query, scope, limit }) => json(exposeMemories(store.recordRecalls(store.search(query, storageScope, scope && scope !== "global" ? scope : null, limit), "search", query))));
55
+ registerTool("memory-get-context", "Use once at the beginning of each new user task. Do not call it again when this task's conversation already contains a memory-get-context result; use memory-search for focused follow-up retrieval. Returns token-budgeted persistent memories, prioritizing the current project before global memories. Do not pass a query. When working in a Git repository, pass the repository root's absolute directory path as scope. Scope is optional.", { scope: z.string().nullable().optional(), limit: z.number().int().default(10) }, async ({ scope, limit }) => {
56
+ const category = scope && scope !== "global" ? scope : null;
57
+ const version = store.dataVersion();
58
+ const cached = contextCache?.get(cacheIdentity, category, limit, version);
59
+ const selection = cached ?? store.persistentContext(storageScope, category, limit, CONTEXT_TOKEN_BUDGET);
60
+ if (!cached)
61
+ contextCache?.set(cacheIdentity, category, limit, version, selection);
62
+ const memories = exposeMemories(store.recordRecalls(selection.memories, "context"));
63
+ return json({ scope: scope ?? "global", strategy: selection.strategy, token_budget: selection.token_budget, token_estimate: selection.token_estimate, cache_hit: Boolean(cached), memories });
64
+ });
65
+ registerTool("memory_get", "Use after memory-search or memory-get-context returns a memory ID and you need the complete record before relying on or updating it.", { memory_id: z.string() }, async ({ memory_id }) => {
66
+ const memory = store.get(memory_id);
67
+ return json(memory ? exposeMemory(store.recordRecalls([memory], "get")[0]) : { error: "memory_not_found" });
68
+ });
69
+ registerTool("memory_list", "Use when reviewing recent memories, auditing what has been saved, or preparing context without a specific search query. Scope is an optional category filter.", { scope: z.string().nullable().optional(), limit: z.number().int().default(50) }, async ({ scope, limit }) => json(exposeMemories(store.recordRecalls(store.list(storageScope, scope && scope !== "global" ? scope : null, limit), "list"))));
70
+ registerTool("memory_update", "Use only when the user explicitly asks to correct, refine, or supersede a stored memory. Fetch the record first when needed, then update only the changed fields. Scope is an optional category.", { memory_id: z.string(), patch: z.record(z.string(), z.unknown()) }, async ({ memory_id, patch }) => json(exposeMemory(store.update(memory_id, toStoragePatch(patch)) ?? { error: "memory_not_found" })));
71
+ registerTool("memory_delete", "Use only when the user explicitly asks to forget or delete a specific memory. This is a soft delete.", { memory_id: z.string() }, async ({ memory_id }) => json({ deleted: store.delete(memory_id) }));
72
+ registerTool("memory_feedback", "Use after applying a retrieved memory or when the user indicates that a memory was useful or not useful. Record that relevance signal so future retrieval can improve.", { memory_id: z.string(), useful: z.boolean() }, async ({ memory_id, useful }) => {
73
+ const item = store.get(memory_id);
74
+ if (!item)
75
+ return json({ error: "memory_not_found" });
76
+ return json(exposeMemory(store.update(memory_id, { importance: Math.max(0, Math.min(1, item.importance + (useful ? 0.05 : -0.05))) })));
77
+ });
78
+ return mcp;
79
+ }
80
+ //# sourceMappingURL=server.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"server.js","sourceRoot":"","sources":["../../src/mcp/server.ts"],"names":[],"mappings":"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"}