@synth-coder/memhub 0.2.2 → 0.2.4

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 (116) hide show
  1. package/.factory/commands/opsx-apply.md +150 -0
  2. package/.factory/commands/opsx-archive.md +155 -0
  3. package/.factory/commands/opsx-explore.md +171 -0
  4. package/.factory/commands/opsx-propose.md +104 -0
  5. package/.factory/skills/openspec-apply-change/SKILL.md +156 -0
  6. package/.factory/skills/openspec-archive-change/SKILL.md +114 -0
  7. package/.factory/skills/openspec-explore/SKILL.md +288 -0
  8. package/.factory/skills/openspec-propose/SKILL.md +110 -0
  9. package/.github/workflows/ci.yml +48 -12
  10. package/.github/workflows/release.yml +67 -0
  11. package/AGENTS.md +158 -17
  12. package/README.md +147 -66
  13. package/README.zh-CN.md +75 -23
  14. package/dist/src/cli/agents/claude-code.d.ts +5 -0
  15. package/dist/src/cli/agents/claude-code.d.ts.map +1 -0
  16. package/dist/src/cli/agents/claude-code.js +14 -0
  17. package/dist/src/cli/agents/claude-code.js.map +1 -0
  18. package/dist/src/cli/agents/cline.d.ts +5 -0
  19. package/dist/src/cli/agents/cline.d.ts.map +1 -0
  20. package/dist/src/cli/agents/cline.js +14 -0
  21. package/dist/src/cli/agents/cline.js.map +1 -0
  22. package/dist/src/cli/agents/codex.d.ts +5 -0
  23. package/dist/src/cli/agents/codex.d.ts.map +1 -0
  24. package/dist/src/cli/agents/codex.js +14 -0
  25. package/dist/src/cli/agents/codex.js.map +1 -0
  26. package/dist/src/cli/agents/cursor.d.ts +5 -0
  27. package/dist/src/cli/agents/cursor.d.ts.map +1 -0
  28. package/dist/src/cli/agents/cursor.js +14 -0
  29. package/dist/src/cli/agents/cursor.js.map +1 -0
  30. package/dist/src/cli/agents/factory-droid.d.ts +5 -0
  31. package/dist/src/cli/agents/factory-droid.d.ts.map +1 -0
  32. package/dist/src/cli/agents/factory-droid.js +14 -0
  33. package/dist/src/cli/agents/factory-droid.js.map +1 -0
  34. package/dist/src/cli/agents/gemini-cli.d.ts +5 -0
  35. package/dist/src/cli/agents/gemini-cli.d.ts.map +1 -0
  36. package/dist/src/cli/agents/gemini-cli.js +14 -0
  37. package/dist/src/cli/agents/gemini-cli.js.map +1 -0
  38. package/dist/src/cli/agents/index.d.ts +14 -0
  39. package/dist/src/cli/agents/index.d.ts.map +1 -0
  40. package/dist/src/cli/agents/index.js +30 -0
  41. package/dist/src/cli/agents/index.js.map +1 -0
  42. package/dist/src/cli/agents/windsurf.d.ts +5 -0
  43. package/dist/src/cli/agents/windsurf.d.ts.map +1 -0
  44. package/dist/src/cli/agents/windsurf.js +14 -0
  45. package/dist/src/cli/agents/windsurf.js.map +1 -0
  46. package/dist/src/cli/index.d.ts +8 -0
  47. package/dist/src/cli/index.d.ts.map +1 -0
  48. package/dist/src/cli/index.js +168 -0
  49. package/dist/src/cli/index.js.map +1 -0
  50. package/dist/src/cli/init.d.ts +34 -0
  51. package/dist/src/cli/init.d.ts.map +1 -0
  52. package/dist/src/cli/init.js +160 -0
  53. package/dist/src/cli/init.js.map +1 -0
  54. package/dist/src/cli/instructions.d.ts +29 -0
  55. package/dist/src/cli/instructions.d.ts.map +1 -0
  56. package/dist/src/cli/instructions.js +141 -0
  57. package/dist/src/cli/instructions.js.map +1 -0
  58. package/dist/src/cli/types.d.ts +22 -0
  59. package/dist/src/cli/types.d.ts.map +1 -0
  60. package/dist/src/cli/types.js +86 -0
  61. package/dist/src/cli/types.js.map +1 -0
  62. package/dist/src/contracts/schemas.js.map +1 -1
  63. package/dist/src/server/mcp-server.d.ts +8 -0
  64. package/dist/src/server/mcp-server.d.ts.map +1 -1
  65. package/dist/src/server/mcp-server.js +30 -16
  66. package/dist/src/server/mcp-server.js.map +1 -1
  67. package/dist/src/services/embedding-service.d.ts.map +1 -1
  68. package/dist/src/services/embedding-service.js +1 -1
  69. package/dist/src/services/embedding-service.js.map +1 -1
  70. package/dist/src/services/memory-service.d.ts +1 -0
  71. package/dist/src/services/memory-service.d.ts.map +1 -1
  72. package/dist/src/services/memory-service.js +125 -82
  73. package/dist/src/services/memory-service.js.map +1 -1
  74. package/dist/src/storage/markdown-storage.d.ts.map +1 -1
  75. package/dist/src/storage/markdown-storage.js +1 -1
  76. package/dist/src/storage/markdown-storage.js.map +1 -1
  77. package/dist/src/storage/vector-index.d.ts.map +1 -1
  78. package/dist/src/storage/vector-index.js +4 -5
  79. package/dist/src/storage/vector-index.js.map +1 -1
  80. package/docs/README.md +21 -0
  81. package/docs/mcp-tools.md +136 -0
  82. package/docs/user-guide.md +182 -0
  83. package/package.json +22 -19
  84. package/src/cli/agents/claude-code.ts +14 -0
  85. package/src/cli/agents/cline.ts +14 -0
  86. package/src/cli/agents/codex.ts +14 -0
  87. package/src/cli/agents/cursor.ts +14 -0
  88. package/src/cli/agents/factory-droid.ts +14 -0
  89. package/src/cli/agents/gemini-cli.ts +14 -0
  90. package/src/cli/agents/index.ts +36 -0
  91. package/src/cli/agents/windsurf.ts +14 -0
  92. package/src/cli/index.ts +192 -0
  93. package/src/cli/init.ts +218 -0
  94. package/src/cli/instructions.ts +156 -0
  95. package/src/cli/types.ts +112 -0
  96. package/src/contracts/mcp.ts +1 -1
  97. package/src/contracts/schemas.ts +4 -4
  98. package/src/contracts/types.ts +4 -4
  99. package/src/server/mcp-server.ts +36 -29
  100. package/src/services/embedding-service.ts +80 -80
  101. package/src/services/memory-service.ts +142 -107
  102. package/src/storage/markdown-storage.ts +1 -9
  103. package/src/storage/vector-index.ts +117 -118
  104. package/test/cli/init.test.ts +380 -0
  105. package/test/server/mcp-server.test.ts +45 -3
  106. package/test/services/memory-service.test.ts +16 -4
  107. package/test/storage/frontmatter-parser.test.ts +1 -1
  108. package/test/storage/markdown-storage.test.ts +19 -10
  109. package/test/storage/vector-index.test.ts +129 -133
  110. package/test/utils/slugify.test.ts +5 -1
  111. package/docs/architecture.md +0 -349
  112. package/docs/contracts.md +0 -119
  113. package/docs/prompt-template.md +0 -79
  114. package/docs/proposals/mcp-typescript-sdk-refactor.md +0 -568
  115. package/docs/proposals/proposal-close-gates.md +0 -58
  116. package/docs/tool-calling-policy.md +0 -107
