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.
Files changed (119) hide show
  1. package/README.md +120 -25
  2. package/dist/cli-utils.d.ts +2 -1
  3. package/dist/cli-utils.d.ts.map +1 -1
  4. package/dist/cli-utils.js +40 -13
  5. package/dist/cli-utils.js.map +1 -1
  6. package/dist/cli.js +184 -68
  7. package/dist/cli.js.map +1 -1
  8. package/dist/core/conversation.d.ts +63 -0
  9. package/dist/core/conversation.d.ts.map +1 -0
  10. package/dist/core/conversation.js +305 -0
  11. package/dist/core/conversation.js.map +1 -0
  12. package/dist/core/health.d.ts +7 -0
  13. package/dist/core/health.d.ts.map +1 -0
  14. package/dist/core/health.js +311 -0
  15. package/dist/core/health.js.map +1 -0
  16. package/dist/core/models.d.ts +36 -0
  17. package/dist/core/models.d.ts.map +1 -0
  18. package/dist/core/models.js +111 -0
  19. package/dist/core/models.js.map +1 -0
  20. package/dist/core/parse.d.ts +17 -0
  21. package/dist/core/parse.d.ts.map +1 -0
  22. package/dist/core/parse.js +349 -0
  23. package/dist/core/parse.js.map +1 -0
  24. package/dist/core/routing.d.ts +47 -0
  25. package/dist/core/routing.d.ts.map +1 -0
  26. package/dist/core/routing.js +132 -0
  27. package/dist/core/routing.js.map +1 -0
  28. package/dist/core/security.d.ts +8 -0
  29. package/dist/core/security.d.ts.map +1 -0
  30. package/dist/core/security.js +222 -0
  31. package/dist/core/security.js.map +1 -0
  32. package/dist/core/source.d.ts +22 -0
  33. package/dist/core/source.d.ts.map +1 -0
  34. package/dist/core/source.js +56 -0
  35. package/dist/core/source.js.map +1 -0
  36. package/dist/core/tokens.d.ts +29 -0
  37. package/dist/core/tokens.d.ts.map +1 -0
  38. package/dist/core/tokens.js +163 -0
  39. package/dist/core/tokens.js.map +1 -0
  40. package/dist/core.d.ts +14 -22
  41. package/dist/core.d.ts.map +1 -1
  42. package/dist/core.js +14 -471
  43. package/dist/core.js.map +1 -1
  44. package/dist/http/headers.d.ts +25 -0
  45. package/dist/http/headers.d.ts.map +1 -0
  46. package/dist/http/headers.js +54 -0
  47. package/dist/http/headers.js.map +1 -0
  48. package/dist/lhar/composition.d.ts +12 -0
  49. package/dist/lhar/composition.d.ts.map +1 -0
  50. package/dist/lhar/composition.js +258 -0
  51. package/dist/lhar/composition.js.map +1 -0
  52. package/dist/lhar/export.d.ts +5 -0
  53. package/dist/lhar/export.d.ts.map +1 -0
  54. package/dist/lhar/export.js +59 -0
  55. package/dist/lhar/export.js.map +1 -0
  56. package/dist/lhar/record.d.ts +6 -0
  57. package/dist/lhar/record.d.ts.map +1 -0
  58. package/dist/lhar/record.js +216 -0
  59. package/dist/lhar/record.js.map +1 -0
  60. package/dist/lhar/response.d.ts +11 -0
  61. package/dist/lhar/response.d.ts.map +1 -0
  62. package/dist/lhar/response.js +132 -0
  63. package/dist/lhar/response.js.map +1 -0
  64. package/dist/lhar-types.generated.d.ts +24 -3
  65. package/dist/lhar-types.generated.d.ts.map +1 -1
  66. package/dist/lhar.d.ts +12 -19
  67. package/dist/lhar.d.ts.map +1 -1
  68. package/dist/lhar.js +16 -473
  69. package/dist/lhar.js.map +1 -1
  70. package/dist/server/api.d.ts +8 -0
  71. package/dist/server/api.d.ts.map +1 -0
  72. package/dist/server/api.js +292 -0
  73. package/dist/server/api.js.map +1 -0
  74. package/dist/server/config.d.ts +13 -0
  75. package/dist/server/config.d.ts.map +1 -0
  76. package/dist/server/config.js +36 -0
  77. package/dist/server/config.js.map +1 -0
  78. package/dist/server/projection.d.ts +9 -0
  79. package/dist/server/projection.d.ts.map +1 -0
  80. package/dist/server/projection.js +47 -0
  81. package/dist/server/projection.js.map +1 -0
  82. package/dist/server/proxy.d.ts +13 -0
  83. package/dist/server/proxy.d.ts.map +1 -0
  84. package/dist/server/proxy.js +218 -0
  85. package/dist/server/proxy.js.map +1 -0
  86. package/dist/server/static.d.ts +9 -0
  87. package/dist/server/static.d.ts.map +1 -0
  88. package/dist/server/static.js +78 -0
  89. package/dist/server/static.js.map +1 -0
  90. package/dist/server/store.d.ts +81 -0
  91. package/dist/server/store.d.ts.map +1 -0
  92. package/dist/server/store.js +632 -0
  93. package/dist/server/store.js.map +1 -0
  94. package/dist/server/webui.d.ts +5 -0
  95. package/dist/server/webui.d.ts.map +1 -0
  96. package/dist/server/webui.js +42 -0
  97. package/dist/server/webui.js.map +1 -0
  98. package/dist/server-utils.d.ts +2 -2
  99. package/dist/server-utils.d.ts.map +1 -1
  100. package/dist/server-utils.js +12 -21
  101. package/dist/server-utils.js.map +1 -1
  102. package/dist/server.js +31 -697
  103. package/dist/server.js.map +1 -1
  104. package/dist/types.d.ts +94 -10
  105. package/dist/types.d.ts.map +1 -1
  106. package/dist/version.generated.d.ts +2 -0
  107. package/dist/version.generated.d.ts.map +1 -0
  108. package/dist/version.generated.js +2 -0
  109. package/dist/version.generated.js.map +1 -0
  110. package/findings-screenshot.png +0 -0
  111. package/messages-screenshot.png +0 -0
  112. package/package.json +23 -10
  113. package/schema/lhar.schema.json +58 -4
  114. package/screenshot-overview.png +0 -0
  115. package/sessions-screenshot.png +0 -0
  116. package/timeline-screenshot.png +0 -0
  117. package/diff.png +0 -0
  118. package/overview-sidebar.png +0 -0
  119. package/public/index.html +0 -2804
