keepmind 1.0.0

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 (105) hide show
  1. package/.agents/plugins/marketplace.json +20 -0
  2. package/.codex-plugin/plugin.json +46 -0
  3. package/LICENSE +202 -0
  4. package/README.md +139 -0
  5. package/dist/npx-cli/index.js +1398 -0
  6. package/dist/opencode-plugin/index.js +68 -0
  7. package/openclaw/Dockerfile.e2e +46 -0
  8. package/openclaw/SKILL.md +462 -0
  9. package/openclaw/TESTING.md +279 -0
  10. package/openclaw/dist/index.js +20 -0
  11. package/openclaw/e2e-verify.sh +222 -0
  12. package/openclaw/install.sh +1653 -0
  13. package/openclaw/openclaw.plugin.json +98 -0
  14. package/openclaw/package.json +21 -0
  15. package/openclaw/skills/do/SKILL.md +1 -0
  16. package/openclaw/skills/make-plan/SKILL.md +1 -0
  17. package/openclaw/src/index.test.ts +1178 -0
  18. package/openclaw/src/index.ts +1136 -0
  19. package/openclaw/test-e2e.sh +40 -0
  20. package/openclaw/test-install.sh +2086 -0
  21. package/openclaw/test-sse-consumer.js +98 -0
  22. package/openclaw/tsconfig.json +26 -0
  23. package/package.json +187 -0
  24. package/plugin/.claude-plugin/plugin.json +24 -0
  25. package/plugin/.codex-plugin/plugin.json +46 -0
  26. package/plugin/.mcp.json +12 -0
  27. package/plugin/bun.lock +325 -0
  28. package/plugin/hooks/bugfixes-2026-01-10.md +92 -0
  29. package/plugin/hooks/codex-hooks.json +63 -0
  30. package/plugin/hooks/hooks.json +117 -0
  31. package/plugin/modes/code--ar.json +24 -0
  32. package/plugin/modes/code--bn.json +24 -0
  33. package/plugin/modes/code--chill.json +8 -0
  34. package/plugin/modes/code--cs.json +24 -0
  35. package/plugin/modes/code--da.json +24 -0
  36. package/plugin/modes/code--de.json +24 -0
  37. package/plugin/modes/code--el.json +24 -0
  38. package/plugin/modes/code--es.json +24 -0
  39. package/plugin/modes/code--fi.json +24 -0
  40. package/plugin/modes/code--fr.json +24 -0
  41. package/plugin/modes/code--he.json +24 -0
  42. package/plugin/modes/code--hi.json +24 -0
  43. package/plugin/modes/code--hu.json +24 -0
  44. package/plugin/modes/code--id.json +24 -0
  45. package/plugin/modes/code--it.json +24 -0
  46. package/plugin/modes/code--ja.json +24 -0
  47. package/plugin/modes/code--ko.json +24 -0
  48. package/plugin/modes/code--nl.json +24 -0
  49. package/plugin/modes/code--no.json +24 -0
  50. package/plugin/modes/code--pl.json +24 -0
  51. package/plugin/modes/code--pt-br.json +24 -0
  52. package/plugin/modes/code--ro.json +24 -0
  53. package/plugin/modes/code--ru.json +24 -0
  54. package/plugin/modes/code--sv.json +24 -0
  55. package/plugin/modes/code--th.json +24 -0
  56. package/plugin/modes/code--tr.json +24 -0
  57. package/plugin/modes/code--uk.json +24 -0
  58. package/plugin/modes/code--ur.json +25 -0
  59. package/plugin/modes/code--vi.json +24 -0
  60. package/plugin/modes/code--zh.json +24 -0
  61. package/plugin/modes/code.json +139 -0
  62. package/plugin/modes/email-investigation.json +120 -0
  63. package/plugin/modes/law-study--chill.json +7 -0
  64. package/plugin/modes/law-study-CLAUDE.md +85 -0
  65. package/plugin/modes/law-study.json +120 -0
  66. package/plugin/modes/meme-tokens.json +125 -0
  67. package/plugin/package.json +47 -0
  68. package/plugin/scripts/bun-runner.js +229 -0
  69. package/plugin/scripts/context-generator.cjs +1005 -0
  70. package/plugin/scripts/mcp-server.cjs +247 -0
  71. package/plugin/scripts/statusline-counts.js +45 -0
  72. package/plugin/scripts/transcript-watcher.cjs +27 -0
  73. package/plugin/scripts/version-check.js +193 -0
  74. package/plugin/scripts/worker-cli.js +19 -0
  75. package/plugin/scripts/worker-service.cjs +2638 -0
  76. package/plugin/scripts/worker-wrapper.cjs +2 -0
  77. package/plugin/skills/babysit/SKILL.md +87 -0
  78. package/plugin/skills/design-is/SKILL.md +312 -0
  79. package/plugin/skills/do/SKILL.md +45 -0
  80. package/plugin/skills/how-it-works/SKILL.md +22 -0
  81. package/plugin/skills/how-it-works/onboarding-explainer.md +17 -0
  82. package/plugin/skills/knowledge-agent/SKILL.md +80 -0
  83. package/plugin/skills/learn-codebase/SKILL.md +21 -0
  84. package/plugin/skills/make-plan/SKILL.md +67 -0
  85. package/plugin/skills/mem-search/SKILL.md +131 -0
  86. package/plugin/skills/oh-my-issues/SKILL.md +226 -0
  87. package/plugin/skills/pathfinder/SKILL.md +111 -0
  88. package/plugin/skills/smart-explore/SKILL.md +193 -0
  89. package/plugin/skills/standup/SKILL.md +142 -0
  90. package/plugin/skills/standup/agent-brief.md +47 -0
  91. package/plugin/skills/standup/standup.mjs +662 -0
  92. package/plugin/skills/timeline-report/SKILL.md +211 -0
  93. package/plugin/skills/version-bump/SKILL.md +74 -0
  94. package/plugin/skills/version-bump/scripts/generate_changelog.js +34 -0
  95. package/plugin/skills/weekly-digests/SKILL.md +262 -0
  96. package/plugin/skills/what-the/SKILL.md +6 -0
  97. package/plugin/skills/wowerpoint/SKILL.md +205 -0
  98. package/plugin/ui/assets/fonts/monaspace-radon-var.woff +0 -0
  99. package/plugin/ui/assets/fonts/monaspace-radon-var.woff2 +0 -0
  100. package/plugin/ui/icon-thick-completed.svg +8 -0
  101. package/plugin/ui/icon-thick-investigated.svg +8 -0
  102. package/plugin/ui/icon-thick-learned.svg +12 -0
  103. package/plugin/ui/icon-thick-next-steps.svg +8 -0
  104. package/plugin/ui/viewer-bundle.js +65 -0
  105. package/plugin/ui/viewer.html +3302 -0
