@elqnt/kg 3.0.0 → 3.0.2

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 (64) hide show
  1. package/dist/api/index.d.mts +94 -5
  2. package/dist/api/index.d.ts +94 -5
  3. package/dist/api/index.js +16 -2
  4. package/dist/api/index.js.map +1 -1
  5. package/dist/api/index.mjs +15 -1
  6. package/dist/api/server.d.mts +4 -3
  7. package/dist/api/server.d.ts +4 -3
  8. package/dist/api/server.js.map +1 -1
  9. package/dist/{chunk-HCDFJCQL.mjs → chunk-5D7RJC7D.mjs} +105 -5
  10. package/dist/chunk-5D7RJC7D.mjs.map +1 -0
  11. package/dist/chunk-67SUELDR.js.map +1 -1
  12. package/dist/chunk-ADIKUMMI.js.map +1 -1
  13. package/dist/chunk-B33SF6DB.js +2 -0
  14. package/dist/chunk-B33SF6DB.js.map +1 -0
  15. package/dist/chunk-BP2I7KWY.js +1031 -0
  16. package/dist/chunk-BP2I7KWY.js.map +1 -0
  17. package/dist/{chunk-2TJCYLTP.js → chunk-CNWOI7LX.js} +104 -4
  18. package/dist/chunk-CNWOI7LX.js.map +1 -0
  19. package/dist/chunk-MAEB7UOW.mjs +257 -0
  20. package/dist/chunk-MAEB7UOW.mjs.map +1 -0
  21. package/dist/chunk-SUDQ45LY.mjs +2 -0
  22. package/dist/chunk-UCKE66GB.js.map +1 -1
  23. package/dist/chunk-WYRCAPY4.js +257 -0
  24. package/dist/chunk-WYRCAPY4.js.map +1 -0
  25. package/dist/chunk-ZEPJC46Z.mjs +1031 -0
  26. package/dist/chunk-ZEPJC46Z.mjs.map +1 -0
  27. package/dist/hooks/index.d.mts +446 -79
  28. package/dist/hooks/index.d.ts +446 -79
  29. package/dist/hooks/index.js +8 -3
  30. package/dist/hooks/index.js.map +1 -1
  31. package/dist/hooks/index.mjs +9 -4
  32. package/dist/index.d.mts +4 -2
  33. package/dist/index.d.ts +4 -2
  34. package/dist/index.js +24 -5
  35. package/dist/index.js.map +1 -1
  36. package/dist/index.mjs +31 -12
  37. package/dist/index.mjs.map +1 -1
  38. package/dist/models/index.d.mts +213 -0
  39. package/dist/models/index.d.ts +213 -0
  40. package/dist/models/index.js +1 -1
  41. package/dist/models/index.js.map +1 -1
  42. package/dist/models/index.mjs +1 -1
  43. package/dist/models/kg-designer.js.map +1 -1
  44. package/dist/models/kg.js.map +1 -1
  45. package/dist/transport/index.d.mts +365 -0
  46. package/dist/transport/index.d.ts +365 -0
  47. package/dist/transport/index.js +10 -0
  48. package/dist/transport/index.js.map +1 -0
  49. package/dist/transport/index.mjs +10 -0
  50. package/dist/transport/index.mjs.map +1 -0
  51. package/dist/utils/index.js +1 -1
  52. package/dist/utils/index.js.map +1 -1
  53. package/dist/utils/index.mjs +1 -1
  54. package/package.json +15 -13
  55. package/dist/chunk-2TJCYLTP.js.map +0 -1
  56. package/dist/chunk-7RW5MHP5.js +0 -497
  57. package/dist/chunk-7RW5MHP5.js.map +0 -1
  58. package/dist/chunk-HCDFJCQL.mjs.map +0 -1
  59. package/dist/chunk-JZ7UXVRW.mjs +0 -497
  60. package/dist/chunk-JZ7UXVRW.mjs.map +0 -1
  61. package/dist/chunk-NJNBEGDB.mjs +0 -2
  62. package/dist/chunk-W4XVBGE7.js +0 -2
  63. package/dist/chunk-W4XVBGE7.js.map +0 -1
  64. /package/dist/{chunk-NJNBEGDB.mjs.map → chunk-SUDQ45LY.mjs.map} +0 -0
@@ -1,7 +1,7 @@
1
1
  "use client";
2
2
 
3
3
  // api/index.ts
4
- import { browserApiRequest } from "@elqnt/api-client/browser";
4
+ import { browserApiRequest, getGatewayToken } from "@elqnt/api-client/browser";
5
5
  function buildQueryString(params) {
6
6
  const searchParams = new URLSearchParams();
7
7
  for (const [key, value] of Object.entries(params)) {
@@ -76,8 +76,8 @@ async function ingestDocumentApi(document, options) {
76
76
  ...options
77
77
  });
78
78
  }
