@orquentra/codebuddy 2.5.0 → 2.6.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 (33) hide show
  1. package/README.md +8 -0
  2. package/dist/{chunk-KYK6RPAJ.js → chunk-JFDRBPYF.js} +2 -2
  3. package/dist/{chunk-JMWJ7V6Y.js → chunk-JPHJBCZB.js} +2 -2
  4. package/dist/{chunk-JMWJ7V6Y.js.map → chunk-JPHJBCZB.js.map} +1 -1
  5. package/dist/{chunk-ROQTT5ZO.js → chunk-N34XHWBA.js} +2 -2
  6. package/dist/{chunk-CQPCHMBS.js → chunk-SYWJG5NA.js} +2 -2
  7. package/dist/{chunk-3XYQGFPB.js → chunk-U4HAJLIB.js} +2 -2
  8. package/dist/{chunk-JDZ3VK26.js → chunk-UN57FKQX.js} +32 -5
  9. package/dist/chunk-UN57FKQX.js.map +1 -0
  10. package/dist/{chunk-Z5QB367W.js → chunk-VAKBJV26.js} +106 -22
  11. package/dist/chunk-VAKBJV26.js.map +1 -0
  12. package/dist/{chunk-4BYGTEJT.js → chunk-XBJQKCLU.js} +2 -2
  13. package/dist/cli/index.js +2 -2
  14. package/dist/{cloud-GP6G3EAK.js → cloud-7WM3YLI4.js} +3 -3
  15. package/dist/index.js +7 -7
  16. package/dist/{lean-command-DA4ZNKG3.js → lean-command-C5YPFKHP.js} +5 -5
  17. package/dist/{local-3NGNESNB.js → local-OTOY56B4.js} +3 -3
  18. package/dist/{main-BDVQAGAS.js → main-HFHLGID4.js} +201 -55
  19. package/dist/main-HFHLGID4.js.map +1 -0
  20. package/dist/{operations-EQGOFCBD.js → operations-LOBAQRLO.js} +6 -6
  21. package/package.json +1 -1
  22. package/dist/chunk-JDZ3VK26.js.map +0 -1
  23. package/dist/chunk-Z5QB367W.js.map +0 -1
  24. package/dist/main-BDVQAGAS.js.map +0 -1
  25. /package/dist/{chunk-KYK6RPAJ.js.map → chunk-JFDRBPYF.js.map} +0 -0
  26. /package/dist/{chunk-ROQTT5ZO.js.map → chunk-N34XHWBA.js.map} +0 -0
  27. /package/dist/{chunk-CQPCHMBS.js.map → chunk-SYWJG5NA.js.map} +0 -0
  28. /package/dist/{chunk-3XYQGFPB.js.map → chunk-U4HAJLIB.js.map} +0 -0
  29. /package/dist/{chunk-4BYGTEJT.js.map → chunk-XBJQKCLU.js.map} +0 -0
  30. /package/dist/{cloud-GP6G3EAK.js.map → cloud-7WM3YLI4.js.map} +0 -0
  31. /package/dist/{lean-command-DA4ZNKG3.js.map → lean-command-C5YPFKHP.js.map} +0 -0
  32. /package/dist/{local-3NGNESNB.js.map → local-OTOY56B4.js.map} +0 -0
  33. /package/dist/{operations-EQGOFCBD.js.map → operations-LOBAQRLO.js.map} +0 -0
package/README.md CHANGED
@@ -20,6 +20,14 @@ The setup wizard configures the project and agent integration. Project context
20
20
  works without a database; semantic memory recall optionally uses PostgreSQL
21
21
  with pgvector and a local Hugging Face embedding model (no token needed).
22
22
 
23
+ Run setup inside the project you want CodeBuddy to read. Claude Desktop
24
+ registration saves that folder's absolute path, so restarting the desktop app
25
+ does not change which project is indexed. `serve` requires an initialized
26
+ project (`.codebuddy/config.json`) and refuses filesystem roots and home folders.
27
+ Older desktop registrations without a project path can be repaired by running
28
+ `codebuddy claude install` from the initialized project folder, then restarting
29
+ Claude Desktop.
30
+
23
31
  ## What it does
