@vivantel/virage-mcp 0.1.10 → 0.1.13

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/README.md CHANGED
@@ -62,13 +62,13 @@ claude mcp add virage -- npx @vivantel/virage-mcp --config ./virage.config.json
62
62
  import { createMcpServer } from "@vivantel/virage-mcp";
63
63
  import {
64
64
  loadConfig,
65
- EmbeddingsDb,
66
- defaultEmbeddingsDb,
65
+ VirageDb,
66
+ defaultVirageDb,
67
67
  } from "@vivantel/virage-core";
68
68
  import { StdioServerTransport } from "@modelcontextprotocol/sdk/server/stdio.js";
69
69
 
70
70
  const cfg = await loadConfig("./virage.config.json");
71
- const db = new EmbeddingsDb(defaultEmbeddingsDb());
71
+ const db = new VirageDb(defaultVirageDb());
72
72
  await cfg.vectorStore.initialize();
73
73
 
74
74
  const server = createMcpServer({
@@ -82,7 +82,7 @@ await server.connect(new StdioServerTransport());
82
82
  ## Requirements
83
83
 
84
84
  - Node.js ≥ 18
85
- - A configured Virage project with `virage.config.json` and a populated `.virage/embeddings.db`
85
+ - A configured Virage project with `virage.config.json` and a populated `.virage/virage.db`
86
86
 
87
87
  ## License
88
88
 
package/dist/cli.js CHANGED
@@ -1,7 +1,7 @@
1
1
  #!/usr/bin/env node
2
2
  import { watch } from "fs";
3
3
  import { StdioServerTransport } from "@modelcontextprotocol/sdk/server/stdio.js";
4
- import { loadConfig, EmbeddingsDb, defaultEmbeddingsDb, } from "@vivantel/virage-core";
4
+ import { loadConfig, VirageDb, defaultVirageDb, TelemetryManager, TelemetryFlusher, DEFAULT_TELEMETRY_CONFIG, } from "@vivantel/virage-core";
5
5
  import { createMcpServer } from "./server.js";
6
6
  const configIdx = process.argv.indexOf("--config");
7
7
  if (configIdx === -1 || !process.argv[configIdx + 1]) {
@@ -10,11 +10,30 @@ if (configIdx === -1 || !process.argv[configIdx + 1]) {
10
10
  }
11
11
  const configPath = process.argv[configIdx + 1];
12
12
  const cfg = await loadConfig(configPath);
13
- const dbPath = defaultEmbeddingsDb();
14
- const db = new EmbeddingsDb(dbPath);
13
+ const telemetryConfig = cfg.telemetry ?? DEFAULT_TELEMETRY_CONFIG;
14
+ const dbPath = defaultVirageDb();
15
+ const db = new VirageDb(dbPath);
15
16
  await cfg.vectorStore.initialize();
16
- const ctx = { db, embedder: cfg.embedder, vectorStore: cfg.vectorStore };
17
- const server = createMcpServer(ctx);
17
+ // Telemetry
18
+ const telemetryMgr = new TelemetryManager(db, telemetryConfig);
19
+ telemetryMgr.printFirstRunDisclosure();
20
+ const session = telemetryMgr.startSession({
21
+ embeddingModel: cfg.embedder.model,
22
+ chunkingStrategy: cfg.chunkers.map((c) => c.name).join(","),
23
+ storeType: cfg.vectorStore.name,
24
+ nodeVersion: process.version,
25
+ os: process.platform,
26
+ });
27
+ const flusher = new TelemetryFlusher(db, telemetryConfig);
28
+ void flusher.retryPending();
29
+ const stopPeriodicFlush = flusher.startPeriodicFlush(session.id);
30
+ const ctx = {
31
+ db,
32
+ embedder: cfg.embedder,
33
+ vectorStore: cfg.vectorStore,
34
+ session,
35
+ };
36
+ const server = createMcpServer(ctx, telemetryConfig);
18
37
  const transport = new StdioServerTransport();
19
38
  await server.connect(transport);
20
39
  // Watch the LanceDB directory (or any file-backed store) and reinitialize
@@ -43,6 +62,9 @@ if (lanceDbUri &&
43
62
  }
44
63
  }
45
64
  async function shutdown() {
65
+ stopPeriodicFlush();
66
+ session.end();
67
+ await flusher.flush(session.id);
46
68
  await cfg.vectorStore.close?.();
47
69
  db.close();
48
70
  process.exit(0);
package/dist/cli.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"cli.js","sourceRoot":"","sources":["../src/cli.ts"],"names":[],"mappings":";AACA,OAAO,EAAE,KAAK,EAAE,MAAM,IAAI,CAAC;AAC3B,OAAO,EAAE,oBAAoB,EAAE,MAAM,2CAA2C,CAAC;AACjF,OAAO,EACL,UAAU,EACV,YAAY,EACZ,mBAAmB,GACpB,MAAM,uBAAuB,CAAC;AAC/B,OAAO,EAAE,eAAe,EAAE,MAAM,aAAa,CAAC;AAE9C,MAAM,SAAS,GAAG,OAAO,CAAC,IAAI,CAAC,OAAO,CAAC,UAAU,CAAC,CAAC;AACnD,IAAI,SAAS,KAAK,CAAC,CAAC,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,SAAS,GAAG,CAAC,CAAC,EAAE,CAAC;IACrD,OAAO,CAAC,MAAM,CAAC,KAAK,CAClB,2DAA2D,CAC5D,CAAC;IACF,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;AAClB,CAAC;AACD,MAAM,UAAU,GAAG,OAAO,CAAC,IAAI,CAAC,SAAS,GAAG,CAAC,CAAC,CAAC;AAE/C,MAAM,GAAG,GAAG,MAAM,UAAU,CAAC,UAAU,CAAC,CAAC;AAEzC,MAAM,MAAM,GAAG,mBAAmB,EAAE,CAAC;AACrC,MAAM,EAAE,GAAG,IAAI,YAAY,CAAC,MAAM,CAAC,CAAC;AACpC,MAAM,GAAG,CAAC,WAAW,CAAC,UAAU,EAAE,CAAC;AAEnC,MAAM,GAAG,GAAG,EAAE,EAAE,EAAE,QAAQ,EAAE,GAAG,CAAC,QAAQ,EAAE,WAAW,EAAE,GAAG,CAAC,WAAW,EAAE,CAAC;AACzE,MAAM,MAAM,GAAG,eAAe,CAAC,GAAG,CAAC,CAAC;AACpC,MAAM,SAAS,GAAG,IAAI,oBAAoB,EAAE,CAAC;AAC7C,MAAM,MAAM,CAAC,OAAO,CAAC,SAAS,CAAC,CAAC;AAEhC,0EAA0E;AAC1E,4DAA4D;AAC5D,MAAM,UAAU,GACd,GAAG,CAAC,WACL,CAAC,GAAG,CAAC;AACN,IACE,UAAU;IACV,CAAC,UAAU,CAAC,UAAU,CAAC,OAAO,CAAC;IAC/B,CAAC,UAAU,CAAC,UAAU,CAAC,UAAU,CAAC,EAClC,CAAC;IACD,IAAI,QAAQ,GAAyC,IAAI,CAAC;IAC1D,IAAI,CAAC;QACH,KAAK,CAAC,UAAU,EAAE,EAAE,SAAS,EAAE,KAAK,EAAE,EAAE,GAAG,EAAE;YAC3C,IAAI,QAAQ;gBAAE,YAAY,CAAC,QAAQ,CAAC,CAAC;YACrC,QAAQ,GAAG,UAAU,CAAC,KAAK,IAAI,EAAE;gBAC/B,IAAI,CAAC;oBACH,MAAM,GAAG,CAAC,WAAW,CAAC,UAAU,EAAE,CAAC;gBACrC,CAAC;gBAAC,MAAM,CAAC;oBACP,sCAAsC;gBACxC,CAAC;YACH,CAAC,EAAE,GAAG,CAAC,CAAC;QACV,CAAC,CAAC,CAAC;IACL,CAAC;IAAC,MAAM,CAAC;QACP,6CAA6C;IAC/C,CAAC;AACH,CAAC;AAED,KAAK,UAAU,QAAQ;IACrB,MAAM,GAAG,CAAC,WAAW,CAAC,KAAK,EAAE,EAAE,CAAC;IAChC,EAAE,CAAC,KAAK,EAAE,CAAC;IACX,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;AAClB,CAAC;AAED,OAAO,CAAC,EAAE,CAAC,QAAQ,EAAE,GAAG,EAAE,CAAC,KAAK,QAAQ,EAAE,CAAC,CAAC;AAC5C,OAAO,CAAC,EAAE,CAAC,SAAS,EAAE,GAAG,EAAE,CAAC,KAAK,QAAQ,EAAE,CAAC,CAAC"}
1
+ {"version":3,"file":"cli.js","sourceRoot":"","sources":["../src/cli.ts"],"names":[],"mappings":"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"}
package/dist/server.d.ts CHANGED
@@ -1,4 +1,5 @@
1
1
  import { McpServer } from "@modelcontextprotocol/sdk/server/mcp.js";
2
+ import type { TelemetryConfig } from "@vivantel/virage-core";
2
3
  import type { McpContext } from "./tools.js";
3
- export declare function createMcpServer(ctx: McpContext): McpServer;
4
+ export declare function createMcpServer(ctx: McpContext, telemetryConfig?: TelemetryConfig): McpServer;
4
5
  //# sourceMappingURL=server.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"server.d.ts","sourceRoot":"","sources":["../src/server.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,MAAM,yCAAyC,CAAC;AAEpE,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,YAAY,CAAC;AAS7C,wBAAgB,eAAe,CAAC,GAAG,EAAE,UAAU,GAAG,SAAS,CAwF1D"}
1
+ {"version":3,"file":"server.d.ts","sourceRoot":"","sources":["../src/server.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,MAAM,yCAAyC,CAAC;AAEpE,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,uBAAuB,CAAC;AAC7D,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,YAAY,CAAC;AAU7C,wBAAgB,eAAe,CAC7B,GAAG,EAAE,UAAU,EACf,eAAe,CAAC,EAAE,eAAe,GAChC,SAAS,CAoJX"}
package/dist/server.js CHANGED
@@ -1,7 +1,7 @@
1
1
  import { McpServer } from "@modelcontextprotocol/sdk/server/mcp.js";
2
2
  import { z } from "zod";
3
- import { handleSearch, handleListChunks, handleGetChunk, handleListSourceFiles, handleGetStats, } from "./tools.js";
4
- export function createMcpServer(ctx) {
3
+ import { handleSearch, handleListChunks, handleGetChunk, handleListSourceFiles, handleGetStats, handleRagFeedback, } from "./tools.js";
4
+ export function createMcpServer(ctx, telemetryConfig) {
5
5
  const server = new McpServer({ name: "virage-mcp", version: "0.1.0" });
6
6
  server.tool("search", "Semantic vector search over the indexed documents. Returns top matching chunks with similarity scores.", {
7
7
  query: z.string().describe("Search query text"),
@@ -57,6 +57,58 @@ export function createMcpServer(ctx) {
57
57
  content: [{ type: "text", text: JSON.stringify(result, null, 2) }],
58
58
  };
59
59
  });
60
+ if (telemetryConfig?.tiers.explicit_feedback.enabled) {
61
+ server.tool("rag_feedback", "Evaluate the quality of the last search results. " +
62
+ "Call when: search returned 0 results, more than 10 results, results were " +
63
+ "insufficient to answer, or user corrected your answer. " +
64
+ "Skip for clearly successful searches.", {
65
+ search_query_id: z
66
+ .string()
67
+ .optional()
68
+ .describe("ID of the search to evaluate (omit to use the most recent search)"),
69
+ was_useful: z
70
+ .boolean()
71
+ .describe("Whether the search results were useful"),
72
+ metrics: z
73
+ .object({
74
+ context_relevance: z
75
+ .number()
76
+ .min(0)
77
+ .max(1)
78
+ .optional()
79
+ .describe("Fraction of results relevant to the query (0–1)"),
80
+ context_completeness: z
81
+ .number()
82
+ .min(0)
83
+ .max(1)
84
+ .optional()
85
+ .describe("How completely the results covered the topic (0–1)"),
86
+ noise_ratio: z
87
+ .number()
88
+ .min(0)
89
+ .max(1)
90
+ .optional()
91
+ .describe("Fraction of results that were irrelevant (0–1)"),
92
+ missing_category: z
93
+ .enum([
94
+ "missing_error_handling",
95
+ "missing_config_example",
96
+ "missing_api_reference",
97
+ "missing_type_signature",
98
+ "missing_test_coverage",
99
+ "other",
100
+ ])
101
+ .optional()
102
+ .describe("Category of missing information when not useful"),
103
+ })
104
+ .optional(),
105
+ }, async (args) => {
106
+ handleRagFeedback(args, ctx);
107
+ return {
108
+ content: [{ type: "text", text: JSON.stringify({ ok: true }) }],
109
+ };
110
+ });
111
+ }
60
112
  return server;
61
113
  }
62
114
  //# sourceMappingURL=server.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"server.js","sourceRoot":"","sources":["../src/server.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"server.js","sourceRoot":"","sources":["../src/server.ts"],"names":[],"mappings":"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"}
package/dist/tools.d.ts CHANGED
@@ -1,8 +1,11 @@
1
- import type { EmbeddingsDb, EmbeddingProvider, VectorStore } from "@vivantel/virage-core";
1
+ import type { VirageDb, EmbeddingProvider, VectorStore, TelemetrySession } from "@vivantel/virage-core";
2
2
  export interface McpContext {
3
- db: EmbeddingsDb;
3
+ db: VirageDb;
4
4
  embedder: EmbeddingProvider;
5
5
  vectorStore: VectorStore;
6
+ session?: TelemetrySession;
7
+ lastSearchId?: string;
8
+ feedbackArmed?: boolean;
6
9
  }
7
10
  export declare function handleSearch(args: {
8
11
  query: string;
@@ -15,6 +18,17 @@ export declare function handleSearch(args: {
15
18
  similarity: number;
16
19
  sourceFile: string;
17
20
  }[]>;
21
+ export interface RagFeedbackArgs {
22
+ search_query_id?: string;
23
+ was_useful: boolean;
24
+ metrics?: {
25
+ context_relevance?: number;
26
+ context_completeness?: number;
27
+ noise_ratio?: number;
28
+ missing_category?: string;
29
+ };
30
+ }
31
+ export declare function handleRagFeedback(args: RagFeedbackArgs, ctx: McpContext): void;
18
32
  export declare function handleListChunks(args: {
19
33
  source_file?: string;
20
34
  limit?: number;
@@ -1 +1 @@
1
- {"version":3,"file":"tools.d.ts","sourceRoot":"","sources":["../src/tools.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EACV,YAAY,EACZ,iBAAiB,EACjB,WAAW,EACZ,MAAM,uBAAuB,CAAC;AAE/B,MAAM,WAAW,UAAU;IACzB,EAAE,EAAE,YAAY,CAAC;IACjB,QAAQ,EAAE,iBAAiB,CAAC;IAC5B,WAAW,EAAE,WAAW,CAAC;CAC1B;AAED,wBAAsB,YAAY,CAChC,IAAI,EAAE;IAAE,KAAK,EAAE,MAAM,CAAC;IAAC,KAAK,CAAC,EAAE,MAAM,CAAC;IAAC,UAAU,CAAC,EAAE,MAAM,CAAA;CAAE,EAC5D,GAAG,EAAE,UAAU;;;;;;KAehB;AAED,wBAAsB,gBAAgB,CACpC,IAAI,EAAE;IAAE,WAAW,CAAC,EAAE,MAAM,CAAC;IAAC,KAAK,CAAC,EAAE,MAAM,CAAA;CAAE,EAC9C,GAAG,EAAE,UAAU;;;;;KAYhB;AAED,wBAAsB,cAAc,CAClC,IAAI,EAAE;IAAE,YAAY,EAAE,MAAM,CAAA;CAAE,EAC9B,GAAG,EAAE,UAAU,kDAOhB;AAED,wBAAsB,qBAAqB,CACzC,KAAK,EAAE,MAAM,CAAC,MAAM,EAAE,KAAK,CAAC,EAC5B,GAAG,EAAE,UAAU;;;;KAehB;AAED,wBAAsB,cAAc,CAClC,KAAK,EAAE,MAAM,CAAC,MAAM,EAAE,KAAK,CAAC,EAC5B,GAAG,EAAE,UAAU;;;;;;;GAkBhB"}
1
+ {"version":3,"file":"tools.d.ts","sourceRoot":"","sources":["../src/tools.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EACV,QAAQ,EACR,iBAAiB,EACjB,WAAW,EACX,gBAAgB,EAEjB,MAAM,uBAAuB,CAAC;AAG/B,MAAM,WAAW,UAAU;IACzB,EAAE,EAAE,QAAQ,CAAC;IACb,QAAQ,EAAE,iBAAiB,CAAC;IAC5B,WAAW,EAAE,WAAW,CAAC;IACzB,OAAO,CAAC,EAAE,gBAAgB,CAAC;IAC3B,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,aAAa,CAAC,EAAE,OAAO,CAAC;CACzB;AAED,wBAAsB,YAAY,CAChC,IAAI,EAAE;IAAE,KAAK,EAAE,MAAM,CAAC;IAAC,KAAK,CAAC,EAAE,MAAM,CAAC;IAAC,UAAU,CAAC,EAAE,MAAM,CAAA;CAAE,EAC5D,GAAG,EAAE,UAAU;;;;;;KAiChB;AAED,MAAM,WAAW,eAAe;IAC9B,eAAe,CAAC,EAAE,MAAM,CAAC;IACzB,UAAU,EAAE,OAAO,CAAC;IACpB,OAAO,CAAC,EAAE;QACR,iBAAiB,CAAC,EAAE,MAAM,CAAC;QAC3B,oBAAoB,CAAC,EAAE,MAAM,CAAC;QAC9B,WAAW,CAAC,EAAE,MAAM,CAAC;QACrB,gBAAgB,CAAC,EAAE,MAAM,CAAC;KAC3B,CAAC;CACH;AAED,wBAAgB,iBAAiB,CAC/B,IAAI,EAAE,eAAe,EACrB,GAAG,EAAE,UAAU,GACd,IAAI,CAaN;AAED,wBAAsB,gBAAgB,CACpC,IAAI,EAAE;IAAE,WAAW,CAAC,EAAE,MAAM,CAAC;IAAC,KAAK,CAAC,EAAE,MAAM,CAAA;CAAE,EAC9C,GAAG,EAAE,UAAU;;;;;KAYhB;AAED,wBAAsB,cAAc,CAClC,IAAI,EAAE;IAAE,YAAY,EAAE,MAAM,CAAA;CAAE,EAC9B,GAAG,EAAE,UAAU,kDAOhB;AAED,wBAAsB,qBAAqB,CACzC,KAAK,EAAE,MAAM,CAAC,MAAM,EAAE,KAAK,CAAC,EAC5B,GAAG,EAAE,UAAU;;;;KAehB;AAED,wBAAsB,cAAc,CAClC,KAAK,EAAE,MAAM,CAAC,MAAM,EAAE,KAAK,CAAC,EAC5B,GAAG,EAAE,UAAU;;;;;;;GAkBhB"}
package/dist/tools.js CHANGED
@@ -1,6 +1,21 @@
1
+ import { randomUUID } from "crypto";
2
+ import { normalizeMissingCategory } from "@vivantel/virage-core";
1
3
  export async function handleSearch(args, ctx) {
4
+ const searchId = randomUUID();
5
+ const t0 = Date.now();
2
6
  const embedding = await ctx.embedder.embed(args.query);
7
+ const embedMs = Date.now() - t0;
8
+ const t1 = Date.now();
3
9
  const results = await ctx.vectorStore.search(embedding, args.top_k ?? 5, args.collection);
10
+ const searchMs = Date.now() - t1;
11
+ const totalMs = Date.now() - t0;
12
+ ctx.session?.recordLatency("embed", embedMs);
13
+ ctx.session?.recordLatency("search", searchMs);
14
+ ctx.session?.recordLatency("total", totalMs);
15
+ ctx.session?.recordSearch(searchId, results.length, embedding);
16
+ ctx.lastSearchId = searchId;
17
+ ctx.feedbackArmed =
18
+ ctx.session?.shouldSampleFeedback(results.length) ?? false;
4
19
  return results.map((r) => ({
5
20
  id: r.id,
6
21
  content: r.content,
@@ -9,6 +24,21 @@ export async function handleSearch(args, ctx) {
9
24
  sourceFile: r.metadata["sourceFile"] ?? r.id,
10
25
  }));
11
26
  }
27
+ export function handleRagFeedback(args, ctx) {
28
+ if (!ctx.session)
29
+ return;
30
+ const searchId = args.search_query_id ?? ctx.lastSearchId;
31
+ if (!searchId)
32
+ return;
33
+ const payload = {
34
+ wasUseful: args.was_useful,
35
+ contextRelevance: args.metrics?.context_relevance,
36
+ contextCompleteness: args.metrics?.context_completeness,
37
+ noiseRatio: args.metrics?.noise_ratio,
38
+ missingCategory: normalizeMissingCategory(args.metrics?.missing_category),
39
+ };
40
+ ctx.session.recordFeedback(searchId, payload);
41
+ }
12
42
  export async function handleListChunks(args, ctx) {
13
43
  let chunks = ctx.db.getAllChunks();
14
44
  if (args.source_file) {
package/dist/tools.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"tools.js","sourceRoot":"","sources":["../src/tools.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"tools.js","sourceRoot":"","sources":["../src/tools.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=tools.test.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"tools.test.d.ts","sourceRoot":"","sources":["../src/tools.test.ts"],"names":[],"mappings":""}
@@ -0,0 +1,115 @@
1
+ import { describe, it, expect, vi } from "vitest";
2
+ import { handleRagFeedback, } from "./tools.js";
3
+ import { normalizeMissingCategory } from "@vivantel/virage-core";
4
+ function makeMockSession() {
5
+ return {
6
+ id: "mock-session",
7
+ recordSearch: vi.fn(),
8
+ recordLatency: vi.fn(),
9
+ recordError: vi.fn(),
10
+ recordFeedback: vi.fn(),
11
+ recordCacheStats: vi.fn(),
12
+ shouldSampleFeedback: vi.fn().mockReturnValue(false),
13
+ end: vi.fn(),
14
+ };
15
+ }
16
+ function makeCtx(overrides) {
17
+ return {
18
+ db: {},
19
+ embedder: {},
20
+ vectorStore: {},
21
+ ...overrides,
22
+ };
23
+ }
24
+ describe("handleRagFeedback", () => {
25
+ it("does nothing when session is absent", () => {
26
+ const ctx = makeCtx();
27
+ expect(() => handleRagFeedback({ was_useful: true }, ctx)).not.toThrow();
28
+ });
29
+ it("does nothing when no search_id is available", () => {
30
+ const session = makeMockSession();
31
+ const ctx = makeCtx({ session });
32
+ handleRagFeedback({ was_useful: true }, ctx);
33
+ expect(session.recordFeedback).not.toHaveBeenCalled();
34
+ });
35
+ it("records feedback using explicit search_query_id", () => {
36
+ const session = makeMockSession();
37
+ const ctx = makeCtx({ session });
38
+ const args = {
39
+ search_query_id: "explicit-id",
40
+ was_useful: true,
41
+ metrics: {
42
+ context_relevance: 0.9,
43
+ missing_category: "missing_error_handling",
44
+ },
45
+ };
46
+ handleRagFeedback(args, ctx);
47
+ expect(session.recordFeedback).toHaveBeenCalledOnce();
48
+ const [searchId, payload] = session.recordFeedback.mock.calls[0];
49
+ expect(searchId).toBe("explicit-id");
50
+ expect(payload.wasUseful).toBe(true);
51
+ expect(payload.contextRelevance).toBe(0.9);
52
+ expect(payload.missingCategory).toBe("missing_error_handling");
53
+ });
54
+ it("falls back to ctx.lastSearchId when search_query_id is omitted", () => {
55
+ const session = makeMockSession();
56
+ const ctx = makeCtx({ session, lastSearchId: "last-search" });
57
+ handleRagFeedback({ was_useful: false }, ctx);
58
+ const [searchId] = session.recordFeedback.mock
59
+ .calls[0];
60
+ expect(searchId).toBe("last-search");
61
+ });
62
+ it("normalizes unknown missing_category to 'other' before recording", () => {
63
+ const session = makeMockSession();
64
+ const ctx = makeCtx({ session, lastSearchId: "s1" });
65
+ handleRagFeedback({
66
+ was_useful: false,
67
+ metrics: { missing_category: "completely_made_up_value" },
68
+ }, ctx);
69
+ const [, payload] = session.recordFeedback
70
+ .mock.calls[0];
71
+ expect(payload.missingCategory).toBe("other");
72
+ });
73
+ it("passes optional metric fields through", () => {
74
+ const session = makeMockSession();
75
+ const ctx = makeCtx({ session, lastSearchId: "s2" });
76
+ handleRagFeedback({
77
+ was_useful: true,
78
+ metrics: {
79
+ context_completeness: 0.7,
80
+ noise_ratio: 0.1,
81
+ },
82
+ }, ctx);
83
+ const [, payload] = session.recordFeedback
84
+ .mock.calls[0];
85
+ expect(payload.contextCompleteness).toBe(0.7);
86
+ expect(payload.noiseRatio).toBe(0.1);
87
+ });
88
+ });
89
+ describe("normalizeMissingCategory", () => {
90
+ it("passes through known categories unchanged", () => {
91
+ const known = [
92
+ "missing_error_handling",
93
+ "missing_config_example",
94
+ "missing_api_reference",
95
+ "missing_type_signature",
96
+ "missing_test_coverage",
97
+ "other",
98
+ ];
99
+ for (const cat of known) {
100
+ expect(normalizeMissingCategory(cat)).toBe(cat);
101
+ }
102
+ });
103
+ it("maps unknown values to 'other'", () => {
104
+ expect(normalizeMissingCategory("random_unknown")).toBe("other");
105
+ expect(normalizeMissingCategory("MISSING_ERROR_HANDLING")).toBe("other"); // case-sensitive
106
+ });
107
+ it("returns undefined for undefined input", () => {
108
+ expect(normalizeMissingCategory(undefined)).toBeUndefined();
109
+ });
110
+ it("returns undefined for empty string", () => {
111
+ // empty string is falsy → undefined
112
+ expect(normalizeMissingCategory("")).toBeUndefined();
113
+ });
114
+ });
115
+ //# sourceMappingURL=tools.test.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"tools.test.js","sourceRoot":"","sources":["../src/tools.test.ts"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@vivantel/virage-mcp",
3
- "version": "0.1.10",
3
+ "version": "0.1.13",
4
4
  "type": "module",
5
5
  "description": "MCP stdio server for Virage RAG — search and inspect your index from AI assistants",
6
6
  "author": "Vivantel",
@@ -47,19 +47,20 @@
47
47
  "lint:fix": "eslint src/ --fix",
48
48
  "format": "prettier --write \"src/**/*.ts\"",
49
49
  "format:check": "prettier --check \"src/**/*.ts\"",
50
- "fix": "npm run lint:fix && npm run format"
50
+ "fix": "npm run lint:fix && npm run format",
51
+ "inspect": "npx @modelcontextprotocol/inspector node dist/cli.js --config ../../virage.config.json"
51
52
  },
52
53
  "dependencies": {
53
54
  "@modelcontextprotocol/sdk": "^1.12.0",
54
- "zod": "^3.24.0",
55
- "@vivantel/virage-core": "0.2.19"
55
+ "zod": "^4.4.3",
56
+ "@vivantel/virage-core": "0.2.21"
56
57
  },
57
58
  "peerDependencies": {
58
59
  "@vivantel/virage-core": "*"
59
60
  },
60
61
  "devDependencies": {
61
- "@vivantel/virage-core": "0.2.19",
62
- "@types/node": "^25.9.1",
62
+ "@vivantel/virage-core": "0.2.21",
63
+ "@types/node": "^25.9.2",
63
64
  "typescript": "^6.0.3",
64
65
  "vitest": "^4.1.8"
65
66
  }