context-lens 0.6.1 → 0.6.2

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 (49) hide show
  1. package/README.md +70 -2
  2. package/dist/cli-utils.d.ts +5 -0
  3. package/dist/cli-utils.d.ts.map +1 -1
  4. package/dist/cli-utils.js +57 -1
  5. package/dist/cli-utils.js.map +1 -1
  6. package/dist/cli.js +42 -7
  7. package/dist/cli.js.map +1 -1
  8. package/dist/config.d.ts +35 -0
  9. package/dist/config.d.ts.map +1 -0
  10. package/dist/config.js +113 -0
  11. package/dist/config.js.map +1 -0
  12. package/dist/core/models.d.ts +6 -38
  13. package/dist/core/models.d.ts.map +1 -1
  14. package/dist/core/models.js +6 -213
  15. package/dist/core/models.js.map +1 -1
  16. package/dist/core/routing.d.ts.map +1 -1
  17. package/dist/core/routing.js +7 -1
  18. package/dist/core/routing.js.map +1 -1
  19. package/dist/http/headers.d.ts +9 -17
  20. package/dist/http/headers.d.ts.map +1 -1
  21. package/dist/http/headers.js +10 -38
  22. package/dist/http/headers.js.map +1 -1
  23. package/dist/proxy/config.d.ts.map +1 -1
  24. package/dist/proxy/config.js +13 -0
  25. package/dist/proxy/config.js.map +1 -1
  26. package/dist/proxy/server.js +22 -0
  27. package/dist/proxy/server.js.map +1 -1
  28. package/dist/schemas.d.ts +14 -0
  29. package/dist/schemas.d.ts.map +1 -1
  30. package/dist/schemas.js +8 -0
  31. package/dist/schemas.js.map +1 -1
  32. package/dist/server/api.d.ts.map +1 -1
  33. package/dist/server/api.js.map +1 -1
  34. package/dist/server/projection.d.ts.map +1 -1
  35. package/dist/server/projection.js +1 -0
  36. package/dist/server/projection.js.map +1 -1
  37. package/dist/server/store.d.ts.map +1 -1
  38. package/dist/server/store.js +80 -7
  39. package/dist/server/store.js.map +1 -1
  40. package/dist/types.d.ts +13 -0
  41. package/dist/types.d.ts.map +1 -1
  42. package/dist/version.generated.d.ts +1 -1
  43. package/dist/version.generated.js +1 -1
  44. package/mitm_addon.py +3 -0
  45. package/package.json +5 -2
  46. package/ui/dist/assets/{index-t5l_d6Oq.js → index-C2HhFk_P.js} +20 -20
  47. package/ui/dist/assets/index-xYrXQJL_.css +1 -0
  48. package/ui/dist/index.html +2 -2
  49. package/ui/dist/assets/index-DYoafQtJ.css +0 -1
