Skip to content

Commit 918afd7

Browse files
author
Zehee
committed
feat: add kimi-memory-vis dashboard
- Add npx kimi-memory-vis command - Hono-based local server with REST API - Dark-themed SPA for workspace overview, theme timeline, recent decisions, memories - Inline editing of essence.md and theme display names - Copy static files during build - Add integration tests for vis API
1 parent f631d67 commit 918afd7

14 files changed

Lines changed: 2244 additions & 14 deletions

File tree

‎.eslintrc.json‎

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -24,6 +24,7 @@
2424
"@typescript-eslint/no-explicit-any": "warn",
2525
"@typescript-eslint/ban-ts-comment": "off"
2626
},
27+
"ignorePatterns": ["src/vis/static/**"],
2728
"overrides": [
2829
{
2930
"files": ["tests/**/*.ts"],

‎package-lock.json‎

Lines changed: 200 additions & 9 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

‎package.json‎

Lines changed: 9 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,8 @@
77
"type": "module",
88
"bin": {
99
"kimi-code-memory-mcp-server": "dist/server.js",
10-
"kimi-memory-setup": "dist/setup-cli.js"
10+
"kimi-memory-setup": "dist/setup-cli.js",
11+
"kimi-memory-vis": "dist/vis-cli.js"
1112
},
1213
"files": [
1314
"dist/",
@@ -23,10 +24,11 @@
2324
],
2425
"scripts": {
2526
"sync-version": "node scripts/sync-version.mjs",
26-
"build": "npm run sync-version && tsc",
27+
"copy-vis-static": "node scripts/copy-vis-static.mjs",
28+
"build": "npm run sync-version && tsc && npm run copy-vis-static",
2729
"dev": "tsx src/server.ts",
2830
"start": "node dist/server.js",
29-
"test": "tsx tests/test.ts",
31+
"test": "tsx tests/test.ts && tsx tests/vis.test.ts",
3032
"test:unit": "tsx tests/unit/run-all.ts",
3133
"lint": "eslint src tests",
3234
"lint:fix": "eslint src tests --fix",
@@ -54,9 +56,12 @@
5456
},
5557
"homepage": "https://github.com/Zehee/kimi-code-memory-mcp-server#readme",
5658
"dependencies": {
59+
"@hono/node-server": "^2.0.6",
5760
"@modelcontextprotocol/sdk": "^1.0.0",
5861
"@types/better-sqlite3": "^7.6.13",
59-
"better-sqlite3": "^12.11.1"
62+
"better-sqlite3": "^12.11.1",
63+
"hono": "^4.12.27",
64+
"open": "^11.0.0"
6065
},
6166
"devDependencies": {
6267
"@types/node": "^26.0.0",

‎scripts/copy-vis-static.mjs‎

Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,11 @@
1+
import fs from 'fs';
2+
import path from 'path';
3+
import { fileURLToPath } from 'url';
4+
5+
const __dirname = path.dirname(fileURLToPath(import.meta.url));
6+
const src = path.join(__dirname, '..', 'src', 'vis', 'static');
7+
const dest = path.join(__dirname, '..', 'dist', 'vis', 'static');
8+
9+
fs.rmSync(dest, { recursive: true, force: true });
10+
fs.cpSync(src, dest, { recursive: true });
11+
console.log('Copied vis static files to', dest);

‎src/dao/index.ts‎

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -15,7 +15,7 @@ import { FALLBACK_FOLDER_COMMENTS } from './constants.js';
1515
import { IndexStore } from './index-store.js';
1616
import { IndexReconciler } from './index-reconciler.js';
1717
import { IndexCatalog } from './index-catalog.js';
18-
import { MemoryIndexTreeRenderer } from './memory-tree-renderer.js';
18+
import { MemoryIndexTreeRenderer, type TreeNode } from './memory-tree-renderer.js';
1919

2020
export * from './constants.js';
2121
export type { TreeNode } from './memory-tree-renderer.js';
@@ -151,6 +151,10 @@ export class IndexDao {
151151
return this.catalog.listRefs(folder);
152152
}
153153

154+
buildMemoryTreeData(): TreeNode {
155+
return this.catalog.buildMemoryTreeData();
156+
}
157+
154158
buildMemoryIndexTree(recentLimit = 5): string {
155159
const tree = this.catalog.buildMemoryTreeData();
156160
return this.renderer.render(tree, recentLimit);

0 commit comments

Comments
 (0)