@grackle-ai/knowledge-core 0.119.0 → 0.121.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.
@@ -29,4 +29,24 @@ export declare function createEdge(fromId: string, toId: string, type: EdgeType,
29
29
  * @throws If the edge type is invalid.
30
30
  */
31
31
  export declare function removeEdge(fromId: string, toId: string, type: EdgeType): Promise<boolean>;
32
+ /**
33
+ * Idempotently upsert a typed edge between two nodes (Neo4j `MERGE`).
34
+ *
35
+ * Repeated calls converge to a single relationship. `createdAt` is set only on
36
+ * create; `metadata` is set every call. Used by derived-mirror projection (#1258).
37
+ *
38
+ * @throws If either node does not exist, or the edge type is invalid.
39
+ */
40
+ export declare function upsertEdge(fromId: string, toId: string, type: EdgeType, metadata?: Record<string, unknown>): Promise<KnowledgeEdge>;
41
+ /**
42
+ * Remove all outgoing edges of the given types from a node.
43
+ *
44
+ * Used by derived-mirror projection to reconcile structural edges: before
45
+ * re-adding the current edge set for an entity, stale edges (e.g. from a
46
+ * reparented task or a changed foreign key) are cleared so the projection
47
+ * stays a faithful mirror.
48
+ *
49
+ * @returns The number of edges removed.
50
+ */
51
+ export declare function removeOutgoingEdges(fromId: string, types: EdgeType[]): Promise<number>;
32
52
  //# sourceMappingURL=edge-store.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"edge-store.d.ts","sourceRoot":"","sources":["../src/edge-store.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAKH,OAAO,EAAa,KAAK,QAAQ,EAAE,KAAK,aAAa,EAAE,MAAM,YAAY,CAAC;AAwD1E;;;;;;;;;;GAUG;AACH,wBAAsB,UAAU,CAC9B,MAAM,EAAE,MAAM,EACd,IAAI,EAAE,MAAM,EACZ,IAAI,EAAE,QAAQ,EACd,QAAQ,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GACjC,OAAO,CAAC,aAAa,CAAC,CAiDxB;AAED;;;;;;;;GAQG;AACH,wBAAsB,UAAU,CAC9B,MAAM,EAAE,MAAM,EACd,IAAI,EAAE,MAAM,EACZ,IAAI,EAAE,QAAQ,GACb,OAAO,CAAC,OAAO,CAAC,CAsBlB"}
1
+ {"version":3,"file":"edge-store.d.ts","sourceRoot":"","sources":["../src/edge-store.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAKH,OAAO,EAAa,KAAK,QAAQ,EAAE,KAAK,aAAa,EAAE,MAAM,YAAY,CAAC;AAwD1E;;;;;;;;;;GAUG;AACH,wBAAsB,UAAU,CAC9B,MAAM,EAAE,MAAM,EACd,IAAI,EAAE,MAAM,EACZ,IAAI,EAAE,QAAQ,EACd,QAAQ,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GACjC,OAAO,CAAC,aAAa,CAAC,CAiDxB;AAED;;;;;;;;GAQG;AACH,wBAAsB,UAAU,CAC9B,MAAM,EAAE,MAAM,EACd,IAAI,EAAE,MAAM,EACZ,IAAI,EAAE,QAAQ,GACb,OAAO,CAAC,OAAO,CAAC,CAsBlB;AAkBD;;;;;;;GAOG;AACH,wBAAsB,UAAU,CAC9B,MAAM,EAAE,MAAM,EACd,IAAI,EAAE,MAAM,EACZ,IAAI,EAAE,QAAQ,EACd,QAAQ,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GACjC,OAAO,CAAC,aAAa,CAAC,CAiDxB;AAED;;;;;;;;;GASG;AACH,wBAAsB,mBAAmB,CACvC,MAAM,EAAE,MAAM,EACd,KAAK,EAAE,QAAQ,EAAE,GAChB,OAAO,CAAC,MAAM,CAAC,CA0BjB"}
@@ -142,4 +142,106 @@ export async function removeEdge(fromId, toId, type) {
142
142
  }
143
143
  }
144
144
  }
