@echoes-io/mcp-server 7.1.1 → 8.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.
- package/README.md +1 -1
- package/cli/program.d.ts.map +1 -1
- package/cli/program.js +5 -5
- package/cli/program.js.map +1 -1
- package/lib/constants.d.ts +0 -3
- package/lib/constants.d.ts.map +1 -1
- package/lib/constants.js +1 -7
- package/lib/constants.js.map +1 -1
- package/lib/rag/index.d.ts +13 -0
- package/lib/rag/index.d.ts.map +1 -0
- package/lib/rag/index.js +54 -0
- package/lib/rag/index.js.map +1 -0
- package/lib/rag/parser.d.ts +8 -0
- package/lib/rag/parser.d.ts.map +1 -0
- package/lib/rag/parser.js +39 -0
- package/lib/rag/parser.js.map +1 -0
- package/lib/rag/schema.d.ts +6 -0
- package/lib/rag/schema.d.ts.map +1 -0
- package/lib/rag/schema.js +49 -0
- package/lib/rag/schema.js.map +1 -0
- package/lib/tools/consistency/index.d.ts +1 -1
- package/lib/tools/consistency/rules/entity-duplicate.d.ts.map +1 -1
- package/lib/tools/consistency/rules/entity-duplicate.js +3 -5
- package/lib/tools/consistency/rules/entity-duplicate.js.map +1 -1
- package/lib/tools/consistency/rules/first-time-content.d.ts.map +1 -1
- package/lib/tools/consistency/rules/first-time-content.js +7 -2
- package/lib/tools/consistency/rules/first-time-content.js.map +1 -1
- package/lib/tools/consistency/rules/relation-jump.d.ts.map +1 -1
- package/lib/tools/consistency/rules/relation-jump.js +11 -8
- package/lib/tools/consistency/rules/relation-jump.js.map +1 -1
- package/lib/tools/consistency/types.d.ts.map +1 -1
- package/lib/tools/graph-export.d.ts +1 -2
- package/lib/tools/graph-export.d.ts.map +1 -1
- package/lib/tools/graph-export.js +49 -116
- package/lib/tools/graph-export.js.map +1 -1
- package/lib/tools/history.d.ts +1 -1
- package/lib/tools/history.d.ts.map +1 -1
- package/lib/tools/history.js +43 -55
- package/lib/tools/history.js.map +1 -1
- package/lib/tools/index.d.ts +7 -2
- package/lib/tools/index.d.ts.map +1 -1
- package/lib/tools/index.js +28 -4
- package/lib/tools/index.js.map +1 -1
- package/lib/tools/list.d.ts +1 -1
- package/lib/tools/list.d.ts.map +1 -1
- package/lib/tools/list.js +35 -30
- package/lib/tools/list.js.map +1 -1
- package/lib/tools/review-apply.d.ts.map +1 -1
- package/lib/tools/review-apply.js +49 -207
- package/lib/tools/review-apply.js.map +1 -1
- package/lib/tools/review-generate.d.ts.map +1 -1
- package/lib/tools/review-generate.js +44 -55
- package/lib/tools/review-generate.js.map +1 -1
- package/lib/tools/review-status.d.ts +12 -17
- package/lib/tools/review-status.d.ts.map +1 -1
- package/lib/tools/review-status.js +21 -33
- package/lib/tools/review-status.js.map +1 -1
- package/lib/tools/search.d.ts +1 -1
- package/lib/tools/search.d.ts.map +1 -1
- package/lib/tools/search.js +62 -44
- package/lib/tools/search.js.map +1 -1
- package/lib/tools/stats.d.ts.map +1 -1
- package/lib/tools/stats.js +43 -7
- package/lib/tools/stats.js.map +1 -1
- package/lib/types.d.ts.map +1 -1
- package/package.json +8 -6
- package/lib/database/index.d.ts +0 -36
- package/lib/database/index.d.ts.map +0 -1
- package/lib/database/index.js +0 -287
- package/lib/database/index.js.map +0 -1
- package/lib/database/schemas.d.ts +0 -55
- package/lib/database/schemas.d.ts.map +0 -1
- package/lib/database/schemas.js +0 -78
- package/lib/database/schemas.js.map +0 -1
- package/lib/indexer/embeddings.d.ts +0 -10
- package/lib/indexer/embeddings.d.ts.map +0 -1
- package/lib/indexer/embeddings.js +0 -64
- package/lib/indexer/embeddings.js.map +0 -1
- package/lib/indexer/extractor.d.ts +0 -81
- package/lib/indexer/extractor.d.ts.map +0 -1
- package/lib/indexer/extractor.js +0 -68
- package/lib/indexer/extractor.js.map +0 -1
- package/lib/indexer/scanner.d.ts +0 -8
- package/lib/indexer/scanner.d.ts.map +0 -1
- package/lib/indexer/scanner.js +0 -73
- package/lib/indexer/scanner.js.map +0 -1
- package/lib/indexer/tasks.d.ts +0 -32
- package/lib/indexer/tasks.d.ts.map +0 -1
- package/lib/indexer/tasks.js +0 -235
- package/lib/indexer/tasks.js.map +0 -1
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"review-status.d.ts","sourceRoot":"","sources":["review-status.ts"],"names":[],"mappings":"AAAA,OAAO,CAAC,MAAM,KAAK,CAAC;AAIpB,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,aAAa,CAAC;AAE9C,eAAO,MAAM,kBAAkB,EAAE,UAOhC,CAAC;AAEF,eAAO,MAAM,kBAAkB;;;mBAG7B,CAAC;AAEH,MAAM,MAAM,iBAAiB,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,kBAAkB,CAAC,CAAC;AAEnE,UAAU,
|
|
1
|
+
{"version":3,"file":"review-status.d.ts","sourceRoot":"","sources":["review-status.ts"],"names":[],"mappings":"AAAA,OAAO,CAAC,MAAM,KAAK,CAAC;AAIpB,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,aAAa,CAAC;AAE9C,eAAO,MAAM,kBAAkB,EAAE,UAOhC,CAAC;AAEF,eAAO,MAAM,kBAAkB;;;mBAG7B,CAAC;AAEH,MAAM,MAAM,iBAAiB,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,kBAAkB,CAAC,CAAC;AAEnE,UAAU,YAAY;IACpB,CAAC,GAAG,EAAE,MAAM,GAAG,MAAM,CAAC;IACtB,OAAO,EAAE,MAAM,CAAC;IAChB,QAAQ,EAAE,MAAM,CAAC;IACjB,QAAQ,EAAE,MAAM,CAAC;IACjB,QAAQ,EAAE,MAAM,CAAC;IACjB,KAAK,EAAE,MAAM,CAAC;CACf;AAED,wBAAsB,YAAY,CAChC,KAAK,EAAE,iBAAiB,GACvB,OAAO,CAAC;IAAE,GAAG,EAAE,MAAM,CAAC;IAAC,QAAQ,EAAE,YAAY,CAAC;IAAC,SAAS,EAAE,YAAY,CAAA;CAAE,CAAC,CAgC3E"}
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import z from 'zod';
|
|
2
2
|
import { DEFAULT_DB_PATH } from '../constants.js';
|
|
3
|
-
import {
|
|
3
|
+
import { createEchoesRAG } from '../rag/index.js';
|
|
4
4
|
export const reviewStatusConfig = {
|
|
5
5
|
name: 'review-status',
|
|
6
6
|
description: 'Show review statistics for an arc.',
|
|
@@ -13,48 +13,36 @@ export const reviewStatusSchema = z.object({
|
|
|
13
13
|
arc: z.string().min(1).describe(reviewStatusConfig.arguments.arc),
|
|
14
14
|
dbPath: z.string().default(DEFAULT_DB_PATH).describe(reviewStatusConfig.arguments.dbPath),
|
|
15
15
|
});
|
|
16
|
-
function getReviewStatus(item) {
|
|
17
|
-
return item.review_status || 'pending';
|
|
18
|
-
}
|
|
19
16
|
export async function reviewStatus(input) {
|
|
20
17
|
const { arc, dbPath } = reviewStatusSchema.parse(input);
|
|
21
|
-
const
|
|
22
|
-
|
|
23
|
-
const
|
|
24
|
-
const relations = await db.getRelations(arc);
|
|
25
|
-
db.close();
|
|
26
|
-
// Count entity statuses
|
|
27
|
-
const entityStats = {
|
|
18
|
+
const { storage } = createEchoesRAG({ dbPath, arc });
|
|
19
|
+
const entityStats = { pending: 0, approved: 0, rejected: 0, modified: 0, total: 0 };
|
|
20
|
+
const relationStats = {
|
|
28
21
|
pending: 0,
|
|
29
22
|
approved: 0,
|
|
30
23
|
rejected: 0,
|
|
31
24
|
modified: 0,
|
|
32
|
-
total:
|
|
25
|
+
total: 0,
|
|
33
26
|
};
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
27
|
+
const entities = await storage.graph.getEntities();
|
|
28
|
+
entityStats.total = entities.length;
|
|
29
|
+
for (const e of entities) {
|
|
30
|
+
const status = e.fields?.review_status || 'pending';
|
|
31
|
+
if (status in entityStats)
|
|
37
32
|
entityStats[status]++;
|
|
38
|
-
}
|
|
39
33
|
}
|
|
40
|
-
|
|
41
|
-
const
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
if (status in relationStats) {
|
|
51
|
-
relationStats[status]++;
|
|
34
|
+
const seen = new Set();
|
|
35
|
+
for (const e of entities) {
|
|
36
|
+
for (const r of await storage.graph.getRelations(e.id, 'out')) {
|
|
37
|
+
if (seen.has(r.id))
|
|
38
|
+
continue;
|
|
39
|
+
seen.add(r.id);
|
|
40
|
+
relationStats.total++;
|
|
41
|
+
const status = r.fields?.review_status || 'pending';
|
|
42
|
+
if (status in relationStats)
|
|
43
|
+
relationStats[status]++;
|
|
52
44
|
}
|
|
53
45
|
}
|
|
54
|
-
return {
|
|
55
|
-
arc,
|
|
56
|
-
entities: entityStats,
|
|
57
|
-
relations: relationStats,
|
|
58
|
-
};
|
|
46
|
+
return { arc, entities: entityStats, relations: relationStats };
|
|
59
47
|
}
|
|
60
48
|
//# sourceMappingURL=review-status.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"review-status.js","sourceRoot":"","sources":["review-status.ts"],"names":[],"mappings":"AAAA,OAAO,CAAC,MAAM,KAAK,CAAC;AAEpB,OAAO,EAAE,eAAe,EAAE,MAAM,iBAAiB,CAAC;AAClD,OAAO,EAAE,
|
|
1
|
+
{"version":3,"file":"review-status.js","sourceRoot":"","sources":["review-status.ts"],"names":[],"mappings":"AAAA,OAAO,CAAC,MAAM,KAAK,CAAC;AAEpB,OAAO,EAAE,eAAe,EAAE,MAAM,iBAAiB,CAAC;AAClD,OAAO,EAAE,eAAe,EAAE,MAAM,iBAAiB,CAAC;AAGlD,MAAM,CAAC,MAAM,kBAAkB,GAAe;IAC5C,IAAI,EAAE,eAAe;IACrB,WAAW,EAAE,oCAAoC;IACjD,SAAS,EAAE;QACT,GAAG,EAAE,sCAAsC;QAC3C,MAAM,EAAE,2BAA2B,eAAe,IAAI;KACvD;CACF,CAAC;AAEF,MAAM,CAAC,MAAM,kBAAkB,GAAG,CAAC,CAAC,MAAM,CAAC;IACzC,GAAG,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,kBAAkB,CAAC,SAAS,CAAC,GAAG,CAAC;IACjE,MAAM,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,OAAO,CAAC,eAAe,CAAC,CAAC,QAAQ,CAAC,kBAAkB,CAAC,SAAS,CAAC,MAAM,CAAC;CAC1F,CAAC,CAAC;AAaH,MAAM,CAAC,KAAK,UAAU,YAAY,CAChC,KAAwB;IAExB,MAAM,EAAE,GAAG,EAAE,MAAM,EAAE,GAAG,kBAAkB,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC;IACxD,MAAM,EAAE,OAAO,EAAE,GAAG,eAAe,CAAC,EAAE,MAAM,EAAE,GAAG,EAAE,CAAC,CAAC;IAErD,MAAM,WAAW,GAAiB,EAAE,OAAO,EAAE,CAAC,EAAE,QAAQ,EAAE,CAAC,EAAE,QAAQ,EAAE,CAAC,EAAE,QAAQ,EAAE,CAAC,EAAE,KAAK,EAAE,CAAC,EAAE,CAAC;IAClG,MAAM,aAAa,GAAiB;QAClC,OAAO,EAAE,CAAC;QACV,QAAQ,EAAE,CAAC;QACX,QAAQ,EAAE,CAAC;QACX,QAAQ,EAAE,CAAC;QACX,KAAK,EAAE,CAAC;KACT,CAAC;IAEF,MAAM,QAAQ,GAAG,MAAM,OAAO,CAAC,KAAK,CAAC,WAAW,EAAE,CAAC;IACnD,WAAW,CAAC,KAAK,GAAG,QAAQ,CAAC,MAAM,CAAC;IACpC,KAAK,MAAM,CAAC,IAAI,QAAQ,EAAE,CAAC;QACzB,MAAM,MAAM,GAAI,CAAC,CAAC,MAAM,EAAE,aAAwB,IAAI,SAAS,CAAC;QAChE,IAAI,MAAM,IAAI,WAAW;YAAE,WAAW,CAAC,MAAM,CAAC,EAAE,CAAC;IACnD,CAAC;IAED,MAAM,IAAI,GAAG,IAAI,GAAG,EAAU,CAAC;IAC/B,KAAK,MAAM,CAAC,IAAI,QAAQ,EAAE,CAAC;QACzB,KAAK,MAAM,CAAC,IAAI,MAAM,OAAO,CAAC,KAAK,CAAC,YAAY,CAAC,CAAC,CAAC,EAAE,EAAE,KAAK,CAAC,EAAE,CAAC;YAC9D,IAAI,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC;gBAAE,SAAS;YAC7B,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC;YACf,aAAa,CAAC,KAAK,EAAE,CAAC;YACtB,MAAM,MAAM,GAAI,CAAC,CAAC,MAAM,EAAE,aAAwB,IAAI,SAAS,CAAC;YAChE,IAAI,MAAM,IAAI,aAAa;gBAAE,aAAa,CAAC,MAAM,CAAC,EAAE,CAAC;QACvD,CAAC;IACH,CAAC;IAED,OAAO,EAAE,GAAG,EAAE,QAAQ,EAAE,WAAW,EAAE,SAAS,EAAE,aAAa,EAAE,CAAC;AAClE,CAAC"}
|
package/lib/tools/search.d.ts
CHANGED
|
@@ -4,9 +4,9 @@ export declare const searchConfig: ToolConfig;
|
|
|
4
4
|
export declare const searchSchema: z.ZodObject<{
|
|
5
5
|
query: z.ZodString;
|
|
6
6
|
type: z.ZodDefault<z.ZodEnum<{
|
|
7
|
+
relations: "relations";
|
|
7
8
|
entities: "entities";
|
|
8
9
|
chapters: "chapters";
|
|
9
|
-
relations: "relations";
|
|
10
10
|
}>>;
|
|
11
11
|
arc: z.ZodOptional<z.ZodString>;
|
|
12
12
|
entityType: z.ZodOptional<z.ZodString>;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"search.d.ts","sourceRoot":"","sources":["search.ts"],"names":[],"mappings":"AAAA,OAAO,CAAC,MAAM,KAAK,CAAC;
|
|
1
|
+
{"version":3,"file":"search.d.ts","sourceRoot":"","sources":["search.ts"],"names":[],"mappings":"AAAA,OAAO,CAAC,MAAM,KAAK,CAAC;AAIpB,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,aAAa,CAAC;AAE9C,eAAO,MAAM,YAAY,EAAE,UAY1B,CAAC;AAEF,eAAO,MAAM,YAAY;;;;;;;;;;;;mBAWvB,CAAC;AAEH,MAAM,MAAM,WAAW,GAAG;IACxB,KAAK,EAAE,MAAM,CAAC;IACd,IAAI,CAAC,EAAE,UAAU,GAAG,UAAU,GAAG,WAAW,CAAC;IAC7C,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,MAAM,CAAC,EAAE,MAAM,CAAC;CACjB,CAAC;AAEF,MAAM,WAAW,aAAa;IAC5B,EAAE,EAAE,MAAM,CAAC;IACX,GAAG,EAAE,MAAM,CAAC;IACZ,OAAO,EAAE,MAAM,CAAC;IAChB,OAAO,EAAE,MAAM,CAAC;IAChB,GAAG,EAAE,MAAM,CAAC;IACZ,KAAK,EAAE,MAAM,CAAC;IACd,QAAQ,EAAE,MAAM,CAAC;IACjB,OAAO,EAAE,MAAM,CAAC;IAChB,UAAU,EAAE,MAAM,CAAC;IACnB,KAAK,EAAE,MAAM,CAAC;CACf;AAED,MAAM,WAAW,YAAY;IAC3B,EAAE,EAAE,MAAM,CAAC;IACX,GAAG,EAAE,MAAM,CAAC;IACZ,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,MAAM,CAAC;IACb,WAAW,EAAE,MAAM,CAAC;IACpB,OAAO,EAAE,MAAM,EAAE,CAAC;IAClB,aAAa,EAAE,MAAM,CAAC;IACtB,KAAK,EAAE,MAAM,CAAC;CACf;AAED,MAAM,WAAW,cAAc;IAC7B,EAAE,EAAE,MAAM,CAAC;IACX,GAAG,EAAE,MAAM,CAAC;IACZ,aAAa,EAAE,MAAM,CAAC;IACtB,aAAa,EAAE,MAAM,CAAC;IACtB,IAAI,EAAE,MAAM,CAAC;IACb,WAAW,EAAE,MAAM,CAAC;IACpB,QAAQ,EAAE,MAAM,EAAE,CAAC;CACpB;AAED,MAAM,MAAM,YAAY,GACpB;IAAE,IAAI,EAAE,UAAU,CAAC;IAAC,OAAO,EAAE,aAAa,EAAE,CAAA;CAAE,GAC9C;IAAE,IAAI,EAAE,UAAU,CAAC;IAAC,OAAO,EAAE,YAAY,EAAE,CAAA;CAAE,GAC7C;IAAE,IAAI,EAAE,WAAW,CAAC;IAAC,OAAO,EAAE,cAAc,EAAE,CAAA;CAAE,CAAC;AAErD,wBAAsB,MAAM,CAC1B,KAAK,EAAE,WAAW,GAAG;IAAE,IAAI,EAAE,UAAU,CAAA;CAAE,GACxC,OAAO,CAAC;IAAE,IAAI,EAAE,UAAU,CAAC;IAAC,OAAO,EAAE,aAAa,EAAE,CAAA;CAAE,CAAC,CAAC;AAC3D,wBAAsB,MAAM,CAC1B,KAAK,EAAE,WAAW,GAAG;IAAE,IAAI,EAAE,UAAU,CAAA;CAAE,GACxC,OAAO,CAAC;IAAE,IAAI,EAAE,UAAU,CAAC;IAAC,OAAO,EAAE,YAAY,EAAE,CAAA;CAAE,CAAC,CAAC;AAC1D,wBAAsB,MAAM,CAC1B,KAAK,EAAE,WAAW,GAAG;IAAE,IAAI,EAAE,WAAW,CAAA;CAAE,GACzC,OAAO,CAAC;IAAE,IAAI,EAAE,WAAW,CAAC;IAAC,OAAO,EAAE,cAAc,EAAE,CAAA;CAAE,CAAC,CAAC;AAC7D,wBAAsB,MAAM,CAAC,KAAK,EAAE,WAAW,GAAG,OAAO,CAAC,YAAY,CAAC,CAAC"}
|
package/lib/tools/search.js
CHANGED
|
@@ -1,7 +1,6 @@
|
|
|
1
1
|
import z from 'zod';
|
|
2
2
|
import { DEFAULT_DB_PATH } from '../constants.js';
|
|
3
|
-
import {
|
|
4
|
-
import { generateEmbedding } from '../indexer/embeddings.js';
|
|
3
|
+
import { createEchoesRAG } from '../rag/index.js';
|
|
5
4
|
export const searchConfig = {
|
|
6
5
|
name: 'search',
|
|
7
6
|
description: 'Search indexed content using semantic similarity or filters.',
|
|
@@ -29,67 +28,86 @@ export const searchSchema = z.object({
|
|
|
29
28
|
});
|
|
30
29
|
export async function search(input) {
|
|
31
30
|
const { query, type, arc, entityType, relationType, limit, dbPath } = searchSchema.parse(input);
|
|
32
|
-
const
|
|
33
|
-
await db.connect();
|
|
31
|
+
const { rag, storage } = createEchoesRAG({ dbPath, arc });
|
|
34
32
|
if (type === 'chapters') {
|
|
35
|
-
const
|
|
36
|
-
const chapters = await db.searchChapters(vector, limit, arc);
|
|
37
|
-
db.close();
|
|
33
|
+
const results = await rag.search(query, { limit });
|
|
38
34
|
return {
|
|
39
35
|
type: 'chapters',
|
|
40
|
-
results:
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
36
|
+
results: results.map((r) => {
|
|
37
|
+
const m = r.metadata ?? {};
|
|
38
|
+
const content = String(m.content ?? r.content ?? '');
|
|
39
|
+
return {
|
|
40
|
+
id: String(m.documentId ?? r.id),
|
|
41
|
+
arc: arc ?? String(m.arc ?? m.__ns ?? ''),
|
|
42
|
+
episode: Number(m.episode ?? 0),
|
|
43
|
+
chapter: Number(m.chapter ?? 0),
|
|
44
|
+
pov: String(m.pov ?? ''),
|
|
45
|
+
title: String(m.title ?? ''),
|
|
46
|
+
location: String(m.location ?? ''),
|
|
47
|
+
content: content.length > 500 ? `${content.slice(0, 500)}...` : content,
|
|
48
|
+
word_count: Number(m.word_count ?? 0),
|
|
49
|
+
score: r.score,
|
|
50
|
+
};
|
|
51
|
+
}),
|
|
53
52
|
};
|
|
54
53
|
}
|
|
55
54
|
if (type === 'entities') {
|
|
56
|
-
const
|
|
57
|
-
const entities = await db.searchEntities(vector, limit, arc, entityType);
|
|
58
|
-
db.close();
|
|
55
|
+
const results = await rag.searchEntities(query, { limit, type: entityType });
|
|
59
56
|
return {
|
|
60
57
|
type: 'entities',
|
|
61
|
-
results:
|
|
62
|
-
id:
|
|
63
|
-
arc:
|
|
64
|
-
name:
|
|
65
|
-
type:
|
|
66
|
-
description:
|
|
67
|
-
aliases:
|
|
68
|
-
chapter_count:
|
|
69
|
-
|
|
70
|
-
score: 1 - (e._distance ?? 0),
|
|
58
|
+
results: results.map((r) => ({
|
|
59
|
+
id: r.entity.id,
|
|
60
|
+
arc: arc ?? extractArc(r.entity.id),
|
|
61
|
+
name: r.entity.name,
|
|
62
|
+
type: r.entity.type,
|
|
63
|
+
description: r.entity.description,
|
|
64
|
+
aliases: r.entity.fields?.aliases ?? [],
|
|
65
|
+
chapter_count: r.entity.sourceChunkIds.length,
|
|
66
|
+
score: r.score,
|
|
71
67
|
})),
|
|
72
68
|
};
|
|
73
69
|
}
|
|
74
70
|
// type === 'relations'
|
|
75
|
-
const
|
|
76
|
-
|
|
77
|
-
// Filter relations by query (simple text match on source/target/description)
|
|
71
|
+
const entities = await storage.graph.getEntities();
|
|
72
|
+
const allRelations = await collectRelations(entities, storage, relationType);
|
|
78
73
|
const queryLower = query.toLowerCase();
|
|
79
|
-
const filtered =
|
|
74
|
+
const filtered = allRelations.filter((r) => r.source_entity.toLowerCase().includes(queryLower) ||
|
|
80
75
|
r.target_entity.toLowerCase().includes(queryLower) ||
|
|
81
76
|
r.description.toLowerCase().includes(queryLower));
|
|
82
77
|
return {
|
|
83
78
|
type: 'relations',
|
|
84
79
|
results: filtered.slice(0, limit).map((r) => ({
|
|
85
|
-
|
|
86
|
-
arc: r.
|
|
87
|
-
source_entity: r.source_entity,
|
|
88
|
-
target_entity: r.target_entity,
|
|
89
|
-
type: r.type,
|
|
90
|
-
description: r.description,
|
|
91
|
-
chapters: r.chapters,
|
|
80
|
+
...r,
|
|
81
|
+
arc: arc ?? extractArc(r.id),
|
|
92
82
|
})),
|
|
93
83
|
};
|
|
94
84
|
}
|
|
85
|
+
function extractArc(namespacedId) {
|
|
86
|
+
const i = namespacedId.indexOf(':');
|
|
87
|
+
return i >= 0 ? namespacedId.slice(0, i) : '';
|
|
88
|
+
}
|
|
89
|
+
async function collectRelations(entities, storage, typeFilter) {
|
|
90
|
+
const seen = new Set();
|
|
91
|
+
const results = [];
|
|
92
|
+
for (const entity of entities) {
|
|
93
|
+
const rels = await storage.graph.getRelations(entity.id, 'out');
|
|
94
|
+
for (const r of rels) {
|
|
95
|
+
if (seen.has(r.id))
|
|
96
|
+
continue;
|
|
97
|
+
seen.add(r.id);
|
|
98
|
+
if (typeFilter && r.type !== typeFilter)
|
|
99
|
+
continue;
|
|
100
|
+
results.push({
|
|
101
|
+
id: r.id,
|
|
102
|
+
arc: '',
|
|
103
|
+
source_entity: r.sourceId,
|
|
104
|
+
target_entity: r.targetId,
|
|
105
|
+
type: r.type,
|
|
106
|
+
description: r.description,
|
|
107
|
+
chapters: r.sourceChunkIds ?? [],
|
|
108
|
+
});
|
|
109
|
+
}
|
|
110
|
+
}
|
|
111
|
+
return results;
|
|
112
|
+
}
|
|
95
113
|
//# sourceMappingURL=search.js.map
|
package/lib/tools/search.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"search.js","sourceRoot":"","sources":["search.ts"],"names":[],"mappings":"AAAA,OAAO,CAAC,MAAM,KAAK,CAAC;AAEpB,OAAO,EAAE,eAAe,EAAE,MAAM,iBAAiB,CAAC;AAClD,OAAO,EAAE,
|
|
1
|
+
{"version":3,"file":"search.js","sourceRoot":"","sources":["search.ts"],"names":[],"mappings":"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"}
|
package/lib/tools/stats.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"stats.d.ts","sourceRoot":"","sources":["stats.ts"],"names":[],"mappings":"AAAA,OAAO,CAAC,MAAM,KAAK,CAAC;AAIpB,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,aAAa,CAAC;AAE9C,eAAO,MAAM,WAAW,EAAE,UAQzB,CAAC;AAEF,eAAO,MAAM,WAAW;;;;mBAItB,CAAC;AAEH,MAAM,MAAM,UAAU,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,WAAW,CAAC,CAAC;AAErD,MAAM,WAAW,WAAW;IAC1B,aAAa,EAAE,MAAM,CAAC;IACtB,UAAU,EAAE,MAAM,CAAC;IACnB,IAAI,EAAE,MAAM,EAAE,CAAC;IACf,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IAC7B,sBAAsB,EAAE,MAAM,CAAC;CAChC;
|
|
1
|
+
{"version":3,"file":"stats.d.ts","sourceRoot":"","sources":["stats.ts"],"names":[],"mappings":"AAAA,OAAO,CAAC,MAAM,KAAK,CAAC;AAIpB,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,aAAa,CAAC;AAE9C,eAAO,MAAM,WAAW,EAAE,UAQzB,CAAC;AAEF,eAAO,MAAM,WAAW;;;;mBAItB,CAAC;AAEH,MAAM,MAAM,UAAU,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,WAAW,CAAC,CAAC;AAErD,MAAM,WAAW,WAAW;IAC1B,aAAa,EAAE,MAAM,CAAC;IACtB,UAAU,EAAE,MAAM,CAAC;IACnB,IAAI,EAAE,MAAM,EAAE,CAAC;IACf,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IAC7B,sBAAsB,EAAE,MAAM,CAAC;CAChC;AAiDD,wBAAsB,KAAK,CAAC,KAAK,EAAE,UAAU,GAAG,OAAO,CAAC,WAAW,CAAC,CA6CnE"}
|
package/lib/tools/stats.js
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import z from 'zod';
|
|
2
2
|
import { DEFAULT_DB_PATH } from '../constants.js';
|
|
3
|
-
import {
|
|
3
|
+
import { createEchoesRAG } from '../rag/index.js';
|
|
4
4
|
export const statsConfig = {
|
|
5
5
|
name: 'stats',
|
|
6
6
|
description: 'Get aggregate statistics for indexed timeline content.',
|
|
@@ -20,19 +20,55 @@ function parseFilter(value) {
|
|
|
20
20
|
return undefined;
|
|
21
21
|
return value.split(',').map((v) => v.trim().toLowerCase());
|
|
22
22
|
}
|
|
23
|
+
async function getChapterMetas(dbPath, arc) {
|
|
24
|
+
const { storage } = createEchoesRAG({ dbPath, arc });
|
|
25
|
+
const metas = [];
|
|
26
|
+
if (arc) {
|
|
27
|
+
// Namespaced: keys are already stripped of prefix
|
|
28
|
+
const keys = await storage.kv.list('doc:');
|
|
29
|
+
for (const key of keys) {
|
|
30
|
+
const doc = await storage.kv.get(key);
|
|
31
|
+
const fields = doc?.metadata?.fields;
|
|
32
|
+
if (!fields)
|
|
33
|
+
continue;
|
|
34
|
+
metas.push({
|
|
35
|
+
arc,
|
|
36
|
+
pov: String(fields.pov ?? '').toLowerCase(),
|
|
37
|
+
word_count: Number(fields.word_count ?? 0),
|
|
38
|
+
});
|
|
39
|
+
}
|
|
40
|
+
}
|
|
41
|
+
else {
|
|
42
|
+
// Non-namespaced: keys have arc prefix like "bloom:doc:..."
|
|
43
|
+
const keys = await storage.kv.list();
|
|
44
|
+
for (const key of keys) {
|
|
45
|
+
if (!key.includes(':doc:'))
|
|
46
|
+
continue;
|
|
47
|
+
const doc = await storage.kv.get(key);
|
|
48
|
+
const fields = doc?.metadata?.fields;
|
|
49
|
+
if (!fields)
|
|
50
|
+
continue;
|
|
51
|
+
metas.push({
|
|
52
|
+
arc: String(fields.arc ?? key.split(':')[0]),
|
|
53
|
+
pov: String(fields.pov ?? '').toLowerCase(),
|
|
54
|
+
word_count: Number(fields.word_count ?? 0),
|
|
55
|
+
});
|
|
56
|
+
}
|
|
57
|
+
}
|
|
58
|
+
return metas;
|
|
59
|
+
}
|
|
23
60
|
export async function stats(input) {
|
|
24
61
|
const { arc, pov, dbPath } = statsSchema.parse(input);
|
|
25
62
|
const arcFilter = parseFilter(arc);
|
|
26
63
|
const povFilter = parseFilter(pov);
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
64
|
+
let chapters = await getChapterMetas(dbPath, arcFilter?.length === 1 ? arcFilter[0] : undefined);
|
|
65
|
+
if (chapters.length === 0 && arcFilter) {
|
|
66
|
+
throw new Error(`No chapters found for arc "${arc}".`);
|
|
67
|
+
}
|
|
30
68
|
if (chapters.length === 0) {
|
|
31
69
|
throw new Error('No indexed chapters found. Run "index" first.');
|
|
32
70
|
}
|
|
33
|
-
|
|
34
|
-
chapters = chapters.map((c) => ({ ...c, pov: c.pov.toLowerCase() }));
|
|
35
|
-
if (arcFilter) {
|
|
71
|
+
if (arcFilter && arcFilter.length > 1) {
|
|
36
72
|
chapters = chapters.filter((c) => arcFilter.includes(c.arc.toLowerCase()));
|
|
37
73
|
if (chapters.length === 0) {
|
|
38
74
|
throw new Error(`No chapters found for arc "${arc}".`);
|
package/lib/tools/stats.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"stats.js","sourceRoot":"","sources":["stats.ts"],"names":[],"mappings":"AAAA,OAAO,CAAC,MAAM,KAAK,CAAC;AAEpB,OAAO,EAAE,eAAe,EAAE,MAAM,iBAAiB,CAAC;AAClD,OAAO,EAAE,
|
|
1
|
+
{"version":3,"file":"stats.js","sourceRoot":"","sources":["stats.ts"],"names":[],"mappings":"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"}
|
package/lib/types.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["types.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["types.ts"],"names":[],"mappings":"AACA,MAAM,WAAW,OAAO;IACtB,IAAI,EAAE,MAAM,CAAC;IACb,WAAW,EAAE,MAAM,CAAC;IACpB,OAAO,EAAE,MAAM,CAAC;CACjB;AAED,MAAM,WAAW,UAAU;IACzB,IAAI,EAAE,MAAM,CAAC;IACb,WAAW,EAAE,MAAM,CAAC;IACpB,SAAS,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;CACnC;AAED,MAAM,WAAW,eAAe;IAC9B,GAAG,EAAE,MAAM,CAAC;IACZ,KAAK,EAAE,MAAM,CAAC;IACd,IAAI,EAAE,MAAM,CAAC;IACb,QAAQ,EAAE,MAAM,CAAC;IACjB,GAAG,EAAE,MAAM,CAAC;IACZ,OAAO,EAAE,MAAM,CAAC;IAChB,IAAI,EAAE,MAAM,CAAC;IACb,OAAO,EAAE,MAAM,CAAC;IAChB,OAAO,EAAE,MAAM,CAAC;IAChB,QAAQ,EAAE,MAAM,CAAC;IACjB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,IAAI,CAAC,EAAE,MAAM,CAAC;CACf;AAED,MAAM,WAAW,cAAc;IAC7B,QAAQ,EAAE,eAAe,CAAC;IAC1B,OAAO,EAAE,MAAM,CAAC;CACjB"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@echoes-io/mcp-server",
|
|
3
|
-
"version": "
|
|
3
|
+
"version": "8.0.0",
|
|
4
4
|
"description": "📚 Model Context Protocol server for AI-powered storytelling with Narrative Knowledge Graph - extract characters, locations, relationships and search your stories semantically.",
|
|
5
5
|
"type": "module",
|
|
6
6
|
"bin": {
|
|
@@ -88,14 +88,16 @@
|
|
|
88
88
|
},
|
|
89
89
|
"dependencies": {
|
|
90
90
|
"@commander-js/extra-typings": "^14.0.0",
|
|
91
|
-
"@
|
|
92
|
-
"@
|
|
93
|
-
"@
|
|
91
|
+
"@flowrag/core": "^1.7.1",
|
|
92
|
+
"@flowrag/pipeline": "^1.8.0",
|
|
93
|
+
"@flowrag/provider-gemini": "^1.5.0",
|
|
94
|
+
"@flowrag/provider-local": "^1.5.1",
|
|
95
|
+
"@flowrag/storage-json": "^1.1.3",
|
|
96
|
+
"@flowrag/storage-lancedb": "^1.1.3",
|
|
97
|
+
"@flowrag/storage-sqlite": "^1.4.1",
|
|
94
98
|
"@modelcontextprotocol/sdk": "^1.25.1",
|
|
95
|
-
"apache-arrow": "^18.1.0",
|
|
96
99
|
"commander": "^14.0.2",
|
|
97
100
|
"gray-matter": "^4.0.3",
|
|
98
|
-
"listr2": "^9.0.5",
|
|
99
101
|
"remove-markdown": "^0.6.2",
|
|
100
102
|
"zod": "^4.2.1"
|
|
101
103
|
}
|
package/lib/database/index.d.ts
DELETED
|
@@ -1,36 +0,0 @@
|
|
|
1
|
-
import { type Connection } from '@lancedb/lancedb';
|
|
2
|
-
import { type ChapterRecord, type EntityRecord, type RelationRecord } from './schemas.js';
|
|
3
|
-
export declare class Database {
|
|
4
|
-
readonly dbPath: string;
|
|
5
|
-
private readonly force;
|
|
6
|
-
private db;
|
|
7
|
-
private tables;
|
|
8
|
-
private migrationChecked;
|
|
9
|
-
private metadata;
|
|
10
|
-
private _embeddingDim;
|
|
11
|
-
private tableConfigs;
|
|
12
|
-
private get metadataPath();
|
|
13
|
-
constructor(dbPath: string, force?: boolean);
|
|
14
|
-
private getMetadata;
|
|
15
|
-
private getTableConfigs;
|
|
16
|
-
get embeddingModel(): string;
|
|
17
|
-
get embeddingDim(): number;
|
|
18
|
-
private getConnection;
|
|
19
|
-
private checkMigration;
|
|
20
|
-
private saveMetadata;
|
|
21
|
-
connect(): Promise<Connection>;
|
|
22
|
-
private getTable;
|
|
23
|
-
private upsert;
|
|
24
|
-
upsertChapters(records: ChapterRecord[]): Promise<number>;
|
|
25
|
-
upsertEntities(records: EntityRecord[]): Promise<number>;
|
|
26
|
-
upsertRelations(records: RelationRecord[]): Promise<number>;
|
|
27
|
-
getChapters(arc?: string): Promise<ChapterRecord[]>;
|
|
28
|
-
getChapterHashes(): Promise<Map<string, string>>;
|
|
29
|
-
deleteChaptersByPaths(paths: string[]): Promise<number>;
|
|
30
|
-
searchChapters(vector: number[], limit: number, arc?: string): Promise<ChapterRecord[]>;
|
|
31
|
-
searchEntities(vector: number[], limit: number, arc?: string, type?: string): Promise<EntityRecord[]>;
|
|
32
|
-
getEntities(arc?: string, type?: string): Promise<EntityRecord[]>;
|
|
33
|
-
getRelations(arc?: string, type?: string): Promise<RelationRecord[]>;
|
|
34
|
-
close(): void;
|
|
35
|
-
}
|
|
36
|
-
//# sourceMappingURL=index.d.ts.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["index.ts"],"names":[],"mappings":"AAGA,OAAO,EAAE,KAAK,UAAU,EAAuB,MAAM,kBAAkB,CAAC;AAKxE,OAAO,EACL,KAAK,aAAa,EAGlB,KAAK,YAAY,EACjB,KAAK,cAAc,EAEpB,MAAM,cAAc,CAAC;AAatB,qBAAa,QAAQ;aAiBD,MAAM,EAAE,MAAM;IAC9B,OAAO,CAAC,QAAQ,CAAC,KAAK;IAjBxB,OAAO,CAAC,EAAE,CAA2B;IACrC,OAAO,CAAC,MAAM,CAA4B;IAC1C,OAAO,CAAC,gBAAgB,CAAS;IACjC,OAAO,CAAC,QAAQ,CAAyB;IACzC,OAAO,CAAC,aAAa,CAAuB;IAC5C,OAAO,CAAC,YAAY,CAIJ;IAEhB,OAAO,KAAK,YAAY,GAEvB;gBAGiB,MAAM,EAAE,MAAM,EACb,KAAK,UAAQ;YAGlB,WAAW;YAcX,eAAe;IAc7B,IAAI,cAAc,IAAI,MAAM,CAG3B;IAED,IAAI,YAAY,IAAI,MAAM,CAGzB;YAEa,aAAa;YAKb,cAAc;IAwD5B,OAAO,CAAC,YAAY;IAQd,OAAO,IAAI,OAAO,CAAC,UAAU,CAAC;YAKtB,QAAQ;YAeR,MAAM;IAWd,cAAc,CAAC,OAAO,EAAE,aAAa,EAAE,GAAG,OAAO,CAAC,MAAM,CAAC;IAKzD,cAAc,CAAC,OAAO,EAAE,YAAY,EAAE,GAAG,OAAO,CAAC,MAAM,CAAC;IAYxD,eAAe,CAAC,OAAO,EAAE,cAAc,EAAE,GAAG,OAAO,CAAC,MAAM,CAAC;IAY3D,WAAW,CAAC,GAAG,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,aAAa,EAAE,CAAC;IAgBnD,gBAAgB,IAAI,OAAO,CAAC,GAAG,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IAahD,qBAAqB,CAAC,KAAK,EAAE,MAAM,EAAE,GAAG,OAAO,CAAC,MAAM,CAAC;IAgBvD,cAAc,CAAC,MAAM,EAAE,MAAM,EAAE,EAAE,KAAK,EAAE,MAAM,EAAE,GAAG,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,aAAa,EAAE,CAAC;IAgBvF,cAAc,CAClB,MAAM,EAAE,MAAM,EAAE,EAChB,KAAK,EAAE,MAAM,EACb,GAAG,CAAC,EAAE,MAAM,EACZ,IAAI,CAAC,EAAE,MAAM,GACZ,OAAO,CAAC,YAAY,EAAE,CAAC;IAmBpB,WAAW,CAAC,GAAG,CAAC,EAAE,MAAM,EAAE,IAAI,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,YAAY,EAAE,CAAC;IAmBjE,YAAY,CAAC,GAAG,CAAC,EAAE,MAAM,EAAE,IAAI,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,cAAc,EAAE,CAAC;IAmB1E,KAAK,IAAI,IAAI;CAId"}
|