package/dist/config.js ADDED
@@ -0,0 +1,113 @@
1
+ /**
2
+ * Context Lens user configuration.
3
+ *
4
+ * Loaded from ~/.context-lens/config.toml on startup.
5
+ * All settings can be overridden with CLI flags.
6
+ *
7
+ * Precedence: defaults → config file → CLI flags
8
+ */
9
+ import fs from "node:fs";
10
+ import { homedir } from "node:os";
11
+ import { join } from "node:path";
12
+ import { parse } from "smol-toml";
13
+ const DEFAULTS = {
14
+ proxy: {
15
+ port: 4040,
16
+ redact: undefined,
17
+ rehydrate: false,
18
+ },
19
+ ui: {
20
+ port: 4041,
21
+ noOpen: false,
22
+ },
23
+ privacy: {
24
+ level: undefined,
25
+ },
26
+ };
27
+ export function getConfigPath() {
28
+ return join(homedir(), ".context-lens", "config.toml");
29
+ }
30
+ /**
31
+ * Load and parse the user config file.
32
+ *
33
+ * Returns merged defaults + file values. Missing keys fall back to defaults.
34
+ * Parse errors are logged and defaults are returned.
35
+ */
36
+ export function loadConfig() {
37
+ const configPath = getConfigPath();
38
+ if (!fs.existsSync(configPath)) {
39
+ return structuredClone(DEFAULTS);
40
+ }
41
+ let raw;
42
+ try {
43
+ const text = fs.readFileSync(configPath, "utf8");
44
+ raw = parse(text);
45
+ }
46
+ catch (err) {
47
+ console.warn(`Warning: Could not parse config file ${configPath}:`, err instanceof Error ? err.message : String(err));
48
+ return structuredClone(DEFAULTS);
49
+ }
50
+ return mergeConfig(raw);
51
+ }
52
+ const VALID_REDACT = new Set(["secrets", "pii", "strict"]);
53
+ const VALID_PRIVACY = new Set(["minimal", "standard", "full"]);
54
+ function section(value) {
55
+ return typeof value === "object" && value !== null
56
+ ? value
57
+ : null;
58
+ }
59
+ function mergeConfig(raw) {
60
+ const cfg = structuredClone(DEFAULTS);
61
+ if (typeof raw !== "object" || raw === null)
62
+ return cfg;
63
+ const r = raw;
64
+ const proxy = section(r.proxy);
65
+ if (proxy) {
66
+ if (typeof proxy.port === "number")
67
+ cfg.proxy.port = proxy.port;
68
+ if (typeof proxy.redact === "string" && VALID_REDACT.has(proxy.redact)) {
69
+ cfg.proxy.redact = proxy.redact;
70
+ }
71
+ if (typeof proxy.rehydrate === "boolean") {
72
+ cfg.proxy.rehydrate = proxy.rehydrate;
73
+ }
74
+ }
75
+ const ui = section(r.ui);
76
+ if (ui) {
77
+ if (typeof ui.port === "number")
78
+ cfg.ui.port = ui.port;
79
+ if (typeof ui.no_open === "boolean")
80
+ cfg.ui.noOpen = ui.no_open;
81
+ }
82
+ const privacy = section(r.privacy);
83
+ if (privacy) {
84
+ if (typeof privacy.level === "string" && VALID_PRIVACY.has(privacy.level)) {
85
+ cfg.privacy.level =
86
+ privacy.level;
87
+ }
88
+ }
89
+ return cfg;
90
+ }
91
+ /**
92
+ * Generate a commented example config file.
93
+ */
94
+ export function exampleConfig() {
95
+ return [
96
+ "# Context Lens configuration",
97
+ "# Location: ~/.context-lens/config.toml",
98
+ "# All settings can be overridden with CLI flags.",
99
+ "",
100
+ "[proxy]",
101
+ "# port = 4040",
102
+ '# redact = "secrets" # secrets | pii | strict',
103
+ "# rehydrate = false",
104
+ "",
105
+ "[ui]",
106
+ "# port = 4041",
107
+ "# no_open = false",
108
+ "",
109
+ "[privacy]",
110
+ '# level = "standard" # minimal | standard | full',
111
+ ].join("\n");
112
+ }
113
+ //# sourceMappingURL=config.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"config.js","sourceRoot":"","sources":["../src/config.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAEH,OAAO,EAAE,MAAM,SAAS,CAAC;AACzB,OAAO,EAAE,OAAO,EAAE,MAAM,SAAS,CAAC;AAClC,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC;AAEjC,OAAO,EAAE,KAAK,EAAE,MAAM,WAAW,CAAC;AAiBlC,MAAM,QAAQ,GAAsB;IAClC,KAAK,EAAE;QACL,IAAI,EAAE,IAAI;QACV,MAAM,EAAE,SAAS;QACjB,SAAS,EAAE,KAAK;KACjB;IACD,EAAE,EAAE;QACF,IAAI,EAAE,IAAI;QACV,MAAM,EAAE,KAAK;KACd;IACD,OAAO,EAAE;QACP,KAAK,EAAE,SAAS;KACjB;CACF,CAAC;AAEF,MAAM,UAAU,aAAa;IAC3B,OAAO,IAAI,CAAC,OAAO,EAAE,EAAE,eAAe,EAAE,aAAa,CAAC,CAAC;AACzD,CAAC;AAED;;;;;GAKG;AACH,MAAM,UAAU,UAAU;IACxB,MAAM,UAAU,GAAG,aAAa,EAAE,CAAC;IAEnC,IAAI,CAAC,EAAE,CAAC,UAAU,CAAC,UAAU,CAAC,EAAE,CAAC;QAC/B,OAAO,eAAe,CAAC,QAAQ,CAAC,CAAC;IACnC,CAAC;IAED,IAAI,GAAY,CAAC;IACjB,IAAI,CAAC;QACH,MAAM,IAAI,GAAG,EAAE,CAAC,YAAY,CAAC,UAAU,EAAE,MAAM,CAAC,CAAC;QACjD,GAAG,GAAG,KAAK,CAAC,IAAI,CAAC,CAAC;IACpB,CAAC;IAAC,OAAO,GAAY,EAAE,CAAC;QACtB,OAAO,CAAC,IAAI,CACV,wCAAwC,UAAU,GAAG,EACrD,GAAG,YAAY,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC,CACjD,CAAC;QACF,OAAO,eAAe,CAAC,QAAQ,CAAC,CAAC;IACnC,CAAC;IAED,OAAO,WAAW,CAAC,GAAG,CAAC,CAAC;AAC1B,CAAC;AAED,MAAM,YAAY,GAAG,IAAI,GAAG,CAAC,CAAC,SAAS,EAAE,KAAK,EAAE,QAAQ,CAAC,CAAC,CAAC;AAC3D,MAAM,aAAa,GAAG,IAAI,GAAG,CAAC,CAAC,SAAS,EAAE,UAAU,EAAE,MAAM,CAAC,CAAC,CAAC;AAU/D,SAAS,OAAO,CAAC,KAAc;IAC7B,OAAO,OAAO,KAAK,KAAK,QAAQ,IAAI,KAAK,KAAK,IAAI;QAChD,CAAC,CAAE,KAAoB;QACvB,CAAC,CAAC,IAAI,CAAC;AACX,CAAC;AAED,SAAS,WAAW,CAAC,GAAY;IAC/B,MAAM,GAAG,GAAG,eAAe,CAAC,QAAQ,CAAC,CAAC;IACtC,IAAI,OAAO,GAAG,KAAK,QAAQ,IAAI,GAAG,KAAK,IAAI;QAAE,OAAO,GAAG,CAAC;IACxD,MAAM,CAAC,GAAG,GAA2D,CAAC;IAEtE,MAAM,KAAK,GAAG,OAAO,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC;IAC/B,IAAI,KAAK,EAAE,CAAC;QACV,IAAI,OAAO,KAAK,CAAC,IAAI,KAAK,QAAQ;YAAE,GAAG,CAAC,KAAK,CAAC,IAAI,GAAG,KAAK,CAAC,IAAI,CAAC;QAChE,IAAI,OAAO,KAAK,CAAC,MAAM,KAAK,QAAQ,IAAI,YAAY,CAAC,GAAG,CAAC,KAAK,CAAC,MAAM,CAAC,EAAE,CAAC;YACvE,GAAG,CAAC,KAAK,CAAC,MAAM,GAAG,KAAK,CAAC,MAA8C,CAAC;QAC1E,CAAC;QACD,IAAI,OAAO,KAAK,CAAC,SAAS,KAAK,SAAS,EAAE,CAAC;YACzC,GAAG,CAAC,KAAK,CAAC,SAAS,GAAG,KAAK,CAAC,SAAS,CAAC;QACxC,CAAC;IACH,CAAC;IAED,MAAM,EAAE,GAAG,OAAO,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC;IACzB,IAAI,EAAE,EAAE,CAAC;QACP,IAAI,OAAO,EAAE,CAAC,IAAI,KAAK,QAAQ;YAAE,GAAG,CAAC,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,CAAC;QACvD,IAAI,OAAO,EAAE,CAAC,OAAO,KAAK,SAAS;YAAE,GAAG,CAAC,EAAE,CAAC,MAAM,GAAG,EAAE,CAAC,OAAO,CAAC;IAClE,CAAC;IAED,MAAM,OAAO,GAAG,OAAO,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC;IACnC,IAAI,OAAO,EAAE,CAAC;QACZ,IAAI,OAAO,OAAO,CAAC,KAAK,KAAK,QAAQ,IAAI,aAAa,CAAC,GAAG,CAAC,OAAO,CAAC,KAAK,CAAC,EAAE,CAAC;YAC1E,GAAG,CAAC,OAAO,CAAC,KAAK;gBACf,OAAO,CAAC,KAA8C,CAAC;QAC3D,CAAC;IACH,CAAC;IAED,OAAO,GAAG,CAAC;AACb,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,aAAa;IAC3B,OAAO;QACL,8BAA8B;QAC9B,yCAAyC;QACzC,kDAAkD;QAClD,EAAE;QACF,SAAS;QACT,eAAe;QACf,iDAAiD;QACjD,qBAAqB;QACrB,EAAE;QACF,MAAM;QACN,eAAe;QACf,mBAAmB;QACnB,EAAE;QACF,WAAW;QACX,oDAAoD;KACrD,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;AACf,CAAC"}
@@ -1,42 +1,10 @@
1
1
  /**
2
- * Known model context limits (tokens).
2
+ * Model metadata re-exported from @contextio/core.
3
3
  *
4
- * Keys are ordered most-specific-first because `getContextLimit()` does substring matching.
4
+ * Context-lens inherits pricing, context limits, and cost estimation
5
+ * from the shared contextio package. This file is the single import
6
+ * point so the rest of the codebase doesn't import from @contextio/core
7
+ * directly.
5
8
  */