package/README.zh-CN.md CHANGED
@@ -8,48 +8,99 @@ MemHub 将“用户决策、长期偏好、可复用知识”保存为 **Markdow
8
8
 
9
9
  ## 为什么用 MemHub
10
10
 
11
- - **Git 原生**:所有记忆都是纯文本文件,天然可 diff / 可回滚
12
- - **面向 Agent**:通过 MCP(stdio)暴露工具,便于模型调用
13
- - **人类可读**:元数据在 YAML,正文在 Markdown
14
- - **质量可控**:内置 lint / typecheck / test / coverage 门禁
11
+ 大多数 AI 记忆工具依赖外部 API 或简单的关键词匹配。MemHub 不同:
12
+
13
+ ### 本地 AI 语义搜索
14
+
15
+ - **向量数据库**:基于 LanceDB 实现快速相似度搜索
16
+ - **本地嵌入模型**:量化版 Transformers.js 模型,完全在本地运行
17
+ - **零 API 成本**:无需外部服务、无需 API 密钥、无速率限制
18
+ - **隐私优先**:你的记忆永远不会离开你的电脑
19
+
20
+ ### Git 原生存储
21
+
22
+ - **纯文本格式**:所有记忆都是带 YAML front matter 的 Markdown 文件
23
+ - **版本控制**:像代码一样提交、分支、审查、回滚
24
+ - **人类可读**:用任何文本编辑器浏览和编辑记忆
25
+ - **团队友好**:通过 git 仓库共享记忆
26
+
27
+ ### 工作原理
28
+
29
+ ```
30
+ 用户查询 → 本地嵌入模型 → 向量搜索 → 排序结果
31
+ ↑ ↓
32
+ 运行在 CPU LanceDB 索引
33
+ (无需 GPU) (嵌入式数据库)
34
+ ```
35
+
36
+ 当你调用 `memory_load` 时,MemHub:
37
+ 1. 使用本地量化模型将查询转换为向量
38
+ 2. 在 LanceDB 索引中搜索语义相似的记忆
39
+ 3. 返回带有相关性分数的排序结果
40
+
41
+ 这意味着"测试框架偏好"可以找到关于"Vitest vs Jest 决策"的记忆——即使没有精确的关键词匹配。
15
42
 
16
43
  ---
17
44
 
18
45
  ## 核心特性
19
46
 
