@promptev/context-engine 0.0.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.
Files changed (68) hide show
  1. package/LICENSE.md +202 -0
  2. package/NOTICE +17 -0
  3. package/README.md +112 -0
  4. package/dist/cli.js +11998 -0
  5. package/dist/cli.js.map +1 -0
  6. package/dist/config-Bl9U789m.d.cts +174 -0
  7. package/dist/config-Bt9bUQqU.d.ts +174 -0
  8. package/dist/embeddings-B-jZ42mk.d.cts +67 -0
  9. package/dist/embeddings-DaSdAZN3.d.ts +67 -0
  10. package/dist/express.cjs +3173 -0
  11. package/dist/express.cjs.map +1 -0
  12. package/dist/express.d.cts +24 -0
  13. package/dist/express.d.ts +24 -0
  14. package/dist/express.js +3170 -0
  15. package/dist/express.js.map +1 -0
  16. package/dist/fastify.cjs +3184 -0
  17. package/dist/fastify.cjs.map +1 -0
  18. package/dist/fastify.d.cts +16 -0
  19. package/dist/fastify.d.ts +16 -0
  20. package/dist/fastify.js +3181 -0
  21. package/dist/fastify.js.map +1 -0
  22. package/dist/governance-BDkcv4qZ.d.cts +79 -0
  23. package/dist/governance-XIScatRO.d.ts +79 -0
  24. package/dist/graph/index.cjs +1428 -0
  25. package/dist/graph/index.cjs.map +1 -0
  26. package/dist/graph/index.d.cts +104 -0
  27. package/dist/graph/index.d.ts +104 -0
  28. package/dist/graph/index.js +1413 -0
  29. package/dist/graph/index.js.map +1 -0
  30. package/dist/hono.cjs +3183 -0
  31. package/dist/hono.cjs.map +1 -0
  32. package/dist/hono.d.cts +39 -0
  33. package/dist/hono.d.ts +39 -0
  34. package/dist/hono.js +3179 -0
  35. package/dist/hono.js.map +1 -0
  36. package/dist/index.cjs +11731 -0
  37. package/dist/index.cjs.map +1 -0
  38. package/dist/index.d.cts +851 -0
  39. package/dist/index.d.ts +851 -0
  40. package/dist/index.js +11676 -0
  41. package/dist/index.js.map +1 -0
  42. package/dist/mcp.cjs +181 -0
  43. package/dist/mcp.cjs.map +1 -0
  44. package/dist/mcp.d.cts +26 -0
  45. package/dist/mcp.d.ts +26 -0
  46. package/dist/mcp.js +179 -0
  47. package/dist/mcp.js.map +1 -0
  48. package/dist/migrations/sql/0001.sql +119 -0
  49. package/dist/migrations/sql/0002_graph.sql +48 -0
  50. package/dist/migrations/sql/0003_tools.sql +61 -0
  51. package/dist/migrations/sql/0004_acl_indexes.sql +4 -0
  52. package/dist/redaction-BmDSWJ7h.d.cts +98 -0
  53. package/dist/redaction-BmDSWJ7h.d.ts +98 -0
  54. package/dist/redaction-presidio.cjs +79 -0
  55. package/dist/redaction-presidio.cjs.map +1 -0
  56. package/dist/redaction-presidio.d.cts +22 -0
  57. package/dist/redaction-presidio.d.ts +22 -0
  58. package/dist/redaction-presidio.js +73 -0
  59. package/dist/redaction-presidio.js.map +1 -0
  60. package/dist/router-CrxZ2y_Z.d.ts +82 -0
  61. package/dist/router-OPgSoYAB.d.cts +82 -0
  62. package/dist/skills/context-engine/SKILL.md +160 -0
  63. package/package.json +184 -0
  64. package/src/migrations/sql/0001.sql +119 -0
  65. package/src/migrations/sql/0002_graph.sql +48 -0
  66. package/src/migrations/sql/0003_tools.sql +61 -0
  67. package/src/migrations/sql/0004_acl_indexes.sql +4 -0
  68. package/src/skills/context-engine/SKILL.md +160 -0
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../src/errors.ts","../../src/extras.ts","../../src/hooks.ts","../../src/providers/llm.ts","../../src/graph/communities.ts","../../src/graph/entities.ts","../../src/graph/schema.ts","../../src/graph/neo4j-client.ts","../../src/graph/retrieval.ts","../../src/usage.ts","../../src/graph/stage.ts","../../src/graph/index.ts"],"names":["OpenAI","MAX_HIERARCHY_LEVELS","callLlm","jsonrepair","randomUUID","CHUNKS_PER_BATCH","ENTITY_TYPES","GraphStore","createHash","runGraphStage","buildGraphRanked"],"mappings":"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","file":"index.cjs","sourcesContent":["/** Action-surface errors — user-facing / data-dependent failures (not found, ACL, bad input).\n * Config/programming errors stay as TypeError / RangeError / Error.\n */\nexport class EngineActionError extends Error {\n constructor(message: string) {\n super(message);\n this.name = \"EngineActionError\";\n }\n}\n\n/** Missing vs forbidden document: identical message so callers cannot distinguish. */\nexport class DocumentNotFoundError extends Error {\n constructor(documentId: string) {\n super(`document not found: ${documentId}`);\n this.name = \"DocumentNotFoundError\";\n }\n}\n\nexport class GraphLegUnavailable extends Error {\n constructor(message = \"graph ranked list was not supplied\") {\n super(message);\n this.name = \"GraphLegUnavailable\";\n }\n}\n\nexport class ApprovalNotPending extends Error {\n constructor(message = \"approval is not pending\") {\n super(message);\n this.name = \"ApprovalNotPending\";\n }\n}\n\nexport class ApprovalExpired extends Error {\n constructor(message = \"approval has expired\") {\n super(message);\n this.name = \"ApprovalExpired\";\n }\n}\n\nexport class CodeExecutionError extends Error {\n constructor(message: string) {\n super(message);\n this.name = \"CodeExecutionError\";\n }\n}\n\nexport class CodeExecutionTimeout extends Error {\n constructor(message = \"code execution timed out\") {\n super(message);\n this.name = \"CodeExecutionTimeout\";\n }\n}\n\nexport class ExtraMissingError extends Error {\n constructor(extra: string, pkg: string, what: string) {\n super(`${what} requires the '${pkg}' package (optional extra: ${extra}): npm install ${pkg}`);\n this.name = \"ExtraMissingError\";\n }\n}\n","import { ExtraMissingError } from \"./errors.js\";\n\nexport async function tryImport<T = unknown>(specifier: string): Promise<T | null> {\n try {\n return (await import(specifier)) as T;\n } catch {\n return null;\n }\n}\n\nexport async function requireExtra<T = unknown>(specifier: string, extra: string, what: string): Promise<T> {\n try {\n return (await import(specifier)) as T;\n } catch (_err) {\n throw new ExtraMissingError(extra, specifier, what);\n }\n}\n","import type { UsageEvent } from \"./usage.js\";\n\nconst log = {\n warn: (...args: unknown[]) => console.warn(\"[context-engine]\", ...args),\n error: (...args: unknown[]) => console.error(\"[context-engine]\", ...args),\n};\n\nexport interface Hooks {\n onUsage?: ((event: UsageEvent) => void) | null;\n onError?: ((exc: unknown, ctx: Record<string, unknown>) => void) | null;\n onToolCall?: ((event: Record<string, unknown>) => void) | null;\n}\n\nexport function emitUsage(hooks: Hooks | null | undefined, event: UsageEvent): void {\n if (!hooks?.onUsage) return;\n try {\n hooks.onUsage(event);\n } catch {\n log.warn(\"onUsage callback raised; swallowing\");\n }\n}\n\nexport function emitError(hooks: Hooks | null | undefined, exc: unknown, ctx: Record<string, unknown>): void {\n log.error(\"context_engine error:\", exc, \"| ctx=\", ctx);\n if (!hooks?.onError) return;\n try {\n hooks.onError(exc, ctx);\n } catch {\n log.warn(\"onError callback raised; swallowing\");\n }\n}\n\nexport function emitToolCall(hooks: Hooks | null | undefined, event: Record<string, unknown>): void {\n if (!hooks?.onToolCall) return;\n try {\n hooks.onToolCall(event);\n } catch {\n log.warn(\"onToolCall callback raised; swallowing\");\n }\n}\n","/**\n * Pluggable LLM provider.\n *\n * `callLlm(cfg, { system, user, jsonMode, images, client })` is the single entry\n * point. Returns `[text, { input, output }]`.\n *\n * Images are always PNG. 30s timeout, no retries. Injectable `client` / `fetch`.\n * `callLlm` owns and closes the client it builds unless one is passed in.\n */\n\nimport OpenAI from \"openai\";\nimport type { LLMConfig } from \"../config.js\";\nimport { ExtraMissingError } from \"../errors.js\";\nimport type { FetchImpl } from \"./embeddings.js\";\n\nexport const TIMEOUT_MS = 30_000;\nconst ANTHROPIC_VERSION = \"2023-06-01\";\nconst ANTHROPIC_MAX_TOKENS = 4096;\n\nconst OPENAI_FAMILY = new Set([\"openai\", \"azure_openai\", \"custom\"]);\n\nexport type TokenUsage = { input: number; output: number };\n\nexport type ImageBytes = Uint8Array;\n\nexport type ChatClient = {\n chat: {\n completions: {\n create(body: { model: string; messages: unknown[]; response_format?: { type: string } }): Promise<{\n choices: Array<{ message?: { content?: string | null } }>;\n usage?: { prompt_tokens?: number; completion_tokens?: number } | null;\n }>;\n };\n };\n close?: () => void | Promise<void>;\n timeout?: number;\n baseURL?: string;\n};\n\nexport type LlmCallOpts = {\n system: string;\n user: string;\n jsonMode?: boolean;\n images?: ImageBytes[] | null;\n};\n\nexport type LLMClientOpts = {\n client?: ChatClient | null;\n fetch?: FetchImpl | null;\n fetchImpl?: FetchImpl | null;\n};\n\ntype GeminiChatClient = {\n models: {\n generateContent(args: { model: string; contents: unknown; config?: Record<string, unknown> }): Promise<{\n text?: string;\n usageMetadata?: {\n promptTokenCount?: number;\n candidatesTokenCount?: number;\n prompt_token_count?: number;\n candidates_token_count?: number;\n };\n }>;\n };\n};\n\ntype BedrockConverseResult = {\n output?: { message?: { content?: Array<{ text?: string }> } };\n usage?: { inputTokens?: number; outputTokens?: number };\n};\n\nfunction toBase64(bytes: Uint8Array): string {\n return Buffer.from(bytes).toString(\"base64\");\n}\n\nasync function postJson(\n fetchImpl: FetchImpl,\n url: string,\n body: unknown,\n headers: Record<string, string>,\n): Promise<any> {\n const resp = await fetchImpl(url, {\n method: \"POST\",\n headers: { \"content-type\": \"application/json\", ...headers },\n body: JSON.stringify(body),\n signal: AbortSignal.timeout(TIMEOUT_MS),\n });\n if (!resp.ok) {\n const text = await resp.text().catch(() => \"\");\n throw new Error(`HTTP ${resp.status} ${resp.statusText}${text ? `: ${text}` : \"\"}`);\n }\n return resp.json();\n}\n\nexport function buildOpenAIChatClient(cfg: LLMConfig): OpenAI {\n return new OpenAI({\n apiKey: cfg.apiKey ?? undefined,\n baseURL: cfg.baseUrl ?? undefined,\n timeout: TIMEOUT_MS,\n maxRetries: 0,\n });\n}\n\nexport class LLMClient {\n cfg: LLMConfig;\n provider: LLMConfig[\"provider\"];\n model: string;\n client: ChatClient | null;\n fetchImpl: FetchImpl | null;\n private genaiClient: GeminiChatClient | null = null;\n\n constructor(cfg: LLMConfig, opts: LLMClientOpts = {}) {\n this.cfg = cfg;\n this.provider = cfg.provider;\n this.model = cfg.model;\n this.client = opts.client ?? null;\n this.fetchImpl = opts.fetch ?? opts.fetchImpl ?? null;\n }\n\n async aclose(): Promise<void> {\n const closer = this.client?.close;\n if (typeof closer === \"function\") {\n await closer.call(this.client);\n }\n }\n\n async [Symbol.asyncDispose](): Promise<void> {\n await this.aclose();\n }\n\n async call(opts: LlmCallOpts): Promise<[string, TokenUsage]> {\n const { system, user, jsonMode = false, images = null } = opts;\n if (this.provider === \"anthropic\") {\n return this.callAnthropic(system, user, jsonMode, images);\n }\n if (OPENAI_FAMILY.has(this.provider)) {\n return this.callOpenAI(system, user, jsonMode, images);\n }\n if (this.provider === \"gemini\") {\n return this.callGemini(system, user, jsonMode, images);\n }\n if (this.provider === \"bedrock\") {\n return this.callBedrock(system, user, jsonMode, images);\n }\n throw new Error(`unknown llm provider: ${JSON.stringify(this.provider)}`);\n }\n\n private async callAnthropic(\n system: string,\n user: string,\n jsonMode: boolean,\n images: ImageBytes[] | null,\n ): Promise<[string, TokenUsage]> {\n if (!this.fetchImpl) {\n throw new Error(\"anthropic llm client has no fetch implementation\");\n }\n if (jsonMode) {\n system = `${system}\\n\\nRespond with valid JSON only.`;\n }\n const content: Array<Record<string, unknown>> = [];\n for (const image of images ?? []) {\n content.push({\n type: \"image\",\n source: {\n type: \"base64\",\n media_type: \"image/png\",\n data: toBase64(image),\n },\n });\n }\n content.push({ type: \"text\", text: user });\n\n const data = await postJson(\n this.fetchImpl,\n \"https://api.anthropic.com/v1/messages\",\n {\n model: this.model,\n max_tokens: ANTHROPIC_MAX_TOKENS,\n system,\n messages: [{ role: \"user\", content }],\n },\n {\n \"x-api-key\": this.cfg.apiKey ?? \"\",\n \"anthropic-version\": ANTHROPIC_VERSION,\n \"content-type\": \"application/json\",\n },\n );\n const text = data.content[0].text as string;\n const usage = data.usage ?? {};\n return [text, { input: usage.input_tokens ?? 0, output: usage.output_tokens ?? 0 }];\n }\n\n private async callOpenAI(\n system: string,\n user: string,\n jsonMode: boolean,\n images: ImageBytes[] | null,\n ): Promise<[string, TokenUsage]> {\n if (!this.client) {\n throw new Error(\"openai-family llm client has no client\");\n }\n const content: Array<Record<string, unknown>> = [{ type: \"text\", text: user }];\n for (const image of images ?? []) {\n content.push({\n type: \"image_url\",\n image_url: { url: `data:image/png;base64,${toBase64(image)}` },\n });\n }\n const body: {\n model: string;\n messages: unknown[];\n response_format?: { type: string };\n } = {\n model: this.model,\n messages: [\n { role: \"system\", content: system },\n { role: \"user\", content },\n ],\n };\n if (jsonMode) {\n body.response_format = { type: \"json_object\" };\n }\n const resp = await this.client.chat.completions.create(body);\n const text = resp.choices[0]?.message?.content ?? \"\";\n const usage = resp.usage;\n return [text, { input: usage?.prompt_tokens ?? 0, output: usage?.completion_tokens ?? 0 }];\n }\n\n private async callGemini(\n system: string,\n user: string,\n jsonMode: boolean,\n images: ImageBytes[] | null,\n ): Promise<[string, TokenUsage]> {\n if (!this.genaiClient) {\n this.genaiClient = await loadGeminiChatClient(this.cfg.apiKey);\n }\n const parts: unknown[] = [];\n for (const img of images ?? []) {\n parts.push({ inlineData: { mimeType: \"image/png\", data: toBase64(img) } });\n }\n parts.push({ text: user });\n\n const config: Record<string, unknown> = { systemInstruction: system };\n if (jsonMode) {\n config.responseMimeType = \"application/json\";\n }\n\n const resp = await this.genaiClient.models.generateContent({\n model: this.model,\n contents: parts,\n config,\n });\n const text = resp.text ?? \"\";\n const usageMeta = resp.usageMetadata;\n const inputTokens = usageMeta?.promptTokenCount ?? usageMeta?.prompt_token_count ?? 0;\n const outputTokens = usageMeta?.candidatesTokenCount ?? usageMeta?.candidates_token_count ?? 0;\n return [text, { input: inputTokens || 0, output: outputTokens || 0 }];\n }\n\n private async callBedrock(\n system: string,\n user: string,\n jsonMode: boolean,\n images: ImageBytes[] | null,\n ): Promise<[string, TokenUsage]> {\n const { BedrockRuntimeClient, ConverseCommand } = await loadBedrockSdk();\n if (jsonMode) {\n system = `${system}\\n\\nRespond with valid JSON only.`;\n }\n const content: Array<Record<string, unknown>> = [];\n for (const image of images ?? []) {\n content.push({ image: { format: \"png\", source: { bytes: image } } });\n }\n content.push({ text: user });\n\n const runtime = new BedrockRuntimeClient({\n maxAttempts: 1,\n requestHandler: {\n requestTimeout: TIMEOUT_MS,\n connectionTimeout: TIMEOUT_MS,\n },\n });\n try {\n const result = (await runtime.send(\n new ConverseCommand({\n modelId: this.model,\n system: [{ text: system }],\n messages: [{ role: \"user\", content }],\n }),\n )) as BedrockConverseResult;\n const text = result.output?.message?.content?.[0]?.text ?? \"\";\n const usage = result.usage ?? {};\n return [text, { input: usage.inputTokens ?? 0, output: usage.outputTokens ?? 0 }];\n } finally {\n runtime.destroy?.();\n }\n }\n}\n\nasync function loadGeminiChatClient(apiKey: string | null | undefined): Promise<GeminiChatClient> {\n const specifier = \"@google/genai\";\n let mod: {\n GoogleGenAI?: new (opts: { apiKey?: string | null }) => GeminiChatClient;\n Client?: new (opts: { apiKey?: string | null }) => GeminiChatClient;\n };\n try {\n mod = (await import(specifier)) as typeof mod;\n } catch {\n throw new ExtraMissingError(\"gemini\", specifier, \"gemini llm\");\n }\n const Ctor = mod.GoogleGenAI ?? mod.Client;\n if (!Ctor) {\n throw new ExtraMissingError(\"gemini\", specifier, \"gemini llm\");\n }\n return new Ctor({ apiKey: apiKey ?? null });\n}\n\nasync function loadBedrockSdk(): Promise<{\n BedrockRuntimeClient: new (\n cfg: Record<string, unknown>,\n ) => {\n send(cmd: unknown): Promise<unknown>;\n destroy?: () => void;\n };\n ConverseCommand: new (input: Record<string, unknown>) => unknown;\n}> {\n const specifier = \"@aws-sdk/client-bedrock-runtime\";\n try {\n return (await import(specifier)) as Awaited<ReturnType<typeof loadBedrockSdk>>;\n } catch {\n throw new ExtraMissingError(\"bedrock\", specifier, \"bedrock llm\");\n }\n}\n\nexport function buildLlmClient(cfg: LLMConfig, opts?: LLMClientOpts): LLMClient {\n if (opts?.client || opts?.fetch || opts?.fetchImpl) {\n return new LLMClient(cfg, opts);\n }\n if (cfg.provider === \"anthropic\") {\n return new LLMClient(cfg, { fetch: globalThis.fetch });\n }\n if (OPENAI_FAMILY.has(cfg.provider)) {\n return new LLMClient(cfg, { client: buildOpenAIChatClient(cfg) });\n }\n if (cfg.provider === \"gemini\" || cfg.provider === \"bedrock\") {\n return new LLMClient(cfg);\n }\n throw new Error(`unknown llm provider: ${JSON.stringify(cfg.provider)}`);\n}\n\n/**\n * Call the LLM configured by `cfg`. Returns `[text, tokenUsage]`.\n *\n * With no `client`, one is built for this call and CLOSED afterwards,\n * success or failure. Pass `client` to reuse a connection across many calls;\n * the caller then owns `aclose()`.\n */\nexport async function callLlm(\n cfg: LLMConfig,\n opts: LlmCallOpts & { client?: LLMClient | null },\n): Promise<[string, TokenUsage]> {\n const { client, ...callOpts } = opts;\n if (client) {\n return client.call(callOpts);\n }\n const owned = buildLlmClient(cfg);\n try {\n return await owned.call(callOpts);\n } finally {\n await owned.aclose();\n }\n}\n","import { randomUUID } from \"node:crypto\";\nimport { jsonrepair } from \"jsonrepair\";\nimport type { Pool } from \"pg\";\nimport type { ContextEngineConfig } from \"../config.js\";\nimport { requireExtra } from \"../extras.js\";\nimport { emitError, type Hooks } from \"../hooks.js\";\nimport type { Embedder } from \"../providers/embeddings.js\";\n\nexport const MAX_HIERARCHY_LEVELS = 3;\nexport const MIN_COMMUNITY_SIZE = 3;\nexport const MAX_SUMMARY_ENTITIES = 30;\nexport const LOUVAIN_SEED = 42;\nconst SUMMARY_SYSTEM = \"You are a knowledge graph analyst. Be factual.\";\n\nfunction mulberry32(seed: number): () => number {\n let a = seed >>> 0;\n return () => {\n a |= 0;\n a = (a + 0x6d2b79f5) | 0;\n let t = Math.imul(a ^ (a >>> 15), 1 | a);\n t = (t + Math.imul(t ^ (t >>> 7), 61 | t)) ^ t;\n return ((t ^ (t >>> 14)) >>> 0) / 4294967296;\n };\n}\n\ntype GraphLike = {\n addNode: (n: string) => void;\n addEdge: (a: string, b: string, attrs?: Record<string, unknown>) => void;\n hasEdge: (a: string, b: string) => boolean;\n getEdgeAttribute: (a: string, b: string, k: string) => unknown;\n setEdgeAttribute: (a: string, b: string, k: string, v: unknown) => void;\n};\n\nexport function partitionGraph(\n G: GraphLike,\n louvain: (g: unknown, o: { resolution?: number; rng?: () => number }) => Record<string, number>,\n opts: { maxLevels?: number; minSize?: number; seed?: number } = {},\n): Array<{ level: number; members: string[] }> {\n const maxLevels = opts.maxLevels ?? MAX_HIERARCHY_LEVELS;\n const minSize = opts.minSize ?? MIN_COMMUNITY_SIZE;\n const seed = opts.seed ?? LOUVAIN_SEED;\n const communities: Array<{ level: number; members: string[] }> = [];\n const seen = new Set<string>();\n for (let level = 0; level < maxLevels; level++) {\n const resolution = 1.0 / (level + 1);\n const assignment = louvain(G, { resolution, rng: mulberry32(seed + level) });\n const buckets = new Map<number, string[]>();\n for (const [node, cid] of Object.entries(assignment)) {\n const list = buckets.get(cid) ?? [];\n list.push(node);\n buckets.set(cid, list);\n }\n const kept = [...buckets.values()].filter((m) => m.length >= minSize).map((m) => [...m].sort());\n const key = JSON.stringify([...kept].map((m) => [...m].sort()).sort());\n if (seen.has(key)) continue;\n seen.add(key);\n for (const members of kept) communities.push({ level, members });\n }\n return communities;\n}\n\nasync function loadLouvain(): Promise<(g: unknown, o: unknown) => Record<string, number>> {\n const mod = await requireExtra<{ default?: unknown }>(\n \"graphology-communities-louvain\",\n \"graph\",\n \"community detection\",\n );\n const fn = mod.default ?? mod;\n return fn as (g: unknown, o: unknown) => Record<string, number>;\n}\n\nasync function detectWithPython(pool: Pool): Promise<Array<{ level: number; entity_ids: string[] }>> {\n const entities = (await pool.query(`SELECT id FROM context_engine_entities`)).rows;\n if (entities.length < MIN_COMMUNITY_SIZE) return [];\n const entityMap = new Map<string, number>();\n const entityIds: string[] = [];\n entities.forEach((e, i) => {\n entityMap.set(String(e.id), i);\n entityIds.push(String(e.id));\n });\n const relationships = (\n await pool.query(`SELECT source_entity_id, target_entity_id FROM context_engine_entity_relationships`)\n ).rows;\n\n const graphology = await requireExtra<{ default?: new (o: { type: string }) => GraphLike }>(\n \"graphology\",\n \"graph\",\n \"community detection\",\n );\n const Graph = graphology.default;\n if (!Graph) throw new Error(\"graphology export shape is unexpected\");\n const louvain = await loadLouvain();\n\n const G = new Graph({ type: \"undirected\" });\n for (let i = 0; i < entities.length; i++) G.addNode(String(i));\n let hasEdge = false;\n for (const rel of relationships) {\n const src = entityMap.get(String(rel.source_entity_id));\n const tgt = entityMap.get(String(rel.target_entity_id));\n if (src != null && tgt != null && src !== tgt) {\n hasEdge = true;\n const a = String(src);\n const b = String(tgt);\n if (G.hasEdge(a, b)) {\n const w = Number(G.getEdgeAttribute(a, b, \"weight\") ?? 1);\n G.setEdgeAttribute(a, b, \"weight\", w + 1);\n } else {\n G.addEdge(a, b, { weight: 1 });\n }\n }\n }\n if (!hasEdge) return [];\n const partitions = partitionGraph(G as never, louvain);\n return partitions.map((p) => ({\n level: p.level,\n entity_ids: p.members.map((idx) => entityIds[Number(idx)]!),\n }));\n}\n\nasync function summarizeCommunities(\n pending: Array<Record<string, unknown>>,\n config: ContextEngineConfig,\n): Promise<Array<string | null>> {\n if (!pending.length || !config.graph.extractionLlm) return pending.map(() => null);\n const blocks = pending.map((pc, idx) => {\n const entityList = ((pc.entities as Array<Record<string, unknown>>) ?? []).slice(0, MAX_SUMMARY_ENTITIES);\n const entityLines = entityList.map((e) => ` - ${e.name} (${e.type}, mentioned ${e.frequency}x)`);\n const idToName = Object.fromEntries(entityList.map((e) => [String(e.id), e.name]));\n const relLines = ((pc.relationships as Array<Record<string, unknown>>) ?? []).map(\n (r) =>\n ` - ${idToName[String(r.source_entity_id)] ?? \"?\"} -> ${r.label} -> ${idToName[String(r.target_entity_id)] ?? \"?\"}`,\n );\n return (\n `COMMUNITY ${idx}:\\nEntities (${entityList.length}):\\n` +\n entityLines.join(\"\\n\") +\n `\\nRelationships (${relLines.length}):\\n` +\n (relLines.length ? relLines.join(\"\\n\") : \" None\")\n );\n });\n const prompt =\n \"Summarize each community below in 2-4 sentences.\\n\\n\" +\n blocks.join(\"\\n\\n\") +\n '\\n\\nReturn a JSON array with one summary string per community, in order: [\"summary 0\", \"summary 1\", ...]. Return ONLY the JSON array.';\n try {\n const { callLlm } = await import(\"../providers/llm.js\");\n const out = await callLlm(config.graph.extractionLlm, {\n system: SUMMARY_SYSTEM,\n user: prompt,\n jsonMode: true,\n });\n const raw = Array.isArray(out) ? out[0] : ((out as { text?: string }).text ?? String(out));\n let summaries: unknown[] = [];\n try {\n summaries = JSON.parse(jsonrepair(String(raw)));\n } catch {\n summaries = [];\n }\n if (!Array.isArray(summaries)) summaries = [];\n while (summaries.length < pending.length) summaries.push(null);\n return summaries.slice(0, pending.length).map((s) => (typeof s === \"string\" && s.trim() ? s : null));\n } catch (exc) {\n console.warn(\"community summarization failed:\", exc);\n return pending.map(() => null);\n }\n}\n\nexport async function detectCommunities(opts: {\n config: ContextEngineConfig;\n pool: Pool;\n embedder: Embedder;\n hooks?: Hooks | null;\n}): Promise<Record<string, unknown>> {\n const stats = { communities_detected: 0, communities_summarized: 0, primary_communities: 0 };\n const communities = await detectWithPython(opts.pool);\n stats.communities_detected = communities.length;\n const pending: Array<Record<string, unknown>> = [];\n for (const comm of communities) {\n const entityIds = comm.entity_ids;\n if (entityIds.length < MIN_COMMUNITY_SIZE) continue;\n const entities = (\n await opts.pool.query(`SELECT * FROM context_engine_entities WHERE id = ANY($1::uuid[])`, [entityIds])\n ).rows;\n if (entities.length < MIN_COMMUNITY_SIZE) continue;\n const rels = (\n await opts.pool.query(\n `SELECT * FROM context_engine_entity_relationships\n WHERE source_entity_id = ANY($1::uuid[]) AND target_entity_id = ANY($1::uuid[])\n LIMIT 50`,\n [entityIds],\n )\n ).rows;\n pending.push({\n entities,\n entity_ids: entityIds,\n entity_count: entityIds.length,\n rel_count: rels.length,\n relationships: rels,\n level: comm.level ?? 0,\n });\n }\n if (!pending.length) return stats;\n const summaries = await summarizeCommunities(pending, opts.config);\n const embeddings: Array<number[] | null> = summaries.map(() => null);\n const toEmbed = summaries\n .map((s, i) => [i, s] as const)\n .filter((x): x is readonly [number, string] => Boolean(x[1]));\n if (toEmbed.length) {\n try {\n const result = await opts.embedder.embed(\n toEmbed.map(([, s]) => s),\n { kind: \"document\" },\n );\n const vectors = Array.isArray(result)\n ? (result[0] as number[][])\n : ((result as { vectors?: number[][] }).vectors ?? []);\n toEmbed.forEach(([i], idx) => {\n embeddings[i] = vectors[idx] ? [...vectors[idx]!] : null;\n });\n } catch (exc) {\n if (opts.hooks) emitError(opts.hooks, exc, { stage: \"community_embedding\" });\n else console.warn(\"community embedding failed:\", exc);\n }\n }\n\n await opts.pool.query(`DELETE FROM context_engine_communities`);\n let primary = 0;\n for (let i = 0; i < pending.length; i++) {\n const pc = pending[i]!;\n const embedding = embeddings[i];\n await opts.pool.query(\n `INSERT INTO context_engine_communities\n (id, level, entity_ids, entity_count, relationship_count, summary, embedding)\n VALUES ($1, $2, $3::jsonb, $4, $5, $6, $7::vector)`,\n [\n randomUUID(),\n pc.level,\n JSON.stringify((pc.entity_ids as string[]).map(String)),\n pc.entity_count,\n pc.rel_count,\n summaries[i],\n embedding ? `[${embedding.join(\",\")}]` : null,\n ],\n );\n if (pc.level === 0) primary += 1;\n }\n stats.communities_summarized = pending.length;\n stats.primary_communities = primary;\n return stats;\n}\n","import { randomUUID } from \"node:crypto\";\nimport { jsonrepair } from \"jsonrepair\";\nimport type { Pool } from \"pg\";\nimport type { ContextEngineConfig } from \"../config.js\";\nimport type { GraphStore } from \"./neo4j-client.js\";\n\nexport const ENTITY_TYPES = [\n \"PERSON\",\n \"ORG\",\n \"PRODUCT\",\n \"LOCATION\",\n \"REFERENCE\",\n \"TEMPORAL\",\n \"CONCEPT\",\n] as const;\nexport type EntityType = (typeof ENTITY_TYPES)[number];\n\nexport const RELATIONSHIP_CATEGORIES = new Set([\n \"HIERARCHICAL\",\n \"MEMBERSHIP\",\n \"CREATION\",\n \"TEMPORAL\",\n \"SPATIAL\",\n \"REFERENCE\",\n \"FUNCTIONAL\",\n \"QUANTITATIVE\",\n]);\n\nexport const CHUNKS_PER_BATCH = 11;\n\nconst EXTRACTION_SYSTEM = \"You are a STRICT JSON entity and relationship extraction engine.\";\n\nexport function normalizeEntityName(name: string): string {\n return (name || \"\").toLowerCase().trim().replace(/ {2}/g, \" \");\n}\n\nfunction sharedSignificantTokens(a: string, b: string, minLen = 4): boolean {\n const tokensA = new Set(a.split(/\\s+/).filter((t) => t.length >= minLen));\n const tokensB = b.split(/\\s+/).filter((t) => t.length >= minLen);\n return tokensB.some((t) => tokensA.has(t));\n}\n\nfunction buildPrompt(fullText: string): string {\n return `Extract ALL entities and relationships from the following document text.\n\nDOCUMENT TEXT:\n${fullText}\n\nENTITY TYPES: PERSON, ORG, PRODUCT, LOCATION, REFERENCE, TEMPORAL, CONCEPT\n\nRELATIONSHIP CATEGORIES: HIERARCHICAL, MEMBERSHIP, CREATION, TEMPORAL, SPATIAL, REFERENCE, FUNCTIONAL, QUANTITATIVE\n\nOUTPUT FORMAT (STRICT JSON):\n{\n \"entities\": [\n {\"name\": \"exact text\", \"type\": \"PERSON|ORG|PRODUCT|LOCATION|REFERENCE|TEMPORAL|CONCEPT\"}\n ],\n \"relationships\": [\n {\"source\": \"entity name\", \"target\": \"entity name\", \"category\": \"CATEGORY\", \"label\": \"verb\", \"evidence\": \"brief quote\"}\n ]\n}\n\nRULES:\n- Extract EVERY meaningful entity (people, organizations, products, locations, codes, dates, concepts)\n- Choose the MOST SPECIFIC type; only use CONCEPT when no other type fits\n- Be exhaustive but do NOT invent entities not present in the text\n- Deduplicate: each entity appears once\n- Relationships: source/target MUST be entities you extracted; category MUST be one of the 8\n- Return ONLY the JSON object\n`;\n}\n\nfunction safeJsonParse(text: string, expected: \"object\" | \"array\"): unknown {\n const stripped = text.trim();\n try {\n const result = JSON.parse(stripped);\n if (expected === \"object\" && result && typeof result === \"object\" && !Array.isArray(result))\n return result;\n if (expected === \"array\" && Array.isArray(result)) return result;\n } catch {\n /* repair */\n }\n const repaired = JSON.parse(jsonrepair(stripped));\n return repaired;\n}\n\ntype Querier = { query: Pool[\"query\"] };\n\nexport async function resolveEntity(\n db: Querier,\n _name: string,\n normalizedName: string,\n entityType: string,\n): Promise<Record<string, unknown> | null> {\n const exact = await db.query(`SELECT * FROM context_engine_entities WHERE normalized_name = $1 LIMIT 1`, [\n normalizedName,\n ]);\n if (exact.rows[0]) return exact.rows[0];\n\n const trigram = await db.query(\n `SELECT id FROM context_engine_entities\n WHERE similarity(normalized_name, $1) > 0.75\n ORDER BY similarity(normalized_name, $1) DESC LIMIT 1`,\n [normalizedName],\n );\n if (trigram.rows[0]) {\n const row = await db.query(`SELECT * FROM context_engine_entities WHERE id = $1`, [trigram.rows[0].id]);\n return row.rows[0] ?? null;\n }\n\n const typed = await db.query(\n `SELECT id, normalized_name FROM context_engine_entities\n WHERE type = $2 AND similarity(normalized_name, $1) > 0.45\n ORDER BY similarity(normalized_name, $1) DESC LIMIT 5`,\n [normalizedName, entityType],\n );\n for (const row of typed.rows) {\n if (sharedSignificantTokens(normalizedName, String(row.normalized_name))) {\n const full = await db.query(`SELECT * FROM context_engine_entities WHERE id = $1`, [row.id]);\n return full.rows[0] ?? null;\n }\n }\n return null;\n}\n\nasync function extractFromText(\n fullText: string,\n config: ContextEngineConfig,\n): Promise<{\n entities: Array<Record<string, unknown>>;\n relationships: Array<Record<string, unknown>>;\n tokens: Record<string, number>;\n}> {\n try {\n const llm = config.graph.extractionLlm;\n if (!llm) return { entities: [], relationships: [], tokens: {} };\n const { callLlm } = await import(\"../providers/llm.js\");\n const out = await callLlm(llm, {\n system: EXTRACTION_SYSTEM,\n user: buildPrompt(fullText),\n jsonMode: true,\n });\n const raw = Array.isArray(out) ? out[0] : ((out as { text?: string }).text ?? String(out));\n const tokens = (Array.isArray(out) ? out[1] : (out as { tokens?: Record<string, number> }).tokens) ?? {};\n let result: Record<string, unknown> = {};\n try {\n result = (safeJsonParse(String(raw), \"object\") as Record<string, unknown>) ?? {};\n } catch {\n result = {};\n }\n const entities = ((result.entities as unknown[]) ?? []).filter((e): e is Record<string, unknown> =>\n Boolean(e && typeof e === \"object\" && (e as { name?: unknown }).name && (e as { type?: unknown }).type),\n );\n const relationships = ((result.relationships as unknown[]) ?? []).filter(\n (r): r is Record<string, unknown> =>\n Boolean(\n r &&\n typeof r === \"object\" &&\n (r as { source?: unknown }).source &&\n (r as { target?: unknown }).target,\n ),\n );\n return { entities, relationships, tokens: tokens as Record<string, number> };\n } catch (exc) {\n console.error(\"entity extraction LLM call failed:\", exc);\n return { entities: [], relationships: [], tokens: {} };\n }\n}\n\nasync function loadDocumentChunks(pool: Pool, documentId: string): Promise<Array<Record<string, unknown>>> {\n const result = await pool.query(\n `SELECT id, text, idx, source_id, meta_data FROM context_engine_chunks WHERE document_id = $1 ORDER BY idx`,\n [documentId],\n );\n return result.rows.map((c) => ({\n id: c.id,\n text: c.text || \"\",\n text_lower: String(c.text || \"\").toLowerCase(),\n idx: c.idx || 0,\n source_id: c.source_id,\n token_count:\n (c.meta_data as { token_count?: number } | null)?.token_count ??\n Math.floor(String(c.text || \"\").length / 4),\n }));\n}\n\nasync function persistExtraction(\n pool: Pool,\n chunkSnaps: Array<Record<string, unknown>>,\n extracted: { entities: Array<Record<string, unknown>>; relationships: Array<Record<string, unknown>> },\n): Promise<{ entities_created: number; entities_found: number; relationships_created: number }> {\n const stats = { entities_created: 0, entities_found: 0, relationships_created: 0 };\n const byNorm = new Map<string, Record<string, unknown>>();\n const client = await pool.connect();\n try {\n await client.query(\"BEGIN\");\n for (const entityData of extracted.entities) {\n const normalized = normalizeEntityName(String(entityData.name));\n if (!normalized) continue;\n const entityType = String(entityData.type);\n let entity = await resolveEntity(client, String(entityData.name), normalized, entityType);\n if (entity) {\n await client.query(\n `UPDATE context_engine_entities SET frequency = COALESCE(frequency, 1) + 1,\n name = CASE WHEN length($2) > length(name) THEN $2 ELSE name END, updated_at = now()\n WHERE id = $1`,\n [entity.id, entityData.name],\n );\n entity = (await client.query(`SELECT * FROM context_engine_entities WHERE id = $1`, [entity.id]))\n .rows[0];\n } else {\n const id = randomUUID();\n await client.query(\n `INSERT INTO context_engine_entities (id, name, normalized_name, type, frequency)\n VALUES ($1, $2, $3, $4, 1)`,\n [id, entityData.name, normalized, entityType],\n );\n entity = (await client.query(`SELECT * FROM context_engine_entities WHERE id = $1`, [id])).rows[0];\n stats.entities_created += 1;\n }\n byNorm.set(normalized, entity!);\n byNorm.set(String(entity!.normalized_name), entity!);\n const nameLower = String(entityData.name).toLowerCase();\n for (const snap of chunkSnaps) {\n if (nameLower && String(snap.text_lower).includes(nameLower)) {\n const exists = await client.query(\n `SELECT 1 FROM context_engine_chunk_entities WHERE chunk_id = $1 AND entity_id = $2`,\n [snap.id, entity!.id],\n );\n if (!exists.rows.length) {\n await client.query(\n `INSERT INTO context_engine_chunk_entities (chunk_id, entity_id) VALUES ($1, $2)`,\n [snap.id, entity!.id],\n );\n stats.entities_found += 1;\n }\n }\n }\n }\n for (const rel of extracted.relationships) {\n const sourceNorm = normalizeEntityName(String(rel.source ?? \"\"));\n const targetNorm = normalizeEntityName(String(rel.target ?? \"\"));\n const category = String(rel.category ?? \"\").toUpperCase();\n const label = String(rel.label ?? \"\");\n const evidence = String(rel.evidence ?? \"\");\n if (!RELATIONSHIP_CATEGORIES.has(category)) continue;\n let src = byNorm.get(sourceNorm);\n let tgt = byNorm.get(targetNorm);\n if (!src) {\n src = (\n await client.query(`SELECT * FROM context_engine_entities WHERE normalized_name = $1`, [sourceNorm])\n ).rows[0];\n }\n if (!tgt) {\n tgt = (\n await client.query(`SELECT * FROM context_engine_entities WHERE normalized_name = $1`, [targetNorm])\n ).rows[0];\n }\n if (!src || !tgt) continue;\n const exists = await client.query(\n `SELECT 1 FROM context_engine_entity_relationships\n WHERE source_entity_id = $1 AND target_entity_id = $2 AND category = $3 AND label = $4`,\n [src.id, tgt.id, category, label],\n );\n if (!exists.rows.length) {\n await client.query(\n `INSERT INTO context_engine_entity_relationships\n (id, source_entity_id, target_entity_id, category, label, evidence)\n VALUES ($1, $2, $3, $4, $5, $6)`,\n [randomUUID(), src.id, tgt.id, category, label, evidence.slice(0, 200)],\n );\n stats.relationships_created += 1;\n }\n }\n await client.query(\"COMMIT\");\n } catch (e) {\n await client.query(\"ROLLBACK\");\n throw e;\n } finally {\n client.release();\n }\n return stats;\n}\n\nasync function syncToNeo4j(\n pool: Pool,\n documentId: string,\n chunkSnaps: Array<Record<string, unknown>>,\n graphStore: GraphStore,\n): Promise<void> {\n const chunkRows = chunkSnaps.map((s) => ({\n id: String(s.id),\n document_id: String(documentId),\n source_id: s.source_id,\n text_preview: String(s.text).slice(0, 200),\n position: s.idx,\n token_count: s.token_count,\n }));\n try {\n await graphStore.connect();\n const entities = (await pool.query(`SELECT * FROM context_engine_entities`)).rows;\n const entityById = new Map(entities.map((e) => [String(e.id), e]));\n const entityRows = entities.map((e) => ({\n name: e.name,\n normalized_name: e.normalized_name,\n entity_type: e.type,\n }));\n const ids = chunkSnaps.map((s) => s.id);\n const links = ids.length\n ? (\n await pool.query(`SELECT * FROM context_engine_chunk_entities WHERE chunk_id = ANY($1::uuid[])`, [\n ids,\n ])\n ).rows\n : [];\n const mentionRows = links\n .filter((l) => entityById.has(String(l.entity_id)))\n .map((l) => ({\n chunk_id: String(l.chunk_id),\n entity_name: entityById.get(String(l.entity_id))!.normalized_name,\n }));\n const rels = (await pool.query(`SELECT * FROM context_engine_entity_relationships`)).rows;\n const relRows = [];\n for (const r of rels) {\n const src = entityById.get(String(r.source_entity_id));\n const tgt = entityById.get(String(r.target_entity_id));\n if (src && tgt) {\n relRows.push({\n source_name: src.normalized_name,\n target_name: tgt.normalized_name,\n category: r.category,\n label: r.label,\n evidence: r.evidence,\n chunk_id: r.chunk_id ? String(r.chunk_id) : null,\n });\n }\n }\n await graphStore.upsertChunksBatch(chunkRows);\n await graphStore.linkSequentialChunks(String(documentId));\n await graphStore.upsertEntitiesBatch(entityRows);\n await graphStore.linkChunksToEntitiesBatch(mentionRows);\n await graphStore.upsertEntityRelationshipsBatch(relRows);\n } catch (exc) {\n console.warn(\"Neo4j sync failed (continuing on PG mirror):\", exc);\n }\n}\n\nexport async function extractEntitiesForDocument(\n documentId: string,\n opts: {\n config: ContextEngineConfig;\n pool: Pool;\n graphStore?: GraphStore | null;\n hooks?: unknown;\n },\n): Promise<Record<string, unknown>> {\n const chunkSnaps = await loadDocumentChunks(opts.pool, documentId);\n const stats: Record<string, unknown> = {\n chunk_count: chunkSnaps.length,\n entities_created: 0,\n entities_found: 0,\n relationships_created: 0,\n provider_tokens: {},\n };\n if (!chunkSnaps.length) return stats;\n\n const batches = [];\n for (let i = 0; i < chunkSnaps.length; i += CHUNKS_PER_BATCH) {\n batches.push(chunkSnaps.slice(i, i + CHUNKS_PER_BATCH));\n }\n let llmInput = 0;\n let llmOutput = 0;\n for (const batch of batches) {\n const fullText = batch.map((s) => String(s.text)).join(\"\\n\\n\");\n const extracted = await extractFromText(fullText, opts.config);\n llmInput += Number(extracted.tokens.input ?? 0);\n llmOutput += Number(extracted.tokens.output ?? 0);\n const persisted = await persistExtraction(opts.pool, batch, extracted);\n stats.entities_created = Number(stats.entities_created) + persisted.entities_created;\n stats.entities_found = Number(stats.entities_found) + persisted.entities_found;\n stats.relationships_created = Number(stats.relationships_created) + persisted.relationships_created;\n }\n const tokens = stats.provider_tokens as Record<string, number>;\n if (llmInput) tokens.graph_llm_input = llmInput;\n if (llmOutput) tokens.graph_llm_output = llmOutput;\n if (opts.graphStore) await syncToNeo4j(opts.pool, documentId, chunkSnaps, opts.graphStore);\n return stats;\n}\n","const CONSTRAINTS = [\n \"CREATE CONSTRAINT ce_chunk_unique IF NOT EXISTS FOR (c:Chunk) REQUIRE c.id IS UNIQUE\",\n \"CREATE CONSTRAINT ce_entity_unique IF NOT EXISTS FOR (e:Entity) REQUIRE e.normalized_name IS UNIQUE\",\n];\n\nconst INDEXES = [\n \"CREATE INDEX ce_entity_type_idx IF NOT EXISTS FOR (e:Entity) ON (e.type)\",\n \"CREATE INDEX ce_chunk_source_idx IF NOT EXISTS FOR (c:Chunk) ON (c.source_id)\",\n \"CREATE INDEX ce_chunk_docid_idx IF NOT EXISTS FOR (c:Chunk) ON (c.document_id)\",\n];\n\nexport async function ensureSchema(\n driver: {\n session: (opts: { database: string }) => {\n executeWrite?: unknown;\n run?: unknown;\n close: () => Promise<void>;\n };\n },\n database: string,\n): Promise<void> {\n const session = (\n driver as {\n session: (o: { database: string }) => {\n run: (q: string) => Promise<unknown>;\n close: () => Promise<void>;\n };\n }\n ).session({\n database,\n });\n try {\n for (const stmt of [...CONSTRAINTS, ...INDEXES]) {\n try {\n await session.run(stmt);\n } catch (exc) {\n console.error(\"Neo4j schema statement FAILED:\", stmt.split(\" \")[2], exc);\n }\n }\n } finally {\n await session.close();\n }\n}\n","import { createHash } from \"node:crypto\";\nimport type { GraphConfig } from \"../config.js\";\nimport { requireExtra } from \"../extras.js\";\nimport { emitError, type Hooks } from \"../hooks.js\";\nimport { ensureSchema } from \"./schema.js\";\n\nconst SYNC_BATCH_ROWS = 1000;\nconst MAX_EXPANSION = 500;\n\ntype Neo4jDriver = {\n session: (opts: { database: string }) => Neo4jSession;\n close: () => Promise<void>;\n};\ntype Neo4jSession = {\n run: (\n query: string,\n params?: Record<string, unknown>,\n ) => Promise<{ records: Array<{ get: (k: string) => unknown }>; values?: () => Promise<unknown[][]> }>;\n close: () => Promise<void>;\n};\n\nexport class GraphStore {\n cfg: GraphConfig;\n hooks: Hooks | null | undefined;\n database: string;\n driver: Neo4jDriver | null = null;\n private schemaReady = false;\n private cache = new Map<string, { expiresAt: number; value: unknown }>();\n private generation = 0;\n\n constructor(cfg: GraphConfig, opts: { hooks?: Hooks | null } = {}) {\n this.cfg = cfg;\n this.hooks = opts.hooks;\n this.database = cfg.neo4jDatabase;\n }\n\n async connect(): Promise<void> {\n if (this.driver) return;\n const neo4j = await requireExtra<{\n default?: {\n driver: (uri: string, auth: unknown) => Neo4jDriver;\n auth: { basic: (u: string, p: string) => unknown };\n };\n driver?: (uri: string, auth: unknown) => Neo4jDriver;\n auth?: { basic: (u: string, p: string) => unknown };\n }>(\"neo4j-driver\", \"graph\", \"graph features\");\n const ns = neo4j.default ?? neo4j;\n const driverFn = ns.driver;\n const auth = ns.auth;\n if (!driverFn || !auth) throw new Error(\"neo4j-driver export shape is unexpected\");\n const driver = driverFn(this.cfg.neo4jUri!, auth.basic(this.cfg.neo4jUser, this.cfg.neo4jPassword!));\n this.driver = driver;\n if (!this.schemaReady) {\n await ensureSchema(driver, this.database);\n this.schemaReady = true;\n }\n }\n\n async close(): Promise<void> {\n if (this.driver) {\n await this.driver.close();\n this.driver = null;\n this.schemaReady = false;\n }\n }\n\n async ping(timeout = 2000): Promise<boolean> {\n try {\n await this.connect();\n await Promise.race([\n this.pingInternal(),\n new Promise((_, reject) => setTimeout(() => reject(new Error(\"timeout\")), timeout)),\n ]);\n return true;\n } catch (exc) {\n this.report(exc, { service: \"neo4j\", operation: \"ping\" });\n return false;\n }\n }\n\n private async pingInternal(): Promise<void> {\n const session = this.driver!.session({ database: this.database });\n try {\n await session.run(\"RETURN 1 AS ping\");\n } finally {\n await session.close();\n }\n }\n\n private report(exc: unknown, ctx: Record<string, unknown>): void {\n if (this.hooks) emitError(this.hooks, exc, ctx);\n else console.error(\"neo4j error:\", exc, \"| ctx=\", ctx);\n }\n\n private cacheGet(key: string): unknown {\n const entry = this.cache.get(key);\n if (!entry) return null;\n if (entry.expiresAt > Date.now() / 1000) return entry.value;\n this.cache.delete(key);\n return null;\n }\n\n private cacheSet(key: string, value: unknown, ttl = 86400): void {\n this.cache.set(key, { expiresAt: Date.now() / 1000 + ttl, value });\n }\n\n async upsertChunksBatch(rows: Array<Record<string, unknown>>): Promise<number> {\n const query = `\n UNWIND $rows AS row\n MERGE (c:Chunk {id: row.id})\n SET c.document_id = row.document_id,\n c.source_id = row.source_id,\n c.text_preview = row.text_preview,\n c.position = row.position,\n c.token_count = row.token_count,\n c.updated_at = datetime()\n `;\n return this.runBatched(query, rows);\n }\n\n async upsertEntitiesBatch(rows: Array<Record<string, unknown>>): Promise<number> {\n const query = `\n UNWIND $rows AS row\n MERGE (e:Entity {normalized_name: row.normalized_name})\n SET e.name = row.name,\n e.type = row.entity_type,\n e.created_at = coalesce(e.created_at, datetime()),\n e.updated_at = datetime()\n `;\n return this.runBatched(query, rows);\n }\n\n async linkChunksToEntitiesBatch(rows: Array<Record<string, unknown>>): Promise<number> {\n const query = `\n UNWIND $rows AS row\n MATCH (c:Chunk {id: row.chunk_id})\n MATCH (e:Entity {normalized_name: row.entity_name})\n MERGE (c)-[:MENTIONS]->(e)\n `;\n return this.runBatched(query, rows);\n }\n\n async upsertEntityRelationshipsBatch(rows: Array<Record<string, unknown>>): Promise<number> {\n const query = `\n UNWIND $rows AS row\n MATCH (src:Entity {normalized_name: row.source_name})\n MATCH (tgt:Entity {normalized_name: row.target_name})\n MERGE (src)-[r:RELATES_TO {category: row.category, label: row.label}]->(tgt)\n SET r.evidence = row.evidence,\n r.chunk_id = row.chunk_id,\n r.updated_at = datetime()\n `;\n return this.runBatched(query, rows);\n }\n\n async linkSequentialChunks(documentId: string): Promise<void> {\n const query = `\n MATCH (c:Chunk {document_id: $document_id})\n WITH c ORDER BY c.position\n WITH COLLECT(c) AS chunks\n UNWIND RANGE(0, SIZE(chunks)-2) AS i\n WITH chunks[i] AS curr, chunks[i+1] AS next\n MERGE (curr)-[:NEXT]->(next)\n `;\n await this.connect();\n const session = this.driver!.session({ database: this.database });\n try {\n await session.run(query, { document_id: String(documentId) });\n } finally {\n await session.close();\n }\n this.generation += 1;\n }\n\n private async runBatched(query: string, rows: Array<Record<string, unknown>>): Promise<number> {\n if (!rows.length) return 0;\n await this.connect();\n let done = 0;\n const session = this.driver!.session({ database: this.database });\n try {\n for (let i = 0; i < rows.length; i += SYNC_BATCH_ROWS) {\n const batch = rows.slice(i, i + SYNC_BATCH_ROWS);\n await session.run(query, { rows: batch });\n done += batch.length;\n }\n } finally {\n await session.close();\n }\n this.generation += 1;\n return done;\n }\n\n async deleteSourceData(sourceId: string): Promise<{ chunks_deleted: number }> {\n await this.connect();\n const session = this.driver!.session({ database: this.database });\n try {\n const result = await session.run(\n \"MATCH (c:Chunk {source_id: $source_id}) DETACH DELETE c RETURN count(c) AS n\",\n { source_id: String(sourceId) },\n );\n const deleted = Number(result.records[0]?.get(\"n\") ?? 0);\n this.generation += 1;\n return { chunks_deleted: deleted };\n } finally {\n await session.close();\n }\n }\n\n private expansionCacheKey(queryEntities: string[], maxDepth: number, chunkIds: string[]): string {\n const chunkDigest = createHash(\"md5\")\n .update([...chunkIds].sort().join(\",\"))\n .digest(\"hex\");\n const keyContent = `g${this.generation}:${JSON.stringify([...queryEntities].sort())}:${maxDepth}:${chunkDigest}`;\n return `expansion:${createHash(\"md5\").update(keyContent).digest(\"hex\")}`;\n }\n\n async expandChunkSet(chunkIds: string[], queryEntities: string[], maxDepth = 2): Promise<string[]> {\n if (!chunkIds.length) return [];\n const depth = Math.max(1, Math.min(Math.trunc(maxDepth), 5));\n const cacheKey = this.expansionCacheKey(queryEntities, depth, chunkIds);\n const cached = this.cacheGet(cacheKey);\n if (Array.isArray(cached)) return cached as string[];\n\n const query = `\n MATCH (c:Chunk)\n WHERE c.id IN $chunk_ids\n WITH COLLECT(DISTINCT c) AS seeds\n\n CALL {\n WITH seeds\n UNWIND seeds AS c\n OPTIONAL MATCH (c)-[:MENTIONS]->(e:Entity)<-[:MENTIONS]-(related:Chunk)\n WHERE e.normalized_name IN $query_entities\n RETURN COLLECT(DISTINCT related.id) AS related_ids\n }\n CALL {\n WITH seeds\n UNWIND seeds AS c\n OPTIONAL MATCH (c)-[:NEXT*1..${depth}]-(sequential:Chunk)\n RETURN COLLECT(DISTINCT sequential.id) AS sequential_ids\n }\n\n WITH [s IN seeds | s.id] + related_ids + sequential_ids AS all_ids\n UNWIND all_ids AS chunk_id\n WITH chunk_id WHERE chunk_id IS NOT NULL\n RETURN DISTINCT chunk_id\n LIMIT $max_results\n `;\n await this.connect();\n const session = this.driver!.session({ database: this.database });\n try {\n const result = await session.run(query, {\n chunk_ids: chunkIds,\n query_entities: queryEntities,\n max_results: MAX_EXPANSION,\n });\n const expanded = result.records\n .map((r) => r.get(\"chunk_id\"))\n .filter((v) => v != null)\n .map(String);\n if (expanded.length) this.cacheSet(cacheKey, expanded);\n return expanded;\n } finally {\n await session.close();\n }\n }\n\n async getChunkConnectivityScores(chunkIds: string[]): Promise<Record<string, number>> {\n if (!chunkIds.length) return {};\n const query = `\n UNWIND $chunk_ids AS chunk_id\n MATCH (c:Chunk {id: chunk_id})\n OPTIONAL MATCH (c)-[out_next:NEXT]->()\n OPTIONAL MATCH (c)-[out_mentions:MENTIONS]->()\n OPTIONAL MATCH (c)<-[in_next:NEXT]-()\n OPTIONAL MATCH (c)<-[in_mentions:MENTIONS]-()\n WITH c.id AS id,\n count(DISTINCT out_next) + count(DISTINCT out_mentions) AS outgoing,\n count(DISTINCT in_next) + count(DISTINCT in_mentions) AS incoming\n RETURN id, (outgoing + incoming) AS total_connections\n `;\n await this.connect();\n const session = this.driver!.session({ database: this.database });\n try {\n const result = await session.run(query, { chunk_ids: chunkIds });\n const records = result.records.map((r) => ({\n id: String(r.get(\"id\")),\n total_connections: Number(r.get(\"total_connections\")),\n }));\n if (!records.length) return {};\n const maxConnections = Math.max(...records.map((r) => r.total_connections));\n if (maxConnections === 0) {\n return Object.fromEntries(records.map((r) => [r.id, 0.5]));\n }\n return Object.fromEntries(\n records.map((r) => [r.id, Math.min(1.0, r.total_connections / maxConnections)]),\n );\n } finally {\n await session.close();\n }\n }\n}\n","import type { Pool } from \"pg\";\nimport type { ContextEngineConfig } from \"../config.js\";\nimport { emitError, type Hooks } from \"../hooks.js\";\nimport type { Embedder } from \"../providers/embeddings.js\";\nimport type { GraphStore } from \"./neo4j-client.js\";\n\nconst DEFAULT_WEIGHTS = {\n vector_score: 0.3,\n entity_match: 0.3,\n relationship_relevance: 0.2,\n community_match: 0.1,\n graph_connectivity: 0.1,\n};\n\nconst SEED_LIMIT = 200;\nconst ENTITY_LIMIT = 30;\nconst TOP_SEEDS_FOR_ENTITIES = 20;\n\nconst SCOPE = `\n AND ($2::text[] IS NULL OR c.source_id = ANY($2::text[]))\n AND ($3::text[] IS NULL OR c.acl IS NULL OR c.acl && $3::text[])\n`;\n\nfunction vecLiteral(vector: number[]): string {\n return `[${vector.map((x) => Number(x)).join(\",\")}]`;\n}\n\nexport async function corpusIsAclUniform(pool: Pool, sourceIds: string[] | null): Promise<boolean> {\n const result = await pool.query(\n `SELECT EXISTS(SELECT 1 FROM context_engine_chunks c\n WHERE c.acl IS NOT NULL AND ($1::text[] IS NULL OR c.source_id = ANY($1::text[]))) AS has_acl`,\n [sourceIds],\n );\n return !result.rows[0]?.has_acl;\n}\n\nexport async function shouldUseCommunitySummaries(\n pool: Pool,\n opts: { sourceIds: string[] | null; principals: string[] | null },\n): Promise<boolean> {\n if (opts.principals == null) return true;\n return corpusIsAclUniform(pool, opts.sourceIds);\n}\n\nasync function deriveQueryEntities(\n pool: Pool,\n chunkIds: string[],\n opts: { sourceIds: string[] | null; principals: string[] | null },\n): Promise<Array<Record<string, unknown>>> {\n if (!chunkIds.length) return [];\n const result = await pool.query(\n `SELECT e.normalized_name, e.name, e.type, COUNT(*) AS freq\n FROM context_engine_chunk_entities ce\n JOIN context_engine_entities e ON e.id = ce.entity_id\n JOIN context_engine_chunks c ON c.id = ce.chunk_id\n WHERE ce.chunk_id = ANY($1::uuid[]) ${SCOPE}\n GROUP BY e.normalized_name, e.name, e.type\n ORDER BY freq DESC LIMIT $4`,\n [chunkIds, opts.sourceIds, opts.principals, ENTITY_LIMIT],\n );\n return result.rows.map((r) => ({\n normalized_name: r.normalized_name,\n name: r.name,\n type: r.type,\n }));\n}\n\nasync function computeVectorScores(\n pool: Pool,\n chunkIds: string[],\n vector: number[],\n): Promise<Record<string, number>> {\n if (!chunkIds.length || !vector) return {};\n const result = await pool.query(\n `SELECT c.id::text, 1 - (c.embedding <=> CAST($2 AS vector))::float AS sim\n FROM context_engine_chunks c\n WHERE c.id = ANY($1::uuid[]) AND c.embedding IS NOT NULL`,\n [chunkIds, vecLiteral(vector)],\n );\n let scores = Object.fromEntries(result.rows.map((r) => [String(r.id), Number(r.sim)]));\n const vs = Object.values(scores);\n if (vs.length) {\n const lo = Math.min(...vs);\n const hi = Math.max(...vs);\n if (hi > lo)\n scores = Object.fromEntries(Object.entries(scores).map(([k, v]) => [k, (v - lo) / (hi - lo)]));\n }\n return scores;\n}\n\nasync function computeRelationshipScores(\n pool: Pool,\n chunkIds: string[],\n queryEntityNames: string[],\n): Promise<Record<string, number>> {\n if (!chunkIds.length || !queryEntityNames.length) return {};\n const result = await pool.query(\n `SELECT r.chunk_id::text, COUNT(*) AS n\n FROM context_engine_entity_relationships r\n JOIN context_engine_entities se ON se.id = r.source_entity_id\n JOIN context_engine_entities te ON te.id = r.target_entity_id\n WHERE r.chunk_id = ANY($1::uuid[])\n AND (se.normalized_name = ANY($2::text[]) OR te.normalized_name = ANY($2::text[]))\n GROUP BY r.chunk_id`,\n [chunkIds, queryEntityNames],\n );\n const counts = Object.fromEntries(result.rows.map((r) => [String(r.chunk_id), Number(r.n)]));\n if (!Object.keys(counts).length) return {};\n const mx = Math.max(...Object.values(counts));\n return mx ? Object.fromEntries(Object.entries(counts).map(([cid, n]) => [cid, n / mx])) : {};\n}\n\nasync function computeCommunityScores(\n pool: Pool,\n chunkIds: string[],\n vector: number[],\n opts: { sourceIds: string[] | null; principals: string[] | null; useSummaries: boolean },\n): Promise<Record<string, number>> {\n if (!opts.useSummaries || !chunkIds.length || !vector) return {};\n const commRows = await pool.query(\n `SELECT entity_ids, 1 - (embedding <=> CAST($1 AS vector))::float AS sim\n FROM context_engine_communities WHERE embedding IS NOT NULL\n ORDER BY embedding <=> CAST($1 AS vector) LIMIT 5`,\n [vecLiteral(vector)],\n );\n if (!commRows.rows.length) return {};\n const entityScore: Record<string, number> = {};\n for (const row of commRows.rows) {\n const sim = Number(row.sim);\n if (sim < 0.15) continue;\n for (const eid of row.entity_ids ?? []) {\n entityScore[String(eid)] = Math.max(entityScore[String(eid)] ?? 0, sim);\n }\n }\n if (!Object.keys(entityScore).length) return {};\n const result = await pool.query(\n `SELECT ce.chunk_id::text, ce.entity_id::text\n FROM context_engine_chunk_entities ce\n JOIN context_engine_chunks c ON c.id = ce.chunk_id\n WHERE ce.chunk_id = ANY($1::uuid[]) AND ce.entity_id = ANY($4::uuid[]) ${SCOPE}`,\n [chunkIds, opts.sourceIds, opts.principals, Object.keys(entityScore)],\n );\n const chunkScores: Record<string, number> = {};\n for (const row of result.rows) {\n chunkScores[row.chunk_id] = Math.max(chunkScores[row.chunk_id] ?? 0, entityScore[row.entity_id] ?? 0);\n }\n return chunkScores;\n}\n\nasync function vectorSeedIds(\n pool: Pool,\n vector: number[],\n opts: { sourceIds: string[] | null; principals: string[] | null },\n): Promise<string[]> {\n const result = await pool.query(\n `SELECT c.id::text FROM context_engine_chunks c\n WHERE c.embedding IS NOT NULL ${SCOPE}\n ORDER BY c.embedding <=> CAST($1 AS vector) LIMIT $4`,\n [vecLiteral(vector), opts.sourceIds, opts.principals, SEED_LIMIT],\n );\n return result.rows.map((r) => String(r.id));\n}\n\nexport async function buildGraphRanked(\n query: string,\n opts: {\n config: ContextEngineConfig;\n pool: Pool;\n embedder: Embedder;\n graphStore: GraphStore;\n hooks?: Hooks | null;\n sourceIds?: string[] | null;\n principals?: string[] | null;\n maxDepth?: number;\n },\n): Promise<string[]> {\n try {\n const result = await opts.embedder.embed([query], { kind: \"query\" });\n const vectors = Array.isArray(result)\n ? (result[0] as number[][])\n : ((result as { vectors?: number[][] }).vectors ?? []);\n const vector = vectors[0] ? [...vectors[0]] : null;\n if (!vector) return [];\n const sourceIds = opts.sourceIds ?? null;\n const principals = opts.principals ?? null;\n const seeds = await vectorSeedIds(opts.pool, vector, { sourceIds, principals });\n if (!seeds.length) return [];\n const queryEntities = await deriveQueryEntities(opts.pool, seeds.slice(0, TOP_SEEDS_FOR_ENTITIES), {\n sourceIds,\n principals,\n });\n const entityNorms = queryEntities.map((e) => String(e.normalized_name));\n\n let expanded: string[] = seeds;\n let connectivity: Record<string, number> = {};\n try {\n await opts.graphStore.connect();\n expanded = await opts.graphStore.expandChunkSet(seeds, entityNorms, opts.maxDepth ?? 2);\n connectivity = await opts.graphStore.getChunkConnectivityScores(expanded.length ? expanded : seeds);\n } catch (exc) {\n if (opts.hooks) emitError(opts.hooks, exc, { stage: \"graph_expand\" });\n else console.warn(\"graph leg: expansion failed:\", exc);\n expanded = seeds;\n connectivity = {};\n }\n const allIds = expanded.length ? expanded : seeds;\n const useSummaries = await shouldUseCommunitySummaries(opts.pool, { sourceIds, principals });\n const vecScores = await computeVectorScores(opts.pool, allIds, vector);\n const relScores = await computeRelationshipScores(opts.pool, allIds, entityNorms);\n const commScores = await computeCommunityScores(opts.pool, allIds, vector, {\n sourceIds,\n principals,\n useSummaries,\n });\n const textRows = await opts.pool.query(\n `SELECT id::text, lower(coalesce(text,'')) AS t FROM context_engine_chunks WHERE id = ANY($1::uuid[])`,\n [allIds],\n );\n const texts = Object.fromEntries(textRows.rows.map((r) => [String(r.id), String(r.t)]));\n const weights = {\n ...DEFAULT_WEIGHTS,\n ...((\n opts.config.graph as {\n rerankWeights?: Record<string, number>;\n rerank_weights?: Record<string, number>;\n }\n ).rerankWeights ??\n (opts.config.graph as { rerank_weights?: Record<string, number> }).rerank_weights ??\n {}),\n };\n const entityNameSet = new Set(entityNorms);\n const scored: Array<[string, number]> = [];\n for (const cidRaw of allIds) {\n const cid = String(cidRaw);\n if (!(cid in texts)) continue;\n const v = vecScores[cid] ?? 0.5;\n const chunkText = texts[cid] ?? \"\";\n const matches = [...entityNameSet].filter((n) => n && chunkText.includes(n)).length;\n const e = entityNameSet.size ? Math.min(1.0, matches / Math.max(1, entityNameSet.size)) : 0;\n const r = relScores[cid] ?? 0;\n const cm = commScores[cid] ?? 0;\n const gc = connectivity[cid] ?? 0.5;\n const final =\n v * weights.vector_score +\n e * weights.entity_match +\n r * weights.relationship_relevance +\n cm * weights.community_match +\n gc * weights.graph_connectivity;\n scored.push([cid, final]);\n }\n scored.sort((a, b) => b[1] - a[1]);\n return scored.map(([cid]) => cid);\n } catch (exc) {\n if (opts.hooks) emitError(opts.hooks, exc, { stage: \"graph_embed_query\" });\n else console.warn(\"graph leg: query embed failed:\", exc);\n return [];\n }\n}\n","export type UsageKind = \"ingest\" | \"search\" | \"tool\";\n\nexport interface UsageEvent {\n kind: UsageKind;\n units: number;\n detail?: Record<string, unknown>;\n providerTokens?: Record<string, number>;\n}\n\nexport interface DocumentReport {\n documentId: string;\n name: string;\n status: string;\n pages: number | null;\n chunks: number;\n units: number;\n graphUnits: number;\n providerTokens: Record<string, number>;\n error: string | null;\n redactionFailed: string[];\n}\n\nexport interface IngestReport {\n documents: DocumentReport[];\n totals: {\n files: number;\n failed: number;\n units: number;\n graphUnits: number;\n [key: string]: number;\n };\n}\n\nconst PPTX_MIMES = new Set([\n \"application/vnd.openxmlformats-officedocument.presentationml.presentation\",\n \"application/vnd.ms-powerpoint\",\n]);\nconst DOCX_MIMES = new Set([\n \"application/vnd.openxmlformats-officedocument.wordprocessingml.document\",\n \"application/msword\",\n]);\n\nexport function unitsForFile(\n mime: string,\n opts: { pages: number | null; slides: number | null; sizeBytes: number },\n): number {\n const m = mime || \"\";\n if (m === \"application/pdf\") return Math.max(1, opts.pages ?? 0);\n if (PPTX_MIMES.has(m)) return Math.max(1, opts.slides ?? 0);\n if (DOCX_MIMES.has(m)) return Math.max(1, opts.pages ?? 0);\n if (m.startsWith(\"image/\")) return 1;\n return Math.max(1, Math.ceil(opts.sizeBytes / (1024 * 1024)));\n}\n\nexport function graphUnits(chunkCount: number, primaryCommunityCount: number): number {\n return Math.ceil(chunkCount / 8) + primaryCommunityCount;\n}\n","import type { Pool } from \"pg\";\nimport type { ContextEngineConfig } from \"../config.js\";\nimport type { Hooks } from \"../hooks.js\";\nimport type { Embedder } from \"../providers/embeddings.js\";\nimport { graphUnits } from \"../usage.js\";\nimport { detectCommunities } from \"./communities.js\";\nimport { extractEntitiesForDocument } from \"./entities.js\";\nimport type { GraphStore } from \"./neo4j-client.js\";\n\nexport async function runGraphStage(opts: {\n documentId: string;\n config: ContextEngineConfig;\n hooks?: Hooks | null;\n pool: Pool;\n embedder: Embedder;\n graphStore: GraphStore;\n chunks?: unknown;\n}): Promise<number> {\n const entStats = await extractEntitiesForDocument(opts.documentId, {\n config: opts.config,\n pool: opts.pool,\n graphStore: opts.graphStore,\n hooks: opts.hooks,\n });\n const commStats = await detectCommunities({\n config: opts.config,\n pool: opts.pool,\n embedder: opts.embedder,\n hooks: opts.hooks,\n });\n const chunkCount = Number(entStats.chunk_count ?? 0);\n const primary = Number(commStats.primary_communities ?? 0);\n return graphUnits(chunkCount, primary);\n}\n","import type { GraphConfig } from \"../config.js\";\nimport { requireExtra } from \"../extras.js\";\nimport type { Hooks } from \"../hooks.js\";\nimport type { GraphStore } from \"./neo4j-client.js\";\n\nexport async function requireGraph(): Promise<void> {\n await requireExtra(\"neo4j-driver\", \"graph\", \"graph features\");\n}\n\nexport const _requireGraph = requireGraph;\n\nexport async function buildGraphStore(\n cfg: GraphConfig,\n opts: { hooks?: Hooks | null } = {},\n): Promise<GraphStore> {\n await requireGraph();\n const { GraphStore } = await import(\"./neo4j-client.js\");\n return new GraphStore(cfg, opts);\n}\n\nexport async function runGraphStage(\n ...args: Parameters<typeof import(\"./stage.js\").runGraphStage>\n): Promise<number> {\n await requireGraph();\n const { runGraphStage: impl } = await import(\"./stage.js\");\n return impl(...args);\n}\n\nexport async function buildGraphRanked(\n ...args: Parameters<typeof import(\"./retrieval.js\").buildGraphRanked>\n): Promise<string[]> {\n await requireGraph();\n const { buildGraphRanked: impl } = await import(\"./retrieval.js\");\n return impl(...args);\n}\n\nexport { detectCommunities, MAX_HIERARCHY_LEVELS } from \"./communities.js\";\nexport { CHUNKS_PER_BATCH, ENTITY_TYPES, normalizeEntityName, resolveEntity } from \"./entities.js\";\nexport { GraphStore } from \"./neo4j-client.js\";\nexport { corpusIsAclUniform, shouldUseCommunitySummaries } from \"./retrieval.js\";\n"]}
@@ -0,0 +1,104 @@
1
+ import { Pool } from 'pg';
2
+ import { G as GraphConfig, C as ContextEngineConfig } from '../config-Bl9U789m.cjs';
3
+ import { H as Hooks } from '../redaction-BmDSWJ7h.cjs';
4
+ import { E as Embedder } from '../embeddings-B-jZ42mk.cjs';
5
+ import 'zod';
6
+
7
+ type Neo4jDriver = {
8
+ session: (opts: {
9
+ database: string;
10
+ }) => Neo4jSession;
11
+ close: () => Promise<void>;
12
+ };
13
+ type Neo4jSession = {
14
+ run: (query: string, params?: Record<string, unknown>) => Promise<{
15
+ records: Array<{
16
+ get: (k: string) => unknown;
17
+ }>;
18
+ values?: () => Promise<unknown[][]>;
19
+ }>;
20
+ close: () => Promise<void>;
21
+ };
22
+ declare class GraphStore {
23
+ cfg: GraphConfig;
24
+ hooks: Hooks | null | undefined;
25
+ database: string;
26
+ driver: Neo4jDriver | null;
27
+ private schemaReady;
28
+ private cache;
29
+ private generation;
30
+ constructor(cfg: GraphConfig, opts?: {
31
+ hooks?: Hooks | null;
32
+ });
33
+ connect(): Promise<void>;
34
+ close(): Promise<void>;
35
+ ping(timeout?: number): Promise<boolean>;
36
+ private pingInternal;
37
+ private report;
38
+ private cacheGet;
39
+ private cacheSet;
40
+ upsertChunksBatch(rows: Array<Record<string, unknown>>): Promise<number>;
41
+ upsertEntitiesBatch(rows: Array<Record<string, unknown>>): Promise<number>;
42
+ linkChunksToEntitiesBatch(rows: Array<Record<string, unknown>>): Promise<number>;
43
+ upsertEntityRelationshipsBatch(rows: Array<Record<string, unknown>>): Promise<number>;
44
+ linkSequentialChunks(documentId: string): Promise<void>;
45
+ private runBatched;
46
+ deleteSourceData(sourceId: string): Promise<{
47
+ chunks_deleted: number;
48
+ }>;
49
+ private expansionCacheKey;
50
+ expandChunkSet(chunkIds: string[], queryEntities: string[], maxDepth?: number): Promise<string[]>;
51
+ getChunkConnectivityScores(chunkIds: string[]): Promise<Record<string, number>>;
52
+ }
53
+
54
+ declare function corpusIsAclUniform(pool: Pool, sourceIds: string[] | null): Promise<boolean>;
55
+ declare function shouldUseCommunitySummaries(pool: Pool, opts: {
56
+ sourceIds: string[] | null;
57
+ principals: string[] | null;
58
+ }): Promise<boolean>;
59
+ declare function buildGraphRanked$1(query: string, opts: {
60
+ config: ContextEngineConfig;
61
+ pool: Pool;
62
+ embedder: Embedder;
63
+ graphStore: GraphStore;
64
+ hooks?: Hooks | null;
65
+ sourceIds?: string[] | null;
66
+ principals?: string[] | null;
67
+ maxDepth?: number;
68
+ }): Promise<string[]>;
69
+
70
+ declare function runGraphStage$1(opts: {
71
+ documentId: string;
72
+ config: ContextEngineConfig;
73
+ hooks?: Hooks | null;
74
+ pool: Pool;
75
+ embedder: Embedder;
76
+ graphStore: GraphStore;
77
+ chunks?: unknown;
78
+ }): Promise<number>;
79
+
80
+ declare const MAX_HIERARCHY_LEVELS = 3;
81
+ declare function detectCommunities(opts: {
82
+ config: ContextEngineConfig;
83
+ pool: Pool;
84
+ embedder: Embedder;
85
+ hooks?: Hooks | null;
86
+ }): Promise<Record<string, unknown>>;
87
+
88
+ declare const ENTITY_TYPES: readonly ["PERSON", "ORG", "PRODUCT", "LOCATION", "REFERENCE", "TEMPORAL", "CONCEPT"];
89
+ declare const CHUNKS_PER_BATCH = 11;
90
+ declare function normalizeEntityName(name: string): string;
91
+ type Querier = {
92
+ query: Pool["query"];
93
+ };
94
+ declare function resolveEntity(db: Querier, _name: string, normalizedName: string, entityType: string): Promise<Record<string, unknown> | null>;
95
+
96
+ declare function requireGraph(): Promise<void>;
97
+ declare const _requireGraph: typeof requireGraph;
98
+ declare function buildGraphStore(cfg: GraphConfig, opts?: {
99
+ hooks?: Hooks | null;
100
+ }): Promise<GraphStore>;
101
+ declare function runGraphStage(...args: Parameters<typeof runGraphStage$1>): Promise<number>;
102
+ declare function buildGraphRanked(...args: Parameters<typeof buildGraphRanked$1>): Promise<string[]>;
103
+
104
+ export { CHUNKS_PER_BATCH, ENTITY_TYPES, GraphStore, MAX_HIERARCHY_LEVELS, _requireGraph, buildGraphRanked, buildGraphStore, corpusIsAclUniform, detectCommunities, normalizeEntityName, requireGraph, resolveEntity, runGraphStage, shouldUseCommunitySummaries };
@@ -0,0 +1,104 @@
1
+ import { Pool } from 'pg';
2
+ import { G as GraphConfig, C as ContextEngineConfig } from '../config-Bt9bUQqU.js';
3
+ import { H as Hooks } from '../redaction-BmDSWJ7h.js';
4
+ import { E as Embedder } from '../embeddings-DaSdAZN3.js';
5
+ import 'zod';
6
+
7
+ type Neo4jDriver = {
8
+ session: (opts: {
9
+ database: string;
10
+ }) => Neo4jSession;
11
+ close: () => Promise<void>;
12
+ };
13
+ type Neo4jSession = {
14
+ run: (query: string, params?: Record<string, unknown>) => Promise<{
15
+ records: Array<{
16
+ get: (k: string) => unknown;
17
+ }>;
18
+ values?: () => Promise<unknown[][]>;
19
+ }>;
20
+ close: () => Promise<void>;
21
+ };
22
+ declare class GraphStore {
23
+ cfg: GraphConfig;
24
+ hooks: Hooks | null | undefined;
25
+ database: string;
26
+ driver: Neo4jDriver | null;
27
+ private schemaReady;
28
+ private cache;
29
+ private generation;
30
+ constructor(cfg: GraphConfig, opts?: {
31
+ hooks?: Hooks | null;
32
+ });
33
+ connect(): Promise<void>;
34
+ close(): Promise<void>;
35
+ ping(timeout?: number): Promise<boolean>;
36
+ private pingInternal;
37
+ private report;
38
+ private cacheGet;
39
+ private cacheSet;
40
+ upsertChunksBatch(rows: Array<Record<string, unknown>>): Promise<number>;
41
+ upsertEntitiesBatch(rows: Array<Record<string, unknown>>): Promise<number>;
42
+ linkChunksToEntitiesBatch(rows: Array<Record<string, unknown>>): Promise<number>;
43
+ upsertEntityRelationshipsBatch(rows: Array<Record<string, unknown>>): Promise<number>;
44
+ linkSequentialChunks(documentId: string): Promise<void>;
45
+ private runBatched;
46
+ deleteSourceData(sourceId: string): Promise<{
47
+ chunks_deleted: number;
48
+ }>;
49
+ private expansionCacheKey;
50
+ expandChunkSet(chunkIds: string[], queryEntities: string[], maxDepth?: number): Promise<string[]>;
51
+ getChunkConnectivityScores(chunkIds: string[]): Promise<Record<string, number>>;
52
+ }
53
+
54
+ declare function corpusIsAclUniform(pool: Pool, sourceIds: string[] | null): Promise<boolean>;
55
+ declare function shouldUseCommunitySummaries(pool: Pool, opts: {
56
+ sourceIds: string[] | null;
57
+ principals: string[] | null;
58
+ }): Promise<boolean>;
59
+ declare function buildGraphRanked$1(query: string, opts: {
60
+ config: ContextEngineConfig;
61
+ pool: Pool;
62
+ embedder: Embedder;
63
+ graphStore: GraphStore;
64
+ hooks?: Hooks | null;
65
+ sourceIds?: string[] | null;
66
+ principals?: string[] | null;
67
+ maxDepth?: number;
68
+ }): Promise<string[]>;
69
+
70
+ declare function runGraphStage$1(opts: {
71
+ documentId: string;
72
+ config: ContextEngineConfig;
73
+ hooks?: Hooks | null;
74
+ pool: Pool;
75
+ embedder: Embedder;
76
+ graphStore: GraphStore;
77
+ chunks?: unknown;
78
+ }): Promise<number>;
79
+
80
+ declare const MAX_HIERARCHY_LEVELS = 3;
81
+ declare function detectCommunities(opts: {
82
+ config: ContextEngineConfig;
83
+ pool: Pool;
84
+ embedder: Embedder;
85
+ hooks?: Hooks | null;
86
+ }): Promise<Record<string, unknown>>;
87
+
88
+ declare const ENTITY_TYPES: readonly ["PERSON", "ORG", "PRODUCT", "LOCATION", "REFERENCE", "TEMPORAL", "CONCEPT"];
89
+ declare const CHUNKS_PER_BATCH = 11;
90
+ declare function normalizeEntityName(name: string): string;
91
+ type Querier = {
92
+ query: Pool["query"];
93
+ };
94
+ declare function resolveEntity(db: Querier, _name: string, normalizedName: string, entityType: string): Promise<Record<string, unknown> | null>;
95
+
96
+ declare function requireGraph(): Promise<void>;
97
+ declare const _requireGraph: typeof requireGraph;
98
+ declare function buildGraphStore(cfg: GraphConfig, opts?: {
99
+ hooks?: Hooks | null;
100
+ }): Promise<GraphStore>;
101
+ declare function runGraphStage(...args: Parameters<typeof runGraphStage$1>): Promise<number>;
102
+ declare function buildGraphRanked(...args: Parameters<typeof buildGraphRanked$1>): Promise<string[]>;
103
+
104
+ export { CHUNKS_PER_BATCH, ENTITY_TYPES, GraphStore, MAX_HIERARCHY_LEVELS, _requireGraph, buildGraphRanked, buildGraphStore, corpusIsAclUniform, detectCommunities, normalizeEntityName, requireGraph, resolveEntity, runGraphStage, shouldUseCommunitySummaries };