@@ -0,0 +1,98 @@
1
+
2
+ import claudeMemPlugin from "./dist/index.js";
3
+
4
+ let registeredService = null;
5
+ const registeredCommands = new Map();
6
+ const eventHandlers = new Map();
7
+ const logs = [];
8
+
9
+ const mockApi = {
10
+ id: "claude-mem",
11
+ name: "Claude-Mem (Persistent Memory)",
12
+ version: "1.0.0",
13
+ source: "/test/extensions/claude-mem/dist/index.js",
14
+ config: {},
15
+ pluginConfig: {},
16
+ logger: {
17
+ info: (message) => { logs.push(message); },
18
+ warn: (message) => { logs.push(message); },
19
+ error: (message) => { logs.push(message); },
20
+ debug: (message) => { logs.push(message); },
21
+ },
22
+ registerService: (service) => {
23
+ registeredService = service;
24
+ },
25
+ registerCommand: (command) => {
26
+ registeredCommands.set(command.name, command);
27
+ },
28
+ on: (event, callback) => {
29
+ if (!eventHandlers.has(event)) {
30
+ eventHandlers.set(event, []);
31
+ }
32
+ eventHandlers.get(event).push(callback);
33
+ },
34
+ runtime: {
35
+ channel: {
36
+ telegram: { sendMessageTelegram: async () => {} },
37
+ discord: { sendMessageDiscord: async () => {} },
38
+ signal: { sendMessageSignal: async () => {} },
39
+ slack: { sendMessageSlack: async () => {} },
40
+ whatsapp: { sendMessageWhatsApp: async () => {} },
41
+ line: { sendMessageLine: async () => {} },
42
+ },
43
+ },
44
+ };
45
+
46
+ claudeMemPlugin(mockApi);
47
+
48
+ let failures = 0;
49
+
50
+ if (!registeredService) {
51
+ console.error("FAIL: No service was registered");
52
+ failures++;
53
+ } else if (registeredService.id !== "claude-mem-observation-feed") {
54
+ console.error(
55
+ `FAIL: Service ID is "${registeredService.id}", expected "claude-mem-observation-feed"`
56
+ );
57
+ failures++;
58
+ } else {
59
+ console.log("OK: Service registered with id 'claude-mem-observation-feed'");
60
+ }
61
+
62
+ if (!registeredCommands.has("claude-mem-feed")) {
63
+ console.error("FAIL: No 'claude-mem-feed' command registered");
64
+ failures++;
65
+ } else {
66
+ console.log("OK: Command registered with name 'claude-mem-feed'");
67
+ }
68
+
69
+ if (!registeredCommands.has("claude-mem-status")) {
70
+ console.error("FAIL: No 'claude-mem-status' command registered");
71
+ failures++;
72
+ } else {
73
+ console.log("OK: Command registered with name 'claude-mem-status'");
74
+ }
75
+
76
+ const expectedEvents = ["before_agent_start", "tool_result_persist", "agent_end", "gateway_start"];
77
+ for (const event of expectedEvents) {
78
+ if (!eventHandlers.has(event) || eventHandlers.get(event).length === 0) {
79
+ console.error(`FAIL: No handler registered for '${event}'`);
80
+ failures++;
81
+ } else {
82
+ console.log(`OK: Event handler registered for '${event}'`);
83
+ }
84
+ }
85
+
86
+ if (!logs.some((l) => l.includes("plugin loaded"))) {
87
+ console.error("FAIL: Plugin did not log a load message");
88
+ failures++;
89
+ } else {
90
+ console.log("OK: Plugin logged load message");
91
+ }
92
+
93
+ if (failures > 0) {
94
+ console.error(`\nFAIL: ${failures} check(s) failed`);
95
+ process.exit(1);
96
+ } else {
97
+ console.log("\nPASS: Plugin registers service, commands, and event handlers correctly");
98
+ }
@@ -0,0 +1,26 @@
1
+ {
2
+ "compilerOptions": {
3
+ "target": "ES2022",
4
+ "module": "ESNext",
5
+ "moduleResolution": "node",
6
+ "lib": ["ES2022", "DOM"],
7
+ "outDir": "./dist",
8
+ "rootDir": "./src",
9
+ "strict": true,
10
+ "esModuleInterop": true,
11
+ "skipLibCheck": true,
12
+ "forceConsistentCasingInFileNames": true,
13
+ "resolveJsonModule": true,
14
+ "declaration": true,
15
+ "declarationMap": true,
16
+ "sourceMap": true,
17
+ "allowSyntheticDefaultImports": true
18
+ },
19
+ "include": [
20
+ "src/**/*"
21
+ ],
22
+ "exclude": [
23
+ "node_modules",
24
+ "dist"
25
+ ]
26
+ }
package/package.json ADDED
@@ -0,0 +1,187 @@
1
+ {
2
+ "name": "keepmind",
3
+ "version": "1.0.0",
4
+ "description": "Memory compression system for Claude Code - persist context across sessions (node-only fork of claude-mem)",
5
+ "keywords": [
6
+ "claude",
7
+ "claude-code",
8
+ "claude-agent-sdk",
9
+ "mcp",
10
+ "plugin",
11
+ "memory",
12
+ "compression",
13
+ "knowledge-graph",
14
+ "transcript",
15
+ "typescript",
16
+ "nodejs"
17
+ ],
18
+ "author": "Manuel Staggl",
19
+ "license": "Apache-2.0",
20
+ "repository": {
21
+ "type": "git",
22
+ "url": "git+https://github.com/ManuelStaggl/keepmind.git"
23
+ },
24
+ "homepage": "https://github.com/ManuelStaggl/keepmind#readme",
25
+ "bugs": {
26
+ "url": "https://github.com/ManuelStaggl/keepmind/issues"
27
+ },
28
+ "type": "module",
29
+ "bin": {
30
+ "keepmind": "dist/npx-cli/index.js"
31
+ },
32
+ "exports": {
33
+ "./modes/*": "./plugin/modes/*"
34
+ },
35
+ "files": [
36
+ "dist",
37
+ ".agents/plugins/marketplace.json",
38
+ ".codex-plugin",
39
+ "plugin/.claude-plugin",
40
+ "plugin/.codex-plugin",
41
+ "plugin/.mcp.json",
42
+ "plugin/package.json",
43
+ "plugin/bun.lock",
44
+ "plugin/hooks",
45
+ "plugin/modes",
46
+ "plugin/scripts/*.js",
47
+ "plugin/scripts/*.cjs",
48
+ "plugin/skills",
49
+ "plugin/ui",
50
+ "openclaw"
51
+ ],
52
+ "engines": {
53
+ "node": ">=22.5.0"
54
+ },
55
+ "scripts": {
56
+ "dev": "npm run build-and-sync",
57
+ "build": "node scripts/sync-plugin-manifests.js && node scripts/build-hooks.js && node scripts/gen-plugin-lockfile.cjs",
58
+ "build-and-sync": "npm run build && npm run sync-marketplace && node scripts/restart-marketplace-worker.cjs",
59
+ "sync-marketplace": "node scripts/sync-marketplace.cjs",
60
+ "sync-marketplace:force": "node scripts/sync-marketplace.cjs --force",
61
+ "build:binaries": "node scripts/build-worker-binary.js",
62
+ "build:cli-binary": "esbuild ./src/services/worker-service.ts --bundle --platform=node --format=cjs --minify --external:node:sqlite --banner:js=\"#!/usr/bin/env node\" --outfile=plugin/scripts/keepmind.cjs",
63
+ "worker:logs": "node scripts/worker-logs.cjs -n 50",
64
+ "worker:tail": "node scripts/worker-logs.cjs -n 50 --follow",
65
+ "changelog:generate": "node scripts/generate-changelog.js",
66
+ "discord:notify": "node scripts/discord-release-notify.js",
67
+ "worker:start": "node plugin/scripts/worker-service.cjs start",
68
+ "worker:stop": "node plugin/scripts/worker-service.cjs stop",
69
+ "worker:restart": "node plugin/scripts/worker-service.cjs restart",
70
+ "worker:status": "node plugin/scripts/worker-service.cjs status",
71
+ "bug-report": "npx tsx scripts/bug-report/cli.ts",
72
+ "cursor:install": "node plugin/scripts/worker-service.cjs cursor install",
73
+ "cursor:uninstall": "node plugin/scripts/worker-service.cjs cursor uninstall",
74
+ "cursor:status": "node plugin/scripts/worker-service.cjs cursor status",
75
+ "cursor:setup": "node plugin/scripts/worker-service.cjs cursor setup",
76
+ "lint:hook-io": "node scripts/check-hook-io-discipline.cjs",
77
+ "lint:spawn-env": "node scripts/check-spawn-env-discipline.cjs",
78
+ "typecheck": "tsc --noEmit && tsc --noEmit -p src/ui/viewer/tsconfig.json",
79
+ "typecheck:root": "tsc --noEmit",
80
+ "typecheck:viewer": "tsc --noEmit -p src/ui/viewer/tsconfig.json",
81
+ "test": "node --import tsx --import ./tests/preload.ts --experimental-test-module-mocks --test \"tests/**/*.test.ts\"",
82
+ "test:sqlite": "node --import tsx --import ./tests/preload.ts --experimental-test-module-mocks --test \"tests/sqlite/**/*.test.ts\"",
83
+ "test:agents": "node --import tsx --import ./tests/preload.ts --experimental-test-module-mocks --test \"tests/worker/agents/**/*.test.ts\"",
84
+ "test:search": "node --import tsx --import ./tests/preload.ts --experimental-test-module-mocks --test \"tests/worker/search/**/*.test.ts\"",
85
+ "test:context": "node --import tsx --import ./tests/preload.ts --experimental-test-module-mocks --test \"tests/context/**/*.test.ts\"",
86
+ "test:infra": "node --import tsx --import ./tests/preload.ts --experimental-test-module-mocks --test \"tests/infrastructure/**/*.test.ts\"",
87
+ "check:postinstall-allowlist": "node scripts/check-postinstall-allowlist.js",
88
+ "smoke:clean-room": "node scripts/smoke-clean-room.cjs",
89
+ "prepublishOnly": "npm run build && node scripts/check-postinstall-allowlist.js",
90
+ "release": "np",
91
+ "release:patch": "np patch --no-cleanup",
92
+ "release:minor": "np minor --no-cleanup",
93
+ "release:major": "np major --no-cleanup"
94
+ },
95
+ "np": {
96
+ "yarn": false,
97
+ "contents": ".",
98
+ "testScript": "test",
99
+ "2fa": false
100
+ },
101
+ "dependencies": {
102
+ "@huggingface/transformers": "^4.2.0",
103
+ "@modelcontextprotocol/sdk": "^1.29.0",
104
+ "sqlite-vec": "^0.1.9",
105
+ "zod": "^4.4.3"
106
+ },
107
+ "//dependencies-note": "Local-only fork: the cloud/SaaS layer (Postgres + BullMQ + better-auth) and the `claude-mem/sdk` export were removed, so pg/better-auth/@better-auth/api-key/bullmq/ioredis are gone. zod + @modelcontextprotocol/sdk survive the bundler as live `import`/`require` in a shipped artifact (the mcp-server bundles zod). @huggingface/transformers + sqlite-vec power the in-process vector search (Phase 2, replacing the chroma-mcp/uvx subprocess) and are intentionally EXTERNALIZED from the worker bundle — transformers pulls onnxruntime-node (.node) and sqlite-vec loads a per-platform .dll/.so via getLoadablePath(), neither of which can be esbuild-inlined; they resolve from node_modules (and the generated plugin/package.json) at runtime. Everything else (express, react, react-dom, cors, dompurify, handlebars, @clack/prompts, ansi-to-html, glob, picocolors, shell-quote, yaml, zod-to-json-schema, @anthropic-ai/claude-agent-sdk) is esbuild-inlined into the worker/npx bundles, so it is a build-time devDependency.",
108
+ "overrides": {
109
+ "tmp": "^0.2.7"
110
+ },
111
+ "devDependencies": {
112
+ "@anthropic-ai/claude-agent-sdk": "^0.3.172",
113
+ "@clack/prompts": "^1.3.0",
114
+ "ansi-to-html": "^0.7.2",
115
+ "cors": "^2.8.6",
116
+ "dompurify": "^3.4.9",
117
+ "express": "^5.2.1",
118
+ "glob": "^13.0.6",
119
+ "handlebars": "^4.7.9",
120
+ "picocolors": "^1.1.1",
121
+ "react": "^19.2.6",
122
+ "react-dom": "^19.2.6",
123
+ "shell-quote": "^1.8.3",
124
+ "yaml": "^2.8.4",
125
+ "zod-to-json-schema": "^3.25.2",
126
+ "@derekstride/tree-sitter-sql": "^0.3.11",
127
+ "@tree-sitter-grammars/tree-sitter-lua": "^0.4.1",
128
+ "@tree-sitter-grammars/tree-sitter-markdown": "^0.3.2",
129
+ "@tree-sitter-grammars/tree-sitter-toml": "^0.7.0",
130
+ "@tree-sitter-grammars/tree-sitter-yaml": "^0.7.1",
131
+ "@tree-sitter-grammars/tree-sitter-zig": "^1.1.2",
132
+ "@types/bun": "^1.3.13",
133
+ "@types/cors": "^2.8.19",
134
+ "@types/express": "^5.0.6",
135
+ "@types/node": "^25.9.2",
136
+ "@types/react": "^19.2.17",
137
+ "@types/react-dom": "^19.2.3",
138
+ "esbuild": "^0.28.0",
139
+ "jimp": "^1.6.1",
140
+ "np": "^11.2.0",
141
+ "parse5": "^8.0.1",
142
+ "postcss": "^8.5.14",
143
+ "remark-mdx": "^3.1.1",
144
+ "remark-parse": "^11.0.0",
145
+ "tree-sitter-bash": "^0.25.1",
146
+ "tree-sitter-c": "^0.24.1",
147
+ "tree-sitter-cli": "^0.26.8",
148
+ "tree-sitter-cpp": "^0.23.4",
149
+ "tree-sitter-css": "^0.25.0",
150
+ "tree-sitter-elixir": "^0.3.5",
151
+ "tree-sitter-go": "^0.25.0",
152
+ "tree-sitter-haskell": "^0.23.1",
153
+ "tree-sitter-java": "^0.23.5",
154
+ "tree-sitter-javascript": "^0.25.0",
155
+ "tree-sitter-kotlin": "^0.3.8",
156
+ "tree-sitter-php": "^0.24.2",
157
+ "tree-sitter-python": "^0.25.0",
158
+ "tree-sitter-ruby": "^0.23.1",
159
+ "tree-sitter-rust": "^0.24.0",
160
+ "tree-sitter-scala": "^0.24.0",
161
+ "tree-sitter-scss": "^1.0.0",
162
+ "tree-sitter-swift": "^0.7.1",
163
+ "tree-sitter-typescript": "^0.23.2",
164
+ "ts-prune": "^0.10.3",
165
+ "tsup": "^8.5.1",
166
+ "tsx": "^4.21.0",
167
+ "typescript": "^6.0.3",
168
+ "unified": "^11.0.5",
169
+ "unist-util-visit": "^5.1.0"
170
+ },
171
+ "optionalDependencies": {
172
+ "tree-kill": "^1.2.2"
173
+ },
174
+ "trustedDependencies": [
175
+ "esbuild",
176
+ "tree-sitter-c",
177
+ "tree-sitter-cli",
178
+ "tree-sitter-cpp",
179
+ "tree-sitter-go",
180
+ "tree-sitter-java",
181
+ "tree-sitter-javascript",
182
+ "tree-sitter-python",
183
+ "tree-sitter-ruby",
184
+ "tree-sitter-rust",
185
+ "tree-sitter-typescript"
186
+ ]
187
+ }
@@ -0,0 +1,24 @@
1
+ {
2
+ "name": "keepmind",
3
+ "version": "1.0.0",
4
+ "description": "Memory compression system for Claude Code - persist context across sessions (node-only fork of claude-mem)",
5
+ "author": {
6
+ "name": "Manuel Staggl"
7
+ },
8
+ "repository": "https://github.com/ManuelStaggl/keepmind",
9
+ "license": "Apache-2.0",
10
+ "keywords": [
11
+ "claude",
12
+ "claude-code",
13
+ "claude-agent-sdk",
14
+ "mcp",
15
+ "plugin",
16
+ "memory",
17
+ "compression",
18
+ "knowledge-graph",
19
+ "transcript",
20
+ "typescript",
21
+ "nodejs"
22
+ ],
23
+ "homepage": "https://github.com/ManuelStaggl/keepmind#readme"
24
+ }
@@ -0,0 +1,46 @@
1
+ {
2
+ "name": "keepmind",
3
+ "version": "1.0.0",
4
+ "description": "Memory compression system for Claude Code - persist context across sessions (node-only fork of claude-mem)",
5
+ "author": {
6
+ "name": "Manuel Staggl",
7
+ "url": "https://github.com/ManuelStaggl"
8
+ },
9
+ "homepage": "https://github.com/ManuelStaggl/keepmind#readme",
10
+ "repository": "https://github.com/ManuelStaggl/keepmind",
11
+ "license": "Apache-2.0",
12
+ "keywords": [
13
+ "claude",
14
+ "claude-code",
15
+ "claude-agent-sdk",
16
+ "mcp",
17
+ "plugin",
18
+ "memory",
19
+ "compression",
20
+ "knowledge-graph",
21
+ "transcript",
22
+ "typescript",
23
+ "nodejs"
24
+ ],
25
+ "skills": "./skills/",
26
+ "mcpServers": "./.mcp.json",
27
+ "hooks": "./hooks/codex-hooks.json",
28
+ "interface": {
29
+ "displayName": "keepmind",
30
+ "shortDescription": "Persistent memory and context compression across coding sessions.",
31
+ "longDescription": "keepmind captures coding-session activity, compresses it into reusable observations, and injects relevant context back into future Claude Code and Codex-compatible sessions.",
32
+ "developerName": "Manuel Staggl",
33
+ "category": "Productivity",
34
+ "capabilities": [
35
+ "Interactive",
36
+ "Write"
37
+ ],
38
+ "websiteURL": "https://github.com/ManuelStaggl/keepmind",
39
+ "defaultPrompt": [
40
+ "Find what I already learned about this codebase before I start a new task.",
41
+ "Show recent observations related to the files I am editing right now.",
42
+ "Summarize the last session and inject the most relevant context into this one."
43
+ ],
44
+ "brandColor": "#1F6FEB"
45
+ }
46
+ }
@@ -0,0 +1,12 @@
1
+ {
2
+ "mcpServers": {
3
+ "mcp-search": {
4
+ "type": "stdio",
5
+ "command": "node",
6
+ "args": [
7
+ "-e",
8
+ "const f=require('fs'),p=require('path'),o=require('os'),c=require('child_process');const h=o.homedir();const C=process.env.CLAUDE_CONFIG_DIR||p.join(h,'.claude');const E=process.env.CLAUDE_PLUGIN_ROOT||process.env.PLUGIN_ROOT||'';const d=process.cwd();const L=x=>{try{return f.readdirSync(x).filter(n=>/^\\d/.test(n)).map(n=>p.join(x,n)).filter(z=>{try{return f.statSync(z).isDirectory()}catch{return false}}).sort((a,b)=>f.statSync(b).mtimeMs-f.statSync(a).mtimeMs)}catch{return[]}};const K=[E,p.join(d,\"plugin\"),d,...L(p.join(h,\".codex/plugins/cache/keepmind-local/keepmind\")),...L(p.join(h,\".codex/plugins/cache/keepmind/keepmind\")),...L(p.join(C,\"plugins/cache/keepmind/keepmind\")),p.join(C,\"plugins/marketplaces/keepmind/plugin\")].filter(Boolean);let R=null;for(const k of K){const r=f.existsSync(p.join(k,'plugin','scripts'))?p.join(k,'plugin'):k;if(f.existsSync(p.join(r,'scripts',\"mcp-server.cjs\"))){R=r;break}}if(!R){process.stderr.write(\"keepmind: mcp server not found\\n\");process.exit(1)}const ch=c.spawn(process.execPath,[p.join(R,'scripts',\"mcp-server.cjs\")],{stdio:'inherit'});for(const s of ['SIGTERM','SIGINT','SIGHUP'])process.on(s,()=>{try{ch.kill(s)}catch{}});ch.on('exit',(code,sig)=>{if(sig){process.removeAllListeners(sig);try{process.kill(process.pid,sig)}catch{process.exit(1)}}else process.exit(code==null?0:code)})"
9
+ ]
10
+ }
11
+ }
12
+ }