@wizeworks/lens-node 0.3.0-alpha.2 → 0.3.0-alpha.3

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 (66) hide show
  1. package/dist/api.d.ts.map +1 -1
  2. package/dist/api.js +9 -3
  3. package/dist/api.js.map +1 -1
  4. package/dist/capture.d.ts.map +1 -1
  5. package/dist/capture.js +3 -3
  6. package/dist/capture.js.map +1 -1
  7. package/dist/client-spans.d.ts +6 -4
  8. package/dist/client-spans.d.ts.map +1 -1
  9. package/dist/client-spans.js +20 -9
  10. package/dist/client-spans.js.map +1 -1
  11. package/dist/frameworks/fastify.d.ts.map +1 -1
  12. package/dist/frameworks/fastify.js +4 -2
  13. package/dist/frameworks/fastify.js.map +1 -1
  14. package/dist/frameworks/hono.js +3 -3
  15. package/dist/frameworks/hono.js.map +1 -1
  16. package/dist/frameworks/koa.js +3 -3
  17. package/dist/frameworks/koa.js.map +1 -1
  18. package/dist/frameworks/node-server.d.ts.map +1 -1
  19. package/dist/frameworks/node-server.js +4 -2
  20. package/dist/frameworks/node-server.js.map +1 -1
  21. package/dist/info.js +1 -1
  22. package/dist/info.js.map +1 -1
  23. package/dist/kit.d.ts +1 -1
  24. package/dist/kit.d.ts.map +1 -1
  25. package/dist/mcp-find.d.ts +2 -2
  26. package/dist/mcp-find.d.ts.map +1 -1
  27. package/dist/mcp-find.js +30 -20
  28. package/dist/mcp-find.js.map +1 -1
  29. package/dist/mcp-metrics.d.ts +2 -2
  30. package/dist/mcp-metrics.d.ts.map +1 -1
  31. package/dist/mcp-metrics.js +11 -9
  32. package/dist/mcp-metrics.js.map +1 -1
  33. package/dist/mcp-projects.d.ts +11 -0
  34. package/dist/mcp-projects.d.ts.map +1 -0
  35. package/dist/mcp-projects.js +49 -0
  36. package/dist/mcp-projects.js.map +1 -0
  37. package/dist/mcp-search.d.ts +5 -0
  38. package/dist/mcp-search.d.ts.map +1 -0
  39. package/dist/mcp-search.js +49 -0
  40. package/dist/mcp-search.js.map +1 -0
  41. package/dist/mcp-shared.d.ts +47 -4
  42. package/dist/mcp-shared.d.ts.map +1 -1
  43. package/dist/mcp-shared.js.map +1 -1
  44. package/dist/mcp-store.d.ts +27 -0
  45. package/dist/mcp-store.d.ts.map +1 -0
  46. package/dist/mcp-store.js +55 -0
  47. package/dist/mcp-store.js.map +1 -0
  48. package/dist/mcp-traces.d.ts +2 -2
  49. package/dist/mcp-traces.d.ts.map +1 -1
  50. package/dist/mcp-traces.js +37 -25
  51. package/dist/mcp-traces.js.map +1 -1
  52. package/dist/mcp.d.ts +4 -4
  53. package/dist/mcp.d.ts.map +1 -1
  54. package/dist/mcp.js +14 -6
  55. package/dist/mcp.js.map +1 -1
  56. package/dist/request-capture.d.ts +7 -1
  57. package/dist/request-capture.d.ts.map +1 -1
  58. package/dist/request-capture.js +12 -0
  59. package/dist/request-capture.js.map +1 -1
  60. package/dist/search-api.d.ts +7 -0
  61. package/dist/search-api.d.ts.map +1 -0
  62. package/dist/search-api.js +20 -0
  63. package/dist/search-api.js.map +1 -0
  64. package/dist/wizelens.js +1 -1
  65. package/dist/wizelens.js.map +1 -1
  66. package/package.json +3 -3
@@ -36,21 +36,23 @@ function detailOf(d) {
36
36
  hiddenLines: d.hidden,
37
37
  };
38
38
  }