145
+ /**
146
+ * Build the Cypher query for idempotently upserting an edge of a given type.
147
+ *
148
+ * Relationship types cannot be parameterized; the type is interpolated after
149
+ * {@link assertValidEdgeType} validation (same safety contract as create).
150
+ */
151
+ function buildUpsertEdgeCypher(edgeType) {
152
+ return [
153
+ `MATCH (a:${NODE_LABEL} {id: $fromId}), (b:${NODE_LABEL} {id: $toId})`,
154
+ `MERGE (a)-[r:${edgeType}]->(b)`,
155
+ `ON CREATE SET r.createdAt = $createdAt`,
156
+ `SET r.metadata = $metadata`,
157
+ `RETURN a.id AS fromId, b.id AS toId, type(r) AS type, r.metadata AS metadata, r.createdAt AS createdAt`,
158
+ ].join("\n");
159
+ }
160
+ /**
161
+ * Idempotently upsert a typed edge between two nodes (Neo4j `MERGE`).
162
+ *
163
+ * Repeated calls converge to a single relationship. `createdAt` is set only on
164
+ * create; `metadata` is set every call. Used by derived-mirror projection (#1258).
165
+ *
166
+ * @throws If either node does not exist, or the edge type is invalid.
167
+ */
168
+ export async function upsertEdge(fromId, toId, type, metadata) {
169
+ assertValidEdgeType(type);
170
+ const createdAt = new Date().toISOString();
171
+ const metadataStr = metadata !== undefined ? JSON.stringify(metadata) : null;
172
+ const session = getSession();
173
+ try {
174
+ const result = await session.run(buildUpsertEdgeCypher(type), {
175
+ fromId,
176
+ toId,
177
+ metadata: metadataStr,
178
+ createdAt,
179
+ });
180
+ if (result.records.length === 0) {
181
+ throw new Error(`Cannot upsert edge: one or both nodes not found (fromId=${fromId}, toId=${toId})`);
182
+ }
183
+ const record = result.records[0];
184
+ let parsedMetadata;
185
+ const rawMetadata = record.get("metadata");
186
+ if (rawMetadata !== null) {
187
+ try {
188
+ parsedMetadata = JSON.parse(rawMetadata);
189
+ }
190
+ catch {
191
+ parsedMetadata = undefined;
192
+ }
193
+ }
194
+ logger.debug({ fromId, toId, type }, "Upserted edge");
195
+ return {
196
+ fromId: record.get("fromId"),
197
+ toId: record.get("toId"),
198
+ type: record.get("type"),
199
+ metadata: parsedMetadata,
200
+ createdAt: record.get("createdAt"),
201
+ };
202
+ }
203
+ finally {
204
+ try {
205
+ await session.close();
206
+ }
207
+ catch (closeError) {
208
+ logger.warn({ err: closeError }, "Failed to close session after upsertEdge");
209
+ }
210
+ }
211
+ }
212
+ /**
213
+ * Remove all outgoing edges of the given types from a node.
214
+ *
215
+ * Used by derived-mirror projection to reconcile structural edges: before
216
+ * re-adding the current edge set for an entity, stale edges (e.g. from a
217
+ * reparented task or a changed foreign key) are cleared so the projection
218
+ * stays a faithful mirror.
219
+ *
220
+ * @returns The number of edges removed.
221
+ */
222
+ export async function removeOutgoingEdges(fromId, types) {
223
+ for (const type of types) {
224
+ assertValidEdgeType(type);
225
+ }
226
+ if (types.length === 0) {
227
+ return 0;
228
+ }
229
+ const session = getSession();
230
+ try {
231
+ // Count via the query summary rather than RETURN-ing the deleted variable
232
+ // (unambiguous; consistent with the other bulk-delete helpers).
233
+ const result = await session.run(`MATCH (a:${NODE_LABEL} {id: $fromId})-[r]->(:${NODE_LABEL})
234
+ WHERE type(r) IN $types
235
+ DELETE r`, { fromId, types });
236
+ return result.summary.counters.updates().relationshipsDeleted;
237
+ }
238
+ finally {
239
+ try {
240
+ await session.close();
241
+ }
242
+ catch (closeError) {
243
+ logger.warn({ err: closeError }, "Failed to close session after removeOutgoingEdges");
244
+ }
245
+ }
246
+ }
145
247
  //# sourceMappingURL=edge-store.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"edge-store.js","sourceRoot":"","sources":["../src/edge-store.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAEH,OAAO,EAAE,UAAU,EAAE,MAAM,aAAa,CAAC;AACzC,OAAO,EAAE,MAAM,EAAE,MAAM,aAAa,CAAC;AACrC,OAAO,EAAE,UAAU,EAAE,MAAM,gBAAgB,CAAC;AAC5C,OAAO,EAAE,SAAS,EAAqC,MAAM,YAAY,CAAC;AAE1E,8EAA8E;AAC9E,aAAa;AACb,8EAA8E;AAE9E,qDAAqD;AACrD,MAAM,gBAAgB,GAAwB,IAAI,GAAG,CAAC,MAAM,CAAC,MAAM,CAAC,SAAS,CAAC,CAAC,CAAC;AAEhF;;;;GAIG;AACH,SAAS,mBAAmB,CAAC,IAAY;IACvC,IAAI,CAAC,gBAAgB,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,CAAC;QAChC,MAAM,IAAI,KAAK,CACb,uBAAuB,IAAI,sBAAsB,CAAC,GAAG,gBAAgB,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CACpF,CAAC;IACJ,CAAC;AACH,CAAC;AAED,8EAA8E;AAC9E,kBAAkB;AAClB,8EAA8E;AAE9E;;;;;;GAMG;AACH,SAAS,qBAAqB,CAAC,QAAkB;IAC/C,OAAO;QACL,YAAY,UAAU,uBAAuB,UAAU,eAAe;QACtE,iBAAiB,QAAQ,qDAAqD;QAC9E,wGAAwG;KACzG,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;AACf,CAAC;AAED;;GAEG;AACH,SAAS,qBAAqB,CAAC,QAAkB;IAC/C,OAAO;QACL,YAAY,UAAU,sBAAsB,QAAQ,SAAS,UAAU,eAAe;QACtF,UAAU;QACV,4BAA4B;KAC7B,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;AACf,CAAC;AAED,8EAA8E;AAC9E,aAAa;AACb,8EAA8E;AAE9E;;;;;;;;;;GAUG;AACH,MAAM,CAAC,KAAK,UAAU,UAAU,CAC9B,MAAc,EACd,IAAY,EACZ,IAAc,EACd,QAAkC;IAElC,mBAAmB,CAAC,IAAI,CAAC,CAAC;IAE1B,MAAM,SAAS,GAAG,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE,CAAC;IAC3C,MAAM,WAAW,GAAkB,QAAQ,KAAK,SAAS,CAAC,CAAC,CAAC,IAAI,CAAC,SAAS,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC;IAE5F,MAAM,OAAO,GAAG,UAAU,EAAE,CAAC;IAC7B,IAAI,CAAC;QACH,MAAM,MAAM,GAAG,MAAM,OAAO,CAAC,GAAG,CAAC,qBAAqB,CAAC,IAAI,CAAC,EAAE;YAC5D,MAAM;YACN,IAAI;YACJ,QAAQ,EAAE,WAAW;YACrB,SAAS;SACV,CAAC,CAAC;QAEH,IAAI,MAAM,CAAC,OAAO,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;YAChC,MAAM,IAAI,KAAK,CACb,2DAA2D,MAAM,UAAU,IAAI,GAAG,CACnF,CAAC;QACJ,CAAC;QAED,MAAM,MAAM,GAAG,MAAM,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC;QAEjC,IAAI,cAAmD,CAAC;QACxD,MAAM,WAAW,GAAG,MAAM,CAAC,GAAG,CAAC,UAAU,CAAkB,CAAC;QAC5D,IAAI,WAAW,KAAK,IAAI,EAAE,CAAC;YACzB,IAAI,CAAC;gBACH,cAAc,GAAG,IAAI,CAAC,KAAK,CAAC,WAAW,CAA4B,CAAC;YACtE,CAAC;YAAC,MAAM,CAAC;gBACP,cAAc,GAAG,SAAS,CAAC;YAC7B,CAAC;QACH,CAAC;QAED,MAAM,CAAC,KAAK,CAAC,EAAE,MAAM,EAAE,IAAI,EAAE,IAAI,EAAE,EAAE,cAAc,CAAC,CAAC;QAErD,OAAO;YACL,MAAM,EAAE,MAAM,CAAC,GAAG,CAAC,QAAQ,CAAW;YACtC,IAAI,EAAE,MAAM,CAAC,GAAG,CAAC,MAAM,CAAW;YAClC,IAAI,EAAE,MAAM,CAAC,GAAG,CAAC,MAAM,CAAa;YACpC,QAAQ,EAAE,cAAc;YACxB,SAAS,EAAE,MAAM,CAAC,GAAG,CAAC,WAAW,CAAW;SAC7C,CAAC;IACJ,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,0CAA0C,CAAC,CAAC;QAC/E,CAAC;IACH,CAAC;AACH,CAAC;AAED;;;;;;;;GAQG;AACH,MAAM,CAAC,KAAK,UAAU,UAAU,CAC9B,MAAc,EACd,IAAY,EACZ,IAAc;IAEd,mBAAmB,CAAC,IAAI,CAAC,CAAC;IAE1B,MAAM,OAAO,GAAG,UAAU,EAAE,CAAC;IAC7B,IAAI,CAAC;QACH,MAAM,MAAM,GAAG,MAAM,OAAO,CAAC,GAAG,CAAC,qBAAqB,CAAC,IAAI,CAAC,EAAE;YAC5D,MAAM;YACN,IAAI;SACL,CAAC,CAAC;QAEH,MAAM,OAAO,GAAG,MAAM,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,GAAG,CAAC,SAAS,CAAW,CAAC;QAC5D,IAAI,OAAO,GAAG,CAAC,EAAE,CAAC;YAChB,MAAM,CAAC,KAAK,CAAC,EAAE,MAAM,EAAE,IAAI,EAAE,IAAI,EAAE,EAAE,cAAc,CAAC,CAAC;QACvD,CAAC;QACD,OAAO,OAAO,GAAG,CAAC,CAAC;IACrB,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,0CAA0C,CAAC,CAAC;QAC/E,CAAC;IACH,CAAC;AACH,CAAC"}
1
+ {"version":3,"file":"edge-store.js","sourceRoot":"","sources":["../src/edge-store.ts"],"names":[],"mappings":"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"}
package/dist/index.d.ts CHANGED
@@ -21,9 +21,9 @@ export type { EmbeddedChunk } from "./ingest.js";
21
21
  export { ingest } from "./ingest.js";
22
22
  export type { TranscriptChunkerOptions } from "./transcript-chunker.js";
23
23
  export { createTranscriptChunker } from "./transcript-chunker.js";
24
- export { createReferenceNode, createNativeNode, getNode, deleteNode, updateNode, recordToNode, recordToEdge, } from "./node-store.js";
25
- export type { CreateReferenceNodeInput, CreateNativeNodeInput, UpdateReferenceNodeInput, UpdateNativeNodeInput, UpdateNodeInput, NodeWithEdges, } from "./node-store.js";
26
- export { createEdge, removeEdge } from "./edge-store.js";
24
+ export { createReferenceNode, createNativeNode, getNode, deleteNode, updateNode, upsertReferenceNode, getReferenceNodeProps, listNodesMissingEmbedding, listReferenceSourceIds, deleteReferenceNodesByPrefix, pruneReferenceNodesNotIn, recordToNode, recordToEdge, } from "./node-store.js";
25
+ export type { CreateReferenceNodeInput, CreateNativeNodeInput, UpdateReferenceNodeInput, UpdateNativeNodeInput, UpdateNodeInput, UpsertReferenceNodeInput, NodeWithEdges, } from "./node-store.js";
26
+ export { createEdge, removeEdge, upsertEdge, removeOutgoingEdges } from "./edge-store.js";
27
27
  export type { SearchOptions, SearchResult } from "./search.js";
28
28
  export { knowledgeSearch } from "./search.js";
29
29
  export type { ExpandOptions, ExpansionResult } from "./expand.js";
@@ -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,qBAAqB,EAAE,iBAAiB,EAAE,MAAM,aAAa,CAAC;AACnF,OAAO,EAAE,MAAM,EAAE,MAAM,aAAa,CAAC;AACrC,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,EACZ,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;AAC9C,YAAY,EAAE,aAAa,EAAE,eAAe,EAAE,MAAM,aAAa,CAAC;AAClE,OAAO,EAAE,UAAU,EAAE,aAAa,EAAE,MAAM,aAAa,CAAC;AACxD,YAAY,EAAE,iBAAiB,EAAE,MAAM,kBAAkB,CAAC;AAC1D,OAAO,EAAE,eAAe,EAAE,MAAM,kBAAkB,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,qBAAqB,EAAE,iBAAiB,EAAE,MAAM,aAAa,CAAC;AACnF,OAAO,EAAE,MAAM,EAAE,MAAM,aAAa,CAAC;AACrC,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,mBAAmB,EACnB,qBAAqB,EACrB,yBAAyB,EACzB,sBAAsB,EACtB,4BAA4B,EAC5B,wBAAwB,EACxB,YAAY,EACZ,YAAY,GACb,MAAM,iBAAiB,CAAC;AACzB,YAAY,EACV,wBAAwB,EACxB,qBAAqB,EACrB,wBAAwB,EACxB,qBAAqB,EACrB,eAAe,EACf,wBAAwB,EACxB,aAAa,GACd,MAAM,iBAAiB,CAAC;AACzB,OAAO,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,mBAAmB,EAAE,MAAM,iBAAiB,CAAC;AAC1F,YAAY,EAAE,aAAa,EAAE,YAAY,EAAE,MAAM,aAAa,CAAC;AAC/D,OAAO,EAAE,eAAe,EAAE,MAAM,aAAa,CAAC;AAC9C,YAAY,EAAE,aAAa,EAAE,eAAe,EAAE,MAAM,aAAa,CAAC;AAClE,OAAO,EAAE,UAAU,EAAE,aAAa,EAAE,MAAM,aAAa,CAAC;AACxD,YAAY,EAAE,iBAAiB,EAAE,MAAM,kBAAkB,CAAC;AAC1D,OAAO,EAAE,eAAe,EAAE,MAAM,kBAAkB,CAAC"}
package/dist/index.js CHANGED
@@ -16,8 +16,8 @@ export { createLocalEmbedder } from "./local-embedder.js";
16
16
  export { createPassThroughChunker } from "./pass-through-chunker.js";