24
32
 
25
33
  - **Task context:** relevant files, symbols, code excerpts, nearby dependencies,
@@ -1,6 +1,6 @@
1
1
  import {
2
2
  EMBEDDING_DIMENSIONS
3
- } from "./chunk-JMWJ7V6Y.js";
3
+ } from "./chunk-JPHJBCZB.js";
4
4
 
5
5
  // src/providers/cloud.ts
6
6
  var OPENROUTER_BASE_URL = "https://openrouter.ai/api/v1";
@@ -96,4 +96,4 @@ export {
96
96
  rerankOpenRouter,
97
97
  rerankHuggingFace
98
98
  };
99
- //# sourceMappingURL=chunk-KYK6RPAJ.js.map
99
+ //# sourceMappingURL=chunk-JFDRBPYF.js.map
@@ -8,7 +8,7 @@ var LOCAL_EMBEDDING_MODEL = {
8
8
  revision: "1dc7835ba0cb9c76a3618d0bf0c427c97671b3c8",
9
9
  schema: "transformers.js@4-q8-cls-l2",
10
10
  supportsBatch: true,
11
- relevanceFloor: 0.81
11
+ relevanceFloor: 0.84
12
12
  };
13
13
  var DEFAULT_RERANK_MODELS = {
14
14
  local: {
@@ -96,4 +96,4 @@ export {
96
96
  getModelContextWindow,
97
97
  assertCompatibleEmbeddingModels
98
98
  };
99
- //# sourceMappingURL=chunk-JMWJ7V6Y.js.map
99
+ //# sourceMappingURL=chunk-JPHJBCZB.js.map
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/providers/models.ts"],"sourcesContent":["export type ModelRole = \"primary\" | \"fallback\" | \"last_resort\";\nexport type ModelKind = \"embedding\" | \"llm\";\n\nexport type ModelDefinition = {\n id: string;\n role: ModelRole;\n kind: ModelKind;\n dimensions?: number;\n /** Actual deployment revision metadata; this does not pin Hugging Face requests. */\n revision?: string;\n schema?: string;\n contextWindow?: number;\n dailyCallBudget?: number;\n supportsBatch?: boolean;\n /**\n * Cosine at or above which a memory counts as semantically relevant to a\n * task on its own (without a shared word or path). Calibrated per model by\n * `npm run eval:semantic`; cosines are not comparable across models.\n */\n relevanceFloor?: number;\n};\n\nexport const EMBEDDING_DIMENSIONS = 384;\n\n/**\n * Default local embedder (ONNX via transformers.js, no network after the first\n * download): ModernBERT-based, 384-d, 8k context, trained on code retrieval.\n * The revision is a pinned commit so the embedding space never drifts.\n */\nexport const LOCAL_EMBEDDING_MODEL = {\n id: \"onnx-community/granite-embedding-small-english-r2-ONNX\",\n role: \"primary\",\n kind: \"embedding\",\n dimensions: EMBEDDING_DIMENSIONS,\n revision: \"1dc7835ba0cb9c76a3618d0bf0c427c97671b3c8\",\n schema: \"transformers.js@4-q8-cls-l2\",\n supportsBatch: true,\n relevanceFloor: 0.81,\n} satisfies ModelDefinition;\n\n/**\n * Cross-encoder rerankers per `rerank.provider` (off by default: on\n * `npm run eval:semantic` none beat granite's dense order). The local default\n * was the best small one measured (13/20 first results, ~20 ms per prompt).\n */\nexport const DEFAULT_RERANK_MODELS = {\n local: {\n id: \"mixedbread-ai/mxbai-rerank-xsmall-v1\",\n revision: \"b5c6e9da73abc3711f593f705371cdbe9e0fe422\",\n },\n huggingface: { id: \"BAAI/bge-reranker-v2-m3\" },\n openrouter: { id: \"cohere/rerank-v3.5\" },\n} as const;\n\n/** Default hosted embedders; each must return 384-d vectors. */\nexport const DEFAULT_CLOUD_EMBEDDING_MODELS = {\n huggingface: \"sentence-transformers/all-MiniLM-L6-v2\",\n openrouter: \"openai/text-embedding-3-small\",\n} as const;\n\nexport const DEFAULT_EMBEDDING_MODELS = [\n {\n id: \"sentence-transformers/all-MiniLM-L6-v2\",\n role: \"primary\",\n kind: \"embedding\",\n dimensions: EMBEDDING_DIMENSIONS,\n dailyCallBudget: 1_000,\n supportsBatch: true,\n relevanceFloor: 0.42,\n },\n {\n id: \"BAAI/bge-small-en-v1.5\",\n role: \"fallback\",\n kind: \"embedding\",\n dimensions: EMBEDDING_DIMENSIONS,\n dailyCallBudget: 1_000,\n supportsBatch: true,\n relevanceFloor: 0.69,\n },\n] satisfies ModelDefinition[];\n\nexport const DEFAULT_LLM_MODELS = [\n {\n id: \"meta-llama/Llama-3.2-3B-Instruct\",\n role: \"primary\",\n kind: \"llm\",\n contextWindow: 131_072,\n dailyCallBudget: 300,\n },\n {\n id: \"Qwen/Qwen2.5-7B-Instruct\",\n role: \"fallback\",\n kind: \"llm\",\n contextWindow: 32_768,\n dailyCallBudget: 300,\n },\n {\n id: \"mistralai/Mistral-7B-Instruct-v0.3\",\n role: \"last_resort\",\n kind: \"llm\",\n contextWindow: 32_768,\n dailyCallBudget: 300,\n },\n] satisfies ModelDefinition[];\n\nexport const MODEL_REGISTRY: ModelDefinition[] = [\n LOCAL_EMBEDDING_MODEL,\n ...DEFAULT_EMBEDDING_MODELS,\n ...DEFAULT_LLM_MODELS,\n];\n\nexport function getModelDefinition(modelId: string): ModelDefinition | undefined {\n return MODEL_REGISTRY.find((model) => model.id === modelId);\n}\n\nexport function getModelContextWindow(modelId: string): number | undefined {\n return getModelDefinition(modelId)?.contextWindow;\n}\n\nexport function assertCompatibleEmbeddingModels(models: ModelDefinition[]): void {\n const mismatchedModel = models.find((model) => model.dimensions !== EMBEDDING_DIMENSIONS);\n\n if (mismatchedModel) {\n throw new Error(\n `Embedding model ${mismatchedModel.id} has ${mismatchedModel.dimensions ?? \"unknown\"} dimensions; expected ${EMBEDDING_DIMENSIONS}.`,\n );\n }\n}\n"],"mappings":";AAsBO,IAAM,uBAAuB;AAO7B,IAAM,wBAAwB;AAAA,EACnC,IAAI;AAAA,EACJ,MAAM;AAAA,EACN,MAAM;AAAA,EACN,YAAY;AAAA,EACZ,UAAU;AAAA,EACV,QAAQ;AAAA,EACR,eAAe;AAAA,EACf,gBAAgB;AAClB;AAOO,IAAM,wBAAwB;AAAA,EACnC,OAAO;AAAA,IACL,IAAI;AAAA,IACJ,UAAU;AAAA,EACZ;AAAA,EACA,aAAa,EAAE,IAAI,0BAA0B;AAAA,EAC7C,YAAY,EAAE,IAAI,qBAAqB;AACzC;AAGO,IAAM,iCAAiC;AAAA,EAC5C,aAAa;AAAA,EACb,YAAY;AACd;AAEO,IAAM,2BAA2B;AAAA,EACtC;AAAA,IACE,IAAI;AAAA,IACJ,MAAM;AAAA,IACN,MAAM;AAAA,IACN,YAAY;AAAA,IACZ,iBAAiB;AAAA,IACjB,eAAe;AAAA,IACf,gBAAgB;AAAA,EAClB;AAAA,EACA;AAAA,IACE,IAAI;AAAA,IACJ,MAAM;AAAA,IACN,MAAM;AAAA,IACN,YAAY;AAAA,IACZ,iBAAiB;AAAA,IACjB,eAAe;AAAA,IACf,gBAAgB;AAAA,EAClB;AACF;AAEO,IAAM,qBAAqB;AAAA,EAChC;AAAA,IACE,IAAI;AAAA,IACJ,MAAM;AAAA,IACN,MAAM;AAAA,IACN,eAAe;AAAA,IACf,iBAAiB;AAAA,EACnB;AAAA,EACA;AAAA,IACE,IAAI;AAAA,IACJ,MAAM;AAAA,IACN,MAAM;AAAA,IACN,eAAe;AAAA,IACf,iBAAiB;AAAA,EACnB;AAAA,EACA;AAAA,IACE,IAAI;AAAA,IACJ,MAAM;AAAA,IACN,MAAM;AAAA,IACN,eAAe;AAAA,IACf,iBAAiB;AAAA,EACnB;AACF;AAEO,IAAM,iBAAoC;AAAA,EAC/C;AAAA,EACA,GAAG;AAAA,EACH,GAAG;AACL;AAEO,SAAS,mBAAmB,SAA8C;AAC/E,SAAO,eAAe,KAAK,CAAC,UAAU,MAAM,OAAO,OAAO;AAC5D;AAEO,SAAS,sBAAsB,SAAqC;AACzE,SAAO,mBAAmB,OAAO,GAAG;AACtC;AAEO,SAAS,gCAAgC,QAAiC;AAC/E,QAAM,kBAAkB,OAAO,KAAK,CAAC,UAAU,MAAM,eAAe,oBAAoB;AAExF,MAAI,iBAAiB;AACnB,UAAM,IAAI;AAAA,MACR,mBAAmB,gBAAgB,EAAE,QAAQ,gBAAgB,cAAc,SAAS,yBAAyB,oBAAoB;AAAA,IACnI;AAAA,EACF;AACF;","names":[]}
1
+ {"version":3,"sources":["../src/providers/models.ts"],"sourcesContent":["export type ModelRole = \"primary\" | \"fallback\" | \"last_resort\";\nexport type ModelKind = \"embedding\" | \"llm\";\n\nexport type ModelDefinition = {\n id: string;\n role: ModelRole;\n kind: ModelKind;\n dimensions?: number;\n /** Actual deployment revision metadata; this does not pin Hugging Face requests. */\n revision?: string;\n schema?: string;\n contextWindow?: number;\n dailyCallBudget?: number;\n supportsBatch?: boolean;\n /**\n * Cosine at or above which a memory counts as semantically relevant to a\n * task on its own (without a shared word or path). Calibrated per model by\n * `npm run eval:semantic`; cosines are not comparable across models.\n */\n relevanceFloor?: number;\n};\n\nexport const EMBEDDING_DIMENSIONS = 384;\n\n/**\n * Default local embedder (ONNX via transformers.js, no network after the first\n * download): ModernBERT-based, 384-d, 8k context, trained on code retrieval.\n * The revision is a pinned commit so the embedding space never drifts.\n */\nexport const LOCAL_EMBEDDING_MODEL = {\n id: \"onnx-community/granite-embedding-small-english-r2-ONNX\",\n role: \"primary\",\n kind: \"embedding\",\n dimensions: EMBEDDING_DIMENSIONS,\n revision: \"1dc7835ba0cb9c76a3618d0bf0c427c97671b3c8\",\n schema: \"transformers.js@4-q8-cls-l2\",\n supportsBatch: true,\n relevanceFloor: 0.84,\n} satisfies ModelDefinition;\n\n/**\n * Cross-encoder rerankers per `rerank.provider` (off by default: on\n * `npm run eval:semantic` none beat granite's dense order). The local default\n * was the best small one measured (13/20 first results, ~20 ms per prompt).\n */\nexport const DEFAULT_RERANK_MODELS = {\n local: {\n id: \"mixedbread-ai/mxbai-rerank-xsmall-v1\",\n revision: \"b5c6e9da73abc3711f593f705371cdbe9e0fe422\",\n },\n huggingface: { id: \"BAAI/bge-reranker-v2-m3\" },\n openrouter: { id: \"cohere/rerank-v3.5\" },\n} as const;\n\n/** Default hosted embedders; each must return 384-d vectors. */\nexport const DEFAULT_CLOUD_EMBEDDING_MODELS = {\n huggingface: \"sentence-transformers/all-MiniLM-L6-v2\",\n openrouter: \"openai/text-embedding-3-small\",\n} as const;\n\nexport const DEFAULT_EMBEDDING_MODELS = [\n {\n id: \"sentence-transformers/all-MiniLM-L6-v2\",\n role: \"primary\",\n kind: \"embedding\",\n dimensions: EMBEDDING_DIMENSIONS,\n dailyCallBudget: 1_000,\n supportsBatch: true,\n relevanceFloor: 0.42,\n },\n {\n id: \"BAAI/bge-small-en-v1.5\",\n role: \"fallback\",\n kind: \"embedding\",\n dimensions: EMBEDDING_DIMENSIONS,\n dailyCallBudget: 1_000,\n supportsBatch: true,\n relevanceFloor: 0.69,\n },\n] satisfies ModelDefinition[];\n\nexport const DEFAULT_LLM_MODELS = [\n {\n id: \"meta-llama/Llama-3.2-3B-Instruct\",\n role: \"primary\",\n kind: \"llm\",\n contextWindow: 131_072,\n dailyCallBudget: 300,\n },\n {\n id: \"Qwen/Qwen2.5-7B-Instruct\",\n role: \"fallback\",\n kind: \"llm\",\n contextWindow: 32_768,\n dailyCallBudget: 300,\n },\n {\n id: \"mistralai/Mistral-7B-Instruct-v0.3\",\n role: \"last_resort\",\n kind: \"llm\",\n contextWindow: 32_768,\n dailyCallBudget: 300,\n },\n] satisfies ModelDefinition[];\n\nexport const MODEL_REGISTRY: ModelDefinition[] = [\n LOCAL_EMBEDDING_MODEL,\n ...DEFAULT_EMBEDDING_MODELS,\n ...DEFAULT_LLM_MODELS,\n];\n\nexport function getModelDefinition(modelId: string): ModelDefinition | undefined {\n return MODEL_REGISTRY.find((model) => model.id === modelId);\n}\n\nexport function getModelContextWindow(modelId: string): number | undefined {\n return getModelDefinition(modelId)?.contextWindow;\n}\n\nexport function assertCompatibleEmbeddingModels(models: ModelDefinition[]): void {\n const mismatchedModel = models.find((model) => model.dimensions !== EMBEDDING_DIMENSIONS);\n\n if (mismatchedModel) {\n throw new Error(\n `Embedding model ${mismatchedModel.id} has ${mismatchedModel.dimensions ?? \"unknown\"} dimensions; expected ${EMBEDDING_DIMENSIONS}.`,\n );\n }\n}\n"],"mappings":";AAsBO,IAAM,uBAAuB;AAO7B,IAAM,wBAAwB;AAAA,EACnC,IAAI;AAAA,EACJ,MAAM;AAAA,EACN,MAAM;AAAA,EACN,YAAY;AAAA,EACZ,UAAU;AAAA,EACV,QAAQ;AAAA,EACR,eAAe;AAAA,EACf,gBAAgB;AAClB;AAOO,IAAM,wBAAwB;AAAA,EACnC,OAAO;AAAA,IACL,IAAI;AAAA,IACJ,UAAU;AAAA,EACZ;AAAA,EACA,aAAa,EAAE,IAAI,0BAA0B;AAAA,EAC7C,YAAY,EAAE,IAAI,qBAAqB;AACzC;AAGO,IAAM,iCAAiC;AAAA,EAC5C,aAAa;AAAA,EACb,YAAY;AACd;AAEO,IAAM,2BAA2B;AAAA,EACtC;AAAA,IACE,IAAI;AAAA,IACJ,MAAM;AAAA,IACN,MAAM;AAAA,IACN,YAAY;AAAA,IACZ,iBAAiB;AAAA,IACjB,eAAe;AAAA,IACf,gBAAgB;AAAA,EAClB;AAAA,EACA;AAAA,IACE,IAAI;AAAA,IACJ,MAAM;AAAA,IACN,MAAM;AAAA,IACN,YAAY;AAAA,IACZ,iBAAiB;AAAA,IACjB,eAAe;AAAA,IACf,gBAAgB;AAAA,EAClB;AACF;AAEO,IAAM,qBAAqB;AAAA,EAChC;AAAA,IACE,IAAI;AAAA,IACJ,MAAM;AAAA,IACN,MAAM;AAAA,IACN,eAAe;AAAA,IACf,iBAAiB;AAAA,EACnB;AAAA,EACA;AAAA,IACE,IAAI;AAAA,IACJ,MAAM;AAAA,IACN,MAAM;AAAA,IACN,eAAe;AAAA,IACf,iBAAiB;AAAA,EACnB;AAAA,EACA;AAAA,IACE,IAAI;AAAA,IACJ,MAAM;AAAA,IACN,MAAM;AAAA,IACN,eAAe;AAAA,IACf,iBAAiB;AAAA,EACnB;AACF;AAEO,IAAM,iBAAoC;AAAA,EAC/C;AAAA,EACA,GAAG;AAAA,EACH,GAAG;AACL;AAEO,SAAS,mBAAmB,SAA8C;AAC/E,SAAO,eAAe,KAAK,CAAC,UAAU,MAAM,OAAO,OAAO;AAC5D;AAEO,SAAS,sBAAsB,SAAqC;AACzE,SAAO,mBAAmB,OAAO,GAAG;AACtC;AAEO,SAAS,gCAAgC,QAAiC;AAC/E,QAAM,kBAAkB,OAAO,KAAK,CAAC,UAAU,MAAM,eAAe,oBAAoB;AAExF,MAAI,iBAAiB;AACnB,UAAM,IAAI;AAAA,MACR,mBAAmB,gBAAgB,EAAE,QAAQ,gBAAgB,cAAc,SAAS,yBAAyB,oBAAoB;AAAA,IACnI;AAAA,EACF;AACF;","names":[]}
@@ -8,7 +8,7 @@ import {
8
8
  detectTestCommand,
9
9
  estimateTokens,
10
10
  findCoveringTest
11
- } from "./chunk-CQPCHMBS.js";
11
+ } from "./chunk-SYWJG5NA.js";
12
12
  import {
13
13
  NON_SOURCE_PATH,
14
14
  discoverTaskPaths,
@@ -172,4 +172,4 @@ export {
172
172
  renderLeanBlock,
173
173
  runLeanHookCommand
174
174
  };
175
- //# sourceMappingURL=chunk-ROQTT5ZO.js.map
175
+ //# sourceMappingURL=chunk-N34XHWBA.js.map
@@ -1,7 +1,7 @@
1
1
  import {
2
2
  countTokens,
3
3
  generateEntityId
4
- } from "./chunk-4BYGTEJT.js";
4
+ } from "./chunk-XBJQKCLU.js";
5
5
  import {
6
6
  writeAtomic
7
7
  } from "./chunk-776EQXDV.js";
