@mcp-graph-workflow/mcp-graph 5.8.0 → 5.9.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/dist/core/code/code-types.d.ts +3 -3
- package/dist/core/integrations/integration-orchestrator.d.ts.map +1 -1
- package/dist/core/integrations/integration-orchestrator.js +2 -0
- package/dist/core/integrations/integration-orchestrator.js.map +1 -1
- package/dist/core/rag/entity-extractor.d.ts +30 -0
- package/dist/core/rag/entity-extractor.d.ts.map +1 -0
- package/dist/core/rag/entity-extractor.js +224 -0
- package/dist/core/rag/entity-extractor.js.map +1 -0
- package/dist/core/rag/entity-index-hook.d.ts +25 -0
- package/dist/core/rag/entity-index-hook.d.ts.map +1 -0
- package/dist/core/rag/entity-index-hook.js +75 -0
- package/dist/core/rag/entity-index-hook.js.map +1 -0
- package/dist/core/rag/entity-indexer.d.ts +33 -0
- package/dist/core/rag/entity-indexer.d.ts.map +1 -0
- package/dist/core/rag/entity-indexer.js +91 -0
- package/dist/core/rag/entity-indexer.js.map +1 -0
- package/dist/core/rag/entity-store.d.ts +91 -0
- package/dist/core/rag/entity-store.d.ts.map +1 -0
- package/dist/core/rag/entity-store.js +395 -0
- package/dist/core/rag/entity-store.js.map +1 -0
- package/dist/core/rag/multi-strategy-retrieval.d.ts.map +1 -1
- package/dist/core/rag/multi-strategy-retrieval.js +49 -3
- package/dist/core/rag/multi-strategy-retrieval.js.map +1 -1
- package/dist/core/rag/node-indexer.d.ts +26 -0
- package/dist/core/rag/node-indexer.d.ts.map +1 -0
- package/dist/core/rag/node-indexer.js +108 -0
- package/dist/core/rag/node-indexer.js.map +1 -0
- package/dist/core/rag/query-understanding.d.ts +23 -0
- package/dist/core/rag/query-understanding.d.ts.map +1 -1
- package/dist/core/rag/query-understanding.js +85 -0
- package/dist/core/rag/query-understanding.js.map +1 -1
- package/dist/core/store/migrations.d.ts.map +1 -1
- package/dist/core/store/migrations.js +51 -0
- package/dist/core/store/migrations.js.map +1 -1
- package/dist/mcp/tools/clone-node.d.ts.map +1 -1
- package/dist/mcp/tools/clone-node.js +5 -0
- package/dist/mcp/tools/clone-node.js.map +1 -1
- package/dist/mcp/tools/import-graph.d.ts.map +1 -1
- package/dist/mcp/tools/import-graph.js +14 -0
- package/dist/mcp/tools/import-graph.js.map +1 -1
- package/dist/mcp/tools/import-prd.d.ts.map +1 -1
- package/dist/mcp/tools/import-prd.js +2 -0
- package/dist/mcp/tools/import-prd.js.map +1 -1
- package/dist/mcp/tools/journey.d.ts.map +1 -1
- package/dist/mcp/tools/journey.js +2 -0
- package/dist/mcp/tools/journey.js.map +1 -1
- package/dist/mcp/tools/manage-skill.d.ts.map +1 -1
- package/dist/mcp/tools/manage-skill.js +3 -0
- package/dist/mcp/tools/manage-skill.js.map +1 -1
- package/dist/mcp/tools/memory.d.ts.map +1 -1
- package/dist/mcp/tools/memory.js +2 -0
- package/dist/mcp/tools/memory.js.map +1 -1
- package/dist/mcp/tools/node.d.ts.map +1 -1
- package/dist/mcp/tools/node.js +4 -0
- package/dist/mcp/tools/node.js.map +1 -1
- package/dist/mcp/tools/plan-sprint.d.ts.map +1 -1
- package/dist/mcp/tools/plan-sprint.js +3 -1
- package/dist/mcp/tools/plan-sprint.js.map +1 -1
- package/dist/mcp/tools/reindex-knowledge.d.ts.map +1 -1
- package/dist/mcp/tools/reindex-knowledge.js +42 -1
- package/dist/mcp/tools/reindex-knowledge.js.map +1 -1
- package/dist/mcp/tools/siebel-import-docs.d.ts.map +1 -1
- package/dist/mcp/tools/siebel-import-docs.js +3 -0
- package/dist/mcp/tools/siebel-import-docs.js.map +1 -1
- package/dist/mcp/tools/siebel-import-sif.d.ts.map +1 -1
- package/dist/mcp/tools/siebel-import-sif.js +2 -0
- package/dist/mcp/tools/siebel-import-sif.js.map +1 -1
- package/dist/mcp/tools/sync-stack-docs.d.ts.map +1 -1
- package/dist/mcp/tools/sync-stack-docs.js +2 -0
- package/dist/mcp/tools/sync-stack-docs.js.map +1 -1
- package/dist/mcp/tools/update-status.d.ts.map +1 -1
- package/dist/mcp/tools/update-status.js +2 -0
- package/dist/mcp/tools/update-status.js.map +1 -1
- package/dist/mcp/tools/validate.d.ts.map +1 -1
- package/dist/mcp/tools/validate.js +3 -0
- package/dist/mcp/tools/validate.js.map +1 -1
- package/dist/schemas/entity.schema.d.ts +80 -0
- package/dist/schemas/entity.schema.d.ts.map +1 -0
- package/dist/schemas/entity.schema.js +56 -0
- package/dist/schemas/entity.schema.js.map +1 -0
- package/dist/schemas/knowledge.schema.d.ts +2 -0
- package/dist/schemas/knowledge.schema.d.ts.map +1 -1
- package/dist/schemas/knowledge.schema.js +1 -1
- package/dist/schemas/knowledge.schema.js.map +1 -1
- package/dist/schemas/siebel.schema.d.ts +3 -3
- package/package.json +2 -2
|
@@ -15,9 +15,9 @@ export declare const SymbolKindSchema: z.ZodEnum<{
|
|
|
15
15
|
export type SymbolKind = z.infer<typeof SymbolKindSchema>;
|
|
16
16
|
export declare const RelationTypeSchema: z.ZodEnum<{
|
|
17
17
|
implements: "implements";
|
|
18
|
+
extends: "extends";
|
|
18
19
|
calls: "calls";
|
|
19
20
|
imports: "imports";
|
|
20
|
-
extends: "extends";
|
|
21
21
|
belongs_to: "belongs_to";
|
|
22
22
|
}>;
|
|
23
23
|
export type CodeRelationType = z.infer<typeof RelationTypeSchema>;
|
|
@@ -57,9 +57,9 @@ export declare const CodeRelationSchema: z.ZodObject<{
|
|
|
57
57
|
toSymbol: z.ZodString;
|
|
58
58
|
type: z.ZodEnum<{
|
|
59
59
|
implements: "implements";
|
|
60
|
+
extends: "extends";
|
|
60
61
|
calls: "calls";
|
|
61
62
|
imports: "imports";
|
|
62
|
-
extends: "extends";
|
|
63
63
|
belongs_to: "belongs_to";
|
|
64
64
|
}>;
|
|
65
65
|
file: z.ZodOptional<z.ZodNullable<z.ZodString>>;
|
|
@@ -98,9 +98,9 @@ export declare const CodeGraphDataSchema: z.ZodObject<{
|
|
|
98
98
|
toSymbol: z.ZodString;
|
|
99
99
|
type: z.ZodEnum<{
|
|
100
100
|
implements: "implements";
|
|
101
|
+
extends: "extends";
|
|
101
102
|
calls: "calls";
|
|
102
103
|
imports: "imports";
|
|
103
|
-
extends: "extends";
|
|
104
104
|
belongs_to: "belongs_to";
|
|
105
105
|
}>;
|
|
106
106
|
file: z.ZodOptional<z.ZodNullable<z.ZodString>>;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"integration-orchestrator.d.ts","sourceRoot":"","sources":["../../../src/core/integrations/integration-orchestrator.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAEH,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,wBAAwB,CAAC;AAE5D,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,0BAA0B,CAAC;
|
|
1
|
+
{"version":3,"file":"integration-orchestrator.d.ts","sourceRoot":"","sources":["../../../src/core/integrations/integration-orchestrator.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAEH,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,wBAAwB,CAAC;AAE5D,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,0BAA0B,CAAC;AAS5D,MAAM,WAAW,mBAAmB;IAClC,wBAAwB;IACxB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,oDAAoD;IACpD,WAAW,CAAC,EAAE,OAAO,CAAC;CACvB;AAED,MAAM,WAAW,iBAAiB;IAChC,MAAM,EAAE,MAAM,CAAC;IACf,QAAQ,EAAE,MAAM,GAAG,IAAI,CAAC;IACxB,aAAa,EAAE,MAAM,CAAC;IACtB,MAAM,EAAE,MAAM,GAAG,SAAS,GAAG,OAAO,CAAC;IACrC,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB;AAED,qBAAa,uBAAuB;IAClC,OAAO,CAAC,KAAK,CAAc;IAC3B,OAAO,CAAC,QAAQ,CAAgB;IAChC,OAAO,CAAC,QAAQ,CAAS;IACzB,OAAO,CAAC,WAAW,CAAU;IAC7B,OAAO,CAAC,QAAQ,CAAwC;gBAGtD,KAAK,EAAE,WAAW,EAClB,QAAQ,EAAE,aAAa,EACvB,OAAO,CAAC,EAAE,mBAAmB;IAU/B;;OAEG;IACH,QAAQ,IAAI,IAAI;IA2BhB;;OAEG;IACH,WAAW,IAAI,iBAAiB,EAAE;IAelC;;OAEG;YACW,iBAAiB;IAqC/B;;OAEG;IACH,OAAO,CAAC,kBAAkB;IAK1B;;OAEG;IACH,OAAO,CAAC,mBAAmB;IAM3B;;OAEG;IACH,OAAO,CAAC,sBAAsB;IAM9B;;OAEG;IACH,OAAO,CAAC,oBAAoB;IAM5B,OAAO,CAAC,YAAY;IAcpB,OAAO,CAAC,YAAY;CAQrB"}
|
|
@@ -12,6 +12,7 @@ import { DocsCacheStore } from "../docs/docs-cache-store.js";
|
|
|
12
12
|
import { EmbeddingStore } from "../rag/embedding-store.js";
|
|
13
13
|
import { indexCachedDocs } from "../rag/docs-indexer.js";
|
|
14
14
|
import { indexAllEmbeddings } from "../rag/rag-pipeline.js";
|
|
15
|
+
import { indexEntitiesForSource } from "../rag/entity-index-hook.js";
|
|
15
16
|
import { logger } from "../utils/logger.js";
|
|
16
17
|
export class IntegrationOrchestrator {
|
|
17
18
|
store;
|
|
@@ -76,6 +77,7 @@ export class IntegrationOrchestrator {
|
|
|
76
77
|
const docsCacheStore = new DocsCacheStore(this.store.getDb());
|
|
77
78
|
// Re-index docs cache
|
|
78
79
|
const docsResult = indexCachedDocs(knowledgeStore, docsCacheStore);
|
|
80
|
+
indexEntitiesForSource(this.store.getDb(), "docs");
|
|
79
81
|
// Rebuild embeddings
|
|
80
82
|
const embeddingStore = new EmbeddingStore(this.store);
|
|
81
83
|
embeddingStore.clear();
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"integration-orchestrator.js","sourceRoot":"","sources":["../../../src/core/integrations/integration-orchestrator.ts"],"names":[],"mappings":"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
|
|
1
|
+
{"version":3,"file":"integration-orchestrator.js","sourceRoot":"","sources":["../../../src/core/integrations/integration-orchestrator.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,30 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Entity Extractor — heuristic-based extraction of entities and relations
|
|
3
|
+
* from text content. No LLM dependency, uses regex patterns and
|
|
4
|
+
* domain-specific dictionaries.
|
|
5
|
+
*
|
|
6
|
+
* Extends the basic extractEntities from enrichment-pipeline.ts with
|
|
7
|
+
* richer type classification and relation detection.
|
|
8
|
+
*/
|
|
9
|
+
import type { EntityType, EntityRelationType } from "../../schemas/entity.schema.js";
|
|
10
|
+
export interface ExtractedEntity {
|
|
11
|
+
name: string;
|
|
12
|
+
type: EntityType;
|
|
13
|
+
}
|
|
14
|
+
export interface ExtractedRelation {
|
|
15
|
+
fromName: string;
|
|
16
|
+
toName: string;
|
|
17
|
+
relationType: EntityRelationType;
|
|
18
|
+
weight: number;
|
|
19
|
+
}
|
|
20
|
+
/**
|
|
21
|
+
* Extract entities from text using heuristic patterns.
|
|
22
|
+
* Returns deduplicated list of entities with type classification.
|
|
23
|
+
*/
|
|
24
|
+
export declare function extractEntitiesFromText(text: string): ExtractedEntity[];
|
|
25
|
+
/**
|
|
26
|
+
* Extract relations between known entities from text.
|
|
27
|
+
* Uses pattern matching on sentences containing entity names.
|
|
28
|
+
*/
|
|
29
|
+
export declare function extractRelationsFromText(text: string, entities: ExtractedEntity[]): ExtractedRelation[];
|
|
30
|
+
//# sourceMappingURL=entity-extractor.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"entity-extractor.d.ts","sourceRoot":"","sources":["../../../src/core/rag/entity-extractor.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAGH,OAAO,KAAK,EAAE,UAAU,EAAE,kBAAkB,EAAE,MAAM,gCAAgC,CAAC;AAIrF,MAAM,WAAW,eAAe;IAC9B,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,UAAU,CAAC;CAClB;AAED,MAAM,WAAW,iBAAiB;IAChC,QAAQ,EAAE,MAAM,CAAC;IACjB,MAAM,EAAE,MAAM,CAAC;IACf,YAAY,EAAE,kBAAkB,CAAC;IACjC,MAAM,EAAE,MAAM,CAAC;CAChB;AAkFD;;;GAGG;AACH,wBAAgB,uBAAuB,CAAC,IAAI,EAAE,MAAM,GAAG,eAAe,EAAE,CAgGvE;AAED;;;GAGG;AACH,wBAAgB,wBAAwB,CACtC,IAAI,EAAE,MAAM,EACZ,QAAQ,EAAE,eAAe,EAAE,GAC1B,iBAAiB,EAAE,CA0FrB"}
|
|
@@ -0,0 +1,224 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Entity Extractor — heuristic-based extraction of entities and relations
|
|
3
|
+
* from text content. No LLM dependency, uses regex patterns and
|
|
4
|
+
* domain-specific dictionaries.
|
|
5
|
+
*
|
|
6
|
+
* Extends the basic extractEntities from enrichment-pipeline.ts with
|
|
7
|
+
* richer type classification and relation detection.
|
|
8
|
+
*/
|
|
9
|
+
import { logger } from "../utils/logger.js";
|
|
10
|
+
// ── Technology dictionary ────────────────────────────────
|
|
11
|
+
const TECHNOLOGY_TERMS = new Set([
|
|
12
|
+
"TypeScript", "JavaScript", "Python", "Rust", "Go", "Java", "C#", "Ruby",
|
|
13
|
+
"SQLite", "PostgreSQL", "MySQL", "MongoDB", "Redis", "DynamoDB",
|
|
14
|
+
"React", "Vue", "Angular", "Svelte", "Next.js", "Nuxt",
|
|
15
|
+
"Node.js", "Deno", "Bun",
|
|
16
|
+
"Express", "Fastify", "Koa", "Hono",
|
|
17
|
+
"Docker", "Kubernetes", "Terraform", "AWS", "Azure", "GCP",
|
|
18
|
+
"GraphQL", "REST", "gRPC", "WebSocket",
|
|
19
|
+
"Vitest", "Jest", "Mocha", "Playwright", "Cypress",
|
|
20
|
+
"Webpack", "Vite", "Rollup", "esbuild", "Turbopack",
|
|
21
|
+
"Git", "GitHub", "GitLab",
|
|
22
|
+
"Tailwind", "CSS", "HTML", "Sass", "SCSS",
|
|
23
|
+
"Zod", "Prisma", "Drizzle", "Knex",
|
|
24
|
+
"FTS5", "BM25", "TF-IDF",
|
|
25
|
+
"ESLint", "Prettier", "Biome",
|
|
26
|
+
"Commander.js", "MCP",
|
|
27
|
+
]);
|
|
28
|
+
// Case-insensitive lookup map
|
|
29
|
+
const TECH_LOWER_MAP = new Map();
|
|
30
|
+
for (const term of TECHNOLOGY_TERMS) {
|
|
31
|
+
TECH_LOWER_MAP.set(term.toLowerCase(), term);
|
|
32
|
+
}
|
|
33
|
+
// ── Entity extraction patterns ───────────────────────────
|
|
34
|
+
/** PascalCase: at least two words joined (e.g., GraphNode, SqliteStore) */
|
|
35
|
+
// eslint-disable-next-line security/detect-unsafe-regex -- bounded pattern, safe for identifiers
|
|
36
|
+
const PASCAL_CASE_RE = /\b([A-Z][a-z]+(?:[A-Z][a-z0-9]*)+)\b/g;
|
|
37
|
+
/** camelCase: starts lowercase, has at least one uppercase (e.g., findNextTask) */
|
|
38
|
+
const CAMEL_CASE_RE = /\b([a-z][a-zA-Z0-9]*[A-Z][a-zA-Z0-9]*)\b/g;
|
|
39
|
+
/** File paths: src/... or similar path patterns */
|
|
40
|
+
const FILE_PATH_RE = /\b((?:src|lib|dist|test|tests)\/[\w\-./]+\.(?:ts|js|tsx|jsx|json|md|sql))\b/g;
|
|
41
|
+
/** Scoped npm packages: @scope/name */
|
|
42
|
+
const SCOPED_PACKAGE_RE = /(@[\w-]+\/[\w-]+)/g;
|
|
43
|
+
/** Non-scoped packages after "import" or known patterns */
|
|
44
|
+
// eslint-disable-next-line security/detect-unsafe-regex -- bounded pattern for import statements
|
|
45
|
+
const PACKAGE_IMPORT_RE = /(?:from\s+["'])([a-z][\w-]*(?:\/[\w-]+)?)(?:["'])/g;
|
|
46
|
+
/** API endpoints: GET/POST/PUT/DELETE/PATCH /path */
|
|
47
|
+
const API_ENDPOINT_RE = /\b((?:GET|POST|PUT|DELETE|PATCH)\s+\/[\w/\-:{}]+)/g;
|
|
48
|
+
/** UPPER_SNAKE_CASE: config constants (at least 2 segments) */
|
|
49
|
+
// eslint-disable-next-line security/detect-unsafe-regex -- bounded quantifiers, safe for identifiers
|
|
50
|
+
const UPPER_SNAKE_RE = /\b([A-Z][A-Z0-9]*(?:_[A-Z0-9]+)+)\b/g;
|
|
51
|
+
/** Markdown headings: ## Title */
|
|
52
|
+
const HEADING_RE = /^#{1,3}\s+(.+)$/gm;
|
|
53
|
+
/** Backtick-quoted concepts: `something here` (2+ chars) */
|
|
54
|
+
const BACKTICK_RE = /`([^`]{2,50})`/g;
|
|
55
|
+
const RELATION_PATTERNS = [
|
|
56
|
+
{ pattern: /\buses\b|\butiliza\b|\busing\b/i, relationType: "uses", weight: 0.8 },
|
|
57
|
+
{ pattern: /\bimplements\b|\bimplementa\b|\bimplementing\b/i, relationType: "implements", weight: 0.9 },
|
|
58
|
+
{ pattern: /\bdepends\s+on\b|\bdepende\s+de\b/i, relationType: "depends_on", weight: 0.9 },
|
|
59
|
+
{ pattern: /\bextends\b|\bestende\b|\bextending\b/i, relationType: "extends", weight: 0.9 },
|
|
60
|
+
{ pattern: /\bcalls\b|\bchama\b|\bcalling\b/i, relationType: "calls", weight: 0.7 },
|
|
61
|
+
{ pattern: /\bis\s+part\s+of\b|\bfaz\s+parte\s+de\b|\bbelongs\s+to\b/i, relationType: "part_of", weight: 0.8 },
|
|
62
|
+
];
|
|
63
|
+
/** Import statement: import { X } from "Y" */
|
|
64
|
+
const IMPORT_RE = /import\s+\{([^}]+)\}\s+from\s+["']([^"']+)["']/g;
|
|
65
|
+
// ── Main extraction functions ────────────────────────────
|
|
66
|
+
/**
|
|
67
|
+
* Extract entities from text using heuristic patterns.
|
|
68
|
+
* Returns deduplicated list of entities with type classification.
|
|
69
|
+
*/
|
|
70
|
+
export function extractEntitiesFromText(text) {
|
|
71
|
+
const seen = new Map();
|
|
72
|
+
function add(name, type) {
|
|
73
|
+
const key = `${name}::${type}`;
|
|
74
|
+
if (!seen.has(key)) {
|
|
75
|
+
seen.set(key, { name, type });
|
|
76
|
+
}
|
|
77
|
+
}
|
|
78
|
+
// 1. Technology terms (check before PascalCase to get correct type)
|
|
79
|
+
// Strip trailing punctuation (.!?:) from each word before matching
|
|
80
|
+
const words = text.split(/[\s,;()[\]{}"'`]+/);
|
|
81
|
+
for (const rawWord of words) {
|
|
82
|
+
const word = rawWord.replace(/[.!?:]+$/, "");
|
|
83
|
+
const tech = TECH_LOWER_MAP.get(word.toLowerCase());
|
|
84
|
+
if (tech) {
|
|
85
|
+
add(tech, "technology");
|
|
86
|
+
}
|
|
87
|
+
}
|
|
88
|
+
// 2. PascalCase → class (skip if already a technology)
|
|
89
|
+
PASCAL_CASE_RE.lastIndex = 0;
|
|
90
|
+
let match;
|
|
91
|
+
while ((match = PASCAL_CASE_RE.exec(text)) !== null) {
|
|
92
|
+
const name = match[1];
|
|
93
|
+
if (!TECH_LOWER_MAP.has(name.toLowerCase())) {
|
|
94
|
+
add(name, "class");
|
|
95
|
+
}
|
|
96
|
+
}
|
|
97
|
+
// 3. camelCase → function
|
|
98
|
+
CAMEL_CASE_RE.lastIndex = 0;
|
|
99
|
+
while ((match = CAMEL_CASE_RE.exec(text)) !== null) {
|
|
100
|
+
add(match[1], "function");
|
|
101
|
+
}
|
|
102
|
+
// 4. File paths
|
|
103
|
+
FILE_PATH_RE.lastIndex = 0;
|
|
104
|
+
while ((match = FILE_PATH_RE.exec(text)) !== null) {
|
|
105
|
+
add(match[1], "file");
|
|
106
|
+
}
|
|
107
|
+
// 5. Scoped packages
|
|
108
|
+
SCOPED_PACKAGE_RE.lastIndex = 0;
|
|
109
|
+
while ((match = SCOPED_PACKAGE_RE.exec(text)) !== null) {
|
|
110
|
+
add(match[1], "package");
|
|
111
|
+
}
|
|
112
|
+
// 6. Package imports (non-scoped, from import statements)
|
|
113
|
+
PACKAGE_IMPORT_RE.lastIndex = 0;
|
|
114
|
+
while ((match = PACKAGE_IMPORT_RE.exec(text)) !== null) {
|
|
115
|
+
const pkg = match[1];
|
|
116
|
+
// Skip relative imports
|
|
117
|
+
if (!pkg.startsWith(".") && !pkg.startsWith("/")) {
|
|
118
|
+
add(pkg, "package");
|
|
119
|
+
}
|
|
120
|
+
}
|
|
121
|
+
// 7. API endpoints
|
|
122
|
+
API_ENDPOINT_RE.lastIndex = 0;
|
|
123
|
+
while ((match = API_ENDPOINT_RE.exec(text)) !== null) {
|
|
124
|
+
add(match[1], "api_endpoint");
|
|
125
|
+
}
|
|
126
|
+
// 8. UPPER_SNAKE_CASE config constants
|
|
127
|
+
UPPER_SNAKE_RE.lastIndex = 0;
|
|
128
|
+
while ((match = UPPER_SNAKE_RE.exec(text)) !== null) {
|
|
129
|
+
const name = match[1];
|
|
130
|
+
// Skip common false positives
|
|
131
|
+
if (name.length >= 4 && !["TODO", "NOTE", "FIXME", "HACK"].includes(name)) {
|
|
132
|
+
add(name, "config");
|
|
133
|
+
}
|
|
134
|
+
}
|
|
135
|
+
// 9. Markdown headings → domain terms
|
|
136
|
+
HEADING_RE.lastIndex = 0;
|
|
137
|
+
while ((match = HEADING_RE.exec(text)) !== null) {
|
|
138
|
+
const heading = match[1].trim();
|
|
139
|
+
if (heading.length >= 3 && heading.length <= 80) {
|
|
140
|
+
add(heading, "domain_term");
|
|
141
|
+
}
|
|
142
|
+
}
|
|
143
|
+
// 10. Backtick-quoted concepts
|
|
144
|
+
BACKTICK_RE.lastIndex = 0;
|
|
145
|
+
while ((match = BACKTICK_RE.exec(text)) !== null) {
|
|
146
|
+
const concept = match[1].trim();
|
|
147
|
+
// Skip if it looks like code (has dots, slashes, parens)
|
|
148
|
+
if (concept.length >= 3 && !/[./()[\]{}]/.test(concept)) {
|
|
149
|
+
add(concept, "concept");
|
|
150
|
+
}
|
|
151
|
+
}
|
|
152
|
+
logger.debug("entity-extractor:entities", { count: seen.size });
|
|
153
|
+
return Array.from(seen.values());
|
|
154
|
+
}
|
|
155
|
+
/**
|
|
156
|
+
* Extract relations between known entities from text.
|
|
157
|
+
* Uses pattern matching on sentences containing entity names.
|
|
158
|
+
*/
|
|
159
|
+
export function extractRelationsFromText(text, entities) {
|
|
160
|
+
const relations = [];
|
|
161
|
+
const seen = new Set();
|
|
162
|
+
function addRelation(from, to, type, weight) {
|
|
163
|
+
const key = `${from}→${to}→${type}`;
|
|
164
|
+
if (!seen.has(key) && from !== to) {
|
|
165
|
+
seen.add(key);
|
|
166
|
+
relations.push({ fromName: from, toName: to, relationType: type, weight });
|
|
167
|
+
}
|
|
168
|
+
}
|
|
169
|
+
// Split text into sentences for pattern matching
|
|
170
|
+
const sentences = text.split(/[.!?\n]+/).filter((s) => s.trim().length > 0);
|
|
171
|
+
for (const sentence of sentences) {
|
|
172
|
+
// Find which entities appear in this sentence
|
|
173
|
+
const presentEntities = entities.filter((e) => sentence.includes(e.name));
|
|
174
|
+
if (presentEntities.length < 2)
|
|
175
|
+
continue;
|
|
176
|
+
// Check relation patterns in sentence
|
|
177
|
+
for (const rp of RELATION_PATTERNS) {
|
|
178
|
+
if (rp.pattern.test(sentence)) {
|
|
179
|
+
// Find the entity pair: first entity before pattern, second after
|
|
180
|
+
for (let i = 0; i < presentEntities.length; i++) {
|
|
181
|
+
for (let j = 0; j < presentEntities.length; j++) {
|
|
182
|
+
if (i === j)
|
|
183
|
+
continue;
|
|
184
|
+
const fromIdx = sentence.indexOf(presentEntities[i].name);
|
|
185
|
+
const toIdx = sentence.indexOf(presentEntities[j].name);
|
|
186
|
+
if (fromIdx < toIdx) {
|
|
187
|
+
addRelation(presentEntities[i].name, presentEntities[j].name, rp.relationType, rp.weight);
|
|
188
|
+
}
|
|
189
|
+
}
|
|
190
|
+
}
|
|
191
|
+
}
|
|
192
|
+
}
|
|
193
|
+
}
|
|
194
|
+
// Import statement relations
|
|
195
|
+
IMPORT_RE.lastIndex = 0;
|
|
196
|
+
let importMatch;
|
|
197
|
+
while ((importMatch = IMPORT_RE.exec(text)) !== null) {
|
|
198
|
+
const imports = importMatch[1].split(",").map((s) => s.trim());
|
|
199
|
+
const source = importMatch[2];
|
|
200
|
+
for (const imp of imports) {
|
|
201
|
+
const cleanName = imp.replace(/\s+as\s+\w+/, "").trim();
|
|
202
|
+
const matchingEntity = entities.find((e) => e.name === cleanName);
|
|
203
|
+
if (matchingEntity) {
|
|
204
|
+
// Create a "uses" relation from the imported symbol to its source
|
|
205
|
+
addRelation(cleanName, source, "uses", 0.7);
|
|
206
|
+
}
|
|
207
|
+
}
|
|
208
|
+
}
|
|
209
|
+
// Co-occurrence in same heading section → related_to (weak)
|
|
210
|
+
const sections = text.split(/^#{1,3}\s+/m);
|
|
211
|
+
for (const section of sections) {
|
|
212
|
+
const sectionEntities = entities.filter((e) => section.includes(e.name));
|
|
213
|
+
if (sectionEntities.length >= 2 && sectionEntities.length <= 6) {
|
|
214
|
+
for (let i = 0; i < sectionEntities.length; i++) {
|
|
215
|
+
for (let j = i + 1; j < sectionEntities.length; j++) {
|
|
216
|
+
addRelation(sectionEntities[i].name, sectionEntities[j].name, "related_to", 0.5);
|
|
217
|
+
}
|
|
218
|
+
}
|
|
219
|
+
}
|
|
220
|
+
}
|
|
221
|
+
logger.debug("entity-extractor:relations", { count: relations.length });
|
|
222
|
+
return relations;
|
|
223
|
+
}
|
|
224
|
+
//# sourceMappingURL=entity-extractor.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"entity-extractor.js","sourceRoot":"","sources":["../../../src/core/rag/entity-extractor.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Entity Index Hook — safe wrapper for entity indexing in MCP tools.
|
|
3
|
+
*
|
|
4
|
+
* Call after KnowledgeStore.insert() or insertChunks() to extract
|
|
5
|
+
* entities into the Knowledge Graph. Never throws — logs and returns
|
|
6
|
+
* silently on failure to avoid disrupting the main operation.
|
|
7
|
+
*/
|
|
8
|
+
import type Database from "better-sqlite3";
|
|
9
|
+
/**
|
|
10
|
+
* Index entities from a single knowledge document into the KG.
|
|
11
|
+
* Safe: never throws. Logs warning on failure.
|
|
12
|
+
*/
|
|
13
|
+
export declare function indexEntitiesForDoc(db: Database.Database, docId: string): void;
|
|
14
|
+
/**
|
|
15
|
+
* Index entities from multiple knowledge documents into the KG.
|
|
16
|
+
* Safe: never throws. Logs warning on individual failures.
|
|
17
|
+
*/
|
|
18
|
+
export declare function indexEntitiesForDocs(db: Database.Database, docIds: string[]): void;
|
|
19
|
+
/**
|
|
20
|
+
* Index entities from all knowledge documents matching a source type.
|
|
21
|
+
* Useful after bulk indexing operations.
|
|
22
|
+
* Safe: never throws.
|
|
23
|
+
*/
|
|
24
|
+
export declare function indexEntitiesForSource(db: Database.Database, sourceType: string): void;
|
|
25
|
+
//# sourceMappingURL=entity-index-hook.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"entity-index-hook.d.ts","sourceRoot":"","sources":["../../../src/core/rag/entity-index-hook.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAEH,OAAO,KAAK,QAAQ,MAAM,gBAAgB,CAAC;AAK3C;;;GAGG;AACH,wBAAgB,mBAAmB,CAAC,EAAE,EAAE,QAAQ,CAAC,QAAQ,EAAE,KAAK,EAAE,MAAM,GAAG,IAAI,CAQ9E;AAED;;;GAGG;AACH,wBAAgB,oBAAoB,CAAC,EAAE,EAAE,QAAQ,CAAC,QAAQ,EAAE,MAAM,EAAE,MAAM,EAAE,GAAG,IAAI,CAelF;AAED;;;;GAIG;AACH,wBAAgB,sBAAsB,CAAC,EAAE,EAAE,QAAQ,CAAC,QAAQ,EAAE,UAAU,EAAE,MAAM,GAAG,IAAI,CAqBtF"}
|
|
@@ -0,0 +1,75 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Entity Index Hook — safe wrapper for entity indexing in MCP tools.
|
|
3
|
+
*
|
|
4
|
+
* Call after KnowledgeStore.insert() or insertChunks() to extract
|
|
5
|
+
* entities into the Knowledge Graph. Never throws — logs and returns
|
|
6
|
+
* silently on failure to avoid disrupting the main operation.
|
|
7
|
+
*/
|
|
8
|
+
import { indexDocument } from "./entity-indexer.js";
|
|
9
|
+
import { EntityStore } from "./entity-store.js";
|
|
10
|
+
import { logger } from "../utils/logger.js";
|
|
11
|
+
/**
|
|
12
|
+
* Index entities from a single knowledge document into the KG.
|
|
13
|
+
* Safe: never throws. Logs warning on failure.
|
|
14
|
+
*/
|
|
15
|
+
export function indexEntitiesForDoc(db, docId) {
|
|
16
|
+
try {
|
|
17
|
+
const store = new EntityStore(db);
|
|
18
|
+
if (!store.hasKgTables())
|
|
19
|
+
return;
|
|
20
|
+
indexDocument(db, docId);
|
|
21
|
+
}
|
|
22
|
+
catch (err) {
|
|
23
|
+
logger.warn("entity-index-hook:doc-failed", { docId, error: String(err) });
|
|
24
|
+
}
|
|
25
|
+
}
|
|
26
|
+
/**
|
|
27
|
+
* Index entities from multiple knowledge documents into the KG.
|
|
28
|
+
* Safe: never throws. Logs warning on individual failures.
|
|
29
|
+
*/
|
|
30
|
+
export function indexEntitiesForDocs(db, docIds) {
|
|
31
|
+
try {
|
|
32
|
+
const store = new EntityStore(db);
|
|
33
|
+
if (!store.hasKgTables())
|
|
34
|
+
return;
|
|
35
|
+
for (const docId of docIds) {
|
|
36
|
+
try {
|
|
37
|
+
indexDocument(db, docId);
|
|
38
|
+
}
|
|
39
|
+
catch (err) {
|
|
40
|
+
logger.warn("entity-index-hook:doc-failed", { docId, error: String(err) });
|
|
41
|
+
}
|
|
42
|
+
}
|
|
43
|
+
}
|
|
44
|
+
catch (err) {
|
|
45
|
+
logger.warn("entity-index-hook:batch-failed", { count: docIds.length, error: String(err) });
|
|
46
|
+
}
|
|
47
|
+
}
|
|
48
|
+
/**
|
|
49
|
+
* Index entities from all knowledge documents matching a source type.
|
|
50
|
+
* Useful after bulk indexing operations.
|
|
51
|
+
* Safe: never throws.
|
|
52
|
+
*/
|
|
53
|
+
export function indexEntitiesForSource(db, sourceType) {
|
|
54
|
+
try {
|
|
55
|
+
const store = new EntityStore(db);
|
|
56
|
+
if (!store.hasKgTables())
|
|
57
|
+
return;
|
|
58
|
+
const docs = db
|
|
59
|
+
.prepare("SELECT id FROM knowledge_documents WHERE source_type = ?")
|
|
60
|
+
.all(sourceType);
|
|
61
|
+
for (const doc of docs) {
|
|
62
|
+
try {
|
|
63
|
+
indexDocument(db, doc.id);
|
|
64
|
+
}
|
|
65
|
+
catch (err) {
|
|
66
|
+
logger.warn("entity-index-hook:doc-failed", { docId: doc.id, error: String(err) });
|
|
67
|
+
}
|
|
68
|
+
}
|
|
69
|
+
logger.debug("entity-index-hook:source-complete", { sourceType, count: docs.length });
|
|
70
|
+
}
|
|
71
|
+
catch (err) {
|
|
72
|
+
logger.warn("entity-index-hook:source-failed", { sourceType, error: String(err) });
|
|
73
|
+
}
|
|
74
|
+
}
|
|
75
|
+
//# sourceMappingURL=entity-index-hook.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"entity-index-hook.js","sourceRoot":"","sources":["../../../src/core/rag/entity-index-hook.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAGH,OAAO,EAAE,aAAa,EAAE,MAAM,qBAAqB,CAAC;AACpD,OAAO,EAAE,WAAW,EAAE,MAAM,mBAAmB,CAAC;AAChD,OAAO,EAAE,MAAM,EAAE,MAAM,oBAAoB,CAAC;AAE5C;;;GAGG;AACH,MAAM,UAAU,mBAAmB,CAAC,EAAqB,EAAE,KAAa;IACtE,IAAI,CAAC;QACH,MAAM,KAAK,GAAG,IAAI,WAAW,CAAC,EAAE,CAAC,CAAC;QAClC,IAAI,CAAC,KAAK,CAAC,WAAW,EAAE;YAAE,OAAO;QACjC,aAAa,CAAC,EAAE,EAAE,KAAK,CAAC,CAAC;IAC3B,CAAC;IAAC,OAAO,GAAG,EAAE,CAAC;QACb,MAAM,CAAC,IAAI,CAAC,8BAA8B,EAAE,EAAE,KAAK,EAAE,KAAK,EAAE,MAAM,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;IAC7E,CAAC;AACH,CAAC;AAED;;;GAGG;AACH,MAAM,UAAU,oBAAoB,CAAC,EAAqB,EAAE,MAAgB;IAC1E,IAAI,CAAC;QACH,MAAM,KAAK,GAAG,IAAI,WAAW,CAAC,EAAE,CAAC,CAAC;QAClC,IAAI,CAAC,KAAK,CAAC,WAAW,EAAE;YAAE,OAAO;QAEjC,KAAK,MAAM,KAAK,IAAI,MAAM,EAAE,CAAC;YAC3B,IAAI,CAAC;gBACH,aAAa,CAAC,EAAE,EAAE,KAAK,CAAC,CAAC;YAC3B,CAAC;YAAC,OAAO,GAAG,EAAE,CAAC;gBACb,MAAM,CAAC,IAAI,CAAC,8BAA8B,EAAE,EAAE,KAAK,EAAE,KAAK,EAAE,MAAM,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;YAC7E,CAAC;QACH,CAAC;IACH,CAAC;IAAC,OAAO,GAAG,EAAE,CAAC;QACb,MAAM,CAAC,IAAI,CAAC,gCAAgC,EAAE,EAAE,KAAK,EAAE,MAAM,CAAC,MAAM,EAAE,KAAK,EAAE,MAAM,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;IAC9F,CAAC;AACH,CAAC;AAED;;;;GAIG;AACH,MAAM,UAAU,sBAAsB,CAAC,EAAqB,EAAE,UAAkB;IAC9E,IAAI,CAAC;QACH,MAAM,KAAK,GAAG,IAAI,WAAW,CAAC,EAAE,CAAC,CAAC;QAClC,IAAI,CAAC,KAAK,CAAC,WAAW,EAAE;YAAE,OAAO;QAEjC,MAAM,IAAI,GAAG,EAAE;aACZ,OAAO,CAAC,0DAA0D,CAAC;aACnE,GAAG,CAAC,UAAU,CAA0B,CAAC;QAE5C,KAAK,MAAM,GAAG,IAAI,IAAI,EAAE,CAAC;YACvB,IAAI,CAAC;gBACH,aAAa,CAAC,EAAE,EAAE,GAAG,CAAC,EAAE,CAAC,CAAC;YAC5B,CAAC;YAAC,OAAO,GAAG,EAAE,CAAC;gBACb,MAAM,CAAC,IAAI,CAAC,8BAA8B,EAAE,EAAE,KAAK,EAAE,GAAG,CAAC,EAAE,EAAE,KAAK,EAAE,MAAM,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;YACrF,CAAC;QACH,CAAC;QAED,MAAM,CAAC,KAAK,CAAC,mCAAmC,EAAE,EAAE,UAAU,EAAE,KAAK,EAAE,IAAI,CAAC,MAAM,EAAE,CAAC,CAAC;IACxF,CAAC;IAAC,OAAO,GAAG,EAAE,CAAC;QACb,MAAM,CAAC,IAAI,CAAC,iCAAiC,EAAE,EAAE,UAAU,EAAE,KAAK,EAAE,MAAM,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;IACrF,CAAC;AACH,CAAC"}
|
|
@@ -0,0 +1,33 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Entity Indexer — orchestrates entity extraction from knowledge documents
|
|
3
|
+
* and populates the EntityStore (Knowledge Graph).
|
|
4
|
+
*
|
|
5
|
+
* Processes knowledge documents to extract entities and relations,
|
|
6
|
+
* storing them in the KG tables for graph-based retrieval.
|
|
7
|
+
*/
|
|
8
|
+
import type Database from "better-sqlite3";
|
|
9
|
+
export interface IndexDocumentResult {
|
|
10
|
+
docId: string;
|
|
11
|
+
entitiesCreated: number;
|
|
12
|
+
relationsCreated: number;
|
|
13
|
+
}
|
|
14
|
+
export interface ReindexResult {
|
|
15
|
+
documentsProcessed: number;
|
|
16
|
+
totalEntities: number;
|
|
17
|
+
totalRelations: number;
|
|
18
|
+
totalMentions: number;
|
|
19
|
+
}
|
|
20
|
+
/**
|
|
21
|
+
* Index a single knowledge document — extract entities and relations,
|
|
22
|
+
* store in the KG.
|
|
23
|
+
*/
|
|
24
|
+
export declare function indexDocument(db: Database.Database, docId: string): IndexDocumentResult;
|
|
25
|
+
/**
|
|
26
|
+
* Reindex all knowledge documents — clear KG and rebuild from scratch.
|
|
27
|
+
*/
|
|
28
|
+
export declare function reindexAll(db: Database.Database): ReindexResult;
|
|
29
|
+
/**
|
|
30
|
+
* Index a batch of documents by their IDs.
|
|
31
|
+
*/
|
|
32
|
+
export declare function indexBatch(db: Database.Database, docIds: string[]): IndexDocumentResult[];
|
|
33
|
+
//# sourceMappingURL=entity-indexer.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"entity-indexer.d.ts","sourceRoot":"","sources":["../../../src/core/rag/entity-indexer.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAEH,OAAO,KAAK,QAAQ,MAAM,gBAAgB,CAAC;AAO3C,MAAM,WAAW,mBAAmB;IAClC,KAAK,EAAE,MAAM,CAAC;IACd,eAAe,EAAE,MAAM,CAAC;IACxB,gBAAgB,EAAE,MAAM,CAAC;CAC1B;AAED,MAAM,WAAW,aAAa;IAC5B,kBAAkB,EAAE,MAAM,CAAC;IAC3B,aAAa,EAAE,MAAM,CAAC;IACtB,cAAc,EAAE,MAAM,CAAC;IACvB,aAAa,EAAE,MAAM,CAAC;CACvB;AAID;;;GAGG;AACH,wBAAgB,aAAa,CAAC,EAAE,EAAE,QAAQ,CAAC,QAAQ,EAAE,KAAK,EAAE,MAAM,GAAG,mBAAmB,CAwDvF;AAED;;GAEG;AACH,wBAAgB,UAAU,CAAC,EAAE,EAAE,QAAQ,CAAC,QAAQ,GAAG,aAAa,CA+B/D;AAED;;GAEG;AACH,wBAAgB,UAAU,CACxB,EAAE,EAAE,QAAQ,CAAC,QAAQ,EACrB,MAAM,EAAE,MAAM,EAAE,GACf,mBAAmB,EAAE,CAEvB"}
|
|
@@ -0,0 +1,91 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Entity Indexer — orchestrates entity extraction from knowledge documents
|
|
3
|
+
* and populates the EntityStore (Knowledge Graph).
|
|
4
|
+
*
|
|
5
|
+
* Processes knowledge documents to extract entities and relations,
|
|
6
|
+
* storing them in the KG tables for graph-based retrieval.
|
|
7
|
+
*/
|
|
8
|
+
import { EntityStore } from "./entity-store.js";
|
|
9
|
+
import { extractEntitiesFromText, extractRelationsFromText } from "./entity-extractor.js";
|
|
10
|
+
import { logger } from "../utils/logger.js";
|
|
11
|
+
// ── Core functions ───────────────────────────────────────
|
|
12
|
+
/**
|
|
13
|
+
* Index a single knowledge document — extract entities and relations,
|
|
14
|
+
* store in the KG.
|
|
15
|
+
*/
|
|
16
|
+
export function indexDocument(db, docId) {
|
|
17
|
+
const store = new EntityStore(db);
|
|
18
|
+
// Fetch the document content
|
|
19
|
+
const doc = db
|
|
20
|
+
.prepare("SELECT id, title, content FROM knowledge_documents WHERE id = ?")
|
|
21
|
+
.get(docId);
|
|
22
|
+
if (!doc) {
|
|
23
|
+
logger.debug("entity-indexer:doc-not-found", { docId });
|
|
24
|
+
return { docId, entitiesCreated: 0, relationsCreated: 0 };
|
|
25
|
+
}
|
|
26
|
+
// Combine title + content for richer extraction
|
|
27
|
+
const fullText = `${doc.title}\n${doc.content}`;
|
|
28
|
+
// Extract entities
|
|
29
|
+
const extractedEntities = extractEntitiesFromText(fullText);
|
|
30
|
+
let entitiesCreated = 0;
|
|
31
|
+
// Map entity names to their store IDs for relation linking
|
|
32
|
+
const entityNameToId = new Map();
|
|
33
|
+
for (const extracted of extractedEntities) {
|
|
34
|
+
const entity = store.upsertEntity(extracted.name, extracted.type, docId);
|
|
35
|
+
entityNameToId.set(extracted.name, entity.id);
|
|
36
|
+
entitiesCreated++;
|
|
37
|
+
}
|
|
38
|
+
// Extract relations
|
|
39
|
+
const extractedRelations = extractRelationsFromText(fullText, extractedEntities);
|
|
40
|
+
let relationsCreated = 0;
|
|
41
|
+
for (const rel of extractedRelations) {
|
|
42
|
+
const fromId = entityNameToId.get(rel.fromName);
|
|
43
|
+
const toId = entityNameToId.get(rel.toName);
|
|
44
|
+
if (fromId && toId) {
|
|
45
|
+
const result = store.addRelation(fromId, toId, rel.relationType, rel.weight, docId);
|
|
46
|
+
if (result)
|
|
47
|
+
relationsCreated++;
|
|
48
|
+
}
|
|
49
|
+
}
|
|
50
|
+
logger.debug("entity-indexer:indexed", {
|
|
51
|
+
docId,
|
|
52
|
+
entities: entitiesCreated,
|
|
53
|
+
relations: relationsCreated,
|
|
54
|
+
});
|
|
55
|
+
return { docId, entitiesCreated, relationsCreated };
|
|
56
|
+
}
|
|
57
|
+
/**
|
|
58
|
+
* Reindex all knowledge documents — clear KG and rebuild from scratch.
|
|
59
|
+
*/
|
|
60
|
+
export function reindexAll(db) {
|
|
61
|
+
const store = new EntityStore(db);
|
|
62
|
+
// Clear existing KG data
|
|
63
|
+
store.clear();
|
|
64
|
+
// Fetch all knowledge documents
|
|
65
|
+
const docs = db
|
|
66
|
+
.prepare("SELECT id FROM knowledge_documents")
|
|
67
|
+
.all();
|
|
68
|
+
let documentsProcessed = 0;
|
|
69
|
+
for (const doc of docs) {
|
|
70
|
+
indexDocument(db, doc.id);
|
|
71
|
+
documentsProcessed++;
|
|
72
|
+
}
|
|
73
|
+
const stats = store.stats();
|
|
74
|
+
logger.info("entity-indexer:reindex-complete", {
|
|
75
|
+
documentsProcessed,
|
|
76
|
+
...stats,
|
|
77
|
+
});
|
|
78
|
+
return {
|
|
79
|
+
documentsProcessed,
|
|
80
|
+
totalEntities: stats.entities,
|
|
81
|
+
totalRelations: stats.relations,
|
|
82
|
+
totalMentions: stats.mentions,
|
|
83
|
+
};
|
|
84
|
+
}
|
|
85
|
+
/**
|
|
86
|
+
* Index a batch of documents by their IDs.
|
|
87
|
+
*/
|
|
88
|
+
export function indexBatch(db, docIds) {
|
|
89
|
+
return docIds.map((docId) => indexDocument(db, docId));
|
|
90
|
+
}
|
|
91
|
+
//# sourceMappingURL=entity-indexer.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"entity-indexer.js","sourceRoot":"","sources":["../../../src/core/rag/entity-indexer.ts"],"names":[],"mappings":"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"}
|