17
17
  export { ingest } from "./ingest.js";
18
18
  export { createTranscriptChunker } from "./transcript-chunker.js";
19
- export { createReferenceNode, createNativeNode, getNode, deleteNode, updateNode, recordToNode, recordToEdge, } from "./node-store.js";
20
- export { createEdge, removeEdge } from "./edge-store.js";
19
+ export { createReferenceNode, createNativeNode, getNode, deleteNode, updateNode, upsertReferenceNode, getReferenceNodeProps, listNodesMissingEmbedding, listReferenceSourceIds, deleteReferenceNodesByPrefix, pruneReferenceNodesNotIn, recordToNode, recordToEdge, } from "./node-store.js";
20
+ export { createEdge, removeEdge, upsertEdge, removeOutgoingEdges } from "./edge-store.js";
21
21
  export { knowledgeSearch } from "./search.js";
22
22
  export { expandNode, expandResults } from "./expand.js";
23
23
  export { listRecentNodes } from "./list-recent.js";
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,qBAAqB,EAAE,iBAAiB,EAAE,MAAM,aAAa,CAAC;AACnF,OAAO,EAAE,MAAM,EAAE,MAAM,aAAa,CAAC;AACrC,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,EACZ,YAAY,GACb,MAAM,iBAAiB,CAAC;AASzB,OAAO,EAAE,UAAU,EAAE,UAAU,EAAE,MAAM,iBAAiB,CAAC;AAEzD,OAAO,EAAE,eAAe,EAAE,MAAM,aAAa,CAAC;AAE9C,OAAO,EAAE,UAAU,EAAE,aAAa,EAAE,MAAM,aAAa,CAAC;AAExD,OAAO,EAAE,eAAe,EAAE,MAAM,kBAAkB,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,qBAAqB,EAAE,iBAAiB,EAAE,MAAM,aAAa,CAAC;AACnF,OAAO,EAAE,MAAM,EAAE,MAAM,aAAa,CAAC;AACrC,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,mBAAmB,EACnB,qBAAqB,EACrB,yBAAyB,EACzB,sBAAsB,EACtB,4BAA4B,EAC5B,wBAAwB,EACxB,YAAY,EACZ,YAAY,GACb,MAAM,iBAAiB,CAAC;AAUzB,OAAO,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,mBAAmB,EAAE,MAAM,iBAAiB,CAAC;AAE1F,OAAO,EAAE,eAAe,EAAE,MAAM,aAAa,CAAC;AAE9C,OAAO,EAAE,UAAU,EAAE,aAAa,EAAE,MAAM,aAAa,CAAC;AAExD,OAAO,EAAE,eAAe,EAAE,MAAM,kBAAkB,CAAC"}
@@ -57,6 +57,33 @@ export interface UpdateNativeNodeInput {
57
57
  }
58
58
  /** Union of update inputs for either node kind. */
59
59
  export type UpdateNodeInput = UpdateReferenceNodeInput | UpdateNativeNodeInput;
60
+ /**
61
+ * Input for an idempotent MERGE upsert of a reference node, keyed on
62
+ * `(sourceType, sourceId)`. Used by derived-mirror projection (#1258).
63
+ */
64
+ export interface UpsertReferenceNodeInput {
65
+ /** Which entity type this refers to. */
66
+ sourceType: ReferenceSource;
67
+ /** The ID of the entity in Grackle's relational DB. */
68
+ sourceId: string;
69
+ /** Human-readable, embeddable label derived from the source. */
70
+ label: string;
71
+ /** Workspace scope (empty string = global). */
72
+ workspaceId: string;
73
+ /**
74
+ * Embedding to set ON CREATE only. Omit to leave empty so it can be
75
+ * backfilled off the write path; never overwrites an existing embedding.
76
+ */
77
+ embedding?: number[];
78
+ /** Optional cached content (e.g., transcript chunk text). */
79
+ content?: string;
80
+ /**
81
+ * Extra node properties to set (e.g., `status`, `projectionHash`, cursor
82
+ * fields). Managed keys (`id`, `kind`, `sourceType`, `sourceId`,
83
+ * `embedding`, `createdAt`) are ignored.
84
+ */
85
+ extraProps?: Record<string, unknown>;
86
+ }
60
87
  /** A node together with all its edges. */
