context-lens 0.2.0 → 0.3.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.
- package/README.md +120 -25
- package/dist/cli-utils.d.ts +2 -1
- package/dist/cli-utils.d.ts.map +1 -1
- package/dist/cli-utils.js +40 -13
- package/dist/cli-utils.js.map +1 -1
- package/dist/cli.js +184 -68
- package/dist/cli.js.map +1 -1
- package/dist/core/conversation.d.ts +63 -0
- package/dist/core/conversation.d.ts.map +1 -0
- package/dist/core/conversation.js +305 -0
- package/dist/core/conversation.js.map +1 -0
- package/dist/core/health.d.ts +7 -0
- package/dist/core/health.d.ts.map +1 -0
- package/dist/core/health.js +311 -0
- package/dist/core/health.js.map +1 -0
- package/dist/core/models.d.ts +36 -0
- package/dist/core/models.d.ts.map +1 -0
- package/dist/core/models.js +111 -0
- package/dist/core/models.js.map +1 -0
- package/dist/core/parse.d.ts +17 -0
- package/dist/core/parse.d.ts.map +1 -0
- package/dist/core/parse.js +349 -0
- package/dist/core/parse.js.map +1 -0
- package/dist/core/routing.d.ts +47 -0
- package/dist/core/routing.d.ts.map +1 -0
- package/dist/core/routing.js +132 -0
- package/dist/core/routing.js.map +1 -0
- package/dist/core/security.d.ts +8 -0
- package/dist/core/security.d.ts.map +1 -0
- package/dist/core/security.js +222 -0
- package/dist/core/security.js.map +1 -0
- package/dist/core/source.d.ts +22 -0
- package/dist/core/source.d.ts.map +1 -0
- package/dist/core/source.js +56 -0
- package/dist/core/source.js.map +1 -0
- package/dist/core/tokens.d.ts +29 -0
- package/dist/core/tokens.d.ts.map +1 -0
- package/dist/core/tokens.js +163 -0
- package/dist/core/tokens.js.map +1 -0
- package/dist/core.d.ts +14 -22
- package/dist/core.d.ts.map +1 -1
- package/dist/core.js +14 -471
- package/dist/core.js.map +1 -1
- package/dist/http/headers.d.ts +25 -0
- package/dist/http/headers.d.ts.map +1 -0
- package/dist/http/headers.js +54 -0
- package/dist/http/headers.js.map +1 -0
- package/dist/lhar/composition.d.ts +12 -0
- package/dist/lhar/composition.d.ts.map +1 -0
- package/dist/lhar/composition.js +258 -0
- package/dist/lhar/composition.js.map +1 -0
- package/dist/lhar/export.d.ts +5 -0
- package/dist/lhar/export.d.ts.map +1 -0
- package/dist/lhar/export.js +59 -0
- package/dist/lhar/export.js.map +1 -0
- package/dist/lhar/record.d.ts +6 -0
- package/dist/lhar/record.d.ts.map +1 -0
- package/dist/lhar/record.js +216 -0
- package/dist/lhar/record.js.map +1 -0
- package/dist/lhar/response.d.ts +11 -0
- package/dist/lhar/response.d.ts.map +1 -0
- package/dist/lhar/response.js +132 -0
- package/dist/lhar/response.js.map +1 -0
- package/dist/lhar-types.generated.d.ts +24 -3
- package/dist/lhar-types.generated.d.ts.map +1 -1
- package/dist/lhar.d.ts +12 -19
- package/dist/lhar.d.ts.map +1 -1
- package/dist/lhar.js +16 -473
- package/dist/lhar.js.map +1 -1
- package/dist/server/api.d.ts +8 -0
- package/dist/server/api.d.ts.map +1 -0
- package/dist/server/api.js +292 -0
- package/dist/server/api.js.map +1 -0
- package/dist/server/config.d.ts +13 -0
- package/dist/server/config.d.ts.map +1 -0
- package/dist/server/config.js +36 -0
- package/dist/server/config.js.map +1 -0
- package/dist/server/projection.d.ts +9 -0
- package/dist/server/projection.d.ts.map +1 -0
- package/dist/server/projection.js +47 -0
- package/dist/server/projection.js.map +1 -0
- package/dist/server/proxy.d.ts +13 -0
- package/dist/server/proxy.d.ts.map +1 -0
- package/dist/server/proxy.js +218 -0
- package/dist/server/proxy.js.map +1 -0
- package/dist/server/static.d.ts +9 -0
- package/dist/server/static.d.ts.map +1 -0
- package/dist/server/static.js +78 -0
- package/dist/server/static.js.map +1 -0
- package/dist/server/store.d.ts +81 -0
- package/dist/server/store.d.ts.map +1 -0
- package/dist/server/store.js +632 -0
- package/dist/server/store.js.map +1 -0
- package/dist/server/webui.d.ts +5 -0
- package/dist/server/webui.d.ts.map +1 -0
- package/dist/server/webui.js +42 -0
- package/dist/server/webui.js.map +1 -0
- package/dist/server-utils.d.ts +2 -2
- package/dist/server-utils.d.ts.map +1 -1
- package/dist/server-utils.js +12 -21
- package/dist/server-utils.js.map +1 -1
- package/dist/server.js +31 -697
- package/dist/server.js.map +1 -1
- package/dist/types.d.ts +94 -10
- package/dist/types.d.ts.map +1 -1
- package/dist/version.generated.d.ts +2 -0
- package/dist/version.generated.d.ts.map +1 -0
- package/dist/version.generated.js +2 -0
- package/dist/version.generated.js.map +1 -0
- package/findings-screenshot.png +0 -0
- package/messages-screenshot.png +0 -0
- package/package.json +23 -10
- package/schema/lhar.schema.json +58 -4
- package/screenshot-overview.png +0 -0
- package/sessions-screenshot.png +0 -0
- package/timeline-screenshot.png +0 -0
- package/diff.png +0 -0
- package/overview-sidebar.png +0 -0
- package/public/index.html +0 -2804
|
@@ -0,0 +1,5 @@
|
|
|
1
|
+
import type http from "node:http";
|
|
2
|
+
import type { Store } from "./store.js";
|
|
3
|
+
export declare function loadHtmlUI(): string;
|
|
4
|
+
export declare function createWebUIHandler(store: Store, htmlUI: string, baseDir?: string): (req: http.IncomingMessage, res: http.ServerResponse) => void;
|
|
5
|
+
//# sourceMappingURL=webui.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"webui.d.ts","sourceRoot":"","sources":["../../src/server/webui.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,IAAI,MAAM,WAAW,CAAC;AAKlC,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,YAAY,CAAC;AAExC,wBAAgB,UAAU,IAAI,MAAM,CAgBnC;AAED,wBAAgB,kBAAkB,CAChC,KAAK,EAAE,KAAK,EACZ,MAAM,EAAE,MAAM,EACd,OAAO,CAAC,EAAE,MAAM,GACf,CAAC,GAAG,EAAE,IAAI,CAAC,eAAe,EAAE,GAAG,EAAE,IAAI,CAAC,cAAc,KAAK,IAAI,CAwB/D"}
|
|
@@ -0,0 +1,42 @@
|
|
|
1
|
+
import fs from "node:fs";
|
|
2
|
+
import path from "node:path";
|
|
3
|
+
import { createApiHandler } from "./api.js";
|
|
4
|
+
import { createStaticHandler } from "./static.js";
|
|
5
|
+
export function loadHtmlUI() {
|
|
6
|
+
return `<!doctype html>
|
|
7
|
+
<html lang="en">
|
|
8
|
+
<head>
|
|
9
|
+
<meta charset="utf-8" />
|
|
10
|
+
<meta name="viewport" content="width=device-width, initial-scale=1" />
|
|
11
|
+
<title>Context Lens</title>
|
|
12
|
+
</head>
|
|
13
|
+
<body style="margin:0;padding:16px;font-family:system-ui,-apple-system,Segoe UI,Roboto,sans-serif;background:#0b0f16;color:#e6edf3;">
|
|
14
|
+
<main style="max-width:720px;margin:0 auto;">
|
|
15
|
+
<h1 style="font-size:20px;margin:0 0 8px;">Context Lens UI bundle not found</h1>
|
|
16
|
+
<p style="margin:0 0 12px;color:#9fb0c4;">Build the UI and restart the server.</p>
|
|
17
|
+
<pre style="margin:0;padding:10px;border:1px solid #2d3748;background:#111827;color:#d1d5db;border-radius:6px;">cd ui && pnpm install && pnpm run build</pre>
|
|
18
|
+
</main>
|
|
19
|
+
</body>
|
|
20
|
+
</html>`;
|
|
21
|
+
}
|
|
22
|
+
export function createWebUIHandler(store, htmlUI, baseDir) {
|
|
23
|
+
const handleApi = createApiHandler(store);
|
|
24
|
+
// Check for ui/dist/ directory (new Vue UI)
|
|
25
|
+
// baseDir is the `dist/` output dir; project root is one level up
|
|
26
|
+
let uiDir = null;
|
|
27
|
+
if (baseDir) {
|
|
28
|
+
const candidate = path.join(baseDir, "..", "ui", "dist");
|
|
29
|
+
if (fs.existsSync(candidate)) {
|
|
30
|
+
uiDir = candidate;
|
|
31
|
+
}
|
|
32
|
+
}
|
|
33
|
+
const handleStatic = createStaticHandler(uiDir, htmlUI);
|
|
34
|
+
return function handleWebUI(req, res) {
|
|
35
|
+
// Try API routes first
|
|
36
|
+
if (handleApi(req, res))
|
|
37
|
+
return;
|
|
38
|
+
// Fall through to static file serving
|
|
39
|
+
handleStatic(req, res);
|
|
40
|
+
};
|
|
41
|
+
}
|
|
42
|
+
//# sourceMappingURL=webui.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"webui.js","sourceRoot":"","sources":["../../src/server/webui.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,SAAS,CAAC;AAEzB,OAAO,IAAI,MAAM,WAAW,CAAC;AAE7B,OAAO,EAAE,gBAAgB,EAAE,MAAM,UAAU,CAAC;AAC5C,OAAO,EAAE,mBAAmB,EAAE,MAAM,aAAa,CAAC;AAGlD,MAAM,UAAU,UAAU;IACxB,OAAO;;;;;;;;;;;;;;QAcD,CAAC;AACT,CAAC;AAED,MAAM,UAAU,kBAAkB,CAChC,KAAY,EACZ,MAAc,EACd,OAAgB;IAEhB,MAAM,SAAS,GAAG,gBAAgB,CAAC,KAAK,CAAC,CAAC;IAE1C,4CAA4C;IAC5C,kEAAkE;IAClE,IAAI,KAAK,GAAkB,IAAI,CAAC;IAChC,IAAI,OAAO,EAAE,CAAC;QACZ,MAAM,SAAS,GAAG,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE,IAAI,EAAE,IAAI,EAAE,MAAM,CAAC,CAAC;QACzD,IAAI,EAAE,CAAC,UAAU,CAAC,SAAS,CAAC,EAAE,CAAC;YAC7B,KAAK,GAAG,SAAS,CAAC;QACpB,CAAC;IACH,CAAC;IACD,MAAM,YAAY,GAAG,mBAAmB,CAAC,KAAK,EAAE,MAAM,CAAC,CAAC;IAExD,OAAO,SAAS,WAAW,CACzB,GAAyB,EACzB,GAAwB;QAExB,uBAAuB;QACvB,IAAI,SAAS,CAAC,GAAG,EAAE,GAAG,CAAC;YAAE,OAAO;QAEhC,sCAAsC;QACtC,YAAY,CAAC,GAAG,EAAE,GAAG,CAAC,CAAC;IACzB,CAAC,CAAC;AACJ,CAAC"}
|
package/dist/server-utils.d.ts
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
|
-
import http from
|
|
1
|
+
import type http from "node:http";
|
|
2
|
+
export { selectHeaders } from "./http/headers.js";
|
|
2
3
|
export declare function safeFilenamePart(input: string): string;
|
|
3
4
|
export declare function isLocalRemote(addr: string | undefined): boolean;
|
|
4
5
|
export declare function headersForResolution(headers: http.IncomingHttpHeaders, remoteAddr: string | undefined, allowTargetOverride: boolean): Record<string, string | undefined>;
|
|
5
|
-
export declare function selectHeaders(headers: Record<string, any>): Record<string, string>;
|
|
6
6
|
//# sourceMappingURL=server-utils.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"server-utils.d.ts","sourceRoot":"","sources":["../src/server-utils.ts"],"names":[],"mappings":"AAAA,OAAO,IAAI,MAAM,WAAW,CAAC;
|
|
1
|
+
{"version":3,"file":"server-utils.d.ts","sourceRoot":"","sources":["../src/server-utils.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,IAAI,MAAM,WAAW,CAAC;AAElC,OAAO,EAAE,aAAa,EAAE,MAAM,mBAAmB,CAAC;AAGlD,wBAAgB,gBAAgB,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM,CAOtD;AAED,wBAAgB,aAAa,CAAC,IAAI,EAAE,MAAM,GAAG,SAAS,GAAG,OAAO,CAG/D;AAED,wBAAgB,oBAAoB,CAClC,OAAO,EAAE,IAAI,CAAC,mBAAmB,EACjC,UAAU,EAAE,MAAM,GAAG,SAAS,EAC9B,mBAAmB,EAAE,OAAO,GAC3B,MAAM,CAAC,MAAM,EAAE,MAAM,GAAG,SAAS,CAAC,CAWpC"}
|
package/dist/server-utils.js
CHANGED
|
@@ -1,37 +1,28 @@
|
|
|
1
|
+
export { selectHeaders } from "./http/headers.js";
|
|
1
2
|
// Keep filenames predictable and prevent traversal or weird platform behavior.
|
|
2
3
|
export function safeFilenamePart(input) {
|
|
3
|
-
const s = String(input ||
|
|
4
|
-
let out = s.replace(/[^a-zA-Z0-9._-]+/g,
|
|
5
|
-
out = out.replace(/\.\.+/g,
|
|
6
|
-
out = out.replace(/^_+|_+$/g,
|
|
7
|
-
if (!out || out ===
|
|
8
|
-
return
|
|
4
|
+
const s = String(input || "").trim();
|
|
5
|
+
let out = s.replace(/[^a-zA-Z0-9._-]+/g, "_");
|
|
6
|
+
out = out.replace(/\.\.+/g, "_"); // collapse any ".." runs
|
|
7
|
+
out = out.replace(/^_+|_+$/g, "");
|
|
8
|
+
if (!out || out === "." || out === "..")
|
|
9
|
+
return "unknown";
|
|
9
10
|
return out.slice(0, 80);
|
|
10
11
|
}
|
|
11
12
|
export function isLocalRemote(addr) {
|
|
12
13
|
if (!addr)
|
|
13
14
|
return false;
|
|
14
|
-
return addr ===
|
|
15
|
+
return addr === "127.0.0.1" || addr === "::1" || addr === "::ffff:127.0.0.1";
|
|
15
16
|
}
|
|
16
17
|
export function headersForResolution(headers, remoteAddr, allowTargetOverride) {
|
|
17
18
|
const h = headers;
|
|
18
|
-
if (h[
|
|
19
|
+
if (h["x-target-url"] &&
|
|
20
|
+
!(allowTargetOverride && isLocalRemote(remoteAddr))) {
|
|
19
21
|
// Ignore override unless explicitly enabled and coming from localhost.
|
|
20
|
-
const {
|
|
22
|
+
const { "x-target-url": _drop, ...rest } = h;
|
|
21
23
|
return rest;
|
|
22
24
|
}
|
|
23
25
|
return h;
|
|
24
26
|
}
|
|
25
|
-
//
|
|
26
|
-
const REDACTED_HEADERS = new Set(['authorization', 'x-api-key', 'cookie', 'set-cookie', 'x-target-url']);
|
|
27
|
-
export function selectHeaders(headers) {
|
|
28
|
-
const result = {};
|
|
29
|
-
for (const [key, val] of Object.entries(headers)) {
|
|
30
|
-
if (REDACTED_HEADERS.has(key.toLowerCase()))
|
|
31
|
-
continue;
|
|
32
|
-
if (typeof val === 'string')
|
|
33
|
-
result[key] = val;
|
|
34
|
-
}
|
|
35
|
-
return result;
|
|
36
|
-
}
|
|
27
|
+
// `selectHeaders` is re-exported from `src/http/headers.ts` to keep server-utils small.
|
|
37
28
|
//# sourceMappingURL=server-utils.js.map
|
package/dist/server-utils.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"server-utils.js","sourceRoot":"","sources":["../src/server-utils.ts"],"names":[],"mappings":"AAEA,+EAA+E;AAC/E,MAAM,UAAU,gBAAgB,CAAC,KAAa;IAC5C,MAAM,CAAC,GAAG,MAAM,CAAC,KAAK,IAAI,EAAE,CAAC,CAAC,IAAI,EAAE,CAAC;IACrC,IAAI,GAAG,GAAG,CAAC,CAAC,OAAO,CAAC,mBAAmB,EAAE,GAAG,CAAC,CAAC;IAC9C,GAAG,GAAG,GAAG,CAAC,OAAO,CAAC,QAAQ,EAAE,GAAG,CAAC,CAAC,CAAC,yBAAyB;IAC3D,GAAG,GAAG,GAAG,CAAC,OAAO,CAAC,UAAU,EAAE,EAAE,CAAC,CAAC;IAClC,IAAI,CAAC,GAAG,IAAI,GAAG,KAAK,GAAG,IAAI,GAAG,KAAK,IAAI;QAAE,OAAO,SAAS,CAAC;IAC1D,OAAO,GAAG,CAAC,KAAK,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC;AAC1B,CAAC;AAED,MAAM,UAAU,aAAa,CAAC,IAAwB;IACpD,IAAI,CAAC,IAAI;QAAE,OAAO,KAAK,CAAC;IACxB,OAAO,IAAI,KAAK,WAAW,IAAI,IAAI,KAAK,KAAK,IAAI,IAAI,KAAK,kBAAkB,CAAC;AAC/E,CAAC;AAED,MAAM,UAAU,oBAAoB,CAClC,OAAiC,EACjC,UAA8B,EAC9B,mBAA4B;IAE5B,MAAM,CAAC,GAAG,OAA6C,CAAC;IACxD,
|
|
1
|
+
{"version":3,"file":"server-utils.js","sourceRoot":"","sources":["../src/server-utils.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,aAAa,EAAE,MAAM,mBAAmB,CAAC;AAElD,+EAA+E;AAC/E,MAAM,UAAU,gBAAgB,CAAC,KAAa;IAC5C,MAAM,CAAC,GAAG,MAAM,CAAC,KAAK,IAAI,EAAE,CAAC,CAAC,IAAI,EAAE,CAAC;IACrC,IAAI,GAAG,GAAG,CAAC,CAAC,OAAO,CAAC,mBAAmB,EAAE,GAAG,CAAC,CAAC;IAC9C,GAAG,GAAG,GAAG,CAAC,OAAO,CAAC,QAAQ,EAAE,GAAG,CAAC,CAAC,CAAC,yBAAyB;IAC3D,GAAG,GAAG,GAAG,CAAC,OAAO,CAAC,UAAU,EAAE,EAAE,CAAC,CAAC;IAClC,IAAI,CAAC,GAAG,IAAI,GAAG,KAAK,GAAG,IAAI,GAAG,KAAK,IAAI;QAAE,OAAO,SAAS,CAAC;IAC1D,OAAO,GAAG,CAAC,KAAK,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC;AAC1B,CAAC;AAED,MAAM,UAAU,aAAa,CAAC,IAAwB;IACpD,IAAI,CAAC,IAAI;QAAE,OAAO,KAAK,CAAC;IACxB,OAAO,IAAI,KAAK,WAAW,IAAI,IAAI,KAAK,KAAK,IAAI,IAAI,KAAK,kBAAkB,CAAC;AAC/E,CAAC;AAED,MAAM,UAAU,oBAAoB,CAClC,OAAiC,EACjC,UAA8B,EAC9B,mBAA4B;IAE5B,MAAM,CAAC,GAAG,OAA6C,CAAC;IACxD,IACE,CAAC,CAAC,cAAc,CAAC;QACjB,CAAC,CAAC,mBAAmB,IAAI,aAAa,CAAC,UAAU,CAAC,CAAC,EACnD,CAAC;QACD,uEAAuE;QACvE,MAAM,EAAE,cAAc,EAAE,KAAK,EAAE,GAAG,IAAI,EAAE,GAAG,CAAC,CAAC;QAC7C,OAAO,IAAI,CAAC;IACd,CAAC;IACD,OAAO,CAAC,CAAC;AACX,CAAC;AAED,wFAAwF"}
|