@leanlabsinnov/codegraph 0.1.3 → 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.
@@ -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\"] 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:14b\" },\n embeddings: {\n provider: \"ollama\",\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,oBAAoB;AAAA,IAC7D,YAAY;AAAA,MACV,UAAU;AAAA,MACV,OAAO;AAAA,MACP,WAAW;AAAA,IACb;AAAA,EACF;AACF;;;AClHA,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-B2TIVKUB.js";
5
- import "./chunk-XGPZDCQ4.js";
6
- export {
7
- createLlmRouter,
8
- namespaceLabel
9
- };
10
- //# sourceMappingURL=src-UVET6JHH.js.map