@grackle-ai/knowledge 0.61.0 → 0.61.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.
package/dist/index.d.ts CHANGED
@@ -23,4 +23,6 @@ export { createTranscriptChunker } from "./transcript-chunker.js";
23
23
  export { createReferenceNode, createNativeNode, getNode, deleteNode, updateNode, recordToNode, } from "./node-store.js";
24
24
  export type { CreateReferenceNodeInput, CreateNativeNodeInput, UpdateReferenceNodeInput, UpdateNativeNodeInput, UpdateNodeInput, NodeWithEdges, } from "./node-store.js";
25
25
  export { createEdge, removeEdge } from "./edge-store.js";
26
+ export type { SearchOptions, SearchResult } from "./search.js";
27
+ export { knowledgeSearch } from "./search.js";
26
28
  //# sourceMappingURL=index.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAEH,OAAO,EAAE,SAAS,EAAE,UAAU,EAAE,WAAW,EAAE,UAAU,EAAE,SAAS,EAAE,MAAM,aAAa,CAAC;AACxF,YAAY,EAAE,iBAAiB,EAAE,MAAM,aAAa,CAAC;AACrD,OAAO,EAAE,UAAU,EAAE,iBAAiB,EAAE,MAAM,aAAa,CAAC;AAC5D,cAAc,YAAY,CAAC;AAC3B,OAAO,EACL,iBAAiB,EACjB,kBAAkB,EAClB,sBAAsB,EACtB,mBAAmB,EACnB,oCAAoC,EACpC,UAAU,EACV,iBAAiB,EACjB,oBAAoB,EACpB,0BAA0B,GAC3B,MAAM,gBAAgB,CAAC;AACxB,YAAY,EAAE,QAAQ,EAAE,eAAe,EAAE,eAAe,EAAE,MAAM,eAAe,CAAC;AAChF,OAAO,EAAE,mBAAmB,EAAE,MAAM,qBAAqB,CAAC;AAC1D,YAAY,EAAE,KAAK,EAAE,OAAO,EAAE,MAAM,cAAc,CAAC;AACnD,OAAO,EAAE,wBAAwB,EAAE,MAAM,2BAA2B,CAAC;AACrE,YAAY,EAAE,aAAa,EAAE,MAAM,aAAa,CAAC;AACjD,OAAO,EAAE,MAAM,EAAE,MAAM,aAAa,CAAC;AACrC,YAAY,EAAE,wBAAwB,EAAE,MAAM,yBAAyB,CAAC;AACxE,OAAO,EAAE,uBAAuB,EAAE,MAAM,yBAAyB,CAAC;AAClE,OAAO,EACL,mBAAmB,EACnB,gBAAgB,EAChB,OAAO,EACP,UAAU,EACV,UAAU,EACV,YAAY,GACb,MAAM,iBAAiB,CAAC;AACzB,YAAY,EACV,wBAAwB,EACxB,qBAAqB,EACrB,wBAAwB,EACxB,qBAAqB,EACrB,eAAe,EACf,aAAa,GACd,MAAM,iBAAiB,CAAC;AACzB,OAAO,EAAE,UAAU,EAAE,UAAU,EAAE,MAAM,iBAAiB,CAAC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAEH,OAAO,EAAE,SAAS,EAAE,UAAU,EAAE,WAAW,EAAE,UAAU,EAAE,SAAS,EAAE,MAAM,aAAa,CAAC;AACxF,YAAY,EAAE,iBAAiB,EAAE,MAAM,aAAa,CAAC;AACrD,OAAO,EAAE,UAAU,EAAE,iBAAiB,EAAE,MAAM,aAAa,CAAC;AAC5D,cAAc,YAAY,CAAC;AAC3B,OAAO,EACL,iBAAiB,EACjB,kBAAkB,EAClB,sBAAsB,EACtB,mBAAmB,EACnB,oCAAoC,EACpC,UAAU,EACV,iBAAiB,EACjB,oBAAoB,EACpB,0BAA0B,GAC3B,MAAM,gBAAgB,CAAC;AACxB,YAAY,EAAE,QAAQ,EAAE,eAAe,EAAE,eAAe,EAAE,MAAM,eAAe,CAAC;AAChF,OAAO,EAAE,mBAAmB,EAAE,MAAM,qBAAqB,CAAC;AAC1D,YAAY,EAAE,KAAK,EAAE,OAAO,EAAE,MAAM,cAAc,CAAC;AACnD,OAAO,EAAE,wBAAwB,EAAE,MAAM,2BAA2B,CAAC;AACrE,YAAY,EAAE,aAAa,EAAE,MAAM,aAAa,CAAC;AACjD,OAAO,EAAE,MAAM,EAAE,MAAM,aAAa,CAAC;AACrC,YAAY,EAAE,wBAAwB,EAAE,MAAM,yBAAyB,CAAC;AACxE,OAAO,EAAE,uBAAuB,EAAE,MAAM,yBAAyB,CAAC;AAClE,OAAO,EACL,mBAAmB,EACnB,gBAAgB,EAChB,OAAO,EACP,UAAU,EACV,UAAU,EACV,YAAY,GACb,MAAM,iBAAiB,CAAC;AACzB,YAAY,EACV,wBAAwB,EACxB,qBAAqB,EACrB,wBAAwB,EACxB,qBAAqB,EACrB,eAAe,EACf,aAAa,GACd,MAAM,iBAAiB,CAAC;AACzB,OAAO,EAAE,UAAU,EAAE,UAAU,EAAE,MAAM,iBAAiB,CAAC;AACzD,YAAY,EAAE,aAAa,EAAE,YAAY,EAAE,MAAM,aAAa,CAAC;AAC/D,OAAO,EAAE,eAAe,EAAE,MAAM,aAAa,CAAC"}
