@codemieai/code 0.0.10 → 0.0.12
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 +23 -98
- package/dist/agents/codemie-code/agent.d.ts.map +1 -1
- package/dist/agents/codemie-code/agent.js +35 -4
- package/dist/agents/codemie-code/agent.js.map +1 -1
- package/dist/agents/codemie-code/tools/index.d.ts.map +1 -1
- package/dist/agents/codemie-code/tools/index.js +5 -3
- package/dist/agents/codemie-code/tools/index.js.map +1 -1
- package/dist/agents/core/AgentCLI.d.ts.map +1 -1
- package/dist/agents/core/AgentCLI.js +57 -11
- package/dist/agents/core/AgentCLI.js.map +1 -1
- package/dist/agents/core/BaseAgentAdapter.d.ts +4 -4
- package/dist/agents/core/BaseAgentAdapter.d.ts.map +1 -1
- package/dist/agents/core/BaseAgentAdapter.js +31 -23
- package/dist/agents/core/BaseAgentAdapter.js.map +1 -1
- package/dist/agents/plugins/codemie-code.plugin.js +1 -1
- package/dist/agents/plugins/codemie-code.plugin.js.map +1 -1
- package/dist/agents/plugins/gemini.plugin.js +1 -1
- package/dist/agents/plugins/gemini.plugin.js.map +1 -1
- package/dist/analytics/collector.d.ts +46 -0
- package/dist/analytics/collector.d.ts.map +1 -0
- package/dist/analytics/collector.js +83 -0
- package/dist/analytics/collector.js.map +1 -0
- package/dist/analytics/config.d.ts +14 -0
- package/dist/analytics/config.d.ts.map +1 -0
- package/dist/analytics/config.js +46 -0
- package/dist/analytics/config.js.map +1 -0
- package/dist/analytics/index.d.ts +108 -0
- package/dist/analytics/index.d.ts.map +1 -0
- package/dist/analytics/index.js +322 -0
- package/dist/analytics/index.js.map +1 -0
- package/dist/analytics/plugins/api-metrics.plugin.d.ts +23 -0
- package/dist/analytics/plugins/api-metrics.plugin.d.ts.map +1 -0
- package/dist/analytics/plugins/api-metrics.plugin.js +113 -0
- package/dist/analytics/plugins/api-metrics.plugin.js.map +1 -0
- package/dist/analytics/plugins/index.d.ts +15 -0
- package/dist/analytics/plugins/index.d.ts.map +1 -0
- package/dist/analytics/plugins/index.js +15 -0
- package/dist/analytics/plugins/index.js.map +1 -0
- package/dist/analytics/plugins/model-metrics.plugin.d.ts +36 -0
- package/dist/analytics/plugins/model-metrics.plugin.d.ts.map +1 -0
- package/dist/analytics/plugins/model-metrics.plugin.js +115 -0
- package/dist/analytics/plugins/model-metrics.plugin.js.map +1 -0
- package/dist/analytics/plugins/provider-metrics.plugin.d.ts +38 -0
- package/dist/analytics/plugins/provider-metrics.plugin.d.ts.map +1 -0
- package/dist/analytics/plugins/provider-metrics.plugin.js +138 -0
- package/dist/analytics/plugins/provider-metrics.plugin.js.map +1 -0
- package/dist/analytics/plugins/types.d.ts +63 -0
- package/dist/analytics/plugins/types.d.ts.map +1 -0
- package/dist/analytics/plugins/types.js +54 -0
- package/dist/analytics/plugins/types.js.map +1 -0
- package/dist/analytics/privacy.d.ts +10 -0
- package/dist/analytics/privacy.d.ts.map +1 -0
- package/dist/analytics/privacy.js +20 -0
- package/dist/analytics/privacy.js.map +1 -0
- package/dist/analytics/session.d.ts +56 -0
- package/dist/analytics/session.d.ts.map +1 -0
- package/dist/analytics/session.js +95 -0
- package/dist/analytics/session.js.map +1 -0
- package/dist/analytics/types.d.ts +104 -0
- package/dist/analytics/types.d.ts.map +1 -0
- package/dist/analytics/types.js +15 -0
- package/dist/analytics/types.js.map +1 -0
- package/dist/analytics/writer.d.ts +18 -0
- package/dist/analytics/writer.d.ts.map +1 -0
- package/dist/analytics/writer.js +44 -0
- package/dist/analytics/writer.js.map +1 -0
- package/dist/cli/commands/analytics.d.ts +3 -0
- package/dist/cli/commands/analytics.d.ts.map +1 -0
- package/dist/cli/commands/analytics.js +319 -0
- package/dist/cli/commands/analytics.js.map +1 -0
- package/dist/cli/commands/config.d.ts.map +1 -1
- package/dist/cli/commands/config.js +14 -0
- package/dist/cli/commands/config.js.map +1 -1
- package/dist/cli/commands/profile.d.ts.map +1 -1
- package/dist/cli/commands/profile.js +41 -0
- package/dist/cli/commands/profile.js.map +1 -1
- package/dist/cli/index.js +2 -0
- package/dist/cli/index.js.map +1 -1
- package/dist/env/types.d.ts +2 -0
- package/dist/env/types.d.ts.map +1 -1
- package/dist/env/types.js.map +1 -1
- package/dist/utils/analytics-reader.d.ts +117 -0
- package/dist/utils/analytics-reader.d.ts.map +1 -0
- package/dist/utils/analytics-reader.js +421 -0
- package/dist/utils/analytics-reader.js.map +1 -0
- package/dist/utils/codemie-integration-validator.d.ts.map +1 -1
- package/dist/utils/codemie-integration-validator.js +3 -16
- package/dist/utils/codemie-integration-validator.js.map +1 -1
- package/dist/utils/codemie-proxy.d.ts +80 -0
- package/dist/utils/codemie-proxy.d.ts.map +1 -0
- package/dist/utils/codemie-proxy.js +335 -0
- package/dist/utils/codemie-proxy.js.map +1 -0
- package/dist/utils/config-loader.d.ts +7 -0
- package/dist/utils/config-loader.d.ts.map +1 -1
- package/dist/utils/config-loader.js +18 -0
- package/dist/utils/config-loader.js.map +1 -1
- package/dist/utils/date-formatter.d.ts +88 -0
- package/dist/utils/date-formatter.d.ts.map +1 -0
- package/dist/utils/date-formatter.js +133 -0
- package/dist/utils/date-formatter.js.map +1 -0
- package/dist/utils/installation-id.d.ts +10 -0
- package/dist/utils/installation-id.d.ts.map +1 -0
- package/dist/utils/installation-id.js +30 -0
- package/dist/utils/installation-id.js.map +1 -0
- package/dist/utils/logger.d.ts +1 -15
- package/dist/utils/logger.d.ts.map +1 -1
- package/dist/utils/logger.js +5 -86
- package/dist/utils/logger.js.map +1 -1
- package/dist/utils/proxy/errors.d.ts +45 -0
- package/dist/utils/proxy/errors.d.ts.map +1 -0
- package/dist/utils/proxy/errors.js +103 -0
- package/dist/utils/proxy/errors.js.map +1 -0
- package/dist/utils/proxy/http-client.d.ts +46 -0
- package/dist/utils/proxy/http-client.d.ts.map +1 -0
- package/dist/utils/proxy/http-client.js +133 -0
- package/dist/utils/proxy/http-client.js.map +1 -0
- package/dist/utils/proxy/interceptors.d.ts +69 -0
- package/dist/utils/proxy/interceptors.d.ts.map +1 -0
- package/dist/utils/proxy/interceptors.js +319 -0
- package/dist/utils/proxy/interceptors.js.map +1 -0
- package/dist/utils/proxy/types.d.ts +45 -0
- package/dist/utils/proxy/types.d.ts.map +1 -0
- package/dist/utils/proxy/types.js +7 -0
- package/dist/utils/proxy/types.js.map +1 -0
- package/package.json +46 -5
- package/dist/utils/sso-gateway.d.ts +0 -75
- package/dist/utils/sso-gateway.d.ts.map +0 -1
- package/dist/utils/sso-gateway.js +0 -453
- package/dist/utils/sso-gateway.js.map +0 -1
|
@@ -0,0 +1,133 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Simple Streaming HTTP Client
|
|
3
|
+
*
|
|
4
|
+
* KISS: Does one thing well - forwards HTTP requests with streaming.
|
|
5
|
+
* Memory efficient: Returns streams directly, no buffering.
|
|
6
|
+
*/
|
|
7
|
+
import { pipeline } from 'stream/promises';
|
|
8
|
+
import https from 'https';
|
|
9
|
+
import http from 'http';
|
|
10
|
+
import { TimeoutError, NetworkError } from './errors.js';
|
|
11
|
+
import { logger } from '../logger.js';
|
|
12
|
+
/**
|
|
13
|
+
* Simple streaming HTTP client for proxy forwarding
|
|
14
|
+
*/
|
|
15
|
+
export class ProxyHTTPClient {
|
|
16
|
+
httpsAgent;
|
|
17
|
+
httpAgent;
|
|
18
|
+
timeout;
|
|
19
|
+
constructor(options = {}) {
|
|
20
|
+
this.timeout = options.timeout || 300000; // 5 minutes default
|
|
21
|
+
// Connection pooling with keep-alive
|
|
22
|
+
const agentOptions = {
|
|
23
|
+
rejectUnauthorized: options.rejectUnauthorized ?? false,
|
|
24
|
+
keepAlive: true,
|
|
25
|
+
maxSockets: 50,
|
|
26
|
+
timeout: 30000 // Connection timeout
|
|
27
|
+
};
|
|
28
|
+
this.httpsAgent = new https.Agent(agentOptions);
|
|
29
|
+
this.httpAgent = new http.Agent({
|
|
30
|
+
keepAlive: true,
|
|
31
|
+
maxSockets: 50,
|
|
32
|
+
timeout: 30000
|
|
33
|
+
});
|
|
34
|
+
}
|
|
35
|
+
/**
|
|
36
|
+
* Forward request with streaming - no buffering
|
|
37
|
+
* Returns response stream directly for memory efficiency
|
|
38
|
+
*/
|
|
39
|
+
async forward(url, options) {
|
|
40
|
+
const protocol = url.protocol === 'https:' ? https : http;
|
|
41
|
+
const agent = url.protocol === 'https:' ? this.httpsAgent : this.httpAgent;
|
|
42
|
+
return new Promise((resolve, reject) => {
|
|
43
|
+
const requestOptions = {
|
|
44
|
+
hostname: url.hostname,
|
|
45
|
+
port: url.port || (url.protocol === 'https:' ? 443 : 80),
|
|
46
|
+
path: url.pathname + url.search,
|
|
47
|
+
method: options.method,
|
|
48
|
+
headers: options.headers,
|
|
49
|
+
agent,
|
|
50
|
+
timeout: this.timeout
|
|
51
|
+
};
|
|
52
|
+
const req = protocol.request(requestOptions, (res) => {
|
|
53
|
+
resolve(res);
|
|
54
|
+
});
|
|
55
|
+
req.on('error', (error) => {
|
|
56
|
+
// Handle client disconnection (normal behavior when user closes agent)
|
|
57
|
+
if (error.message === 'aborted' || error.code === 'ECONNABORTED' || error.code === 'ERR_STREAM_PREMATURE_CLOSE') {
|
|
58
|
+
// Silent rejection for normal client disconnect - don't log as error
|
|
59
|
+
const abortError = new Error('Client disconnected');
|
|
60
|
+
abortError.isAborted = true;
|
|
61
|
+
reject(abortError);
|
|
62
|
+
return;
|
|
63
|
+
}
|
|
64
|
+
// Convert to proxy error types
|
|
65
|
+
if (error.code === 'ECONNREFUSED' || error.code === 'ENOTFOUND' || error.code === 'ECONNRESET') {
|
|
66
|
+
reject(new NetworkError(`Cannot connect to upstream: ${error.message}`, {
|
|
67
|
+
errorCode: error.code,
|
|
68
|
+
hostname: url.hostname
|
|
69
|
+
}));
|
|
70
|
+
}
|
|
71
|
+
else {
|
|
72
|
+
reject(error);
|
|
73
|
+
}
|
|
74
|
+
});
|
|
75
|
+
req.on('timeout', () => {
|
|
76
|
+
req.destroy();
|
|
77
|
+
reject(new TimeoutError(`Request timeout after ${this.timeout}ms`, {
|
|
78
|
+
timeout: this.timeout,
|
|
79
|
+
url: url.toString()
|
|
80
|
+
}));
|
|
81
|
+
});
|
|
82
|
+
// Write body for POST/PUT/PATCH requests
|
|
83
|
+
if (options.body) {
|
|
84
|
+
req.write(options.body);
|
|
85
|
+
}
|
|
86
|
+
req.end();
|
|
87
|
+
});
|
|
88
|
+
}
|
|
89
|
+
/**
|
|
90
|
+
* Stream response to client with backpressure handling
|
|
91
|
+
* Uses Node.js pipeline for automatic backpressure
|
|
92
|
+
*/
|
|
93
|
+
async pipeResponse(upstream, downstream, skipHeaders = ['transfer-encoding', 'connection']) {
|
|
94
|
+
// Copy status code
|
|
95
|
+
downstream.statusCode = upstream.statusCode || 200;
|
|
96
|
+
// Copy headers (skip problematic ones)
|
|
97
|
+
for (const [key, value] of Object.entries(upstream.headers)) {
|
|
98
|
+
if (!skipHeaders.includes(key.toLowerCase()) && value !== undefined) {
|
|
99
|
+
downstream.setHeader(key, value);
|
|
100
|
+
}
|
|
101
|
+
}
|
|
102
|
+
// Stream with automatic backpressure handling
|
|
103
|
+
try {
|
|
104
|
+
await pipeline(upstream, downstream);
|
|
105
|
+
logger.debug('[http-client] Response streamed successfully');
|
|
106
|
+
}
|
|
107
|
+
catch (error) {
|
|
108
|
+
// Pipeline handles cleanup automatically
|
|
109
|
+
logger.error('[http-client] Stream pipeline error:', error);
|
|
110
|
+
throw error;
|
|
111
|
+
}
|
|
112
|
+
}
|
|
113
|
+
/**
|
|
114
|
+
* Read response body into buffer
|
|
115
|
+
* Only use when body is needed (e.g., for analytics)
|
|
116
|
+
* WARNING: Buffers entire response in memory!
|
|
117
|
+
*/
|
|
118
|
+
async readResponseBody(response) {
|
|
119
|
+
const chunks = [];
|
|
120
|
+
for await (const chunk of response) {
|
|
121
|
+
chunks.push(Buffer.from(chunk));
|
|
122
|
+
}
|
|
123
|
+
return Buffer.concat(chunks);
|
|
124
|
+
}
|
|
125
|
+
/**
|
|
126
|
+
* Close HTTP client and cleanup agents
|
|
127
|
+
*/
|
|
128
|
+
close() {
|
|
129
|
+
this.httpsAgent.destroy();
|
|
130
|
+
this.httpAgent.destroy();
|
|
131
|
+
}
|
|
132
|
+
}
|
|
133
|
+
//# sourceMappingURL=http-client.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"http-client.js","sourceRoot":"","sources":["../../../src/utils/proxy/http-client.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,69 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Proxy Interceptor System
|
|
3
|
+
*
|
|
4
|
+
* Plugin-based architecture for extending proxy functionality.
|
|
5
|
+
* SOLID: Open/Closed - add features without modifying core proxy.
|
|
6
|
+
*/
|
|
7
|
+
import { ProxyContext, UpstreamResponse } from './types.js';
|
|
8
|
+
import { SSOCredentials } from '../../types/sso.js';
|
|
9
|
+
/**
|
|
10
|
+
* Interceptor interface - Optional hooks for request/response/error
|
|
11
|
+
* Interface Segregation: Implement only what you need
|
|
12
|
+
*/
|
|
13
|
+
export interface ProxyInterceptor {
|
|
14
|
+
name: string;
|
|
15
|
+
/** Called before forwarding request to upstream */
|
|
16
|
+
onRequest?(context: ProxyContext): Promise<void>;
|
|
17
|
+
/** Called after receiving response from upstream */
|
|
18
|
+
onResponse?(context: ProxyContext, response: UpstreamResponse): Promise<void>;
|
|
19
|
+
/** Called on any error */
|
|
20
|
+
onError?(context: ProxyContext, error: Error): Promise<void>;
|
|
21
|
+
}
|
|
22
|
+
/**
|
|
23
|
+
* SSO Authentication Interceptor
|
|
24
|
+
* Injects authentication cookies into requests
|
|
25
|
+
*/
|
|
26
|
+
export declare class SSOAuthInterceptor implements ProxyInterceptor {
|
|
27
|
+
private credentials;
|
|
28
|
+
name: string;
|
|
29
|
+
constructor(credentials: SSOCredentials);
|
|
30
|
+
onRequest(context: ProxyContext): Promise<void>;
|
|
31
|
+
}
|
|
32
|
+
/**
|
|
33
|
+
* Header Injection Interceptor
|
|
34
|
+
* Adds CodeMie-specific headers
|
|
35
|
+
*/
|
|
36
|
+
export declare class HeaderInjectionInterceptor implements ProxyInterceptor {
|
|
37
|
+
private config;
|
|
38
|
+
name: string;
|
|
39
|
+
constructor(config: {
|
|
40
|
+
sessionId: string;
|
|
41
|
+
provider?: string;
|
|
42
|
+
integrationId?: string;
|
|
43
|
+
model?: string;
|
|
44
|
+
timeout?: number;
|
|
45
|
+
clientType?: string;
|
|
46
|
+
});
|
|
47
|
+
onRequest(context: ProxyContext): Promise<void>;
|
|
48
|
+
}
|
|
49
|
+
/**
|
|
50
|
+
* Analytics Tracking Interceptor
|
|
51
|
+
* Uses existing Analytics system - DRY principle
|
|
52
|
+
*/
|
|
53
|
+
export declare class AnalyticsInterceptor implements ProxyInterceptor {
|
|
54
|
+
name: string;
|
|
55
|
+
onRequest(context: ProxyContext): Promise<void>;
|
|
56
|
+
onResponse(context: ProxyContext, response: UpstreamResponse): Promise<void>;
|
|
57
|
+
onError(context: ProxyContext, error: Error): Promise<void>;
|
|
58
|
+
/**
|
|
59
|
+
* Extract response content from various API formats
|
|
60
|
+
* Reuses logic from original proxy
|
|
61
|
+
*/
|
|
62
|
+
private extractResponseContent;
|
|
63
|
+
/**
|
|
64
|
+
* Extract content from SSE stream
|
|
65
|
+
* Simplified from original - focuses on content extraction
|
|
66
|
+
*/
|
|
67
|
+
private extractSSEContent;
|
|
68
|
+
}
|
|
69
|
+
//# sourceMappingURL=interceptors.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"interceptors.d.ts","sourceRoot":"","sources":["../../../src/utils/proxy/interceptors.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,EAAE,YAAY,EAAE,gBAAgB,EAAE,MAAM,YAAY,CAAC;AAC5D,OAAO,EAAE,cAAc,EAAE,MAAM,oBAAoB,CAAC;AAIpD;;;GAGG;AACH,MAAM,WAAW,gBAAgB;IAC/B,IAAI,EAAE,MAAM,CAAC;IAEb,mDAAmD;IACnD,SAAS,CAAC,CAAC,OAAO,EAAE,YAAY,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IAEjD,oDAAoD;IACpD,UAAU,CAAC,CAAC,OAAO,EAAE,YAAY,EAAE,QAAQ,EAAE,gBAAgB,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IAE9E,0BAA0B;IAC1B,OAAO,CAAC,CAAC,OAAO,EAAE,YAAY,EAAE,KAAK,EAAE,KAAK,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;CAC9D;AAED;;;GAGG;AACH,qBAAa,kBAAmB,YAAW,gBAAgB;IAG7C,OAAO,CAAC,WAAW;IAF/B,IAAI,SAAc;gBAEE,WAAW,EAAE,cAAc;IAEzC,SAAS,CAAC,OAAO,EAAE,YAAY,GAAG,OAAO,CAAC,IAAI,CAAC;CAUtD;AAED;;;GAGG;AACH,qBAAa,0BAA2B,YAAW,gBAAgB;IAI/D,OAAO,CAAC,MAAM;IAHhB,IAAI,SAAsB;gBAGhB,MAAM,EAAE;QACd,SAAS,EAAE,MAAM,CAAC;QAClB,QAAQ,CAAC,EAAE,MAAM,CAAC;QAClB,aAAa,CAAC,EAAE,MAAM,CAAC;QACvB,KAAK,CAAC,EAAE,MAAM,CAAC;QACf,OAAO,CAAC,EAAE,MAAM,CAAC;QACjB,UAAU,CAAC,EAAE,MAAM,CAAC;KACrB;IAGG,SAAS,CAAC,OAAO,EAAE,YAAY,GAAG,OAAO,CAAC,IAAI,CAAC;CA6BtD;AAED;;;GAGG;AACH,qBAAa,oBAAqB,YAAW,gBAAgB;IAC3D,IAAI,SAAe;IAEb,SAAS,CAAC,OAAO,EAAE,YAAY,GAAG,OAAO,CAAC,IAAI,CAAC;IA6D/C,UAAU,CAAC,OAAO,EAAE,YAAY,EAAE,QAAQ,EAAE,gBAAgB,GAAG,OAAO,CAAC,IAAI,CAAC;IAoF5E,OAAO,CAAC,OAAO,EAAE,YAAY,EAAE,KAAK,EAAE,KAAK,GAAG,OAAO,CAAC,IAAI,CAAC;IAoBjE;;;OAGG;YACW,sBAAsB;IA2CpC;;;OAGG;YACW,iBAAiB;CAoDhC"}
|
|
@@ -0,0 +1,319 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Proxy Interceptor System
|
|
3
|
+
*
|
|
4
|
+
* Plugin-based architecture for extending proxy functionality.
|
|
5
|
+
* SOLID: Open/Closed - add features without modifying core proxy.
|
|
6
|
+
*/
|
|
7
|
+
import { getAnalytics } from '../../analytics/index.js';
|
|
8
|
+
import { logger } from '../logger.js';
|
|
9
|
+
/**
|
|
10
|
+
* SSO Authentication Interceptor
|
|
11
|
+
* Injects authentication cookies into requests
|
|
12
|
+
*/
|
|
13
|
+
export class SSOAuthInterceptor {
|
|
14
|
+
credentials;
|
|
15
|
+
name = 'sso-auth';
|
|
16
|
+
constructor(credentials) {
|
|
17
|
+
this.credentials = credentials;
|
|
18
|
+
}
|
|
19
|
+
async onRequest(context) {
|
|
20
|
+
// Inject SSO cookies
|
|
21
|
+
const cookieHeader = Object.entries(this.credentials.cookies)
|
|
22
|
+
.map(([key, value]) => `${key}=${value}`)
|
|
23
|
+
.join('; ');
|
|
24
|
+
context.headers['Cookie'] = cookieHeader;
|
|
25
|
+
logger.debug(`[${this.name}] Injected SSO cookies`);
|
|
26
|
+
}
|
|
27
|
+
}
|
|
28
|
+
/**
|
|
29
|
+
* Header Injection Interceptor
|
|
30
|
+
* Adds CodeMie-specific headers
|
|
31
|
+
*/
|
|
32
|
+
export class HeaderInjectionInterceptor {
|
|
33
|
+
config;
|
|
34
|
+
name = 'header-injection';
|
|
35
|
+
constructor(config) {
|
|
36
|
+
this.config = config;
|
|
37
|
+
}
|
|
38
|
+
async onRequest(context) {
|
|
39
|
+
// Request ID header
|
|
40
|
+
context.headers['X-CodeMie-Request-ID'] = context.requestId;
|
|
41
|
+
// Session ID header
|
|
42
|
+
context.headers['X-CodeMie-Session-ID'] = this.config.sessionId;
|
|
43
|
+
// Add integration header only for ai-run-sso provider
|
|
44
|
+
if (this.config.provider === 'ai-run-sso' && this.config.integrationId) {
|
|
45
|
+
context.headers['X-CodeMie-Integration'] = this.config.integrationId;
|
|
46
|
+
}
|
|
47
|
+
// Add model header if configured (for all providers)
|
|
48
|
+
if (this.config.model) {
|
|
49
|
+
context.headers['X-CodeMie-CLI-Model'] = this.config.model;
|
|
50
|
+
}
|
|
51
|
+
// Add timeout header if configured (for all providers)
|
|
52
|
+
if (this.config.timeout) {
|
|
53
|
+
context.headers['X-CodeMie-CLI-Timeout'] = String(this.config.timeout);
|
|
54
|
+
}
|
|
55
|
+
// Add client type header
|
|
56
|
+
if (this.config.clientType) {
|
|
57
|
+
context.headers['X-CodeMie-Client'] = this.config.clientType;
|
|
58
|
+
}
|
|
59
|
+
logger.debug(`[${this.name}] Injected CodeMie headers`);
|
|
60
|
+
}
|
|
61
|
+
}
|
|
62
|
+
/**
|
|
63
|
+
* Analytics Tracking Interceptor
|
|
64
|
+
* Uses existing Analytics system - DRY principle
|
|
65
|
+
*/
|
|
66
|
+
export class AnalyticsInterceptor {
|
|
67
|
+
name = 'analytics';
|
|
68
|
+
async onRequest(context) {
|
|
69
|
+
try {
|
|
70
|
+
const analytics = getAnalytics();
|
|
71
|
+
if (!analytics.isEnabled) {
|
|
72
|
+
return;
|
|
73
|
+
}
|
|
74
|
+
// Track request start time
|
|
75
|
+
context.requestStartTime = Date.now();
|
|
76
|
+
// Parse request body for analytics
|
|
77
|
+
let requestBodyParsed = null;
|
|
78
|
+
try {
|
|
79
|
+
if (context.requestBody) {
|
|
80
|
+
requestBodyParsed = JSON.parse(context.requestBody);
|
|
81
|
+
}
|
|
82
|
+
}
|
|
83
|
+
catch {
|
|
84
|
+
// Not JSON, skip parsing
|
|
85
|
+
}
|
|
86
|
+
// Truncate large request bodies
|
|
87
|
+
const MAX_BODY_SIZE = 100000; // 100KB limit
|
|
88
|
+
let requestBodyToLog = null;
|
|
89
|
+
let requestBodyTruncated = false;
|
|
90
|
+
const originalRequestBodySize = context.requestBody?.length || 0;
|
|
91
|
+
if (requestBodyParsed) {
|
|
92
|
+
const bodyStr = JSON.stringify(requestBodyParsed);
|
|
93
|
+
if (bodyStr.length > MAX_BODY_SIZE) {
|
|
94
|
+
requestBodyToLog = {
|
|
95
|
+
model: requestBodyParsed.model,
|
|
96
|
+
temperature: requestBodyParsed.temperature,
|
|
97
|
+
max_tokens: requestBodyParsed.max_tokens,
|
|
98
|
+
messageCount: requestBodyParsed.messages?.length || 0,
|
|
99
|
+
contentTruncated: '[Content truncated - exceeded 100KB limit]',
|
|
100
|
+
originalSize: bodyStr.length
|
|
101
|
+
};
|
|
102
|
+
requestBodyTruncated = true;
|
|
103
|
+
}
|
|
104
|
+
else {
|
|
105
|
+
requestBodyToLog = requestBodyParsed;
|
|
106
|
+
}
|
|
107
|
+
}
|
|
108
|
+
await analytics.track('api_request', {
|
|
109
|
+
requestId: context.requestId,
|
|
110
|
+
method: context.method,
|
|
111
|
+
url: context.url,
|
|
112
|
+
targetUrl: context.targetUrl,
|
|
113
|
+
hasBody: !!context.requestBody,
|
|
114
|
+
bodySize: originalRequestBodySize,
|
|
115
|
+
bodyTruncated: requestBodyTruncated,
|
|
116
|
+
...(requestBodyToLog ? { requestBody: requestBodyToLog } : {})
|
|
117
|
+
});
|
|
118
|
+
logger.debug(`[${this.name}] Tracked API request`);
|
|
119
|
+
}
|
|
120
|
+
catch (error) {
|
|
121
|
+
// Silently fail - analytics should not block requests
|
|
122
|
+
logger.error(`[${this.name}] Error tracking request:`, error);
|
|
123
|
+
}
|
|
124
|
+
}
|
|
125
|
+
async onResponse(context, response) {
|
|
126
|
+
try {
|
|
127
|
+
const analytics = getAnalytics();
|
|
128
|
+
if (!analytics.isEnabled) {
|
|
129
|
+
return;
|
|
130
|
+
}
|
|
131
|
+
const latency = Date.now() - context.requestStartTime;
|
|
132
|
+
let responseBodyParsed = null;
|
|
133
|
+
const MAX_BODY_SIZE = 10000; // 10KB limit
|
|
134
|
+
if (response.body) {
|
|
135
|
+
const contentType = response.headers['content-type'] || '';
|
|
136
|
+
const isStreaming = contentType.includes('text/event-stream');
|
|
137
|
+
if (isStreaming) {
|
|
138
|
+
// Store SSE text for response extraction
|
|
139
|
+
const sseText = response.body.toString('utf-8');
|
|
140
|
+
responseBodyParsed = { _sseContent: sseText, streaming: true };
|
|
141
|
+
}
|
|
142
|
+
else {
|
|
143
|
+
// Standard JSON response
|
|
144
|
+
try {
|
|
145
|
+
responseBodyParsed = JSON.parse(response.body.toString('utf-8'));
|
|
146
|
+
}
|
|
147
|
+
catch {
|
|
148
|
+
// Not JSON, ignore
|
|
149
|
+
}
|
|
150
|
+
}
|
|
151
|
+
}
|
|
152
|
+
// Truncate response body if needed
|
|
153
|
+
let responseBodyToLog = null;
|
|
154
|
+
let bodyTruncated = false;
|
|
155
|
+
const originalBodySize = response.body?.length || 0;
|
|
156
|
+
if (responseBodyParsed) {
|
|
157
|
+
const bodyStr = JSON.stringify(responseBodyParsed);
|
|
158
|
+
if (bodyStr.length > MAX_BODY_SIZE) {
|
|
159
|
+
responseBodyToLog = {
|
|
160
|
+
usage: responseBodyParsed.usage,
|
|
161
|
+
model: responseBodyParsed.model,
|
|
162
|
+
id: responseBodyParsed.id,
|
|
163
|
+
object: responseBodyParsed.object,
|
|
164
|
+
contentTruncated: '[Content truncated - exceeded 10KB limit]',
|
|
165
|
+
originalSize: bodyStr.length
|
|
166
|
+
};
|
|
167
|
+
bodyTruncated = true;
|
|
168
|
+
}
|
|
169
|
+
else {
|
|
170
|
+
responseBodyToLog = responseBodyParsed;
|
|
171
|
+
}
|
|
172
|
+
}
|
|
173
|
+
await analytics.track('api_response', {
|
|
174
|
+
requestId: context.requestId,
|
|
175
|
+
statusCode: response.statusCode,
|
|
176
|
+
statusMessage: response.statusMessage,
|
|
177
|
+
headers: response.headers,
|
|
178
|
+
...(responseBodyToLog ? { responseBody: responseBodyToLog } : {}),
|
|
179
|
+
bodySize: originalBodySize,
|
|
180
|
+
bodyTruncated
|
|
181
|
+
}, {
|
|
182
|
+
latencyMs: latency
|
|
183
|
+
});
|
|
184
|
+
// Track agent response content
|
|
185
|
+
if (responseBodyParsed) {
|
|
186
|
+
const responseContent = await this.extractResponseContent(responseBodyParsed);
|
|
187
|
+
if (responseContent) {
|
|
188
|
+
await analytics.trackAgentResponse(responseContent, {
|
|
189
|
+
requestId: context.requestId,
|
|
190
|
+
model: responseBodyParsed.model || 'unknown',
|
|
191
|
+
streaming: responseBodyParsed.streaming || false
|
|
192
|
+
});
|
|
193
|
+
}
|
|
194
|
+
}
|
|
195
|
+
logger.debug(`[${this.name}] Tracked API response (${latency}ms)`);
|
|
196
|
+
}
|
|
197
|
+
catch (error) {
|
|
198
|
+
// Silently fail - analytics should not block requests
|
|
199
|
+
logger.error(`[${this.name}] Error tracking response:`, error);
|
|
200
|
+
}
|
|
201
|
+
}
|
|
202
|
+
async onError(context, error) {
|
|
203
|
+
try {
|
|
204
|
+
const analytics = getAnalytics();
|
|
205
|
+
if (!analytics.isEnabled) {
|
|
206
|
+
return;
|
|
207
|
+
}
|
|
208
|
+
await analytics.track('proxy_error', {
|
|
209
|
+
requestId: context.requestId,
|
|
210
|
+
errorType: error.name,
|
|
211
|
+
errorMessage: error.message,
|
|
212
|
+
url: context.url
|
|
213
|
+
});
|
|
214
|
+
logger.debug(`[${this.name}] Tracked error`);
|
|
215
|
+
}
|
|
216
|
+
catch (trackError) {
|
|
217
|
+
logger.error(`[${this.name}] Error tracking error:`, trackError);
|
|
218
|
+
}
|
|
219
|
+
}
|
|
220
|
+
/**
|
|
221
|
+
* Extract response content from various API formats
|
|
222
|
+
* Reuses logic from original proxy
|
|
223
|
+
*/
|
|
224
|
+
async extractResponseContent(responseBody) {
|
|
225
|
+
let responseContent = null;
|
|
226
|
+
// SSE streaming content
|
|
227
|
+
if (responseBody._sseContent) {
|
|
228
|
+
responseContent = await this.extractSSEContent(responseBody._sseContent);
|
|
229
|
+
}
|
|
230
|
+
// OpenAI/Claude streaming format (choices array)
|
|
231
|
+
else if (responseBody.choices && Array.isArray(responseBody.choices) && responseBody.choices.length > 0) {
|
|
232
|
+
const choice = responseBody.choices[0];
|
|
233
|
+
if (choice.message?.content) {
|
|
234
|
+
responseContent = choice.message.content;
|
|
235
|
+
}
|
|
236
|
+
else if (choice.delta?.content) {
|
|
237
|
+
responseContent = choice.delta.content;
|
|
238
|
+
}
|
|
239
|
+
}
|
|
240
|
+
// Claude Messages API format (content array)
|
|
241
|
+
else if (responseBody.content && Array.isArray(responseBody.content)) {
|
|
242
|
+
responseContent = responseBody.content
|
|
243
|
+
.filter((c) => c.type === 'text' && c.text)
|
|
244
|
+
.map((c) => c.text)
|
|
245
|
+
.join('\n');
|
|
246
|
+
}
|
|
247
|
+
// Gemini format: candidates with content.parts
|
|
248
|
+
else if (responseBody.candidates && Array.isArray(responseBody.candidates) && responseBody.candidates.length > 0) {
|
|
249
|
+
const candidate = responseBody.candidates[0];
|
|
250
|
+
if (candidate.content?.parts && Array.isArray(candidate.content.parts)) {
|
|
251
|
+
const textParts = candidate.content.parts
|
|
252
|
+
.filter((p) => p.text)
|
|
253
|
+
.map((p) => p.text);
|
|
254
|
+
if (textParts.length > 0) {
|
|
255
|
+
responseContent = textParts.join('');
|
|
256
|
+
}
|
|
257
|
+
}
|
|
258
|
+
}
|
|
259
|
+
// Fallback: check for top-level content field
|
|
260
|
+
else if (responseBody.content && typeof responseBody.content === 'string') {
|
|
261
|
+
responseContent = responseBody.content;
|
|
262
|
+
}
|
|
263
|
+
return responseContent;
|
|
264
|
+
}
|
|
265
|
+
/**
|
|
266
|
+
* Extract content from SSE stream
|
|
267
|
+
* Simplified from original - focuses on content extraction
|
|
268
|
+
*/
|
|
269
|
+
async extractSSEContent(sseText) {
|
|
270
|
+
try {
|
|
271
|
+
const lines = sseText.split('\n');
|
|
272
|
+
const contentParts = [];
|
|
273
|
+
for (const line of lines) {
|
|
274
|
+
if (line.startsWith('data: ')) {
|
|
275
|
+
const dataStr = line.slice(6).trim();
|
|
276
|
+
if (!dataStr || dataStr === '[DONE]') {
|
|
277
|
+
continue;
|
|
278
|
+
}
|
|
279
|
+
try {
|
|
280
|
+
const data = JSON.parse(dataStr);
|
|
281
|
+
// Claude streaming format
|
|
282
|
+
if (data.type === 'content_block_delta' && data.delta?.text) {
|
|
283
|
+
contentParts.push(data.delta.text);
|
|
284
|
+
}
|
|
285
|
+
// OpenAI streaming format
|
|
286
|
+
else if (data.choices && Array.isArray(data.choices)) {
|
|
287
|
+
for (const choice of data.choices) {
|
|
288
|
+
if (choice.delta?.content) {
|
|
289
|
+
contentParts.push(choice.delta.content);
|
|
290
|
+
}
|
|
291
|
+
}
|
|
292
|
+
}
|
|
293
|
+
// Gemini streaming format
|
|
294
|
+
else if (data.candidates && Array.isArray(data.candidates)) {
|
|
295
|
+
for (const candidate of data.candidates) {
|
|
296
|
+
if (candidate.content?.parts && Array.isArray(candidate.content.parts)) {
|
|
297
|
+
for (const part of candidate.content.parts) {
|
|
298
|
+
if (part.text) {
|
|
299
|
+
contentParts.push(part.text);
|
|
300
|
+
}
|
|
301
|
+
}
|
|
302
|
+
}
|
|
303
|
+
}
|
|
304
|
+
}
|
|
305
|
+
}
|
|
306
|
+
catch {
|
|
307
|
+
continue;
|
|
308
|
+
}
|
|
309
|
+
}
|
|
310
|
+
}
|
|
311
|
+
return contentParts.length > 0 ? contentParts.join('') : null;
|
|
312
|
+
}
|
|
313
|
+
catch (error) {
|
|
314
|
+
logger.debug('SSE content extraction error:', error);
|
|
315
|
+
return null;
|
|
316
|
+
}
|
|
317
|
+
}
|
|
318
|
+
}
|
|
319
|
+
//# sourceMappingURL=interceptors.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"interceptors.js","sourceRoot":"","sources":["../../../src/utils/proxy/interceptors.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,45 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Proxy Types
|
|
3
|
+
*
|
|
4
|
+
* Type definitions for proxy system.
|
|
5
|
+
*/
|
|
6
|
+
import { IncomingHttpHeaders } from 'http';
|
|
7
|
+
/**
|
|
8
|
+
* Proxy configuration
|
|
9
|
+
*/
|
|
10
|
+
export interface ProxyConfig {
|
|
11
|
+
targetApiUrl: string;
|
|
12
|
+
port?: number;
|
|
13
|
+
host?: string;
|
|
14
|
+
clientType?: string;
|
|
15
|
+
timeout?: number;
|
|
16
|
+
model?: string;
|
|
17
|
+
provider?: string;
|
|
18
|
+
integrationId?: string;
|
|
19
|
+
sessionId?: string;
|
|
20
|
+
}
|
|
21
|
+
/**
|
|
22
|
+
* Proxy context - shared state across interceptors
|
|
23
|
+
*/
|
|
24
|
+
export interface ProxyContext {
|
|
25
|
+
requestId: string;
|
|
26
|
+
sessionId: string;
|
|
27
|
+
agentName: string;
|
|
28
|
+
method: string;
|
|
29
|
+
url: string;
|
|
30
|
+
headers: Record<string, string>;
|
|
31
|
+
requestBody: string | null;
|
|
32
|
+
requestStartTime: number;
|
|
33
|
+
targetUrl?: string;
|
|
34
|
+
metadata: Record<string, unknown>;
|
|
35
|
+
}
|
|
36
|
+
/**
|
|
37
|
+
* Upstream response
|
|
38
|
+
*/
|
|
39
|
+
export interface UpstreamResponse {
|
|
40
|
+
statusCode: number;
|
|
41
|
+
statusMessage: string;
|
|
42
|
+
headers: IncomingHttpHeaders;
|
|
43
|
+
body: Buffer | null;
|
|
44
|
+
}
|
|
45
|
+
//# sourceMappingURL=types.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../../src/utils/proxy/types.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,EAAE,mBAAmB,EAAE,MAAM,MAAM,CAAC;AAE3C;;GAEG;AACH,MAAM,WAAW,WAAW;IAC1B,YAAY,EAAE,MAAM,CAAC;IACrB,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB;AAED;;GAEG;AACH,MAAM,WAAW,YAAY;IAC3B,SAAS,EAAE,MAAM,CAAC;IAClB,SAAS,EAAE,MAAM,CAAC;IAClB,SAAS,EAAE,MAAM,CAAC;IAClB,MAAM,EAAE,MAAM,CAAC;IACf,GAAG,EAAE,MAAM,CAAC;IACZ,OAAO,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IAChC,WAAW,EAAE,MAAM,GAAG,IAAI,CAAC;IAC3B,gBAAgB,EAAE,MAAM,CAAC;IACzB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,QAAQ,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;CACnC;AAED;;GAEG;AACH,MAAM,WAAW,gBAAgB;IAC/B,UAAU,EAAE,MAAM,CAAC;IACnB,aAAa,EAAE,MAAM,CAAC;IACtB,OAAO,EAAE,mBAAmB,CAAC;IAC7B,IAAI,EAAE,MAAM,GAAG,IAAI,CAAC;CACrB"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"types.js","sourceRoot":"","sources":["../../../src/utils/proxy/types.ts"],"names":[],"mappings":"AAAA;;;;GAIG"}
|