6
- export declare const CONTEXT_LIMITS: Record<string, number>;
7
- /**
8
- * Resolve an approximate context window size for a given model string.
9
- *
10
- * @param model - Model identifier (often includes version suffixes).
11
- * @returns Context limit in tokens.
12
- */
13
- export declare function getContextLimit(model: string): number;
14
- /**
15
- * Model pricing: `[inputPerMTok, outputPerMTok]` in USD.
16
- *
17
- * Keys ordered most-specific-first to avoid substring false matches
18
- * (e.g. `gpt-4o-mini` before `gpt-4o`, `o3-mini` before `o3`).
19
- *
20
- * Prices sourced from OpenRouter (openrouter.ai/api/v1/models) and reflect
21
- * standard per-token rates as of early 2026. Keys are matched as substrings
22
- * of the incoming model string, so they work for both direct-API model IDs
23
- * (e.g. `gemini-2.5-pro`) and OpenRouter-prefixed IDs
24
- * (e.g. `google/gemini-2.5-pro`).
25
- */
26
- export declare const MODEL_PRICING: Record<string, [number, number]>;
27
- /**
28
- * Estimate cost in USD for a request/response token pair using `MODEL_PRICING`.
29
- *
30
- * Cache pricing varies by provider:
31
- * - Anthropic: cache reads at 10% of base input, writes at 25%
32
- * - Gemini: cached content at 25% of base input, no write cost
33
- *
34
- * @param model - Model identifier (substring matched against known keys).
35
- * @param inputTokens - Input/prompt tokens (non-cached).
36
- * @param outputTokens - Output/completion tokens.
37
- * @param cacheReadTokens - Cache read tokens.
38
- * @param cacheWriteTokens - Cache write tokens.
39
- * @returns Cost in USD, rounded to 6 decimals; `null` if the model is unknown.
40
- */
41
- export declare function estimateCost(model: string, inputTokens: number, outputTokens: number, cacheReadTokens?: number, cacheWriteTokens?: number): number | null;
9
+ export { CONTEXT_LIMITS, estimateCost, getContextLimit, getKnownModels, MODEL_PRICING, } from "@contextio/core";
42
10
  //# sourceMappingURL=models.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"models.d.ts","sourceRoot":"","sources":["../../src/core/models.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AACH,eAAO,MAAM,cAAc,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAgEjD,CAAC;AAEF;;;;;GAKG;AACH,wBAAgB,eAAe,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM,CAKrD;AAED;;;;;;;;;;;GAWG;AACH,eAAO,MAAM,aAAa,EAAE,MAAM,CAAC,MAAM,EAAE,CAAC,MAAM,EAAE,MAAM,CAAC,CAiE1D,CAAC;AA4BF;;;;;;;;;;;;;GAaG;AACH,wBAAgB,YAAY,CAC1B,KAAK,EAAE,MAAM,EACb,WAAW,EAAE,MAAM,EACnB,YAAY,EAAE,MAAM,EACpB,eAAe,SAAI,EACnB,gBAAgB,SAAI,GACnB,MAAM,GAAG,IAAI,CAoBf"}