package/dist/index.js CHANGED
@@ -17,4 +17,5 @@ export { ingest } from "./ingest.js";
17
17
  export { createTranscriptChunker } from "./transcript-chunker.js";
18
18
  export { createReferenceNode, createNativeNode, getNode, deleteNode, updateNode, recordToNode, } from "./node-store.js";
19
19
  export { createEdge, removeEdge } from "./edge-store.js";
20
+ export { knowledgeSearch } from "./search.js";
20
21
  //# sourceMappingURL=index.js.map
package/dist/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAEH,OAAO,EAAE,SAAS,EAAE,UAAU,EAAE,WAAW,EAAE,UAAU,EAAE,SAAS,EAAE,MAAM,aAAa,CAAC;AAExF,OAAO,EAAE,UAAU,EAAE,iBAAiB,EAAE,MAAM,aAAa,CAAC;AAC5D,cAAc,YAAY,CAAC;AAC3B,OAAO,EACL,iBAAiB,EACjB,kBAAkB,EAClB,sBAAsB,EACtB,mBAAmB,EACnB,oCAAoC,EACpC,UAAU,EACV,iBAAiB,EACjB,oBAAoB,EACpB,0BAA0B,GAC3B,MAAM,gBAAgB,CAAC;AAExB,OAAO,EAAE,mBAAmB,EAAE,MAAM,qBAAqB,CAAC;AAE1D,OAAO,EAAE,wBAAwB,EAAE,MAAM,2BAA2B,CAAC;AAErE,OAAO,EAAE,MAAM,EAAE,MAAM,aAAa,CAAC;AAErC,OAAO,EAAE,uBAAuB,EAAE,MAAM,yBAAyB,CAAC;AAClE,OAAO,EACL,mBAAmB,EACnB,gBAAgB,EAChB,OAAO,EACP,UAAU,EACV,UAAU,EACV,YAAY,GACb,MAAM,iBAAiB,CAAC;AASzB,OAAO,EAAE,UAAU,EAAE,UAAU,EAAE,MAAM,iBAAiB,CAAC"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAEH,OAAO,EAAE,SAAS,EAAE,UAAU,EAAE,WAAW,EAAE,UAAU,EAAE,SAAS,EAAE,MAAM,aAAa,CAAC;AAExF,OAAO,EAAE,UAAU,EAAE,iBAAiB,EAAE,MAAM,aAAa,CAAC;AAC5D,cAAc,YAAY,CAAC;AAC3B,OAAO,EACL,iBAAiB,EACjB,kBAAkB,EAClB,sBAAsB,EACtB,mBAAmB,EACnB,oCAAoC,EACpC,UAAU,EACV,iBAAiB,EACjB,oBAAoB,EACpB,0BAA0B,GAC3B,MAAM,gBAAgB,CAAC;AAExB,OAAO,EAAE,mBAAmB,EAAE,MAAM,qBAAqB,CAAC;AAE1D,OAAO,EAAE,wBAAwB,EAAE,MAAM,2BAA2B,CAAC;AAErE,OAAO,EAAE,MAAM,EAAE,MAAM,aAAa,CAAC;AAErC,OAAO,EAAE,uBAAuB,EAAE,MAAM,yBAAyB,CAAC;AAClE,OAAO,EACL,mBAAmB,EACnB,gBAAgB,EAChB,OAAO,EACP,UAAU,EACV,UAAU,EACV,YAAY,GACb,MAAM,iBAAiB,CAAC;AASzB,OAAO,EAAE,UAAU,EAAE,UAAU,EAAE,MAAM,iBAAiB,CAAC;AAEzD,OAAO,EAAE,eAAe,EAAE,MAAM,aAAa,CAAC"}
@@ -0,0 +1,43 @@
1
+ /**
2
+ * Vector-based semantic search across the knowledge graph.
3
+ *
4
+ * Embeds a text query, runs k-NN vector search against Neo4j's vector index,
5
+ * and returns ranked results with similarity scores and immediate edges.
6
+ *
7
+ * @module
8
+ */
9
+ import type { Embedder } from "./embedder.js";
10
+ import type { KnowledgeNode, KnowledgeEdge, NodeKind } from "./types.js";
11
+ /** Options for knowledge graph search. */
12
+ export interface SearchOptions {
13
+ /** Max results to return (default 10). */
14
+ limit?: number;
15
+ /** Filter to specific node kinds (reference, native, or both). */
16
+ nodeKinds?: NodeKind[];
17
+ /** Minimum similarity score threshold (default 0). Passed directly to the Cypher WHERE clause. */
18
+ minScore?: number;
19
+ /** Filter to a specific workspace. */
20
+ workspaceId?: string;
21
+ }
22
+ /** A search result: a node with its similarity score and immediate edges. */
23
+ export interface SearchResult {
24
+ /** The matched node. */
25
+ node: KnowledgeNode;
26
+ /** Cosine similarity score (0-1). */
27
+ score: number;
28
+ /** Edges connected to this node. */
29
+ edges: KnowledgeEdge[];
30
+ }
31
+ /**
32
+ * Search the knowledge graph by semantic similarity.
33
+ *
34
+ * Embeds the query text, runs k-NN vector search in Neo4j, and returns
35
+ * ranked results with similarity scores and immediate edges.
36
+ *
37
+ * @param query - The text to search for.
38
+ * @param embedder - Produces the query embedding vector.
39
+ * @param options - Optional search filters and limits.
40
+ * @returns Ranked search results, highest similarity first.
41
+ */
42
+ export declare function knowledgeSearch(query: string, embedder: Embedder, options?: SearchOptions): Promise<SearchResult[]>;
43
+ //# sourceMappingURL=search.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"search.d.ts","sourceRoot":"","sources":["../src/search.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAOH,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,eAAe,CAAC;AAC9C,OAAO,KAAK,EAAE,aAAa,EAAE,aAAa,EAAE,QAAQ,EAAY,MAAM,YAAY,CAAC;AAMnF,0CAA0C;AAC1C,MAAM,WAAW,aAAa;IAC5B,0CAA0C;IAC1C,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,kEAAkE;IAClE,SAAS,CAAC,EAAE,QAAQ,EAAE,CAAC;IACvB,kGAAkG;IAClG,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,sCAAsC;IACtC,WAAW,CAAC,EAAE,MAAM,CAAC;CACtB;AAED,6EAA6E;AAC7E,MAAM,WAAW,YAAY;IAC3B,wBAAwB;IACxB,IAAI,EAAE,aAAa,CAAC;IACpB,qCAAqC;IACrC,KAAK,EAAE,MAAM,CAAC;IACd,oCAAoC;IACpC,KAAK,EAAE,aAAa,EAAE,CAAC;CACxB;AAqFD;;;;;;;;;;GAUG;AACH,wBAAsB,eAAe,CACnC,KAAK,EAAE,MAAM,EACb,QAAQ,EAAE,QAAQ,EAClB,OAAO,CAAC,EAAE,aAAa,GACtB,OAAO,CAAC,YAAY,EAAE,CAAC,CA8DzB"}
package/dist/search.js ADDED
@@ -0,0 +1,144 @@
1
+ /**
2
+ * Vector-based semantic search across the knowledge graph.
3
+ *
4
+ * Embeds a text query, runs k-NN vector search against Neo4j's vector index,
5
+ * and returns ranked results with similarity scores and immediate edges.
6
+ *
7
+ * @module
8
+ */
9
+ import { getSession } from "./client.js";
10
+ import { logger } from "./logger.js";
11
+ import { NODE_LABEL, VECTOR_INDEX_NAME } from "./constants.js";
12
+ import { recordToNode } from "./node-store.js";
13
+ // ---------------------------------------------------------------------------
14
+ // Constants
15
+ // ---------------------------------------------------------------------------
16
+ /** Default number of results to return. */
17
+ const DEFAULT_LIMIT = 10;
18
+ /** Default minimum similarity score. */
19
+ const DEFAULT_MIN_SCORE = 0;
20
+ // ---------------------------------------------------------------------------
21
+ // Cypher
22
+ // ---------------------------------------------------------------------------
23
+ /**
24
+ * Build the Cypher query for vector search with optional filters.
25
+ *
26
+ * Neo4j's `db.index.vector.queryNodes` does not support WHERE clauses
27
+ * directly, so we apply post-filters on the yielded results.
28
+ */
29
+ function buildSearchCypher(options) {
30
+ const filters = ["score >= $minScore"];
31
+ if (options.nodeKinds && options.nodeKinds.length > 0) {
32
+ filters.push("node.kind IN $nodeKinds");
33
+ }
34
+ if (options.workspaceId !== undefined) {
35
+ filters.push("node.workspaceId = $workspaceId");
36
+ }
37
+ const whereClause = filters.length > 0
38
+ ? `WHERE ${filters.join(" AND ")}`
39
+ : "";
40
+ return `
41
+ CALL db.index.vector.queryNodes($indexName, $candidateLimit, $queryVector)
42
+ YIELD node, score
43
+ ${whereClause}
44
+ WITH node, score
45
+ ORDER BY score DESC
46
+ LIMIT $limit
47
+ OPTIONAL MATCH (node)-[r]-(m:${NODE_LABEL})
48
+ RETURN node, score,
49
+ collect(DISTINCT {
50
+ fromId: CASE WHEN startNode(r) = node THEN node.id ELSE m.id END,
51
+ toId: CASE WHEN endNode(r) = node THEN node.id ELSE m.id END,
52
+ type: type(r),
53
+ metadata: r.metadata,
54
+ createdAt: r.createdAt
55
+ }) AS edges`;
56
+ }
57
+ // ---------------------------------------------------------------------------
58
+ // Helpers
59
+ // ---------------------------------------------------------------------------
60
+ /** Convert a raw edge record from Cypher collect() to a KnowledgeEdge. */
61
+ function rawToEdge(raw) {
62
+ let metadata;
63
+ if (raw.metadata !== undefined && raw.metadata !== null) {
64
+ try {
65
+ metadata = JSON.parse(raw.metadata);
66
+ }
67
+ catch {
68
+ metadata = undefined;
69
+ }
70
+ }
71
+ return {
72
+ fromId: raw.fromId,
73
+ toId: raw.toId,
74
+ type: raw.type,
75
+ metadata,
76
+ createdAt: raw.createdAt,
77
+ };
78
+ }
79
+ // ---------------------------------------------------------------------------
80
+ // Public API
81
+ // ---------------------------------------------------------------------------
82
+ /**
83
+ * Search the knowledge graph by semantic similarity.
84
+ *
85
+ * Embeds the query text, runs k-NN vector search in Neo4j, and returns
86
+ * ranked results with similarity scores and immediate edges.
87
+ *
88
+ * @param query - The text to search for.
89
+ * @param embedder - Produces the query embedding vector.
90
+ * @param options - Optional search filters and limits.
91
+ * @returns Ranked search results, highest similarity first.
92
+ */
93
+ export async function knowledgeSearch(query, embedder, options) {
94
+ const limit = options?.limit ?? DEFAULT_LIMIT;
95
+ const minScore = options?.minScore ?? DEFAULT_MIN_SCORE;
96
+ // Embed the query
97
+ const { vector: queryVector } = await embedder.embed(query);
98
+ // Over-fetch when filtering so we still get enough results after post-filter
99
+ const hasFilters = !!(options?.nodeKinds?.length || options?.workspaceId !== undefined);
100
+ const candidateLimit = hasFilters ? limit * 3 : limit;
101
+ const cypher = buildSearchCypher({
102
+ nodeKinds: options?.nodeKinds,
103
+ workspaceId: options?.workspaceId,
104
+ });
105
+ const params = {
106
+ indexName: VECTOR_INDEX_NAME,
107
+ queryVector,
108
+ limit,
109
+ candidateLimit,
110
+ minScore,
111
+ ...(options?.nodeKinds ? { nodeKinds: options.nodeKinds } : {}),
112
+ ...(options?.workspaceId !== undefined ? { workspaceId: options.workspaceId } : {}),
113
+ };
114
+ const session = getSession();
115
+ try {
116
+ const result = await session.run(cypher, params);
117
+ const searchResults = result.records.map((record) => {
118
+ const neo4jNode = record.get("node");
119
+ const nodeProps = neo4jNode.properties;
120
+ const score = record.get("score");
121
+ const rawEdges = record.get("edges");
122
+ // Filter out null edges (from OPTIONAL MATCH with no relationships)
123
+ const edges = rawEdges
124
+ .filter((e) => e.fromId !== null && e.toId !== null)
125
+ .map(rawToEdge);
126
+ return {
127
+ node: recordToNode(nodeProps),
128
+ score,
129
+ edges,
130
+ };
131
+ });
132
+ logger.debug({ query: query.substring(0, 50), results: searchResults.length, limit }, "Knowledge search completed");
133
+ return searchResults;
134
+ }
135
+ finally {
136
+ try {
137
+ await session.close();
138
+ }
139
+ catch (closeError) {
140
+ logger.warn({ err: closeError }, "Failed to close session after knowledgeSearch");
141
+ }
142
+ }
143
+ }
144
+ //# sourceMappingURL=search.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"search.js","sourceRoot":"","sources":["../src/search.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAGH,OAAO,EAAE,UAAU,EAAE,MAAM,aAAa,CAAC;AACzC,OAAO,EAAE,MAAM,EAAE,MAAM,aAAa,CAAC;AACrC,OAAO,EAAE,UAAU,EAAE,iBAAiB,EAAE,MAAM,gBAAgB,CAAC;AAC/D,OAAO,EAAE,YAAY,EAAE,MAAM,iBAAiB,CAAC;AA8B/C,8EAA8E;AAC9E,YAAY;AACZ,8EAA8E;AAE9E,2CAA2C;AAC3C,MAAM,aAAa,GAAW,EAAE,CAAC;AAEjC,wCAAwC;AACxC,MAAM,iBAAiB,GAAW,CAAC,CAAC;AAEpC,8EAA8E;AAC9E,SAAS;AACT,8EAA8E;AAE9E;;;;;GAKG;AACH,SAAS,iBAAiB,CAAC,OAG1B;IACC,MAAM,OAAO,GAAa,CAAC,oBAAoB,CAAC,CAAC;IAEjD,IAAI,OAAO,CAAC,SAAS,IAAI,OAAO,CAAC,SAAS,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QACtD,OAAO,CAAC,IAAI,CAAC,yBAAyB,CAAC,CAAC;IAC1C,CAAC;IACD,IAAI,OAAO,CAAC,WAAW,KAAK,SAAS,EAAE,CAAC;QACtC,OAAO,CAAC,IAAI,CAAC,iCAAiC,CAAC,CAAC;IAClD,CAAC;IAED,MAAM,WAAW,GAAW,OAAO,CAAC,MAAM,GAAG,CAAC;QAC5C,CAAC,CAAC,SAAS,OAAO,CAAC,IAAI,CAAC,OAAO,CAAC,EAAE;QAClC,CAAC,CAAC,EAAE,CAAC;IAEP,OAAO;;;MAGH,WAAW;;;;mCAIkB,UAAU;;;;;;;;kBAQ3B,CAAC;AACnB,CAAC;AAED,8EAA8E;AAC9E,UAAU;AACV,8EAA8E;AAE9E,0EAA0E;AAC1E,SAAS,SAAS,CAAC,GAA4B;IAC7C,IAAI,QAA6C,CAAC;IAClD,IAAI,GAAG,CAAC,QAAQ,KAAK,SAAS,IAAI,GAAG,CAAC,QAAQ,KAAK,IAAI,EAAE,CAAC;QACxD,IAAI,CAAC;YACH,QAAQ,GAAG,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,QAAkB,CAA4B,CAAC;QAC3E,CAAC;QAAC,MAAM,CAAC;YACP,QAAQ,GAAG,SAAS,CAAC;QACvB,CAAC;IACH,CAAC;IAED,OAAO;QACL,MAAM,EAAE,GAAG,CAAC,MAAgB;QAC5B,IAAI,EAAE,GAAG,CAAC,IAAc;QACxB,IAAI,EAAE,GAAG,CAAC,IAAgB;QAC1B,QAAQ;QACR,SAAS,EAAE,GAAG,CAAC,SAAmB;KACnC,CAAC;AACJ,CAAC;AAED,8EAA8E;AAC9E,aAAa;AACb,8EAA8E;AAE9E;;;;;;;;;;GAUG;AACH,MAAM,CAAC,KAAK,UAAU,eAAe,CACnC,KAAa,EACb,QAAkB,EAClB,OAAuB;IAEvB,MAAM,KAAK,GAAW,OAAO,EAAE,KAAK,IAAI,aAAa,CAAC;IACtD,MAAM,QAAQ,GAAW,OAAO,EAAE,QAAQ,IAAI,iBAAiB,CAAC;IAEhE,kBAAkB;IAClB,MAAM,EAAE,MAAM,EAAE,WAAW,EAAE,GAAG,MAAM,QAAQ,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC;IAE5D,6EAA6E;IAC7E,MAAM,UAAU,GAAY,CAAC,CAAC,CAAC,OAAO,EAAE,SAAS,EAAE,MAAM,IAAI,OAAO,EAAE,WAAW,KAAK,SAAS,CAAC,CAAC;IACjG,MAAM,cAAc,GAAW,UAAU,CAAC,CAAC,CAAC,KAAK,GAAG,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC;IAE9D,MAAM,MAAM,GAAW,iBAAiB,CAAC;QACvC,SAAS,EAAE,OAAO,EAAE,SAAS;QAC7B,WAAW,EAAE,OAAO,EAAE,WAAW;KAClC,CAAC,CAAC;IAEH,MAAM,MAAM,GAA4B;QACtC,SAAS,EAAE,iBAAiB;QAC5B,WAAW;QACX,KAAK;QACL,cAAc;QACd,QAAQ;QACR,GAAG,CAAC,OAAO,EAAE,SAAS,CAAC,CAAC,CAAC,EAAE,SAAS,EAAE,OAAO,CAAC,SAAS,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;QAC/D,GAAG,CAAC,OAAO,EAAE,WAAW,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,WAAW,EAAE,OAAO,CAAC,WAAW,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;KACpF,CAAC;IAEF,MAAM,OAAO,GAAG,UAAU,EAAE,CAAC;IAC7B,IAAI,CAAC;QACH,MAAM,MAAM,GAAG,MAAM,OAAO,CAAC,GAAG,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;QAEjD,MAAM,aAAa,GAAmB,MAAM,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC,MAAmB,EAAE,EAAE;YAC/E,MAAM,SAAS,GAAG,MAAM,CAAC,GAAG,CAAC,MAAM,CAA4C,CAAC;YAChF,MAAM,SAAS,GAA4B,SAAS,CAAC,UAAU,CAAC;YAChE,MAAM,KAAK,GAAW,MAAM,CAAC,GAAG,CAAC,OAAO,CAAW,CAAC;YACpD,MAAM,QAAQ,GACZ,MAAM,CAAC,GAAG,CAAC,OAAO,CAA8B,CAAC;YAEnD,oEAAoE;YACpE,MAAM,KAAK,GAAoB,QAAQ;iBACpC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,MAAM,KAAK,IAAI,IAAI,CAAC,CAAC,IAAI,KAAK,IAAI,CAAC;iBACnD,GAAG,CAAC,SAAS,CAAC,CAAC;YAElB,OAAO;gBACL,IAAI,EAAE,YAAY,CAAC,SAAS,CAAC;gBAC7B,KAAK;gBACL,KAAK;aACN,CAAC;QACJ,CAAC,CAAC,CAAC;QAEH,MAAM,CAAC,KAAK,CACV,EAAE,KAAK,EAAE,KAAK,CAAC,SAAS,CAAC,CAAC,EAAE,EAAE,CAAC,EAAE,OAAO,EAAE,aAAa,CAAC,MAAM,EAAE,KAAK,EAAE,EACvE,4BAA4B,CAC7B,CAAC;QAEF,OAAO,aAAa,CAAC;IACvB,CAAC;YAAS,CAAC;QACT,IAAI,CAAC;YACH,MAAM,OAAO,CAAC,KAAK,EAAE,CAAC;QACxB,CAAC;QAAC,OAAO,UAAU,EAAE,CAAC;YACpB,MAAM,CAAC,IAAI,CAAC,EAAE,GAAG,EAAE,UAAU,EAAE,EAAE,+CAA+C,CAAC,CAAC;QACpF,CAAC;IACH,CAAC;AACH,CAAC"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@grackle-ai/knowledge",
3
- "version": "0.61.0",
3
+ "version": "0.61.1",
4
4
  "description": "Knowledge graph subsystem for Grackle (Neo4j + vector search)",
5
5
  "license": "MIT",
6
6
  "repository": {
@@ -27,7 +27,7 @@
27
27
  "@huggingface/transformers": "^3.4.0",
28
28
  "neo4j-driver": "^6.0.1",
29
29
  "pino": "^10.3.1",
30
- "@grackle-ai/common": "0.61.0"
30
+ "@grackle-ai/common": "0.61.1"
31
31
  },
32
32
  "devDependencies": {
33
33
  "@rushstack/heft": "1.2.4",