@@ -0,0 +1 @@
1
+ {"version":3,"file":"tokens.js","sourceRoot":"","sources":["../../src/core/tokens.ts"],"names":[],"mappings":"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"}
package/dist/core.d.ts CHANGED
@@ -1,23 +1,15 @@
1
- import type { Provider, ApiFormat, ContextInfo, ParsedMessage, SourceSignature, HeaderSignature, ExtractSourceResult, ParsedUrl, Upstreams, ResolveTargetResult } from './types.js';
2
- export declare const CONTEXT_LIMITS: Record<string, number>;
3
- export declare const HEADER_SIGNATURES: HeaderSignature[];
4
- export declare const SOURCE_SIGNATURES: SourceSignature[];
5
- export declare const API_PATH_SEGMENTS: Set<string>;
6
- export declare function estimateTokens(text: unknown): number;
7
- export declare function detectProvider(pathname: string, headers: Record<string, string | undefined>): Provider;
8
- export declare function detectApiFormat(pathname: string): ApiFormat;
9
- export declare function parseContextInfo(provider: string, body: Record<string, any>, apiFormat: string): ContextInfo;
10
- export declare function getContextLimit(model: string): number;
11
- export declare const MODEL_PRICING: Record<string, [number, number]>;
12
- export declare function estimateCost(model: string, inputTokens: number, outputTokens: number): number | null;
13
- export declare function extractSource(pathname: string): ExtractSourceResult;
14
- export declare function resolveTargetUrl(parsedUrl: ParsedUrl, headers: Record<string, string | undefined>, upstreams: Upstreams): ResolveTargetResult;
15
- export declare function extractReadableText(content: string | null | undefined): string | null;
16
- export declare function extractWorkingDirectory(contextInfo: ContextInfo): string | null;
17
- export declare function extractUserPrompt(messages: ParsedMessage[]): string | null;
18
- export declare function extractSessionId(rawBody: Record<string, any> | null | undefined): string | null;
19
- export declare function computeAgentKey(contextInfo: ContextInfo): string | null;
20
- export declare function computeFingerprint(contextInfo: ContextInfo, rawBody: Record<string, any> | null | undefined, responseIdToConvo: Map<string, string>): string | null;
21
- export declare function extractConversationLabel(contextInfo: ContextInfo): string;
22
- export declare function detectSource(contextInfo: ContextInfo, source: string | null, headers?: Record<string, string>): string;
1
+ /**
2
+ * Public "core" API for Context Lens.
3
+ *
4
+ * This is intentionally a thin facade: other parts of the codebase import from here,
5
+ * while implementations live in `src/core/*` to keep concerns separated.
6
+ */
7
+ export { computeAgentKey, computeFingerprint, extractConversationLabel, extractReadableText, extractSessionId, extractToolsUsed, extractUserPrompt, extractWorkingDirectory, } from "./core/conversation.js";
8
+ export { computeHealthScore } from "./core/health.js";
9
+ export { estimateCost, getContextLimit, } from "./core/models.js";
10
+ export { parseContextInfo } from "./core/parse.js";
11
+ export { detectApiFormat, detectProvider, extractSource, resolveTargetUrl, } from "./core/routing.js";
12
+ export { scanSecurity } from "./core/security.js";
13
+ export { detectSource } from "./core/source.js";
14
+ export { estimateTokens, rescaleContextTokens } from "./core/tokens.js";
23
15
  //# sourceMappingURL=core.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"core.d.ts","sourceRoot":"","sources":["../src/core.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EACV,QAAQ,EAAE,SAAS,EAAE,WAAW,EAAE,aAAa,EAC/C,eAAe,EAAE,eAAe,EAAE,mBAAmB,EAAE,SAAS,EAAE,SAAS,EAC3E,mBAAmB,EACpB,MAAM,YAAY,CAAC;AAGpB,eAAO,MAAM,cAAc,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAmBjD,CAAC;AAGF,eAAO,MAAM,iBAAiB,EAAE,eAAe,EAI9C,CAAC;AAGF,eAAO,MAAM,iBAAiB,EAAE,eAAe,EAI9C,CAAC;AAGF,eAAO,MAAM,iBAAiB,aAE5B,CAAC;AAGH,wBAAgB,cAAc,CAAC,IAAI,EAAE,OAAO,GAAG,MAAM,CAIpD;AAGD,wBAAgB,cAAc,CAAC,QAAQ,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,GAAG,SAAS,CAAC,GAAG,QAAQ,CAOtG;AAGD,wBAAgB,eAAe,CAAC,QAAQ,EAAE,MAAM,GAAG,SAAS,CAM3D;AA0ED,wBAAgB,gBAAgB,CAAC,QAAQ,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,EAAE,SAAS,EAAE,MAAM,GAAG,WAAW,CA8G5G;AAGD,wBAAgB,eAAe,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM,CAKrD;AAID,eAAO,MAAM,aAAa,EAAE,MAAM,CAAC,MAAM,EAAE,CAAC,MAAM,EAAE,MAAM,CAAC,CAgB1D,CAAC;AAEF,wBAAgB,YAAY,CAAC,KAAK,EAAE,MAAM,EAAE,WAAW,EAAE,MAAM,EAAE,YAAY,EAAE,MAAM,GAAG,MAAM,GAAG,IAAI,CAOpG;AAGD,wBAAgB,aAAa,CAAC,QAAQ,EAAE,MAAM,GAAG,mBAAmB,CAiBnE;AAGD,wBAAgB,gBAAgB,CAAC,SAAS,EAAE,SAAS,EAAE,OAAO,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,GAAG,SAAS,CAAC,EAAE,SAAS,EAAE,SAAS,GAAG,mBAAmB,CAgB7I;AAGD,wBAAgB,mBAAmB,CAAC,OAAO,EAAE,MAAM,GAAG,IAAI,GAAG,SAAS,GAAG,MAAM,GAAG,IAAI,CAerF;AAGD,wBAAgB,uBAAuB,CAAC,WAAW,EAAE,WAAW,GAAG,MAAM,GAAG,IAAI,CAmB/E;AAGD,wBAAgB,iBAAiB,CAAC,QAAQ,EAAE,aAAa,EAAE,GAAG,MAAM,GAAG,IAAI,CAa1E;AAGD,wBAAgB,gBAAgB,CAAC,OAAO,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,GAAG,IAAI,GAAG,SAAS,GAAG,MAAM,GAAG,IAAI,CAK/F;AAGD,wBAAgB,eAAe,CAAC,WAAW,EAAE,WAAW,GAAG,MAAM,GAAG,IAAI,CASvE;AAGD,wBAAgB,kBAAkB,CAChC,WAAW,EAAE,WAAW,EACxB,OAAO,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,GAAG,IAAI,GAAG,SAAS,EAC/C,iBAAiB,EAAE,GAAG,CAAC,MAAM,EAAE,MAAM,CAAC,GACrC,MAAM,GAAG,IAAI,CA0Bf;AAGD,wBAAgB,wBAAwB,CAAC,WAAW,EAAE,WAAW,GAAG,MAAM,CAczE;AAGD,wBAAgB,YAAY,CAAC,WAAW,EAAE,WAAW,EAAE,MAAM,EAAE,MAAM,GAAG,IAAI,EAAE,OAAO,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,GAAG,MAAM,CAoBtH"}