79
- async function deleteKGDocumentApi(documentId, options) {
80
- const queryString = buildQueryString({ graphId: options.graphId });
79
+ async function deleteKGDocumentApi(documentId, options, cascade = false) {
80
+ const queryString = buildQueryString({ graphId: options.graphId, cascade: cascade ? "true" : void 0 });
81
81
  return browserApiRequest(`/api/v1/kg/documents/${documentId}${queryString}`, { method: "DELETE", ...options });
82
82
  }
83
83
  async function optimizeGraphApi(options) {
@@ -177,6 +177,99 @@ async function getCrawledPagesApi(jobId, options) {
177
177
  const queryString = buildQueryString({ graphId: options.graphId });
178
178
  return browserApiRequest(`/api/v1/kg/crawl/jobs/${jobId}/pages${queryString}`, { method: "GET", ...options });
179
179
  }
180
+ async function startQuickIngestApi(request, options, onEvent) {
181
+ const token = await getGatewayToken();
182
+ if (!token) {
183
+ throw new Error("Failed to get authentication token");
184
+ }
185
+ const headers = {
186
+ "Content-Type": "application/json",
187
+ "Authorization": `Bearer ${token}`,
188
+ "X-Org-ID": options.orgId
189
+ };
190
+ if (options.graphId) {
191
+ headers["X-Graph-ID"] = options.graphId;
192
+ }
193
+ const response = await fetch(`${options.baseUrl}/api/v1/kg/quick-ingest/start`, {
194
+ method: "POST",
195
+ headers,
196
+ body: JSON.stringify(request)
197
+ });
198
+ if (!response.ok) {
199
+ const errorText = await response.text();
200
+ throw new Error(`HTTP ${response.status}: ${errorText}`);
201
+ }
202
+ const reader = response.body?.getReader();
203
+ if (!reader) {
204
+ throw new Error("No response body");
205
+ }
206
+ const decoder = new TextDecoder();
207
+ let buffer = "";
208
+ while (true) {
209
+ const { done, value } = await reader.read();
210
+ if (done) break;
211
+ buffer += decoder.decode(value, { stream: true });
212
+ const lines = buffer.split("\n");
213
+ buffer = lines.pop() || "";
214
+ for (const line of lines) {
215
+ if (line.startsWith("data: ")) {
216
+ try {
217
+ const data = JSON.parse(line.slice(6));
218
+ onEvent(data);
219
+ } catch {
220
+ }
221
+ }
222
+ }
223
+ }
224
+ }
225
+ async function cancelQuickIngestApi(jobId, options) {
226
+ return browserApiRequest(`/api/v1/kg/quick-ingest/${jobId}/cancel`, {
227
+ method: "POST",
228
+ body: {},
229
+ headers: buildHeaders(options.graphId),
230
+ ...options
231
+ });
232
+ }
233
+ async function startFullIngestExtractionApi(request, options) {
234
+ return browserApiRequest("/api/v1/kg/full-ingest/extract", {
235
+ method: "POST",
236
+ body: request,
237
+ headers: buildHeaders(options.graphId),
238
+ ...options
239
+ });
240
+ }
241
+ async function cancelFullIngestExtractionApi(jobId, options) {
242
+ return browserApiRequest(`/api/v1/kg/full-ingest/${jobId}/cancel`, {
243
+ method: "POST",
244
+ body: {},
245
+ headers: buildHeaders(options.graphId),
246
+ ...options
247
+ });
248
+ }
249
+ async function ingestFullIngestNodesApi(request, options) {
250
+ return browserApiRequest("/api/v1/kg/full-ingest/ingest", {
251
+ method: "POST",
252
+ body: request,
253
+ headers: buildHeaders(options.graphId),
254
+ ...options
255
+ });
256
+ }
257
+ async function listFullIngestJobsApi(options) {
258
+ const queryString = buildQueryString({
259
+ graphId: options.graphId,
260
+ limit: options.limit?.toString()
261
+ });
262
+ return browserApiRequest(`/api/v1/kg/full-ingest/jobs${queryString}`, {
263
+ method: "GET",
264
+ ...options
265
+ });
266
+ }
267
+ async function getFullIngestJobApi(jobId, options) {
268
+ return browserApiRequest(`/api/v1/kg/full-ingest/jobs/${jobId}`, {
269
+ method: "GET",
270
+ ...options
271
+ });
272
+ }
180
273
 
181
274
  export {
182
275
  listGraphsApi,
@@ -207,6 +300,13 @@ export {
207
300
  startCrawlJobApi,
208
301
  getCrawlJobStatusApi,
209
302
  cancelCrawlJobApi,
210
- getCrawledPagesApi
303
+ getCrawledPagesApi,
304
+ startQuickIngestApi,
305
+ cancelQuickIngestApi,
306
+ startFullIngestExtractionApi,
307
+ cancelFullIngestExtractionApi,
308
+ ingestFullIngestNodesApi,
309
+ listFullIngestJobsApi,
310
+ getFullIngestJobApi
211
311
  };
212
- //# sourceMappingURL=chunk-HCDFJCQL.mjs.map
312
+ //# sourceMappingURL=chunk-5D7RJC7D.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../api/index.ts"],"sourcesContent":["/**\n * Knowledge Graph Browser API\n *\n * Browser-side API client for KG operations.\n * Uses @elqnt/api-client for HTTP requests with automatic token management.\n *\n * @example\n * ```ts\n * import { listGraphsApi, queryGraphApi } from \"@elqnt/kg/api\";\n *\n * const graphs = await listGraphsApi({ baseUrl, orgId });\n * const result = await queryGraphApi(query, { baseUrl, orgId, graphId });\n * ```\n *\n * @packageDocumentation\n */\n\nimport { browserApiRequest, getGatewayToken } from \"@elqnt/api-client/browser\";\nimport type { ApiResponse, ApiClientOptions } from \"@elqnt/api-client\";\nimport type { ResponseMetadata } from \"@elqnt/types\";\nimport type {\n Graph,\n ListGraphsResult,\n GetGraphResult,\n CreateGraphResult,\n CreateGraphRequest,\n UpdateGraphResult,\n DeleteGraphResult,\n KGNode,\n KGQuery,\n KGQueryResult,\n KGLabelInfo,\n KGNodeIngestRequest,\n KGSyncIngestResponse,\n DeleteDocumentResponse,\n GraphNodeDefinition,\n GraphNodeResponse,\n GraphEdgeDefinition,\n GraphEdgeResponse,\n QuickIngestStartRequest,\n QuickIngestJobResult,\n QuickIngestCancelResult,\n FullIngestExtractionRequest,\n FullIngestExtractionResult,\n FullIngestNodesRequest,\n FullIngestNodesResult,\n FullIngestCancelResult,\n FullIngestJob,\n FullIngestJobsListResponse,\n} from \"../models\";\n\n// =============================================================================\n// TYPES\n// =============================================================================\n\n/**\n * Options for KG API calls that may include a graph ID\n */\nexport interface KGApiOptions extends ApiClientOptions {\n /** Optional graph ID for graph-scoped operations */\n graphId?: string;\n}\n\n/**\n * Crawl job information\n */\nexport interface CrawlJob {\n id: string;\n baseUrl: string;\n depth: number;\n maxPages: number;\n status: string;\n pagesProcessed: number;\n createdAt: string;\n updatedAt: string;\n}\n\n/**\n * Response for listing crawl jobs\n */\nexport interface CrawlJobsListResponse {\n jobs: CrawlJob[];\n total: number;\n}\n\n/**\n * Response for crawl job status\n */\nexport interface CrawlJobStatusResponse {\n job: CrawlJob;\n success: boolean;\n}\n\n/**\n * Response for starting a crawl job\n */\nexport interface CrawlJobStartResponse {\n jobId: string;\n success: boolean;\n}\n\n/**\n * Response for listing crawled pages\n */\nexport interface CrawledPagesResponse {\n pages: Array<{\n url: string;\n title: string;\n status: string;\n processedAt: string;\n }>;\n total: number;\n}\n\n// =============================================================================\n// UTILITIES\n// =============================================================================\n\n/**\n * Build query string from parameters, filtering out undefined values\n */\nfunction buildQueryString(params: Record<string, string | undefined>): string {\n const searchParams = new URLSearchParams();\n for (const [key, value] of Object.entries(params)) {\n if (value !== undefined) {\n searchParams.set(key, value);\n }\n }\n const queryString = searchParams.toString();\n return queryString ? `?${queryString}` : \"\";\n}\n\n/**\n * Build headers including X-Graph-ID if provided\n */\nfunction buildHeaders(graphId?: string): Record<string, string> | undefined {\n return graphId ? { \"X-Graph-ID\": graphId } : undefined;\n}\n\n// =============================================================================\n// GRAPHS\n// =============================================================================\n\n/**\n * List all knowledge graphs for the organization\n *\n * @param options - API client options (baseUrl, orgId)\n * @returns List of graphs\n *\n * @example\n * ```ts\n * const response = await listGraphsApi({ baseUrl: \"http://api-gateway:80\", orgId: \"org-123\" });\n * if (response.data?.graphs) {\n * console.log(\"Graphs:\", response.data.graphs);\n * }\n * ```\n */\nexport async function listGraphsApi(options: ApiClientOptions): Promise<ApiResponse<ListGraphsResult>> {\n return browserApiRequest(\"/api/v1/kg/graphs\", { method: \"GET\", ...options });\n}\n\n/**\n * Get a specific knowledge graph by ID\n *\n * @param graphId - The graph ID\n * @param options - API client options\n * @returns The graph details\n */\nexport async function getGraphApi(graphId: string, options: ApiClientOptions): Promise<ApiResponse<GetGraphResult>> {\n return browserApiRequest(`/api/v1/kg/graphs/${graphId}`, { method: \"GET\", ...options });\n}\n\n/**\n * Create a new knowledge graph\n *\n * @param graph - Graph creation request\n * @param options - API client options\n * @returns The created graph\n */\nexport async function createGraphApi(graph: CreateGraphRequest, options: ApiClientOptions): Promise<ApiResponse<CreateGraphResult>> {\n return browserApiRequest(\"/api/v1/kg/graphs\", { method: \"POST\", body: graph, ...options });\n}\n\n/**\n * Update an existing knowledge graph\n *\n * @param graphId - The graph ID to update\n * @param updates - Partial graph updates\n * @param options - API client options\n * @returns The updated graph\n */\nexport async function updateGraphApi(\n graphId: string,\n updates: Partial<Graph>,\n options: ApiClientOptions\n): Promise<ApiResponse<UpdateGraphResult>> {\n return browserApiRequest(`/api/v1/kg/graphs/${graphId}`, { method: \"PUT\", body: updates, ...options });\n}\n\n/**\n * Delete a knowledge graph\n *\n * @param graphId - The graph ID to delete\n * @param options - API client options\n * @returns Success/failure result\n */\nexport async function deleteGraphApi(graphId: string, options: ApiClientOptions): Promise<ApiResponse<DeleteGraphResult>> {\n return browserApiRequest(`/api/v1/kg/graphs/${graphId}`, { method: \"DELETE\", ...options });\n}\n\n// =============================================================================\n// QUERY & LABELS\n// =============================================================================\n\n/**\n * Query knowledge graph nodes\n *\n * @param query - The KG query parameters\n * @param options - API options including optional graphId\n * @returns Query results with matching nodes and edges\n *\n * @example\n * ```ts\n * const result = await queryGraphApi(\n * { label: \"Person\", fields: [], limit: 10, depth: 1, sortBy: \"\", sortOrder: \"\" },\n * { baseUrl, orgId, graphId }\n * );\n * ```\n */\nexport async function queryGraphApi(query: KGQuery, options: KGApiOptions): Promise<ApiResponse<KGQueryResult>> {\n return browserApiRequest(\"/api/v1/kg/query\", {\n method: \"POST\",\n body: query,\n timeout: 30000,\n headers: buildHeaders(options.graphId),\n ...options,\n });\n}\n\n/**\n * Get all node labels in the knowledge graph\n *\n * @param options - API options including optional graphId\n * @returns List of labels with counts\n */\nexport async function getGraphLabelsApi(options: KGApiOptions): Promise<ApiResponse<{ labels: KGLabelInfo[] }>> {\n const queryString = buildQueryString({ graphId: options.graphId });\n return browserApiRequest(`/api/v1/kg/labels${queryString}`, { method: \"GET\", ...options });\n}\n\n// =============================================================================\n// NODES\n// =============================================================================\n\n/**\n * Get a specific KG node by ID\n *\n * @param nodeId - The node ID\n * @param options - API options including optional graphId\n * @returns The node details\n */\nexport async function getKGNodeApi(\n nodeId: string,\n options: KGApiOptions\n): Promise<ApiResponse<{ node: KGNode }>> {\n const queryString = buildQueryString({ graphId: options.graphId });\n return browserApiRequest(`/api/v1/kg/nodes/${nodeId}${queryString}`, { method: \"GET\", ...options });\n}\n\n/**\n * Ingest a new node into the knowledge graph\n *\n * @param node - Node ingest request\n * @param options - API options including optional graphId\n * @returns The created node ID\n */\nexport async function ingestKGNodeApi(\n node: KGNodeIngestRequest,\n options: KGApiOptions\n): Promise<ApiResponse<KGSyncIngestResponse>> {\n return browserApiRequest(\"/api/v1/kg/nodes\", {\n method: \"POST\",\n body: node,\n headers: buildHeaders(options.graphId),\n ...options,\n });\n}\n\n/**\n * Update an existing KG node\n *\n * @param nodeId - The node ID to update\n * @param updates - Partial node updates\n * @param options - API options including optional graphId\n * @returns Success/failure result\n */\nexport async function updateKGNodeApi(\n nodeId: string,\n updates: Partial<KGNode>,\n options: KGApiOptions\n): Promise<ApiResponse<{ success: boolean; metadata: ResponseMetadata }>> {\n return browserApiRequest(`/api/v1/kg/nodes/${nodeId}`, {\n method: \"PUT\",\n body: updates,\n headers: buildHeaders(options.graphId),\n ...options,\n });\n}\n\n/**\n * Get connection statistics for a node\n *\n * @param nodeId - The node ID\n * @param edgeLabel - The edge label to filter by\n * @param options - API options including optional graphId\n * @returns Connection counts by label\n */\nexport async function getNodeConnectionStatsApi(\n nodeId: string,\n edgeLabel: string,\n options: KGApiOptions\n): Promise<ApiResponse<Record<string, number>>> {\n const queryString = buildQueryString({ edgeLabel, graphId: options.graphId });\n return browserApiRequest(`/api/v1/kg/nodes/${nodeId}/connections${queryString}`, { method: \"GET\", ...options });\n}\n\n// =============================================================================\n// DOCUMENTS\n// =============================================================================\n\n/**\n * Ingest a document into the knowledge graph\n *\n * @param document - Document to ingest\n * @param options - API options including optional graphId\n * @returns Success/failure result\n */\nexport async function ingestDocumentApi(\n document: { id: string; title: string; content: string; docUrl?: string; lang?: string },\n options: KGApiOptions\n): Promise<ApiResponse<{ success: boolean; metadata: ResponseMetadata }>> {\n return browserApiRequest(\"/api/v1/kg/ingest\", {\n method: \"POST\",\n body: document,\n timeout: 120000,\n headers: buildHeaders(options.graphId),\n ...options,\n });\n}\n\n/**\n * Delete a document from the knowledge graph\n *\n * @param documentId - The document ID to delete\n * @param options - API options including optional graphId and cascade\n * @param cascade - If true, also delete all connected nodes (articles, etc.). Default: false\n * @returns Deletion result with counts\n */\nexport async function deleteKGDocumentApi(\n documentId: string,\n options: KGApiOptions,\n cascade: boolean = false\n): Promise<ApiResponse<DeleteDocumentResponse>> {\n const queryString = buildQueryString({ graphId: options.graphId, cascade: cascade ? \"true\" : undefined });\n return browserApiRequest(`/api/v1/kg/documents/${documentId}${queryString}`, { method: \"DELETE\", ...options });\n}\n\n/**\n * Optimize the knowledge graph\n *\n * @param options - API options including optional graphId\n * @returns Success/failure result\n */\nexport async function optimizeGraphApi(options: KGApiOptions): Promise<ApiResponse<{ success: boolean; metadata: ResponseMetadata }>> {\n return browserApiRequest(\"/api/v1/kg/graph/optimize\", {\n method: \"POST\",\n body: {},\n headers: buildHeaders(options.graphId),\n ...options,\n });\n}\n\n// =============================================================================\n// DESIGNER - NODES\n// =============================================================================\n\n/**\n * List all node definitions in the graph designer\n *\n * @param options - API options including optional graphId\n * @returns List of node definitions\n */\nexport async function listDesignerNodesApi(options: KGApiOptions): Promise<ApiResponse<GraphNodeResponse>> {\n const queryString = buildQueryString({ graphId: options.graphId });\n return browserApiRequest(`/api/v1/kg/designer/nodes${queryString}`, { method: \"GET\", ...options });\n}\n\n/**\n * Get a specific node definition by label\n *\n * @param label - The node label\n * @param options - API options including optional graphId\n * @returns The node definition\n */\nexport async function getDesignerNodeApi(label: string, options: KGApiOptions): Promise<ApiResponse<GraphNodeResponse>> {\n const queryString = buildQueryString({ graphId: options.graphId });\n return browserApiRequest(`/api/v1/kg/designer/nodes/${label}${queryString}`, { method: \"GET\", ...options });\n}\n\n/**\n * Create a new node definition\n *\n * @param node - Node definition to create\n * @param options - API options including optional graphId\n * @returns The created node definition\n */\nexport async function createDesignerNodeApi(\n node: Omit<GraphNodeDefinition, \"createdAt\" | \"updatedAt\">,\n options: KGApiOptions\n): Promise<ApiResponse<GraphNodeResponse>> {\n return browserApiRequest(\"/api/v1/kg/designer/nodes\", {\n method: \"POST\",\n body: { node },\n headers: buildHeaders(options.graphId),\n ...options,\n });\n}\n\n/**\n * Update an existing node definition\n *\n * @param label - The node label to update\n * @param node - Partial node definition updates\n * @param options - API options including optional graphId\n * @returns The updated node definition\n */\nexport async function updateDesignerNodeApi(\n label: string,\n node: Partial<GraphNodeDefinition>,\n options: KGApiOptions\n): Promise<ApiResponse<GraphNodeResponse>> {\n return browserApiRequest(`/api/v1/kg/designer/nodes/${label}`, {\n method: \"PUT\",\n body: { node },\n headers: buildHeaders(options.graphId),\n ...options,\n });\n}\n\n/**\n * Delete a node definition\n *\n * @param label - The node label to delete\n * @param options - API options including optional graphId\n * @returns Success/failure result\n */\nexport async function deleteDesignerNodeApi(\n label: string,\n options: KGApiOptions\n): Promise<ApiResponse<{ success: boolean; metadata: ResponseMetadata }>> {\n const queryString = buildQueryString({ graphId: options.graphId });\n return browserApiRequest(`/api/v1/kg/designer/nodes/${label}${queryString}`, { method: \"DELETE\", ...options });\n}\n\n// =============================================================================\n// DESIGNER - EDGES\n// =============================================================================\n\n/**\n * List all edge definitions in the graph designer\n *\n * @param options - API options including optional graphId\n * @returns List of edge definitions\n */\nexport async function listDesignerEdgesApi(options: KGApiOptions): Promise<ApiResponse<GraphEdgeResponse>> {\n const queryString = buildQueryString({ graphId: options.graphId });\n return browserApiRequest(`/api/v1/kg/designer/edges${queryString}`, { method: \"GET\", ...options });\n}\n\n/**\n * Get a specific edge definition by label\n *\n * @param label - The edge label\n * @param options - API options including optional graphId\n * @returns The edge definition\n */\nexport async function getDesignerEdgeApi(label: string, options: KGApiOptions): Promise<ApiResponse<GraphEdgeResponse>> {\n const queryString = buildQueryString({ graphId: options.graphId });\n return browserApiRequest(`/api/v1/kg/designer/edges/${label}${queryString}`, { method: \"GET\", ...options });\n}\n\n/**\n * Create a new edge definition\n *\n * @param edge - Edge definition to create\n * @param options - API options including optional graphId\n * @returns The created edge definition\n */\nexport async function createDesignerEdgeApi(\n edge: Omit<GraphEdgeDefinition, \"createdAt\" | \"updatedAt\">,\n options: KGApiOptions\n): Promise<ApiResponse<GraphEdgeResponse>> {\n return browserApiRequest(\"/api/v1/kg/designer/edges\", {\n method: \"POST\",\n body: { edge },\n headers: buildHeaders(options.graphId),\n ...options,\n });\n}\n\n/**\n * Update an existing edge definition\n *\n * @param label - The edge label to update\n * @param edge - Partial edge definition updates\n * @param options - API options including optional graphId\n * @returns The updated edge definition\n */\nexport async function updateDesignerEdgeApi(\n label: string,\n edge: Partial<GraphEdgeDefinition>,\n options: KGApiOptions\n): Promise<ApiResponse<GraphEdgeResponse>> {\n return browserApiRequest(`/api/v1/kg/designer/edges/${label}`, {\n method: \"PUT\",\n body: { edge },\n headers: buildHeaders(options.graphId),\n ...options,\n });\n}\n\n/**\n * Delete an edge definition\n *\n * @param label - The edge label to delete\n * @param options - API options including optional graphId\n * @returns Success/failure result\n */\nexport async function deleteDesignerEdgeApi(\n label: string,\n options: KGApiOptions\n): Promise<ApiResponse<{ success: boolean; metadata: ResponseMetadata }>> {\n const queryString = buildQueryString({ graphId: options.graphId });\n return browserApiRequest(`/api/v1/kg/designer/edges/${label}${queryString}`, { method: \"DELETE\", ...options });\n}\n\n// =============================================================================\n// CRAWL JOBS\n// =============================================================================\n\n/**\n * List crawl jobs\n *\n * @param options - API options including optional graphId, limit, offset, status\n * @returns List of crawl jobs with total count\n */\nexport async function listCrawlJobsApi(\n options: KGApiOptions & { limit?: number; offset?: number; status?: string }\n): Promise<ApiResponse<CrawlJobsListResponse>> {\n const queryString = buildQueryString({\n graphId: options.graphId,\n limit: options.limit?.toString(),\n offset: options.offset?.toString(),\n status: options.status,\n });\n return browserApiRequest(`/api/v1/kg/crawl/jobs${queryString}`, { method: \"GET\", ...options });\n}\n\n/**\n * Start a new crawl job\n *\n * @param params - Crawl job parameters\n * @param options - API options including optional graphId\n * @returns The created job ID\n */\nexport async function startCrawlJobApi(\n params: { baseUrl: string; depth: number; maxPages: number },\n options: KGApiOptions\n): Promise<ApiResponse<CrawlJobStartResponse>> {\n return browserApiRequest(\"/api/v1/kg/crawl/jobs\", {\n method: \"POST\",\n body: params,\n headers: buildHeaders(options.graphId),\n ...options,\n });\n}\n\n/**\n * Get crawl job status\n *\n * @param jobId - The job ID\n * @param options - API options including optional graphId\n * @returns The job status\n */\nexport async function getCrawlJobStatusApi(\n jobId: string,\n options: KGApiOptions\n): Promise<ApiResponse<CrawlJobStatusResponse>> {\n const queryString = buildQueryString({ graphId: options.graphId });\n return browserApiRequest(`/api/v1/kg/crawl/jobs/${jobId}${queryString}`, { method: \"GET\", ...options });\n}\n\n/**\n * Cancel a crawl job\n *\n * @param jobId - The job ID to cancel\n * @param options - API options including optional graphId\n * @returns The updated job status\n */\nexport async function cancelCrawlJobApi(\n jobId: string,\n options: KGApiOptions\n): Promise<ApiResponse<CrawlJobStatusResponse>> {\n return browserApiRequest(`/api/v1/kg/crawl/jobs/${jobId}/cancel`, {\n method: \"POST\",\n body: {},\n headers: buildHeaders(options.graphId),\n ...options,\n });\n}\n\n/**\n * Get pages crawled by a job\n *\n * @param jobId - The job ID\n * @param options - API options including optional graphId\n * @returns List of crawled pages\n */\nexport async function getCrawledPagesApi(\n jobId: string,\n options: KGApiOptions\n): Promise<ApiResponse<CrawledPagesResponse>> {\n const queryString = buildQueryString({ graphId: options.graphId });\n return browserApiRequest(`/api/v1/kg/crawl/jobs/${jobId}/pages${queryString}`, { method: \"GET\", ...options });\n}\n\n// =============================================================================\n// QUICK INGESTION\n// =============================================================================\n\n// Note: File uploads are handled directly by the frontend to S3/Azure storage.\n// The backend receives file URLs, not files.\n\n/**\n * Quick ingest SSE event types\n */\nexport interface QuickIngestEvent {\n type: \"started\" | \"item_start\" | \"item_progress\" | \"item_complete\" | \"item_error\" | \"job_complete\" | \"error\" | \"cancelled\";\n itemId?: string;\n message?: string;\n progress?: number;\n text?: string;\n error?: string;\n articles?: number;\n topics?: number;\n nodesCreated?: number;\n nodesByLabel?: Record<string, number>;\n timestamp: number;\n}\n\n/**\n * Start a quick ingestion job with SSE streaming response\n *\n * @param request - Quick ingestion start request\n * @param options - API options including optional graphId\n * @param onEvent - Callback for each SSE event\n * @returns Promise that resolves when streaming completes\n *\n * @example\n * ```ts\n * await startQuickIngestApi(\n * { items: [...], options: {...}, graphId: \"default\" },\n * { baseUrl, orgId },\n * (event) => {\n * if (event.type === \"item_complete\") {\n * console.log(`Completed: ${event.itemId}`);\n * }\n * }\n * );\n * ```\n */\nexport async function startQuickIngestApi(\n request: QuickIngestStartRequest,\n options: KGApiOptions,\n onEvent: (event: QuickIngestEvent) => void\n): Promise<void> {\n // Get auth token for API Gateway\n const token = await getGatewayToken();\n if (!token) {\n throw new Error(\"Failed to get authentication token\");\n }\n\n const headers: Record<string, string> = {\n \"Content-Type\": \"application/json\",\n \"Authorization\": `Bearer ${token}`,\n \"X-Org-ID\": options.orgId,\n };\n if (options.graphId) {\n headers[\"X-Graph-ID\"] = options.graphId;\n }\n\n const response = await fetch(`${options.baseUrl}/api/v1/kg/quick-ingest/start`, {\n method: \"POST\",\n headers,\n body: JSON.stringify(request),\n });\n\n if (!response.ok) {\n const errorText = await response.text();\n throw new Error(`HTTP ${response.status}: ${errorText}`);\n }\n\n const reader = response.body?.getReader();\n if (!reader) {\n throw new Error(\"No response body\");\n }\n\n const decoder = new TextDecoder();\n let buffer = \"\";\n\n while (true) {\n const { done, value } = await reader.read();\n if (done) break;\n\n buffer += decoder.decode(value, { stream: true });\n const lines = buffer.split(\"\\n\");\n buffer = lines.pop() || \"\";\n\n for (const line of lines) {\n if (line.startsWith(\"data: \")) {\n try {\n const data = JSON.parse(line.slice(6)) as QuickIngestEvent;\n onEvent(data);\n } catch {\n // Skip malformed events\n }\n }\n }\n }\n}\n\n/**\n * Cancel a quick ingestion job\n *\n * @param jobId - The job ID to cancel\n * @param options - API options including optional graphId\n * @returns Cancel result with status\n */\nexport async function cancelQuickIngestApi(\n jobId: string,\n options: KGApiOptions\n): Promise<ApiResponse<QuickIngestCancelResult>> {\n return browserApiRequest(`/api/v1/kg/quick-ingest/${jobId}/cancel`, {\n method: \"POST\",\n body: {},\n headers: buildHeaders(options.graphId),\n ...options,\n });\n}\n\n// =============================================================================\n// FULL INGESTION\n// =============================================================================\n\n/**\n * Start full ingestion extraction\n *\n * @param request - Extraction request with source and labels\n * @param options - API options including optional graphId\n * @returns Extraction job result\n */\nexport async function startFullIngestExtractionApi(\n request: FullIngestExtractionRequest,\n options: KGApiOptions\n): Promise<ApiResponse<FullIngestExtractionResult>> {\n return browserApiRequest(\"/api/v1/kg/full-ingest/extract\", {\n method: \"POST\",\n body: request,\n headers: buildHeaders(options.graphId),\n ...options,\n });\n}\n\n/**\n * Cancel full ingestion extraction\n *\n * @param jobId - The job ID to cancel\n * @param options - API options including optional graphId\n * @returns Cancel result with status\n */\nexport async function cancelFullIngestExtractionApi(\n jobId: string,\n options: KGApiOptions\n): Promise<ApiResponse<FullIngestCancelResult>> {\n return browserApiRequest(`/api/v1/kg/full-ingest/${jobId}/cancel`, {\n method: \"POST\",\n body: {},\n headers: buildHeaders(options.graphId),\n ...options,\n });\n}\n\n/**\n * Ingest extracted nodes into the knowledge graph\n *\n * @param request - Nodes to ingest\n * @param options - API options including optional graphId\n * @returns Ingest result with counts\n */\nexport async function ingestFullIngestNodesApi(\n request: FullIngestNodesRequest,\n options: KGApiOptions\n): Promise<ApiResponse<FullIngestNodesResult>> {\n return browserApiRequest(\"/api/v1/kg/full-ingest/ingest\", {\n method: \"POST\",\n body: request,\n headers: buildHeaders(options.graphId),\n ...options,\n });\n}\n\n/**\n * List full ingestion jobs for the organization\n *\n * @param options - API options including optional limit\n * @returns List of job summaries\n */\nexport async function listFullIngestJobsApi(\n options: KGApiOptions & { limit?: number }\n): Promise<ApiResponse<FullIngestJobsListResponse>> {\n const queryString = buildQueryString({\n graphId: options.graphId,\n limit: options.limit?.toString(),\n });\n return browserApiRequest(`/api/v1/kg/full-ingest/jobs${queryString}`, {\n method: \"GET\",\n ...options,\n });\n}\n\n/**\n * Get a specific full ingestion job by ID\n *\n * @param jobId - The job ID\n * @param options - API options\n * @returns The job details including nodes, edges, and events\n */\nexport async function getFullIngestJobApi(\n jobId: string,\n options: KGApiOptions\n): Promise<ApiResponse<FullIngestJob>> {\n return browserApiRequest(`/api/v1/kg/full-ingest/jobs/${jobId}`, {\n method: \"GET\",\n ...options,\n });\n}\n"],"mappings":"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","names":[]}
@@ -1 +1 @@
1
- {"version":3,"sources":["/home/runner/work/eloquent-packages/eloquent-packages/packages/kg/dist/chunk-67SUELDR.js","../models/kg-designer.ts"],"names":[],"mappings":"AAAA,qFAAY;AACZ;AACA;ACqDO,IAAM,cAAA,EAAgB,iBAAA;AACtB,IAAM,cAAA,EAAgB,mBAAA;AACtB,IAAM,cAAA,EAAgB,mBAAA;AACtB,IAAM,WAAA,EAAa,gBAAA;AACnB,IAAM,YAAA,EAAc,eAAA;AAIpB,IAAM,qBAAA,EAAuB,yBAAA;AAC7B,IAAM,qBAAA,EAAuB,2BAAA;AAC7B,IAAM,qBAAA,EAAuB,2BAAA;AAC7B,IAAM,kBAAA,EAAoB,wBAAA;AAC1B,IAAM,mBAAA,EAAqB,uBAAA;AAI3B,IAAM,qBAAA,EAAuB,yBAAA;AAC7B,IAAM,qBAAA,EAAuB,2BAAA;AAC7B,IAAM,qBAAA,EAAuB,2BAAA;AAC7B,IAAM,kBAAA,EAAoB,wBAAA;AAC1B,IAAM,mBAAA,EAAqB,uBAAA;AAI3B,IAAM,WAAA,EAAa,cAAA;AAInB,IAAM,iBAAA,EAAmB,2BAAA;AAIzB,IAAM,gBAAA,EAAkB,oBAAA;AACxB,IAAM,cAAA,EAAgB,kBAAA;AAItB,IAAM,gBAAA,EAAkB,mBAAA;AAKxB,IAAM,iBAAA,EAAmB,cAAA;AACzB,IAAM,kBAAA,EAAoB,eAAA;ADzEjC;AACA;AACE;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACF,69BAAC","file":"/home/runner/work/eloquent-packages/eloquent-packages/packages/kg/dist/chunk-67SUELDR.js","sourcesContent":[null,"// Code generated by tygo. DO NOT EDIT.\n\n//////////\n// source: designer-models.go\n\n/**\n * GraphNodeDefinition represents a node type in the knowledge graph\n */\nexport interface GraphNodeDefinition {\n label: string;\n description: string;\n schema: { [key: string]: any};\n createdAt: string /* RFC3339 */;\n updatedAt: string /* RFC3339 */;\n}\n/**\n * GraphEdgeDefinition represents an edge type in the knowledge graph\n */\nexport interface GraphEdgeDefinition {\n label: string;\n description: string;\n fromNode: string;\n toNode: string;\n schema: { [key: string]: any};\n createdAt: string /* RFC3339 */;\n updatedAt: string /* RFC3339 */;\n}\n/**\n * Request/Response types\n */\nexport interface GraphNodeRequest {\n node: GraphNodeDefinition;\n}\nexport interface GraphNodeResponse {\n node?: GraphNodeDefinition;\n nodes?: GraphNodeDefinition[];\n success: boolean;\n error?: string;\n}\nexport interface GraphEdgeRequest {\n edge: GraphEdgeDefinition;\n}\nexport interface GraphEdgeResponse {\n edge?: GraphEdgeDefinition;\n edges?: GraphEdgeDefinition[];\n success: boolean;\n error?: string;\n}\n\n//////////\n// source: subjects.go\n\n/**\n * KG Graph management subjects (multi-graph support)\n */\nexport const KGGraphCreate = \"kg.graph.create\";\nexport const KGGraphUpdate = \"kg.graph.update.*\";\nexport const KGGraphDelete = \"kg.graph.delete.*\";\nexport const KGGraphGet = \"kg.graph.get.*\";\nexport const KGGraphList = \"kg.graph.list\";\n/**\n * KG Designer Node subjects\n */\nexport const KGDesignerNodeCreate = \"kg.designer.node.create\";\nexport const KGDesignerNodeUpdate = \"kg.designer.node.update.*\";\nexport const KGDesignerNodeDelete = \"kg.designer.node.delete.*\";\nexport const KGDesignerNodeGet = \"kg.designer.node.get.*\";\nexport const KGDesignerNodeList = \"kg.designer.node.list\";\n/**\n * KG Designer Edge subjects\n */\nexport const KGDesignerEdgeCreate = \"kg.designer.edge.create\";\nexport const KGDesignerEdgeUpdate = \"kg.designer.edge.update.*\";\nexport const KGDesignerEdgeDelete = \"kg.designer.edge.delete.*\";\nexport const KGDesignerEdgeGet = \"kg.designer.edge.get.*\";\nexport const KGDesignerEdgeList = \"kg.designer.edge.list\";\n/**\n * KG Database subjects\n */\nexport const KGDBCreate = \"kg.db.create\";\n/**\n * KG Document subjects\n */\nexport const KGDocumentDelete = \"kg_ingest.document.delete\";\n/**\n * KG Sync Job subjects\n */\nexport const KGSyncJobUpdate = \"kg.sync.job.update\";\nexport const KGSyncJobList = \"kg.sync.job.list\";\n/**\n * KG Optimization subjects\n */\nexport const KGGraphOptimize = \"kg.graph.optimize\";\n/**\n * Synchronous ingest subjects (bypass JetStream for direct ClickHouse insertion)\n * Use kg.sync.* pattern to avoid overlap with kg.ingest.> JetStream stream\n */\nexport const KGIngestNodeSync = \"kg.sync.node\";\nexport const KGIngestBatchSync = \"kg.sync.batch\";\n"]}
1
+ {"version":3,"sources":["/home/runner/work/eloquent/eloquent/packages/@elqnt/kg/dist/chunk-67SUELDR.js","../models/kg-designer.ts"],"names":[],"mappings":"AAAA,qFAAY;AACZ;AACA;ACqDO,IAAM,cAAA,EAAgB,iBAAA;AACtB,IAAM,cAAA,EAAgB,mBAAA;AACtB,IAAM,cAAA,EAAgB,mBAAA;AACtB,IAAM,WAAA,EAAa,gBAAA;AACnB,IAAM,YAAA,EAAc,eAAA;AAIpB,IAAM,qBAAA,EAAuB,yBAAA;AAC7B,IAAM,qBAAA,EAAuB,2BAAA;AAC7B,IAAM,qBAAA,EAAuB,2BAAA;AAC7B,IAAM,kBAAA,EAAoB,wBAAA;AAC1B,IAAM,mBAAA,EAAqB,uBAAA;AAI3B,IAAM,qBAAA,EAAuB,yBAAA;AAC7B,IAAM,qBAAA,EAAuB,2BAAA;AAC7B,IAAM,qBAAA,EAAuB,2BAAA;AAC7B,IAAM,kBAAA,EAAoB,wBAAA;AAC1B,IAAM,mBAAA,EAAqB,uBAAA;AAI3B,IAAM,WAAA,EAAa,cAAA;AAInB,IAAM,iBAAA,EAAmB,2BAAA;AAIzB,IAAM,gBAAA,EAAkB,oBAAA;AACxB,IAAM,cAAA,EAAgB,kBAAA;AAItB,IAAM,gBAAA,EAAkB,mBAAA;AAKxB,IAAM,iBAAA,EAAmB,cAAA;AACzB,IAAM,kBAAA,EAAoB,eAAA;ADzEjC;AACA;AACE;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACF,69BAAC","file":"/home/runner/work/eloquent/eloquent/packages/@elqnt/kg/dist/chunk-67SUELDR.js","sourcesContent":[null,"// Code generated by tygo. DO NOT EDIT.\n\n//////////\n// source: designer-models.go\n\n/**\n * GraphNodeDefinition represents a node type in the knowledge graph\n */\nexport interface GraphNodeDefinition {\n label: string;\n description: string;\n schema: { [key: string]: any};\n createdAt: string /* RFC3339 */;\n updatedAt: string /* RFC3339 */;\n}\n/**\n * GraphEdgeDefinition represents an edge type in the knowledge graph\n */\nexport interface GraphEdgeDefinition {\n label: string;\n description: string;\n fromNode: string;\n toNode: string;\n schema: { [key: string]: any};\n createdAt: string /* RFC3339 */;\n updatedAt: string /* RFC3339 */;\n}\n/**\n * Request/Response types\n */\nexport interface GraphNodeRequest {\n node: GraphNodeDefinition;\n}\nexport interface GraphNodeResponse {\n node?: GraphNodeDefinition;\n nodes?: GraphNodeDefinition[];\n success: boolean;\n error?: string;\n}\nexport interface GraphEdgeRequest {\n edge: GraphEdgeDefinition;\n}\nexport interface GraphEdgeResponse {\n edge?: GraphEdgeDefinition;\n edges?: GraphEdgeDefinition[];\n success: boolean;\n error?: string;\n}\n\n//////////\n// source: subjects.go\n\n/**\n * KG Graph management subjects (multi-graph support)\n */\nexport const KGGraphCreate = \"kg.graph.create\";\nexport const KGGraphUpdate = \"kg.graph.update.*\";\nexport const KGGraphDelete = \"kg.graph.delete.*\";\nexport const KGGraphGet = \"kg.graph.get.*\";\nexport const KGGraphList = \"kg.graph.list\";\n/**\n * KG Designer Node subjects\n */\nexport const KGDesignerNodeCreate = \"kg.designer.node.create\";\nexport const KGDesignerNodeUpdate = \"kg.designer.node.update.*\";\nexport const KGDesignerNodeDelete = \"kg.designer.node.delete.*\";\nexport const KGDesignerNodeGet = \"kg.designer.node.get.*\";\nexport const KGDesignerNodeList = \"kg.designer.node.list\";\n/**\n * KG Designer Edge subjects\n */\nexport const KGDesignerEdgeCreate = \"kg.designer.edge.create\";\nexport const KGDesignerEdgeUpdate = \"kg.designer.edge.update.*\";\nexport const KGDesignerEdgeDelete = \"kg.designer.edge.delete.*\";\nexport const KGDesignerEdgeGet = \"kg.designer.edge.get.*\";\nexport const KGDesignerEdgeList = \"kg.designer.edge.list\";\n/**\n * KG Database subjects\n */\nexport const KGDBCreate = \"kg.db.create\";\n/**\n * KG Document subjects\n */\nexport const KGDocumentDelete = \"kg_ingest.document.delete\";\n/**\n * KG Sync Job subjects\n */\nexport const KGSyncJobUpdate = \"kg.sync.job.update\";\nexport const KGSyncJobList = \"kg.sync.job.list\";\n/**\n * KG Optimization subjects\n */\nexport const KGGraphOptimize = \"kg.graph.optimize\";\n/**\n * Synchronous ingest subjects (bypass JetStream for direct ClickHouse insertion)\n * Use kg.sync.* pattern to avoid overlap with kg.ingest.> JetStream stream\n */\nexport const KGIngestNodeSync = \"kg.sync.node\";\nexport const KGIngestBatchSync = \"kg.sync.batch\";\n"]}
@@ -1 +1 @@
1
- {"version":3,"sources":["/home/runner/work/eloquent-packages/eloquent-packages/packages/kg/dist/chunk-ADIKUMMI.js","../utils/query-builder.ts"],"names":[],"mappings":"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","file":"/home/runner/work/eloquent-packages/eloquent-packages/packages/kg/dist/chunk-ADIKUMMI.js","sourcesContent":[null,"/**\n * Knowledge Graph Query Builder\n *\n * Fluent API for building KGQuery objects programmatically.\n *\n * @example\n * ```ts\n * import { KGQueryBuilder, createNodeQuery } from \"@elqnt/kg/utils\";\n *\n * // Using the builder\n * const query = new KGQueryBuilder()\n * .label(\"Person\")\n * .field(\"age\", \"gt\", 21)\n * .field(\"status\", \"eq\", \"active\")\n * .edge(\"WORKS_AT\", \"outgoing\", \"Company\")\n * .limit(50)\n * .sortBy(\"name\", \"asc\")\n * .build();\n *\n * // Using helper functions\n * const simpleQuery = createNodeQuery(\"Product\", { category: \"electronics\" });\n * ```\n *\n * @packageDocumentation\n */\n\nimport type {\n KGQuery,\n KGFieldQuery,\n KGFieldQueryOperator,\n KGEdgeQuery,\n KGRelationshipDirection,\n} from \"../models\";\n\n// Re-export operator and direction constants for convenience\nexport {\n KGFieldQueryOperatorEqual,\n KGFieldQueryOperatorNotEqual,\n KGFieldQueryOperatorGreater,\n KGFieldQueryOperatorLess,\n KGFieldQueryOperatorGreaterOrEqual,\n KGFieldQueryOperatorLessOrEqual,\n KGFieldQueryOperatorLike,\n KGFieldQueryOperatorSimilar,\n KGFieldQueryOperatorIn,\n KGFieldQueryOperatorArrayContains,\n KGRelationshipDirectionIncoming,\n KGRelationshipDirectionOutgoing,\n} from \"../models\";\n\n/**\n * Fluent builder for KGQuery objects\n *\n * Provides a chainable API for constructing knowledge graph queries.\n * All methods return `this` to allow chaining.\n *\n * @example\n * ```ts\n * const query = new KGQueryBuilder()\n * .label(\"Person\")\n * .field(\"age\", \"gt\", 21)\n * .field(\"department\", \"eq\", \"Engineering\")\n * .edge(\"REPORTS_TO\", \"outgoing\", \"Person\")\n * .limit(100)\n * .offset(0)\n * .sortBy(\"name\", \"asc\")\n * .summaryOnly()\n * .build();\n * ```\n */\nexport class KGQueryBuilder {\n private _label: string = \"\";\n private _fields: KGFieldQuery[] = [];\n private _edges: KGEdgeQuery[] = [];\n private _limit: number = 100;\n private _depth: number = 1;\n private _offset: number = 0;\n private _sortBy: string = \"\";\n private _sortOrder: string = \"\";\n private _embeddingsSource?: string;\n private _skipEmbedding: boolean = false;\n private _summaryOnly: boolean = false;\n\n /**\n * Set the node label to query\n *\n * @param label - The node label (e.g., \"Person\", \"Product\")\n */\n label(label: string): this {\n this._label = label;\n return this;\n }\n\n /**\n * Add a field filter to the query\n *\n * @param name - Field name\n * @param operator - Comparison operator (eq, neq, gt, lt, gte, lte, like, similar, in, arrayContains)\n * @param value - Value to compare against\n *\n * @example\n * ```ts\n * builder.field(\"age\", \"gt\", 21);\n * builder.field(\"status\", \"in\", [\"active\", \"pending\"]);\n * builder.field(\"name\", \"like\", \"John%\");\n * ```\n */\n field(name: string, operator: KGFieldQueryOperator, value: unknown): this {\n this._fields.push({ name, operator, value });\n return this;\n }\n\n /**\n * Add an equality field filter (shorthand for field(name, \"eq\", value))\n *\n * @param name - Field name\n * @param value - Value to match\n */\n where(name: string, value: unknown): this {\n return this.field(name, \"eq\", value);\n }\n\n /**\n * Add multiple equality filters at once\n *\n * @param fields - Object with field names as keys and values to match\n *\n * @example\n * ```ts\n * builder.whereAll({ status: \"active\", type: \"premium\" });\n * ```\n */\n whereAll(fields: Record<string, unknown>): this {\n for (const [name, value] of Object.entries(fields)) {\n this.where(name, value);\n }\n return this;\n }\n\n /**\n * Add an edge traversal to the query\n *\n * @param label - Edge label (e.g., \"WORKS_AT\", \"REPORTS_TO\")\n * @param direction - Traversal direction (\"incoming\" or \"outgoing\")\n * @param toLabel - Target node label (optional)\n * @param options - Additional edge query options\n *\n * @example\n * ```ts\n * builder.edge(\"WORKS_AT\", \"outgoing\", \"Company\");\n * builder.edge(\"REPORTS_TO\", \"incoming\", \"Person\", {\n * toFieldKey: \"id\",\n * toFieldValue: \"manager-123\"\n * });\n * ```\n */\n edge(\n label: string,\n direction: \"incoming\" | \"outgoing\",\n toLabel: string = \"\",\n options: {\n toFieldKey?: string;\n toFieldValue?: unknown;\n fields?: Record<string, unknown>;\n } = {}\n ): this {\n this._edges.push({\n label,\n direction,\n toLabel,\n toFieldKey: options.toFieldKey || \"\",\n toFieldValue: options.toFieldValue,\n fields: options.fields,\n });\n return this;\n }\n\n /**\n * Add an outgoing edge traversal\n *\n * @param label - Edge label\n * @param toLabel - Target node label\n */\n outgoing(label: string, toLabel: string = \"\"): this {\n return this.edge(label, \"outgoing\", toLabel);\n }\n\n /**\n * Add an incoming edge traversal\n *\n * @param label - Edge label\n * @param toLabel - Source node label\n */\n incoming(label: string, toLabel: string = \"\"): this {\n return this.edge(label, \"incoming\", toLabel);\n }\n\n /**\n * Set the maximum number of results\n *\n * @param n - Maximum number of results (default: 100)\n */\n limit(n: number): this {\n this._limit = n;\n return this;\n }\n\n /**\n * Set the traversal depth\n *\n * @param n - Depth of edge traversal (default: 1)\n */\n depth(n: number): this {\n this._depth = n;\n return this;\n }\n\n /**\n * Set the result offset for pagination\n *\n * @param n - Number of results to skip\n */\n offset(n: number): this {\n this._offset = n;\n return this;\n }\n\n /**\n * Set the sort field and order\n *\n * @param field - Field name to sort by\n * @param order - Sort order (\"asc\" or \"desc\")\n */\n sortBy(field: string, order: \"asc\" | \"desc\" = \"asc\"): this {\n this._sortBy = field;\n this._sortOrder = order;\n return this;\n }\n\n /**\n * Set the embeddings source for similarity search\n *\n * @param source - Embeddings source identifier\n */\n embeddingsSource(source: string): this {\n this._embeddingsSource = source;\n return this;\n }\n\n /**\n * Skip embedding generation for this query\n */\n skipEmbedding(): this {\n this._skipEmbedding = true;\n return this;\n }\n\n /**\n * Return only summary fields (excludes heavy fields like text, embeddings)\n */\n summaryOnly(): this {\n this._summaryOnly = true;\n return this;\n }\n\n /**\n * Build the final KGQuery object\n *\n * @returns The constructed KGQuery\n * @throws Error if no label is set\n */\n build(): KGQuery {\n if (!this._label) {\n throw new Error(\"KGQueryBuilder: label is required\");\n }\n\n return {\n label: this._label,\n fields: this._fields,\n edges: this._edges.length > 0 ? this._edges : undefined,\n limit: this._limit,\n depth: this._depth,\n sortBy: this._sortBy,\n sortOrder: this._sortOrder,\n embeddingsSource: this._embeddingsSource,\n skipEmbedding: this._skipEmbedding || undefined,\n summaryOnly: this._summaryOnly || undefined,\n };\n }\n}\n\n// =============================================================================\n// HELPER FUNCTIONS\n// =============================================================================\n\n/**\n * Create a simple node query with equality filters\n *\n * @param label - Node label to query\n * @param fields - Optional field equality filters\n * @param options - Additional query options\n * @returns KGQuery object\n *\n * @example\n * ```ts\n * // Query all Person nodes\n * const allPeople = createNodeQuery(\"Person\");\n *\n * // Query with filters\n * const activeUsers = createNodeQuery(\"User\", { status: \"active\", role: \"admin\" });\n *\n * // With options\n * const recentProducts = createNodeQuery(\n * \"Product\",\n * { inStock: true },\n * { limit: 10, sortBy: \"createdAt\", sortOrder: \"desc\" }\n * );\n * ```\n */\nexport function createNodeQuery(\n label: string,\n fields?: Record<string, unknown>,\n options?: {\n limit?: number;\n depth?: number;\n sortBy?: string;\n sortOrder?: \"asc\" | \"desc\";\n summaryOnly?: boolean;\n }\n): KGQuery {\n const builder = new KGQueryBuilder().label(label);\n\n if (fields) {\n builder.whereAll(fields);\n }\n\n if (options?.limit !== undefined) builder.limit(options.limit);\n if (options?.depth !== undefined) builder.depth(options.depth);\n if (options?.sortBy) builder.sortBy(options.sortBy, options.sortOrder);\n if (options?.summaryOnly) builder.summaryOnly();\n\n return builder.build();\n}\n\n/**\n * Create an edge query object\n *\n * @param label - Edge label\n * @param direction - Traversal direction\n * @param options - Additional edge options\n * @returns KGEdgeQuery object\n *\n * @example\n * ```ts\n * const worksAtEdge = createEdgeQuery(\"WORKS_AT\", \"outgoing\", {\n * toLabel: \"Company\",\n * toFieldKey: \"name\",\n * toFieldValue: \"Acme Corp\"\n * });\n * ```\n */\nexport function createEdgeQuery(\n label: string,\n direction: \"incoming\" | \"outgoing\" = \"outgoing\",\n options?: {\n toLabel?: string;\n toFieldKey?: string;\n toFieldValue?: unknown;\n fields?: Record<string, unknown>;\n }\n): KGEdgeQuery {\n return {\n label,\n direction,\n toLabel: options?.toLabel || \"\",\n toFieldKey: options?.toFieldKey || \"\",\n toFieldValue: options?.toFieldValue,\n fields: options?.fields,\n };\n}\n\n/**\n * Create a field query object\n *\n * @param name - Field name\n * @param operator - Comparison operator\n * @param value - Value to compare against\n * @returns KGFieldQuery object\n *\n * @example\n * ```ts\n * const ageFilter = createFieldQuery(\"age\", \"gt\", 21);\n * const statusFilter = createFieldQuery(\"status\", \"in\", [\"active\", \"pending\"]);\n * ```\n */\nexport function createFieldQuery(\n name: string,\n operator: KGFieldQueryOperator,\n value: unknown\n): KGFieldQuery {\n return { name, operator, value };\n}\n\n/**\n * Create a similarity search query\n *\n * @param label - Node label to search\n * @param searchText - Text to find similar nodes for\n * @param options - Additional query options\n * @returns KGQuery object configured for similarity search\n *\n * @example\n * ```ts\n * const similarDocs = createSimilarityQuery(\n * \"Document\",\n * \"machine learning algorithms\",\n * { limit: 10, embeddingsSource: \"openai\" }\n * );\n * ```\n */\nexport function createSimilarityQuery(\n label: string,\n searchText: string,\n options?: {\n embeddingsSource?: string;\n limit?: number;\n summaryOnly?: boolean;\n }\n): KGQuery {\n const builder = new KGQueryBuilder()\n .label(label)\n .field(\"_search\", \"similar\", searchText);\n\n if (options?.embeddingsSource) builder.embeddingsSource(options.embeddingsSource);\n if (options?.limit !== undefined) builder.limit(options.limit);\n if (options?.summaryOnly) builder.summaryOnly();\n\n return builder.build();\n}\n"]}
1
+ {"version":3,"sources":["/home/runner/work/eloquent/eloquent/packages/@elqnt/kg/dist/chunk-ADIKUMMI.js","../utils/query-builder.ts"],"names":[],"mappings":"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","file":"/home/runner/work/eloquent/eloquent/packages/@elqnt/kg/dist/chunk-ADIKUMMI.js","sourcesContent":[null,"/**\n * Knowledge Graph Query Builder\n *\n * Fluent API for building KGQuery objects programmatically.\n *\n * @example\n * ```ts\n * import { KGQueryBuilder, createNodeQuery } from \"@elqnt/kg/utils\";\n *\n * // Using the builder\n * const query = new KGQueryBuilder()\n * .label(\"Person\")\n * .field(\"age\", \"gt\", 21)\n * .field(\"status\", \"eq\", \"active\")\n * .edge(\"WORKS_AT\", \"outgoing\", \"Company\")\n * .limit(50)\n * .sortBy(\"name\", \"asc\")\n * .build();\n *\n * // Using helper functions\n * const simpleQuery = createNodeQuery(\"Product\", { category: \"electronics\" });\n * ```\n *\n * @packageDocumentation\n */\n\nimport type {\n KGQuery,\n KGFieldQuery,\n KGFieldQueryOperator,\n KGEdgeQuery,\n KGRelationshipDirection,\n} from \"../models\";\n\n// Re-export operator and direction constants for convenience\nexport {\n KGFieldQueryOperatorEqual,\n KGFieldQueryOperatorNotEqual,\n KGFieldQueryOperatorGreater,\n KGFieldQueryOperatorLess,\n KGFieldQueryOperatorGreaterOrEqual,\n KGFieldQueryOperatorLessOrEqual,\n KGFieldQueryOperatorLike,\n KGFieldQueryOperatorSimilar,\n KGFieldQueryOperatorIn,\n KGFieldQueryOperatorArrayContains,\n KGRelationshipDirectionIncoming,\n KGRelationshipDirectionOutgoing,\n} from \"../models\";\n\n/**\n * Fluent builder for KGQuery objects\n *\n * Provides a chainable API for constructing knowledge graph queries.\n * All methods return `this` to allow chaining.\n *\n * @example\n * ```ts\n * const query = new KGQueryBuilder()\n * .label(\"Person\")\n * .field(\"age\", \"gt\", 21)\n * .field(\"department\", \"eq\", \"Engineering\")\n * .edge(\"REPORTS_TO\", \"outgoing\", \"Person\")\n * .limit(100)\n * .offset(0)\n * .sortBy(\"name\", \"asc\")\n * .summaryOnly()\n * .build();\n * ```\n */\nexport class KGQueryBuilder {\n private _label: string = \"\";\n private _fields: KGFieldQuery[] = [];\n private _edges: KGEdgeQuery[] = [];\n private _limit: number = 100;\n private _depth: number = 1;\n private _offset: number = 0;\n private _sortBy: string = \"\";\n private _sortOrder: string = \"\";\n private _embeddingsSource?: string;\n private _skipEmbedding: boolean = false;\n private _summaryOnly: boolean = false;\n\n /**\n * Set the node label to query\n *\n * @param label - The node label (e.g., \"Person\", \"Product\")\n */\n label(label: string): this {\n this._label = label;\n return this;\n }\n\n /**\n * Add a field filter to the query\n *\n * @param name - Field name\n * @param operator - Comparison operator (eq, neq, gt, lt, gte, lte, like, similar, in, arrayContains)\n * @param value - Value to compare against\n *\n * @example\n * ```ts\n * builder.field(\"age\", \"gt\", 21);\n * builder.field(\"status\", \"in\", [\"active\", \"pending\"]);\n * builder.field(\"name\", \"like\", \"John%\");\n * ```\n */\n field(name: string, operator: KGFieldQueryOperator, value: unknown): this {\n this._fields.push({ name, operator, value });\n return this;\n }\n\n /**\n * Add an equality field filter (shorthand for field(name, \"eq\", value))\n *\n * @param name - Field name\n * @param value - Value to match\n */\n where(name: string, value: unknown): this {\n return this.field(name, \"eq\", value);\n }\n\n /**\n * Add multiple equality filters at once\n *\n * @param fields - Object with field names as keys and values to match\n *\n * @example\n * ```ts\n * builder.whereAll({ status: \"active\", type: \"premium\" });\n * ```\n */\n whereAll(fields: Record<string, unknown>): this {\n for (const [name, value] of Object.entries(fields)) {\n this.where(name, value);\n }\n return this;\n }\n\n /**\n * Add an edge traversal to the query\n *\n * @param label - Edge label (e.g., \"WORKS_AT\", \"REPORTS_TO\")\n * @param direction - Traversal direction (\"incoming\" or \"outgoing\")\n * @param toLabel - Target node label (optional)\n * @param options - Additional edge query options\n *\n * @example\n * ```ts\n * builder.edge(\"WORKS_AT\", \"outgoing\", \"Company\");\n * builder.edge(\"REPORTS_TO\", \"incoming\", \"Person\", {\n * toFieldKey: \"id\",\n * toFieldValue: \"manager-123\"\n * });\n * ```\n */\n edge(\n label: string,\n direction: \"incoming\" | \"outgoing\",\n toLabel: string = \"\",\n options: {\n toFieldKey?: string;\n toFieldValue?: unknown;\n fields?: Record<string, unknown>;\n } = {}\n ): this {\n this._edges.push({\n label,\n direction,\n toLabel,\n toFieldKey: options.toFieldKey || \"\",\n toFieldValue: options.toFieldValue,\n fields: options.fields,\n });\n return this;\n }\n\n /**\n * Add an outgoing edge traversal\n *\n * @param label - Edge label\n * @param toLabel - Target node label\n */\n outgoing(label: string, toLabel: string = \"\"): this {\n return this.edge(label, \"outgoing\", toLabel);\n }\n\n /**\n * Add an incoming edge traversal\n *\n * @param label - Edge label\n * @param toLabel - Source node label\n */\n incoming(label: string, toLabel: string = \"\"): this {\n return this.edge(label, \"incoming\", toLabel);\n }\n\n /**\n * Set the maximum number of results\n *\n * @param n - Maximum number of results (default: 100)\n */\n limit(n: number): this {\n this._limit = n;\n return this;\n }\n\n /**\n * Set the traversal depth\n *\n * @param n - Depth of edge traversal (default: 1)\n */\n depth(n: number): this {\n this._depth = n;\n return this;\n }\n\n /**\n * Set the result offset for pagination\n *\n * @param n - Number of results to skip\n */\n offset(n: number): this {\n this._offset = n;\n return this;\n }\n\n /**\n * Set the sort field and order\n *\n * @param field - Field name to sort by\n * @param order - Sort order (\"asc\" or \"desc\")\n */\n sortBy(field: string, order: \"asc\" | \"desc\" = \"asc\"): this {\n this._sortBy = field;\n this._sortOrder = order;\n return this;\n }\n\n /**\n * Set the embeddings source for similarity search\n *\n * @param source - Embeddings source identifier\n */\n embeddingsSource(source: string): this {\n this._embeddingsSource = source;\n return this;\n }\n\n /**\n * Skip embedding generation for this query\n */\n skipEmbedding(): this {\n this._skipEmbedding = true;\n return this;\n }\n\n /**\n * Return only summary fields (excludes heavy fields like text, embeddings)\n */\n summaryOnly(): this {\n this._summaryOnly = true;\n return this;\n }\n\n /**\n * Build the final KGQuery object\n *\n * @returns The constructed KGQuery\n * @throws Error if no label is set\n */\n build(): KGQuery {\n if (!this._label) {\n throw new Error(\"KGQueryBuilder: label is required\");\n }\n\n return {\n label: this._label,\n fields: this._fields,\n edges: this._edges.length > 0 ? this._edges : undefined,\n limit: this._limit,\n depth: this._depth,\n sortBy: this._sortBy,\n sortOrder: this._sortOrder,\n embeddingsSource: this._embeddingsSource,\n skipEmbedding: this._skipEmbedding || undefined,\n summaryOnly: this._summaryOnly || undefined,\n };\n }\n}\n\n// =============================================================================\n// HELPER FUNCTIONS\n// =============================================================================\n\n/**\n * Create a simple node query with equality filters\n *\n * @param label - Node label to query\n * @param fields - Optional field equality filters\n * @param options - Additional query options\n * @returns KGQuery object\n *\n * @example\n * ```ts\n * // Query all Person nodes\n * const allPeople = createNodeQuery(\"Person\");\n *\n * // Query with filters\n * const activeUsers = createNodeQuery(\"User\", { status: \"active\", role: \"admin\" });\n *\n * // With options\n * const recentProducts = createNodeQuery(\n * \"Product\",\n * { inStock: true },\n * { limit: 10, sortBy: \"createdAt\", sortOrder: \"desc\" }\n * );\n * ```\n */\nexport function createNodeQuery(\n label: string,\n fields?: Record<string, unknown>,\n options?: {\n limit?: number;\n depth?: number;\n sortBy?: string;\n sortOrder?: \"asc\" | \"desc\";\n summaryOnly?: boolean;\n }\n): KGQuery {\n const builder = new KGQueryBuilder().label(label);\n\n if (fields) {\n builder.whereAll(fields);\n }\n\n if (options?.limit !== undefined) builder.limit(options.limit);\n if (options?.depth !== undefined) builder.depth(options.depth);\n if (options?.sortBy) builder.sortBy(options.sortBy, options.sortOrder);\n if (options?.summaryOnly) builder.summaryOnly();\n\n return builder.build();\n}\n\n/**\n * Create an edge query object\n *\n * @param label - Edge label\n * @param direction - Traversal direction\n * @param options - Additional edge options\n * @returns KGEdgeQuery object\n *\n * @example\n * ```ts\n * const worksAtEdge = createEdgeQuery(\"WORKS_AT\", \"outgoing\", {\n * toLabel: \"Company\",\n * toFieldKey: \"name\",\n * toFieldValue: \"Acme Corp\"\n * });\n * ```\n */\nexport function createEdgeQuery(\n label: string,\n direction: \"incoming\" | \"outgoing\" = \"outgoing\",\n options?: {\n toLabel?: string;\n toFieldKey?: string;\n toFieldValue?: unknown;\n fields?: Record<string, unknown>;\n }\n): KGEdgeQuery {\n return {\n label,\n direction,\n toLabel: options?.toLabel || \"\",\n toFieldKey: options?.toFieldKey || \"\",\n toFieldValue: options?.toFieldValue,\n fields: options?.fields,\n };\n}\n\n/**\n * Create a field query object\n *\n * @param name - Field name\n * @param operator - Comparison operator\n * @param value - Value to compare against\n * @returns KGFieldQuery object\n *\n * @example\n * ```ts\n * const ageFilter = createFieldQuery(\"age\", \"gt\", 21);\n * const statusFilter = createFieldQuery(\"status\", \"in\", [\"active\", \"pending\"]);\n * ```\n */\nexport function createFieldQuery(\n name: string,\n operator: KGFieldQueryOperator,\n value: unknown\n): KGFieldQuery {\n return { name, operator, value };\n}\n\n/**\n * Create a similarity search query\n *\n * @param label - Node label to search\n * @param searchText - Text to find similar nodes for\n * @param options - Additional query options\n * @returns KGQuery object configured for similarity search\n *\n * @example\n * ```ts\n * const similarDocs = createSimilarityQuery(\n * \"Document\",\n * \"machine learning algorithms\",\n * { limit: 10, embeddingsSource: \"openai\" }\n * );\n * ```\n */\nexport function createSimilarityQuery(\n label: string,\n searchText: string,\n options?: {\n embeddingsSource?: string;\n limit?: number;\n summaryOnly?: boolean;\n }\n): KGQuery {\n const builder = new KGQueryBuilder()\n .label(label)\n .field(\"_search\", \"similar\", searchText);\n\n if (options?.embeddingsSource) builder.embeddingsSource(options.embeddingsSource);\n if (options?.limit !== undefined) builder.limit(options.limit);\n if (options?.summaryOnly) builder.summaryOnly();\n\n return builder.build();\n}\n"]}
@@ -0,0 +1,2 @@
1
+ "use strict";"use client";
2
+ //# sourceMappingURL=chunk-B33SF6DB.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["/home/runner/work/eloquent/eloquent/packages/@elqnt/kg/dist/chunk-B33SF6DB.js"],"names":[],"mappings":"AAAA,yBAAY","file":"/home/runner/work/eloquent/eloquent/packages/@elqnt/kg/dist/chunk-B33SF6DB.js"}