@@ -316,4 +316,4 @@ export {
316
316
  findCoveringTest,
317
317
  detectTestCommand
318
318
  };
319
- //# sourceMappingURL=chunk-CQPCHMBS.js.map
319
+ //# sourceMappingURL=chunk-SYWJG5NA.js.map
@@ -1,6 +1,6 @@
1
1
  import {
2
2
  LOCAL_EMBEDDING_MODEL
3
- } from "./chunk-JMWJ7V6Y.js";
3
+ } from "./chunk-JPHJBCZB.js";
4
4
 
5
5
  // src/providers/local.ts
6
6
  import { homedir } from "os";
@@ -88,4 +88,4 @@ export {
88
88
  LocalModelProvider,
89
89
  rerankLocally
90
90
  };
91
- //# sourceMappingURL=chunk-3XYQGFPB.js.map
91
+ //# sourceMappingURL=chunk-U4HAJLIB.js.map
@@ -9,13 +9,13 @@ import {
9
9
  countTokens,
10
10
  generateEntityId,
11
11
  generateSessionId
12
- } from "./chunk-4BYGTEJT.js";
12
+ } from "./chunk-XBJQKCLU.js";
13
13
  import {
14
14
  OpenRouterEmbeddingProvider
15
- } from "./chunk-KYK6RPAJ.js";
15
+ } from "./chunk-JFDRBPYF.js";
16
16
  import {
17
17
  LocalModelProvider
18
- } from "./chunk-3XYQGFPB.js";
18
+ } from "./chunk-U4HAJLIB.js";
19
19
  import {
20
20
  DEFAULT_CLOUD_EMBEDDING_MODELS,
21
21
  DEFAULT_EMBEDDING_MODELS,
@@ -23,7 +23,7 @@ import {
23
23
  EMBEDDING_DIMENSIONS,
24
24
  assertCompatibleEmbeddingModels,
25
25
  getModelDefinition
26
- } from "./chunk-JMWJ7V6Y.js";
26
+ } from "./chunk-JPHJBCZB.js";
27
27
  import {
28
28
  MISSING_DATABASE_URL,
29
29
  assertNoSymlinkBetween,
@@ -549,6 +549,32 @@ function lexicalTerms(query) {
549
549
  )
550
550
  ].filter((term) => !QUERY_STOPWORDS.has(term)).slice(0, 32).map((term) => term.slice(0, 64));
