@mcp-graph-workflow/mcp-graph 5.8.0 → 5.9.1

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.
Files changed (86) hide show
  1. package/dist/core/code/code-types.d.ts +3 -3
  2. package/dist/core/integrations/integration-orchestrator.d.ts.map +1 -1
  3. package/dist/core/integrations/integration-orchestrator.js +2 -0
  4. package/dist/core/integrations/integration-orchestrator.js.map +1 -1
  5. package/dist/core/rag/entity-extractor.d.ts +30 -0
  6. package/dist/core/rag/entity-extractor.d.ts.map +1 -0
  7. package/dist/core/rag/entity-extractor.js +224 -0
  8. package/dist/core/rag/entity-extractor.js.map +1 -0
  9. package/dist/core/rag/entity-index-hook.d.ts +25 -0
  10. package/dist/core/rag/entity-index-hook.d.ts.map +1 -0
  11. package/dist/core/rag/entity-index-hook.js +75 -0
  12. package/dist/core/rag/entity-index-hook.js.map +1 -0
  13. package/dist/core/rag/entity-indexer.d.ts +33 -0
  14. package/dist/core/rag/entity-indexer.d.ts.map +1 -0
  15. package/dist/core/rag/entity-indexer.js +91 -0
  16. package/dist/core/rag/entity-indexer.js.map +1 -0
  17. package/dist/core/rag/entity-store.d.ts +91 -0
  18. package/dist/core/rag/entity-store.d.ts.map +1 -0
  19. package/dist/core/rag/entity-store.js +395 -0
  20. package/dist/core/rag/entity-store.js.map +1 -0
  21. package/dist/core/rag/multi-strategy-retrieval.d.ts.map +1 -1
  22. package/dist/core/rag/multi-strategy-retrieval.js +49 -3
  23. package/dist/core/rag/multi-strategy-retrieval.js.map +1 -1
  24. package/dist/core/rag/node-indexer.d.ts +26 -0
  25. package/dist/core/rag/node-indexer.d.ts.map +1 -0
  26. package/dist/core/rag/node-indexer.js +120 -0
  27. package/dist/core/rag/node-indexer.js.map +1 -0
  28. package/dist/core/rag/query-understanding.d.ts +23 -0
  29. package/dist/core/rag/query-understanding.d.ts.map +1 -1
  30. package/dist/core/rag/query-understanding.js +85 -0
  31. package/dist/core/rag/query-understanding.js.map +1 -1
  32. package/dist/core/store/migrations.d.ts.map +1 -1
  33. package/dist/core/store/migrations.js +51 -0
  34. package/dist/core/store/migrations.js.map +1 -1
  35. package/dist/mcp/tools/clone-node.d.ts.map +1 -1
  36. package/dist/mcp/tools/clone-node.js +5 -0
  37. package/dist/mcp/tools/clone-node.js.map +1 -1
  38. package/dist/mcp/tools/import-graph.d.ts.map +1 -1
  39. package/dist/mcp/tools/import-graph.js +23 -1
  40. package/dist/mcp/tools/import-graph.js.map +1 -1
  41. package/dist/mcp/tools/import-prd.d.ts.map +1 -1
  42. package/dist/mcp/tools/import-prd.js +2 -0
  43. package/dist/mcp/tools/import-prd.js.map +1 -1
  44. package/dist/mcp/tools/journey.d.ts.map +1 -1
  45. package/dist/mcp/tools/journey.js +2 -0
  46. package/dist/mcp/tools/journey.js.map +1 -1
  47. package/dist/mcp/tools/manage-skill.d.ts.map +1 -1
  48. package/dist/mcp/tools/manage-skill.js +3 -0
  49. package/dist/mcp/tools/manage-skill.js.map +1 -1
  50. package/dist/mcp/tools/memory.d.ts.map +1 -1
  51. package/dist/mcp/tools/memory.js +2 -0
  52. package/dist/mcp/tools/memory.js.map +1 -1
  53. package/dist/mcp/tools/node.d.ts.map +1 -1
  54. package/dist/mcp/tools/node.js +5 -0
  55. package/dist/mcp/tools/node.js.map +1 -1
  56. package/dist/mcp/tools/plan-sprint.d.ts.map +1 -1
  57. package/dist/mcp/tools/plan-sprint.js +3 -1
  58. package/dist/mcp/tools/plan-sprint.js.map +1 -1
  59. package/dist/mcp/tools/reindex-knowledge.d.ts.map +1 -1
  60. package/dist/mcp/tools/reindex-knowledge.js +43 -1
  61. package/dist/mcp/tools/reindex-knowledge.js.map +1 -1
  62. package/dist/mcp/tools/siebel-import-docs.d.ts.map +1 -1
  63. package/dist/mcp/tools/siebel-import-docs.js +3 -0
  64. package/dist/mcp/tools/siebel-import-docs.js.map +1 -1
  65. package/dist/mcp/tools/siebel-import-sif.d.ts.map +1 -1
  66. package/dist/mcp/tools/siebel-import-sif.js +2 -0
  67. package/dist/mcp/tools/siebel-import-sif.js.map +1 -1
  68. package/dist/mcp/tools/sync-stack-docs.d.ts.map +1 -1
  69. package/dist/mcp/tools/sync-stack-docs.js +2 -0
  70. package/dist/mcp/tools/sync-stack-docs.js.map +1 -1
  71. package/dist/mcp/tools/update-status.d.ts.map +1 -1
  72. package/dist/mcp/tools/update-status.js +2 -0
  73. package/dist/mcp/tools/update-status.js.map +1 -1
  74. package/dist/mcp/tools/validate.d.ts.map +1 -1
  75. package/dist/mcp/tools/validate.js +3 -0
  76. package/dist/mcp/tools/validate.js.map +1 -1
  77. package/dist/schemas/entity.schema.d.ts +80 -0
  78. package/dist/schemas/entity.schema.d.ts.map +1 -0
  79. package/dist/schemas/entity.schema.js +56 -0
  80. package/dist/schemas/entity.schema.js.map +1 -0
  81. package/dist/schemas/knowledge.schema.d.ts +2 -0
  82. package/dist/schemas/knowledge.schema.d.ts.map +1 -1
  83. package/dist/schemas/knowledge.schema.js +1 -1
  84. package/dist/schemas/knowledge.schema.js.map +1 -1
  85. package/dist/schemas/siebel.schema.d.ts +3 -3
  86. 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;AAQ5D,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;IAoC/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"}
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":"AAAA;;;;;;GAMG;AAGH,OAAO,EAAE,WAAW,EAAE,MAAM,mBAAmB,CAAC;AAChD,OAAO,EAAE,uBAAuB,EAAE,wBAAwB,EAAE,MAAM,uBAAuB,CAAC;AAC1F,OAAO,EAAE,MAAM,EAAE,MAAM,oBAAoB,CAAC;AAiB5C,4DAA4D;AAE5D;;;GAGG;AACH,MAAM,UAAU,aAAa,CAAC,EAAqB,EAAE,KAAa;IAChE,MAAM,KAAK,GAAG,IAAI,WAAW,CAAC,EAAE,CAAC,CAAC;IAElC,6BAA6B;IAC7B,MAAM,GAAG,GAAG,EAAE;SACX,OAAO,CAAC,iEAAiE,CAAC;SAC1E,GAAG,CAAC,KAAK,CAA+D,CAAC;IAE5E,IAAI,CAAC,GAAG,EAAE,CAAC;QACT,MAAM,CAAC,KAAK,CAAC,8BAA8B,EAAE,EAAE,KAAK,EAAE,CAAC,CAAC;QACxD,OAAO,EAAE,KAAK,EAAE,eAAe,EAAE,CAAC,EAAE,gBAAgB,EAAE,CAAC,EAAE,CAAC;IAC5D,CAAC;IAED,gDAAgD;IAChD,MAAM,QAAQ,GAAG,GAAG,GAAG,CAAC,KAAK,KAAK,GAAG,CAAC,OAAO,EAAE,CAAC;IAEhD,mBAAmB;IACnB,MAAM,iBAAiB,GAAG,uBAAuB,CAAC,QAAQ,CAAC,CAAC;IAC5D,IAAI,eAAe,GAAG,CAAC,CAAC;IAExB,2DAA2D;IAC3D,MAAM,cAAc,GAAG,IAAI,GAAG,EAAkB,CAAC;IAEjD,KAAK,MAAM,SAAS,IAAI,iBAAiB,EAAE,CAAC;QAC1C,MAAM,MAAM,GAAG,KAAK,CAAC,YAAY,CAAC,SAAS,CAAC,IAAI,EAAE,SAAS,CAAC,IAAI,EAAE,KAAK,CAAC,CAAC;QACzE,cAAc,CAAC,GAAG,CAAC,SAAS,CAAC,IAAI,EAAE,MAAM,CAAC,EAAE,CAAC,CAAC;QAC9C,eAAe,EAAE,CAAC;IACpB,CAAC;IAED,oBAAoB;IACpB,MAAM,kBAAkB,GAAG,wBAAwB,CAAC,QAAQ,EAAE,iBAAiB,CAAC,CAAC;IACjF,IAAI,gBAAgB,GAAG,CAAC,CAAC;IAEzB,KAAK,MAAM,GAAG,IAAI,kBAAkB,EAAE,CAAC;QACrC,MAAM,MAAM,GAAG,cAAc,CAAC,GAAG,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC;QAChD,MAAM,IAAI,GAAG,cAAc,CAAC,GAAG,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC;QAE5C,IAAI,MAAM,IAAI,IAAI,EAAE,CAAC;YACnB,MAAM,MAAM,GAAG,KAAK,CAAC,WAAW,CAC9B,MAAM,EACN,IAAI,EACJ,GAAG,CAAC,YAAY,EAChB,GAAG,CAAC,MAAM,EACV,KAAK,CACN,CAAC;YACF,IAAI,MAAM;gBAAE,gBAAgB,EAAE,CAAC;QACjC,CAAC;IACH,CAAC;IAED,MAAM,CAAC,KAAK,CAAC,wBAAwB,EAAE;QACrC,KAAK;QACL,QAAQ,EAAE,eAAe;QACzB,SAAS,EAAE,gBAAgB;KAC5B,CAAC,CAAC;IAEH,OAAO,EAAE,KAAK,EAAE,eAAe,EAAE,gBAAgB,EAAE,CAAC;AACtD,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,UAAU,CAAC,EAAqB;IAC9C,MAAM,KAAK,GAAG,IAAI,WAAW,CAAC,EAAE,CAAC,CAAC;IAElC,yBAAyB;IACzB,KAAK,CAAC,KAAK,EAAE,CAAC;IAEd,gCAAgC;IAChC,MAAM,IAAI,GAAG,EAAE;SACZ,OAAO,CAAC,oCAAoC,CAAC;SAC7C,GAAG,EAA2B,CAAC;IAElC,IAAI,kBAAkB,GAAG,CAAC,CAAC;IAE3B,KAAK,MAAM,GAAG,IAAI,IAAI,EAAE,CAAC;QACvB,aAAa,CAAC,EAAE,EAAE,GAAG,CAAC,EAAE,CAAC,CAAC;QAC1B,kBAAkB,EAAE,CAAC;IACvB,CAAC;IAED,MAAM,KAAK,GAAG,KAAK,CAAC,KAAK,EAAE,CAAC;IAE5B,MAAM,CAAC,IAAI,CAAC,iCAAiC,EAAE;QAC7C,kBAAkB;QAClB,GAAG,KAAK;KACT,CAAC,CAAC;IAEH,OAAO;QACL,kBAAkB;QAClB,aAAa,EAAE,KAAK,CAAC,QAAQ;QAC7B,cAAc,EAAE,KAAK,CAAC,SAAS;QAC/B,aAAa,EAAE,KAAK,CAAC,QAAQ;KAC9B,CAAC;AACJ,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,UAAU,CACxB,EAAqB,EACrB,MAAgB;IAEhB,OAAO,MAAM,CAAC,GAAG,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,aAAa,CAAC,EAAE,EAAE,KAAK,CAAC,CAAC,CAAC;AACzD,CAAC"}