20
- - Markdown 持久化(`.md`)
21
- - YAML Front Matter 元数据(`id / session_id / entry_type / tags / category / importance / 时间戳`)
22
- - STM-first 双工具接口:`memory_load` + `memory_update`
23
- - 并发 CLI 安全目录:`YYYY-MM-DD/session_uuid/...`
24
- - MCP stdio server,可接入主流 MCP 客户端
47
+ - **语义搜索** — 基于 LanceDB 的向量相似度搜索
48
+ - **本地嵌入** 量化版 Transformers.js 模型,CPU 运行
49
+ - **Markdown 存储** — 人类可读的 `.md` 文件,带 YAML front matter
50
+ - **Git 友好** — 版本控制、diff、审查你的记忆
51
+ - **MCP 协议** 支持 Claude Code、Cursor、Cline、Windsurf 等
52
+ - **一键配置** — `npx -y @synth-coder/memhub init`
25
53
 
26
54
  ---
27
55
 
28
56
  ## 快速开始
29
57
 
30
- ### 1)从 npm 安装
58
+ ### 一键配置
59
+
60
+ 使用一条命令为你的 AI 代理配置 MemHub:
31
61
 
32
62
  ```bash
33
- npm i @synth-coder/memhub
63
+ npx -y @synth-coder/memhub init
34
64
  ```
35
65
 
36
- ### 2)本地开发安装依赖
66
+ 这将启动交互式提示选择你的代理。MemHub 会:
67
+ 1. 将 MCP 服务器配置添加到代理的配置文件
68
+ 2. 将 MemHub 使用说明添加到代理的规则文件
37
69
 
38
- ```bash
39
- npm install
40
- ```
70
+ **支持的代理:**
41
71
 
42
- ### 3)构建
72
+ | 代理 | 配置文件 | 指令文件 |
73
+ |------|----------|----------|
74
+ | Claude Code | `~/.claude/settings.json` | `~/.claude/CLAUDE.md` |
75
+ | Cursor | `~/.cursor/mcp.json` | `~/.cursorrules` |
76
+ | Cline | `~/.cline/mcp.json` | `~/.clinerules` |
77
+ | Windsurf | `~/.codeium/windsurf/mcp_config.json` | `~/.windsurfrules` |
78
+ | Factory Droid | `~/.factory/mcp.json` | `~/.factory/AGENTS.md` |
79
+ | Gemini CLI | `~/.gemini/settings.json` | `~/.gemini/GEMINI.md` |
80
+ | Codex | `~/.codex/config.toml` | `~/.codex/AGENTS.md` |
43
81
 
44
- ```bash
45
- npm run build
46
- ```
82
+ ### CLI 选项
47
83
 
48
- ### 4)执行质量门禁
49
84
  ```bash
50
- npm run quality
85
+ # 交互式选择(全局 - 默认)
86
+ npx -y @synth-coder/memhub init
87
+
88
+ # 跳过交互式提示
89
+ npx -y @synth-coder/memhub init -a claude-code
90
+
91
+ # 仅配置当前项目(本地)
92
+ npx -y @synth-coder/memhub init -a cursor -l
93
+
94
+ # 更新现有配置
95
+ npx -y @synth-coder/memhub init -a claude-code --force
51
96
  ```
52
97
 
98
+ | 选项 | 说明 |
99
+ |------|------|
100
+ | `-a, --agent <名称>` | 代理类型(跳过交互式选择) |
101
+ | `-l, --local` | 配置当前项目(默认:全局) |
102
+ | `-f, --force` | 更新现有配置 |
103
+
53
104
  ---
54
105
 
55
106
  ## 作为 MCP Server 使用(stdio)
@@ -131,7 +182,7 @@ YYYY-MM-DD-title-slug.md
131
182
 
132
183
  ## MCP 工具列表
133
184
 
134
- > 调用策略建议见:`docs/tool-calling-policy.md`(首轮 `memory_load`,末轮 `memory_update`)。
185
+ > 详见 [docs/mcp-tools.md](docs/mcp-tools.md) 获取 API 参考。
135
186
 
136
187
  - `memory_load`:首轮加载短期记忆(STM)上下文
137
188
  - `memory_update`:末轮回写决策/偏好/知识/状态变化
@@ -182,9 +233,10 @@ memhub/
182
233
  - [x] 架构与契约设计
183
234
  - [x] 核心实现(storage/service/server)
184
235
  - [x] 质量门禁(lint/typecheck/test/coverage)
236
+ - [x] CLI init 命令快速配置
185
237
  - [ ] 集成测试
186
238
  - [ ] 性能优化
187
- - [x] npm 发布(`@synth-coder/memhub@0.1.3`)
239
+ - [x] npm 发布(`@synth-coder/memhub@0.2.3`)
188
240
 
189
241
  ---
190
242
 
