kimi-code-memory-mcp-server 0.1.1 → 0.1.2
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 +14 -1
- package/README.en.md +342 -0
- package/README.md +214 -137
- package/assets/contextFlow.svg +144 -0
- package/dist/config.d.ts +13 -0
- package/dist/config.js +13 -0
- package/dist/config.js.map +1 -1
- package/dist/context/wire-context.d.ts +3 -0
- package/dist/context/wire-context.js +20 -50
- package/dist/context/wire-context.js.map +1 -1
- package/dist/dao/constants.d.ts +33 -0
- package/dist/dao/constants.js +17 -0
- package/dist/dao/constants.js.map +1 -0
- package/dist/dao/index-catalog.d.ts +19 -0
- package/dist/dao/index-catalog.js +94 -0
- package/dist/dao/index-catalog.js.map +1 -0
- package/dist/dao/index-reconciler.d.ts +13 -0
- package/dist/dao/index-reconciler.js +162 -0
- package/dist/dao/index-reconciler.js.map +1 -0
- package/dist/dao/index-store.d.ts +31 -0
- package/dist/dao/index-store.js +128 -0
- package/dist/dao/index-store.js.map +1 -0
- package/dist/dao/index.d.ts +12 -31
- package/dist/dao/index.js +50 -404
- package/dist/dao/index.js.map +1 -1
- package/dist/dao/memory-store.js +2 -10
- package/dist/dao/memory-store.js.map +1 -1
- package/dist/dao/memory-tree-renderer.d.ts +22 -0
- package/dist/dao/memory-tree-renderer.js +75 -0
- package/dist/dao/memory-tree-renderer.js.map +1 -0
- package/dist/prompts/index.d.ts +26 -0
- package/dist/prompts/index.js +103 -0
- package/dist/prompts/index.js.map +1 -0
- package/dist/refine/adapter.d.ts +6 -0
- package/dist/refine/adapter.js +28 -0
- package/dist/refine/adapter.js.map +1 -0
- package/dist/refine/constants.d.ts +35 -0
- package/dist/refine/constants.js +107 -0
- package/dist/refine/constants.js.map +1 -0
- package/dist/refine/extractor.d.ts +12 -0
- package/dist/refine/extractor.js +122 -0
- package/dist/refine/extractor.js.map +1 -0
- package/dist/refine/store.d.ts +19 -0
- package/dist/refine/store.js +139 -0
- package/dist/refine/store.js.map +1 -0
- package/dist/refine/types.d.ts +56 -0
- package/dist/refine/types.js +5 -0
- package/dist/refine/types.js.map +1 -0
- package/dist/refined-manager.d.ts +10 -56
- package/dist/refined-manager.js +22 -341
- package/dist/refined-manager.js.map +1 -1
- package/dist/resources/index.d.ts +15 -0
- package/dist/resources/index.js +134 -0
- package/dist/resources/index.js.map +1 -0
- package/dist/server.js +46 -2
- package/dist/server.js.map +1 -1
- package/dist/tools/context-tools.d.ts +16 -51
- package/dist/tools/context-tools.js +247 -55
- package/dist/tools/context-tools.js.map +1 -1
- package/dist/tools/index.d.ts +5 -827
- package/dist/tools/index.js +23 -354
- package/dist/tools/index.js.map +1 -1
- package/dist/tools/memory-tools.d.ts +4 -60
- package/dist/tools/memory-tools.js +129 -79
- package/dist/tools/memory-tools.js.map +1 -1
- package/dist/tools/system-tools.d.ts +3 -34
- package/dist/tools/system-tools.js +86 -32
- package/dist/tools/system-tools.js.map +1 -1
- package/dist/tools/theme-tools.d.ts +3 -31
- package/dist/tools/theme-tools.js +78 -22
- package/dist/tools/theme-tools.js.map +1 -1
- package/dist/tools/types.d.ts +21 -0
- package/dist/tools/types.js +13 -0
- package/dist/tools/types.js.map +1 -0
- package/dist/types.d.ts +4 -2
- package/dist/utils/action-entities.d.ts +16 -0
- package/dist/utils/action-entities.js +35 -0
- package/dist/utils/action-entities.js.map +1 -0
- package/dist/utils/date.d.ts +11 -0
- package/dist/utils/date.js +13 -0
- package/dist/utils/date.js.map +1 -0
- package/dist/utils/file-helpers.d.ts +10 -0
- package/dist/utils/file-helpers.js +28 -0
- package/dist/utils/file-helpers.js.map +1 -0
- package/dist/utils/headings.d.ts +5 -0
- package/dist/utils/headings.js +21 -0
- package/dist/utils/headings.js.map +1 -0
- package/dist/utils/search.d.ts +17 -0
- package/dist/utils/search.js +60 -0
- package/dist/utils/search.js.map +1 -0
- package/dist/utils/tools.d.ts +5 -0
- package/dist/utils/tools.js +10 -0
- package/dist/utils/tools.js.map +1 -0
- package/dist/vis/api.d.ts +82 -0
- package/dist/vis/api.js +212 -0
- package/dist/vis/api.js.map +1 -0
- package/dist/vis/auto-start.d.ts +12 -0
- package/dist/vis/auto-start.js +87 -0
- package/dist/vis/auto-start.js.map +1 -0
- package/dist/vis/server.d.ts +14 -0
- package/dist/vis/server.js +103 -0
- package/dist/vis/server.js.map +1 -0
- package/dist/vis/static/app.js +395 -0
- package/dist/vis/static/index.html +95 -0
- package/dist/vis/static/style.css +707 -0
- package/dist/vis-cli.d.ts +7 -0
- package/dist/vis-cli.js +140 -0
- package/dist/vis-cli.js.map +1 -0
- package/docs/0.agent-memory-market-research.md +354 -0
- package/docs/1.memory-system-proposal-for-kimi-code.md +688 -0
- package/docs/2.memory-architecture-overview.md +417 -0
- package/docs/3.memory-skill-prompt-design.md +430 -0
- package/docs/4.kimi-code-native-evolution-roadmap.md +559 -0
- package/docs/5.decision-guard-design-notes.md +500 -0
- package/docs/ARCHITECTURE.md +2 -2
- package/docs/design-story.md +350 -0
- package/docs/three-layer-memory-model.md +153 -0
- package/docs/three-layer-memory-model.zh-CN.md +153 -0
- package/package.json +12 -6
- package/README.zh-CN.md +0 -292
|
@@ -3,24 +3,11 @@
|
|
|
3
3
|
*/
|
|
4
4
|
import fs from 'fs';
|
|
5
5
|
import path from 'path';
|
|
6
|
+
import { adaptHandler } from './types.js';
|
|
6
7
|
import { sanitizeFolder, sanitizeKey, toTitle } from '../utils/validation.js';
|
|
7
|
-
import {
|
|
8
|
+
import { toolResult } from '../utils/tools.js';
|
|
9
|
+
import { safeParseFile } from '../utils/file-helpers.js';
|
|
8
10
|
import { findAllWorkspaceSessions, parseWireFile } from '../context/wire-context.js';
|
|
9
|
-
function toolResult(data, isError = false) {
|
|
10
|
-
return {
|
|
11
|
-
content: [{ type: 'text', text: JSON.stringify(data, null, 2) }],
|
|
12
|
-
isError,
|
|
13
|
-
};
|
|
14
|
-
}
|
|
15
|
-
function safeParseFile(filePath) {
|
|
16
|
-
try {
|
|
17
|
-
const text = fs.readFileSync(filePath, 'utf8');
|
|
18
|
-
return parseFrontmatter(text) || { frontmatter: {}, body: text };
|
|
19
|
-
}
|
|
20
|
-
catch {
|
|
21
|
-
return null;
|
|
22
|
-
}
|
|
23
|
-
}
|
|
24
11
|
export function createThemeTools(ctx) {
|
|
25
12
|
const { storeRoot, themeManager, refinedManager } = ctx;
|
|
26
13
|
async function handleTagTheme(args) {
|
|
@@ -176,11 +163,80 @@ export function createThemeTools(ctx) {
|
|
|
176
163
|
sample: refinedTurns.slice(0, 2),
|
|
177
164
|
});
|
|
178
165
|
}
|
|
179
|
-
|
|
180
|
-
|
|
181
|
-
|
|
182
|
-
|
|
183
|
-
|
|
184
|
-
|
|
166
|
+
const tools = [
|
|
167
|
+
{
|
|
168
|
+
name: 'tag_theme',
|
|
169
|
+
description: '仔细分析 turn 内容与 theme 确定相关后,将 turn 挂载到 theme。禁止仅凭关键词匹配挂载;必须确认内容 genuinely belongs to the theme 才可关联。如果 theme 不存在会自动创建。',
|
|
170
|
+
inputSchema: {
|
|
171
|
+
type: 'object',
|
|
172
|
+
properties: {
|
|
173
|
+
theme: {
|
|
174
|
+
type: 'string',
|
|
175
|
+
description: 'Theme identifier. A theme is a semantic group, not a keyword tag.',
|
|
176
|
+
},
|
|
177
|
+
sessionId: {
|
|
178
|
+
type: 'string',
|
|
179
|
+
description: 'Optional session id of a conversation turn to attach',
|
|
180
|
+
},
|
|
181
|
+
turnId: { type: 'number', description: 'Optional turn id within the session' },
|
|
182
|
+
memoryKey: { type: 'string', description: 'Optional memory key to attach' },
|
|
183
|
+
memoryFolder: { type: 'string', description: 'Optional memory folder (default: memory)' },
|
|
184
|
+
memoryTitle: {
|
|
185
|
+
type: 'string',
|
|
186
|
+
description: 'Optional display title for the memory reference',
|
|
187
|
+
},
|
|
188
|
+
},
|
|
189
|
+
required: ['theme'],
|
|
190
|
+
},
|
|
191
|
+
handler: adaptHandler(handleTagTheme),
|
|
192
|
+
},
|
|
193
|
+
{
|
|
194
|
+
name: 'trace_theme',
|
|
195
|
+
description: 'Trace the evolution of a theme across sessions and memories. Returns associated turns and memories sorted by time.',
|
|
196
|
+
inputSchema: {
|
|
197
|
+
type: 'object',
|
|
198
|
+
properties: {
|
|
199
|
+
theme: { type: 'string', description: 'Theme identifier' },
|
|
200
|
+
includeTurnContent: {
|
|
201
|
+
type: 'boolean',
|
|
202
|
+
description: 'If true, load full turn content from wire.jsonl (default: false)',
|
|
203
|
+
},
|
|
204
|
+
},
|
|
205
|
+
required: ['theme'],
|
|
206
|
+
},
|
|
207
|
+
handler: adaptHandler(handleTraceTheme),
|
|
208
|
+
},
|
|
209
|
+
{
|
|
210
|
+
name: 'list_themes',
|
|
211
|
+
description: 'List all theme identifiers stored in the current workspace.',
|
|
212
|
+
inputSchema: { type: 'object', properties: {} },
|
|
213
|
+
handler: adaptHandler(handleListThemes),
|
|
214
|
+
},
|
|
215
|
+
{
|
|
216
|
+
name: 'refine_session_turns',
|
|
217
|
+
description: 'Read a session wire.jsonl and generate Refined Turn Summaries. Output is written to refined/<sessionId>.jsonl.',
|
|
218
|
+
inputSchema: {
|
|
219
|
+
type: 'object',
|
|
220
|
+
properties: {
|
|
221
|
+
sessionId: {
|
|
222
|
+
type: 'string',
|
|
223
|
+
description: 'Session identifier (default: current session)',
|
|
224
|
+
},
|
|
225
|
+
session_id: { type: 'string', description: 'Alias for sessionId' },
|
|
226
|
+
turnIds: {
|
|
227
|
+
type: 'array',
|
|
228
|
+
items: { type: 'number' },
|
|
229
|
+
description: 'Optional list of turnIds to refine',
|
|
230
|
+
},
|
|
231
|
+
limit: {
|
|
232
|
+
type: 'number',
|
|
233
|
+
description: 'Optional limit: refine only the most recent N turns',
|
|
234
|
+
},
|
|
235
|
+
},
|
|
236
|
+
},
|
|
237
|
+
handler: adaptHandler(handleRefineSessionTurns),
|
|
238
|
+
},
|
|
239
|
+
];
|
|
240
|
+
return tools;
|
|
185
241
|
}
|
|
186
242
|
//# sourceMappingURL=theme-tools.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"theme-tools.js","sourceRoot":"","sources":["../../src/tools/theme-tools.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,EAAE,MAAM,IAAI,CAAC;AACpB,OAAO,IAAI,MAAM,MAAM,CAAC;
|
|
1
|
+
{"version":3,"file":"theme-tools.js","sourceRoot":"","sources":["../../src/tools/theme-tools.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Shared tool types.
|
|
3
|
+
*/
|
|
4
|
+
export interface ToolResult {
|
|
5
|
+
content: Array<{
|
|
6
|
+
type: 'text';
|
|
7
|
+
text: string;
|
|
8
|
+
}>;
|
|
9
|
+
isError?: boolean;
|
|
10
|
+
[key: string]: unknown;
|
|
11
|
+
}
|
|
12
|
+
export interface ToolDefinition {
|
|
13
|
+
name: string;
|
|
14
|
+
description: string;
|
|
15
|
+
inputSchema: Record<string, unknown>;
|
|
16
|
+
handler: (args: unknown) => ToolResult | Promise<ToolResult>;
|
|
17
|
+
}
|
|
18
|
+
export declare class ToolError extends Error {
|
|
19
|
+
constructor(message: string);
|
|
20
|
+
}
|
|
21
|
+
export declare function adaptHandler<TArgs>(handler: (args: TArgs) => ToolResult | Promise<ToolResult>): (args: unknown) => ToolResult | Promise<ToolResult>;
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"types.js","sourceRoot":"","sources":["../../src/tools/types.ts"],"names":[],"mappings":"AAAA;;GAEG;AAeH,MAAM,OAAO,SAAU,SAAQ,KAAK;IAClC,YAAY,OAAe;QACzB,KAAK,CAAC,OAAO,CAAC,CAAC;QACf,IAAI,CAAC,IAAI,GAAG,WAAW,CAAC;IAC1B,CAAC;CACF;AAED,MAAM,UAAU,YAAY,CAC1B,OAA0D;IAE1D,OAAO,OAAyE,CAAC;AACnF,CAAC"}
|
package/dist/types.d.ts
CHANGED
|
@@ -25,9 +25,9 @@ export interface RecallArgs {
|
|
|
25
25
|
key: string;
|
|
26
26
|
folder?: string;
|
|
27
27
|
}
|
|
28
|
-
export interface
|
|
29
|
-
n?: number;
|
|
28
|
+
export interface ListArgs {
|
|
30
29
|
folder?: string;
|
|
30
|
+
limit?: number;
|
|
31
31
|
tag?: string;
|
|
32
32
|
}
|
|
33
33
|
export interface SearchArgs {
|
|
@@ -59,6 +59,8 @@ export interface SearchContextArgs {
|
|
|
59
59
|
limit?: number;
|
|
60
60
|
cluster_gap_seconds?: number;
|
|
61
61
|
max_cluster_size?: number;
|
|
62
|
+
detail?: 'compact' | 'normal' | 'full';
|
|
63
|
+
max_output_chars?: number;
|
|
62
64
|
}
|
|
63
65
|
export interface ListSearchViewsArgs {
|
|
64
66
|
limit?: number;
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Shared entity extraction from action/tool records.
|
|
3
|
+
*
|
|
4
|
+
* Used by the turn refiner and the wire-context summarizer to collect files,
|
|
5
|
+
* tool names, and error snippets without duplicating the logic.
|
|
6
|
+
*/
|
|
7
|
+
import type { RawAction } from '../refine/types.js';
|
|
8
|
+
export interface ExtractedEntities {
|
|
9
|
+
files: string[];
|
|
10
|
+
tools: string[];
|
|
11
|
+
errors: string[];
|
|
12
|
+
}
|
|
13
|
+
/**
|
|
14
|
+
* Read files/tools/errors from a RawAction.
|
|
15
|
+
*/
|
|
16
|
+
export declare function extractEntitiesFromAction(action: RawAction): ExtractedEntities;
|
|
@@ -0,0 +1,35 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Shared entity extraction from action/tool records.
|
|
3
|
+
*
|
|
4
|
+
* Used by the turn refiner and the wire-context summarizer to collect files,
|
|
5
|
+
* tool names, and error snippets without duplicating the logic.
|
|
6
|
+
*/
|
|
7
|
+
import { LIMITS } from '../refine/constants.js';
|
|
8
|
+
/**
|
|
9
|
+
* Read files/tools/errors from a RawAction.
|
|
10
|
+
*/
|
|
11
|
+
export function extractEntitiesFromAction(action) {
|
|
12
|
+
const files = [];
|
|
13
|
+
const tools = [];
|
|
14
|
+
const errors = [];
|
|
15
|
+
if (action.name)
|
|
16
|
+
tools.push(action.name);
|
|
17
|
+
const args = typeof action.args === 'object' && action.args !== null
|
|
18
|
+
? action.args
|
|
19
|
+
: {};
|
|
20
|
+
for (const key of ['path', 'file', 'filePath', 'cwd']) {
|
|
21
|
+
const value = args[key];
|
|
22
|
+
if (typeof value === 'string') {
|
|
23
|
+
if (key === 'cwd' && value.includes('node_modules'))
|
|
24
|
+
continue;
|
|
25
|
+
files.push(value);
|
|
26
|
+
}
|
|
27
|
+
}
|
|
28
|
+
const result = action.result || '';
|
|
29
|
+
if (typeof result === 'string' &&
|
|
30
|
+
(result.toLowerCase().includes('error') || result.toLowerCase().includes('failed'))) {
|
|
31
|
+
errors.push(result.split('\n')[0].slice(0, LIMITS.errorSnippet));
|
|
32
|
+
}
|
|
33
|
+
return { files, tools, errors };
|
|
34
|
+
}
|
|
35
|
+
//# sourceMappingURL=action-entities.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"action-entities.js","sourceRoot":"","sources":["../../src/utils/action-entities.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,EAAE,MAAM,EAAE,MAAM,wBAAwB,CAAC;AAShD;;GAEG;AACH,MAAM,UAAU,yBAAyB,CAAC,MAAiB;IACzD,MAAM,KAAK,GAAa,EAAE,CAAC;IAC3B,MAAM,KAAK,GAAa,EAAE,CAAC;IAC3B,MAAM,MAAM,GAAa,EAAE,CAAC;IAE5B,IAAI,MAAM,CAAC,IAAI;QAAE,KAAK,CAAC,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC;IAEzC,MAAM,IAAI,GACR,OAAO,MAAM,CAAC,IAAI,KAAK,QAAQ,IAAI,MAAM,CAAC,IAAI,KAAK,IAAI;QACrD,CAAC,CAAE,MAAM,CAAC,IAAgC;QAC1C,CAAC,CAAC,EAAE,CAAC;IACT,KAAK,MAAM,GAAG,IAAI,CAAC,MAAM,EAAE,MAAM,EAAE,UAAU,EAAE,KAAK,CAAU,EAAE,CAAC;QAC/D,MAAM,KAAK,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC;QACxB,IAAI,OAAO,KAAK,KAAK,QAAQ,EAAE,CAAC;YAC9B,IAAI,GAAG,KAAK,KAAK,IAAI,KAAK,CAAC,QAAQ,CAAC,cAAc,CAAC;gBAAE,SAAS;YAC9D,KAAK,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;QACpB,CAAC;IACH,CAAC;IAED,MAAM,MAAM,GAAG,MAAM,CAAC,MAAM,IAAI,EAAE,CAAC;IACnC,IACE,OAAO,MAAM,KAAK,QAAQ;QAC1B,CAAC,MAAM,CAAC,WAAW,EAAE,CAAC,QAAQ,CAAC,OAAO,CAAC,IAAI,MAAM,CAAC,WAAW,EAAE,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAAC,EACnF,CAAC;QACD,MAAM,CAAC,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,EAAE,MAAM,CAAC,YAAY,CAAC,CAAC,CAAC;IACnE,CAAC;IAED,OAAO,EAAE,KAAK,EAAE,KAAK,EAAE,MAAM,EAAE,CAAC;AAClC,CAAC"}
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Shared date-boundary helpers for SQL queries.
|
|
3
|
+
*/
|
|
4
|
+
export interface DateRange {
|
|
5
|
+
from?: string;
|
|
6
|
+
to?: string;
|
|
7
|
+
}
|
|
8
|
+
/**
|
|
9
|
+
* Convert optional YYYY-MM-DD date strings into inclusive ISO date boundaries.
|
|
10
|
+
*/
|
|
11
|
+
export declare function dateRangeSql(dateFrom?: string, dateTo?: string): DateRange;
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Shared date-boundary helpers for SQL queries.
|
|
3
|
+
*/
|
|
4
|
+
/**
|
|
5
|
+
* Convert optional YYYY-MM-DD date strings into inclusive ISO date boundaries.
|
|
6
|
+
*/
|
|
7
|
+
export function dateRangeSql(dateFrom, dateTo) {
|
|
8
|
+
return {
|
|
9
|
+
from: dateFrom ? `${dateFrom}T00:00:00.000Z` : undefined,
|
|
10
|
+
to: dateTo ? `${dateTo}T23:59:59.999Z` : undefined,
|
|
11
|
+
};
|
|
12
|
+
}
|
|
13
|
+
//# sourceMappingURL=date.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"date.js","sourceRoot":"","sources":["../../src/utils/date.ts"],"names":[],"mappings":"AAAA;;GAEG;AAOH;;GAEG;AACH,MAAM,UAAU,YAAY,CAAC,QAAiB,EAAE,MAAe;IAC7D,OAAO;QACL,IAAI,EAAE,QAAQ,CAAC,CAAC,CAAC,GAAG,QAAQ,gBAAgB,CAAC,CAAC,CAAC,SAAS;QACxD,EAAE,EAAE,MAAM,CAAC,CAAC,CAAC,GAAG,MAAM,gBAAgB,CAAC,CAAC,CAAC,SAAS;KACnD,CAAC;AACJ,CAAC"}
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* File-system helpers used across DAOs and tools.
|
|
3
|
+
*/
|
|
4
|
+
import type { ParsedFrontmatter } from './frontmatter.js';
|
|
5
|
+
export declare function safeParseFile(filePath: string): ParsedFrontmatter | null;
|
|
6
|
+
export declare function fileStats(filePath: string): {
|
|
7
|
+
exists: boolean;
|
|
8
|
+
size: number;
|
|
9
|
+
modifiedAt: string;
|
|
10
|
+
} | null;
|
|
@@ -0,0 +1,28 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* File-system helpers used across DAOs and tools.
|
|
3
|
+
*/
|
|
4
|
+
import fs from 'fs';
|
|
5
|
+
import { parseFrontmatter } from './frontmatter.js';
|
|
6
|
+
export function safeParseFile(filePath) {
|
|
7
|
+
try {
|
|
8
|
+
const text = fs.readFileSync(filePath, 'utf8');
|
|
9
|
+
return parseFrontmatter(text) || { frontmatter: {}, body: text };
|
|
10
|
+
}
|
|
11
|
+
catch {
|
|
12
|
+
return null;
|
|
13
|
+
}
|
|
14
|
+
}
|
|
15
|
+
export function fileStats(filePath) {
|
|
16
|
+
try {
|
|
17
|
+
const stats = fs.statSync(filePath);
|
|
18
|
+
return {
|
|
19
|
+
exists: true,
|
|
20
|
+
size: stats.size,
|
|
21
|
+
modifiedAt: stats.mtime.toISOString(),
|
|
22
|
+
};
|
|
23
|
+
}
|
|
24
|
+
catch {
|
|
25
|
+
return null;
|
|
26
|
+
}
|
|
27
|
+
}
|
|
28
|
+
//# sourceMappingURL=file-helpers.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"file-helpers.js","sourceRoot":"","sources":["../../src/utils/file-helpers.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,EAAE,MAAM,IAAI,CAAC;AAEpB,OAAO,EAAE,gBAAgB,EAAE,MAAM,kBAAkB,CAAC;AAEpD,MAAM,UAAU,aAAa,CAAC,QAAgB;IAC5C,IAAI,CAAC;QACH,MAAM,IAAI,GAAG,EAAE,CAAC,YAAY,CAAC,QAAQ,EAAE,MAAM,CAAC,CAAC;QAC/C,OAAO,gBAAgB,CAAC,IAAI,CAAC,IAAI,EAAE,WAAW,EAAE,EAAE,EAAE,IAAI,EAAE,IAAI,EAAE,CAAC;IACnE,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,IAAI,CAAC;IACd,CAAC;AACH,CAAC;AAED,MAAM,UAAU,SAAS,CACvB,QAAgB;IAEhB,IAAI,CAAC;QACH,MAAM,KAAK,GAAG,EAAE,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAAC;QACpC,OAAO;YACL,MAAM,EAAE,IAAI;YACZ,IAAI,EAAE,KAAK,CAAC,IAAI;YAChB,UAAU,EAAE,KAAK,CAAC,KAAK,CAAC,WAAW,EAAE;SACtC,CAAC;IACJ,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,IAAI,CAAC;IACd,CAAC;AACH,CAAC"}
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Shared markdown heading normalization and category matching.
|
|
3
|
+
*/
|
|
4
|
+
import { CATEGORY_HEADINGS } from '../refine/constants.js';
|
|
5
|
+
export function normalizeHeading(heading) {
|
|
6
|
+
return heading.trim().replace(/[::]\s*$/g, '');
|
|
7
|
+
}
|
|
8
|
+
export function matchCategory(heading) {
|
|
9
|
+
const normalized = normalizeHeading(heading).toLowerCase();
|
|
10
|
+
for (const [category, labels] of Object.entries(CATEGORY_HEADINGS)) {
|
|
11
|
+
for (const label of labels) {
|
|
12
|
+
if (normalized === label.toLowerCase())
|
|
13
|
+
return category;
|
|
14
|
+
// Also match "## Current Focus" style where label might be embedded.
|
|
15
|
+
if (normalized.includes(label.toLowerCase()))
|
|
16
|
+
return category;
|
|
17
|
+
}
|
|
18
|
+
}
|
|
19
|
+
return null;
|
|
20
|
+
}
|
|
21
|
+
//# sourceMappingURL=headings.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"headings.js","sourceRoot":"","sources":["../../src/utils/headings.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,EAAE,iBAAiB,EAAE,MAAM,wBAAwB,CAAC;AAE3D,MAAM,UAAU,gBAAgB,CAAC,OAAe;IAC9C,OAAO,OAAO,CAAC,IAAI,EAAE,CAAC,OAAO,CAAC,WAAW,EAAE,EAAE,CAAC,CAAC;AACjD,CAAC;AAED,MAAM,UAAU,aAAa,CAAC,OAAe;IAC3C,MAAM,UAAU,GAAG,gBAAgB,CAAC,OAAO,CAAC,CAAC,WAAW,EAAE,CAAC;IAC3D,KAAK,MAAM,CAAC,QAAQ,EAAE,MAAM,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,iBAAiB,CAAC,EAAE,CAAC;QACnE,KAAK,MAAM,KAAK,IAAI,MAAM,EAAE,CAAC;YAC3B,IAAI,UAAU,KAAK,KAAK,CAAC,WAAW,EAAE;gBAAE,OAAO,QAAQ,CAAC;YACxD,qEAAqE;YACrE,IAAI,UAAU,CAAC,QAAQ,CAAC,KAAK,CAAC,WAAW,EAAE,CAAC;gBAAE,OAAO,QAAQ,CAAC;QAChE,CAAC;IACH,CAAC;IACD,OAAO,IAAI,CAAC;AACd,CAAC"}
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Shared text scoring, snippet extraction, and SQL LIKE helpers.
|
|
3
|
+
*/
|
|
4
|
+
/**
|
|
5
|
+
* Score how many times all search terms appear in text (case-insensitive).
|
|
6
|
+
*/
|
|
7
|
+
export declare function scoreText(text: string, terms: string[]): number;
|
|
8
|
+
/**
|
|
9
|
+
* Extract a short snippet around the longest matching term.
|
|
10
|
+
*/
|
|
11
|
+
export declare function extractSnippet(text: string, terms: string[], maxLen: number): string;
|
|
12
|
+
/**
|
|
13
|
+
* Build SQL LIKE conditions for a list of search terms.
|
|
14
|
+
* Returns one condition per term that checks summary, facts, and notes.
|
|
15
|
+
* Callers must bind each escaped term three times (summary, facts, notes).
|
|
16
|
+
*/
|
|
17
|
+
export declare function buildLikeConditions(terms: string[]): string[];
|
|
@@ -0,0 +1,60 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Shared text scoring, snippet extraction, and SQL LIKE helpers.
|
|
3
|
+
*/
|
|
4
|
+
function truncate(text, maxLen) {
|
|
5
|
+
if (text === null || text === undefined)
|
|
6
|
+
return '';
|
|
7
|
+
const s = String(text);
|
|
8
|
+
return s.length > maxLen ? s.slice(0, maxLen) + '...' : s;
|
|
9
|
+
}
|
|
10
|
+
/**
|
|
11
|
+
* Score how many times all search terms appear in text (case-insensitive).
|
|
12
|
+
*/
|
|
13
|
+
export function scoreText(text, terms) {
|
|
14
|
+
const haystack = text.toLowerCase();
|
|
15
|
+
let score = 0;
|
|
16
|
+
for (const term of terms) {
|
|
17
|
+
const pattern = term.replace(/[.*+?^${}()|[\]\\]/g, (ch) => `\\${ch}`);
|
|
18
|
+
const re = new RegExp(pattern, 'gi');
|
|
19
|
+
const matches = haystack.match(re);
|
|
20
|
+
if (matches)
|
|
21
|
+
score += matches.length;
|
|
22
|
+
}
|
|
23
|
+
return score;
|
|
24
|
+
}
|
|
25
|
+
/**
|
|
26
|
+
* Extract a short snippet around the longest matching term.
|
|
27
|
+
*/
|
|
28
|
+
export function extractSnippet(text, terms, maxLen) {
|
|
29
|
+
if (!terms.length)
|
|
30
|
+
return truncate(text, maxLen);
|
|
31
|
+
const lower = text.toLowerCase();
|
|
32
|
+
let bestPos = -1;
|
|
33
|
+
let bestTermLen = 0;
|
|
34
|
+
for (const term of terms) {
|
|
35
|
+
const idx = lower.indexOf(term);
|
|
36
|
+
if (idx !== -1 && term.length > bestTermLen) {
|
|
37
|
+
bestPos = idx;
|
|
38
|
+
bestTermLen = term.length;
|
|
39
|
+
}
|
|
40
|
+
}
|
|
41
|
+
if (bestPos === -1)
|
|
42
|
+
return truncate(text, maxLen);
|
|
43
|
+
const start = Math.max(0, bestPos - 60);
|
|
44
|
+
const end = Math.min(text.length, bestPos + bestTermLen + 60);
|
|
45
|
+
let snippet = text.slice(start, end);
|
|
46
|
+
if (start > 0)
|
|
47
|
+
snippet = '...' + snippet;
|
|
48
|
+
if (end < text.length)
|
|
49
|
+
snippet = snippet + '...';
|
|
50
|
+
return snippet;
|
|
51
|
+
}
|
|
52
|
+
/**
|
|
53
|
+
* Build SQL LIKE conditions for a list of search terms.
|
|
54
|
+
* Returns one condition per term that checks summary, facts, and notes.
|
|
55
|
+
* Callers must bind each escaped term three times (summary, facts, notes).
|
|
56
|
+
*/
|
|
57
|
+
export function buildLikeConditions(terms) {
|
|
58
|
+
return terms.map(() => "(summary LIKE ? ESCAPE '\\' OR facts LIKE ? ESCAPE '\\' OR notes LIKE ? ESCAPE '\\')");
|
|
59
|
+
}
|
|
60
|
+
//# sourceMappingURL=search.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"search.js","sourceRoot":"","sources":["../../src/utils/search.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,SAAS,QAAQ,CAAC,IAAa,EAAE,MAAc;IAC7C,IAAI,IAAI,KAAK,IAAI,IAAI,IAAI,KAAK,SAAS;QAAE,OAAO,EAAE,CAAC;IACnD,MAAM,CAAC,GAAG,MAAM,CAAC,IAAI,CAAC,CAAC;IACvB,OAAO,CAAC,CAAC,MAAM,GAAG,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,EAAE,MAAM,CAAC,GAAG,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC;AAC5D,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,SAAS,CAAC,IAAY,EAAE,KAAe;IACrD,MAAM,QAAQ,GAAG,IAAI,CAAC,WAAW,EAAE,CAAC;IACpC,IAAI,KAAK,GAAG,CAAC,CAAC;IACd,KAAK,MAAM,IAAI,IAAI,KAAK,EAAE,CAAC;QACzB,MAAM,OAAO,GAAG,IAAI,CAAC,OAAO,CAAC,qBAAqB,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,KAAK,EAAE,EAAE,CAAC,CAAC;QACvE,MAAM,EAAE,GAAG,IAAI,MAAM,CAAC,OAAO,EAAE,IAAI,CAAC,CAAC;QACrC,MAAM,OAAO,GAAG,QAAQ,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC;QACnC,IAAI,OAAO;YAAE,KAAK,IAAI,OAAO,CAAC,MAAM,CAAC;IACvC,CAAC;IACD,OAAO,KAAK,CAAC;AACf,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,cAAc,CAAC,IAAY,EAAE,KAAe,EAAE,MAAc;IAC1E,IAAI,CAAC,KAAK,CAAC,MAAM;QAAE,OAAO,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC,CAAC;IACjD,MAAM,KAAK,GAAG,IAAI,CAAC,WAAW,EAAE,CAAC;IACjC,IAAI,OAAO,GAAG,CAAC,CAAC,CAAC;IACjB,IAAI,WAAW,GAAG,CAAC,CAAC;IACpB,KAAK,MAAM,IAAI,IAAI,KAAK,EAAE,CAAC;QACzB,MAAM,GAAG,GAAG,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC;QAChC,IAAI,GAAG,KAAK,CAAC,CAAC,IAAI,IAAI,CAAC,MAAM,GAAG,WAAW,EAAE,CAAC;YAC5C,OAAO,GAAG,GAAG,CAAC;YACd,WAAW,GAAG,IAAI,CAAC,MAAM,CAAC;QAC5B,CAAC;IACH,CAAC;IACD,IAAI,OAAO,KAAK,CAAC,CAAC;QAAE,OAAO,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC,CAAC;IAClD,MAAM,KAAK,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,OAAO,GAAG,EAAE,CAAC,CAAC;IACxC,MAAM,GAAG,GAAG,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,MAAM,EAAE,OAAO,GAAG,WAAW,GAAG,EAAE,CAAC,CAAC;IAC9D,IAAI,OAAO,GAAG,IAAI,CAAC,KAAK,CAAC,KAAK,EAAE,GAAG,CAAC,CAAC;IACrC,IAAI,KAAK,GAAG,CAAC;QAAE,OAAO,GAAG,KAAK,GAAG,OAAO,CAAC;IACzC,IAAI,GAAG,GAAG,IAAI,CAAC,MAAM;QAAE,OAAO,GAAG,OAAO,GAAG,KAAK,CAAC;IACjD,OAAO,OAAO,CAAC;AACjB,CAAC;AAED;;;;GAIG;AACH,MAAM,UAAU,mBAAmB,CAAC,KAAe;IACjD,OAAO,KAAK,CAAC,GAAG,CACd,GAAG,EAAE,CAAC,sFAAsF,CAC7F,CAAC;AACJ,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"tools.js","sourceRoot":"","sources":["../../src/utils/tools.ts"],"names":[],"mappings":"AAAA;;GAEG;AAIH,MAAM,UAAU,UAAU,CAAC,IAAa,EAAE,OAAO,GAAG,KAAK;IACvD,OAAO;QACL,OAAO,EAAE,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,IAAI,CAAC,SAAS,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,CAAC,EAAE,CAAC;QAChE,OAAO;KACR,CAAC;AACJ,CAAC"}
|
|
@@ -0,0 +1,82 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Data access helpers for the vis dashboard.
|
|
3
|
+
*
|
|
4
|
+
* All functions receive the shared MCP server context and return plain
|
|
5
|
+
* JSON-serializable objects so they can be reused by the Hono routes and by
|
|
6
|
+
* tests without touching HTTP details.
|
|
7
|
+
*/
|
|
8
|
+
import type { Ctx } from '../types.js';
|
|
9
|
+
export interface WorkspaceInfo {
|
|
10
|
+
id: string;
|
|
11
|
+
cwd: string;
|
|
12
|
+
storePath: string;
|
|
13
|
+
essence: string;
|
|
14
|
+
stats: {
|
|
15
|
+
memories: number;
|
|
16
|
+
themes: number;
|
|
17
|
+
refinedTurns: number;
|
|
18
|
+
sessions: number;
|
|
19
|
+
};
|
|
20
|
+
}
|
|
21
|
+
export interface ThemeInfo {
|
|
22
|
+
name: string;
|
|
23
|
+
displayName: string;
|
|
24
|
+
createdAt: string;
|
|
25
|
+
updatedAt: string;
|
|
26
|
+
turnCount: number;
|
|
27
|
+
memoryCount: number;
|
|
28
|
+
}
|
|
29
|
+
export interface TimelineItem {
|
|
30
|
+
type: 'turn' | 'memory';
|
|
31
|
+
timestamp: string;
|
|
32
|
+
data: unknown;
|
|
33
|
+
}
|
|
34
|
+
export interface ThemeTimeline {
|
|
35
|
+
theme: string;
|
|
36
|
+
displayName: string;
|
|
37
|
+
items: TimelineItem[];
|
|
38
|
+
}
|
|
39
|
+
export interface DecisionItem {
|
|
40
|
+
sessionId: string;
|
|
41
|
+
turnId: number;
|
|
42
|
+
timestamp: string | undefined;
|
|
43
|
+
summary: string;
|
|
44
|
+
decisions: string[];
|
|
45
|
+
files: string[];
|
|
46
|
+
tags: string[];
|
|
47
|
+
}
|
|
48
|
+
export interface MemoryNode {
|
|
49
|
+
name: string;
|
|
50
|
+
comment: string;
|
|
51
|
+
files: MemoryFile[];
|
|
52
|
+
children: MemoryNode[];
|
|
53
|
+
}
|
|
54
|
+
export interface MemoryFile {
|
|
55
|
+
key: string;
|
|
56
|
+
title: string;
|
|
57
|
+
tags: string[];
|
|
58
|
+
createdAt: string;
|
|
59
|
+
updatedAt: string;
|
|
60
|
+
}
|
|
61
|
+
export declare function getWorkspace(ctx: Ctx): WorkspaceInfo;
|
|
62
|
+
export declare function getThemes(ctx: Ctx): ThemeInfo[];
|
|
63
|
+
export declare function getThemeTimeline(ctx: Ctx, themeName: string): ThemeTimeline;
|
|
64
|
+
export declare function getRecentDecisions(ctx: Ctx, limit?: number): DecisionItem[];
|
|
65
|
+
export declare function getMemories(ctx: Ctx): MemoryNode;
|
|
66
|
+
export declare function getMemoryContent(ctx: Ctx, folder: string, key: string): {
|
|
67
|
+
content: string;
|
|
68
|
+
title: string;
|
|
69
|
+
tags: string[];
|
|
70
|
+
} | null;
|
|
71
|
+
export declare function saveEssence(ctx: Ctx, content: string): {
|
|
72
|
+
ok: boolean;
|
|
73
|
+
};
|
|
74
|
+
export declare function updateTheme(ctx: Ctx, themeName: string, patch: {
|
|
75
|
+
displayName?: string;
|
|
76
|
+
removeTurns?: Array<{
|
|
77
|
+
sessionId: string;
|
|
78
|
+
turnId: number;
|
|
79
|
+
}>;
|
|
80
|
+
}): {
|
|
81
|
+
ok: boolean;
|
|
82
|
+
};
|