@leanlabsinnov/codegraph 0.1.4 → 0.1.5

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/dist/bin.js CHANGED
@@ -2,10 +2,10 @@
2
2
  import {
3
3
  buildProgram,
4
4
  renderError
5
- } from "./chunk-64OLVRK3.js";
6
- import "./chunk-WXBYICTK.js";
7
- import "./chunk-AVQNLB4I.js";
8
- import "./chunk-POGEFB23.js";
5
+ } from "./chunk-KYPDPBI5.js";
6
+ import "./chunk-GOJIV25M.js";
7
+ import "./chunk-C2AULDUQ.js";
8
+ import "./chunk-Z6DQLXRR.js";
9
9
 
10
10
  // src/bin.ts
11
11
  import { CommanderError } from "commander";
@@ -1,7 +1,7 @@
1
1
  import {
2
2
  EDGE_KINDS,
3
3
  NODE_KINDS
4
- } from "./chunk-POGEFB23.js";
4
+ } from "./chunk-Z6DQLXRR.js";
5
5
 
6
6
  // ../graph-db/src/client.ts
7
7
  import { mkdir } from "fs/promises";
@@ -387,4 +387,4 @@ export {
387
387
  defaultDbPath,
388
388
  GraphDb
389
389
  };
390
- //# sourceMappingURL=chunk-AVQNLB4I.js.map
390
+ //# sourceMappingURL=chunk-C2AULDUQ.js.map
@@ -1,6 +1,6 @@
1
1
  import {
2
2
  namespaceToString
3
- } from "./chunk-POGEFB23.js";
3
+ } from "./chunk-Z6DQLXRR.js";
4
4
 
5
5
  // ../llm-router/src/router.ts
6
6
  import { embedMany, generateText } from "ai";
@@ -139,4 +139,4 @@ export {
139
139
  createLlmRouter,
140
140
  namespaceLabel
141
141
  };
142
- //# sourceMappingURL=chunk-WXBYICTK.js.map
142
+ //# sourceMappingURL=chunk-GOJIV25M.js.map
@@ -1,18 +1,18 @@
1
1
  import {
2
2
  createLlmRouter,
3
3
  namespaceLabel
4
- } from "./chunk-WXBYICTK.js";
4
+ } from "./chunk-GOJIV25M.js";
5
5
  import {
6
6
  GraphDb,
7
7
  defaultDbPath
8
- } from "./chunk-AVQNLB4I.js";
8
+ } from "./chunk-C2AULDUQ.js";
9
9
  import {
10
10
  DEFAULT_CONFIG,
11
11
  EDGE_KINDS,
12
12
  LLM_PRESETS,
13
13
  makeFileId,
14
14
  makeNodeId
15
- } from "./chunk-POGEFB23.js";
15
+ } from "./chunk-Z6DQLXRR.js";
16
16
 
17
17
  // src/config-store.ts
18
18
  import { mkdir, readFile, writeFile } from "fs/promises";
