@wizeworks/lens-hub 0.3.0-alpha.1 → 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.
package/dist/api.d.ts.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"api.d.ts","sourceRoot":"","sources":["../src/api.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,eAAe,EAAE,cAAc,EAAE,MAAM,WAAW,CAAC;AACjE,OAAO,EAAc,KAAK,WAAW,EAAE,MAAM,sBAAsB,CAAC;AAGpE,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAEzC,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,cAAc,CAAC;AAGvD,OAAO,EAAuC,KAAK,UAAU,EAAE,MAAM,iBAAiB,CAAC;AAEvF,MAAM,WAAW,UAAU;IACzB,IAAI,EAAE,OAAO,CAAC;IACd,CAAC,EAAE,kBAAkB,CAAC;IACtB,OAAO,EAAE,MAAM,CAAC;IAChB,SAAS,EAAE,MAAM,CAAC;CACnB;AAKD,wBAAgB,OAAO,CAAC,CAAC,EAAE,UAAU,GAAG,WAAW,CAclD;AAED,uHAAuH;AACvH,wBAAgB,OAAO,CAAC,CAAC,EAAE,eAAe,GAAG;IAAE,CAAC,EAAE,UAAU,CAAC;IAAC,IAAI,EAAE,OAAO,CAAA;CAAE,CAM5E;AAmCD,uCAAuC;AACvC,wBAAsB,SAAS,CAAC,CAAC,EAAE,UAAU,EAAE,GAAG,EAAE,MAAM,EAAE,GAAG,EAAE,eAAe,EAAE,GAAG,EAAE,cAAc,EAAE,GAAG,EAAE,GAAG,GAAG,OAAO,CAAC,IAAI,CAAC,CAc9H"}
1
+ {"version":3,"file":"api.d.ts","sourceRoot":"","sources":["../src/api.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,eAAe,EAAE,cAAc,EAAE,MAAM,WAAW,CAAC;AACjE,OAAO,EAAc,KAAK,WAAW,EAAE,MAAM,sBAAsB,CAAC;AAGpE,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAEzC,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,cAAc,CAAC;AAKvD,OAAO,EAAuC,KAAK,UAAU,EAAE,MAAM,iBAAiB,CAAC;AAEvF,MAAM,WAAW,UAAU;IACzB,IAAI,EAAE,OAAO,CAAC;IACd,CAAC,EAAE,kBAAkB,CAAC;IACtB,OAAO,EAAE,MAAM,CAAC;IAChB,SAAS,EAAE,MAAM,CAAC;CACnB;AAKD,wBAAgB,OAAO,CAAC,CAAC,EAAE,UAAU,GAAG,WAAW,CAclD;AAED,uHAAuH;AACvH,wBAAgB,OAAO,CAAC,CAAC,EAAE,eAAe,GAAG;IAAE,CAAC,EAAE,UAAU,CAAC;IAAC,IAAI,EAAE,OAAO,CAAA;CAAE,CAM5E;AAmCD,uCAAuC;AACvC,wBAAsB,SAAS,CAAC,CAAC,EAAE,UAAU,EAAE,GAAG,EAAE,MAAM,EAAE,GAAG,EAAE,eAAe,EAAE,GAAG,EAAE,cAAc,EAAE,GAAG,EAAE,GAAG,GAAG,OAAO,CAAC,IAAI,CAAC,CAiB9H"}
package/dist/api.js CHANGED
@@ -5,13 +5,15 @@ import { parseJson, readBody } from "./body.js";
5
5
  import { parseIngest } from "./ingest.js";
6
6
  import { metricParams, metricsPage, rangeOf } from "./metrics-read.js";
7
7
  import { sendPageModel } from "./models-api.js";
8
+ import { streamChanges } from "./changes-api.js";
9
+ import { sendSearch, sendSuggest } from "./search-api.js";
8
10
  import { countRows, distinctOf, listServices } from "./store-read.js";
9
11
  const clamp = (v, min, max) => Math.min(max, Math.max(min, v));
10
12
  const num = (p, k) => (p.has(k) && Number.isFinite(Number(p.get(k))) ? Number(p.get(k)) : undefined);
11
13
  export function hubInfo(c) {
12
14
  return {
13
15
  mode: "hub",
14
- capabilities: ["federation", "environments", "registry", "metrics", "serverMetrics", "serverStats"],
16
+ capabilities: ["federation", "environments", "registry", "metrics", "serverMetrics", "serverStats", "search", "changes"],
15
17
  service: c.o.name,
16
18
  version: c.version,
17
19
  runtime: `node ${process.version} · lens-node ${NODE_VERSION}`,
@@ -78,6 +80,12 @@ export async function handleApi(c, sub, req, res, url) {
78
80
  const { q, full } = queryOf(url.searchParams);
79
81
  return sendJson(res, 200, full ? c.data.traces(q) : c.data.summaries(q));
80
82
  }
83
+ if (sub === "api/search" && method === "GET")
84
+ return sendSearch(c, url.searchParams, res);
85
+ if (sub === "api/changes" && method === "GET")
86
+ return streamChanges(c, req, res);
87
+ if (sub === "api/search/suggest" && method === "GET")
88
+ return sendSuggest(c, url.searchParams, res);
81
89
  if (sub === "api/models/metrics" && method === "GET")
82
90
  return sendJson(res, 200, metrics(c, url.searchParams));
83
91
  if (sub.startsWith("api/models/") && method === "GET")
package/dist/api.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"api.js","sourceRoot":"","sources":["../src/api.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"api.js","sourceRoot":"","sources":["../src/api.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,5 @@
1
+ import type { IncomingMessage, ServerResponse } from "node:http";
2
+ import type { ApiContext } from "./api.js";
3
+ /** Stream until the client goes away. The hub settles every project together, so one event covers all. */
4
+ export declare function streamChanges(c: ApiContext, req: IncomingMessage, res: ServerResponse): Promise<void>;
5
+ //# sourceMappingURL=changes-api.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"changes-api.d.ts","sourceRoot":"","sources":["../src/changes-api.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,eAAe,EAAE,cAAc,EAAE,MAAM,WAAW,CAAC;AACjE,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,UAAU,CAAC;AAM3C,0GAA0G;AAC1G,wBAAsB,aAAa,CAAC,CAAC,EAAE,UAAU,EAAE,GAAG,EAAE,eAAe,EAAE,GAAG,EAAE,cAAc,GAAG,OAAO,CAAC,IAAI,CAAC,CAa3G"}
@@ -0,0 +1,21 @@
1
+ // `api/changes` on the hub: the same server-sent events as the cloud, one `data` event each time settling builds new stats.
2
+ const CHECK_MS = 1_000;
3
+ const HEARTBEAT_MS = 25_000;
4
+ /** Stream until the client goes away. The hub settles every project together, so one event covers all. */
5
+ export async function streamChanges(c, req, res) {
6
+ res.writeHead(200, { "Content-Type": "text/event-stream", "Cache-Control": "no-cache, no-transform", Connection: "keep-alive" });
7
+ res.write("retry: 5000\n\n");
8
+ const store = c.data.store;
9
+ let seen = store.settleGen;
10
+ let quiet = 0;
11
+ const timer = setInterval(() => {
12
+ quiet += CHECK_MS;
13
+ if (store.settleGen !== seen)
14
+ (seen = store.settleGen), (quiet = 0), res.write(`event: data\ndata: ${seen}\n\n`);
15
+ else if (quiet >= HEARTBEAT_MS)
16
+ (quiet = 0), res.write(": beat\n\n");
17
+ }, CHECK_MS);
18
+ await new Promise((resolve) => req.once("close", resolve));
19
+ clearInterval(timer);
20
+ }
21
+ //# sourceMappingURL=changes-api.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"changes-api.js","sourceRoot":"","sources":["../src/changes-api.ts"],"names":[],"mappings":"AAGA,4HAA4H;AAC5H,MAAM,QAAQ,GAAG,KAAK,CAAC;AACvB,MAAM,YAAY,GAAG,MAAM,CAAC;AAE5B,0GAA0G;AAC1G,MAAM,CAAC,KAAK,UAAU,aAAa,CAAC,CAAa,EAAE,GAAoB,EAAE,GAAmB;IAC1F,GAAG,CAAC,SAAS,CAAC,GAAG,EAAE,EAAE,cAAc,EAAE,mBAAmB,EAAE,eAAe,EAAE,wBAAwB,EAAE,UAAU,EAAE,YAAY,EAAE,CAAC,CAAC;IACjI,GAAG,CAAC,KAAK,CAAC,iBAAiB,CAAC,CAAC;IAC7B,MAAM,KAAK,GAAG,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC;IAC3B,IAAI,IAAI,GAAG,KAAK,CAAC,SAAS,CAAC;IAC3B,IAAI,KAAK,GAAG,CAAC,CAAC;IACd,MAAM,KAAK,GAAG,WAAW,CAAC,GAAG,EAAE;QAC7B,KAAK,IAAI,QAAQ,CAAC;QAClB,IAAI,KAAK,CAAC,SAAS,KAAK,IAAI;YAAE,CAAC,IAAI,GAAG,KAAK,CAAC,SAAS,CAAC,EAAE,CAAC,KAAK,GAAG,CAAC,CAAC,EAAE,GAAG,CAAC,KAAK,CAAC,sBAAsB,IAAI,MAAM,CAAC,CAAC;aAC5G,IAAI,KAAK,IAAI,YAAY;YAAE,CAAC,KAAK,GAAG,CAAC,CAAC,EAAE,GAAG,CAAC,KAAK,CAAC,YAAY,CAAC,CAAC;IACvE,CAAC,EAAE,QAAQ,CAAC,CAAC;IACb,MAAM,IAAI,OAAO,CAAO,CAAC,OAAO,EAAE,EAAE,CAAC,GAAG,CAAC,IAAI,CAAC,OAAO,EAAE,OAAO,CAAC,CAAC,CAAC;IACjE,aAAa,CAAC,KAAK,CAAC,CAAC;AACvB,CAAC"}
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,EAA6C,KAAK,aAAa,EAAE,MAAM,0BAA0B,CAAC;AACzG,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAMzC,wBAAgB,YAAY,CAAC,IAAI,EAAE,OAAO,EAAE,IAAI,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,EAAE,KAAK,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,IAAI,GAAG,aAAa,CAYvH"}
1
+ {"version":3,"file":"mcp.d.ts","sourceRoot":"","sources":["../src/mcp.ts"],"names":[],"mappings":"AACA,OAAO,EAA6C,KAAK,aAAa,EAAE,MAAM,0BAA0B,CAAC;AACzG,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAOzC,wBAAgB,YAAY,CAAC,IAAI,EAAE,OAAO,EAAE,IAAI,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,EAAE,KAAK,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,IAAI,GAAG,aAAa,CAevH"}
package/dist/mcp.js CHANGED
@@ -1,18 +1,23 @@
1
+ import { searchSql, SQLITE_DIALECT, suggestSql } from "@wizeworks/lens-core";
1
2
  import { DEFAULT_N_PLUS_ONE, DEFAULT_SLOW_QUERY_MS } from "@wizeworks/lens-node/kit";
2
3
  import { metricsPage } from "./metrics-read.js";
4
+ import { sqliteRunner } from "./scale-exec.js";
3
5
  /** Recent traces the MCP tools search through. */
4
6
  const MCP_RECENT = 2000;
5
7
  export function hubMcpSource(data, name, version, audit) {
8
+ const src = { d: SQLITE_DIALECT, run: sqliteRunner(data.store.db), scope: {} };
6
9
  return {
7
10
  service: name,
8
11
  version,
9
12
  slowQueryMs: DEFAULT_SLOW_QUERY_MS,
10
13
  nPlusOneThreshold: DEFAULT_N_PLUS_ONE,
11
- list: (limit) => data.summaries({ limit }),
12
14
  all: () => data.traces({ limit: MCP_RECENT }),
13
15
  get: (traceId, federate) => data.getTrace(traceId, federate),
14
16
  audit,
15
17
  metrics: (range, params) => metricsPage(data.store.db, range, {}, params, data.store.now()),
18
+ search: (q) => searchSql(src, q),
19
+ suggest: (r) => suggestSql(src, r),
20
+ now: () => data.store.now(),
16
21
  };
17
22
  }
18
23
  //# sourceMappingURL=mcp.js.map
package/dist/mcp.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"mcp.js","sourceRoot":"","sources":["../src/mcp.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,kBAAkB,EAAE,qBAAqB,EAAsB,MAAM,0BAA0B,CAAC;AAEzG,OAAO,EAAE,WAAW,EAAE,MAAM,mBAAmB,CAAC;AAEhD,kDAAkD;AAClD,MAAM,UAAU,GAAG,IAAI,CAAC;AAExB,MAAM,UAAU,YAAY,CAAC,IAAa,EAAE,IAAY,EAAE,OAAe,EAAE,KAA6B;IACtG,OAAO;QACL,OAAO,EAAE,IAAI;QACb,OAAO;QACP,WAAW,EAAE,qBAAqB;QAClC,iBAAiB,EAAE,kBAAkB;QACrC,IAAI,EAAE,CAAC,KAAK,EAAE,EAAE,CAAC,IAAI,CAAC,SAAS,CAAC,EAAE,KAAK,EAAE,CAAC;QAC1C,GAAG,EAAE,GAAG,EAAE,CAAC,IAAI,CAAC,MAAM,CAAC,EAAE,KAAK,EAAE,UAAU,EAAE,CAAC;QAC7C,GAAG,EAAE,CAAC,OAAO,EAAE,QAAQ,EAAE,EAAE,CAAC,IAAI,CAAC,QAAQ,CAAC,OAAO,EAAE,QAAQ,CAAC;QAC5D,KAAK;QACL,OAAO,EAAE,CAAC,KAAK,EAAE,MAAM,EAAE,EAAE,CAAC,WAAW,CAAC,IAAI,CAAC,KAAK,CAAC,EAAE,EAAE,KAAK,EAAE,EAAE,EAAE,MAAM,EAAE,IAAI,CAAC,KAAK,CAAC,GAAG,EAAE,CAAC;KAC5F,CAAC;AACJ,CAAC"}
1
+ {"version":3,"file":"mcp.js","sourceRoot":"","sources":["../src/mcp.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,cAAc,EAAE,UAAU,EAAE,MAAM,sBAAsB,CAAC;AAC7E,OAAO,EAAE,kBAAkB,EAAE,qBAAqB,EAAsB,MAAM,0BAA0B,CAAC;AAEzG,OAAO,EAAE,WAAW,EAAE,MAAM,mBAAmB,CAAC;AAChD,OAAO,EAAE,YAAY,EAAE,MAAM,iBAAiB,CAAC;AAE/C,kDAAkD;AAClD,MAAM,UAAU,GAAG,IAAI,CAAC;AAExB,MAAM,UAAU,YAAY,CAAC,IAAa,EAAE,IAAY,EAAE,OAAe,EAAE,KAA6B;IACtG,MAAM,GAAG,GAAG,EAAE,CAAC,EAAE,cAAc,EAAE,GAAG,EAAE,YAAY,CAAC,IAAI,CAAC,KAAK,CAAC,EAAE,CAAC,EAAE,KAAK,EAAE,EAAE,EAAE,CAAC;IAC/E,OAAO;QACL,OAAO,EAAE,IAAI;QACb,OAAO;QACP,WAAW,EAAE,qBAAqB;QAClC,iBAAiB,EAAE,kBAAkB;QACrC,GAAG,EAAE,GAAG,EAAE,CAAC,IAAI,CAAC,MAAM,CAAC,EAAE,KAAK,EAAE,UAAU,EAAE,CAAC;QAC7C,GAAG,EAAE,CAAC,OAAO,EAAE,QAAQ,EAAE,EAAE,CAAC,IAAI,CAAC,QAAQ,CAAC,OAAO,EAAE,QAAQ,CAAC;QAC5D,KAAK;QACL,OAAO,EAAE,CAAC,KAAK,EAAE,MAAM,EAAE,EAAE,CAAC,WAAW,CAAC,IAAI,CAAC,KAAK,CAAC,EAAE,EAAE,KAAK,EAAE,EAAE,EAAE,MAAM,EAAE,IAAI,CAAC,KAAK,CAAC,GAAG,EAAE,CAAC;QAC3F,MAAM,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC,SAAS,CAAC,GAAG,EAAE,CAAC,CAAC;QAChC,OAAO,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC,UAAU,CAAC,GAAG,EAAE,CAAC,CAAC;QAClC,GAAG,EAAE,GAAG,EAAE,CAAC,IAAI,CAAC,KAAK,CAAC,GAAG,EAAE;KAC5B,CAAC;AACJ,CAAC"}
@@ -0,0 +1,4 @@
1
+ import type { DatabaseSync } from "node:sqlite";
2
+ /** Add the indexes; a file that had rows before them fills them once. */
3
+ export declare function upgradeFts(db: DatabaseSync): void;
4
+ //# sourceMappingURL=schema-fts.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"schema-fts.d.ts","sourceRoot":"","sources":["../src/schema-fts.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,aAAa,CAAC;AAchD,yEAAyE;AACzE,wBAAgB,UAAU,CAAC,EAAE,EAAE,YAAY,GAAG,IAAI,CAMjD"}
@@ -0,0 +1,20 @@
1
+ // Trigram indexes (docs/SEARCH-PLAN.md, "Hub"): "contains" searches of 3 or more characters read these, not the whole time window.
2
+ const FTS_COLUMNS = { fact_search: "text", fact_requests: "search", fact_traces: "search", fact_logs: "search" };
3
+ /** An index over `table.col`, kept in step with the table by triggers. */
4
+ const ftsSql = (t, col) => `
5
+ CREATE VIRTUAL TABLE IF NOT EXISTS ${t}_fts USING fts5(${col}, content='${t}', content_rowid='rowid', tokenize='trigram case_sensitive 1');
6
+ CREATE TRIGGER IF NOT EXISTS ${t}_fts_ai AFTER INSERT ON ${t} BEGIN INSERT INTO ${t}_fts (rowid, ${col}) VALUES (new.rowid, new.${col}); END;
7
+ CREATE TRIGGER IF NOT EXISTS ${t}_fts_ad AFTER DELETE ON ${t} BEGIN INSERT INTO ${t}_fts (${t}_fts, rowid, ${col}) VALUES ('delete', old.rowid, old.${col}); END;
8
+ CREATE TRIGGER IF NOT EXISTS ${t}_fts_au AFTER UPDATE ON ${t} BEGIN
9
+ INSERT INTO ${t}_fts (${t}_fts, rowid, ${col}) VALUES ('delete', old.rowid, old.${col}); INSERT INTO ${t}_fts (rowid, ${col}) VALUES (new.rowid, new.${col});
10
+ END;`;
11
+ /** Add the indexes; a file that had rows before them fills them once. */
12
+ export function upgradeFts(db) {
13
+ for (const [t, col] of Object.entries(FTS_COLUMNS)) {
14
+ const had = db.prepare("SELECT 1 FROM sqlite_master WHERE type = 'table' AND name = ?").get(`${t}_fts`);
15
+ db.exec(ftsSql(t, col));
16
+ if (!had)
17
+ db.exec(`INSERT INTO ${t}_fts (${t}_fts) VALUES ('rebuild')`);
18
+ }
19
+ }
20
+ //# sourceMappingURL=schema-fts.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"schema-fts.js","sourceRoot":"","sources":["../src/schema-fts.ts"],"names":[],"mappings":"AAEA,mIAAmI;AACnI,MAAM,WAAW,GAA2B,EAAE,WAAW,EAAE,MAAM,EAAE,aAAa,EAAE,QAAQ,EAAE,WAAW,EAAE,QAAQ,EAAE,SAAS,EAAE,QAAQ,EAAE,CAAC;AAEzI,0EAA0E;AAC1E,MAAM,MAAM,GAAG,CAAC,CAAS,EAAE,GAAW,EAAE,EAAE,CAAC;qCACN,CAAC,mBAAmB,GAAG,cAAc,CAAC;+BAC5C,CAAC,2BAA2B,CAAC,sBAAsB,CAAC,gBAAgB,GAAG,4BAA4B,GAAG;+BACtG,CAAC,2BAA2B,CAAC,sBAAsB,CAAC,SAAS,CAAC,gBAAgB,GAAG,sCAAsC,GAAG;+BAC1H,CAAC,2BAA2B,CAAC;gBAC5C,CAAC,SAAS,CAAC,gBAAgB,GAAG,sCAAsC,GAAG,kBAAkB,CAAC,gBAAgB,GAAG,4BAA4B,GAAG;KACvJ,CAAC;AAEN,yEAAyE;AACzE,MAAM,UAAU,UAAU,CAAC,EAAgB;IACzC,KAAK,MAAM,CAAC,CAAC,EAAE,GAAG,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,WAAW,CAAC,EAAE,CAAC;QACnD,MAAM,GAAG,GAAG,EAAE,CAAC,OAAO,CAAC,+DAA+D,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC;QACxG,EAAE,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC,CAAC;QACxB,IAAI,CAAC,GAAG;YAAE,EAAE,CAAC,IAAI,CAAC,eAAe,CAAC,SAAS,CAAC,0BAA0B,CAAC,CAAC;IAC1E,CAAC;AACH,CAAC"}
@@ -1 +1 @@
1
- {"version":3,"file":"schema-scale.d.ts","sourceRoot":"","sources":["../src/schema-scale.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,aAAa,CAAC;AA4BhD,eAAO,MAAM,gBAAgB,QAyC5B,CAAC;AAEF,uCAAuC;AACvC,eAAO,MAAM,YAAY,UAAwH,CAAC;AAkBlJ,uHAAuH;AACvH,wBAAgB,gBAAgB,CAAC,EAAE,EAAE,YAAY,GAAG,IAAI,CASvD"}
1
+ {"version":3,"file":"schema-scale.d.ts","sourceRoot":"","sources":["../src/schema-scale.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,aAAa,CAAC;AA6BhD,eAAO,MAAM,gBAAgB,QAsD5B,CAAC;AAEF,uCAAuC;AACvC,eAAO,MAAM,YAAY,UAAqJ,CAAC;AAkB/K,uHAAuH;AACvH,wBAAgB,gBAAgB,CAAC,EAAE,EAAE,YAAY,GAAG,IAAI,CAUvD"}
@@ -1,4 +1,5 @@
1
1
  import { FACTS_VERSION } from "@wizeworks/lens-core";
2
+ import { upgradeFts } from "./schema-fts.js";
2
3
  import { HUB_SCHEMA, HUB_SCHEMA_VERSION } from "./schema.js";
3
4
  // Stats tables (docs/CONTRACT.md, "Hub storage"): facts per trace, rollups per tier, and metric rollups. The tiers are identical.
4
5
  const TIERS = ["10s", "5m", "1h"];
@@ -55,6 +56,19 @@ CREATE TABLE IF NOT EXISTS fact_critical (
55
56
  );
56
57
  CREATE INDEX IF NOT EXISTS ix_fact_critical_time ON fact_critical (start_ms);
57
58
  CREATE INDEX IF NOT EXISTS ix_fact_critical_project ON fact_critical (project, start_ms);
59
+ CREATE TABLE IF NOT EXISTS fact_search (
60
+ project TEXT NOT NULL DEFAULT '', kind TEXT NOT NULL, trace_id TEXT NOT NULL, owner TEXT NOT NULL, env TEXT NOT NULL DEFAULT '', time_ms REAL NOT NULL,
61
+ span_id TEXT, service TEXT NOT NULL, name TEXT, method TEXT, path TEXT, route TEXT, status INTEGER, outcome TEXT, duration_ms REAL,
62
+ level_rank INTEGER, category TEXT, span_kind TEXT, end_user TEXT, error INTEGER NOT NULL, message TEXT, text TEXT NOT NULL,
63
+ PRIMARY KEY (kind, trace_id, owner)
64
+ );
65
+ CREATE INDEX IF NOT EXISTS ix_fact_search_time ON fact_search (kind, time_ms);
66
+ CREATE INDEX IF NOT EXISTS ix_fact_search_project ON fact_search (project, kind, time_ms);
67
+ CREATE TABLE IF NOT EXISTS fact_attrs (
68
+ project TEXT NOT NULL DEFAULT '', trace_id TEXT NOT NULL, src TEXT NOT NULL, owner TEXT NOT NULL, key TEXT NOT NULL, value TEXT NOT NULL, num REAL
69
+ );
70
+ CREATE INDEX IF NOT EXISTS ix_fact_attrs_trace ON fact_attrs (trace_id, src, owner, key);
71
+ CREATE INDEX IF NOT EXISTS ix_fact_attrs_key ON fact_attrs (key, value);
58
72
  CREATE TABLE IF NOT EXISTS metric_series (
59
73
  project TEXT NOT NULL DEFAULT '', env TEXT NOT NULL DEFAULT '', series_key TEXT NOT NULL, name TEXT NOT NULL, service TEXT NOT NULL,
60
74
  kind TEXT NOT NULL, unit TEXT NOT NULL, description TEXT NOT NULL, monotonic INTEGER NOT NULL, temporality TEXT NOT NULL,
@@ -65,7 +79,7 @@ CREATE INDEX IF NOT EXISTS ix_metric_series_project ON metric_series (project, n
65
79
  ${TIERS.map(rollupTable).join("\n")}
66
80
  `;
67
81
  /** Tables the stats rebuild clears. */
68
- export const STATS_TABLES = ["fact_requests", "fact_traces", "fact_logs", "fact_critical", ...TIERS.flatMap((t) => [`rollup_${t}`, `hist_${t}`])];
82
+ export const STATS_TABLES = ["fact_requests", "fact_traces", "fact_logs", "fact_critical", "fact_search", "fact_attrs", ...TIERS.flatMap((t) => [`rollup_${t}`, `hist_${t}`])];
69
83
  const setMeta = (db, key, value) => db.prepare("INSERT OR REPLACE INTO meta (key, value) VALUES (?, ?)").run(key, value);
70
84
  /** Clear facts and rollups and mark every trace unsettled, so the settle job rebuilds them. */
71
85
  function rebuildStats(db) {
@@ -91,6 +105,7 @@ export function upgradeHubSchema(db) {
91
105
  if (!cols.has("contrib"))
92
106
  db.exec("ALTER TABLE traces ADD COLUMN contrib TEXT");
93
107
  db.exec(HUB_SCALE_SCHEMA);
108
+ upgradeFts(db);
94
109
  const facts = db.prepare("SELECT value FROM meta WHERE key = 'facts'").get();
95
110
  if (facts?.value !== String(FACTS_VERSION))
96
111
  rebuildStats(db);
@@ -1 +1 @@
1
- {"version":3,"file":"schema-scale.js","sourceRoot":"","sources":["../src/schema-scale.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,aAAa,EAAE,MAAM,sBAAsB,CAAC;AACrD,OAAO,EAAE,UAAU,EAAE,kBAAkB,EAAE,MAAM,aAAa,CAAC;AAE7D,kIAAkI;AAClI,MAAM,KAAK,GAAG,CAAC,KAAK,EAAE,IAAI,EAAE,IAAI,CAAC,CAAC;AAElC,MAAM,WAAW,GAAG,CAAC,CAAS,EAAE,EAAE,CAAC;oCACC,CAAC;;;;;;uCAME,CAAC,kBAAkB,CAAC;kCACzB,CAAC;;;;oCAIC,CAAC;;;;;;uCAME,CAAC,mBAAmB,CAAC,eAAe,CAAC;AAE5E,4GAA4G;AAC5G,MAAM,CAAC,MAAM,gBAAgB,GAAG;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;EAwC9B,KAAK,CAAC,GAAG,CAAC,WAAW,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC;CAClC,CAAC;AAEF,uCAAuC;AACvC,MAAM,CAAC,MAAM,YAAY,GAAG,CAAC,eAAe,EAAE,aAAa,EAAE,WAAW,EAAE,eAAe,EAAE,GAAG,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,UAAU,CAAC,EAAE,EAAE,QAAQ,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC;AAElJ,MAAM,OAAO,GAAG,CAAC,EAAgB,EAAE,GAAW,EAAE,KAAa,EAAE,EAAE,CAAC,EAAE,CAAC,OAAO,CAAC,wDAAwD,CAAC,CAAC,GAAG,CAAC,GAAG,EAAE,KAAK,CAAC,CAAC;AAEvJ,+FAA+F;AAC/F,SAAS,YAAY,CAAC,EAAgB;IACpC,EAAE,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;IACjB,IAAI,CAAC;QACH,KAAK,MAAM,CAAC,IAAI,YAAY;YAAE,EAAE,CAAC,IAAI,CAAC,eAAe,CAAC,EAAE,CAAC,CAAC;QAC1D,EAAE,CAAC,IAAI,CAAC,kDAAkD,CAAC,CAAC;QAC5D,OAAO,CAAC,EAAE,EAAE,OAAO,EAAE,MAAM,CAAC,aAAa,CAAC,CAAC,CAAC;QAC5C,EAAE,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;IACpB,CAAC;IAAC,OAAO,GAAG,EAAE,CAAC;QACb,EAAE,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC;QACpB,MAAM,GAAG,CAAC;IACZ,CAAC;AACH,CAAC;AAED,uHAAuH;AACvH,MAAM,UAAU,gBAAgB,CAAC,EAAgB;IAC/C,EAAE,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC;IACpB,MAAM,IAAI,GAAG,IAAI,GAAG,CAAE,EAAE,CAAC,OAAO,CAAC,2BAA2B,CAAC,CAAC,GAAG,EAAyB,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC;IAC/G,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,YAAY,CAAC;QAAE,EAAE,CAAC,IAAI,CAAC,kEAAkE,CAAC,CAAC;IACzG,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,SAAS,CAAC;QAAE,EAAE,CAAC,IAAI,CAAC,4CAA4C,CAAC,CAAC;IAChF,EAAE,CAAC,IAAI,CAAC,gBAAgB,CAAC,CAAC;IAC1B,MAAM,KAAK,GAAG,EAAE,CAAC,OAAO,CAAC,4CAA4C,CAAC,CAAC,GAAG,EAAmC,CAAC;IAC9G,IAAI,KAAK,EAAE,KAAK,KAAK,MAAM,CAAC,aAAa,CAAC;QAAE,YAAY,CAAC,EAAE,CAAC,CAAC;IAC7D,OAAO,CAAC,EAAE,EAAE,QAAQ,EAAE,kBAAkB,CAAC,CAAC;AAC5C,CAAC"}
1
+ {"version":3,"file":"schema-scale.js","sourceRoot":"","sources":["../src/schema-scale.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,7 @@
1
+ import type { ServerResponse } from "node:http";
2
+ import type { ApiContext } from "./api.js";
3
+ /** `GET api/search?q=&kind=&range=&env=&project=&limit=&cursor=`. A bad search answers 400 with the error's position. */
4
+ export declare function sendSearch(c: ApiContext, p: URLSearchParams, res: ServerResponse): Promise<void>;
5
+ /** `GET api/search/suggest?field=&prefix=&range=&project=&limit=`. */
6
+ export declare function sendSuggest(c: ApiContext, p: URLSearchParams, res: ServerResponse): Promise<void>;
7
+ //# sourceMappingURL=search-api.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"search-api.d.ts","sourceRoot":"","sources":["../src/search-api.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,WAAW,CAAC;AAGhD,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,UAAU,CAAC;AAM3C,yHAAyH;AACzH,wBAAsB,UAAU,CAAC,CAAC,EAAE,UAAU,EAAE,CAAC,EAAE,eAAe,EAAE,GAAG,EAAE,cAAc,GAAG,OAAO,CAAC,IAAI,CAAC,CAOtG;AAED,sEAAsE;AACtE,wBAAsB,WAAW,CAAC,CAAC,EAAE,UAAU,EAAE,CAAC,EAAE,eAAe,EAAE,GAAG,EAAE,cAAc,GAAG,OAAO,CAAC,IAAI,CAAC,CAIvG"}
@@ -0,0 +1,23 @@
1
+ import { searchRequestOf, searchSql, SQLITE_DIALECT, suggestRequestOf, suggestSql } from "@wizeworks/lens-core";
2
+ import { sendJson } from "@wizeworks/lens-node/kit";
3
+ import { hubSettling, sqliteRunner } from "./scale-exec.js";
4
+ // The hub's search API (docs/SEARCH-PLAN.md): one page of results, and autocomplete. `project` narrows both.
5
+ const sourceOf = (c, p) => ({ d: SQLITE_DIALECT, run: sqliteRunner(c.data.store.db), scope: { project: p.get("project") || undefined } });
6
+ /** `GET api/search?q=&kind=&range=&env=&project=&limit=&cursor=`. A bad search answers 400 with the error's position. */
7
+ export async function sendSearch(c, p, res) {
8
+ const r = searchRequestOf(p, c.o.now(), c.data.store.maxAgeMs);
9
+ if (!r.ok)
10
+ return sendJson(res, 400, r);
11
+ const t0 = performance.now();
12
+ const src = sourceOf(c, p);
13
+ const page = await searchSql(src, r.query);
14
+ sendJson(res, 200, { ...page, tookMs: Math.round(performance.now() - t0), settling: hubSettling(c.data.store, src.scope) });
15
+ }
16
+ /** `GET api/search/suggest?field=&prefix=&range=&project=&limit=`. */
17
+ export async function sendSuggest(c, p, res) {
18
+ const r = suggestRequestOf(p, c.o.now(), c.data.store.maxAgeMs);
19
+ if (!r.ok)
20
+ return sendJson(res, 400, r);
21
+ sendJson(res, 200, { items: await suggestSql(sourceOf(c, p), r.request) });
22
+ }
23
+ //# sourceMappingURL=search-api.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"search-api.js","sourceRoot":"","sources":["../src/search-api.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,eAAe,EAAE,SAAS,EAAE,cAAc,EAAE,gBAAgB,EAAE,UAAU,EAAE,MAAM,sBAAsB,CAAC;AAChH,OAAO,EAAE,QAAQ,EAAE,MAAM,0BAA0B,CAAC;AAEpD,OAAO,EAAE,WAAW,EAAE,YAAY,EAAE,MAAM,iBAAiB,CAAC;AAE5D,6GAA6G;AAC7G,MAAM,QAAQ,GAAG,CAAC,CAAa,EAAE,CAAkB,EAAE,EAAE,CAAC,CAAC,EAAE,CAAC,EAAE,cAAc,EAAE,GAAG,EAAE,YAAY,CAAC,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,EAAE,CAAC,EAAE,KAAK,EAAE,EAAE,OAAO,EAAE,CAAC,CAAC,GAAG,CAAC,SAAS,CAAC,IAAI,SAAS,EAAE,EAAE,CAAC,CAAC;AAEvK,yHAAyH;AACzH,MAAM,CAAC,KAAK,UAAU,UAAU,CAAC,CAAa,EAAE,CAAkB,EAAE,GAAmB;IACrF,MAAM,CAAC,GAAG,eAAe,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,GAAG,EAAE,EAAE,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,QAAQ,CAAC,CAAC;IAC/D,IAAI,CAAC,CAAC,CAAC,EAAE;QAAE,OAAO,QAAQ,CAAC,GAAG,EAAE,GAAG,EAAE,CAAC,CAAC,CAAC;IACxC,MAAM,EAAE,GAAG,WAAW,CAAC,GAAG,EAAE,CAAC;IAC7B,MAAM,GAAG,GAAG,QAAQ,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;IAC3B,MAAM,IAAI,GAAG,MAAM,SAAS,CAAC,GAAG,EAAE,CAAC,CAAC,KAAK,CAAC,CAAC;IAC3C,QAAQ,CAAC,GAAG,EAAE,GAAG,EAAE,EAAE,GAAG,IAAI,EAAE,MAAM,EAAE,IAAI,CAAC,KAAK,CAAC,WAAW,CAAC,GAAG,EAAE,GAAG,EAAE,CAAC,EAAE,QAAQ,EAAE,WAAW,CAAC,CAAC,CAAC,IAAI,CAAC,KAAK,EAAE,GAAG,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC;AAC9H,CAAC;AAED,sEAAsE;AACtE,MAAM,CAAC,KAAK,UAAU,WAAW,CAAC,CAAa,EAAE,CAAkB,EAAE,GAAmB;IACtF,MAAM,CAAC,GAAG,gBAAgB,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,GAAG,EAAE,EAAE,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,QAAQ,CAAC,CAAC;IAChE,IAAI,CAAC,CAAC,CAAC,EAAE;QAAE,OAAO,QAAQ,CAAC,GAAG,EAAE,GAAG,EAAE,CAAC,CAAC,CAAC;IACxC,QAAQ,CAAC,GAAG,EAAE,GAAG,EAAE,EAAE,KAAK,EAAE,MAAM,UAAU,CAAC,QAAQ,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,OAAO,CAAC,EAAE,CAAC,CAAC;AAC7E,CAAC"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@wizeworks/lens-hub",
3
- "version": "0.3.0-alpha.1",
3
+ "version": "0.3.0-alpha.3",
4
4
  "description": "The WizeLens local hub: one place for the traces of every service on your machine or network, with the full dashboard and MCP.",
5
5
  "license": "MIT",
6
6
  "author": "WizeWorks LLC",
@@ -47,11 +47,12 @@
47
47
  },
48
48
  "dependencies": {
49
49
  "protobufjs": "^7.6.6",
50
- "@wizeworks/lens-core": "^0.3.0-alpha.1",
51
- "@wizeworks/lens-node": "^0.3.0-alpha.1",
52
- "@wizeworks/lens-ui": "^0.3.0-alpha.1"
50
+ "@wizeworks/lens-core": "^0.3.0-alpha.3",
51
+ "@wizeworks/lens-ui": "^0.3.0-alpha.3",
52
+ "@wizeworks/lens-node": "^0.3.0-alpha.3"
53
53
  },
54
54
  "devDependencies": {
55
+ "@modelcontextprotocol/sdk": "^1.32.1",
55
56
  "@types/node": "^24.19.2",
56
57
  "typescript": "^7.0.2",
57
58
  "vitest": "^5.0.5"