1
+ {"version":3,"file":"models.d.ts","sourceRoot":"","sources":["../../src/core/models.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAEH,OAAO,EACL,cAAc,EACd,YAAY,EACZ,eAAe,EACf,cAAc,EACd,aAAa,GACd,MAAM,iBAAiB,CAAC"}
@@ -1,217 +1,10 @@
1
1
  /**
2
- * Known model context limits (tokens).
2
+ * Model metadata re-exported from @contextio/core.
3
3
  *
4
- * Keys are ordered most-specific-first because `getContextLimit()` does substring matching.
4
+ * Context-lens inherits pricing, context limits, and cost estimation
5
+ * from the shared contextio package. This file is the single import
6
+ * point so the rest of the codebase doesn't import from @contextio/core
7
+ * directly.
5
8
  */
6
- export const CONTEXT_LIMITS = {
7
- // Anthropic
8
- "claude-opus-4.6": 1000000,
9
- "claude-opus-4.5": 200000,
10
- "claude-opus-4.1": 200000,
11
- "claude-opus-4": 200000,
12
- "claude-sonnet-4.6": 1000000,
13
- "claude-sonnet-4.5": 1000000,
14
- "claude-sonnet-4": 1000000,
15
- "claude-haiku-4.5": 200000,
16
- "claude-haiku-4": 200000,
17
- "claude-3-7-sonnet": 200000,
18
- "claude-3-5-sonnet": 200000,
19
- "claude-3-5-haiku": 200000,
20
- "claude-3-haiku": 200000,
21
- "claude-3-opus": 200000,
22
- // OpenAI — specific variants before generic slugs
23
- "gpt-5.2-pro": 400000,
24
- "gpt-5.2-codex": 400000,
25
- "gpt-5.2-chat": 128000,
26
- "gpt-5.2": 400000,
27
- "gpt-5.1-codex-max": 400000,
28
- "gpt-5.1-codex-mini": 400000,
29
- "gpt-5.1-codex": 400000,
30
- "gpt-5.1-chat": 128000,
31
- "gpt-5.1": 400000,
32
- "gpt-5.3-codex": 400000,
33
- "gpt-5-pro": 400000,
34
- "gpt-5-codex": 400000,
35
- "gpt-5-chat": 128000,
36
- "gpt-5-mini": 400000,
37
- "gpt-5-nano": 400000,
38
- "gpt-5": 400000,
39
- "gpt-4.1-mini": 1047576,
40
- "gpt-4.1-nano": 1047576,
41
- "gpt-4.1": 1047576,
42
- "gpt-4o-mini": 128000,
43
- "gpt-4o": 128000,
44
- "gpt-4-turbo": 128000,
45
- "gpt-4": 8192,
46
- "gpt-3.5-turbo": 16385,
47
- "o4-mini-deep-research": 200000,
48
- "o4-mini-high": 200000,
49
- "o4-mini": 200000,
50
- "o3-deep-research": 200000,
51
- "o3-pro": 200000,
52
- "o3-mini-high": 200000,
53
- "o3-mini": 200000,
54
- o3: 200000,
55
- "o1-pro": 200000,
56
- "o1-mini": 128000,
57
- o1: 200000,
58
- // Google Gemini — specific before generic
59
- "gemini-3.1-pro-preview": 1048576,
60
- "gemini-3-pro-preview": 1048576,
61
- "gemini-3-flash-preview": 1048576,
62
- "gemini-2.5-pro-preview": 1048576,
63
- "gemini-2.5-pro": 1048576,
64
- "gemini-2.5-flash-lite": 1048576,
65
- "gemini-2.5-flash": 1048576,
66
- "gemini-2.0-flash-lite": 1048576,
67
- "gemini-2.0-flash": 1048576,
68
- "gemini-1.5-pro": 2097152,
69
- "gemini-1.5-flash": 1048576,
70
- };
71
- /**
72
- * Resolve an approximate context window size for a given model string.
73
- *
74
- * @param model - Model identifier (often includes version suffixes).
75
- * @returns Context limit in tokens.
76
- */
77
- export function getContextLimit(model) {
78
- for (const [key, limit] of Object.entries(CONTEXT_LIMITS)) {
79
- if (model.includes(key))
80
- return limit;
81
- }
82
- return 128000; // default fallback
83
- }
84
- /**
85
- * Model pricing: `[inputPerMTok, outputPerMTok]` in USD.
86
- *
87
- * Keys ordered most-specific-first to avoid substring false matches
88
- * (e.g. `gpt-4o-mini` before `gpt-4o`, `o3-mini` before `o3`).
89
- *
90
- * Prices sourced from OpenRouter (openrouter.ai/api/v1/models) and reflect
91
- * standard per-token rates as of early 2026. Keys are matched as substrings
92
- * of the incoming model string, so they work for both direct-API model IDs
93
- * (e.g. `gemini-2.5-pro`) and OpenRouter-prefixed IDs
94
- * (e.g. `google/gemini-2.5-pro`).
95
- */
96
- export const MODEL_PRICING = {
97
- // Anthropic — specific point-releases before generic slugs
98
- "claude-opus-4.6": [5, 25],
99
- "claude-opus-4.5": [5, 25],
100
- "claude-opus-4.1": [15, 75],
101
- "claude-opus-4": [15, 75],
102
- "claude-sonnet-4.6": [3, 15],
103
- "claude-sonnet-4.5": [3, 15],
104
- "claude-sonnet-4": [3, 15],
105
- "claude-haiku-4.5": [1, 5],
106
- "claude-haiku-4": [0.8, 4],
107
- "claude-3-7-sonnet": [3, 15],
108
- "claude-3-5-sonnet": [3, 15],
109
- "claude-3-5-haiku": [0.8, 4],
110
- "claude-3-haiku": [0.25, 1.25],
111
- "claude-3-opus": [15, 75],
112
- // OpenAI — specific variants before generic slugs
113
- "gpt-5.2-pro": [21, 168],
114
- "gpt-5.2-codex": [1.75, 14],
115
- "gpt-5.2-chat": [1.75, 14],
116
- "gpt-5.2": [1.75, 14],
117
- "gpt-5.1-codex-max": [1.25, 10],
118
- "gpt-5.1-codex-mini": [0.25, 2],
119
- "gpt-5.1-codex": [1.25, 10],
120
- "gpt-5.1-chat": [1.25, 10],
121
- "gpt-5.1": [1.25, 10],
122
- // Codex subscription estimates
123
- "gpt-5.3-codex": [1.75, 14],
124
- "gpt-5-pro": [15, 120],
125
- "gpt-5-codex": [1.25, 10],
126
- "gpt-5-chat": [1.25, 10],
127
- "gpt-5-mini": [0.25, 2],
128
- "gpt-5-nano": [0.05, 0.4],
129
- "gpt-5": [1.25, 10],
130
- "gpt-4.1-mini": [0.4, 1.6],
131
- "gpt-4.1-nano": [0.1, 0.4],
132
- "gpt-4.1": [2.0, 8.0],
133
- "gpt-4o-mini": [0.15, 0.6],
134
- "gpt-4o": [2.5, 10],
135
- "gpt-4-turbo": [10, 30],
136
- "gpt-4": [30, 60],
137
- "gpt-3.5-turbo": [0.5, 1.5],
138
- "o4-mini-deep-research": [2, 8],
139
- "o4-mini-high": [1.1, 4.4],
140
- "o4-mini": [1.1, 4.4],
141
- "o3-deep-research": [10, 40],
142
- "o3-pro": [20, 80],
143
- "o3-mini-high": [1.1, 4.4],
144
- "o3-mini": [1.1, 4.4],
145
- o3: [2, 8],
146
- "o1-pro": [150, 600],
147
- "o1-mini": [3, 12],
148
- o1: [15, 60],
149
- // Google Gemini — specific before generic
150
- "gemini-3.1-pro-preview": [2, 12],
151
- "gemini-3-pro-preview": [2, 12],
152
- "gemini-3-flash-preview": [0.5, 3],
153
- "gemini-2.5-pro-preview": [1.25, 10],
154
- "gemini-2.5-pro": [1.25, 10],
155
- "gemini-2.5-flash-lite": [0.1, 0.4],
156
- "gemini-2.5-flash": [0.3, 2.5],
157
- "gemini-2.0-flash-lite": [0.075, 0.3],
158
- "gemini-2.0-flash": [0.1, 0.4],
159
- "gemini-1.5-pro": [1.25, 5],
160
- "gemini-1.5-flash": [0.075, 0.3],
161
- };
162
- /**
163
- * Cache pricing multipliers by provider prefix.
164
- *
165
- * Each entry maps a model key prefix to `[readMultiplier, writeMultiplier]`
166
- * relative to the base input price. For example, Anthropic charges 10% of
167
- * the base input rate for cache reads and 25% for cache writes.
168
- *
169
- * Gemini charges 25% of base input for cached content (reads). Gemini has
170
- * no separate "cache write" billing; context caching cost is handled
171
- * outside the per-request pricing.
172
- */
173
- const CACHE_PRICING = {
174
- "claude-": [0.1, 0.25],
175
- "gemini-": [0.25, 0],
176
- };
177
- /**
178
- * Look up cache pricing multipliers for a model key.
179
- */
180
- function getCacheMultipliers(modelKey) {
181
- for (const [prefix, multipliers] of Object.entries(CACHE_PRICING)) {
182
- if (modelKey.startsWith(prefix))
183
- return multipliers;
184
- }
185
- return [0, 0];
186
- }
187
- /**
188
- * Estimate cost in USD for a request/response token pair using `MODEL_PRICING`.
189
- *
190
- * Cache pricing varies by provider:
191
- * - Anthropic: cache reads at 10% of base input, writes at 25%
192
- * - Gemini: cached content at 25% of base input, no write cost
193
- *
194
- * @param model - Model identifier (substring matched against known keys).
195
- * @param inputTokens - Input/prompt tokens (non-cached).
196
- * @param outputTokens - Output/completion tokens.
197
- * @param cacheReadTokens - Cache read tokens.
198
- * @param cacheWriteTokens - Cache write tokens.
199
- * @returns Cost in USD, rounded to 6 decimals; `null` if the model is unknown.
200
- */
201
- export function estimateCost(model, inputTokens, outputTokens, cacheReadTokens = 0, cacheWriteTokens = 0) {
202
- for (const [key, [inp, out]] of Object.entries(MODEL_PRICING)) {
203
- if (model.includes(key)) {
204
- const [readMul, writeMul] = getCacheMultipliers(key);
205
- const cacheReadCost = cacheReadTokens * inp * readMul;
206
- const cacheWriteCost = cacheWriteTokens * inp * writeMul;
207
- return (Math.round(((inputTokens * inp +
208
- outputTokens * out +
209
- cacheReadCost +
210
- cacheWriteCost) /
211
- 1_000_000) *
212
- 1_000_000) / 1_000_000);
213
- }
214
- }
215
- return null;
216
- }
9
+ export { CONTEXT_LIMITS, estimateCost, getContextLimit, getKnownModels, MODEL_PRICING, } from "@contextio/core";
217
10
  //# sourceMappingURL=models.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"models.js","sourceRoot":"","sources":["../../src/core/models.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"models.js","sourceRoot":"","sources":["../../src/core/models.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAEH,OAAO,EACL,cAAc,EACd,YAAY,EACZ,eAAe,EACf,cAAc,EACd,aAAa,GACd,MAAM,iBAAiB,CAAC"}
@@ -1 +1 @@
1
- {"version":3,"file":"routing.d.ts","sourceRoot":"","sources":["../../src/core/routing.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EACV,SAAS,EACT,mBAAmB,EACnB,SAAS,EACT,QAAQ,EACR,mBAAmB,EACnB,SAAS,EACV,MAAM,aAAa,CAAC;AAErB;;;;GAIG;AACH,eAAO,MAAM,iBAAiB,aAY5B,CAAC;AAEH;;;;GAIG;AACH,wBAAgB,cAAc,CAC5B,QAAQ,EAAE,MAAM,EAChB,OAAO,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,GAAG,SAAS,CAAC,GAC1C,QAAQ,CAEV;AAED;;;;GAIG;AACH,wBAAgB,eAAe,CAAC,QAAQ,EAAE,MAAM,GAAG,SAAS,CAE3D;AAED;;;;;GAKG;AACH,wBAAgB,eAAe,CAC7B,QAAQ,EAAE,MAAM,EAChB,OAAO,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,GAAG,SAAS,CAAC,GAC1C;IAAE,QAAQ,EAAE,QAAQ,CAAC;IAAC,SAAS,EAAE,SAAS,CAAA;CAAE,CA0C9C;AAeD,wBAAgB,aAAa,CAAC,QAAQ,EAAE,MAAM,GAAG,mBAAmB,CA+BnE;AAED;;;;;;;GAOG;AACH,wBAAgB,gBAAgB,CAC9B,SAAS,EAAE,SAAS,EACpB,OAAO,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,GAAG,SAAS,CAAC,EAC3C,SAAS,EAAE,SAAS,GACnB,mBAAmB,CAmCrB"}
1
+ {"version":3,"file":"routing.d.ts","sourceRoot":"","sources":["../../src/core/routing.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EACV,SAAS,EACT,mBAAmB,EACnB,SAAS,EACT,QAAQ,EACR,mBAAmB,EACnB,SAAS,EACV,MAAM,aAAa,CAAC;AAErB;;;;GAIG;AACH,eAAO,MAAM,iBAAiB,aAY5B,CAAC;AAEH;;;;GAIG;AACH,wBAAgB,cAAc,CAC5B,QAAQ,EAAE,MAAM,EAChB,OAAO,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,GAAG,SAAS,CAAC,GAC1C,QAAQ,CAEV;AAED;;;;GAIG;AACH,wBAAgB,eAAe,CAAC,QAAQ,EAAE,MAAM,GAAG,SAAS,CAE3D;AAED;;;;;GAKG;AACH,wBAAgB,eAAe,CAC7B,QAAQ,EAAE,MAAM,EAChB,OAAO,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,GAAG,SAAS,CAAC,GAC1C;IAAE,QAAQ,EAAE,QAAQ,CAAC;IAAC,SAAS,EAAE,SAAS,CAAA;CAAE,CA0C9C;AAeD,wBAAgB,aAAa,CAAC,QAAQ,EAAE,MAAM,GAAG,mBAAmB,CA+BnE;AAED;;;;;;;GAOG;AACH,wBAAgB,gBAAgB,CAC9B,SAAS,EAAE,SAAS,EACpB,OAAO,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,GAAG,SAAS,CAAC,EAC3C,SAAS,EAAE,SAAS,GACnB,mBAAmB,CA0CrB"}
@@ -157,7 +157,13 @@ export function resolveTargetUrl(parsedUrl, headers, upstreams) {
157
157
  }
158
158
  }
159
159
  else {
160
- targetUrl = upstreams.openai + parsedUrl.pathname + search;
160
+ // Codex Enterprise sets OPENAI_BASE_URL without a /v1 suffix and
161
+ // appends paths like /responses directly. Normalize /responses to
162
+ // /v1/responses so it reaches the correct endpoint on api.openai.com.
163
+ const openaiPath = parsedUrl.pathname === "/responses"
164
+ ? "/v1/responses"
165
+ : parsedUrl.pathname;
166
+ targetUrl = upstreams.openai + openaiPath + search;
161
167
  }
162
168
  }
163
169
  else if (!targetUrl.startsWith("http")) {
@@ -1 +1 @@
1
- {"version":3,"file":"routing.js","sourceRoot":"","sources":["../../src/core/routing.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"routing.js","sourceRoot":"","sources":["../../src/core/routing.ts"],"names":[],"mappings":"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"}
@@ -1,25 +1,17 @@
1
1
  /**
2
- * Shared header redaction utilities.
2
+ * Header redaction utilities for captures and LHAR export.
3
3
  *
4
- * Context Lens captures and exports some headers for debugging and provenance,
5
- * but must never persist secrets (API keys, cookies, auth challenges, etc.).
6
- *
7
- * Keep this as the single source of truth to avoid drift between "capture" and "export".
4
+ * `selectHeaders` and `SENSITIVE_HEADERS` are re-exported from @contextio/core
5
+ * (single source of truth). `redactHeaders` is context-lens-specific: it
6
+ * strips sensitive headers from an already-string-valued map (used in LHAR
7
+ * export where multi-value arrays are not possible).
8
8
  */
9
- /** Case-insensitive set of header names that must never be persisted/exported. */
10
- export declare const SENSITIVE_HEADERS: Set<string>;
9
+ export { SENSITIVE_HEADERS, selectHeaders } from "@contextio/core";
11
10
  /**
12
- * Remove sensitive headers from a header map.
11
+ * Remove sensitive headers from a string-valued header map.
13
12
  *
14
- * @param headers - Header map (string -> string)
15
- * @returns A new object with sensitive headers removed.
13
+ * Unlike `selectHeaders`, this does not filter non-string values
14
+ * it assumes all values are already strings (as in LHAR export).
16
15
  */
17
16
  export declare function redactHeaders(headers: Record<string, string>): Record<string, string>;
18
- /**
19
- * Select a safe subset of request/response headers for capture.
20
- *
21
- * - Drops sensitive headers (see `SENSITIVE_HEADERS`)
22
- * - Keeps only string-valued headers (Node can represent multi-valued headers as arrays)
23
- */
24
- export declare function selectHeaders(headers: Record<string, any>): Record<string, string>;
25
17
  //# sourceMappingURL=headers.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"headers.d.ts","sourceRoot":"","sources":["../../src/http/headers.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAEH,kFAAkF;AAClF,eAAO,MAAM,iBAAiB,aAY5B,CAAC;AAEH;;;;;GAKG;AACH,wBAAgB,aAAa,CAC3B,OAAO,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,GAC9B,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAOxB;AAED;;;;;GAKG;AACH,wBAAgB,aAAa,CAC3B,OAAO,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,GAC3B,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAOxB"}
1
+ {"version":3,"file":"headers.d.ts","sourceRoot":"","sources":["../../src/http/headers.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAEH,OAAO,EAAE,iBAAiB,EAAE,aAAa,EAAE,MAAM,iBAAiB,CAAC;AAInE;;;;;GAKG;AACH,wBAAgB,aAAa,CAC3B,OAAO,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,GAC9B,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAOxB"}
@@ -1,30 +1,18 @@
1
1
  /**
2
- * Shared header redaction utilities.
2
+ * Header redaction utilities for captures and LHAR export.
3
3
  *
4
- * Context Lens captures and exports some headers for debugging and provenance,
5
- * but must never persist secrets (API keys, cookies, auth challenges, etc.).
6
- *
7
- * Keep this as the single source of truth to avoid drift between "capture" and "export".
4
+ * `selectHeaders` and `SENSITIVE_HEADERS` are re-exported from @contextio/core
5
+ * (single source of truth). `redactHeaders` is context-lens-specific: it
6
+ * strips sensitive headers from an already-string-valued map (used in LHAR
7
+ * export where multi-value arrays are not possible).
8
8
  */
9
- /** Case-insensitive set of header names that must never be persisted/exported. */
10
- export const SENSITIVE_HEADERS = new Set([
11
- "authorization",
12
- "x-api-key",
13
- "cookie",
14
- "set-cookie",
15
- "x-target-url",
16
- "proxy-authorization",
17
- "x-auth-token",
18
- "x-forwarded-authorization",
19
- "www-authenticate",
20
- "proxy-authenticate",
21
- "x-goog-api-key",
22
- ]);
9
+ export { SENSITIVE_HEADERS, selectHeaders } from "@contextio/core";
10
+ import { SENSITIVE_HEADERS } from "@contextio/core";
23
11
  /**
24
- * Remove sensitive headers from a header map.
12
+ * Remove sensitive headers from a string-valued header map.
25
13
  *
26
- * @param headers - Header map (string -> string)
27
- * @returns A new object with sensitive headers removed.
14
+ * Unlike `selectHeaders`, this does not filter non-string values
15
+ * it assumes all values are already strings (as in LHAR export).
28
16
  */
29
17
  export function redactHeaders(headers) {
30
18
  const result = {};
@@ -35,20 +23,4 @@ export function redactHeaders(headers) {
35
23
  }
36
24
  return result;
37
25
  }
38
- /**
39
- * Select a safe subset of request/response headers for capture.
40
- *
41
- * - Drops sensitive headers (see `SENSITIVE_HEADERS`)
42
- * - Keeps only string-valued headers (Node can represent multi-valued headers as arrays)
43
- */
44
- export function selectHeaders(headers) {
45
- const result = {};
46
- for (const [key, val] of Object.entries(headers)) {
47
- if (SENSITIVE_HEADERS.has(key.toLowerCase()))
48
- continue;
49
- if (typeof val === "string")
50
- result[key] = val;
51
- }
52
- return result;
53
- }
54
26
  //# sourceMappingURL=headers.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"headers.js","sourceRoot":"","sources":["../../src/http/headers.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAEH,kFAAkF;AAClF,MAAM,CAAC,MAAM,iBAAiB,GAAG,IAAI,GAAG,CAAC;IACvC,eAAe;IACf,WAAW;IACX,QAAQ;IACR,YAAY;IACZ,cAAc;IACd,qBAAqB;IACrB,cAAc;IACd,2BAA2B;IAC3B,kBAAkB;IAClB,oBAAoB;IACpB,gBAAgB;CACjB,CAAC,CAAC;AAEH;;;;;GAKG;AACH,MAAM,UAAU,aAAa,CAC3B,OAA+B;IAE/B,MAAM,MAAM,GAA2B,EAAE,CAAC;IAC1C,KAAK,MAAM,CAAC,GAAG,EAAE,GAAG,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,OAAO,CAAC,EAAE,CAAC;QACjD,IAAI,iBAAiB,CAAC,GAAG,CAAC,GAAG,CAAC,WAAW,EAAE,CAAC;YAAE,SAAS;QACvD,MAAM,CAAC,GAAG,CAAC,GAAG,GAAG,CAAC;IACpB,CAAC;IACD,OAAO,MAAM,CAAC;AAChB,CAAC;AAED;;;;;GAKG;AACH,MAAM,UAAU,aAAa,CAC3B,OAA4B;IAE5B,MAAM,MAAM,GAA2B,EAAE,CAAC;IAC1C,KAAK,MAAM,CAAC,GAAG,EAAE,GAAG,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,OAAO,CAAC,EAAE,CAAC;QACjD,IAAI,iBAAiB,CAAC,GAAG,CAAC,GAAG,CAAC,WAAW,EAAE,CAAC;YAAE,SAAS;QACvD,IAAI,OAAO,GAAG,KAAK,QAAQ;YAAE,MAAM,CAAC,GAAG,CAAC,GAAG,GAAG,CAAC;IACjD,CAAC;IACD,OAAO,MAAM,CAAC;AAChB,CAAC"}
1
+ {"version":3,"file":"headers.js","sourceRoot":"","sources":["../../src/http/headers.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAEH,OAAO,EAAE,iBAAiB,EAAE,aAAa,EAAE,MAAM,iBAAiB,CAAC;AAEnE,OAAO,EAAE,iBAAiB,EAAE,MAAM,iBAAiB,CAAC;AAEpD;;;;;GAKG;AACH,MAAM,UAAU,aAAa,CAC3B,OAA+B;IAE/B,MAAM,MAAM,GAA2B,EAAE,CAAC;IAC1C,KAAK,MAAM,CAAC,GAAG,EAAE,GAAG,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,OAAO,CAAC,EAAE,CAAC;QACjD,IAAI,iBAAiB,CAAC,GAAG,CAAC,GAAG,CAAC,WAAW,EAAE,CAAC;YAAE,SAAS;QACvD,MAAM,CAAC,GAAG,CAAC,GAAG,GAAG,CAAC;IACpB,CAAC;IACD,OAAO,MAAM,CAAC;AAChB,CAAC"}
@@ -1 +1 @@
1
- {"version":3,"file":"config.d.ts","sourceRoot":"","sources":["../../src/proxy/config.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAKH,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,iBAAiB,CAAC;AAEjD,MAAM,WAAW,WAAW;IAC1B,SAAS,EAAE,SAAS,CAAC;IACrB,QAAQ,EAAE,MAAM,CAAC;IACjB,IAAI,EAAE,MAAM,CAAC;IACb,mBAAmB,EAAE,OAAO,CAAC;IAC7B,UAAU,EAAE,MAAM,CAAC;IACnB,kFAAkF;IAClF,SAAS,EAAE,MAAM,GAAG,IAAI,CAAC;CAC1B;AAED,wBAAgB,eAAe,IAAI,WAAW,CAuC7C"}
1
+ {"version":3,"file":"config.d.ts","sourceRoot":"","sources":["../../src/proxy/config.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAKH,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,iBAAiB,CAAC;AAEjD,MAAM,WAAW,WAAW;IAC1B,SAAS,EAAE,SAAS,CAAC;IACrB,QAAQ,EAAE,MAAM,CAAC;IACjB,IAAI,EAAE,MAAM,CAAC;IACb,mBAAmB,EAAE,OAAO,CAAC;IAC7B,UAAU,EAAE,MAAM,CAAC;IACnB,kFAAkF;IAClF,SAAS,EAAE,MAAM,GAAG,IAAI,CAAC;CAC1B;AAED,wBAAgB,eAAe,IAAI,WAAW,CAuD7C"}
@@ -21,7 +21,20 @@ export function loadProxyConfig() {
21
21
  const bindHost = process.env.CONTEXT_LENS_BIND_HOST || "127.0.0.1";
22
22
  const port = parseInt(process.env.CONTEXT_LENS_PROXY_PORT || "4040", 10);
23
23
  // Do not honor `x-target-url` unless explicitly enabled.
24
+ // Intended for Docker multi-container setups where the analysis server
25
+ // sends captures back through the proxy at a known upstream URL.
26
+ //
27
+ // WARNING: combining this with a non-loopback bind host lets any client
28
+ // on the network redirect proxy traffic to arbitrary URLs (SSRF). Only
29
+ // set both when the proxy is on a private Docker bridge with no external
30
+ // exposure.
24
31
  const allowTargetOverride = process.env.CONTEXT_LENS_ALLOW_TARGET_OVERRIDE === "1";
32
+ const loopbackHosts = ["127.0.0.1", "::1", "localhost"];
33
+ if (allowTargetOverride && !loopbackHosts.includes(bindHost)) {
34
+ console.warn("Warning: CONTEXT_LENS_ALLOW_TARGET_OVERRIDE=1 is set with a non-loopback " +
35
+ `bind host (${bindHost}). Any client that can reach the proxy can redirect ` +
36
+ "requests to arbitrary URLs. Only use this on a private Docker bridge network.");
37
+ }
25
38
  const captureDir = process.env.CONTEXT_LENS_CAPTURE_DIR ||
26
39
  join(homedir(), ".context-lens", "captures");
27
40
  const ingestUrl = process.env.CONTEXT_LENS_INGEST_URL || null;
@@ -1 +1 @@
1
- {"version":3,"file":"config.js","sourceRoot":"","sources":["../../src/proxy/config.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,EAAE,OAAO,EAAE,MAAM,SAAS,CAAC;AAClC,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC;AAcjC,MAAM,UAAU,eAAe;IAC7B,MAAM,SAAS,GAAc;QAC3B,MAAM,EAAE,OAAO,CAAC,GAAG,CAAC,mBAAmB,IAAI,wBAAwB;QACnE,SAAS,EACP,OAAO,CAAC,GAAG,CAAC,sBAAsB,IAAI,2BAA2B;QACnE,OAAO,EAAE,OAAO,CAAC,GAAG,CAAC,oBAAoB,IAAI,qBAAqB;QAClE,MAAM,EACJ,OAAO,CAAC,GAAG,CAAC,mBAAmB;YAC/B,2CAA2C;QAC7C,gBAAgB,EACd,OAAO,CAAC,GAAG,CAAC,+BAA+B;YAC3C,qCAAqC;QACvC,MAAM,EACJ,OAAO,CAAC,GAAG,CAAC,mBAAmB;YAC/B,+CAA+C;KAClD,CAAC;IAEF,uDAAuD;IACvD,MAAM,QAAQ,GAAG,OAAO,CAAC,GAAG,CAAC,sBAAsB,IAAI,WAAW,CAAC;IACnE,MAAM,IAAI,GAAG,QAAQ,CAAC,OAAO,CAAC,GAAG,CAAC,uBAAuB,IAAI,MAAM,EAAE,EAAE,CAAC,CAAC;IAEzE,yDAAyD;IACzD,MAAM,mBAAmB,GACvB,OAAO,CAAC,GAAG,CAAC,kCAAkC,KAAK,GAAG,CAAC;IAEzD,MAAM,UAAU,GACd,OAAO,CAAC,GAAG,CAAC,wBAAwB;QACpC,IAAI,CAAC,OAAO,EAAE,EAAE,eAAe,EAAE,UAAU,CAAC,CAAC;IAE/C,MAAM,SAAS,GAAG,OAAO,CAAC,GAAG,CAAC,uBAAuB,IAAI,IAAI,CAAC;IAE9D,OAAO;QACL,SAAS;QACT,QAAQ;QACR,IAAI;QACJ,mBAAmB;QACnB,UAAU;QACV,SAAS;KACV,CAAC;AACJ,CAAC"}
1
+ {"version":3,"file":"config.js","sourceRoot":"","sources":["../../src/proxy/config.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,EAAE,OAAO,EAAE,MAAM,SAAS,CAAC;AAClC,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC;AAcjC,MAAM,UAAU,eAAe;IAC7B,MAAM,SAAS,GAAc;QAC3B,MAAM,EAAE,OAAO,CAAC,GAAG,CAAC,mBAAmB,IAAI,wBAAwB;QACnE,SAAS,EACP,OAAO,CAAC,GAAG,CAAC,sBAAsB,IAAI,2BAA2B;QACnE,OAAO,EAAE,OAAO,CAAC,GAAG,CAAC,oBAAoB,IAAI,qBAAqB;QAClE,MAAM,EACJ,OAAO,CAAC,GAAG,CAAC,mBAAmB;YAC/B,2CAA2C;QAC7C,gBAAgB,EACd,OAAO,CAAC,GAAG,CAAC,+BAA+B;YAC3C,qCAAqC;QACvC,MAAM,EACJ,OAAO,CAAC,GAAG,CAAC,mBAAmB;YAC/B,+CAA+C;KAClD,CAAC;IAEF,uDAAuD;IACvD,MAAM,QAAQ,GAAG,OAAO,CAAC,GAAG,CAAC,sBAAsB,IAAI,WAAW,CAAC;IACnE,MAAM,IAAI,GAAG,QAAQ,CAAC,OAAO,CAAC,GAAG,CAAC,uBAAuB,IAAI,MAAM,EAAE,EAAE,CAAC,CAAC;IAEzE,yDAAyD;IACzD,uEAAuE;IACvE,iEAAiE;IACjE,EAAE;IACF,wEAAwE;IACxE,uEAAuE;IACvE,yEAAyE;IACzE,YAAY;IACZ,MAAM,mBAAmB,GACvB,OAAO,CAAC,GAAG,CAAC,kCAAkC,KAAK,GAAG,CAAC;IAEzD,MAAM,aAAa,GAAG,CAAC,WAAW,EAAE,KAAK,EAAE,WAAW,CAAC,CAAC;IACxD,IAAI,mBAAmB,IAAI,CAAC,aAAa,CAAC,QAAQ,CAAC,QAAQ,CAAC,EAAE,CAAC;QAC7D,OAAO,CAAC,IAAI,CACV,2EAA2E;YACzE,cAAc,QAAQ,sDAAsD;YAC5E,+EAA+E,CAClF,CAAC;IACJ,CAAC;IAED,MAAM,UAAU,GACd,OAAO,CAAC,GAAG,CAAC,wBAAwB;QACpC,IAAI,CAAC,OAAO,EAAE,EAAE,eAAe,EAAE,UAAU,CAAC,CAAC;IAE/C,MAAM,SAAS,GAAG,OAAO,CAAC,GAAG,CAAC,uBAAuB,IAAI,IAAI,CAAC;IAE9D,OAAO;QACL,SAAS;QACT,QAAQ;QACR,IAAI;QACJ,mBAAmB;QACnB,UAAU;QACV,SAAS;KACV,CAAC;AACJ,CAAC"}
@@ -15,6 +15,25 @@
15
15
  import { createProxy } from "@contextio/proxy";
16
16
  import { createCaptureIngestor, createCaptureWriter } from "./capture.js";
17
17
  import { loadProxyConfig } from "./config.js";
18
+ async function loadRedactPlugin() {
19
+ const preset = process.env.CONTEXT_LENS_REDACT;
20
+ if (!preset)
21
+ return null;
22
+ try {
23
+ const { createRedactPlugin } = await import("@contextio/redact");
24
+ const reversible = process.env.CONTEXT_LENS_REHYDRATE === "1";
25
+ const plugin = createRedactPlugin({
26
+ preset: preset,
27
+ reversible,
28
+ });
29
+ console.log(`🔒 Redaction enabled (preset: ${preset}, ${reversible ? "reversible" : "one-way"})`);
30
+ return plugin;
31
+ }
32
+ catch (err) {
33
+ console.error("Failed to load redact plugin:", err instanceof Error ? err.message : String(err));
34
+ return null;
35
+ }
36
+ }
18
37
  async function loadPluginsFromEnv() {
19
38
  const pluginsEnv = process.env.CONTEXT_LENS_PROXY_PLUGINS;
20
39
  if (!pluginsEnv)
@@ -57,6 +76,9 @@ async function loadPluginsFromEnv() {
57
76
  async function main() {
58
77
  const config = loadProxyConfig();
59
78
  const plugins = await loadPluginsFromEnv();
79
+ const redactPlugin = await loadRedactPlugin();
80
+ if (redactPlugin)
81
+ plugins.unshift(redactPlugin);
60
82
  // Add a capture plugin that either writes to disk or POSTs to ingest URL.
61
83
  let onCapture;
62
84
  if (config.ingestUrl) {