39
- function registerListMetrics(server, data, audit, ranges) {
39
+ function registerListMetrics(server, src, ranges) {
40
40
  const inputSchema = {
41
+ ...src.arg,
41
42
  range: z.enum(ranges).optional().describe(`Time range. Default ${ranges.includes("1h") ? "1h" : ranges[0]}.`),
42
43
  service: z.string().optional().describe("Only this service."),
43
44
  q: z.string().optional().describe("Only metrics whose name has this text."),
44
45
  };
45
46
  const description = "List metrics (CPU, memory, GC, request rates, app metrics) with their newest values, and a runtime summary per service.";
46
47
  server.registerTool("list_metrics", { description, inputSchema, annotations: READ_ONLY }, async (args) => {
47
- audit("list_metrics", args);
48
+ const data = await src.open("list_metrics", args);
48
49
  const range = args.range ?? (ranges.includes("1h") ? "1h" : ranges[0]);
49
50
  return json(catalogOf(await data.metrics(range, { service: args.service ?? "", q: args.q ?? "" })));
50
51
  });
51
52
  }
52
- function registerGetMetric(server, data, audit, ranges) {
53
+ function registerGetMetric(server, src, ranges) {
53
54
  const inputSchema = {
55
+ ...src.arg,
54
56
  name: z.string().min(1).describe("Metric name, for example process.cpu.utilization."),
55
57
  range: z.enum(ranges).optional().describe("Time range. Default 1h."),
56
58
  service: z.string().optional().describe("Only this service."),
@@ -59,7 +61,7 @@ function registerGetMetric(server, data, audit, ranges) {
59
61
  };
60
62
  const description = "Get one metric over time: summary values and up to 12 points per line, formatted in its unit.";
61
63
  server.registerTool("get_metric", { description, inputSchema, annotations: READ_ONLY }, async (args) => {
62
- audit("get_metric", args);
64
+ const data = await src.open("get_metric", args);
63
65
  const range = args.range ?? (ranges.includes("1h") ? "1h" : ranges[0]);
64
66
  const params = { metric: args.name, service: args.service ?? "", group: args.group ?? "", stat: args.stat ?? "" };
65
67
  const m = await data.metrics(range, params);
@@ -67,11 +69,11 @@ function registerGetMetric(server, data, audit, ranges) {
67
69
  });
68
70
  }
69
71
  /** list_metrics and get_metric, when the data source has metrics. */
70
- export function registerMetricTools(server, data, audit) {
71
- if (!data.metrics)
72
+ export function registerMetricTools(server, src) {
73
+ if (!src.defaults.metrics)
72
74
  return;
73
- const ranges = (data.metricRanges?.length ? data.metricRanges : ALL_RANGES);
74
- registerListMetrics(server, data, audit, ranges);
75
- registerGetMetric(server, data, audit, ranges);
75
+ const ranges = (src.defaults.metricRanges?.length ? src.defaults.metricRanges : ALL_RANGES);
76
+ registerListMetrics(server, src, ranges);
77
+ registerGetMetric(server, src, ranges);
76
78
  }
77
79
  //# sourceMappingURL=mcp-metrics.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"mcp-metrics.js","sourceRoot":"","sources":["../src/mcp-metrics.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"mcp-metrics.js","sourceRoot":"","sources":["../src/mcp-metrics.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,11 @@
1
+ import type { McpServer } from "@modelcontextprotocol/sdk/server/mcp.js";
2
+ import { type McpDataSource, type McpProject, type McpProjects, type Source } from "./mcp-shared.js";
3
+ /** One data source: every call reads it. */
4
+ export declare function singleSource(data: McpDataSource): Source;
5
+ /** The project a call names by id or name; the only one when it names none. */
6
+ export declare function pickProject(ps: readonly McpProject[], wanted: string | undefined): McpProject;
7
+ /** Several projects: each call names one with the `project` argument. */
8
+ export declare function projectsSource(m: McpProjects): Source;
9
+ /** list_projects: the projects this key reads, for the `project` argument. */
10
+ export declare function registerProjectTools(server: McpServer, m: McpProjects): void;
11
+ //# sourceMappingURL=mcp-projects.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"mcp-projects.d.ts","sourceRoot":"","sources":["../src/mcp-projects.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,yCAAyC,CAAC;AAEzE,OAAO,EAAQ,KAAK,aAAa,EAAE,KAAK,UAAU,EAAE,KAAK,WAAW,EAAa,KAAK,MAAM,EAAE,MAAM,iBAAiB,CAAC;AAItH,4CAA4C;AAC5C,wBAAgB,YAAY,CAAC,IAAI,EAAE,aAAa,GAAG,MAAM,CAMxD;AAID,+EAA+E;AAC/E,wBAAgB,WAAW,CAAC,EAAE,EAAE,SAAS,UAAU,EAAE,EAAE,MAAM,EAAE,MAAM,GAAG,SAAS,GAAG,UAAU,CAU7F;AAED,yEAAyE;AACzE,wBAAgB,cAAc,CAAC,CAAC,EAAE,WAAW,GAAG,MAAM,CAWrD;AAED,8EAA8E;AAC9E,wBAAgB,oBAAoB,CAAC,MAAM,EAAE,SAAS,EAAE,CAAC,EAAE,WAAW,GAAG,IAAI,CAM5E"}
@@ -0,0 +1,49 @@
1
+ import { z } from "zod";
2
+ import { json, READ_ONLY } from "./mcp-shared.js";
3
+ const auditLine = (service, tool, args) => `[wizelens] mcp tool=${tool} service=${service} args=${JSON.stringify(args ?? {})}`;
4
+ /** One data source: every call reads it. */
5
+ export function singleSource(data) {
6
+ return {
7
+ defaults: { slowQueryMs: data.slowQueryMs, nPlusOneThreshold: data.nPlusOneThreshold, metrics: !!data.metrics, metricRanges: data.metricRanges },
8
+ arg: {},
9
+ open: async (tool, args) => (data.audit(auditLine(data.service, tool, args)), data),
10
+ };
11
+ }
12
+ const named = (ps) => ps.map((p) => `${p.name} (${p.id})`).join(", ");
13
+ /** The project a call names by id or name; the only one when it names none. */
14
+ export function pickProject(ps, wanted) {
15
+ if (ps.length === 0)
16
+ throw new Error("This key reads no projects.");
17
+ if (!wanted) {
18
+ if (ps.length === 1)
19
+ return ps[0];
20
+ throw new Error(`Add the project argument. This key reads: ${named(ps)}.`);
21
+ }
22
+ const w = wanted.trim().toLowerCase();
23
+ const p = ps.find((x) => x.id === wanted) ?? ps.find((x) => x.name.toLowerCase() === w);
24
+ if (!p)
25
+ throw new Error(`No project "${wanted}". This key reads: ${named(ps)}.`);
26
+ return p;
27
+ }
28
+ /** Several projects: each call names one with the `project` argument. */
29
+ export function projectsSource(m) {
30
+ const project = z.string().max(200).optional().describe("Project id or name, from list_projects. Needed when the key reads more than one project.");
31
+ return {
32
+ defaults: { slowQueryMs: m.slowQueryMs, nPlusOneThreshold: m.nPlusOneThreshold, metrics: m.metrics, metricRanges: m.metricRanges },
33
+ arg: { project },
34
+ open: async (tool, args) => {
35
+ const data = await m.open(pickProject(m.projects, args.project).id);
36
+ data.audit(auditLine(data.service, tool, args));
37
+ return data;
38
+ },
39
+ };
40
+ }
41
+ /** list_projects: the projects this key reads, for the `project` argument. */
42
+ export function registerProjectTools(server, m) {
43
+ const description = "List the projects this key can read. Pass one's id or name as `project` to the other tools.";
44
+ server.registerTool("list_projects", { description, inputSchema: {}, annotations: READ_ONLY }, async (args) => {
45
+ m.audit(auditLine(m.service, "list_projects", args));
46
+ return json(m.projects.map((p) => ({ id: p.id, name: p.name })));
47
+ });
48
+ }
49
+ //# sourceMappingURL=mcp-projects.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"mcp-projects.js","sourceRoot":"","sources":["../src/mcp-projects.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,5 @@
1
+ import type { McpServer } from "@modelcontextprotocol/sdk/server/mcp.js";
2
+ import { type Source } from "./mcp-shared.js";
3
+ /** search and search_fields: the search language, on the host's store or on `all()` in memory. */
4
+ export declare function registerSearchTools(server: McpServer, src: Source): void;
5
+ //# sourceMappingURL=mcp-search.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"mcp-search.d.ts","sourceRoot":"","sources":["../src/mcp-search.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,yCAAyC,CAAC;AAGzE,OAAO,EAAmB,KAAK,MAAM,EAAE,MAAM,iBAAiB,CAAC;AA4C/D,kGAAkG;AAClG,wBAAgB,mBAAmB,CAAC,MAAM,EAAE,SAAS,EAAE,GAAG,EAAE,MAAM,GAAG,IAAI,CAGxE"}
@@ -0,0 +1,49 @@
1
+ import { checkSearch, decodeCursor, SEARCH_KINDS, searchMemory, suggestMemory } from "@wizeworks/lens-core";
2
+ import { z } from "zod";
3
+ import { json, READ_ONLY } from "./mcp-shared.js";
4
+ import { RANGES, windowOf } from "./mcp-store.js";
5
+ const LANGUAGE = [
6
+ "Search language: words and \"phrases\" match text (path, SQL, messages, errors).",
7
+ "field:value with service, env, trace, span, name, method, path, route, status (500, 5xx, ok, error), duration (250ms, 1s), level, category, kind, user, error (true/false), message.",
8
+ "@attribute:value for any span or log attribute, such as @user.id:42 or @db.system.name:postgres.",
9
+ "Use >, >=, <, <= (status:>=500, duration:>1s), ranges a..b, * wildcards (path:/api/*), -term or NOT to exclude, OR, and parentheses.",
10
+ ].join(" ");
11
+ function registerSearch(server, src) {
12
+ const inputSchema = {
13
+ ...src.arg,
14
+ q: z.string().max(2000).describe("The search. Empty finds everything in the range."),
15
+ kind: z.enum(SEARCH_KINDS).optional().describe("What to find: requests (default), traces, spans, or logs."),
16
+ range: z.enum(RANGES).optional().describe("How far back: 15m, 1h, 6h, 24h (default), 7d, 30d."),
17
+ limit: z.number().int().min(1).max(200).optional().describe("Results per page. Default 20."),
18
+ cursor: z.string().optional().describe("The `next` value of the last page, for the next page."),
19
+ };
20
+ const description = `Search requests, traces, spans, and logs, newest first. ${LANGUAGE}`;
21
+ server.registerTool("search", { description, inputSchema, annotations: READ_ONLY }, async (args) => {
22
+ const data = await src.open("search", args);
23
+ const parsed = checkSearch(args.q);
24
+ if (!parsed.ok)
25
+ return { ...json({ error: parsed.error, start: parsed.start, end: parsed.end }), isError: true };
26
+ const q = { kind: (args.kind ?? "requests"), node: parsed.node, window: windowOf(data, args.range ?? "24h"), limit: args.limit ?? 20, cursor: decodeCursor(args.cursor), env: data.env };
27
+ return json(await (data.search ? data.search(q) : searchMemory(await data.all(), q)));
28
+ });
29
+ }
30
+ function registerFields(server, src) {
31
+ const inputSchema = {
32
+ ...src.arg,
33
+ field: z.string().max(200).optional().describe("Leave out to list fields and attribute keys; or a field (service) or attribute (@user.id) to list its common values."),
34
+ prefix: z.string().max(200).optional().describe("Only names or values that start with this."),
35
+ range: z.enum(RANGES).optional().describe("Which data to read. Default 24h."),
36
+ };
37
+ const description = "List search fields, attribute keys seen in the data, or the common values of one field, to build a search.";
38
+ server.registerTool("search_fields", { description, inputSchema, annotations: READ_ONLY }, async (args) => {
39
+ const data = await src.open("search_fields", args);
40
+ const r = { field: args.field || null, prefix: args.prefix ?? "", window: windowOf(data, args.range ?? "24h"), limit: 50, env: data.env };
41
+ return json(await (data.suggest ? data.suggest(r) : suggestMemory(await data.all(), r)));
42
+ });
43
+ }
44
+ /** search and search_fields: the search language, on the host's store or on `all()` in memory. */
45
+ export function registerSearchTools(server, src) {
46
+ registerSearch(server, src);
47
+ registerFields(server, src);
48
+ }
49
+ //# sourceMappingURL=mcp-search.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"mcp-search.js","sourceRoot":"","sources":["../src/mcp-search.ts"],"names":[],"mappings":"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"}
@@ -1,4 +1,5 @@
1
- import type { MetricsModel, TimeRange, Trace, TraceSummary } from "@wizeworks/lens-core";
1
+ import type { ZodTypeAny } from "zod";
2
+ import type { MetricsModel, SearchPage, SearchQuery, Suggestion, SuggestRequest, TimeRange, Trace } from "@wizeworks/lens-core";
2
3
  /** What the MCP tools can read. Read-only by design. */
3
4
  export interface McpDataSource {
4
5
  service: string;
@@ -7,16 +8,58 @@ export interface McpDataSource {
7
8
  slowQueryMs: number;
8
9
  /** Default repeats for find_n_plus_one. */
9
10
  nPlusOneThreshold: number;
10
- list(limit: number): TraceSummary[];
11
- all(): Trace[];
11
+ /** Recent traces, newest first, for the tools that read whole traces in memory. A host may load them only when a tool asks. */
12
+ all(): Trace[] | Promise<Trace[]>;
12
13
  get(traceId: string, federate: boolean): Promise<Trace | undefined>;
13
14
  audit(line: string): void;
14
15
  /** The metrics page for a range and page parameters. Without it, the metric tools are left out. */
15
16
  metrics?(range: TimeRange, params: Record<string, string>): MetricsModel | Promise<MetricsModel>;
16
17
  /** Ranges the metric tools offer, shortest first. Default all. */
17
18
  metricRanges?: readonly TimeRange[];
19
+ /** Search on the host's store. Without it, the search, list, error, and slow query tools read `all()` in memory. */
20
+ search?(q: SearchQuery): SearchPage | Promise<SearchPage>;
21
+ /** Autocomplete on the host's store. Without it, `all()` in memory. */
22
+ suggest?(r: SuggestRequest): Suggestion[] | Promise<Suggestion[]>;
23
+ /** The host's clock, for search ranges. Default Date.now. */
24
+ now?(): number;
25
+ /** The environment memory search gives this service's documents (in-app), as the HTTP search does. */
26
+ env?: string;
27
+ }
28
+ /** One project a multi-project host serves. */
29
+ export interface McpProject {
30
+ id: string;
31
+ name: string;
32
+ }
33
+ /** A host that serves several projects (the cloud with a read key for many). Tools then take a `project` argument. */
34
+ export interface McpProjects {
35
+ service: string;
36
+ version: string;
37
+ slowQueryMs: number;
38
+ nPlusOneThreshold: number;
39
+ /** True when every project has the metric tools. */
40
+ metrics: boolean;
41
+ metricRanges?: readonly TimeRange[];
42
+ projects: readonly McpProject[];
43
+ /** The data of one project from `projects`. */
44
+ open(projectId: string): Promise<McpDataSource>;
45
+ /** Audit for calls that read no project (list_projects). */
46
+ audit(line: string): void;
47
+ }
48
+ /** Defaults and features the tools are registered with: the same for every project. */
49
+ export interface McpDefaults {
50
+ slowQueryMs: number;
51
+ nPlusOneThreshold: number;
52
+ metrics: boolean;
53
+ metricRanges?: readonly TimeRange[];
54
+ }
55
+ /** Where the tools read. */
56
+ export interface Source {
57
+ defaults: McpDefaults;
58
+ /** The `project` argument, on a multi-project host; else empty. */
59
+ arg: Record<string, ZodTypeAny>;
60
+ /** The data for one tool call, after the call is audited. */
61
+ open(tool: string, args: object): Promise<McpDataSource>;
18
62
  }
19
- export type Audit = (tool: string, args: unknown) => void;
20
63
  export declare const READ_ONLY: {
21
64
  readOnlyHint: boolean;
22
65
  openWorldHint: boolean;
@@ -1 +1 @@
1
- {"version":3,"file":"mcp-shared.d.ts","sourceRoot":"","sources":["../src/mcp-shared.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,YAAY,EAAE,SAAS,EAAE,KAAK,EAAE,YAAY,EAAE,MAAM,sBAAsB,CAAC;AAEzF,wDAAwD;AACxD,MAAM,WAAW,aAAa;IAC5B,OAAO,EAAE,MAAM,CAAC;IAChB,OAAO,EAAE,MAAM,CAAC;IAChB,+CAA+C;IAC/C,WAAW,EAAE,MAAM,CAAC;IACpB,2CAA2C;IAC3C,iBAAiB,EAAE,MAAM,CAAC;IAC1B,IAAI,CAAC,KAAK,EAAE,MAAM,GAAG,YAAY,EAAE,CAAC;IACpC,GAAG,IAAI,KAAK,EAAE,CAAC;IACf,GAAG,CAAC,OAAO,EAAE,MAAM,EAAE,QAAQ,EAAE,OAAO,GAAG,OAAO,CAAC,KAAK,GAAG,SAAS,CAAC,CAAC;IACpE,KAAK,CAAC,IAAI,EAAE,MAAM,GAAG,IAAI,CAAC;IAC1B,mGAAmG;IACnG,OAAO,CAAC,CAAC,KAAK,EAAE,SAAS,EAAE,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,GAAG,YAAY,GAAG,OAAO,CAAC,YAAY,CAAC,CAAC;IACjG,kEAAkE;IAClE,YAAY,CAAC,EAAE,SAAS,SAAS,EAAE,CAAC;CACrC;AAED,MAAM,MAAM,KAAK,GAAG,CAAC,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,OAAO,KAAK,IAAI,CAAC;AAE1D,eAAO,MAAM,SAAS;IAAK,YAAY;IAAQ,aAAa;CAAS,CAAC;AAEtE,eAAO,MAAM,IAAI,UAAW,OAAO;;cACf,MAAM;;;CACxB,CAAC"}
1
+ {"version":3,"file":"mcp-shared.d.ts","sourceRoot":"","sources":["../src/mcp-shared.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,KAAK,CAAC;AACtC,OAAO,KAAK,EAAE,YAAY,EAAE,UAAU,EAAE,WAAW,EAAE,UAAU,EAAE,cAAc,EAAE,SAAS,EAAE,KAAK,EAAE,MAAM,sBAAsB,CAAC;AAEhI,wDAAwD;AACxD,MAAM,WAAW,aAAa;IAC5B,OAAO,EAAE,MAAM,CAAC;IAChB,OAAO,EAAE,MAAM,CAAC;IAChB,+CAA+C;IAC/C,WAAW,EAAE,MAAM,CAAC;IACpB,2CAA2C;IAC3C,iBAAiB,EAAE,MAAM,CAAC;IAC1B,+HAA+H;IAC/H,GAAG,IAAI,KAAK,EAAE,GAAG,OAAO,CAAC,KAAK,EAAE,CAAC,CAAC;IAClC,GAAG,CAAC,OAAO,EAAE,MAAM,EAAE,QAAQ,EAAE,OAAO,GAAG,OAAO,CAAC,KAAK,GAAG,SAAS,CAAC,CAAC;IACpE,KAAK,CAAC,IAAI,EAAE,MAAM,GAAG,IAAI,CAAC;IAC1B,mGAAmG;IACnG,OAAO,CAAC,CAAC,KAAK,EAAE,SAAS,EAAE,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,GAAG,YAAY,GAAG,OAAO,CAAC,YAAY,CAAC,CAAC;IACjG,kEAAkE;IAClE,YAAY,CAAC,EAAE,SAAS,SAAS,EAAE,CAAC;IACpC,oHAAoH;IACpH,MAAM,CAAC,CAAC,CAAC,EAAE,WAAW,GAAG,UAAU,GAAG,OAAO,CAAC,UAAU,CAAC,CAAC;IAC1D,uEAAuE;IACvE,OAAO,CAAC,CAAC,CAAC,EAAE,cAAc,GAAG,UAAU,EAAE,GAAG,OAAO,CAAC,UAAU,EAAE,CAAC,CAAC;IAClE,6DAA6D;IAC7D,GAAG,CAAC,IAAI,MAAM,CAAC;IACf,sGAAsG;IACtG,GAAG,CAAC,EAAE,MAAM,CAAC;CACd;AAED,+CAA+C;AAC/C,MAAM,WAAW,UAAU;IACzB,EAAE,EAAE,MAAM,CAAC;IACX,IAAI,EAAE,MAAM,CAAC;CACd;AAED,sHAAsH;AACtH,MAAM,WAAW,WAAW;IAC1B,OAAO,EAAE,MAAM,CAAC;IAChB,OAAO,EAAE,MAAM,CAAC;IAChB,WAAW,EAAE,MAAM,CAAC;IACpB,iBAAiB,EAAE,MAAM,CAAC;IAC1B,oDAAoD;IACpD,OAAO,EAAE,OAAO,CAAC;IACjB,YAAY,CAAC,EAAE,SAAS,SAAS,EAAE,CAAC;IACpC,QAAQ,EAAE,SAAS,UAAU,EAAE,CAAC;IAChC,+CAA+C;IAC/C,IAAI,CAAC,SAAS,EAAE,MAAM,GAAG,OAAO,CAAC,aAAa,CAAC,CAAC;IAChD,4DAA4D;IAC5D,KAAK,CAAC,IAAI,EAAE,MAAM,GAAG,IAAI,CAAC;CAC3B;AAED,uFAAuF;AACvF,MAAM,WAAW,WAAW;IAC1B,WAAW,EAAE,MAAM,CAAC;IACpB,iBAAiB,EAAE,MAAM,CAAC;IAC1B,OAAO,EAAE,OAAO,CAAC;IACjB,YAAY,CAAC,EAAE,SAAS,SAAS,EAAE,CAAC;CACrC;AAED,4BAA4B;AAC5B,MAAM,WAAW,MAAM;IACrB,QAAQ,EAAE,WAAW,CAAC;IACtB,mEAAmE;IACnE,GAAG,EAAE,MAAM,CAAC,MAAM,EAAE,UAAU,CAAC,CAAC;IAChC,6DAA6D;IAC7D,IAAI,CAAC,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,aAAa,CAAC,CAAC;CAC1D;AAED,eAAO,MAAM,SAAS;IAAK,YAAY;IAAQ,aAAa;CAAS,CAAC;AAEtE,eAAO,MAAM,IAAI,UAAW,OAAO;;cACf,MAAM;;;CACxB,CAAC"}
@@ -1 +1 @@
1
- {"version":3,"file":"mcp-shared.js","sourceRoot":"","sources":["../src/mcp-shared.ts"],"names":[],"mappings":"AAsBA,MAAM,CAAC,MAAM,SAAS,GAAG,EAAE,YAAY,EAAE,IAAI,EAAE,aAAa,EAAE,KAAK,EAAE,CAAC;AAEtE,MAAM,CAAC,MAAM,IAAI,GAAG,CAAC,KAAc,EAAE,EAAE,CAAC,CAAC;IACvC,OAAO,EAAE,CAAC,EAAE,IAAI,EAAE,MAAe,EAAE,IAAI,EAAE,IAAI,CAAC,SAAS,CAAC,KAAK,EAAE,IAAI,EAAE,CAAC,CAAC,EAAE,CAAC;CAC3E,CAAC,CAAC"}
1
+ {"version":3,"file":"mcp-shared.js","sourceRoot":"","sources":["../src/mcp-shared.ts"],"names":[],"mappings":"AAoEA,MAAM,CAAC,MAAM,SAAS,GAAG,EAAE,YAAY,EAAE,IAAI,EAAE,aAAa,EAAE,KAAK,EAAE,CAAC;AAEtE,MAAM,CAAC,MAAM,IAAI,GAAG,CAAC,KAAc,EAAE,EAAE,CAAC,CAAC;IACvC,OAAO,EAAE,CAAC,EAAE,IAAI,EAAE,MAAe,EAAE,IAAI,EAAE,IAAI,CAAC,SAAS,CAAC,KAAK,EAAE,IAAI,EAAE,CAAC,CAAC,EAAE,CAAC;CAC3E,CAAC,CAAC"}
@@ -0,0 +1,27 @@
1
+ import { type SearchItems, type SearchKind, type SearchNode, type TimeRange } from "@wizeworks/lens-core";
2
+ import { z } from "zod";
3
+ import type { McpDataSource } from "./mcp-shared.js";
4
+ export declare const RANGES: [TimeRange, ...TimeRange[]];
5
+ export declare const rangeArg: (what: string) => z.ZodOptional<z.ZodEnum<{
6
+ "15m": "15m";
7
+ "1h": "1h";
8
+ "24h": "24h";
9
+ "30d": "30d";
10
+ "6h": "6h";
11
+ "7d": "7d";
12
+ }>>;
13
+ export declare const windowOf: (data: McpDataSource, range: TimeRange) => {
14
+ from: number;
15
+ to: number;
16
+ };
17
+ /** The matches of a search, newest first, up to `max`: the store, plus the newest traces in memory, which the store indexes only once they go quiet. */
18
+ export declare function findAll<K extends SearchKind>(data: McpDataSource, kind: K, node: SearchNode | null, range: TimeRange, max: number): Promise<SearchItems[K][]>;
19
+ /** Every part must hold: tool filters as search text, and the caller's own search. Null parts are left out. */
20
+ export declare function allOf(parts: readonly (string | null | undefined)[]): {
21
+ ok: true;
22
+ node: SearchNode | null;
23
+ } | {
24
+ ok: false;
25
+ error: string;
26
+ };
27
+ //# sourceMappingURL=mcp-store.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"mcp-store.d.ts","sourceRoot":"","sources":["../src/mcp-store.ts"],"names":[],"mappings":"AAAA,OAAO,EAA6B,KAAK,WAAW,EAAE,KAAK,UAAU,EAAE,KAAK,UAAU,EAA+C,KAAK,SAAS,EAAE,MAAM,sBAAsB,CAAC;AAClL,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AACxB,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,iBAAiB,CAAC;AAGrD,eAAO,MAAM,MAAM,EAA+B,CAAC,SAAS,EAAE,GAAG,SAAS,EAAE,CAAC,CAAC;AAE9E,eAAO,MAAM,QAAQ,SAAU,MAAM;;;;;;;GAAqG,CAAC;AAI3I,eAAO,MAAM,QAAQ,SAAU,aAAa,SAAS,SAAS;IAEnD,IAAI;IAA+B,EAAE;CAC/C,CAAC;AAwBF,wJAAwJ;AACxJ,wBAAsB,OAAO,CAAC,CAAC,SAAS,UAAU,EAAE,IAAI,EAAE,aAAa,EAAE,IAAI,EAAE,CAAC,EAAE,IAAI,EAAE,UAAU,GAAG,IAAI,EAAE,KAAK,EAAE,SAAS,EAAE,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,WAAW,CAAC,CAAC,CAAC,EAAE,CAAC,CAOnK;AAED,+GAA+G;AAC/G,wBAAgB,KAAK,CAAC,KAAK,EAAE,SAAS,CAAC,MAAM,GAAG,IAAI,GAAG,SAAS,CAAC,EAAE,GAAG;IAAE,EAAE,EAAE,IAAI,CAAC;IAAC,IAAI,EAAE,UAAU,GAAG,IAAI,CAAA;CAAE,GAAG;IAAE,EAAE,EAAE,KAAK,CAAC;IAAC,KAAK,EAAE,MAAM,CAAA;CAAE,CASzI"}
@@ -0,0 +1,55 @@
1
+ import { checkSearch, decodeCursor, searchMemory, TIME_RANGES } from "@wizeworks/lens-core";
2
+ import { z } from "zod";
3
+ // Tools that read the whole store through search, not a slice of recent traces (docs/SEARCH-PLAN.md, "MCP").
4
+ export const RANGES = Object.keys(TIME_RANGES);
5
+ export const rangeArg = (what) => z.enum(RANGES).optional().describe(`How far back ${what}: 15m, 1h, 6h, 24h (default), 7d, 30d.`);
6
+ const PAGE = 200;
7
+ export const windowOf = (data, range) => {
8
+ const now = data.now?.() ?? Date.now();
9
+ return { from: now - TIME_RANGES[range].ms, to: now };
10
+ };
11
+ const idOf = (item) => {
12
+ const r = item;
13
+ return r.key ?? (r.spanId ? `${r.traceId}:${r.spanId}` : r.traceId);
14
+ };
15
+ const timeOf = (item) => {
16
+ const r = item;
17
+ return r.startMs ?? r.timeMs ?? 0;
18
+ };
19
+ /** Store pages, newest first, up to `max`. */
20
+ async function storePages(data, base, max) {
21
+ const out = [];
22
+ let cursor = null;
23
+ do {
24
+ const page = await data.search({ ...base, limit: Math.min(PAGE, max - out.length), cursor: decodeCursor(cursor) });
25
+ out.push(...page.items);
26
+ cursor = page.next;
27
+ } while (cursor && out.length < max);
28
+ return out;
29
+ }
30
+ /** The matches of a search, newest first, up to `max`: the store, plus the newest traces in memory, which the store indexes only once they go quiet. */
31
+ export async function findAll(data, kind, node, range, max) {
32
+ const base = { kind, node, window: windowOf(data, range), env: data.env };
33
+ const recent = searchMemory(await data.all(), { ...base, limit: max }).items;
34
+ if (!data.search)
35
+ return recent;
36
+ const seen = new Map();
37
+ for (const item of [...(await storePages(data, base, max)), ...recent])
38
+ seen.set(idOf(item), item);
39
+ return [...seen.values()].sort((a, b) => timeOf(b) - timeOf(a)).slice(0, max);
40
+ }
41
+ /** Every part must hold: tool filters as search text, and the caller's own search. Null parts are left out. */
42
+ export function allOf(parts) {
43
+ const items = [];
44
+ for (const part of parts) {
45
+ if (!part)
46
+ continue;
47
+ const r = checkSearch(part);
48
+ if (!r.ok)
49
+ return { ok: false, error: `${r.error} (in "${part}")` };
50
+ if (r.node)
51
+ items.push(r.node);
52
+ }
53
+ return { ok: true, node: items.length === 0 ? null : items.length === 1 ? items[0] : { type: "and", items } };
54
+ }
55
+ //# sourceMappingURL=mcp-store.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"mcp-store.js","sourceRoot":"","sources":["../src/mcp-store.ts"],"names":[],"mappings":"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"}
@@ -1,5 +1,5 @@
1
1
  import type { McpServer } from "@modelcontextprotocol/sdk/server/mcp.js";
2
- import { type Audit, type McpDataSource } from "./mcp-shared.js";
2
+ import { type Source } from "./mcp-shared.js";
3
3
  /** list_traces, get_trace, and get_errors. */
4
- export declare function registerTraceTools(server: McpServer, data: McpDataSource, audit: Audit): void;
4
+ export declare function registerTraceTools(server: McpServer, src: Source): void;
5
5
  //# sourceMappingURL=mcp-traces.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"mcp-traces.d.ts","sourceRoot":"","sources":["../src/mcp-traces.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,yCAAyC,CAAC;AAGzE,OAAO,EAAE,KAAK,KAAK,EAAQ,KAAK,aAAa,EAAa,MAAM,iBAAiB,CAAC;AA8ClF,8CAA8C;AAC9C,wBAAgB,kBAAkB,CAAC,MAAM,EAAE,SAAS,EAAE,IAAI,EAAE,aAAa,EAAE,KAAK,EAAE,KAAK,GAAG,IAAI,CAI7F"}
1
+ {"version":3,"file":"mcp-traces.d.ts","sourceRoot":"","sources":["../src/mcp-traces.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,yCAAyC,CAAC;AAGzE,OAAO,EAAuC,KAAK,MAAM,EAAE,MAAM,iBAAiB,CAAC;AAyDnF,8CAA8C;AAC9C,wBAAgB,kBAAkB,CAAC,MAAM,EAAE,SAAS,EAAE,GAAG,EAAE,MAAM,GAAG,IAAI,CAIvE"}
@@ -1,51 +1,63 @@
1
- import { errorInfo, isErrorSpan } from "@wizeworks/lens-core";
1
+ import { errorInfo, isErrorSpan, parseSearch } from "@wizeworks/lens-core";
2
2
  import { z } from "zod";
3
3
  import { json, READ_ONLY } from "./mcp-shared.js";
4
- function registerListTraces(server, data, audit) {
4
+ import { allOf, findAll, rangeArg } from "./mcp-store.js";
5
+ const failed = (error) => ({ ...json({ error }), isError: true });
6
+ function registerListTraces(server, src) {
5
7
  const inputSchema = {
8
+ ...src.arg,
6
9
  limit: z.number().int().min(1).max(500).optional().describe("Max traces. Default 20."),
7
10
  minDurationMs: z.number().min(0).optional().describe("Only traces at least this long."),
8
11
  status: z.enum(["unset", "ok", "error"]).optional().describe("Only traces with this status."),
12
+ q: z.string().max(2000).optional().describe("Only traces that match this search (the `search` tool's language)."),
13
+ range: rangeArg("to look"),
9
14
  };
10
- const description = "List recent request traces captured by WizeLens, newest first.";
15
+ const description = "List request traces captured by WizeLens, newest first, from the whole store.";
11
16
  server.registerTool("list_traces", { description, inputSchema, annotations: READ_ONLY }, async (args) => {
12
- audit("list_traces", args);
13
- const items = data
14
- .list(500)
15
- .filter((t) => args.minDurationMs === undefined || t.durationMs >= args.minDurationMs)
16
- .filter((t) => args.status === undefined || t.status === args.status)
17
- .slice(0, args.limit ?? 20);
18
- return json(items);
17
+ const data = await src.open("list_traces", args);
18
+ const where = allOf([args.minDurationMs === undefined ? null : `duration:>=${args.minDurationMs}ms`, args.status && `status:${args.status}`, args.q]);
19
+ if (!where.ok)
20
+ return failed(where.error);
21
+ return json(await findAll(data, "traces", where.node, args.range ?? "24h", args.limit ?? 20));
19
22
  });
20
23
  }
21
- function registerGetTrace(server, data, audit) {
24
+ function registerGetTrace(server, src) {
22
25
  const inputSchema = {
26
+ ...src.arg,
23
27
  traceId: z.string().regex(/^[0-9a-f]{32}$/).describe("32 hex trace id."),
24
28
  federate: z.boolean().optional().describe("Include spans from downstream services. Default true."),
25
29
  };
26
30
  const description = "Get one trace with all spans and logs (redacted). Federates across services by default.";
27
31
  server.registerTool("get_trace", { description, inputSchema, annotations: READ_ONLY }, async (args) => {
28
- audit("get_trace", args);
32
+ const data = await src.open("get_trace", args);
29
33
  const trace = await data.get(args.traceId, args.federate ?? true);
30
34
  return trace ? json(trace) : { ...json({ error: "trace not found" }), isError: true };
31
35
  });
32
36
  }
33
- function registerGetErrors(server, data, audit) {
34
- const inputSchema = { limit: z.number().int().min(1).max(500).optional().describe("Default 20.") };
35
- const description = "List recent errors and exceptions with their stack traces.";
37
+ /** The error spans of the newest failed traces, up to `limit`, with their stack traces. */
38
+ async function errorsOf(data, range, limit) {
39
+ const rows = [];
40
+ for (const item of await findAll(data, "traces", parseSearch("error:true"), range, limit)) {
41
+ const trace = await data.get(item.traceId, false);
42
+ for (const s of trace?.spans.filter(isErrorSpan) ?? [])
43
+ rows.push({ traceId: item.traceId, ...errorInfo(s) });
44
+ if (rows.length >= limit)
45
+ break;
46
+ }
47
+ return rows.slice(0, limit);
48
+ }
49
+ function registerGetErrors(server, src) {
50
+ const inputSchema = { ...src.arg, limit: z.number().int().min(1).max(500).optional().describe("Default 20."), range: rangeArg("to look") };
51
+ const description = "List errors and exceptions with their stack traces, newest first, from the whole store.";
36
52
  server.registerTool("get_errors", { description, inputSchema, annotations: READ_ONLY }, async (args) => {
37
- audit("get_errors", args);
38
- const rows = data
39
- .all()
40
- .flatMap((t) => t.spans.filter(isErrorSpan).map((s) => ({ traceId: t.traceId, ...errorInfo(s) })))
41
- .slice(0, args.limit ?? 20);
42
- return json(rows);
53
+ const data = await src.open("get_errors", args);
54
+ return json(await errorsOf(data, args.range ?? "24h", args.limit ?? 20));
43
55
  });
44
56
  }
45
57
  /** list_traces, get_trace, and get_errors. */
46
- export function registerTraceTools(server, data, audit) {
47
- registerListTraces(server, data, audit);
48
- registerGetTrace(server, data, audit);
49
- registerGetErrors(server, data, audit);
58
+ export function registerTraceTools(server, src) {
59
+ registerListTraces(server, src);
60
+ registerGetTrace(server, src);
61
+ registerGetErrors(server, src);
50
62
  }
51
63
  //# sourceMappingURL=mcp-traces.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"mcp-traces.js","sourceRoot":"","sources":["../src/mcp-traces.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"mcp-traces.js","sourceRoot":"","sources":["../src/mcp-traces.ts"],"names":[],"mappings":"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"}
package/dist/mcp.d.ts CHANGED
@@ -1,6 +1,6 @@
1
1
  import type { IncomingMessage, ServerResponse } from "node:http";
2
- import { type McpDataSource } from "./mcp-shared.js";
3
- export type { McpDataSource } from "./mcp-shared.js";
4
- /** Handle one MCP streamable HTTP request in stateless mode. */
5
- export declare function handleMcp(data: McpDataSource, req: IncomingMessage, res: ServerResponse, body: unknown): Promise<void>;
2
+ import { type McpDataSource, type McpProjects } from "./mcp-shared.js";
3
+ export type { McpDataSource, McpProject, McpProjects } from "./mcp-shared.js";
4
+ /** Handle one MCP streamable HTTP request in stateless mode, for one data source or several projects. */
5
+ export declare function handleMcp(data: McpDataSource | McpProjects, req: IncomingMessage, res: ServerResponse, body: unknown): Promise<void>;
6
6
  //# sourceMappingURL=mcp.d.ts.map
package/dist/mcp.d.ts.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"mcp.d.ts","sourceRoot":"","sources":["../src/mcp.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,eAAe,EAAE,cAAc,EAAE,MAAM,WAAW,CAAC;AAKjE,OAAO,EAAc,KAAK,aAAa,EAAE,MAAM,iBAAiB,CAAC;AAGjE,YAAY,EAAE,aAAa,EAAE,MAAM,iBAAiB,CAAC;AAYrD,gEAAgE;AAChE,wBAAsB,SAAS,CAAC,IAAI,EAAE,aAAa,EAAE,GAAG,EAAE,eAAe,EAAE,GAAG,EAAE,cAAc,EAAE,IAAI,EAAE,OAAO,GAAG,OAAO,CAAC,IAAI,CAAC,CAS5H"}
1
+ {"version":3,"file":"mcp.d.ts","sourceRoot":"","sources":["../src/mcp.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,eAAe,EAAE,cAAc,EAAE,MAAM,WAAW,CAAC;AAMjE,OAAO,EAAE,KAAK,aAAa,EAAE,KAAK,WAAW,EAAe,MAAM,iBAAiB,CAAC;AAIpF,YAAY,EAAE,aAAa,EAAE,UAAU,EAAE,WAAW,EAAE,MAAM,iBAAiB,CAAC;AAkB9E,yGAAyG;AACzG,wBAAsB,SAAS,CAAC,IAAI,EAAE,aAAa,GAAG,WAAW,EAAE,GAAG,EAAE,eAAe,EAAE,GAAG,EAAE,cAAc,EAAE,IAAI,EAAE,OAAO,GAAG,OAAO,CAAC,IAAI,CAAC,CAS1I"}
package/dist/mcp.js CHANGED
@@ -2,17 +2,25 @@ import { McpServer } from "@modelcontextprotocol/sdk/server/mcp.js";
2
2
  import { StreamableHTTPServerTransport } from "@modelcontextprotocol/sdk/server/streamableHttp.js";
3
3
  import { registerFindTools } from "./mcp-find.js";
4
4
  import { registerMetricTools } from "./mcp-metrics.js";
5
+ import { projectsSource, registerProjectTools, singleSource } from "./mcp-projects.js";
5
6
  import {} from "./mcp-shared.js";
7
+ import { registerSearchTools } from "./mcp-search.js";
6
8
  import { registerTraceTools } from "./mcp-traces.js";
9
+ const isProjects = (d) => "projects" in d;
10
+ const MANY = "This key reads several projects. Call list_projects, then pass `project` to the other tools.";
7
11
  function createServer(data) {
8
- const server = new McpServer({ name: "wizelens", version: data.version });
9
- const audit = (tool, args) => data.audit(`[wizelens] mcp tool=${tool} service=${data.service} args=${JSON.stringify(args ?? {})}`);
10
- registerTraceTools(server, data, audit);
11
- registerFindTools(server, data, audit);
12
- registerMetricTools(server, data, audit);
12
+ const many = isProjects(data) && data.projects.length > 1;
13
+ const server = new McpServer({ name: "wizelens", version: data.version }, many ? { instructions: MANY } : undefined);
14
+ const src = isProjects(data) ? projectsSource(data) : singleSource(data);
15
+ if (isProjects(data))
16
+ registerProjectTools(server, data);
17
+ registerTraceTools(server, src);
18
+ registerFindTools(server, src);
19
+ registerMetricTools(server, src);
20
+ registerSearchTools(server, src);
13
21
  return server;
14
22
  }
15
- /** Handle one MCP streamable HTTP request in stateless mode. */
23
+ /** Handle one MCP streamable HTTP request in stateless mode, for one data source or several projects. */
16
24
  export async function handleMcp(data, req, res, body) {
17
25
  const server = createServer(data);
18
26
  const transport = new StreamableHTTPServerTransport({ sessionIdGenerator: undefined, enableJsonResponse: true });
package/dist/mcp.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"mcp.js","sourceRoot":"","sources":["../src/mcp.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,SAAS,EAAE,MAAM,yCAAyC,CAAC;AACpE,OAAO,EAAE,6BAA6B,EAAE,MAAM,oDAAoD,CAAC;AACnG,OAAO,EAAE,iBAAiB,EAAE,MAAM,eAAe,CAAC;AAClD,OAAO,EAAE,mBAAmB,EAAE,MAAM,kBAAkB,CAAC;AACvD,OAAO,EAAkC,MAAM,iBAAiB,CAAC;AACjE,OAAO,EAAE,kBAAkB,EAAE,MAAM,iBAAiB,CAAC;AAIrD,SAAS,YAAY,CAAC,IAAmB;IACvC,MAAM,MAAM,GAAG,IAAI,SAAS,CAAC,EAAE,IAAI,EAAE,UAAU,EAAE,OAAO,EAAE,IAAI,CAAC,OAAO,EAAE,CAAC,CAAC;IAC1E,MAAM,KAAK,GAAU,CAAC,IAAI,EAAE,IAAI,EAAE,EAAE,CAClC,IAAI,CAAC,KAAK,CAAC,uBAAuB,IAAI,YAAY,IAAI,CAAC,OAAO,SAAS,IAAI,CAAC,SAAS,CAAC,IAAI,IAAI,EAAE,CAAC,EAAE,CAAC,CAAC;IACvG,kBAAkB,CAAC,MAAM,EAAE,IAAI,EAAE,KAAK,CAAC,CAAC;IACxC,iBAAiB,CAAC,MAAM,EAAE,IAAI,EAAE,KAAK,CAAC,CAAC;IACvC,mBAAmB,CAAC,MAAM,EAAE,IAAI,EAAE,KAAK,CAAC,CAAC;IACzC,OAAO,MAAM,CAAC;AAChB,CAAC;AAED,gEAAgE;AAChE,MAAM,CAAC,KAAK,UAAU,SAAS,CAAC,IAAmB,EAAE,GAAoB,EAAE,GAAmB,EAAE,IAAa;IAC3G,MAAM,MAAM,GAAG,YAAY,CAAC,IAAI,CAAC,CAAC;IAClC,MAAM,SAAS,GAAG,IAAI,6BAA6B,CAAC,EAAE,kBAAkB,EAAE,SAAS,EAAE,kBAAkB,EAAE,IAAI,EAAE,CAAC,CAAC;IACjH,GAAG,CAAC,EAAE,CAAC,OAAO,EAAE,GAAG,EAAE;QACnB,KAAK,SAAS,CAAC,KAAK,EAAE,CAAC;QACvB,KAAK,MAAM,CAAC,KAAK,EAAE,CAAC;IACtB,CAAC,CAAC,CAAC;IACH,MAAM,MAAM,CAAC,OAAO,CAAC,SAAS,CAAC,CAAC;IAChC,MAAM,SAAS,CAAC,aAAa,CAAC,GAAG,EAAE,GAAG,EAAE,IAAI,CAAC,CAAC;AAChD,CAAC"}
1
+ {"version":3,"file":"mcp.js","sourceRoot":"","sources":["../src/mcp.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,SAAS,EAAE,MAAM,yCAAyC,CAAC;AACpE,OAAO,EAAE,6BAA6B,EAAE,MAAM,oDAAoD,CAAC;AACnG,OAAO,EAAE,iBAAiB,EAAE,MAAM,eAAe,CAAC;AAClD,OAAO,EAAE,mBAAmB,EAAE,MAAM,kBAAkB,CAAC;AACvD,OAAO,EAAE,cAAc,EAAE,oBAAoB,EAAE,YAAY,EAAE,MAAM,mBAAmB,CAAC;AACvF,OAAO,EAAqD,MAAM,iBAAiB,CAAC;AACpF,OAAO,EAAE,mBAAmB,EAAE,MAAM,iBAAiB,CAAC;AACtD,OAAO,EAAE,kBAAkB,EAAE,MAAM,iBAAiB,CAAC;AAIrD,MAAM,UAAU,GAAG,CAAC,CAA8B,EAAoB,EAAE,CAAC,UAAU,IAAI,CAAC,CAAC;AAEzF,MAAM,IAAI,GAAG,8FAA8F,CAAC;AAE5G,SAAS,YAAY,CAAC,IAAiC;IACrD,MAAM,IAAI,GAAG,UAAU,CAAC,IAAI,CAAC,IAAI,IAAI,CAAC,QAAQ,CAAC,MAAM,GAAG,CAAC,CAAC;IAC1D,MAAM,MAAM,GAAG,IAAI,SAAS,CAAC,EAAE,IAAI,EAAE,UAAU,EAAE,OAAO,EAAE,IAAI,CAAC,OAAO,EAAE,EAAE,IAAI,CAAC,CAAC,CAAC,EAAE,YAAY,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC;IACrH,MAAM,GAAG,GAAW,UAAU,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,cAAc,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,YAAY,CAAC,IAAI,CAAC,CAAC;IACjF,IAAI,UAAU,CAAC,IAAI,CAAC;QAAE,oBAAoB,CAAC,MAAM,EAAE,IAAI,CAAC,CAAC;IACzD,kBAAkB,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC;IAChC,iBAAiB,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC;IAC/B,mBAAmB,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC;IACjC,mBAAmB,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC;IACjC,OAAO,MAAM,CAAC;AAChB,CAAC;AAED,yGAAyG;AACzG,MAAM,CAAC,KAAK,UAAU,SAAS,CAAC,IAAiC,EAAE,GAAoB,EAAE,GAAmB,EAAE,IAAa;IACzH,MAAM,MAAM,GAAG,YAAY,CAAC,IAAI,CAAC,CAAC;IAClC,MAAM,SAAS,GAAG,IAAI,6BAA6B,CAAC,EAAE,kBAAkB,EAAE,SAAS,EAAE,kBAAkB,EAAE,IAAI,EAAE,CAAC,CAAC;IACjH,GAAG,CAAC,EAAE,CAAC,OAAO,EAAE,GAAG,EAAE;QACnB,KAAK,SAAS,CAAC,KAAK,EAAE,CAAC;QACvB,KAAK,MAAM,CAAC,KAAK,EAAE,CAAC;IACtB,CAAC,CAAC,CAAC;IACH,MAAM,MAAM,CAAC,OAAO,CAAC,SAAS,CAAC,CAAC;IAChC,MAAM,SAAS,CAAC,aAAa,CAAC,GAAG,EAAE,GAAG,EAAE,IAAI,CAAC,CAAC;AAChD,CAAC"}