context-lens 0.3.2 → 0.4.1
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 +52 -16
- package/dist/analysis/ingest.d.ts +13 -0
- package/dist/analysis/ingest.d.ts.map +1 -0
- package/dist/analysis/ingest.js +75 -0
- package/dist/analysis/ingest.js.map +1 -0
- package/dist/analysis/server.d.ts +10 -0
- package/dist/analysis/server.d.ts.map +1 -0
- package/dist/analysis/server.js +95 -0
- package/dist/analysis/server.js.map +1 -0
- package/dist/analysis/watcher.d.ts +55 -0
- package/dist/analysis/watcher.d.ts.map +1 -0
- package/dist/analysis/watcher.js +170 -0
- package/dist/analysis/watcher.js.map +1 -0
- package/dist/cli-utils.d.ts +16 -0
- package/dist/cli-utils.d.ts.map +1 -1
- package/dist/cli-utils.js +185 -3
- package/dist/cli-utils.js.map +1 -1
- package/dist/cli.js +629 -88
- package/dist/cli.js.map +1 -1
- package/dist/core/conversation.d.ts +8 -1
- package/dist/core/conversation.d.ts.map +1 -1
- package/dist/core/conversation.js +38 -12
- package/dist/core/conversation.js.map +1 -1
- package/dist/core/parse.d.ts.map +1 -1
- package/dist/core/parse.js +17 -1
- package/dist/core/parse.js.map +1 -1
- package/dist/core/session-analysis.d.ts +100 -0
- package/dist/core/session-analysis.d.ts.map +1 -0
- package/dist/core/session-analysis.js +435 -0
- package/dist/core/session-analysis.js.map +1 -0
- package/dist/core/session-format.d.ts +20 -0
- package/dist/core/session-format.d.ts.map +1 -0
- package/dist/core/session-format.js +298 -0
- package/dist/core/session-format.js.map +1 -0
- package/dist/core.d.ts +4 -0
- package/dist/core.d.ts.map +1 -1
- package/dist/core.js +2 -0
- package/dist/core.js.map +1 -1
- package/dist/lhar/reader.d.ts +22 -0
- package/dist/lhar/reader.d.ts.map +1 -0
- package/dist/lhar/reader.js +43 -0
- package/dist/lhar/reader.js.map +1 -0
- package/dist/lhar/record.d.ts.map +1 -1
- package/dist/lhar/record.js +3 -0
- package/dist/lhar/record.js.map +1 -1
- package/dist/lhar/response.d.ts +8 -0
- package/dist/lhar/response.d.ts.map +1 -1
- package/dist/lhar/response.js +44 -0
- package/dist/lhar/response.js.map +1 -1
- package/dist/lhar/tools.d.ts +17 -0
- package/dist/lhar/tools.d.ts.map +1 -0
- package/dist/lhar/tools.js +48 -0
- package/dist/lhar/tools.js.map +1 -0
- package/dist/lhar-types.generated.d.ts +34 -0
- package/dist/lhar-types.generated.d.ts.map +1 -1
- package/dist/lhar.d.ts +4 -1
- package/dist/lhar.d.ts.map +1 -1
- package/dist/lhar.js +5 -1
- package/dist/lhar.js.map +1 -1
- package/dist/proxy/capture.d.ts +40 -0
- package/dist/proxy/capture.d.ts.map +1 -0
- package/dist/proxy/capture.js +56 -0
- package/dist/proxy/capture.js.map +1 -0
- package/dist/proxy/config.d.ts +16 -0
- package/dist/proxy/config.d.ts.map +1 -0
- package/dist/proxy/config.js +34 -0
- package/dist/proxy/config.js.map +1 -0
- package/dist/proxy/forward.d.ts +20 -0
- package/dist/proxy/forward.d.ts.map +1 -0
- package/dist/proxy/forward.js +210 -0
- package/dist/proxy/forward.js.map +1 -0
- package/dist/proxy/headers.d.ts +16 -0
- package/dist/proxy/headers.d.ts.map +1 -0
- package/dist/proxy/headers.js +37 -0
- package/dist/proxy/headers.js.map +1 -0
- package/dist/proxy/routing.d.ts +44 -0
- package/dist/proxy/routing.d.ts.map +1 -0
- package/dist/proxy/routing.js +114 -0
- package/dist/proxy/routing.js.map +1 -0
- package/dist/proxy/server.d.ts +27 -0
- package/dist/proxy/server.d.ts.map +1 -0
- package/dist/proxy/server.js +55 -0
- package/dist/proxy/server.js.map +1 -0
- package/dist/schemas.d.ts +328 -0
- package/dist/schemas.d.ts.map +1 -0
- package/dist/schemas.js +249 -0
- package/dist/schemas.js.map +1 -0
- package/dist/server/api.d.ts +3 -4
- package/dist/server/api.d.ts.map +1 -1
- package/dist/server/api.js +195 -220
- package/dist/server/api.js.map +1 -1
- package/dist/server/store.d.ts +23 -7
- package/dist/server/store.d.ts.map +1 -1
- package/dist/server/store.js +141 -50
- package/dist/server/store.js.map +1 -1
- package/dist/server/webui.d.ts +5 -2
- package/dist/server/webui.d.ts.map +1 -1
- package/dist/server/webui.js +32 -13
- package/dist/server/webui.js.map +1 -1
- package/dist/server-utils.d.ts +1 -2
- package/dist/server-utils.d.ts.map +1 -1
- package/dist/server-utils.js +0 -2
- package/dist/server-utils.js.map +1 -1
- package/dist/types.d.ts +1 -1
- package/dist/types.d.ts.map +1 -1
- package/dist/version.generated.d.ts +1 -1
- package/dist/version.generated.js +1 -1
- package/mitm_addon.py +99 -28
- package/package.json +12 -5
- package/schema/lhar.schema.json +50 -0
- package/dist/server/config.d.ts +0 -13
- package/dist/server/config.d.ts.map +0 -1
- package/dist/server/config.js +0 -36
- package/dist/server/config.js.map +0 -1
- package/dist/server/proxy.d.ts +0 -13
- package/dist/server/proxy.d.ts.map +0 -1
- package/dist/server/proxy.js +0 -218
- package/dist/server/proxy.js.map +0 -1
- package/dist/server/static.d.ts +0 -9
- package/dist/server/static.d.ts.map +0 -1
- package/dist/server/static.js +0 -78
- package/dist/server/static.js.map +0 -1
- package/dist/server.d.ts +0 -3
- package/dist/server.d.ts.map +0 -1
- package/dist/server.js +0 -43
- package/dist/server.js.map +0 -1
package/dist/server/static.js
DELETED
|
@@ -1,78 +0,0 @@
|
|
|
1
|
-
import fs from "node:fs";
|
|
2
|
-
import path from "node:path";
|
|
3
|
-
const MIME_TYPES = {
|
|
4
|
-
".html": "text/html",
|
|
5
|
-
".js": "application/javascript",
|
|
6
|
-
".css": "text/css",
|
|
7
|
-
".json": "application/json",
|
|
8
|
-
".png": "image/png",
|
|
9
|
-
".svg": "image/svg+xml",
|
|
10
|
-
".ico": "image/x-icon",
|
|
11
|
-
".woff": "font/woff",
|
|
12
|
-
".woff2": "font/woff2",
|
|
13
|
-
".map": "application/json",
|
|
14
|
-
};
|
|
15
|
-
/**
|
|
16
|
-
* Create a static file handler that serves from `uiDir` if it exists,
|
|
17
|
-
* otherwise falls back to serving `fallbackHtml` at `/`.
|
|
18
|
-
*
|
|
19
|
-
* Returns a function that handles the request, always responds.
|
|
20
|
-
*/
|
|
21
|
-
export function createStaticHandler(uiDir, fallbackHtml) {
|
|
22
|
-
// Check if ui/dist exists at startup
|
|
23
|
-
const uiDirExists = uiDir !== null && fs.existsSync(uiDir);
|
|
24
|
-
return function handleStatic(req, res) {
|
|
25
|
-
if (uiDirExists && uiDir) {
|
|
26
|
-
// Serve from ui/dist
|
|
27
|
-
let reqPath = req.url?.split("?")[0] || "/";
|
|
28
|
-
// Prevent directory traversal
|
|
29
|
-
reqPath = path.normalize(reqPath).replace(/^(\.\.[/\\])+/, "");
|
|
30
|
-
// Map / to /index.html
|
|
31
|
-
if (reqPath === "/")
|
|
32
|
-
reqPath = "/index.html";
|
|
33
|
-
const filePath = path.join(uiDir, reqPath);
|
|
34
|
-
// Ensure we don't serve files outside uiDir
|
|
35
|
-
if (!filePath.startsWith(uiDir)) {
|
|
36
|
-
res.writeHead(403, { "Content-Type": "text/plain" });
|
|
37
|
-
res.end("Forbidden");
|
|
38
|
-
return;
|
|
39
|
-
}
|
|
40
|
-
try {
|
|
41
|
-
const stat = fs.statSync(filePath);
|
|
42
|
-
if (stat.isFile()) {
|
|
43
|
-
const ext = path.extname(filePath).toLowerCase();
|
|
44
|
-
const contentType = MIME_TYPES[ext] || "application/octet-stream";
|
|
45
|
-
const content = fs.readFileSync(filePath);
|
|
46
|
-
res.writeHead(200, { "Content-Type": contentType });
|
|
47
|
-
res.end(content);
|
|
48
|
-
return;
|
|
49
|
-
}
|
|
50
|
-
}
|
|
51
|
-
catch {
|
|
52
|
-
// File not found; fall through to SPA fallback
|
|
53
|
-
}
|
|
54
|
-
// SPA fallback: serve index.html for unmatched routes
|
|
55
|
-
const indexPath = path.join(uiDir, "index.html");
|
|
56
|
-
try {
|
|
57
|
-
const content = fs.readFileSync(indexPath);
|
|
58
|
-
res.writeHead(200, { "Content-Type": "text/html" });
|
|
59
|
-
res.end(content);
|
|
60
|
-
}
|
|
61
|
-
catch {
|
|
62
|
-
res.writeHead(404, { "Content-Type": "text/plain" });
|
|
63
|
-
res.end("Not Found");
|
|
64
|
-
}
|
|
65
|
-
return;
|
|
66
|
-
}
|
|
67
|
-
// Fallback: serve legacy HTML UI
|
|
68
|
-
if (req.url === "/" || req.url === "/index.html") {
|
|
69
|
-
res.writeHead(200, { "Content-Type": "text/html" });
|
|
70
|
-
res.end(fallbackHtml);
|
|
71
|
-
}
|
|
72
|
-
else {
|
|
73
|
-
res.writeHead(404, { "Content-Type": "text/plain" });
|
|
74
|
-
res.end("Not Found");
|
|
75
|
-
}
|
|
76
|
-
};
|
|
77
|
-
}
|
|
78
|
-
//# sourceMappingURL=static.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"static.js","sourceRoot":"","sources":["../../src/server/static.ts"],"names":[],"mappings":"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"}
|
package/dist/server.d.ts
DELETED
package/dist/server.d.ts.map
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"server.d.ts","sourceRoot":"","sources":["../src/server.ts"],"names":[],"mappings":""}
|
package/dist/server.js
DELETED
|
@@ -1,43 +0,0 @@
|
|
|
1
|
-
#!/usr/bin/env node
|
|
2
|
-
import http from "node:http";
|
|
3
|
-
import path from "node:path";
|
|
4
|
-
import { fileURLToPath } from "node:url";
|
|
5
|
-
import { loadServerConfig } from "./server/config.js";
|
|
6
|
-
import { createProxyHandler } from "./server/proxy.js";
|
|
7
|
-
import { Store } from "./server/store.js";
|
|
8
|
-
import { createWebUIHandler, loadHtmlUI } from "./server/webui.js";
|
|
9
|
-
const __filename = fileURLToPath(import.meta.url);
|
|
10
|
-
const __dirname = path.dirname(__filename);
|
|
11
|
-
const config = loadServerConfig(__dirname);
|
|
12
|
-
const store = new Store({
|
|
13
|
-
dataDir: config.dataDir,
|
|
14
|
-
stateFile: config.stateFile,
|
|
15
|
-
maxSessions: config.maxSessions,
|
|
16
|
-
maxCompactMessages: config.maxCompactMessages,
|
|
17
|
-
privacy: config.privacy,
|
|
18
|
-
});
|
|
19
|
-
// Start servers
|
|
20
|
-
store.loadState();
|
|
21
|
-
const proxyServer = http.createServer(createProxyHandler(store, {
|
|
22
|
-
upstreams: config.upstreams,
|
|
23
|
-
allowTargetOverride: config.allowTargetOverride,
|
|
24
|
-
}));
|
|
25
|
-
const htmlUI = loadHtmlUI();
|
|
26
|
-
const webUIServer = http.createServer(createWebUIHandler(store, htmlUI, __dirname));
|
|
27
|
-
proxyServer.listen(4040, config.bindHost, () => {
|
|
28
|
-
console.log(`🔍 Context Lens Proxy running on http://${config.bindHost}:4040`);
|
|
29
|
-
});
|
|
30
|
-
webUIServer.listen(4041, config.bindHost, () => {
|
|
31
|
-
console.log(`🌐 Context Lens Web UI running on http://${config.bindHost}:4041`);
|
|
32
|
-
// Only show verbose help when running standalone (not spawned by cli.js)
|
|
33
|
-
if (!process.env.CONTEXT_LENS_CLI) {
|
|
34
|
-
console.log(`\nUpstream: OpenAI → ${config.upstreams.openai}`);
|
|
35
|
-
console.log(` Anthropic → ${config.upstreams.anthropic}`);
|
|
36
|
-
console.log("\nUsage:");
|
|
37
|
-
console.log(" Codex (subscription): UPSTREAM_OPENAI_URL=https://chatgpt.com/backend-api/codex node server.js");
|
|
38
|
-
console.log(" Codex (API key): node server.js");
|
|
39
|
-
console.log(' Then: OPENAI_BASE_URL=http://localhost:4040 codex "your prompt"');
|
|
40
|
-
console.log(' Claude: ANTHROPIC_BASE_URL=http://localhost:4040/claude claude "your prompt"');
|
|
41
|
-
}
|
|
42
|
-
});
|
|
43
|
-
//# sourceMappingURL=server.js.map
|
package/dist/server.js.map
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"server.js","sourceRoot":"","sources":["../src/server.ts"],"names":[],"mappings":";AAEA,OAAO,IAAI,MAAM,WAAW,CAAC;AAC7B,OAAO,IAAI,MAAM,WAAW,CAAC;AAC7B,OAAO,EAAE,aAAa,EAAE,MAAM,UAAU,CAAC;AAEzC,OAAO,EAAE,gBAAgB,EAAE,MAAM,oBAAoB,CAAC;AACtD,OAAO,EAAE,kBAAkB,EAAE,MAAM,mBAAmB,CAAC;AACvD,OAAO,EAAE,KAAK,EAAE,MAAM,mBAAmB,CAAC;AAC1C,OAAO,EAAE,kBAAkB,EAAE,UAAU,EAAE,MAAM,mBAAmB,CAAC;AAEnE,MAAM,UAAU,GAAG,aAAa,CAAC,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;AAClD,MAAM,SAAS,GAAG,IAAI,CAAC,OAAO,CAAC,UAAU,CAAC,CAAC;AAE3C,MAAM,MAAM,GAAG,gBAAgB,CAAC,SAAS,CAAC,CAAC;AAC3C,MAAM,KAAK,GAAG,IAAI,KAAK,CAAC;IACtB,OAAO,EAAE,MAAM,CAAC,OAAO;IACvB,SAAS,EAAE,MAAM,CAAC,SAAS;IAC3B,WAAW,EAAE,MAAM,CAAC,WAAW;IAC/B,kBAAkB,EAAE,MAAM,CAAC,kBAAkB;IAC7C,OAAO,EAAE,MAAM,CAAC,OAAO;CACxB,CAAC,CAAC;AAEH,gBAAgB;AAChB,KAAK,CAAC,SAAS,EAAE,CAAC;AAElB,MAAM,WAAW,GAAG,IAAI,CAAC,YAAY,CACnC,kBAAkB,CAAC,KAAK,EAAE;IACxB,SAAS,EAAE,MAAM,CAAC,SAAS;IAC3B,mBAAmB,EAAE,MAAM,CAAC,mBAAmB;CAChD,CAAC,CACH,CAAC;AAEF,MAAM,MAAM,GAAG,UAAU,EAAE,CAAC;AAC5B,MAAM,WAAW,GAAG,IAAI,CAAC,YAAY,CACnC,kBAAkB,CAAC,KAAK,EAAE,MAAM,EAAE,SAAS,CAAC,CAC7C,CAAC;AAEF,WAAW,CAAC,MAAM,CAAC,IAAI,EAAE,MAAM,CAAC,QAAQ,EAAE,GAAG,EAAE;IAC7C,OAAO,CAAC,GAAG,CACT,2CAA2C,MAAM,CAAC,QAAQ,OAAO,CAClE,CAAC;AACJ,CAAC,CAAC,CAAC;AAEH,WAAW,CAAC,MAAM,CAAC,IAAI,EAAE,MAAM,CAAC,QAAQ,EAAE,GAAG,EAAE;IAC7C,OAAO,CAAC,GAAG,CACT,4CAA4C,MAAM,CAAC,QAAQ,OAAO,CACnE,CAAC;IACF,yEAAyE;IACzE,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,gBAAgB,EAAE,CAAC;QAClC,OAAO,CAAC,GAAG,CAAC,wBAAwB,MAAM,CAAC,SAAS,CAAC,MAAM,EAAE,CAAC,CAAC;QAC/D,OAAO,CAAC,GAAG,CAAC,wBAAwB,MAAM,CAAC,SAAS,CAAC,SAAS,EAAE,CAAC,CAAC;QAClE,OAAO,CAAC,GAAG,CAAC,UAAU,CAAC,CAAC;QACxB,OAAO,CAAC,GAAG,CACT,kGAAkG,CACnG,CAAC;QACF,OAAO,CAAC,GAAG,CAAC,wCAAwC,CAAC,CAAC;QACtD,OAAO,CAAC,GAAG,CACT,mEAAmE,CACpE,CAAC;QACF,OAAO,CAAC,GAAG,CACT,gFAAgF,CACjF,CAAC;IACJ,CAAC;AACH,CAAC,CAAC,CAAC"}
|