1
+ {"version":3,"file":"core.d.ts","sourceRoot":"","sources":["../src/core.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,EACL,eAAe,EACf,kBAAkB,EAClB,wBAAwB,EACxB,mBAAmB,EACnB,gBAAgB,EAChB,gBAAgB,EAChB,iBAAiB,EACjB,uBAAuB,GACxB,MAAM,wBAAwB,CAAC;AAEhC,OAAO,EAAE,kBAAkB,EAAE,MAAM,kBAAkB,CAAC;AACtD,OAAO,EACL,YAAY,EACZ,eAAe,GAChB,MAAM,kBAAkB,CAAC;AAC1B,OAAO,EAAE,gBAAgB,EAAE,MAAM,iBAAiB,CAAC;AACnD,OAAO,EACL,eAAe,EACf,cAAc,EACd,aAAa,EACb,gBAAgB,GACjB,MAAM,mBAAmB,CAAC;AAC3B,OAAO,EAAE,YAAY,EAAE,MAAM,oBAAoB,CAAC;AAClD,OAAO,EAAE,YAAY,EAAE,MAAM,kBAAkB,CAAC;AAChD,OAAO,EAAE,cAAc,EAAE,oBAAoB,EAAE,MAAM,kBAAkB,CAAC"}
package/dist/core.js CHANGED
@@ -1,472 +1,15 @@
1
- import { createHash } from 'node:crypto';
2
- // Model context limits (tokens) more specific keys first
3
- export const CONTEXT_LIMITS = {
4
- // Anthropic
5
- 'claude-opus-4': 200000,
6
- 'claude-sonnet-4': 200000,
7
- 'claude-haiku-4': 200000,
8
- 'claude-3-5-sonnet': 200000,
9
- 'claude-3-5-haiku': 200000,
10
- 'claude-3-opus': 200000,
11
- // OpenAI specific before generic
12
- 'gpt-4o-mini': 128000,
13
- 'gpt-4o': 128000,
14
- 'gpt-4-turbo': 128000,
15
- 'gpt-4': 8192,
16
- 'gpt-3.5-turbo': 16385,
17
- 'o4-mini': 200000,
18
- 'o3-mini': 200000,
19
- 'o3': 200000,
20
- 'o1-mini': 128000,
21
- 'o1': 200000,
22
- };
23
- // Auto-detect source tool from request headers (primary)
24
- export const HEADER_SIGNATURES = [
25
- { header: 'user-agent', pattern: /^claude-cli\//, source: 'claude' },
26
- { header: 'user-agent', pattern: /aider/i, source: 'aider' },
27
- { header: 'user-agent', pattern: /kimi/i, source: 'kimi' },
28
- ];
29
- // Auto-detect source tool from system prompt (fallback)
30
- export const SOURCE_SIGNATURES = [
31
- { pattern: 'Act as an expert software developer', source: 'aider' },
32
- { pattern: 'You are Claude Code', source: 'claude' },
33
- { pattern: 'You are Kimi Code CLI', source: 'kimi' },
34
- ];
35
- // Known API path segments — not treated as source prefixes
36
- export const API_PATH_SEGMENTS = new Set([
37
- 'v1', 'responses', 'chat', 'models', 'embeddings', 'backend-api', 'api',
38
- ]);
39
- // Simple token estimation: chars / 4
40
- export function estimateTokens(text) {
41
- if (!text)
42
- return 0;
43
- const s = typeof text === 'object' ? JSON.stringify(text) : String(text);
44
- return Math.ceil(s.length / 4);
45
- }
46
- // Detect provider from request
47
- export function detectProvider(pathname, headers) {
48
- if (pathname.match(/^\/(api|backend-api)\//))
49
- return 'chatgpt';
50
- if (pathname.includes('/v1/messages') || pathname.includes('/v1/complete'))
51
- return 'anthropic';
52
- if (headers['anthropic-version'])
53
- return 'anthropic';
54
- if (pathname.match(/\/(responses|chat\/completions|models|embeddings)/))
55
- return 'openai';
56
- if (headers['authorization']?.startsWith('Bearer sk-'))
57
- return 'openai';
58
- return 'unknown';
59
- }
60
- // Detect which API format is being used
61
- export function detectApiFormat(pathname) {
62
- if (pathname.includes('/v1/messages'))
63
- return 'anthropic-messages';
64
- if (pathname.match(/^\/(api|backend-api)\//))
65
- return 'chatgpt-backend';
66
- if (pathname.includes('/responses'))
67
- return 'responses';
68
- if (pathname.includes('/chat/completions'))
69
- return 'chat-completions';
70
- return 'unknown';
71
- }
72
- // Parse a single item from the OpenAI Responses API `input` array.
73
- // Maps typed items (function_call, function_call_output, reasoning, output_text, etc.)
74
- // to normalized ParsedMessage with proper role and contentBlocks.
75
- function parseResponsesItem(item) {
76
- const type = item.type || '';
77
- // Standard message with role/content (e.g. {"type":"message","role":"user","content":[...]})
78
- if (item.role) {
79
- const isSystem = item.role === 'system' || item.role === 'developer';
80
- let content;
81
- let contentBlocks = null;
82
- if (typeof item.content === 'string') {
83
- content = item.content;
84
- }
85
- else if (Array.isArray(item.content)) {
86
- contentBlocks = item.content;
87
- content = item.content.map((b) => b.text || '').join('\n');
88
- }
89
- else {
90
- content = JSON.stringify(item.content || item);
91
- }
92
- const tokens = estimateTokens(item.content ?? content);
93
- return { message: { role: item.role, content, contentBlocks, tokens }, tokens, isSystem, content };
94
- }
95
- // function_call → assistant tool_use
96
- if (type === 'function_call' || type === 'custom_tool_call') {
97
- const name = item.name || 'unknown';
98
- const args = item.arguments || '';
99
- const content = name + '(' + (typeof args === 'string' ? args.slice(0, 200) : JSON.stringify(args).slice(0, 200)) + ')';
100
- const tokens = estimateTokens(item);
101
- const block = { type: 'tool_use', id: item.call_id || '', name, input: typeof args === 'string' ? {} : (args || {}) };
102
- return { message: { role: 'assistant', content, contentBlocks: [block], tokens }, tokens, isSystem: false, content };
103
- }
104
- // function_call_output → user tool_result
105
- if (type === 'function_call_output' || type === 'custom_tool_call_output') {
106
- const output = typeof item.output === 'string' ? item.output : JSON.stringify(item.output || '');
107
- const tokens = estimateTokens(output);
108
- const block = { type: 'tool_result', tool_use_id: item.call_id || '', content: output };
109
- return { message: { role: 'user', content: output, contentBlocks: [block], tokens }, tokens, isSystem: false, content: output };
110
- }
111
- // reasoning → assistant thinking
112
- if (type === 'reasoning') {
113
- const summary = Array.isArray(item.summary)
114
- ? item.summary.map((s) => s.text || '').join('\n')
115
- : '';
116
- const content = summary || '[reasoning]';
117
- const tokens = estimateTokens(item);
118
- return { message: { role: 'assistant', content, contentBlocks: [{ type: 'thinking', thinking: content }], tokens }, tokens, isSystem: false, content };
119
- }
120
- // output_text → assistant text
121
- if (type === 'output_text') {
122
- const text = item.text || '';
123
- const tokens = estimateTokens(text);
124
- return { message: { role: 'assistant', content: text, contentBlocks: [{ type: 'text', text }], tokens }, tokens, isSystem: false, content: text };
125
- }
126
- // input_text → user text
127
- if (type === 'input_text') {
128
- const text = item.text || '';
129
- const tokens = estimateTokens(text);
130
- return { message: { role: 'user', content: text, contentBlocks: [{ type: 'text', text }], tokens }, tokens, isSystem: false, content: text };
131
- }
132
- // Fallback: serialize the whole item
133
- const content = JSON.stringify(item);
134
- const tokens = estimateTokens(content);
135
- return { message: { role: item.role || 'user', content, tokens }, tokens, isSystem: false, content };
136
- }
137
- // Parse request body and extract context info
138
- export function parseContextInfo(provider, body, apiFormat) {
139
- const info = {
140
- provider,
141
- apiFormat,
142
- model: body.model || 'unknown',
143
- systemTokens: 0,
144
- toolsTokens: 0,
145
- messagesTokens: 0,
146
- totalTokens: 0,
147
- systemPrompts: [],
148
- tools: [],
149
- messages: [],
150
- };
151
- if (provider === 'anthropic') {
152
- if (body.system) {
153
- const systemText = typeof body.system === 'string'
154
- ? body.system
155
- : Array.isArray(body.system)
156
- ? body.system.map((b) => b.text || '').join('\n')
157
- : JSON.stringify(body.system);
158
- info.systemPrompts.push({ content: systemText });
159
- info.systemTokens = estimateTokens(systemText);
160
- }
161
- if (body.tools && Array.isArray(body.tools)) {
162
- info.tools = body.tools;
163
- info.toolsTokens = estimateTokens(JSON.stringify(body.tools));
164
- }
165
- if (body.messages && Array.isArray(body.messages)) {
166
- info.messages = body.messages.map((msg) => {
167
- const contentBlocks = Array.isArray(msg.content) ? msg.content : null;
168
- return {
169
- role: msg.role,
170
- content: typeof msg.content === 'string' ? msg.content : JSON.stringify(msg.content),
171
- contentBlocks,
172
- tokens: estimateTokens(msg.content),
173
- };
174
- });
175
- info.messagesTokens = info.messages.reduce((sum, m) => sum + m.tokens, 0);
176
- }
177
- }
178
- else if (apiFormat === 'responses' || provider === 'chatgpt') {
179
- // System prompts
180
- if (body.instructions) {
181
- info.systemPrompts.push({ content: body.instructions });
182
- info.systemTokens = estimateTokens(body.instructions);
183
- }
184
- if (body.system) {
185
- const systemText = typeof body.system === 'string'
186
- ? body.system
187
- : Array.isArray(body.system)
188
- ? body.system.map((b) => b.text || '').join('\n')
189
- : JSON.stringify(body.system);
190
- info.systemPrompts.push({ content: systemText });
191
- info.systemTokens += estimateTokens(systemText);
192
- }
193
- // Parse input/messages — handle Responses API typed items
194
- const msgs = body.input || body.messages;
195
- if (msgs) {
196
- if (typeof msgs === 'string') {
197
- info.messages.push({ role: 'user', content: msgs, tokens: estimateTokens(msgs) });
198
- info.messagesTokens = estimateTokens(msgs);
199
- }
200
- else if (Array.isArray(msgs)) {
201
- msgs.forEach((item) => {
202
- const parsed = parseResponsesItem(item);
203
- if (parsed.isSystem) {
204
- info.systemPrompts.push({ content: parsed.content });
205
- info.systemTokens += parsed.tokens;
206
- }
207
- else {
208
- info.messages.push(parsed.message);
209
- info.messagesTokens += parsed.tokens;
210
- }
211
- });
212
- }
213
- }
214
- if (body.tools && Array.isArray(body.tools)) {
215
- info.tools = body.tools;
216
- info.toolsTokens = estimateTokens(JSON.stringify(body.tools));
217
- }
218
- }
219
- else if (provider === 'openai') {
220
- if (body.messages && Array.isArray(body.messages)) {
221
- body.messages.forEach((msg) => {
222
- if (msg.role === 'system' || msg.role === 'developer') {
223
- info.systemPrompts.push({ content: msg.content });
224
- info.systemTokens += estimateTokens(msg.content);
225
- }
226
- else {
227
- info.messages.push({
228
- role: msg.role,
229
- content: typeof msg.content === 'string' ? msg.content : JSON.stringify(msg.content),
230
- tokens: estimateTokens(msg.content),
231
- });
232
- info.messagesTokens += estimateTokens(msg.content);
233
- }
234
- });
235
- }
236
- if (body.tools && Array.isArray(body.tools)) {
237
- info.tools = body.tools;
238
- info.toolsTokens = estimateTokens(JSON.stringify(body.tools));
239
- }
240
- else if (body.functions && Array.isArray(body.functions)) {
241
- info.tools = body.functions;
242
- info.toolsTokens = estimateTokens(JSON.stringify(body.functions));
243
- }
244
- }
245
- info.totalTokens = info.systemTokens + info.toolsTokens + info.messagesTokens;
246
- return info;
247
- }
248
- // Get context limit for model
249
- export function getContextLimit(model) {
250
- for (const [key, limit] of Object.entries(CONTEXT_LIMITS)) {
251
- if (model.includes(key))
252
- return limit;
253
- }
254
- return 128000; // default fallback
255
- }
256
- // Model pricing: [inputPerMTok, outputPerMTok] in USD
257
- // Keys ordered most-specific-first to avoid substring false matches (e.g. gpt-4o-mini before gpt-4o)
258
- export const MODEL_PRICING = {
259
- 'claude-opus-4': [15, 75],
260
- 'claude-sonnet-4': [3, 15],
261
- 'claude-haiku-4': [0.80, 4],
262
- 'claude-3-5-sonnet': [3, 15],
263
- 'claude-3-5-haiku': [0.80, 4],
264
- 'claude-3-opus': [15, 75],
265
- 'gpt-4o-mini': [0.15, 0.60],
266
- 'gpt-4o': [2.50, 10],
267
- 'gpt-4-turbo': [10, 30],
268
- 'gpt-4': [30, 60],
269
- 'o4-mini': [1.10, 4.40],
270
- 'o3-mini': [1.10, 4.40],
271
- 'o3': [10, 40],
272
- 'o1-mini': [3, 12],
273
- 'o1': [15, 60],
274
- };
275
- export function estimateCost(model, inputTokens, outputTokens) {
276
- for (const [key, [inp, out]] of Object.entries(MODEL_PRICING)) {
277
- if (model.includes(key)) {
278
- return Math.round((inputTokens * inp + outputTokens * out) / 1_000_000 * 1_000_000) / 1_000_000;
279
- }
280
- }
281
- return null;
282
- }
283
- // Extract source tag from URL path
284
- export function extractSource(pathname) {
285
- const match = pathname.match(/^\/([^/]+)(\/.*)?$/);
286
- if (match && match[2] && !API_PATH_SEGMENTS.has(match[1])) {
287
- // `decodeURIComponent` may introduce `/` via `%2f` (path traversal) or throw on bad encodings.
288
- // Treat suspicious/invalid tags as "no source tag" and route the request normally.
289
- let decoded = match[1];
290
- try {
291
- decoded = decodeURIComponent(match[1]);
292
- }
293
- catch {
294
- decoded = match[1];
295
- }
296
- if (decoded.includes('/') || decoded.includes('\\') || decoded.includes('..')) {
297
- return { source: null, cleanPath: pathname };
298
- }
299
- return { source: decoded, cleanPath: match[2] || '/' };
300
- }
301
- return { source: null, cleanPath: pathname };
302
- }
303
- // Determine target URL for a request
304
- export function resolveTargetUrl(parsedUrl, headers, upstreams) {
305
- const provider = detectProvider(parsedUrl.pathname, headers);
306
- const search = parsedUrl.search || '';
307
- let targetUrl = headers['x-target-url'];
308
- if (!targetUrl) {
309
- if (provider === 'chatgpt') {
310
- targetUrl = upstreams.chatgpt + parsedUrl.pathname + search;
311
- }
312
- else if (provider === 'anthropic') {
313
- targetUrl = upstreams.anthropic + parsedUrl.pathname + search;
314
- }
315
- else {
316
- targetUrl = upstreams.openai + parsedUrl.pathname + search;
317
- }
318
- }
319
- else if (!targetUrl.startsWith('http')) {
320
- targetUrl = targetUrl + parsedUrl.pathname + search;
321
- }
322
- return { targetUrl, provider };
323
- }
324
- // Extract readable text from message content, stripping JSON wrappers and system-reminder blocks
325
- export function extractReadableText(content) {
326
- if (!content)
327
- return null;
328
- let text = content;
329
- try {
330
- const parsed = JSON.parse(text);
331
- if (Array.isArray(parsed)) {
332
- const textBlock = parsed.find((b) => (b.type === 'text' && b.text && !b.text.startsWith('<system-reminder>'))
333
- || (b.type === 'input_text' && b.text && !b.text.startsWith('#') && !b.text.startsWith('<environment')));
334
- if (textBlock)
335
- text = textBlock.text;
336
- }
337
- }
338
- catch { }
339
- text = text.replace(/\s+/g, ' ').trim();
340
- return text || null;
341
- }
342
- // Extract working directory from system prompt or messages
343
- export function extractWorkingDirectory(contextInfo) {
344
- const allText = [
345
- ...(contextInfo.systemPrompts || []).map(sp => sp.content),
346
- ...(contextInfo.messages || []).filter(m => m.role === 'user').map(m => m.content),
347
- ].join('\n');
348
- // Claude Code: "Primary working directory: /path/to/dir"
349
- let match = allText.match(/[Pp]rimary working directory[:\s]+[`]?([/~][^\s`\n]+)/);
350
- if (match)
351
- return match[1];
352
- // Codex: "<cwd>/path/to/dir</cwd>"
353
- match = allText.match(/<cwd>([^<]+)<\/cwd>/);
354
- if (match)
355
- return match[1];
356
- // Generic: "working directory is /path" or "cwd: /path"
357
- match = allText.match(/working directory (?:is |= ?)[`"]?([/~][^\s`"'\n]+)/i);
358
- if (match)
359
- return match[1];
360
- match = allText.match(/\bcwd[:\s]+[`"]?([/~][^\s`"'\n]+)/);
361
- if (match)
362
- return match[1];
363
- return null;
364
- }
365
- // Extract the actual user prompt from a Responses API input array
366
- export function extractUserPrompt(messages) {
367
- for (const m of messages) {
368
- if (m.role !== 'user' || !m.content)
369
- continue;
370
- try {
371
- const parsed = JSON.parse(m.content);
372
- if (Array.isArray(parsed) && parsed[0] && parsed[0].type === 'input_text') {
373
- const text = parsed[0].text || '';
374
- if (text.startsWith('#') || text.startsWith('<environment'))
375
- continue;
376
- return m.content;
377
- }
378
- }
379
- catch { }
380
- }
381
- return null;
382
- }
383
- // Extract session ID from Anthropic metadata.user_id
384
- export function extractSessionId(rawBody) {
385
- const userId = rawBody?.metadata?.user_id;
386
- if (!userId)
387
- return null;
388
- const match = userId.match(/session_([a-f0-9-]+)/);
389
- return match ? match[0] : null;
390
- }
391
- // Compute a sub-key to distinguish agents within a session
392
- export function computeAgentKey(contextInfo) {
393
- const userMsgs = (contextInfo.messages || []).filter(m => m.role === 'user');
394
- let realText = '';
395
- for (const msg of userMsgs) {
396
- const t = extractReadableText(msg.content);
397
- if (t) {
398
- realText = t;
399
- break;
400
- }
401
- }
402
- if (!realText)
403
- return null;
404
- return createHash('sha256').update(realText).digest('hex').slice(0, 12);
405
- }
406
- // Compute fingerprint for conversation grouping
407
- export function computeFingerprint(contextInfo, rawBody, responseIdToConvo) {
408
- // Anthropic session ID = one group per CLI session
409
- const sessionId = extractSessionId(rawBody);
410
- if (sessionId) {
411
- return createHash('sha256').update(sessionId).digest('hex').slice(0, 16);
412
- }
413
- // Responses API chaining: if previous_response_id exists, reuse that conversation
414
- if (rawBody && rawBody.previous_response_id && responseIdToConvo) {
415
- const existing = responseIdToConvo.get(rawBody.previous_response_id);
416
- if (existing)
417
- return existing;
418
- }
419
- const userMsgs = (contextInfo.messages || []).filter(m => m.role === 'user');
420
- let promptText;
421
- if (contextInfo.apiFormat === 'responses' && userMsgs.length > 1) {
422
- promptText = extractUserPrompt(userMsgs) || '';
423
- }
424
- else {
425
- const firstUser = userMsgs[0];
426
- promptText = firstUser ? firstUser.content : '';
427
- }
428
- const systemText = (contextInfo.systemPrompts || []).map(sp => sp.content).join('\n');
429
- if (!systemText && !promptText)
430
- return null;
431
- return createHash('sha256').update(systemText + '\0' + promptText).digest('hex').slice(0, 16);
432
- }
433
- // Extract a readable label for a conversation
434
- export function extractConversationLabel(contextInfo) {
435
- const userMsgs = (contextInfo.messages || []).filter(m => m.role === 'user');
436
- if (contextInfo.apiFormat === 'responses' && userMsgs.length > 1) {
437
- const prompt = extractUserPrompt(userMsgs);
438
- const text = extractReadableText(prompt);
439
- if (text)
440
- return text.length > 80 ? text.slice(0, 77) + '...' : text;
441
- }
442
- for (let i = userMsgs.length - 1; i >= 0; i--) {
443
- const text = extractReadableText(userMsgs[i].content);
444
- if (text)
445
- return text.length > 80 ? text.slice(0, 77) + '...' : text;
446
- }
447
- return 'Unnamed conversation';
448
- }
449
- // Auto-detect source tool from headers (primary) and system prompt (fallback)
450
- export function detectSource(contextInfo, source, headers) {
451
- if (source && source !== 'unknown')
452
- return source;
453
- // Primary: check request headers
454
- if (headers) {
455
- for (const sig of HEADER_SIGNATURES) {
456
- const val = headers[sig.header];
457
- if (!val)
458
- continue;
459
- if (sig.pattern instanceof RegExp ? sig.pattern.test(val) : val.includes(sig.pattern)) {
460
- return sig.source;
461
- }
462
- }
463
- }
464
- // Fallback: check system prompt content
465
- const systemText = (contextInfo.systemPrompts || []).map(sp => sp.content).join('\n');
466
- for (const sig of SOURCE_SIGNATURES) {
467
- if (systemText.includes(sig.pattern))
468
- return sig.source;
469
- }
470
- return source || 'unknown';
471
- }
1
+ /**
2
+ * Public "core" API for Context Lens.
3
+ *
4
+ * This is intentionally a thin facade: other parts of the codebase import from here,
5
+ * while implementations live in `src/core/*` to keep concerns separated.
6
+ */
7
+ export { computeAgentKey, computeFingerprint, extractConversationLabel, extractReadableText, extractSessionId, extractToolsUsed, extractUserPrompt, extractWorkingDirectory, } from "./core/conversation.js";
8
+ export { computeHealthScore } from "./core/health.js";
9
+ export { estimateCost, getContextLimit, } from "./core/models.js";
10
+ export { parseContextInfo } from "./core/parse.js";
11
+ export { detectApiFormat, detectProvider, extractSource, resolveTargetUrl, } from "./core/routing.js";
12
+ export { scanSecurity } from "./core/security.js";
13
+ export { detectSource } from "./core/source.js";
14
+ export { estimateTokens, rescaleContextTokens } from "./core/tokens.js";
472
15
  //# sourceMappingURL=core.js.map
package/dist/core.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"core.js","sourceRoot":"","sources":["../src/core.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"core.js","sourceRoot":"","sources":["../src/core.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,EACL,eAAe,EACf,kBAAkB,EAClB,wBAAwB,EACxB,mBAAmB,EACnB,gBAAgB,EAChB,gBAAgB,EAChB,iBAAiB,EACjB,uBAAuB,GACxB,MAAM,wBAAwB,CAAC;AAEhC,OAAO,EAAE,kBAAkB,EAAE,MAAM,kBAAkB,CAAC;AACtD,OAAO,EACL,YAAY,EACZ,eAAe,GAChB,MAAM,kBAAkB,CAAC;AAC1B,OAAO,EAAE,gBAAgB,EAAE,MAAM,iBAAiB,CAAC;AACnD,OAAO,EACL,eAAe,EACf,cAAc,EACd,aAAa,EACb,gBAAgB,GACjB,MAAM,mBAAmB,CAAC;AAC3B,OAAO,EAAE,YAAY,EAAE,MAAM,oBAAoB,CAAC;AAClD,OAAO,EAAE,YAAY,EAAE,MAAM,kBAAkB,CAAC;AAChD,OAAO,EAAE,cAAc,EAAE,oBAAoB,EAAE,MAAM,kBAAkB,CAAC"}
@@ -0,0 +1,25 @@
1
+ /**
2
+ * Shared header redaction utilities.
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".
8
+ */
9
+ /** Case-insensitive set of header names that must never be persisted/exported. */
10
+ export declare const SENSITIVE_HEADERS: Set<string>;
11
+ /**
12
+ * Remove sensitive headers from a header map.
13
+ *
14
+ * @param headers - Header map (string -> string)
15
+ * @returns A new object with sensitive headers removed.
16
+ */
17
+ 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
+ //# sourceMappingURL=headers.d.ts.map
@@ -0,0 +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"}