kimi-code-memory-mcp-server 0.1.2 → 0.2.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.
- package/CHANGELOG.md +15 -1
- package/README.en.md +7 -0
- package/README.md +11 -2
- package/dist/refine/store.d.ts +4 -0
- package/dist/refine/store.js +14 -0
- package/dist/refine/store.js.map +1 -1
- package/dist/refined-manager.d.ts +4 -0
- package/dist/refined-manager.js +5 -0
- package/dist/refined-manager.js.map +1 -1
- package/dist/theme-manager.d.ts +1 -0
- package/dist/theme-manager.js +7 -0
- package/dist/theme-manager.js.map +1 -1
- package/dist/tools/context-tools.js +56 -0
- package/dist/tools/context-tools.js.map +1 -1
- package/dist/tools/system-tools.js +24 -1
- package/dist/tools/system-tools.js.map +1 -1
- package/dist/tools/theme-tools.js +23 -0
- package/dist/tools/theme-tools.js.map +1 -1
- package/dist/types.d.ts +7 -0
- package/dist/version.d.ts +1 -1
- package/dist/version.js +1 -1
- package/dist/vis/api.d.ts +35 -0
- package/dist/vis/api.js +233 -19
- package/dist/vis/api.js.map +1 -1
- package/dist/vis/server.js +237 -3
- package/dist/vis/server.js.map +1 -1
- package/dist/vis/static/api.js +57 -0
- package/dist/vis/static/app.js +1397 -324
- package/dist/vis/static/index.html +23 -93
- package/dist/vis/static/state.js +26 -0
- package/dist/vis/static/style.css +1190 -344
- package/dist/vis/static/utils/helpers.js +94 -0
- package/dist/vis/static/utils/markdown.js +81 -0
- package/package.json +1 -1
package/dist/vis/api.d.ts
CHANGED
|
@@ -62,12 +62,38 @@ export declare function getWorkspace(ctx: Ctx): WorkspaceInfo;
|
|
|
62
62
|
export declare function getThemes(ctx: Ctx): ThemeInfo[];
|
|
63
63
|
export declare function getThemeTimeline(ctx: Ctx, themeName: string): ThemeTimeline;
|
|
64
64
|
export declare function getRecentDecisions(ctx: Ctx, limit?: number): DecisionItem[];
|
|
65
|
+
export declare function listMemoryFolders(ctx: Ctx): string[];
|
|
65
66
|
export declare function getMemories(ctx: Ctx): MemoryNode;
|
|
66
67
|
export declare function getMemoryContent(ctx: Ctx, folder: string, key: string): {
|
|
67
68
|
content: string;
|
|
68
69
|
title: string;
|
|
69
70
|
tags: string[];
|
|
70
71
|
} | null;
|
|
72
|
+
export declare function writeMemory(ctx: Ctx, folder: string, key: string, options: {
|
|
73
|
+
content?: string;
|
|
74
|
+
title?: string;
|
|
75
|
+
tags?: string[];
|
|
76
|
+
}): Promise<{
|
|
77
|
+
ok: boolean;
|
|
78
|
+
filePath?: string;
|
|
79
|
+
error?: string;
|
|
80
|
+
}>;
|
|
81
|
+
export declare function deleteMemory(ctx: Ctx, folder: string, key: string): Promise<{
|
|
82
|
+
ok: boolean;
|
|
83
|
+
error?: string;
|
|
84
|
+
}>;
|
|
85
|
+
export declare function createFolder(ctx: Ctx, folderPath: string): Promise<{
|
|
86
|
+
ok: boolean;
|
|
87
|
+
error?: string;
|
|
88
|
+
}>;
|
|
89
|
+
export declare function renameFolder(ctx: Ctx, oldFolderPath: string, newFolderPath: string): Promise<{
|
|
90
|
+
ok: boolean;
|
|
91
|
+
error?: string;
|
|
92
|
+
}>;
|
|
93
|
+
export declare function deleteFolder(ctx: Ctx, folderPath: string, recursive?: boolean): Promise<{
|
|
94
|
+
ok: boolean;
|
|
95
|
+
error?: string;
|
|
96
|
+
}>;
|
|
71
97
|
export declare function saveEssence(ctx: Ctx, content: string): {
|
|
72
98
|
ok: boolean;
|
|
73
99
|
};
|
|
@@ -80,3 +106,12 @@ export declare function updateTheme(ctx: Ctx, themeName: string, patch: {
|
|
|
80
106
|
}): {
|
|
81
107
|
ok: boolean;
|
|
82
108
|
};
|
|
109
|
+
export declare function deleteTheme(ctx: Ctx, themeName: string): {
|
|
110
|
+
ok: boolean;
|
|
111
|
+
error?: string;
|
|
112
|
+
};
|
|
113
|
+
export declare function deleteSearchView(ctx: Ctx, key: string, deleteRefinedTurns?: boolean): Promise<{
|
|
114
|
+
ok: boolean;
|
|
115
|
+
error?: string;
|
|
116
|
+
deletedRefinedTurns?: number;
|
|
117
|
+
}>;
|
package/dist/vis/api.js
CHANGED
|
@@ -8,7 +8,9 @@
|
|
|
8
8
|
import fs from 'fs';
|
|
9
9
|
import path from 'path';
|
|
10
10
|
import { getSessionsRoot } from '../config.js';
|
|
11
|
-
import { atomicWriteFile } from '../utils/paths.js';
|
|
11
|
+
import { atomicWriteFile, safeResolve } from '../utils/paths.js';
|
|
12
|
+
import { sanitizeFolder, sanitizeKey, toTitle } from '../utils/validation.js';
|
|
13
|
+
import { safeParseFile } from '../utils/file-helpers.js';
|
|
12
14
|
function readEssence(storeRoot) {
|
|
13
15
|
const essencePath = path.join(storeRoot, 'essence', 'essence.md');
|
|
14
16
|
if (!fs.existsSync(essencePath))
|
|
@@ -154,27 +156,109 @@ export function getRecentDecisions(ctx, limit = 20) {
|
|
|
154
156
|
}
|
|
155
157
|
return decisions;
|
|
156
158
|
}
|
|
157
|
-
function
|
|
158
|
-
const
|
|
159
|
-
|
|
160
|
-
|
|
161
|
-
|
|
162
|
-
|
|
163
|
-
|
|
164
|
-
|
|
165
|
-
|
|
166
|
-
|
|
167
|
-
|
|
168
|
-
|
|
169
|
-
|
|
170
|
-
|
|
171
|
-
|
|
172
|
-
|
|
159
|
+
function validateFolderPath(folder, allowRoot = true) {
|
|
160
|
+
const sanitized = sanitizeFolder(folder);
|
|
161
|
+
if (!sanitized)
|
|
162
|
+
return null;
|
|
163
|
+
if (sanitized !== 'memory' &&
|
|
164
|
+
!sanitized.startsWith('memory/') &&
|
|
165
|
+
sanitized !== 'notes' &&
|
|
166
|
+
!sanitized.startsWith('notes/')) {
|
|
167
|
+
return null;
|
|
168
|
+
}
|
|
169
|
+
if (!allowRoot && (sanitized === 'memory' || sanitized === 'notes'))
|
|
170
|
+
return null;
|
|
171
|
+
return sanitized;
|
|
172
|
+
}
|
|
173
|
+
export function listMemoryFolders(ctx) {
|
|
174
|
+
const folders = [];
|
|
175
|
+
for (const root of ['memory', 'notes']) {
|
|
176
|
+
const rootPath = path.join(ctx.storeRoot, root);
|
|
177
|
+
if (!fs.existsSync(rootPath))
|
|
178
|
+
continue;
|
|
179
|
+
folders.push(root);
|
|
180
|
+
const walk = (dir, prefix) => {
|
|
181
|
+
for (const entry of fs.readdirSync(dir, { withFileTypes: true })) {
|
|
182
|
+
if (!entry.isDirectory())
|
|
183
|
+
continue;
|
|
184
|
+
const rel = prefix ? `${prefix}/${entry.name}` : entry.name;
|
|
185
|
+
folders.push(rel);
|
|
186
|
+
walk(path.join(dir, entry.name), rel);
|
|
187
|
+
}
|
|
188
|
+
};
|
|
189
|
+
walk(rootPath, root);
|
|
190
|
+
}
|
|
191
|
+
return folders.sort();
|
|
192
|
+
}
|
|
193
|
+
function buildRootNode(rootName, index, storeRoot) {
|
|
194
|
+
const root = {
|
|
195
|
+
name: rootName,
|
|
196
|
+
comment: index[`${rootName}/`]?.comment || '',
|
|
197
|
+
files: [],
|
|
198
|
+
children: [],
|
|
173
199
|
};
|
|
200
|
+
for (const key of Object.keys(index).sort()) {
|
|
201
|
+
if (!key.startsWith(`${rootName}/`))
|
|
202
|
+
continue;
|
|
203
|
+
if (key.endsWith('/')) {
|
|
204
|
+
if (key === `${rootName}/`)
|
|
205
|
+
continue;
|
|
206
|
+
const relativeFolder = key.slice(rootName.length + 1, -1);
|
|
207
|
+
const parts = relativeFolder.split('/');
|
|
208
|
+
let current = root;
|
|
209
|
+
let currentPath = rootName;
|
|
210
|
+
for (const part of parts) {
|
|
211
|
+
currentPath = `${currentPath}/${part}`;
|
|
212
|
+
let child = current.children.find((c) => c.name === part);
|
|
213
|
+
if (!child) {
|
|
214
|
+
child = {
|
|
215
|
+
name: part,
|
|
216
|
+
comment: index[`${currentPath}/`]?.comment || '',
|
|
217
|
+
files: [],
|
|
218
|
+
children: [],
|
|
219
|
+
};
|
|
220
|
+
current.children.push(child);
|
|
221
|
+
}
|
|
222
|
+
current = child;
|
|
223
|
+
}
|
|
224
|
+
current.comment = index[key]?.comment || '';
|
|
225
|
+
}
|
|
226
|
+
else if (key.endsWith('.md')) {
|
|
227
|
+
const relativePath = key.slice(rootName.length + 1);
|
|
228
|
+
const dirPart = path.dirname(relativePath);
|
|
229
|
+
const parts = dirPart === '.' ? [] : dirPart.split('/');
|
|
230
|
+
const fileName = path.basename(key, '.md');
|
|
231
|
+
const value = index[key];
|
|
232
|
+
let current = root;
|
|
233
|
+
for (const part of parts) {
|
|
234
|
+
let child = current.children.find((c) => c.name === part);
|
|
235
|
+
if (!child) {
|
|
236
|
+
child = { name: part, comment: '', files: [], children: [] };
|
|
237
|
+
current.children.push(child);
|
|
238
|
+
}
|
|
239
|
+
current = child;
|
|
240
|
+
}
|
|
241
|
+
const filePath = path.join(storeRoot, key);
|
|
242
|
+
const parsed = safeParseFile(filePath);
|
|
243
|
+
current.files.push({
|
|
244
|
+
key: fileName,
|
|
245
|
+
title: value?.title || toTitle(fileName),
|
|
246
|
+
tags: Array.isArray(value?.tags) ? value.tags : [],
|
|
247
|
+
createdAt: String(parsed?.frontmatter?.createdAt || ''),
|
|
248
|
+
updatedAt: String(parsed?.frontmatter?.updatedAt || ''),
|
|
249
|
+
});
|
|
250
|
+
}
|
|
251
|
+
}
|
|
252
|
+
return root;
|
|
174
253
|
}
|
|
175
254
|
export function getMemories(ctx) {
|
|
176
|
-
const
|
|
177
|
-
return
|
|
255
|
+
const index = ctx.indexDao.getIndex().index;
|
|
256
|
+
return {
|
|
257
|
+
name: '',
|
|
258
|
+
comment: '',
|
|
259
|
+
files: [],
|
|
260
|
+
children: [buildRootNode('memory', index, ctx.storeRoot), buildRootNode('notes', index, ctx.storeRoot)],
|
|
261
|
+
};
|
|
178
262
|
}
|
|
179
263
|
export function getMemoryContent(ctx, folder, key) {
|
|
180
264
|
const result = ctx.memoryStore.read(folder, key);
|
|
@@ -186,6 +270,94 @@ export function getMemoryContent(ctx, folder, key) {
|
|
|
186
270
|
tags: Array.isArray(result.tags) ? result.tags : [],
|
|
187
271
|
};
|
|
188
272
|
}
|
|
273
|
+
export async function writeMemory(ctx, folder, key, options) {
|
|
274
|
+
const normalizedFolder = validateFolderPath(folder);
|
|
275
|
+
if (!normalizedFolder) {
|
|
276
|
+
return { ok: false, error: 'Invalid folder path' };
|
|
277
|
+
}
|
|
278
|
+
const normalizedKey = sanitizeKey(key);
|
|
279
|
+
const content = typeof options.content === 'string' ? options.content : '';
|
|
280
|
+
const title = typeof options.title === 'string' ? options.title : undefined;
|
|
281
|
+
const tags = Array.isArray(options.tags) ? options.tags.filter((t) => typeof t === 'string') : [];
|
|
282
|
+
const filePath = ctx.memoryStore.write(normalizedFolder, normalizedKey, content, tags, { title });
|
|
283
|
+
await ctx.indexDao.upsertEntry(filePath);
|
|
284
|
+
return { ok: true, filePath: path.relative(ctx.storeRoot, filePath).replace(/\\/g, '/') };
|
|
285
|
+
}
|
|
286
|
+
export async function deleteMemory(ctx, folder, key) {
|
|
287
|
+
const normalizedFolder = validateFolderPath(folder);
|
|
288
|
+
if (!normalizedFolder) {
|
|
289
|
+
return { ok: false, error: 'Invalid folder path' };
|
|
290
|
+
}
|
|
291
|
+
const normalizedKey = sanitizeKey(key);
|
|
292
|
+
const filePath = ctx.memoryStore.resolveFilePath(normalizedFolder, normalizedKey);
|
|
293
|
+
const relativePath = path.relative(ctx.storeRoot, filePath).replace(/\\/g, '/');
|
|
294
|
+
const deleted = ctx.memoryStore.delete(normalizedFolder, normalizedKey);
|
|
295
|
+
if (!deleted) {
|
|
296
|
+
return { ok: false, error: 'Memory not found' };
|
|
297
|
+
}
|
|
298
|
+
await ctx.indexDao.deleteEntryByPath(relativePath);
|
|
299
|
+
return { ok: true };
|
|
300
|
+
}
|
|
301
|
+
export async function createFolder(ctx, folderPath) {
|
|
302
|
+
const normalized = validateFolderPath(folderPath, false);
|
|
303
|
+
if (!normalized) {
|
|
304
|
+
return { ok: false, error: 'Invalid folder path' };
|
|
305
|
+
}
|
|
306
|
+
const absPath = safeResolve(ctx.storeRoot, normalized);
|
|
307
|
+
if (fs.existsSync(absPath)) {
|
|
308
|
+
return { ok: false, error: 'Folder already exists' };
|
|
309
|
+
}
|
|
310
|
+
fs.mkdirSync(absPath, { recursive: true });
|
|
311
|
+
await ctx.indexDao.setFolderComment(normalized, '');
|
|
312
|
+
return { ok: true };
|
|
313
|
+
}
|
|
314
|
+
export async function renameFolder(ctx, oldFolderPath, newFolderPath) {
|
|
315
|
+
const oldNormalized = validateFolderPath(oldFolderPath, false);
|
|
316
|
+
if (!oldNormalized) {
|
|
317
|
+
return { ok: false, error: 'Invalid source folder path' };
|
|
318
|
+
}
|
|
319
|
+
const newNormalized = validateFolderPath(newFolderPath, false);
|
|
320
|
+
if (!newNormalized) {
|
|
321
|
+
return { ok: false, error: 'Invalid destination folder path' };
|
|
322
|
+
}
|
|
323
|
+
if (oldNormalized === newNormalized) {
|
|
324
|
+
return { ok: false, error: 'Source and destination are the same' };
|
|
325
|
+
}
|
|
326
|
+
const oldAbs = safeResolve(ctx.storeRoot, oldNormalized);
|
|
327
|
+
const newAbs = safeResolve(ctx.storeRoot, newNormalized);
|
|
328
|
+
if (!fs.existsSync(oldAbs)) {
|
|
329
|
+
return { ok: false, error: 'Source folder not found' };
|
|
330
|
+
}
|
|
331
|
+
if (fs.existsSync(newAbs)) {
|
|
332
|
+
return { ok: false, error: 'Destination folder already exists' };
|
|
333
|
+
}
|
|
334
|
+
fs.mkdirSync(path.dirname(newAbs), { recursive: true });
|
|
335
|
+
fs.renameSync(oldAbs, newAbs);
|
|
336
|
+
await ctx.indexDao.reconcileIndex();
|
|
337
|
+
return { ok: true };
|
|
338
|
+
}
|
|
339
|
+
export async function deleteFolder(ctx, folderPath, recursive = false) {
|
|
340
|
+
const normalized = validateFolderPath(folderPath, false);
|
|
341
|
+
if (!normalized) {
|
|
342
|
+
return { ok: false, error: 'Invalid folder path' };
|
|
343
|
+
}
|
|
344
|
+
const absPath = safeResolve(ctx.storeRoot, normalized);
|
|
345
|
+
if (!fs.existsSync(absPath)) {
|
|
346
|
+
return { ok: false, error: 'Folder not found' };
|
|
347
|
+
}
|
|
348
|
+
if (recursive) {
|
|
349
|
+
fs.rmSync(absPath, { recursive: true, force: true });
|
|
350
|
+
}
|
|
351
|
+
else {
|
|
352
|
+
const entries = fs.readdirSync(absPath);
|
|
353
|
+
if (entries.length > 0) {
|
|
354
|
+
return { ok: false, error: 'Folder is not empty' };
|
|
355
|
+
}
|
|
356
|
+
fs.rmdirSync(absPath);
|
|
357
|
+
}
|
|
358
|
+
await ctx.indexDao.reconcileIndex();
|
|
359
|
+
return { ok: true };
|
|
360
|
+
}
|
|
189
361
|
export function saveEssence(ctx, content) {
|
|
190
362
|
const essenceDir = path.join(ctx.storeRoot, 'essence');
|
|
191
363
|
fs.mkdirSync(essenceDir, { recursive: true });
|
|
@@ -209,4 +381,46 @@ export function updateTheme(ctx, themeName, patch) {
|
|
|
209
381
|
ctx.themeManager.saveTheme(themeName, association);
|
|
210
382
|
return { ok: true };
|
|
211
383
|
}
|
|
384
|
+
export function deleteTheme(ctx, themeName) {
|
|
385
|
+
const deleted = ctx.themeManager.deleteTheme(themeName);
|
|
386
|
+
if (!deleted) {
|
|
387
|
+
return { ok: false, error: 'Theme not found' };
|
|
388
|
+
}
|
|
389
|
+
return { ok: true };
|
|
390
|
+
}
|
|
391
|
+
export async function deleteSearchView(ctx, key, deleteRefinedTurns = false) {
|
|
392
|
+
const filePath = path.join(ctx.storeRoot, 'searches', `${key}.json`);
|
|
393
|
+
if (!fs.existsSync(filePath)) {
|
|
394
|
+
return { ok: false, error: 'Search view not found' };
|
|
395
|
+
}
|
|
396
|
+
const refinedTurnsToDelete = [];
|
|
397
|
+
if (deleteRefinedTurns) {
|
|
398
|
+
try {
|
|
399
|
+
const data = JSON.parse(fs.readFileSync(filePath, 'utf8'));
|
|
400
|
+
const clusters = Array.isArray(data.clusters) ? data.clusters : [];
|
|
401
|
+
const seen = new Set();
|
|
402
|
+
for (const cluster of clusters) {
|
|
403
|
+
const members = Array.isArray(cluster.members) ? cluster.members : [];
|
|
404
|
+
for (const m of members) {
|
|
405
|
+
if (m && typeof m.sessionId === 'string' && typeof m.turnId === 'number') {
|
|
406
|
+
const id = `${m.sessionId}:${m.turnId}`;
|
|
407
|
+
if (!seen.has(id)) {
|
|
408
|
+
seen.add(id);
|
|
409
|
+
refinedTurnsToDelete.push({ sessionId: m.sessionId, turnId: m.turnId });
|
|
410
|
+
}
|
|
411
|
+
}
|
|
412
|
+
}
|
|
413
|
+
}
|
|
414
|
+
}
|
|
415
|
+
catch {
|
|
416
|
+
// Fall through to deleting the file even if parsing fails.
|
|
417
|
+
}
|
|
418
|
+
}
|
|
419
|
+
fs.unlinkSync(filePath);
|
|
420
|
+
let deletedRefinedTurns = 0;
|
|
421
|
+
if (deleteRefinedTurns && refinedTurnsToDelete.length > 0) {
|
|
422
|
+
deletedRefinedTurns = await ctx.refinedManager.deleteRefinedTurns(refinedTurnsToDelete);
|
|
423
|
+
}
|
|
424
|
+
return { ok: true, deletedRefinedTurns };
|
|
425
|
+
}
|
|
212
426
|
//# sourceMappingURL=api.js.map
|
package/dist/vis/api.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"api.js","sourceRoot":"","sources":["../../src/vis/api.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"api.js","sourceRoot":"","sources":["../../src/vis/api.ts"],"names":[],"mappings":"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"}
|
package/dist/vis/server.js
CHANGED
|
@@ -7,7 +7,92 @@ import { Hono } from 'hono';
|
|
|
7
7
|
import { serve } from '@hono/node-server';
|
|
8
8
|
import { serveStatic } from '@hono/node-server/serve-static';
|
|
9
9
|
import { getProjectRoot } from '../utils/paths.js';
|
|
10
|
-
import { getWorkspace, getThemes, getThemeTimeline, getRecentDecisions, getMemories, getMemoryContent, saveEssence, updateTheme, } from './api.js';
|
|
10
|
+
import { getWorkspace, getThemes, getThemeTimeline, getRecentDecisions, getMemories, getMemoryContent, saveEssence, updateTheme, deleteTheme, deleteSearchView, listMemoryFolders, writeMemory, deleteMemory, createFolder, renameFolder, deleteFolder, } from './api.js';
|
|
11
|
+
const KIMI_ORIGIN = 'http://127.0.0.1:58627';
|
|
12
|
+
const THEME_CACHE_TTL_MS = 60_000;
|
|
13
|
+
const FALLBACK_CSS = `:root {
|
|
14
|
+
color-scheme: light dark;
|
|
15
|
+
--sans: -apple-system, BlinkMacSystemFont, "Segoe UI", sans-serif;
|
|
16
|
+
--mono: ui-monospace, SFMono-Regular, Menlo, Monaco, Consolas, monospace;
|
|
17
|
+
--r-sm: 6px;
|
|
18
|
+
--r-md: 8px;
|
|
19
|
+
--r-lg: 12px;
|
|
20
|
+
}
|
|
21
|
+
@media (prefers-color-scheme: light) {
|
|
22
|
+
:root {
|
|
23
|
+
--bg: #ffffff;
|
|
24
|
+
--canvas: #f6f8fa;
|
|
25
|
+
--panel: #f6f8fa;
|
|
26
|
+
--panel2: #f3f4f6;
|
|
27
|
+
--line: #d1d9e0;
|
|
28
|
+
--ink: #1f2328;
|
|
29
|
+
--text: #1f2328;
|
|
30
|
+
--muted: #656d76;
|
|
31
|
+
--dim: #8c959f;
|
|
32
|
+
--blue: #0969da;
|
|
33
|
+
--blue2: #218bff;
|
|
34
|
+
--bluebg: #ddf4ff;
|
|
35
|
+
--soft: #f6f8fa;
|
|
36
|
+
--bd: #0969da;
|
|
37
|
+
--ok: #1a7f37;
|
|
38
|
+
--err: #cf222e;
|
|
39
|
+
--warn: #9a6700;
|
|
40
|
+
}
|
|
41
|
+
}
|
|
42
|
+
@media (prefers-color-scheme: dark) {
|
|
43
|
+
:root {
|
|
44
|
+
--bg: #0d1117;
|
|
45
|
+
--canvas: #161b22;
|
|
46
|
+
--panel: #1c2128;
|
|
47
|
+
--panel2: #21262d;
|
|
48
|
+
--line: #2d333b;
|
|
49
|
+
--ink: rgba(255,255,255,0.84);
|
|
50
|
+
--text: rgba(255,255,255,0.84);
|
|
51
|
+
--muted: rgba(255,255,255,0.55);
|
|
52
|
+
--dim: rgba(255,255,255,0.35);
|
|
53
|
+
--blue: #58a6ff;
|
|
54
|
+
--blue2: #79b8ff;
|
|
55
|
+
--bluebg: #1c2a3a;
|
|
56
|
+
--soft: #21262d;
|
|
57
|
+
--bd: #1f6feb;
|
|
58
|
+
--ok: #3fb950;
|
|
59
|
+
--err: #f85149;
|
|
60
|
+
--warn: #f5b301;
|
|
61
|
+
}
|
|
62
|
+
}`;
|
|
63
|
+
let cachedTheme = null;
|
|
64
|
+
async function fetchTextWithTimeout(url, timeoutMs) {
|
|
65
|
+
const controller = new AbortController();
|
|
66
|
+
const timer = setTimeout(() => controller.abort(), timeoutMs);
|
|
67
|
+
try {
|
|
68
|
+
const res = await fetch(url, { signal: controller.signal });
|
|
69
|
+
if (!res.ok)
|
|
70
|
+
throw new Error(`HTTP ${res.status}`);
|
|
71
|
+
return await res.text();
|
|
72
|
+
}
|
|
73
|
+
finally {
|
|
74
|
+
clearTimeout(timer);
|
|
75
|
+
}
|
|
76
|
+
}
|
|
77
|
+
async function proxyKimiThemeCss() {
|
|
78
|
+
if (cachedTheme && Date.now() - cachedTheme.fetchedAt < THEME_CACHE_TTL_MS) {
|
|
79
|
+
return { css: cachedTheme.css, fromCache: true };
|
|
80
|
+
}
|
|
81
|
+
try {
|
|
82
|
+
const html = await fetchTextWithTimeout(`${KIMI_ORIGIN}/`, 3000);
|
|
83
|
+
const match = html.match(new RegExp(`<link[^>]+rel=["']stylesheet["'][^>]*href=["'](/assets/index-[a-zA-Z0-9]+\\.css)["'][^>]*>`, 'i')) ||
|
|
84
|
+
html.match(new RegExp(`<link[^>]+href=["'](/assets/index-[a-zA-Z0-9]+\\.css)["'][^>]*rel=["']stylesheet["'][^>]*>`, 'i'));
|
|
85
|
+
const cssPath = match?.[1];
|
|
86
|
+
if (!cssPath)
|
|
87
|
+
throw new Error('Kimi stylesheet link not found');
|
|
88
|
+
const css = await fetchTextWithTimeout(`${KIMI_ORIGIN}${cssPath}`, 3000);
|
|
89
|
+
cachedTheme = { css, fetchedAt: Date.now() };
|
|
90
|
+
return { css, fromCache: false };
|
|
91
|
+
}
|
|
92
|
+
catch {
|
|
93
|
+
return { css: FALLBACK_CSS, fromCache: false };
|
|
94
|
+
}
|
|
95
|
+
}
|
|
11
96
|
function getStaticRoot() {
|
|
12
97
|
return path.join(getProjectRoot(), 'dist', 'vis', 'static');
|
|
13
98
|
}
|
|
@@ -15,7 +100,7 @@ export function createApp(ctx) {
|
|
|
15
100
|
const app = new Hono();
|
|
16
101
|
app.use('/api/*', async (c, next) => {
|
|
17
102
|
c.header('Access-Control-Allow-Origin', '*');
|
|
18
|
-
c.header('Access-Control-Allow-Methods', 'GET, POST, OPTIONS');
|
|
103
|
+
c.header('Access-Control-Allow-Methods', 'GET, POST, DELETE, OPTIONS');
|
|
19
104
|
c.header('Access-Control-Allow-Headers', 'Content-Type');
|
|
20
105
|
if (c.req.method === 'OPTIONS')
|
|
21
106
|
return c.body(null, 204);
|
|
@@ -39,6 +124,112 @@ export function createApp(ctx) {
|
|
|
39
124
|
app.get('/api/memories', (c) => {
|
|
40
125
|
return c.json(getMemories(ctx));
|
|
41
126
|
});
|
|
127
|
+
app.get('/api/searches', (c) => {
|
|
128
|
+
const dir = path.join(ctx.storeRoot, 'searches');
|
|
129
|
+
if (!fs.existsSync(dir)) {
|
|
130
|
+
return c.json([]);
|
|
131
|
+
}
|
|
132
|
+
const entries = fs
|
|
133
|
+
.readdirSync(dir)
|
|
134
|
+
.filter((f) => f.endsWith('.json'))
|
|
135
|
+
.map((f) => {
|
|
136
|
+
try {
|
|
137
|
+
const raw = fs.readFileSync(path.join(dir, f), 'utf8');
|
|
138
|
+
const data = JSON.parse(raw);
|
|
139
|
+
const clusters = Array.isArray(data.clusters) ? data.clusters : [];
|
|
140
|
+
return {
|
|
141
|
+
key: data.key || f.replace(/\.json$/, ''),
|
|
142
|
+
query: data.query || '',
|
|
143
|
+
createdAt: data.createdAt || '',
|
|
144
|
+
resultCount: clusters.length,
|
|
145
|
+
};
|
|
146
|
+
}
|
|
147
|
+
catch {
|
|
148
|
+
return null;
|
|
149
|
+
}
|
|
150
|
+
})
|
|
151
|
+
.filter((e) => e !== null)
|
|
152
|
+
.sort((a, b) => new Date(b.createdAt || 0).getTime() - new Date(a.createdAt || 0).getTime());
|
|
153
|
+
return c.json(entries);
|
|
154
|
+
});
|
|
155
|
+
app.get('/api/searches/:key', (c) => {
|
|
156
|
+
const key = decodeURIComponent(c.req.param('key'));
|
|
157
|
+
const filePath = path.join(ctx.storeRoot, 'searches', `${key}.json`);
|
|
158
|
+
if (!fs.existsSync(filePath)) {
|
|
159
|
+
return c.json({ error: 'Search view not found' }, 404);
|
|
160
|
+
}
|
|
161
|
+
const data = JSON.parse(fs.readFileSync(filePath, 'utf8'));
|
|
162
|
+
const clusters = Array.isArray(data.clusters) ? data.clusters : [];
|
|
163
|
+
const seen = new Set();
|
|
164
|
+
const turns = [];
|
|
165
|
+
clusters.forEach((cluster, clusterIdx) => {
|
|
166
|
+
const members = Array.isArray(cluster.members) ? cluster.members : [];
|
|
167
|
+
members.forEach((m) => {
|
|
168
|
+
const id = `${m.sessionId}:${m.turnId}`;
|
|
169
|
+
if (seen.has(id))
|
|
170
|
+
return;
|
|
171
|
+
seen.add(id);
|
|
172
|
+
const refined = ctx.refinedManager.loadRefinedTurn(m.sessionId, m.turnId);
|
|
173
|
+
turns.push({
|
|
174
|
+
sessionId: m.sessionId,
|
|
175
|
+
turnId: m.turnId,
|
|
176
|
+
clusterId: clusterIdx,
|
|
177
|
+
isHit: cluster.hitTurnId === m.turnId,
|
|
178
|
+
summary: refined?.summary || '',
|
|
179
|
+
facts: refined?.facts || [],
|
|
180
|
+
notes: refined?.notes || [],
|
|
181
|
+
timestamp: refined?.timestamp || data.createdAt || '',
|
|
182
|
+
});
|
|
183
|
+
});
|
|
184
|
+
});
|
|
185
|
+
turns.sort((a, b) => {
|
|
186
|
+
const sa = String(a.sessionId);
|
|
187
|
+
const sb = String(b.sessionId);
|
|
188
|
+
if (sa !== sb)
|
|
189
|
+
return sa.localeCompare(sb);
|
|
190
|
+
return (a.turnId ?? 0) - (b.turnId ?? 0);
|
|
191
|
+
});
|
|
192
|
+
return c.json({
|
|
193
|
+
key,
|
|
194
|
+
query: data.query || '',
|
|
195
|
+
createdAt: data.createdAt || '',
|
|
196
|
+
totalHits: turns.length,
|
|
197
|
+
clusterCount: clusters.length,
|
|
198
|
+
turns,
|
|
199
|
+
});
|
|
200
|
+
});
|
|
201
|
+
app.get('/api/refined-turn/:sessionId/:turnId', (c) => {
|
|
202
|
+
const sessionId = decodeURIComponent(c.req.param('sessionId'));
|
|
203
|
+
const turnId = parseInt(c.req.param('turnId'), 10);
|
|
204
|
+
const turn = ctx.refinedManager.loadRefinedTurn(sessionId, turnId);
|
|
205
|
+
if (!turn) {
|
|
206
|
+
return c.json({ error: 'Turn not found' }, 404);
|
|
207
|
+
}
|
|
208
|
+
return c.json(turn);
|
|
209
|
+
});
|
|
210
|
+
app.get('/api/folders', (c) => {
|
|
211
|
+
return c.json(listMemoryFolders(ctx));
|
|
212
|
+
});
|
|
213
|
+
app.post('/api/memory/:folder{.+}/:key', async (c) => {
|
|
214
|
+
const folder = decodeURIComponent(c.req.param('folder'));
|
|
215
|
+
const key = decodeURIComponent(c.req.param('key'));
|
|
216
|
+
const body = (await c.req.json().catch(() => ({})));
|
|
217
|
+
const tags = Array.isArray(body.tags)
|
|
218
|
+
? body.tags.filter((t) => typeof t === 'string')
|
|
219
|
+
: [];
|
|
220
|
+
const result = await writeMemory(ctx, folder, key, {
|
|
221
|
+
content: typeof body.content === 'string' ? body.content : '',
|
|
222
|
+
title: typeof body.title === 'string' ? body.title : undefined,
|
|
223
|
+
tags,
|
|
224
|
+
});
|
|
225
|
+
return c.json(result, result.ok ? 200 : 400);
|
|
226
|
+
});
|
|
227
|
+
app.delete('/api/memory/:folder{.+}/:key', async (c) => {
|
|
228
|
+
const folder = decodeURIComponent(c.req.param('folder'));
|
|
229
|
+
const key = decodeURIComponent(c.req.param('key'));
|
|
230
|
+
const result = await deleteMemory(ctx, folder, key);
|
|
231
|
+
return c.json(result, result.ok ? 200 : 404);
|
|
232
|
+
});
|
|
42
233
|
app.get('/api/memory/:folder{.+}/:key', (c) => {
|
|
43
234
|
const folder = decodeURIComponent(c.req.param('folder'));
|
|
44
235
|
const key = decodeURIComponent(c.req.param('key'));
|
|
@@ -47,6 +238,29 @@ export function createApp(ctx) {
|
|
|
47
238
|
return c.json({ error: 'Memory not found' }, 404);
|
|
48
239
|
return c.json(result);
|
|
49
240
|
});
|
|
241
|
+
app.post('/api/folders', async (c) => {
|
|
242
|
+
const body = (await c.req.json().catch(() => ({})));
|
|
243
|
+
if (typeof body.folder !== 'string') {
|
|
244
|
+
return c.json({ ok: false, error: 'folder is required' }, 400);
|
|
245
|
+
}
|
|
246
|
+
const result = await createFolder(ctx, body.folder);
|
|
247
|
+
return c.json(result, result.ok ? 200 : 400);
|
|
248
|
+
});
|
|
249
|
+
app.post('/api/folders/:folder{.+}/rename', async (c) => {
|
|
250
|
+
const folder = decodeURIComponent(c.req.param('folder'));
|
|
251
|
+
const body = (await c.req.json().catch(() => ({})));
|
|
252
|
+
if (typeof body.newFolder !== 'string') {
|
|
253
|
+
return c.json({ ok: false, error: 'newFolder is required' }, 400);
|
|
254
|
+
}
|
|
255
|
+
const result = await renameFolder(ctx, folder, body.newFolder);
|
|
256
|
+
return c.json(result, result.ok ? 200 : 400);
|
|
257
|
+
});
|
|
258
|
+
app.delete('/api/folders/:folder{.+}', async (c) => {
|
|
259
|
+
const folder = decodeURIComponent(c.req.param('folder'));
|
|
260
|
+
const recursive = c.req.query('recursive') === 'true';
|
|
261
|
+
const result = await deleteFolder(ctx, folder, recursive);
|
|
262
|
+
return c.json(result, result.ok ? 200 : 400);
|
|
263
|
+
});
|
|
50
264
|
app.post('/api/essence', async (c) => {
|
|
51
265
|
const body = (await c.req.json().catch(() => ({})));
|
|
52
266
|
if (typeof body.content !== 'string') {
|
|
@@ -69,11 +283,31 @@ export function createApp(ctx) {
|
|
|
69
283
|
const result = updateTheme(ctx, theme, patch);
|
|
70
284
|
return c.json(result, result.ok ? 200 : 404);
|
|
71
285
|
});
|
|
286
|
+
app.delete('/api/themes/:theme', async (c) => {
|
|
287
|
+
const theme = decodeURIComponent(c.req.param('theme'));
|
|
288
|
+
const result = deleteTheme(ctx, theme);
|
|
289
|
+
return c.json(result, result.ok ? 200 : 404);
|
|
290
|
+
});
|
|
291
|
+
app.delete('/api/searches/:key', async (c) => {
|
|
292
|
+
const key = decodeURIComponent(c.req.param('key'));
|
|
293
|
+
const deleteRefinedTurns = c.req.query('deleteRefinedTurns') === 'true';
|
|
294
|
+
const result = await deleteSearchView(ctx, key, deleteRefinedTurns);
|
|
295
|
+
return c.json(result, result.ok ? 200 : 404);
|
|
296
|
+
});
|
|
72
297
|
app.post('/api/sync', async (c) => {
|
|
73
298
|
const result = await ctx.indexDao.reconcileIndex();
|
|
74
299
|
return c.json(result);
|
|
75
300
|
});
|
|
301
|
+
app.get('/kimi-theme.css', async (c) => {
|
|
302
|
+
const result = await proxyKimiThemeCss();
|
|
303
|
+
c.header('Content-Type', 'text/css');
|
|
304
|
+
c.header('X-Theme-Source', result.fromCache ? 'cache' : result.css === FALLBACK_CSS ? 'fallback' : 'proxy');
|
|
305
|
+
return c.body(result.css);
|
|
306
|
+
});
|
|
76
307
|
const staticRoot = getStaticRoot();
|
|
308
|
+
if (!fs.existsSync(staticRoot)) {
|
|
309
|
+
fs.mkdirSync(staticRoot, { recursive: true });
|
|
310
|
+
}
|
|
77
311
|
app.use('/*', serveStatic({
|
|
78
312
|
root: staticRoot,
|
|
79
313
|
index: 'index.html',
|
|
@@ -82,7 +316,7 @@ export function createApp(ctx) {
|
|
|
82
316
|
const indexPath = path.join(staticRoot, 'index.html');
|
|
83
317
|
const html = fs.existsSync(indexPath)
|
|
84
318
|
? fs.readFileSync(indexPath, 'utf8')
|
|
85
|
-
: '
|
|
319
|
+
: '<!doctype html><html><head><title>Memory Vis</title></head><body><h1>kimi-memory-vis</h1><p>Static files not found. Run npm run build first.</p></body></html>';
|
|
86
320
|
return c.html(html);
|
|
87
321
|
});
|
|
88
322
|
return app;
|