@@ -0,0 +1,5 @@
1
+ /**
2
+ * Claude Code MCP configuration generator
3
+ */
4
+ export declare function generateClaudeCodeConfig(_memhubPath: string): Record<string, unknown>;
5
+ //# sourceMappingURL=claude-code.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"claude-code.d.ts","sourceRoot":"","sources":["../../../../src/cli/agents/claude-code.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,wBAAgB,wBAAwB,CAAC,WAAW,EAAE,MAAM,GAAG,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CASrF"}
@@ -0,0 +1,14 @@
1
+ /**
2
+ * Claude Code MCP configuration generator
3
+ */
4
+ export function generateClaudeCodeConfig(_memhubPath) {
5
+ return {
6
+ mcpServers: {
7
+ memhub: {
8
+ command: 'npx',
9
+ args: ['-y', '@synth-coder/memhub'],
10
+ },
11
+ },
12
+ };
13
+ }
14
+ //# sourceMappingURL=claude-code.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"claude-code.js","sourceRoot":"","sources":["../../../../src/cli/agents/claude-code.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,MAAM,UAAU,wBAAwB,CAAC,WAAmB;IAC1D,OAAO;QACL,UAAU,EAAE;YACV,MAAM,EAAE;gBACN,OAAO,EAAE,KAAK;gBACd,IAAI,EAAE,CAAC,IAAI,EAAE,qBAAqB,CAAC;aACpC;SACF;KACF,CAAC;AACJ,CAAC"}
@@ -0,0 +1,5 @@
1
+ /**
2
+ * Cline MCP configuration generator
3
+ */
4
+ export declare function generateClineConfig(_memhubPath: string): Record<string, unknown>;
5
+ //# sourceMappingURL=cline.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"cline.d.ts","sourceRoot":"","sources":["../../../../src/cli/agents/cline.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,wBAAgB,mBAAmB,CAAC,WAAW,EAAE,MAAM,GAAG,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAShF"}
@@ -0,0 +1,14 @@
1
+ /**
2
+ * Cline MCP configuration generator
3
+ */
4
+ export function generateClineConfig(_memhubPath) {
5
+ return {
6
+ mcpServers: {
7
+ memhub: {
8
+ command: 'npx',
9
+ args: ['-y', '@synth-coder/memhub'],
10
+ },
11
+ },
12
+ };
13
+ }
14
+ //# sourceMappingURL=cline.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"cline.js","sourceRoot":"","sources":["../../../../src/cli/agents/cline.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,MAAM,UAAU,mBAAmB,CAAC,WAAmB;IACrD,OAAO;QACL,UAAU,EAAE;YACV,MAAM,EAAE;gBACN,OAAO,EAAE,KAAK;gBACd,IAAI,EAAE,CAAC,IAAI,EAAE,qBAAqB,CAAC;aACpC;SACF;KACF,CAAC;AACJ,CAAC"}
@@ -0,0 +1,5 @@
1
+ /**
2
+ * Codex MCP configuration generator
3
+ */
4
+ export declare function generateCodexConfig(_memhubPath: string): Record<string, unknown>;
5
+ //# sourceMappingURL=codex.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"codex.d.ts","sourceRoot":"","sources":["../../../../src/cli/agents/codex.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,wBAAgB,mBAAmB,CAAC,WAAW,EAAE,MAAM,GAAG,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAShF"}
@@ -0,0 +1,14 @@
1
+ /**
2
+ * Codex MCP configuration generator
3
+ */
4
+ export function generateCodexConfig(_memhubPath) {
5
+ return {
6
+ mcpServers: {
7
+ memhub: {
8
+ command: 'npx',
9
+ args: ['-y', '@synth-coder/memhub'],
10
+ },
11
+ },
12
+ };
13
+ }
14
+ //# sourceMappingURL=codex.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"codex.js","sourceRoot":"","sources":["../../../../src/cli/agents/codex.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,MAAM,UAAU,mBAAmB,CAAC,WAAmB;IACrD,OAAO;QACL,UAAU,EAAE;YACV,MAAM,EAAE;gBACN,OAAO,EAAE,KAAK;gBACd,IAAI,EAAE,CAAC,IAAI,EAAE,qBAAqB,CAAC;aACpC;SACF;KACF,CAAC;AACJ,CAAC"}
@@ -0,0 +1,5 @@
1
+ /**
2
+ * Cursor MCP configuration generator
3
+ */
4
+ export declare function generateCursorConfig(_memhubPath: string): Record<string, unknown>;
5
+ //# sourceMappingURL=cursor.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"cursor.d.ts","sourceRoot":"","sources":["../../../../src/cli/agents/cursor.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,wBAAgB,oBAAoB,CAAC,WAAW,EAAE,MAAM,GAAG,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CASjF"}
@@ -0,0 +1,14 @@
1
+ /**
2
+ * Cursor MCP configuration generator
3
+ */
4
+ export function generateCursorConfig(_memhubPath) {
5
+ return {
6
+ mcpServers: {
7
+ memhub: {
8
+ command: 'npx',
9
+ args: ['-y', '@synth-coder/memhub'],
10
+ },
11
+ },
12
+ };
13
+ }
14
+ //# sourceMappingURL=cursor.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"cursor.js","sourceRoot":"","sources":["../../../../src/cli/agents/cursor.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,MAAM,UAAU,oBAAoB,CAAC,WAAmB;IACtD,OAAO;QACL,UAAU,EAAE;YACV,MAAM,EAAE;gBACN,OAAO,EAAE,KAAK;gBACd,IAAI,EAAE,CAAC,IAAI,EAAE,qBAAqB,CAAC;aACpC;SACF;KACF,CAAC;AACJ,CAAC"}
@@ -0,0 +1,5 @@
1
+ /**
2
+ * Factory Droid MCP configuration generator
3
+ */
4
+ export declare function generateFactoryDroidConfig(_memhubPath: string): Record<string, unknown>;
5
+ //# sourceMappingURL=factory-droid.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"factory-droid.d.ts","sourceRoot":"","sources":["../../../../src/cli/agents/factory-droid.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,wBAAgB,0BAA0B,CAAC,WAAW,EAAE,MAAM,GAAG,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CASvF"}
@@ -0,0 +1,14 @@
1
+ /**
2
+ * Factory Droid MCP configuration generator
3
+ */
4
+ export function generateFactoryDroidConfig(_memhubPath) {
5
+ return {
6
+ mcpServers: {
7
+ memhub: {
8
+ command: 'npx',
9
+ args: ['-y', '@synth-coder/memhub'],
10
+ },
11
+ },
12
+ };
13
+ }
14
+ //# sourceMappingURL=factory-droid.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"factory-droid.js","sourceRoot":"","sources":["../../../../src/cli/agents/factory-droid.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,MAAM,UAAU,0BAA0B,CAAC,WAAmB;IAC5D,OAAO;QACL,UAAU,EAAE;YACV,MAAM,EAAE;gBACN,OAAO,EAAE,KAAK;gBACd,IAAI,EAAE,CAAC,IAAI,EAAE,qBAAqB,CAAC;aACpC;SACF;KACF,CAAC;AACJ,CAAC"}
@@ -0,0 +1,5 @@
1
+ /**
2
+ * Gemini CLI MCP configuration generator
3
+ */
4
+ export declare function generateGeminiCliConfig(_memhubPath: string): Record<string, unknown>;
5
+ //# sourceMappingURL=gemini-cli.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"gemini-cli.d.ts","sourceRoot":"","sources":["../../../../src/cli/agents/gemini-cli.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,wBAAgB,uBAAuB,CAAC,WAAW,EAAE,MAAM,GAAG,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CASpF"}
@@ -0,0 +1,14 @@
1
+ /**
2
+ * Gemini CLI MCP configuration generator
3
+ */
4
+ export function generateGeminiCliConfig(_memhubPath) {
5
+ return {
6
+ mcpServers: {
7
+ memhub: {
8
+ command: 'npx',
9
+ args: ['-y', '@synth-coder/memhub'],
10
+ },
11
+ },
12
+ };
13
+ }
14
+ //# sourceMappingURL=gemini-cli.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"gemini-cli.js","sourceRoot":"","sources":["../../../../src/cli/agents/gemini-cli.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,MAAM,UAAU,uBAAuB,CAAC,WAAmB;IACzD,OAAO;QACL,UAAU,EAAE;YACV,MAAM,EAAE;gBACN,OAAO,EAAE,KAAK;gBACd,IAAI,EAAE,CAAC,IAAI,EAAE,qBAAqB,CAAC;aACpC;SACF;KACF,CAAC;AACJ,CAAC"}
@@ -0,0 +1,14 @@
1
+ /**
2
+ * Agent configuration generators index
3
+ */
4
+ export { generateCursorConfig } from './cursor.js';
5
+ export { generateClaudeCodeConfig } from './claude-code.js';
6
+ export { generateClineConfig } from './cline.js';
7
+ export { generateWindsurfConfig } from './windsurf.js';
8
+ export { generateFactoryDroidConfig } from './factory-droid.js';
9
+ export { generateGeminiCliConfig } from './gemini-cli.js';
10
+ export { generateCodexConfig } from './codex.js';
11
+ import type { AgentType } from '../types.js';
12
+ export type ConfigGenerator = (memhubPath: string) => Record<string, unknown>;
13
+ export declare function getConfigGenerator(agentId: AgentType): ConfigGenerator;
14
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../src/cli/agents/index.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,EAAE,oBAAoB,EAAE,MAAM,aAAa,CAAC;AACnD,OAAO,EAAE,wBAAwB,EAAE,MAAM,kBAAkB,CAAC;AAC5D,OAAO,EAAE,mBAAmB,EAAE,MAAM,YAAY,CAAC;AACjD,OAAO,EAAE,sBAAsB,EAAE,MAAM,eAAe,CAAC;AACvD,OAAO,EAAE,0BAA0B,EAAE,MAAM,oBAAoB,CAAC;AAChE,OAAO,EAAE,uBAAuB,EAAE,MAAM,iBAAiB,CAAC;AAC1D,OAAO,EAAE,mBAAmB,EAAE,MAAM,YAAY,CAAC;AAEjD,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,aAAa,CAAC;AAS7C,MAAM,MAAM,eAAe,GAAG,CAAC,UAAU,EAAE,MAAM,KAAK,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;AAY9E,wBAAgB,kBAAkB,CAAC,OAAO,EAAE,SAAS,GAAG,eAAe,CAEtE"}
@@ -0,0 +1,30 @@
1
+ /**
2
+ * Agent configuration generators index
3
+ */
4
+ export { generateCursorConfig } from './cursor.js';
5
+ export { generateClaudeCodeConfig } from './claude-code.js';
6
+ export { generateClineConfig } from './cline.js';
7
+ export { generateWindsurfConfig } from './windsurf.js';
8
+ export { generateFactoryDroidConfig } from './factory-droid.js';
9
+ export { generateGeminiCliConfig } from './gemini-cli.js';
10
+ export { generateCodexConfig } from './codex.js';
11
+ import { generateCursorConfig } from './cursor.js';
12
+ import { generateClaudeCodeConfig } from './claude-code.js';
13
+ import { generateClineConfig } from './cline.js';
14
+ import { generateWindsurfConfig } from './windsurf.js';
15
+ import { generateFactoryDroidConfig } from './factory-droid.js';
16
+ import { generateGeminiCliConfig } from './gemini-cli.js';
17
+ import { generateCodexConfig } from './codex.js';
18
+ const generators = {
19
+ cursor: generateCursorConfig,
20
+ 'claude-code': generateClaudeCodeConfig,
21
+ cline: generateClineConfig,
22
+ windsurf: generateWindsurfConfig,
23
+ 'factory-droid': generateFactoryDroidConfig,
24
+ 'gemini-cli': generateGeminiCliConfig,
25
+ codex: generateCodexConfig,
26
+ };
27
+ export function getConfigGenerator(agentId) {
28
+ return generators[agentId];
29
+ }
30
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../src/cli/agents/index.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,EAAE,oBAAoB,EAAE,MAAM,aAAa,CAAC;AACnD,OAAO,EAAE,wBAAwB,EAAE,MAAM,kBAAkB,CAAC;AAC5D,OAAO,EAAE,mBAAmB,EAAE,MAAM,YAAY,CAAC;AACjD,OAAO,EAAE,sBAAsB,EAAE,MAAM,eAAe,CAAC;AACvD,OAAO,EAAE,0BAA0B,EAAE,MAAM,oBAAoB,CAAC;AAChE,OAAO,EAAE,uBAAuB,EAAE,MAAM,iBAAiB,CAAC;AAC1D,OAAO,EAAE,mBAAmB,EAAE,MAAM,YAAY,CAAC;AAGjD,OAAO,EAAE,oBAAoB,EAAE,MAAM,aAAa,CAAC;AACnD,OAAO,EAAE,wBAAwB,EAAE,MAAM,kBAAkB,CAAC;AAC5D,OAAO,EAAE,mBAAmB,EAAE,MAAM,YAAY,CAAC;AACjD,OAAO,EAAE,sBAAsB,EAAE,MAAM,eAAe,CAAC;AACvD,OAAO,EAAE,0BAA0B,EAAE,MAAM,oBAAoB,CAAC;AAChE,OAAO,EAAE,uBAAuB,EAAE,MAAM,iBAAiB,CAAC;AAC1D,OAAO,EAAE,mBAAmB,EAAE,MAAM,YAAY,CAAC;AAIjD,MAAM,UAAU,GAAuC;IACrD,MAAM,EAAE,oBAAoB;IAC5B,aAAa,EAAE,wBAAwB;IACvC,KAAK,EAAE,mBAAmB;IAC1B,QAAQ,EAAE,sBAAsB;IAChC,eAAe,EAAE,0BAA0B;IAC3C,YAAY,EAAE,uBAAuB;IACrC,KAAK,EAAE,mBAAmB;CAC3B,CAAC;AAEF,MAAM,UAAU,kBAAkB,CAAC,OAAkB;IACnD,OAAO,UAAU,CAAC,OAAO,CAAC,CAAC;AAC7B,CAAC"}
@@ -0,0 +1,5 @@
1
+ /**
2
+ * Windsurf MCP configuration generator
3
+ */
4
+ export declare function generateWindsurfConfig(_memhubPath: string): Record<string, unknown>;
5
+ //# sourceMappingURL=windsurf.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"windsurf.d.ts","sourceRoot":"","sources":["../../../../src/cli/agents/windsurf.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,wBAAgB,sBAAsB,CAAC,WAAW,EAAE,MAAM,GAAG,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CASnF"}
@@ -0,0 +1,14 @@
1
+ /**
2
+ * Windsurf MCP configuration generator
3
+ */
4
+ export function generateWindsurfConfig(_memhubPath) {
5
+ return {
6
+ mcpServers: {
7
+ memhub: {
8
+ command: 'npx',
9
+ args: ['-y', '@synth-coder/memhub'],
10
+ },
11
+ },
12
+ };
13
+ }
14
+ //# sourceMappingURL=windsurf.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"windsurf.js","sourceRoot":"","sources":["../../../../src/cli/agents/windsurf.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,MAAM,UAAU,sBAAsB,CAAC,WAAmB;IACxD,OAAO;QACL,UAAU,EAAE;YACV,MAAM,EAAE;gBACN,OAAO,EAAE,KAAK;gBACd,IAAI,EAAE,CAAC,IAAI,EAAE,qBAAqB,CAAC;aACpC;SACF;KACF,CAAC;AACJ,CAAC"}
@@ -0,0 +1,8 @@
1
+ #!/usr/bin/env node
2
+ /**
3
+ * MemHub CLI entry point
4
+ * - No args: start MCP server
5
+ * - With args: run CLI commands
6
+ */
7
+ export {};
8
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/cli/index.ts"],"names":[],"mappings":";AACA;;;;GAIG"}
@@ -0,0 +1,168 @@
1
+ #!/usr/bin/env node
2
+ /**
3
+ * MemHub CLI entry point
4
+ * - No args: start MCP server
5
+ * - With args: run CLI commands
6
+ */
7
+ import { readFileSync, existsSync } from 'fs';
8
+ import { join, dirname } from 'path';
9
+ import { fileURLToPath } from 'url';
10
+ import * as p from '@clack/prompts';
11
+ import { AGENTS } from './types.js';
12
+ import { initAgent, selectAgentInteractive } from './init.js';
13
+ import { createMcpServer } from '../server/mcp-server.js';
14
+ import { StdioServerTransport } from '@modelcontextprotocol/sdk/server/stdio.js';
15
+ const __filename = fileURLToPath(import.meta.url);
16
+ const __dirname = dirname(__filename);
17
+ // Get package version
18
+ let packageJsonPath = join(__dirname, '../../../package.json');
19
+ if (!existsSync(packageJsonPath)) {
20
+ packageJsonPath = join(__dirname, '../../package.json');
21
+ }
22
+ const packageJson = JSON.parse(readFileSync(packageJsonPath, 'utf-8'));
23
+ const VERSION = packageJson.version || '0.0.0';
24
+ /**
25
+ * Start MCP server (no args mode)
26
+ */
27
+ async function startMcpServer() {
28
+ const server = createMcpServer();
29
+ const transport = new StdioServerTransport();
30
+ await server.connect(transport);
31
+ console.error('MemHub MCP Server running on stdio');
32
+ }
33
+ function printHelp() {
34
+ // eslint-disable-next-line no-console
35
+ console.log(`
36
+ MemHub CLI v${VERSION} - Git-friendly memory for AI agents
37
+
38
+ Usage:
39
+ memhub Start MCP server (default)
40
+ memhub init [options] Configure MemHub for your AI agent
41
+ memhub --help Show this help message
42
+ memhub --version Show version
43
+
44
+ Options:
45
+ -a, --agent <agent> Agent type (skip interactive selection)
46
+ -f, --force Update existing configuration
47
+ -l, --local Configure for current project (default: global)
48
+
49
+ Supported agents:
50
+ ${AGENTS.map(a => ` ${a.id.padEnd(15)} ${a.name}`).join('\n')}
51
+
52
+ Examples:
53
+ memhub # Start MCP server
54
+ memhub init # Interactive selection (global)
55
+ memhub init --local # Interactive selection (project)
56
+ memhub init --agent cursor # Configure for Cursor (global)
57
+ memhub init -a claude-code -l # Configure for Claude Code (project)
58
+ `);
59
+ }
60
+ function printVersion() {
61
+ // eslint-disable-next-line no-console
62
+ console.log(`MemHub CLI v${VERSION}`);
63
+ }
64
+ function parseAgent(value) {
65
+ const validAgents = AGENTS.map(a => a.id);
66
+ if (validAgents.includes(value)) {
67
+ return value;
68
+ }
69
+ console.error(`Invalid agent: ${value}`);
70
+ console.error(`Valid agents: ${validAgents.join(', ')}`);
71
+ return null;
72
+ }
73
+ async function runCli(args) {
74
+ // Parse command
75
+ const command = args[0];
76
+ if (command === '--help' || command === '-h') {
77
+ printHelp();
78
+ process.exit(0);
79
+ }
80
+ if (command === '--version' || command === '-v') {
81
+ printVersion();
82
+ process.exit(0);
83
+ }
84
+ if (command !== 'init') {
85
+ p.log.error(`Unknown command: ${command}`);
86
+ p.log.info('Run "memhub --help" for usage information.');
87
+ process.exit(1);
88
+ }
89
+ // Parse init options
90
+ let agent;
91
+ let force = false;
92
+ let local = false;
93
+ for (let i = 1; i < args.length; i++) {
94
+ const arg = args[i];
95
+ if (arg === '-a' || arg === '--agent') {
96
+ const value = args[++i];
97
+ if (!value) {
98
+ p.log.error('--agent requires a value');
99
+ process.exit(1);
100
+ }
101
+ const parsed = parseAgent(value);
102
+ if (!parsed) {
103
+ process.exit(1);
104
+ }
105
+ agent = parsed;
106
+ }
107
+ else if (arg === '-f' || arg === '--force') {
108
+ force = true;
109
+ }
110
+ else if (arg === '-l' || arg === '--local') {
111
+ local = true;
112
+ }
113
+ else {
114
+ p.log.error(`Unknown option: ${arg}`);
115
+ process.exit(1);
116
+ }
117
+ }
118
+ // Start interactive session
119
+ p.intro(`MemHub v${VERSION}`);
120
+ // If no agent specified, run interactive selection
121
+ if (!agent) {
122
+ const selectedAgent = await selectAgentInteractive();
123
+ if (!selectedAgent) {
124
+ p.cancel('Operation cancelled.');
125
+ process.exit(0);
126
+ }
127
+ agent = selectedAgent;
128
+ }
129
+ // Run init with spinner
130
+ const s = p.spinner();
131
+ s.start(`Configuring MemHub for ${agent}...`);
132
+ const result = initAgent({
133
+ agent,
134
+ force,
135
+ local,
136
+ });
137
+ if (result.success) {
138
+ s.stop(`Configured for ${result.agent.name}`);
139
+ p.log.success(`MCP config: ${result.configPath}`);
140
+ if (result.instructionsUpdated) {
141
+ p.log.success(`Instructions: ${result.instructionsPath} (${result.instructionsReason})`);
142
+ }
143
+ else {
144
+ p.log.info(`Instructions: ${result.instructionsPath} (${result.instructionsReason})`);
145
+ }
146
+ p.outro(`Restart your agent to start using MemHub.`);
147
+ }
148
+ else {
149
+ s.stop('Configuration failed');
150
+ p.log.error(result.error);
151
+ process.exit(1);
152
+ }
153
+ }
154
+ async function main() {
155
+ const args = process.argv.slice(2);
156
+ // No args: start MCP server
157
+ if (args.length === 0) {
158
+ await startMcpServer();
159
+ return;
160
+ }
161
+ // With args: run CLI
162
+ await runCli(args);
163
+ }
164
+ main().catch(error => {
165
+ console.error('Fatal error:', error);
166
+ process.exit(1);
167
+ });
168
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/cli/index.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,34 @@
1
+ /**
2
+ * Init command implementation
3
+ * Generates MCP configuration for different AI agents
4
+ */
5
+ import { type AgentType, type AgentConfig } from './types.js';
6
+ export interface InitOptions {
7
+ readonly agent: AgentType;
8
+ /** @deprecated Use local instead */
9
+ readonly projectPath?: string;
10
+ readonly force?: boolean;
11
+ readonly local?: boolean;
12
+ }
13
+ export interface InitResult {
14
+ readonly success: true;
15
+ readonly configPath: string;
16
+ readonly instructionsPath: string;
17
+ readonly instructionsUpdated: boolean;
18
+ readonly instructionsReason: string;
19
+ readonly agent: AgentConfig;
20
+ }
21
+ export interface InitError {
22
+ readonly success: false;
23
+ readonly error: string;
24
+ }
25
+ export type InitOutcome = InitResult | InitError;
26
+ /**
27
+ * Run interactive agent selection using clack
28
+ */
29
+ export declare function selectAgentInteractive(): Promise<AgentType | null>;
30
+ /**
31
+ * Generate and write MCP configuration for the specified agent
32
+ */
33
+ export declare function initAgent(options: InitOptions): InitOutcome;
34
+ //# sourceMappingURL=init.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"init.d.ts","sourceRoot":"","sources":["../../../src/cli/init.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAMH,OAAO,EAAU,KAAK,SAAS,EAAE,KAAK,WAAW,EAAgB,MAAM,YAAY,CAAC;AAKpF,MAAM,WAAW,WAAW;IAC1B,QAAQ,CAAC,KAAK,EAAE,SAAS,CAAC;IAC1B,oCAAoC;IACpC,QAAQ,CAAC,WAAW,CAAC,EAAE,MAAM,CAAC;IAC9B,QAAQ,CAAC,KAAK,CAAC,EAAE,OAAO,CAAC;IACzB,QAAQ,CAAC,KAAK,CAAC,EAAE,OAAO,CAAC;CAC1B;AAED,MAAM,WAAW,UAAU;IACzB,QAAQ,CAAC,OAAO,EAAE,IAAI,CAAC;IACvB,QAAQ,CAAC,UAAU,EAAE,MAAM,CAAC;IAC5B,QAAQ,CAAC,gBAAgB,EAAE,MAAM,CAAC;IAClC,QAAQ,CAAC,mBAAmB,EAAE,OAAO,CAAC;IACtC,QAAQ,CAAC,kBAAkB,EAAE,MAAM,CAAC;IACpC,QAAQ,CAAC,KAAK,EAAE,WAAW,CAAC;CAC7B;AAED,MAAM,WAAW,SAAS;IACxB,QAAQ,CAAC,OAAO,EAAE,KAAK,CAAC;IACxB,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAC;CACxB;AAED,MAAM,MAAM,WAAW,GAAG,UAAU,GAAG,SAAS,CAAC;AAsDjD;;GAEG;AACH,wBAAsB,sBAAsB,IAAI,OAAO,CAAC,SAAS,GAAG,IAAI,CAAC,CAexE;AAED;;GAEG;AACH,wBAAgB,SAAS,CAAC,OAAO,EAAE,WAAW,GAAG,WAAW,CAwG3D"}