551
551
  }
552
+ var CLAIM_BOILERPLATE = /* @__PURE__ */ new Set([
553
+ "decided",
554
+ "decide",
555
+ "decision",
556
+ "made",
557
+ "use",
558
+ "uses",
559
+ "used",
560
+ "using",
561
+ "now",
562
+ "going",
563
+ "will"
564
+ ]);
565
+ function termOverlap(a, b) {
566
+ const terms = (text2) => new Set(
567
+ (text2.toLowerCase().match(/[\p{L}\p{N}_]+/gu) ?? []).filter(
568
+ (term) => !QUERY_STOPWORDS.has(term) && !CLAIM_BOILERPLATE.has(term)
569
+ )
570
+ );
571
+ const left = terms(a);
572
+ const right = terms(b);
573
+ if (left.size === 0 || right.size === 0) return 0;
574
+ let shared = 0;
575
+ for (const term of left) if (right.has(term)) shared += 1;
576
+ return shared / (left.size + right.size - shared);
577
+ }
552
578
 
553
579
  // src/providers/embedding-space.ts
554
580
  function embeddingSpace(response) {
@@ -3979,6 +4005,7 @@ async function checkModels(provider, skip = false) {
3979
4005
  export {
3980
4006
  isEligibleMemory,
3981
4007
  lexicalTerms,
4008
+ termOverlap,
3982
4009
  embeddingSpaceKey,
3983
4010
  DefaultPolicy,
3984
4011
  HuggingFaceProvider,
@@ -4003,4 +4030,4 @@ export {
4003
4030
  inspectNamespace,
4004
4031
  runDoctor
4005
4032
  };
4006
- //# sourceMappingURL=chunk-JDZ3VK26.js.map
4033
+ //# sourceMappingURL=chunk-UN57FKQX.js.map