@@ -3041,7 +3041,7 @@ async function startMcpServer(portOrOptions) {
3041
3041
  async function loadGraphClient(dbPath) {
3042
3042
  let mod;
3043
3043
  try {
3044
- mod = await import("./src-BTVJBGZ5.js");
3044
+ mod = await import("./src-IKWDKNPH.js");
3045
3045
  } catch (err) {
3046
3046
  throw new Error(
3047
3047
  `Failed to import @codegraph/graph-db. Run \`pnpm -r build\` first. Underlying error: ${err instanceof Error ? err.message : String(err)}`
@@ -3067,7 +3067,7 @@ async function loadGraphClient(dbPath) {
3067
3067
  async function loadLlmRouter(configPath2) {
3068
3068
  let mod;
3069
3069
  try {
3070
- mod = await import("./src-DBJQ22XR.js");
3070
+ mod = await import("./src-HB4UDUBX.js");
3071
3071
  } catch (err) {
3072
3072
  throw new Error(
3073
3073
  `Failed to import @codegraph/llm-router. Run \`pnpm -r build\` first. Underlying error: ${err instanceof Error ? err.message : String(err)}`
@@ -3911,4 +3911,4 @@ export {
3911
3911
  renderError,
3912
3912
  buildProgram
3913
3913
  };
3914
- //# sourceMappingURL=chunk-64OLVRK3.js.map
3914
+ //# sourceMappingURL=chunk-KYPDPBI5.js.map
@@ -35,7 +35,7 @@ var DEFAULT_CONFIG = {
35
35
  },
36
36
  server: {
37
37
  port: 3748,
38
- bearerToken: "cg_local_dev_token"
38
+ bearerToken: ""
39
39
  },
40
40
  data: {}
41
41
  };
@@ -124,4 +124,4 @@ export {
124
124
  DEFAULT_CONFIG,
125
125
  LLM_PRESETS
126
126
  };
127
- //# sourceMappingURL=chunk-POGEFB23.js.map
127
+ //# sourceMappingURL=chunk-Z6DQLXRR.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../shared/src/kinds.ts","../../shared/src/embedding.ts","../../shared/src/config.ts","../../shared/src/ids.ts"],"sourcesContent":["export const NODE_KINDS = [\n \"File\",\n \"Function\",\n \"Class\",\n \"Interface\",\n \"Component\",\n \"Route\",\n \"Variable\",\n] as const;\n\nexport type NodeKind = (typeof NODE_KINDS)[number];\n\nexport const EDGE_KINDS = [\n \"IMPORTS\",\n \"CALLS\",\n \"RENDERS\",\n \"INHERITS\",\n \"DEFINES\",\n \"EXPORTS\",\n] as const;\n\nexport type EdgeKind = (typeof EDGE_KINDS)[number];\n\nexport const SUPPORTED_LANGUAGES = [\"typescript\", \"tsx\", \"javascript\", \"jsx\", \"python\"] as const;\nexport type Language = (typeof SUPPORTED_LANGUAGES)[number];\n","/**\n * Embedding namespace is the tuple that uniquely identifies a vector space.\n * Every stored embedding tags itself with this namespace string so switching\n * providers later triggers a re-embed instead of silent retrieval drift.\n *\n * Format: `${provider}:${model}:${dimension}`\n */\nexport interface EmbeddingNamespace {\n provider: string;\n model: string;\n dimension: number;\n}\n\nexport function namespaceToString(ns: EmbeddingNamespace): string {\n return `${ns.provider}:${ns.model}:${ns.dimension}`;\n}\n\nexport function parseNamespace(s: string): EmbeddingNamespace | null {\n const parts = s.split(\":\");\n if (parts.length !== 3) return null;\n const [provider, model, dimensionStr] = parts;\n if (!provider || !model || !dimensionStr) return null;\n const dimension = Number(dimensionStr);\n if (!Number.isFinite(dimension) || dimension <= 0) return null;\n return { provider, model, dimension };\n}\n","/**\n * Shape of `~/.codegraph/config.json` and the in-memory resolved config.\n *\n * The on-disk file is partial; defaults are applied on load. Keeping the\n * shape co-located with shared types so cli / ingestion / mcp-server all\n * speak the same vocabulary.\n */\n\nexport type LlmMode = \"managed\" | \"byo\" | \"local\";\n\nexport type LlmProvider = \"openai\" | \"anthropic\" | \"google\" | \"ollama\";\n\nexport interface LlmProviderConfig {\n provider: LlmProvider;\n model: string;\n}\n\nexport interface LlmEmbeddingConfig extends LlmProviderConfig {\n dimension: number;\n}\n\nexport interface LlmConfig {\n mode: LlmMode;\n generation: LlmProviderConfig;\n embeddings: LlmEmbeddingConfig;\n /** Optional API base URL override (e.g. for self-hosted OpenAI-compatible). */\n baseUrl?: string;\n}\n\nexport interface ServerConfig {\n /** SSE port for the local MCP server. */\n port: number;\n /** Single bearer token used by Claude Code / Cursor to authenticate. */\n bearerToken: string;\n}\n\n/**\n * Where the embedded Kuzu graph and any auxiliary on-disk state live. `dbPath` is\n * optional - when missing the storage layer falls back to `~/.codegraph/graph`.\n */\nexport interface DataConfig {\n dbPath?: string;\n}\n\nexport interface CodegraphConfig {\n llm: LlmConfig;\n server: ServerConfig;\n data: DataConfig;\n}\n\nexport const DEFAULT_CONFIG: CodegraphConfig = {\n llm: {\n mode: \"byo\",\n generation: { provider: \"openai\", model: \"gpt-4o-mini\" },\n embeddings: {\n provider: \"openai\",\n model: \"text-embedding-3-small\",\n dimension: 1536,\n },\n },\n server: {\n port: 3748,\n bearerToken: \"\",\n },\n data: {},\n};\n\nexport const LLM_PRESETS: Record<string, Pick<LlmConfig, \"mode\" | \"generation\" | \"embeddings\">> = {\n \"managed-stub\": {\n mode: \"managed\",\n generation: { provider: \"openai\", model: \"gpt-4o-mini\" },\n embeddings: {\n provider: \"openai\",\n model: \"text-embedding-3-small\",\n dimension: 1536,\n },\n },\n \"byo-openai\": {\n mode: \"byo\",\n generation: { provider: \"openai\", model: \"gpt-4o-mini\" },\n embeddings: {\n provider: \"openai\",\n model: \"text-embedding-3-small\",\n dimension: 1536,\n },\n },\n \"byo-anthropic\": {\n mode: \"byo\",\n generation: { provider: \"anthropic\", model: \"claude-3-5-haiku-latest\" },\n // Anthropic has no embedding API; fall back to OpenAI for embeddings.\n embeddings: {\n provider: \"openai\",\n model: \"text-embedding-3-small\",\n dimension: 1536,\n },\n },\n \"byo-google\": {\n mode: \"byo\",\n generation: { provider: \"google\", model: \"gemini-1.5-flash-latest\" },\n embeddings: {\n provider: \"google\",\n model: \"text-embedding-004\",\n dimension: 768,\n },\n },\n \"local-ollama\": {\n mode: \"local\",\n generation: { provider: \"ollama\", model: \"qwen2.5-coder:1.5b\" },\n embeddings: {\n provider: \"ollama\",\n model: \"nomic-embed-text\",\n dimension: 768,\n },\n },\n /**\n * Any OpenAI-compatible local server (llama.cpp, LM Studio, vLLM, LocalAI).\n * `baseUrl` must be set separately in LlmConfig (e.g. http://localhost:8080/v1).\n * Model names default to common values but should be overridden to match whatever\n * the user has loaded in their server.\n */\n \"local-openai-compatible\": {\n mode: \"local\",\n generation: { provider: \"openai\", model: \"qwen2.5-coder\" },\n embeddings: {\n provider: \"openai\",\n model: \"nomic-embed-text\",\n dimension: 768,\n },\n },\n};\n","import { createHash } from \"node:crypto\";\nimport type { NodeKind } from \"./kinds.js\";\n\n/**\n * Compute a stable graph node ID of the form `${repoId}:${kind}:${sha1(path#name#line)}`.\n *\n * The hash is deterministic across runs as long as `path`, `name`, and `line` are stable,\n * so an `upsertNodes` pass over a repo will overwrite the same nodes rather than producing\n * duplicates.\n */\nexport function makeNodeId(input: {\n repoId: string;\n kind: NodeKind;\n path: string;\n name: string;\n line?: number;\n}): string {\n const { repoId, kind, path, name, line } = input;\n const fingerprint = `${path}#${name}#${line ?? 0}`;\n const hash = createHash(\"sha1\").update(fingerprint).digest(\"hex\");\n return `${repoId}:${kind}:${hash}`;\n}\n\n/** Compute a stable repo ID from an absolute path. */\nexport function makeRepoId(absolutePath: string): string {\n return createHash(\"sha1\").update(absolutePath).digest(\"hex\").slice(0, 12);\n}\n\n/** Convenience wrapper: stable ID for a File node. */\nexport function makeFileId(input: { repoId: string; path: string }): string {\n return makeNodeId({ repoId: input.repoId, kind: \"File\", path: input.path, name: input.path });\n}\n"],"mappings":";AAAO,IAAM,aAAa;AAAA,EACxB;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AACF;AAIO,IAAM,aAAa;AAAA,EACxB;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AACF;;;ACNO,SAAS,kBAAkB,IAAgC;AAChE,SAAO,GAAG,GAAG,QAAQ,IAAI,GAAG,KAAK,IAAI,GAAG,SAAS;AACnD;;;ACmCO,IAAM,iBAAkC;AAAA,EAC7C,KAAK;AAAA,IACH,MAAM;AAAA,IACN,YAAY,EAAE,UAAU,UAAU,OAAO,cAAc;AAAA,IACvD,YAAY;AAAA,MACV,UAAU;AAAA,MACV,OAAO;AAAA,MACP,WAAW;AAAA,IACb;AAAA,EACF;AAAA,EACA,QAAQ;AAAA,IACN,MAAM;AAAA,IACN,aAAa;AAAA,EACf;AAAA,EACA,MAAM,CAAC;AACT;AAEO,IAAM,cAAqF;AAAA,EAChG,gBAAgB;AAAA,IACd,MAAM;AAAA,IACN,YAAY,EAAE,UAAU,UAAU,OAAO,cAAc;AAAA,IACvD,YAAY;AAAA,MACV,UAAU;AAAA,MACV,OAAO;AAAA,MACP,WAAW;AAAA,IACb;AAAA,EACF;AAAA,EACA,cAAc;AAAA,IACZ,MAAM;AAAA,IACN,YAAY,EAAE,UAAU,UAAU,OAAO,cAAc;AAAA,IACvD,YAAY;AAAA,MACV,UAAU;AAAA,MACV,OAAO;AAAA,MACP,WAAW;AAAA,IACb;AAAA,EACF;AAAA,EACA,iBAAiB;AAAA,IACf,MAAM;AAAA,IACN,YAAY,EAAE,UAAU,aAAa,OAAO,0BAA0B;AAAA;AAAA,IAEtE,YAAY;AAAA,MACV,UAAU;AAAA,MACV,OAAO;AAAA,MACP,WAAW;AAAA,IACb;AAAA,EACF;AAAA,EACA,cAAc;AAAA,IACZ,MAAM;AAAA,IACN,YAAY,EAAE,UAAU,UAAU,OAAO,0BAA0B;AAAA,IACnE,YAAY;AAAA,MACV,UAAU;AAAA,MACV,OAAO;AAAA,MACP,WAAW;AAAA,IACb;AAAA,EACF;AAAA,EACA,gBAAgB;AAAA,IACd,MAAM;AAAA,IACN,YAAY,EAAE,UAAU,UAAU,OAAO,qBAAqB;AAAA,IAC9D,YAAY;AAAA,MACV,UAAU;AAAA,MACV,OAAO;AAAA,MACP,WAAW;AAAA,IACb;AAAA,EACF;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAOA,2BAA2B;AAAA,IACzB,MAAM;AAAA,IACN,YAAY,EAAE,UAAU,UAAU,OAAO,gBAAgB;AAAA,IACzD,YAAY;AAAA,MACV,UAAU;AAAA,MACV,OAAO;AAAA,MACP,WAAW;AAAA,IACb;AAAA,EACF;AACF;;;ACjIA,SAAS,kBAAkB;AAUpB,SAAS,WAAW,OAMhB;AACT,QAAM,EAAE,QAAQ,MAAM,MAAM,MAAM,KAAK,IAAI;AAC3C,QAAM,cAAc,GAAG,IAAI,IAAI,IAAI,IAAI,QAAQ,CAAC;AAChD,QAAM,OAAO,WAAW,MAAM,EAAE,OAAO,WAAW,EAAE,OAAO,KAAK;AAChE,SAAO,GAAG,MAAM,IAAI,IAAI,IAAI,IAAI;AAClC;AAQO,SAAS,WAAW,OAAiD;AAC1E,SAAO,WAAW,EAAE,QAAQ,MAAM,QAAQ,MAAM,QAAQ,MAAM,MAAM,MAAM,MAAM,MAAM,KAAK,CAAC;AAC9F;","names":[]}
package/dist/index.js CHANGED
@@ -3,10 +3,10 @@ import {
3
3
  configPath,
4
4
  loadConfig,
5
5
  saveConfig
6
- } from "./chunk-64OLVRK3.js";
7
- import "./chunk-WXBYICTK.js";
8
- import "./chunk-AVQNLB4I.js";
9
- import "./chunk-POGEFB23.js";
6
+ } from "./chunk-KYPDPBI5.js";
7
+ import "./chunk-GOJIV25M.js";
8
+ import "./chunk-C2AULDUQ.js";
9
+ import "./chunk-Z6DQLXRR.js";
10
10
  export {
11
11
  buildProgram,
12
12
  configPath,
@@ -0,0 +1,10 @@
1
+ import {
2
+ createLlmRouter,
3
+ namespaceLabel
4
+ } from "./chunk-GOJIV25M.js";
5
+ import "./chunk-Z6DQLXRR.js";
6
+ export {
7
+ createLlmRouter,
8
+ namespaceLabel
9
+ };
10
+ //# sourceMappingURL=src-HB4UDUBX.js.map
@@ -8,8 +8,8 @@ import {
8
8
  buildSchemaStatements,
9
9
  defaultDbPath,
10
10
  defaultFor
11
- } from "./chunk-AVQNLB4I.js";
12
- import "./chunk-POGEFB23.js";
11
+ } from "./chunk-C2AULDUQ.js";
12
+ import "./chunk-Z6DQLXRR.js";
13
13
  export {
14
14
  DEFAULT_EMBEDDING_DIMENSION,
15
15
  EDGE_COLUMNS,
@@ -21,4 +21,4 @@ export {
21
21
  defaultDbPath,
22
22
  defaultFor
23
23
  };
24
- //# sourceMappingURL=src-BTVJBGZ5.js.map
24
+ //# sourceMappingURL=src-IKWDKNPH.js.map
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@leanlabsinnov/codegraph",
3
- "version": "0.1.4",
3
+ "version": "0.1.5",
4
4
  "description": "Live, queryable knowledge graph for your codebase. Indexes JS/TS into an embedded graph DB with embeddings and exposes an MCP server Claude Code and Cursor can call.",
5
5
  "keywords": [
6
6
  "mcp",
@@ -1 +0,0 @@
1
- {"version":3,"sources":["../../shared/src/kinds.ts","../../shared/src/embedding.ts","../../shared/src/config.ts","../../shared/src/ids.ts"],"sourcesContent":["export const NODE_KINDS = [\n \"File\",\n \"Function\",\n \"Class\",\n \"Interface\",\n \"Component\",\n \"Route\",\n \"Variable\",\n] as const;\n\nexport type NodeKind = (typeof NODE_KINDS)[number];\n\nexport const EDGE_KINDS = [\n \"IMPORTS\",\n \"CALLS\",\n \"RENDERS\",\n \"INHERITS\",\n \"DEFINES\",\n \"EXPORTS\",\n] as const;\n\nexport type EdgeKind = (typeof EDGE_KINDS)[number];\n\nexport const SUPPORTED_LANGUAGES = [\"typescript\", \"tsx\", \"javascript\", \"jsx\", \"python\"] as const;\nexport type Language = (typeof SUPPORTED_LANGUAGES)[number];\n","/**\n * Embedding namespace is the tuple that uniquely identifies a vector space.\n * Every stored embedding tags itself with this namespace string so switching\n * providers later triggers a re-embed instead of silent retrieval drift.\n *\n * Format: `${provider}:${model}:${dimension}`\n */\nexport interface EmbeddingNamespace {\n provider: string;\n model: string;\n dimension: number;\n}\n\nexport function namespaceToString(ns: EmbeddingNamespace): string {\n return `${ns.provider}:${ns.model}:${ns.dimension}`;\n}\n\nexport function parseNamespace(s: string): EmbeddingNamespace | null {\n const parts = s.split(\":\");\n if (parts.length !== 3) return null;\n const [provider, model, dimensionStr] = parts;\n if (!provider || !model || !dimensionStr) return null;\n const dimension = Number(dimensionStr);\n if (!Number.isFinite(dimension) || dimension <= 0) return null;\n return { provider, model, dimension };\n}\n","/**\n * Shape of `~/.codegraph/config.json` and the in-memory resolved config.\n *\n * The on-disk file is partial; defaults are applied on load. Keeping the\n * shape co-located with shared types so cli / ingestion / mcp-server all\n * speak the same vocabulary.\n */\n\nexport type LlmMode = \"managed\" | \"byo\" | \"local\";\n\nexport type LlmProvider = \"openai\" | \"anthropic\" | \"google\" | \"ollama\";\n\nexport interface LlmProviderConfig {\n provider: LlmProvider;\n model: string;\n}\n\nexport interface LlmEmbeddingConfig extends LlmProviderConfig {\n dimension: number;\n}\n\nexport interface LlmConfig {\n mode: LlmMode;\n generation: LlmProviderConfig;\n embeddings: LlmEmbeddingConfig;\n /** Optional API base URL override (e.g. for self-hosted OpenAI-compatible). */\n baseUrl?: string;\n}\n\nexport interface ServerConfig {\n /** SSE port for the local MCP server. */\n port: number;\n /** Single bearer token used by Claude Code / Cursor to authenticate. */\n bearerToken: string;\n}\n\n/**\n * Where the embedded Kuzu graph and any auxiliary on-disk state live. `dbPath` is\n * optional - when missing the storage layer falls back to `~/.codegraph/graph`.\n */\nexport interface DataConfig {\n dbPath?: string;\n}\n\nexport interface CodegraphConfig {\n llm: LlmConfig;\n server: ServerConfig;\n data: DataConfig;\n}\n\nexport const DEFAULT_CONFIG: CodegraphConfig = {\n llm: {\n mode: \"byo\",\n generation: { provider: \"openai\", model: \"gpt-4o-mini\" },\n embeddings: {\n provider: \"openai\",\n model: \"text-embedding-3-small\",\n dimension: 1536,\n },\n },\n server: {\n port: 3748,\n bearerToken: \"cg_local_dev_token\",\n },\n data: {},\n};\n\nexport const LLM_PRESETS: Record<string, Pick<LlmConfig, \"mode\" | \"generation\" | \"embeddings\">> = {\n \"managed-stub\": {\n mode: \"managed\",\n generation: { provider: \"openai\", model: \"gpt-4o-mini\" },\n embeddings: {\n provider: \"openai\",\n model: \"text-embedding-3-small\",\n dimension: 1536,\n },\n },\n \"byo-openai\": {\n mode: \"byo\",\n generation: { provider: \"openai\", model: \"gpt-4o-mini\" },\n embeddings: {\n provider: \"openai\",\n model: \"text-embedding-3-small\",\n dimension: 1536,\n },\n },\n \"byo-anthropic\": {\n mode: \"byo\",\n generation: { provider: \"anthropic\", model: \"claude-3-5-haiku-latest\" },\n // Anthropic has no embedding API; fall back to OpenAI for embeddings.\n embeddings: {\n provider: \"openai\",\n model: \"text-embedding-3-small\",\n dimension: 1536,\n },\n },\n \"byo-google\": {\n mode: \"byo\",\n generation: { provider: \"google\", model: \"gemini-1.5-flash-latest\" },\n embeddings: {\n provider: \"google\",\n model: \"text-embedding-004\",\n dimension: 768,\n },\n },\n \"local-ollama\": {\n mode: \"local\",\n generation: { provider: \"ollama\", model: \"qwen2.5-coder:1.5b\" },\n embeddings: {\n provider: \"ollama\",\n model: \"nomic-embed-text\",\n dimension: 768,\n },\n },\n /**\n * Any OpenAI-compatible local server (llama.cpp, LM Studio, vLLM, LocalAI).\n * `baseUrl` must be set separately in LlmConfig (e.g. http://localhost:8080/v1).\n * Model names default to common values but should be overridden to match whatever\n * the user has loaded in their server.\n */\n \"local-openai-compatible\": {\n mode: \"local\",\n generation: { provider: \"openai\", model: \"qwen2.5-coder\" },\n embeddings: {\n provider: \"openai\",\n model: \"nomic-embed-text\",\n dimension: 768,\n },\n },\n};\n","import { createHash } from \"node:crypto\";\nimport type { NodeKind } from \"./kinds.js\";\n\n/**\n * Compute a stable graph node ID of the form `${repoId}:${kind}:${sha1(path#name#line)}`.\n *\n * The hash is deterministic across runs as long as `path`, `name`, and `line` are stable,\n * so an `upsertNodes` pass over a repo will overwrite the same nodes rather than producing\n * duplicates.\n */\nexport function makeNodeId(input: {\n repoId: string;\n kind: NodeKind;\n path: string;\n name: string;\n line?: number;\n}): string {\n const { repoId, kind, path, name, line } = input;\n const fingerprint = `${path}#${name}#${line ?? 0}`;\n const hash = createHash(\"sha1\").update(fingerprint).digest(\"hex\");\n return `${repoId}:${kind}:${hash}`;\n}\n\n/** Compute a stable repo ID from an absolute path. */\nexport function makeRepoId(absolutePath: string): string {\n return createHash(\"sha1\").update(absolutePath).digest(\"hex\").slice(0, 12);\n}\n\n/** Convenience wrapper: stable ID for a File node. */\nexport function makeFileId(input: { repoId: string; path: string }): string {\n return makeNodeId({ repoId: input.repoId, kind: \"File\", path: input.path, name: input.path });\n}\n"],"mappings":";AAAO,IAAM,aAAa;AAAA,EACxB;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AACF;AAIO,IAAM,aAAa;AAAA,EACxB;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AACF;;;ACNO,SAAS,kBAAkB,IAAgC;AAChE,SAAO,GAAG,GAAG,QAAQ,IAAI,GAAG,KAAK,IAAI,GAAG,SAAS;AACnD;;;ACmCO,IAAM,iBAAkC;AAAA,EAC7C,KAAK;AAAA,IACH,MAAM;AAAA,IACN,YAAY,EAAE,UAAU,UAAU,OAAO,cAAc;AAAA,IACvD,YAAY;AAAA,MACV,UAAU;AAAA,MACV,OAAO;AAAA,MACP,WAAW;AAAA,IACb;AAAA,EACF;AAAA,EACA,QAAQ;AAAA,IACN,MAAM;AAAA,IACN,aAAa;AAAA,EACf;AAAA,EACA,MAAM,CAAC;AACT;AAEO,IAAM,cAAqF;AAAA,EAChG,gBAAgB;AAAA,IACd,MAAM;AAAA,IACN,YAAY,EAAE,UAAU,UAAU,OAAO,cAAc;AAAA,IACvD,YAAY;AAAA,MACV,UAAU;AAAA,MACV,OAAO;AAAA,MACP,WAAW;AAAA,IACb;AAAA,EACF;AAAA,EACA,cAAc;AAAA,IACZ,MAAM;AAAA,IACN,YAAY,EAAE,UAAU,UAAU,OAAO,cAAc;AAAA,IACvD,YAAY;AAAA,MACV,UAAU;AAAA,MACV,OAAO;AAAA,MACP,WAAW;AAAA,IACb;AAAA,EACF;AAAA,EACA,iBAAiB;AAAA,IACf,MAAM;AAAA,IACN,YAAY,EAAE,UAAU,aAAa,OAAO,0BAA0B;AAAA;AAAA,IAEtE,YAAY;AAAA,MACV,UAAU;AAAA,MACV,OAAO;AAAA,MACP,WAAW;AAAA,IACb;AAAA,EACF;AAAA,EACA,cAAc;AAAA,IACZ,MAAM;AAAA,IACN,YAAY,EAAE,UAAU,UAAU,OAAO,0BAA0B;AAAA,IACnE,YAAY;AAAA,MACV,UAAU;AAAA,MACV,OAAO;AAAA,MACP,WAAW;AAAA,IACb;AAAA,EACF;AAAA,EACA,gBAAgB;AAAA,IACd,MAAM;AAAA,IACN,YAAY,EAAE,UAAU,UAAU,OAAO,qBAAqB;AAAA,IAC9D,YAAY;AAAA,MACV,UAAU;AAAA,MACV,OAAO;AAAA,MACP,WAAW;AAAA,IACb;AAAA,EACF;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAOA,2BAA2B;AAAA,IACzB,MAAM;AAAA,IACN,YAAY,EAAE,UAAU,UAAU,OAAO,gBAAgB;AAAA,IACzD,YAAY;AAAA,MACV,UAAU;AAAA,MACV,OAAO;AAAA,MACP,WAAW;AAAA,IACb;AAAA,EACF;AACF;;;ACjIA,SAAS,kBAAkB;AAUpB,SAAS,WAAW,OAMhB;AACT,QAAM,EAAE,QAAQ,MAAM,MAAM,MAAM,KAAK,IAAI;AAC3C,QAAM,cAAc,GAAG,IAAI,IAAI,IAAI,IAAI,QAAQ,CAAC;AAChD,QAAM,OAAO,WAAW,MAAM,EAAE,OAAO,WAAW,EAAE,OAAO,KAAK;AAChE,SAAO,GAAG,MAAM,IAAI,IAAI,IAAI,IAAI;AAClC;AAQO,SAAS,WAAW,OAAiD;AAC1E,SAAO,WAAW,EAAE,QAAQ,MAAM,QAAQ,MAAM,QAAQ,MAAM,MAAM,MAAM,MAAM,MAAM,KAAK,CAAC;AAC9F;","names":[]}
@@ -1,10 +0,0 @@
1
- import {
2
- createLlmRouter,
3
- namespaceLabel
4
- } from "./chunk-WXBYICTK.js";
5
- import "./chunk-POGEFB23.js";
6
- export {
7
- createLlmRouter,
8
- namespaceLabel
9
- };
10
- //# sourceMappingURL=src-DBJQ22XR.js.map