61
88
  export interface NodeWithEdges {
62
89
  /** The knowledge graph node. */
@@ -113,4 +140,54 @@ export declare function deleteNode(id: string): Promise<boolean>;
113
140
  * @returns The updated node, or `undefined` if the node was not found.
114
141
  */
115
142
  export declare function updateNode(id: string, updates: UpdateNodeInput): Promise<KnowledgeNode | undefined>;
143
+ /**
144
+ * Idempotently upsert a reference node, keyed on `(sourceType, sourceId)`.
145
+ *
146
+ * Uses Neo4j `MERGE` so repeated calls converge to a single node. The embedding
147
+ * is set **only on create** and never overwritten here. When omitted it is
148
+ * stored as an empty array `[]` (not an absent property); the off-write-path
149
+ * embed backfill selects such nodes via `size(embedding) = 0` and fills them
150
+ * later (an empty vector is also ignored by the vector index until filled).
151
+ * `label`, `content`, `workspaceId`, and any `extraProps` are set on every call.
152
+ *
153
+ * @returns The (stable) node ID.
154
+ */
155
+ export declare function upsertReferenceNode(input: UpsertReferenceNodeInput): Promise<string>;
156
+ /**
157
+ * Read the raw Neo4j properties of a reference node by source, or `undefined`.
158
+ *
159
+ * Used by projection to read back un-typed metadata (e.g., `projectionHash`,
160
+ * transcript cursor fields) that {@link recordToNode} does not surface.
161
+ */
162
+ export declare function getReferenceNodeProps(sourceType: ReferenceSource, sourceId: string): Promise<Record<string, unknown> | undefined>;
163
+ /**
164
+ * List nodes that have no embedding yet (for off-write-path embed backfill).
165
+ *
166
+ * @param limit - Maximum number of nodes to return (a positive integer).
167
+ */
168
+ export declare function listNodesMissingEmbedding(limit: number): Promise<KnowledgeNode[]>;
169
+ /**
170
+ * List the `sourceId`s of all reference nodes of a given source type.
171
+ *
172
+ * Used by `rebuild()` to prune mirror nodes whose source row no longer exists.
173
+ */
174
+ export declare function listReferenceSourceIds(sourceType: ReferenceSource): Promise<string[]>;
175
+ /**
176
+ * Bulk-delete reference nodes of a source type whose `sourceId` starts with a
177
+ * prefix, in a single Cypher `DETACH DELETE` (e.g. all transcript chunks of a
178
+ * session, keyed `${sessionId}#…`). O(matched), not O(total).
179
+ *
180
+ * @returns The number of nodes deleted.
181
+ */
182
+ export declare function deleteReferenceNodesByPrefix(sourceType: ReferenceSource, sourceIdPrefix: string): Promise<number>;
183
+ /**
184
+ * Bulk-delete reference nodes of a source type whose `sourceId` is NOT in the
185
+ * given live set, in a single Cypher `DETACH DELETE`.
186
+ *
187
+ * Used by rebuild/reconciliation to prune mirror nodes whose source row no
188
+ * longer exists — one round-trip instead of one delete per orphan.
189
+ *
190
+ * @returns The number of nodes deleted.
191
+ */
192
+ export declare function pruneReferenceNodesNotIn(sourceType: ReferenceSource, liveSourceIds: string[]): Promise<number>;
116
193
  //# sourceMappingURL=node-store.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"node-store.d.ts","sourceRoot":"","sources":["../src/node-store.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAMH,OAAO,EAGL,KAAK,eAAe,EACpB,KAAK,cAAc,EACnB,KAAK,aAAa,EAClB,KAAK,aAAa,EAEnB,MAAM,YAAY,CAAC;AAMpB,2EAA2E;AAC3E,MAAM,WAAW,wBAAwB;IACvC,wCAAwC;IACxC,UAAU,EAAE,eAAe,CAAC;IAC5B,uDAAuD;IACvD,QAAQ,EAAE,MAAM,CAAC;IACjB,oDAAoD;IACpD,KAAK,EAAE,MAAM,CAAC;IACd,oDAAoD;IACpD,SAAS,EAAE,MAAM,EAAE,CAAC;IACpB,+CAA+C;IAC/C,WAAW,EAAE,MAAM,CAAC;CACrB;AAED,wEAAwE;AACxE,MAAM,WAAW,qBAAqB;IACpC,sCAAsC;IACtC,QAAQ,EAAE,cAAc,CAAC;IACzB,wBAAwB;IACxB,KAAK,EAAE,MAAM,CAAC;IACd,uCAAuC;IACvC,OAAO,EAAE,MAAM,CAAC;IAChB,yCAAyC;IACzC,IAAI,EAAE,MAAM,EAAE,CAAC;IACf,oDAAoD;IACpD,SAAS,EAAE,MAAM,EAAE,CAAC;IACpB,+CAA+C;IAC/C,WAAW,EAAE,MAAM,CAAC;CACrB;AAED,sDAAsD;AACtD,MAAM,WAAW,wBAAwB;IACvC,qBAAqB;IACrB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,yBAAyB;IACzB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,gCAAgC;IAChC,SAAS,CAAC,EAAE,MAAM,EAAE,CAAC;CACtB;AAED,mDAAmD;AACnD,MAAM,WAAW,qBAAqB;IACpC,qBAAqB;IACrB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,uBAAuB;IACvB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,oBAAoB;IACpB,IAAI,CAAC,EAAE,MAAM,EAAE,CAAC;IAChB,gCAAgC;IAChC,SAAS,CAAC,EAAE,MAAM,EAAE,CAAC;CACtB;AAED,mDAAmD;AACnD,MAAM,MAAM,eAAe,GAAG,wBAAwB,GAAG,qBAAqB,CAAC;AAE/E,0CAA0C;AAC1C,MAAM,WAAW,aAAa;IAC5B,gCAAgC;IAChC,IAAI,EAAE,aAAa,CAAC;IACpB,qEAAqE;IACrE,KAAK,EAAE,aAAa,EAAE,CAAC;CACxB;AAsCD;;;;GAIG;AACH,wBAAgB,YAAY,CAC1B,UAAU,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAClC,aAAa,CA4Bf;AAED;;;;GAIG;AACH,wBAAgB,YAAY,CAAC,GAAG,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,aAAa,CAiBxE;AAMD;;;;;;GAMG;AACH,wBAAsB,mBAAmB,CACvC,KAAK,EAAE,wBAAwB,GAC9B,OAAO,CAAC,MAAM,CAAC,CA2BjB;AAED;;;;;;GAMG;AACH,wBAAsB,gBAAgB,CACpC,KAAK,EAAE,qBAAqB,GAC3B,OAAO,CAAC,MAAM,CAAC,CA4BjB;AAED;;;;GAIG;AACH,wBAAsB,OAAO,CAAC,EAAE,EAAE,MAAM,GAAG,OAAO,CAAC,aAAa,GAAG,SAAS,CAAC,CAwB5E;AAED;;;;GAIG;AACH,wBAAsB,UAAU,CAAC,EAAE,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC,CAgB7D;AAED;;;;;;;GAOG;AACH,wBAAsB,UAAU,CAC9B,EAAE,EAAE,MAAM,EACV,OAAO,EAAE,eAAe,GACvB,OAAO,CAAC,aAAa,GAAG,SAAS,CAAC,CAmCpC"}
1
+ {"version":3,"file":"node-store.d.ts","sourceRoot":"","sources":["../src/node-store.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAMH,OAAO,EAGL,KAAK,eAAe,EACpB,KAAK,cAAc,EACnB,KAAK,aAAa,EAElB,KAAK,aAAa,EAEnB,MAAM,YAAY,CAAC;AAMpB,2EAA2E;AAC3E,MAAM,WAAW,wBAAwB;IACvC,wCAAwC;IACxC,UAAU,EAAE,eAAe,CAAC;IAC5B,uDAAuD;IACvD,QAAQ,EAAE,MAAM,CAAC;IACjB,oDAAoD;IACpD,KAAK,EAAE,MAAM,CAAC;IACd,oDAAoD;IACpD,SAAS,EAAE,MAAM,EAAE,CAAC;IACpB,+CAA+C;IAC/C,WAAW,EAAE,MAAM,CAAC;CACrB;AAED,wEAAwE;AACxE,MAAM,WAAW,qBAAqB;IACpC,sCAAsC;IACtC,QAAQ,EAAE,cAAc,CAAC;IACzB,wBAAwB;IACxB,KAAK,EAAE,MAAM,CAAC;IACd,uCAAuC;IACvC,OAAO,EAAE,MAAM,CAAC;IAChB,yCAAyC;IACzC,IAAI,EAAE,MAAM,EAAE,CAAC;IACf,oDAAoD;IACpD,SAAS,EAAE,MAAM,EAAE,CAAC;IACpB,+CAA+C;IAC/C,WAAW,EAAE,MAAM,CAAC;CACrB;AAED,sDAAsD;AACtD,MAAM,WAAW,wBAAwB;IACvC,qBAAqB;IACrB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,yBAAyB;IACzB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,gCAAgC;IAChC,SAAS,CAAC,EAAE,MAAM,EAAE,CAAC;CACtB;AAED,mDAAmD;AACnD,MAAM,WAAW,qBAAqB;IACpC,qBAAqB;IACrB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,uBAAuB;IACvB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,oBAAoB;IACpB,IAAI,CAAC,EAAE,MAAM,EAAE,CAAC;IAChB,gCAAgC;IAChC,SAAS,CAAC,EAAE,MAAM,EAAE,CAAC;CACtB;AAED,mDAAmD;AACnD,MAAM,MAAM,eAAe,GAAG,wBAAwB,GAAG,qBAAqB,CAAC;AAE/E;;;GAGG;AACH,MAAM,WAAW,wBAAwB;IACvC,wCAAwC;IACxC,UAAU,EAAE,eAAe,CAAC;IAC5B,uDAAuD;IACvD,QAAQ,EAAE,MAAM,CAAC;IACjB,gEAAgE;IAChE,KAAK,EAAE,MAAM,CAAC;IACd,+CAA+C;IAC/C,WAAW,EAAE,MAAM,CAAC;IACpB;;;OAGG;IACH,SAAS,CAAC,EAAE,MAAM,EAAE,CAAC;IACrB,6DAA6D;IAC7D,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB;;;;OAIG;IACH,UAAU,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;CACtC;AAED,0CAA0C;AAC1C,MAAM,WAAW,aAAa;IAC5B,gCAAgC;IAChC,IAAI,EAAE,aAAa,CAAC;IACpB,qEAAqE;IACrE,KAAK,EAAE,aAAa,EAAE,CAAC;CACxB;AAsCD;;;;GAIG;AACH,wBAAgB,YAAY,CAC1B,UAAU,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAClC,aAAa,CAgCf;AAED;;;;GAIG;AACH,wBAAgB,YAAY,CAAC,GAAG,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,aAAa,CAiBxE;AAMD;;;;;;GAMG;AACH,wBAAsB,mBAAmB,CACvC,KAAK,EAAE,wBAAwB,GAC9B,OAAO,CAAC,MAAM,CAAC,CA2BjB;AAED;;;;;;GAMG;AACH,wBAAsB,gBAAgB,CACpC,KAAK,EAAE,qBAAqB,GAC3B,OAAO,CAAC,MAAM,CAAC,CA4BjB;AAED;;;;GAIG;AACH,wBAAsB,OAAO,CAAC,EAAE,EAAE,MAAM,GAAG,OAAO,CAAC,aAAa,GAAG,SAAS,CAAC,CAwB5E;AAED;;;;GAIG;AACH,wBAAsB,UAAU,CAAC,EAAE,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC,CAgB7D;AAED;;;;;;;GAOG;AACH,wBAAsB,UAAU,CAC9B,EAAE,EAAE,MAAM,EACV,OAAO,EAAE,eAAe,GACvB,OAAO,CAAC,aAAa,GAAG,SAAS,CAAC,CAmCpC;AA+BD;;;;;;;;;;;GAWG;AACH,wBAAsB,mBAAmB,CACvC,KAAK,EAAE,wBAAwB,GAC9B,OAAO,CAAC,MAAM,CAAC,CAoCjB;AAED;;;;;GAKG;AACH,wBAAsB,qBAAqB,CACzC,UAAU,EAAE,eAAe,EAC3B,QAAQ,EAAE,MAAM,GACf,OAAO,CAAC,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,SAAS,CAAC,CAmB9C;AAED;;;;GAIG;AACH,wBAAsB,yBAAyB,CAC7C,KAAK,EAAE,MAAM,GACZ,OAAO,CAAC,aAAa,EAAE,CAAC,CAoB1B;AAED;;;;GAIG;AACH,wBAAsB,sBAAsB,CAC1C,UAAU,EAAE,eAAe,GAC1B,OAAO,CAAC,MAAM,EAAE,CAAC,CAgBnB;AAED;;;;;;GAMG;AACH,wBAAsB,4BAA4B,CAChD,UAAU,EAAE,eAAe,EAC3B,cAAc,EAAE,MAAM,GACrB,OAAO,CAAC,MAAM,CAAC,CAiBjB;AAED;;;;;;;;GAQG;AACH,wBAAsB,wBAAwB,CAC5C,UAAU,EAAE,eAAe,EAC3B,aAAa,EAAE,MAAM,EAAE,GACtB,OAAO,CAAC,MAAM,CAAC,CAiBjB"}
@@ -57,13 +57,17 @@ export function recordToNode(properties) {
57
57
  workspaceId: properties.workspaceId ?? "",
58
58
  };
59
59
  if (base.kind === NODE_KIND.REFERENCE) {
60
- return {
60
+ const referenceNode = {
61
61
  ...base,
62
62
  kind: NODE_KIND.REFERENCE,
63
63
  sourceType: properties.sourceType,
64
64
  sourceId: properties.sourceId,
65
65
  label: properties.label ?? "",
66
66
  };
67
+ if (typeof properties.content === "string") {
68
+ referenceNode.content = properties.content;
69
+ }
70
+ return referenceNode;
67
71
  }
68
72
  return {
69
73
  ...base,
@@ -265,4 +269,200 @@ export async function updateNode(id, updates) {
265
269
  }
266
270
  }
267
271
  }
272
+ // ---------------------------------------------------------------------------
273
+ // Derived-mirror projection helpers (#1258)
274
+ // ---------------------------------------------------------------------------
275
+ /**
276
+ * Node property keys managed by the store; never overwritten via `extraProps`.
277
+ * Includes the explicit top-level inputs (`label`, `workspaceId`, `content`) and
278
+ * timestamps, so `extraProps` can only add auxiliary props (status, hash, cursor)
279
+ * — never silently corrupt scope/label/content.
280
+ */
281
+ const MANAGED_NODE_PROP_KEYS = new Set([
282
+ "id",
283
+ "kind",
284
+ "sourceType",
285
+ "sourceId",
286
+ "embedding",
287
+ "createdAt",
288
+ "updatedAt",
289
+ "label",
290
+ "workspaceId",
291
+ "content",
292
+ ]);
293
+ const UPSERT_REFERENCE_NODE_CYPHER = `
294
+ MERGE (n:${NODE_LABEL} {kind: 'reference', sourceType: $sourceType, sourceId: $sourceId})
295
+ ON CREATE SET n.id = $id, n.createdAt = $now, n.embedding = $embedding
296
+ SET n += $mutable
297
+ RETURN n.id AS id`;
298
+ /**
299
+ * Idempotently upsert a reference node, keyed on `(sourceType, sourceId)`.
300
+ *
301
+ * Uses Neo4j `MERGE` so repeated calls converge to a single node. The embedding
302
+ * is set **only on create** and never overwritten here. When omitted it is
303
+ * stored as an empty array `[]` (not an absent property); the off-write-path
304
+ * embed backfill selects such nodes via `size(embedding) = 0` and fills them
305
+ * later (an empty vector is also ignored by the vector index until filled).
306
+ * `label`, `content`, `workspaceId`, and any `extraProps` are set on every call.
307
+ *
308
+ * @returns The (stable) node ID.
309
+ */
310
+ export async function upsertReferenceNode(input) {
311
+ const now = new Date().toISOString();
312
+ const mutable = {
313
+ label: input.label,
314
+ workspaceId: input.workspaceId,
315
+ updatedAt: now,
316
+ };
317
+ if (input.content !== undefined) {
318
+ mutable.content = input.content;
319
+ }
320
+ if (input.extraProps) {
321
+ for (const [key, value] of Object.entries(input.extraProps)) {
322
+ if (!MANAGED_NODE_PROP_KEYS.has(key)) {
323
+ mutable[key] = value;
324
+ }
325
+ }
326
+ }
327
+ const session = getSession();
328
+ try {
329
+ const result = await session.run(UPSERT_REFERENCE_NODE_CYPHER, {
330
+ sourceType: input.sourceType,
331
+ sourceId: input.sourceId,
332
+ id: randomUUID(),
333
+ now,
334
+ embedding: input.embedding ?? [],
335
+ mutable,
336
+ });
337
+ return result.records[0].get("id");
338
+ }
339
+ finally {
340
+ try {
341
+ await session.close();
342
+ }
343
+ catch (closeError) {
344
+ logger.warn({ err: closeError }, "Failed to close session after upsertReferenceNode");
345
+ }
346
+ }
347
+ }
348
+ /**
349
+ * Read the raw Neo4j properties of a reference node by source, or `undefined`.
350
+ *
351
+ * Used by projection to read back un-typed metadata (e.g., `projectionHash`,
352
+ * transcript cursor fields) that {@link recordToNode} does not surface.
353
+ */
354
+ export async function getReferenceNodeProps(sourceType, sourceId) {
355
+ const session = getSession();
356
+ try {
357
+ const result = await session.run(`MATCH (n:${NODE_LABEL} {kind: 'reference', sourceType: $sourceType, sourceId: $sourceId})
358
+ RETURN properties(n) AS props`, { sourceType, sourceId });
359
+ if (result.records.length === 0) {
360
+ return undefined;
361
+ }
362
+ return result.records[0].get("props");
363
+ }
364
+ finally {
365
+ try {
366
+ await session.close();
367
+ }
368
+ catch (closeError) {
369
+ logger.warn({ err: closeError }, "Failed to close session after getReferenceNodeProps");
370
+ }
371
+ }
372
+ }
373
+ /**
374
+ * List nodes that have no embedding yet (for off-write-path embed backfill).
375
+ *
376
+ * @param limit - Maximum number of nodes to return (a positive integer).
377
+ */
378
+ export async function listNodesMissingEmbedding(limit) {
379
+ const safeLimit = Math.max(1, Math.floor(limit));
380
+ const session = getSession();
381
+ try {
382
+ const result = await session.run(`MATCH (n:${NODE_LABEL})
383
+ WHERE n.embedding IS NULL OR size(n.embedding) = 0
384
+ RETURN properties(n) AS props
385
+ LIMIT ${safeLimit}`);
386
+ return result.records.map((record) => recordToNode(record.get("props")));
387
+ }
388
+ finally {
389
+ try {
390
+ await session.close();
391
+ }
392
+ catch (closeError) {
393
+ logger.warn({ err: closeError }, "Failed to close session after listNodesMissingEmbedding");
394
+ }
395
+ }
396
+ }
397
+ /**
398
+ * List the `sourceId`s of all reference nodes of a given source type.
399
+ *
400
+ * Used by `rebuild()` to prune mirror nodes whose source row no longer exists.
401
+ */
402
+ export async function listReferenceSourceIds(sourceType) {
403
+ const session = getSession();
404
+ try {
405
+ const result = await session.run(`MATCH (n:${NODE_LABEL} {kind: 'reference', sourceType: $sourceType})
406
+ RETURN n.sourceId AS sourceId`, { sourceType });
407
+ return result.records.map((record) => record.get("sourceId"));
408
+ }
409
+ finally {
410
+ try {
411
+ await session.close();
412
+ }
413
+ catch (closeError) {
414
+ logger.warn({ err: closeError }, "Failed to close session after listReferenceSourceIds");
415
+ }
416
+ }
417
+ }
418
+ /**
419
+ * Bulk-delete reference nodes of a source type whose `sourceId` starts with a
420
+ * prefix, in a single Cypher `DETACH DELETE` (e.g. all transcript chunks of a
421
+ * session, keyed `${sessionId}#…`). O(matched), not O(total).
422
+ *
423
+ * @returns The number of nodes deleted.
424
+ */
425
+ export async function deleteReferenceNodesByPrefix(sourceType, sourceIdPrefix) {
426
+ const session = getSession();
427
+ try {
428
+ const result = await session.run(`MATCH (n:${NODE_LABEL} {kind: 'reference', sourceType: $sourceType})
429
+ WHERE n.sourceId STARTS WITH $sourceIdPrefix
430
+ DETACH DELETE n`, { sourceType, sourceIdPrefix });
431
+ return result.summary.counters.updates().nodesDeleted;
432
+ }
433
+ finally {
434
+ try {
435
+ await session.close();
436
+ }
437
+ catch (closeError) {
438
+ logger.warn({ err: closeError }, "Failed to close session after deleteReferenceNodesByPrefix");
439
+ }
440
+ }
441
+ }
442
+ /**
443
+ * Bulk-delete reference nodes of a source type whose `sourceId` is NOT in the
444
+ * given live set, in a single Cypher `DETACH DELETE`.
445
+ *
446
+ * Used by rebuild/reconciliation to prune mirror nodes whose source row no
447
+ * longer exists — one round-trip instead of one delete per orphan.
448
+ *
449
+ * @returns The number of nodes deleted.
450
+ */
451
+ export async function pruneReferenceNodesNotIn(sourceType, liveSourceIds) {
452
+ const session = getSession();
453
+ try {
454
+ const result = await session.run(`MATCH (n:${NODE_LABEL} {kind: 'reference', sourceType: $sourceType})
455
+ WHERE NOT n.sourceId IN $liveSourceIds
456
+ DETACH DELETE n`, { sourceType, liveSourceIds });
457
+ return result.summary.counters.updates().nodesDeleted;
458
+ }
459
+ finally {
460
+ try {
461
+ await session.close();
462
+ }
463
+ catch (closeError) {
464
+ logger.warn({ err: closeError }, "Failed to close session after pruneReferenceNodesNotIn");
465
+ }
466
+ }
467
+ }
268
468
  //# sourceMappingURL=node-store.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"node-store.js","sourceRoot":"","sources":["../src/node-store.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"node-store.js","sourceRoot":"","sources":["../src/node-store.ts"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"schema.d.ts","sourceRoot":"","sources":["../src/schema.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAeH;;;;;;GAMG;AACH,wBAAgB,qBAAqB,CAAC,UAAU,GAAE,MAA6B,GAAG,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CA8BvG;AAED;;;;GAIG;AACH,eAAO,MAAM,iBAAiB,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAA2B,CAAC;AAwDjF;;;;;;;;;;;GAWG;AACH,wBAAsB,UAAU,CAAC,UAAU,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAkBnE"}
1
+ {"version":3,"file":"schema.d.ts","sourceRoot":"","sources":["../src/schema.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAeH;;;;;;GAMG;AACH,wBAAgB,qBAAqB,CAAC,UAAU,GAAE,MAA6B,GAAG,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CA0CvG;AAED;;;;GAIG;AACH,eAAO,MAAM,iBAAiB,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAA2B,CAAC;AAwDjF;;;;;;;;;;;GAWG;AACH,wBAAsB,UAAU,CAAC,UAAU,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAkBnE"}
package/dist/schema.js CHANGED
@@ -30,9 +30,21 @@ export function buildSchemaStatements(dimensions = EMBEDDING_DIMENSIONS) {
30
30
  /** Index on workspaceId for scoped queries. */
31
31
  INDEX_WORKSPACE: `CREATE INDEX knowledge_node_workspace IF NOT EXISTS
32
32
  FOR (n:${NODE_LABEL}) ON (n.workspaceId)`,
33
- /** Composite index for reference node lookups by source. */
34
- INDEX_SOURCE: `CREATE INDEX knowledge_node_source IF NOT EXISTS
35
- FOR (n:${NODE_LABEL}) ON (n.sourceType, n.sourceId)`,
33
+ /**
34
+ * Uniqueness constraint on reference-node identity `(sourceType, sourceId)`.
35
+ * Backs the idempotent MERGE upsert and prevents duplicate mirror nodes
36
+ * (the keystone: one mirror node per source entity). Composite uniqueness
37
+ * ignores nodes lacking either property, so native nodes are unaffected.
38
+ * The constraint provides its own backing index for fast source lookups.
39
+ *
40
+ * On a fresh graph (the post-#1258 norm) this always succeeds. If an upgrade
41
+ * graph somehow holds legacy duplicates, creation fails loudly and init
42
+ * throws (the plugin runs degraded) rather than silently allowing
43
+ * nondeterministic MERGEs — recover by wiping Neo4j, after which
44
+ * startup-if-empty re-projects from SQL + logs (recovery = re-project).
45
+ */
46
+ UNIQUE_SOURCE: `CREATE CONSTRAINT knowledge_node_source_unique IF NOT EXISTS
47
+ FOR (n:${NODE_LABEL}) REQUIRE (n.sourceType, n.sourceId) IS UNIQUE`,
36
48
  /** Vector index for embedding similarity search. */
37
49
  VECTOR_INDEX: [
38
50
  `CREATE VECTOR INDEX ${VECTOR_INDEX_NAME} IF NOT EXISTS`,
@@ -1 +1 @@
1
- {"version":3,"file":"schema.js","sourceRoot":"","sources":["../src/schema.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"schema.js","sourceRoot":"","sources":["../src/schema.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAEH,OAAO,EAAE,UAAU,EAAE,MAAM,aAAa,CAAC;AACzC,OAAO,EAAE,MAAM,EAAE,MAAM,aAAa,CAAC;AACrC,OAAO,EACL,UAAU,EACV,iBAAiB,EACjB,oBAAoB,EACpB,0BAA0B,GAC3B,MAAM,gBAAgB,CAAC;AAExB,8EAA8E;AAC9E,4BAA4B;AAC5B,8EAA8E;AAE9E;;;;;;GAMG;AACH,MAAM,UAAU,qBAAqB,CAAC,aAAqB,oBAAoB;IAC7E,OAAO;QACL,wCAAwC;QACxC,cAAc,EAAE;aACP,UAAU,0BAA0B;QAE7C,0DAA0D;QAC1D,UAAU,EAAE;aACH,UAAU,eAAe;QAElC,+CAA+C;QAC/C,eAAe,EAAE;aACR,UAAU,sBAAsB;QAEzC;;;;;;;;;;;;WAYG;QACH,aAAa,EAAE;aACN,UAAU,gDAAgD;QAEnE,oDAAoD;QACpD,YAAY,EAAE;YACZ,uBAAuB,iBAAiB,gBAAgB;YACxD,UAAU,UAAU,oBAAoB;YACxC,WAAW;YACX,kBAAkB;YAClB,8BAA8B,UAAU,GAAG;YAC3C,wCAAwC,0BAA0B,GAAG;YACrE,KAAK;YACL,GAAG;SACJ,CAAC,IAAI,CAAC,IAAI,CAAC;KACb,CAAC;AACJ,CAAC;AAED;;;;GAIG;AACH,MAAM,CAAC,MAAM,iBAAiB,GAA2B,qBAAqB,EAAE,CAAC;AAEjF,8EAA8E;AAC9E,gBAAgB;AAChB,8EAA8E;AAE9E,mEAAmE;AACnE,MAAM,kBAAkB,GAAW,CAAC,CAAC;AAErC,sEAAsE;AACtE,MAAM,qBAAqB,GAAW,GAAG,CAAC;AAE1C;;;GAGG;AACH,KAAK,UAAU,qBAAqB,CAClC,OAAuC,EACvC,IAAY,EACZ,MAAc;IAEd,KAAK,IAAI,OAAO,GAAG,CAAC,EAAE,OAAO,IAAI,kBAAkB,EAAE,OAAO,EAAE,EAAE,CAAC;QAC/D,IAAI,CAAC;YACH,MAAM,OAAO,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC;YAC1B,OAAO;QACT,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,MAAM,IAAI,GAAI,KAA2B,CAAC,IAAI,IAAI,EAAE,CAAC;YAErD,4EAA4E;YAC5E,kEAAkE;YAClE,IAAI,IAAI,CAAC,QAAQ,CAAC,mCAAmC,CAAC,EAAE,CAAC;gBACvD,MAAM,CAAC,KAAK,CAAC,EAAE,SAAS,EAAE,IAAI,EAAE,EAAE,yCAAyC,CAAC,CAAC;gBAC7E,OAAO;YACT,CAAC;YAED,8DAA8D;YAC9D,MAAM,SAAS,GAAI,KAAiC,CAAC,SAAS,KAAK,IAAI,CAAC;YACxE,IAAI,SAAS,IAAI,OAAO,GAAG,kBAAkB,EAAE,CAAC;gBAC9C,MAAM,CAAC,IAAI,CAAC,EAAE,SAAS,EAAE,IAAI,EAAE,OAAO,EAAE,EAAE,kCAAkC,CAAC,CAAC;gBAC9E,MAAM,IAAI,OAAO,CAAC,CAAC,OAAO,EAAE,EAAE,CAAC,UAAU,CAAC,OAAO,EAAE,qBAAqB,GAAG,OAAO,CAAC,CAAC,CAAC;gBACrF,SAAS;YACX,CAAC;YAED,MAAM,CAAC,KAAK,CAAC,EAAE,GAAG,EAAE,KAAK,EAAE,SAAS,EAAE,IAAI,EAAE,EAAE,yBAAyB,CAAC,CAAC;YACzE,MAAM,IAAI,KAAK,CACb,qBAAqB,IAAI,aAAa,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,EAAE,EAC9F,EAAE,KAAK,EAAE,KAAK,EAAE,CACjB,CAAC;QACJ,CAAC;IACH,CAAC;AACH,CAAC;AAED,8EAA8E;AAC9E,aAAa;AACb,8EAA8E;AAE9E;;;;;;;;;;;GAWG;AACH,MAAM,CAAC,KAAK,UAAU,UAAU,CAAC,UAAmB;IAClD,MAAM,UAAU,GAAG,UAAU,KAAK,SAAS;QACzC,CAAC,CAAC,qBAAqB,CAAC,UAAU,CAAC;QACnC,CAAC,CAAC,iBAAiB,CAAC;IACtB,MAAM,OAAO,GAAG,UAAU,EAAE,CAAC;IAC7B,IAAI,CAAC;QACH,KAAK,MAAM,CAAC,IAAI,EAAE,MAAM,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,UAAU,CAAC,EAAE,CAAC;YACxD,MAAM,CAAC,KAAK,CAAC,EAAE,SAAS,EAAE,IAAI,EAAE,EAAE,0BAA0B,CAAC,CAAC;YAC9D,MAAM,qBAAqB,CAAC,OAAO,EAAE,IAAI,EAAE,MAAM,CAAC,CAAC;QACrD,CAAC;QACD,MAAM,CAAC,IAAI,CAAC,oCAAoC,CAAC,CAAC;IACpD,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,2DAA2D,CAAC,CAAC;QAChG,CAAC;IACH,CAAC;AACH,CAAC"}
package/dist/types.d.ts CHANGED
@@ -26,6 +26,9 @@ export declare const REFERENCE_SOURCE: {
26
26
  readonly SESSION: "session";
27
27
  readonly FINDING: "finding";
28
28
  readonly WORKSPACE: "workspace";
29
+ readonly PERSONA: "persona";
30
+ readonly ENVIRONMENT: "environment";
31
+ readonly TRANSCRIPT_CHUNK: "transcript_chunk";
29
32
  };
30
33
  /**
31
34
  * Entity type that a reference node points to.
@@ -60,6 +63,18 @@ export declare const EDGE_TYPE: {
60
63
  readonly DERIVED_FROM: "DERIVED_FROM";
61
64
  readonly MENTIONS: "MENTIONS";
62
65
  readonly PART_OF: "PART_OF";
66
+ /** Task → Workspace. */
67
+ readonly IN_WORKSPACE: "IN_WORKSPACE";
68
+ /** Session → Task (a session is an attempt of a task). */
69
+ readonly ATTEMPT_OF: "ATTEMPT_OF";
70
+ /** Session → Environment. */
71
+ readonly RAN_IN: "RAN_IN";
72
+ /** Session → Persona. */
73
+ readonly USED_PERSONA: "USED_PERSONA";
74
+ /** Session → Session (a session spawned another). */
75
+ readonly SPAWNED: "SPAWNED";
76
+ /** Workspace → Environment. */
77
+ readonly LINKED_TO: "LINKED_TO";
63
78
  };
64
79
  /** Union of all edge type values. */
65
80
  export type EdgeType = (typeof EDGE_TYPE)[keyof typeof EDGE_TYPE];
@@ -87,6 +102,11 @@ export interface ReferenceNode extends KnowledgeNodeBase {
87
102
  sourceId: string;
88
103
  /** Human-readable label derived from the source (e.g., task title). */
89
104
  label: string;
105
+ /**
106
+ * Optional cached content (e.g., a transcript chunk's text). Re-derivable
107
+ * from the source, so the keystone (no primary data only in the graph) holds.
108
+ */
109
+ content?: string;
90
110
  }
91
111
  /** A native node — owns its content directly. */
92
112
  export interface NativeNode extends KnowledgeNodeBase {
@@ -1 +1 @@
1
- {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAMH,oDAAoD;AACpD,eAAO,MAAM,SAAS;IACpB,6EAA6E;;IAE7E,kDAAkD;;CAE1C,CAAC;AAEX,qCAAqC;AACrC,MAAM,MAAM,QAAQ,GAAG,CAAC,OAAO,SAAS,CAAC,CAAC,MAAM,OAAO,SAAS,CAAC,CAAC;AAMlE;;;;;GAKG;AACH,eAAO,MAAM,gBAAgB;;;;;CAKnB,CAAC;AAEX;;;;;GAKG;AACH,MAAM,MAAM,eAAe,GAAG,MAAM,CAAC;AAMrC;;;;;GAKG;AACH,eAAO,MAAM,eAAe;;;;;CAKlB,CAAC;AAEX;;;;;GAKG;AACH,MAAM,MAAM,cAAc,GAAG,MAAM,CAAC;AAMpC,wDAAwD;AACxD,eAAO,MAAM,SAAS;;;;;;CAMZ,CAAC;AAEX,qCAAqC;AACrC,MAAM,MAAM,QAAQ,GAAG,CAAC,OAAO,SAAS,CAAC,CAAC,MAAM,OAAO,SAAS,CAAC,CAAC;AAMlE,sDAAsD;AACtD,MAAM,WAAW,iBAAiB;IAChC,qCAAqC;IACrC,EAAE,EAAE,MAAM,CAAC;IACX,kCAAkC;IAClC,IAAI,EAAE,QAAQ,CAAC;IACf,oDAAoD;IACpD,SAAS,EAAE,MAAM,EAAE,CAAC;IACpB,mCAAmC;IACnC,SAAS,EAAE,MAAM,CAAC;IAClB,uCAAuC;IACvC,SAAS,EAAE,MAAM,CAAC;IAClB,+CAA+C;IAC/C,WAAW,EAAE,MAAM,CAAC;CACrB;AAED,yEAAyE;AACzE,MAAM,WAAW,aAAc,SAAQ,iBAAiB;IACtD,IAAI,EAAE,OAAO,SAAS,CAAC,SAAS,CAAC;IACjC,wCAAwC;IACxC,UAAU,EAAE,eAAe,CAAC;IAC5B,uDAAuD;IACvD,QAAQ,EAAE,MAAM,CAAC;IACjB,uEAAuE;IACvE,KAAK,EAAE,MAAM,CAAC;CACf;AAED,iDAAiD;AACjD,MAAM,WAAW,UAAW,SAAQ,iBAAiB;IACnD,IAAI,EAAE,OAAO,SAAS,CAAC,MAAM,CAAC;IAC9B,sCAAsC;IACtC,QAAQ,EAAE,cAAc,CAAC;IACzB,wBAAwB;IACxB,KAAK,EAAE,MAAM,CAAC;IACd,uCAAuC;IACvC,OAAO,EAAE,MAAM,CAAC;IAChB,yCAAyC;IACzC,IAAI,EAAE,MAAM,EAAE,CAAC;CAChB;AAED,6DAA6D;AAC7D,MAAM,MAAM,aAAa,GAAG,aAAa,GAAG,UAAU,CAAC;AAMvD,qDAAqD;AACrD,MAAM,WAAW,aAAa;IAC5B,sBAAsB;IACtB,MAAM,EAAE,MAAM,CAAC;IACf,sBAAsB;IACtB,IAAI,EAAE,MAAM,CAAC;IACb,yBAAyB;IACzB,IAAI,EAAE,QAAQ,CAAC;IACf,mEAAmE;IACnE,QAAQ,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IACnC,oDAAoD;IACpD,SAAS,EAAE,MAAM,CAAC;CACnB;AAMD,2DAA2D;AAC3D,wBAAgB,eAAe,CAAC,IAAI,EAAE,aAAa,GAAG,IAAI,IAAI,aAAa,CAE1E;AAED,wDAAwD;AACxD,wBAAgB,YAAY,CAAC,IAAI,EAAE,aAAa,GAAG,IAAI,IAAI,UAAU,CAEpE"}
1
+ {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAMH,oDAAoD;AACpD,eAAO,MAAM,SAAS;IACpB,6EAA6E;;IAE7E,kDAAkD;;CAE1C,CAAC;AAEX,qCAAqC;AACrC,MAAM,MAAM,QAAQ,GAAG,CAAC,OAAO,SAAS,CAAC,CAAC,MAAM,OAAO,SAAS,CAAC,CAAC;AAMlE;;;;;GAKG;AACH,eAAO,MAAM,gBAAgB;;;;;;;;CAQnB,CAAC;AAEX;;;;;GAKG;AACH,MAAM,MAAM,eAAe,GAAG,MAAM,CAAC;AAMrC;;;;;GAKG;AACH,eAAO,MAAM,eAAe;;;;;CAKlB,CAAC;AAEX;;;;;GAKG;AACH,MAAM,MAAM,cAAc,GAAG,MAAM,CAAC;AAMpC,wDAAwD;AACxD,eAAO,MAAM,SAAS;;;;;;IAOpB,wBAAwB;;IAExB,0DAA0D;;IAE1D,6BAA6B;;IAE7B,yBAAyB;;IAEzB,qDAAqD;;IAErD,+BAA+B;;CAEvB,CAAC;AAEX,qCAAqC;AACrC,MAAM,MAAM,QAAQ,GAAG,CAAC,OAAO,SAAS,CAAC,CAAC,MAAM,OAAO,SAAS,CAAC,CAAC;AAMlE,sDAAsD;AACtD,MAAM,WAAW,iBAAiB;IAChC,qCAAqC;IACrC,EAAE,EAAE,MAAM,CAAC;IACX,kCAAkC;IAClC,IAAI,EAAE,QAAQ,CAAC;IACf,oDAAoD;IACpD,SAAS,EAAE,MAAM,EAAE,CAAC;IACpB,mCAAmC;IACnC,SAAS,EAAE,MAAM,CAAC;IAClB,uCAAuC;IACvC,SAAS,EAAE,MAAM,CAAC;IAClB,+CAA+C;IAC/C,WAAW,EAAE,MAAM,CAAC;CACrB;AAED,yEAAyE;AACzE,MAAM,WAAW,aAAc,SAAQ,iBAAiB;IACtD,IAAI,EAAE,OAAO,SAAS,CAAC,SAAS,CAAC;IACjC,wCAAwC;IACxC,UAAU,EAAE,eAAe,CAAC;IAC5B,uDAAuD;IACvD,QAAQ,EAAE,MAAM,CAAC;IACjB,uEAAuE;IACvE,KAAK,EAAE,MAAM,CAAC;IACd;;;OAGG;IACH,OAAO,CAAC,EAAE,MAAM,CAAC;CAClB;AAED,iDAAiD;AACjD,MAAM,WAAW,UAAW,SAAQ,iBAAiB;IACnD,IAAI,EAAE,OAAO,SAAS,CAAC,MAAM,CAAC;IAC9B,sCAAsC;IACtC,QAAQ,EAAE,cAAc,CAAC;IACzB,wBAAwB;IACxB,KAAK,EAAE,MAAM,CAAC;IACd,uCAAuC;IACvC,OAAO,EAAE,MAAM,CAAC;IAChB,yCAAyC;IACzC,IAAI,EAAE,MAAM,EAAE,CAAC;CAChB;AAED,6DAA6D;AAC7D,MAAM,MAAM,aAAa,GAAG,aAAa,GAAG,UAAU,CAAC;AAMvD,qDAAqD;AACrD,MAAM,WAAW,aAAa;IAC5B,sBAAsB;IACtB,MAAM,EAAE,MAAM,CAAC;IACf,sBAAsB;IACtB,IAAI,EAAE,MAAM,CAAC;IACb,yBAAyB;IACzB,IAAI,EAAE,QAAQ,CAAC;IACf,mEAAmE;IACnE,QAAQ,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IACnC,oDAAoD;IACpD,SAAS,EAAE,MAAM,CAAC;CACnB;AAMD,2DAA2D;AAC3D,wBAAgB,eAAe,CAAC,IAAI,EAAE,aAAa,GAAG,IAAI,IAAI,aAAa,CAE1E;AAED,wDAAwD;AACxD,wBAAgB,YAAY,CAAC,IAAI,EAAE,aAAa,GAAG,IAAI,IAAI,UAAU,CAEpE"}
package/dist/types.js CHANGED
@@ -30,6 +30,9 @@ export const REFERENCE_SOURCE = {
30
30
  SESSION: "session",
31
31
  FINDING: "finding",
32
32
  WORKSPACE: "workspace",
33
+ PERSONA: "persona",
34
+ ENVIRONMENT: "environment",
35
+ TRANSCRIPT_CHUNK: "transcript_chunk",
33
36
  };
34
37
  // ---------------------------------------------------------------------------
35
38
  // Native node categories
@@ -56,6 +59,19 @@ export const EDGE_TYPE = {
56
59
  DERIVED_FROM: "DERIVED_FROM",
57
60
  MENTIONS: "MENTIONS",
58
61
  PART_OF: "PART_OF",
62
+ // Structural edges projected from Grackle's SQL foreign keys (#1258).
63
+ /** Task → Workspace. */
64
+ IN_WORKSPACE: "IN_WORKSPACE",
65
+ /** Session → Task (a session is an attempt of a task). */
66
+ ATTEMPT_OF: "ATTEMPT_OF",
67
+ /** Session → Environment. */
68
+ RAN_IN: "RAN_IN",
69
+ /** Session → Persona. */
70
+ USED_PERSONA: "USED_PERSONA",
71
+ /** Session → Session (a session spawned another). */
72
+ SPAWNED: "SPAWNED",
73
+ /** Workspace → Environment. */
74
+ LINKED_TO: "LINKED_TO",
59
75
  };
60
76
  // ---------------------------------------------------------------------------
61
77
  // Type guards
package/dist/types.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"types.js","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAEH,8EAA8E;AAC9E,0BAA0B;AAC1B,8EAA8E;AAE9E,oDAAoD;AACpD,MAAM,CAAC,MAAM,SAAS,GAAG;IACvB,6EAA6E;IAC7E,SAAS,EAAE,WAAW;IACtB,kDAAkD;IAClD,MAAM,EAAE,QAAQ;CACR,CAAC;AAKX,8EAA8E;AAC9E,8BAA8B;AAC9B,8EAA8E;AAE9E;;;;;GAKG;AACH,MAAM,CAAC,MAAM,gBAAgB,GAAG;IAC9B,IAAI,EAAE,MAAM;IACZ,OAAO,EAAE,SAAS;IAClB,OAAO,EAAE,SAAS;IAClB,SAAS,EAAE,WAAW;CACd,CAAC;AAUX,8EAA8E;AAC9E,yBAAyB;AACzB,8EAA8E;AAE9E;;;;;GAKG;AACH,MAAM,CAAC,MAAM,eAAe,GAAG;IAC7B,QAAQ,EAAE,UAAU;IACpB,OAAO,EAAE,SAAS;IAClB,OAAO,EAAE,SAAS;IAClB,OAAO,EAAE,SAAS;CACV,CAAC;AAUX,8EAA8E;AAC9E,aAAa;AACb,8EAA8E;AAE9E,wDAAwD;AACxD,MAAM,CAAC,MAAM,SAAS,GAAG;IACvB,UAAU,EAAE,YAAY;IACxB,UAAU,EAAE,YAAY;IACxB,YAAY,EAAE,cAAc;IAC5B,QAAQ,EAAE,UAAU;IACpB,OAAO,EAAE,SAAS;CACV,CAAC;AAsEX,8EAA8E;AAC9E,cAAc;AACd,8EAA8E;AAE9E,2DAA2D;AAC3D,MAAM,UAAU,eAAe,CAAC,IAAmB;IACjD,OAAO,IAAI,CAAC,IAAI,KAAK,SAAS,CAAC,SAAS,CAAC;AAC3C,CAAC;AAED,wDAAwD;AACxD,MAAM,UAAU,YAAY,CAAC,IAAmB;IAC9C,OAAO,IAAI,CAAC,IAAI,KAAK,SAAS,CAAC,MAAM,CAAC;AACxC,CAAC"}
1
+ {"version":3,"file":"types.js","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAEH,8EAA8E;AAC9E,0BAA0B;AAC1B,8EAA8E;AAE9E,oDAAoD;AACpD,MAAM,CAAC,MAAM,SAAS,GAAG;IACvB,6EAA6E;IAC7E,SAAS,EAAE,WAAW;IACtB,kDAAkD;IAClD,MAAM,EAAE,QAAQ;CACR,CAAC;AAKX,8EAA8E;AAC9E,8BAA8B;AAC9B,8EAA8E;AAE9E;;;;;GAKG;AACH,MAAM,CAAC,MAAM,gBAAgB,GAAG;IAC9B,IAAI,EAAE,MAAM;IACZ,OAAO,EAAE,SAAS;IAClB,OAAO,EAAE,SAAS;IAClB,SAAS,EAAE,WAAW;IACtB,OAAO,EAAE,SAAS;IAClB,WAAW,EAAE,aAAa;IAC1B,gBAAgB,EAAE,kBAAkB;CAC5B,CAAC;AAUX,8EAA8E;AAC9E,yBAAyB;AACzB,8EAA8E;AAE9E;;;;;GAKG;AACH,MAAM,CAAC,MAAM,eAAe,GAAG;IAC7B,QAAQ,EAAE,UAAU;IACpB,OAAO,EAAE,SAAS;IAClB,OAAO,EAAE,SAAS;IAClB,OAAO,EAAE,SAAS;CACV,CAAC;AAUX,8EAA8E;AAC9E,aAAa;AACb,8EAA8E;AAE9E,wDAAwD;AACxD,MAAM,CAAC,MAAM,SAAS,GAAG;IACvB,UAAU,EAAE,YAAY;IACxB,UAAU,EAAE,YAAY;IACxB,YAAY,EAAE,cAAc;IAC5B,QAAQ,EAAE,UAAU;IACpB,OAAO,EAAE,SAAS;IAClB,sEAAsE;IACtE,wBAAwB;IACxB,YAAY,EAAE,cAAc;IAC5B,0DAA0D;IAC1D,UAAU,EAAE,YAAY;IACxB,6BAA6B;IAC7B,MAAM,EAAE,QAAQ;IAChB,yBAAyB;IACzB,YAAY,EAAE,cAAc;IAC5B,qDAAqD;IACrD,OAAO,EAAE,SAAS;IAClB,+BAA+B;IAC/B,SAAS,EAAE,WAAW;CACd,CAAC;AA2EX,8EAA8E;AAC9E,cAAc;AACd,8EAA8E;AAE9E,2DAA2D;AAC3D,MAAM,UAAU,eAAe,CAAC,IAAmB;IACjD,OAAO,IAAI,CAAC,IAAI,KAAK,SAAS,CAAC,SAAS,CAAC;AAC3C,CAAC;AAED,wDAAwD;AACxD,MAAM,UAAU,YAAY,CAAC,IAAmB;IAC9C,OAAO,IAAI,CAAC,IAAI,KAAK,SAAS,CAAC,MAAM,CAAC;AACxC,CAAC"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@grackle-ai/knowledge-core",
3
- "version": "0.119.0",
3
+ "version": "0.121.0",
4
4
  "description": "Generic knowledge graph SDK on top of Neo4j with vector search, graph traversal, and pluggable embedders/chunkers",
5
5
  "license": "MIT",
6
6
  "repository": {