opencode-cursor-proxy 1.0.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/LICENSE +21 -0
- package/README.md +139 -0
- package/README.zh-CN.md +136 -0
- package/dist/index.d.ts +1 -0
- package/dist/index.js +2 -0
- package/dist/index.js.map +1 -0
- package/dist/lib/api/agent-service.d.ts +136 -0
- package/dist/lib/api/agent-service.js +938 -0
- package/dist/lib/api/agent-service.js.map +1 -0
- package/dist/lib/api/ai-service.d.ts +26 -0
- package/dist/lib/api/ai-service.js +38 -0
- package/dist/lib/api/ai-service.js.map +1 -0
- package/dist/lib/api/cursor-client.d.ts +119 -0
- package/dist/lib/api/cursor-client.js +511 -0
- package/dist/lib/api/cursor-client.js.map +1 -0
- package/dist/lib/api/cursor-models.d.ts +13 -0
- package/dist/lib/api/cursor-models.js +34 -0
- package/dist/lib/api/cursor-models.js.map +1 -0
- package/dist/lib/api/openai-compat.d.ts +10 -0
- package/dist/lib/api/openai-compat.js +262 -0
- package/dist/lib/api/openai-compat.js.map +1 -0
- package/dist/lib/api/proto/agent-messages.d.ts +25 -0
- package/dist/lib/api/proto/agent-messages.js +132 -0
- package/dist/lib/api/proto/agent-messages.js.map +1 -0
- package/dist/lib/api/proto/bidi.d.ts +17 -0
- package/dist/lib/api/proto/bidi.js +24 -0
- package/dist/lib/api/proto/bidi.js.map +1 -0
- package/dist/lib/api/proto/decoding.d.ts +19 -0
- package/dist/lib/api/proto/decoding.js +118 -0
- package/dist/lib/api/proto/decoding.js.map +1 -0
- package/dist/lib/api/proto/encoding.d.ts +64 -0
- package/dist/lib/api/proto/encoding.js +180 -0
- package/dist/lib/api/proto/encoding.js.map +1 -0
- package/dist/lib/api/proto/exec.d.ts +12 -0
- package/dist/lib/api/proto/exec.js +383 -0
- package/dist/lib/api/proto/exec.js.map +1 -0
- package/dist/lib/api/proto/index.d.ts +13 -0
- package/dist/lib/api/proto/index.js +10 -0
- package/dist/lib/api/proto/index.js.map +1 -0
- package/dist/lib/api/proto/interaction.d.ts +15 -0
- package/dist/lib/api/proto/interaction.js +99 -0
- package/dist/lib/api/proto/interaction.js.map +1 -0
- package/dist/lib/api/proto/kv.d.ts +52 -0
- package/dist/lib/api/proto/kv.js +156 -0
- package/dist/lib/api/proto/kv.js.map +1 -0
- package/dist/lib/api/proto/tool-calls.d.ts +9 -0
- package/dist/lib/api/proto/tool-calls.js +144 -0
- package/dist/lib/api/proto/tool-calls.js.map +1 -0
- package/dist/lib/api/proto/types.d.ts +201 -0
- package/dist/lib/api/proto/types.js +10 -0
- package/dist/lib/api/proto/types.js.map +1 -0
- package/dist/lib/auth/helpers.d.ts +40 -0
- package/dist/lib/auth/helpers.js +103 -0
- package/dist/lib/auth/helpers.js.map +1 -0
- package/dist/lib/auth/index.d.ts +7 -0
- package/dist/lib/auth/index.js +10 -0
- package/dist/lib/auth/index.js.map +1 -0
- package/dist/lib/auth/login.d.ts +55 -0
- package/dist/lib/auth/login.js +184 -0
- package/dist/lib/auth/login.js.map +1 -0
- package/dist/lib/config.d.ts +153 -0
- package/dist/lib/config.js +182 -0
- package/dist/lib/config.js.map +1 -0
- package/dist/lib/openai-compat/handler.d.ts +40 -0
- package/dist/lib/openai-compat/handler.js +808 -0
- package/dist/lib/openai-compat/handler.js.map +1 -0
- package/dist/lib/openai-compat/index.d.ts +9 -0
- package/dist/lib/openai-compat/index.js +13 -0
- package/dist/lib/openai-compat/index.js.map +1 -0
- package/dist/lib/openai-compat/types.d.ts +127 -0
- package/dist/lib/openai-compat/types.js +6 -0
- package/dist/lib/openai-compat/types.js.map +1 -0
- package/dist/lib/openai-compat/utils.d.ts +143 -0
- package/dist/lib/openai-compat/utils.js +348 -0
- package/dist/lib/openai-compat/utils.js.map +1 -0
- package/dist/lib/session-reuse.d.ts +88 -0
- package/dist/lib/session-reuse.js +198 -0
- package/dist/lib/session-reuse.js.map +1 -0
- package/dist/lib/storage.d.ts +55 -0
- package/dist/lib/storage.js +159 -0
- package/dist/lib/storage.js.map +1 -0
- package/dist/lib/utils/cache.d.ts +131 -0
- package/dist/lib/utils/cache.js +297 -0
- package/dist/lib/utils/cache.js.map +1 -0
- package/dist/lib/utils/fetch.d.ts +84 -0
- package/dist/lib/utils/fetch.js +261 -0
- package/dist/lib/utils/fetch.js.map +1 -0
- package/dist/lib/utils/index.d.ts +13 -0
- package/dist/lib/utils/index.js +22 -0
- package/dist/lib/utils/index.js.map +1 -0
- package/dist/lib/utils/jwt.d.ts +40 -0
- package/dist/lib/utils/jwt.js +102 -0
- package/dist/lib/utils/jwt.js.map +1 -0
- package/dist/lib/utils/logger.d.ts +107 -0
- package/dist/lib/utils/logger.js +227 -0
- package/dist/lib/utils/logger.js.map +1 -0
- package/dist/lib/utils/model-resolver.d.ts +49 -0
- package/dist/lib/utils/model-resolver.js +503 -0
- package/dist/lib/utils/model-resolver.js.map +1 -0
- package/dist/lib/utils/request-pool.d.ts +38 -0
- package/dist/lib/utils/request-pool.js +105 -0
- package/dist/lib/utils/request-pool.js.map +1 -0
- package/dist/lib/utils/request-transformer.d.ts +87 -0
- package/dist/lib/utils/request-transformer.js +154 -0
- package/dist/lib/utils/request-transformer.js.map +1 -0
- package/dist/lib/utils/tokenizer.d.ts +14 -0
- package/dist/lib/utils/tokenizer.js +76 -0
- package/dist/lib/utils/tokenizer.js.map +1 -0
- package/dist/plugin/index.d.ts +8 -0
- package/dist/plugin/index.js +9 -0
- package/dist/plugin/index.js.map +1 -0
- package/dist/plugin/plugin.d.ts +21 -0
- package/dist/plugin/plugin.js +309 -0
- package/dist/plugin/plugin.js.map +1 -0
- package/dist/plugin/types.d.ts +120 -0
- package/dist/plugin/types.js +7 -0
- package/dist/plugin/types.js.map +1 -0
- package/dist/server.d.ts +15 -0
- package/dist/server.js +95 -0
- package/dist/server.js.map +1 -0
- package/package.json +79 -0
|
@@ -0,0 +1,227 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Structured Logger Module
|
|
3
|
+
*
|
|
4
|
+
* Provides consistent logging across the application with:
|
|
5
|
+
* - Log levels (error, warn, info, debug)
|
|
6
|
+
* - Structured metadata
|
|
7
|
+
* - Optional JSON output
|
|
8
|
+
* - Child loggers with context
|
|
9
|
+
*/
|
|
10
|
+
import { config, getLogLevel } from "../config";
|
|
11
|
+
// --- Log Level Priority ---
|
|
12
|
+
const LOG_LEVELS = {
|
|
13
|
+
error: 0,
|
|
14
|
+
warn: 1,
|
|
15
|
+
info: 2,
|
|
16
|
+
debug: 3,
|
|
17
|
+
};
|
|
18
|
+
// --- Formatters ---
|
|
19
|
+
function formatTimestamp() {
|
|
20
|
+
return new Date().toISOString();
|
|
21
|
+
}
|
|
22
|
+
function formatMessage(level, message, meta, bindings) {
|
|
23
|
+
const timestamp = formatTimestamp();
|
|
24
|
+
const prefix = `[${timestamp}] [${level.toUpperCase().padEnd(5)}]`;
|
|
25
|
+
const combinedMeta = { ...bindings, ...meta };
|
|
26
|
+
const hasMetaKeys = Object.keys(combinedMeta).length > 0;
|
|
27
|
+
if (hasMetaKeys) {
|
|
28
|
+
const metaStr = Object.entries(combinedMeta)
|
|
29
|
+
.map(([k, v]) => {
|
|
30
|
+
if (typeof v === "object") {
|
|
31
|
+
try {
|
|
32
|
+
return `${k}=${JSON.stringify(v)}`;
|
|
33
|
+
}
|
|
34
|
+
catch {
|
|
35
|
+
return `${k}=[Object]`;
|
|
36
|
+
}
|
|
37
|
+
}
|
|
38
|
+
return `${k}=${v}`;
|
|
39
|
+
})
|
|
40
|
+
.join(" ");
|
|
41
|
+
return `${prefix} ${message} ${metaStr}`;
|
|
42
|
+
}
|
|
43
|
+
return `${prefix} ${message}`;
|
|
44
|
+
}
|
|
45
|
+
function formatJson(level, message, meta, bindings) {
|
|
46
|
+
return JSON.stringify({
|
|
47
|
+
timestamp: formatTimestamp(),
|
|
48
|
+
level,
|
|
49
|
+
message,
|
|
50
|
+
...bindings,
|
|
51
|
+
...meta,
|
|
52
|
+
});
|
|
53
|
+
}
|
|
54
|
+
// --- Logger Implementation ---
|
|
55
|
+
class LoggerImpl {
|
|
56
|
+
bindings;
|
|
57
|
+
minLevel;
|
|
58
|
+
useJson;
|
|
59
|
+
constructor(bindings = {}, options) {
|
|
60
|
+
this.bindings = bindings;
|
|
61
|
+
this.minLevel = LOG_LEVELS[options?.minLevel ?? getLogLevel()];
|
|
62
|
+
this.useJson = options?.useJson ?? (process.env.CURSOR_LOG_JSON === "1");
|
|
63
|
+
}
|
|
64
|
+
shouldLog(level) {
|
|
65
|
+
return LOG_LEVELS[level] <= this.minLevel;
|
|
66
|
+
}
|
|
67
|
+
log(level, message, meta = {}) {
|
|
68
|
+
if (!this.shouldLog(level))
|
|
69
|
+
return;
|
|
70
|
+
const output = this.useJson
|
|
71
|
+
? formatJson(level, message, meta, this.bindings)
|
|
72
|
+
: formatMessage(level, message, meta, this.bindings);
|
|
73
|
+
switch (level) {
|
|
74
|
+
case "error":
|
|
75
|
+
console.error(output);
|
|
76
|
+
break;
|
|
77
|
+
case "warn":
|
|
78
|
+
console.warn(output);
|
|
79
|
+
break;
|
|
80
|
+
default:
|
|
81
|
+
console.log(output);
|
|
82
|
+
}
|
|
83
|
+
}
|
|
84
|
+
error(message, meta) {
|
|
85
|
+
this.log("error", message, meta);
|
|
86
|
+
}
|
|
87
|
+
warn(message, meta) {
|
|
88
|
+
this.log("warn", message, meta);
|
|
89
|
+
}
|
|
90
|
+
info(message, meta) {
|
|
91
|
+
this.log("info", message, meta);
|
|
92
|
+
}
|
|
93
|
+
debug(message, meta) {
|
|
94
|
+
this.log("debug", message, meta);
|
|
95
|
+
}
|
|
96
|
+
timing(label, durationMs, meta) {
|
|
97
|
+
if (!config.debug.timing && !config.debug.enabled)
|
|
98
|
+
return;
|
|
99
|
+
this.log("info", `[TIMING] ${label}: ${durationMs}ms`, meta);
|
|
100
|
+
}
|
|
101
|
+
child(bindings) {
|
|
102
|
+
return new LoggerImpl({ ...this.bindings, ...bindings }, { minLevel: Object.entries(LOG_LEVELS).find(([, v]) => v === this.minLevel)?.[0], useJson: this.useJson });
|
|
103
|
+
}
|
|
104
|
+
}
|
|
105
|
+
// --- Factory Functions ---
|
|
106
|
+
/**
|
|
107
|
+
* Create a new logger instance
|
|
108
|
+
*/
|
|
109
|
+
export function createLogger(name, bindings) {
|
|
110
|
+
const allBindings = name ? { logger: name, ...bindings } : bindings ?? {};
|
|
111
|
+
return new LoggerImpl(allBindings);
|
|
112
|
+
}
|
|
113
|
+
/**
|
|
114
|
+
* Create a child logger with additional context
|
|
115
|
+
*/
|
|
116
|
+
export function createChildLogger(parent, bindings) {
|
|
117
|
+
return parent.child(bindings);
|
|
118
|
+
}
|
|
119
|
+
// --- Default Logger ---
|
|
120
|
+
/**
|
|
121
|
+
* Default logger instance for general use
|
|
122
|
+
*/
|
|
123
|
+
export const logger = createLogger();
|
|
124
|
+
// --- Specialized Loggers ---
|
|
125
|
+
/**
|
|
126
|
+
* Logger for API operations
|
|
127
|
+
*/
|
|
128
|
+
export const apiLogger = createLogger("api");
|
|
129
|
+
/**
|
|
130
|
+
* Logger for authentication operations
|
|
131
|
+
*/
|
|
132
|
+
export const authLogger = createLogger("auth");
|
|
133
|
+
/**
|
|
134
|
+
* Logger for OpenAI compatibility layer
|
|
135
|
+
*/
|
|
136
|
+
export const openaiLogger = createLogger("openai-compat");
|
|
137
|
+
/**
|
|
138
|
+
* Logger for session management
|
|
139
|
+
*/
|
|
140
|
+
export const sessionLogger = createLogger("session");
|
|
141
|
+
/**
|
|
142
|
+
* Logger for request transformation
|
|
143
|
+
*/
|
|
144
|
+
export const transformLogger = createLogger("transform");
|
|
145
|
+
/**
|
|
146
|
+
* Log request transformation statistics
|
|
147
|
+
* Only logs when CURSOR_LOG_FILTERED_IDS or CURSOR_DEBUG is enabled
|
|
148
|
+
*/
|
|
149
|
+
export function logRequestTransform(data) {
|
|
150
|
+
if (!config.debug.logFilteredIds && !config.debug.enabled)
|
|
151
|
+
return;
|
|
152
|
+
const removed = data.originalCount - data.filteredCount;
|
|
153
|
+
if (removed > 0 || data.idsStripped > 0) {
|
|
154
|
+
transformLogger.debug(`Processed ${data.originalCount} messages: ` +
|
|
155
|
+
`filtered ${data.itemReferencesFiltered} item_reference(s), ` +
|
|
156
|
+
`stripped ${data.idsStripped} ID(s)`, {
|
|
157
|
+
originalCount: data.originalCount,
|
|
158
|
+
filteredCount: data.filteredCount,
|
|
159
|
+
itemReferencesFiltered: data.itemReferencesFiltered,
|
|
160
|
+
idsStripped: data.idsStripped,
|
|
161
|
+
});
|
|
162
|
+
if (data.strippedIds && data.strippedIds.length > 0) {
|
|
163
|
+
const displayIds = data.strippedIds.length <= 10
|
|
164
|
+
? data.strippedIds
|
|
165
|
+
: [...data.strippedIds.slice(0, 10), `... and ${data.strippedIds.length - 10} more`];
|
|
166
|
+
transformLogger.debug(`Stripped IDs: ${displayIds.join(", ")}`);
|
|
167
|
+
}
|
|
168
|
+
}
|
|
169
|
+
}
|
|
170
|
+
/**
|
|
171
|
+
* Log multimodal content detection
|
|
172
|
+
* Only logs when CURSOR_LOG_MULTIMODAL or CURSOR_DEBUG is enabled
|
|
173
|
+
*/
|
|
174
|
+
export function logMultimodalContent(data) {
|
|
175
|
+
if (!config.debug.logMultimodal && !config.debug.enabled)
|
|
176
|
+
return;
|
|
177
|
+
transformLogger.debug(`Message ${data.messageIndex + 1} contains ${data.imageCount} image(s)`, {
|
|
178
|
+
hasBase64: data.hasBase64,
|
|
179
|
+
modelSupportsVision: data.modelSupportsVision,
|
|
180
|
+
});
|
|
181
|
+
if (!data.modelSupportsVision) {
|
|
182
|
+
transformLogger.warn(`Images in message ${data.messageIndex + 1} will be ignored (model does not support vision)`);
|
|
183
|
+
}
|
|
184
|
+
}
|
|
185
|
+
// --- Request/Response Logging ---
|
|
186
|
+
/**
|
|
187
|
+
* Log incoming request details
|
|
188
|
+
* Only logs when CURSOR_REQUEST_LOGGING or CURSOR_DEBUG is enabled
|
|
189
|
+
*/
|
|
190
|
+
export function logRequest(method, path, body) {
|
|
191
|
+
if (!config.debug.requestLogging && !config.debug.enabled)
|
|
192
|
+
return;
|
|
193
|
+
openaiLogger.debug(`${method} ${path}`, body ? { ...body } : undefined);
|
|
194
|
+
}
|
|
195
|
+
/**
|
|
196
|
+
* Log response details
|
|
197
|
+
* Only logs when CURSOR_REQUEST_LOGGING or CURSOR_DEBUG is enabled
|
|
198
|
+
*/
|
|
199
|
+
export function logResponse(status, durationMs, details) {
|
|
200
|
+
if (!config.debug.requestLogging && !config.debug.enabled)
|
|
201
|
+
return;
|
|
202
|
+
openaiLogger.debug(`Response ${status} (${durationMs}ms)`, details ? { ...details } : undefined);
|
|
203
|
+
}
|
|
204
|
+
// --- Timing Utilities ---
|
|
205
|
+
/**
|
|
206
|
+
* Create a timer for measuring operation duration
|
|
207
|
+
*/
|
|
208
|
+
export function createTimer() {
|
|
209
|
+
const start = Date.now();
|
|
210
|
+
return () => Date.now() - start;
|
|
211
|
+
}
|
|
212
|
+
/**
|
|
213
|
+
* Measure and log the duration of an async operation
|
|
214
|
+
*/
|
|
215
|
+
export async function withTiming(logger, label, operation, meta) {
|
|
216
|
+
const timer = createTimer();
|
|
217
|
+
try {
|
|
218
|
+
const result = await operation();
|
|
219
|
+
logger.timing(label, timer(), { ...meta, success: true });
|
|
220
|
+
return result;
|
|
221
|
+
}
|
|
222
|
+
catch (error) {
|
|
223
|
+
logger.timing(label, timer(), { ...meta, success: false, error: String(error) });
|
|
224
|
+
throw error;
|
|
225
|
+
}
|
|
226
|
+
}
|
|
227
|
+
//# sourceMappingURL=logger.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"logger.js","sourceRoot":"","sources":["../../../src/lib/utils/logger.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,49 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Model Resolver and Normalizer
|
|
3
|
+
*
|
|
4
|
+
* Provides intelligent model name resolution with:
|
|
5
|
+
* - Explicit model mapping for known models
|
|
6
|
+
* - Pattern-based fallback matching
|
|
7
|
+
* - Provider prefix handling (e.g., "openai/gpt-4o" -> "gpt-4o")
|
|
8
|
+
* - Reasoning configuration per model
|
|
9
|
+
*/
|
|
10
|
+
import type { CursorModelInfo } from "../api/cursor-models";
|
|
11
|
+
export interface ReasoningConfig {
|
|
12
|
+
effort: "none" | "low" | "medium" | "high" | "xhigh";
|
|
13
|
+
summary: "auto" | "concise" | "detailed";
|
|
14
|
+
}
|
|
15
|
+
export interface ModelConfig {
|
|
16
|
+
reasoningEffort?: ReasoningConfig["effort"];
|
|
17
|
+
reasoningSummary?: ReasoningConfig["summary"];
|
|
18
|
+
textVerbosity?: "low" | "medium" | "high";
|
|
19
|
+
supportsTools?: boolean;
|
|
20
|
+
supportsVision?: boolean;
|
|
21
|
+
supportsStreaming?: boolean;
|
|
22
|
+
maxContextTokens?: number;
|
|
23
|
+
maxOutputTokens?: number;
|
|
24
|
+
/** Model family for grouping (e.g., "gpt", "claude", "gemini") */
|
|
25
|
+
family?: string;
|
|
26
|
+
/** Whether this is a reasoning/thinking model */
|
|
27
|
+
isReasoningModel?: boolean;
|
|
28
|
+
}
|
|
29
|
+
export declare function stripProviderPrefix(model: string): string;
|
|
30
|
+
export declare function normalizeModelName(model: string | undefined): string;
|
|
31
|
+
export declare function resolveModel(requestedModel: string, availableModels: CursorModelInfo[]): string;
|
|
32
|
+
export declare function getModelConfig(model: string): ModelConfig;
|
|
33
|
+
export declare function getReasoningConfig(model: string, overrides?: Partial<ReasoningConfig>): ReasoningConfig;
|
|
34
|
+
export declare function supportsToolCalling(model: string): boolean;
|
|
35
|
+
export declare function supportsVision(model: string): boolean;
|
|
36
|
+
export declare function getMaxContextTokens(model: string): number;
|
|
37
|
+
export declare function getMaxOutputTokens(model: string): number;
|
|
38
|
+
export declare function supportsStreaming(model: string): boolean;
|
|
39
|
+
export declare function isReasoningModel(model: string): boolean;
|
|
40
|
+
export declare function getModelFamily(model: string): string;
|
|
41
|
+
/**
|
|
42
|
+
* Get all available model aliases
|
|
43
|
+
*/
|
|
44
|
+
export declare function getModelAliases(): Record<string, string>;
|
|
45
|
+
/**
|
|
46
|
+
* Get all model configurations
|
|
47
|
+
*/
|
|
48
|
+
export declare function getAllModelConfigs(): Record<string, ModelConfig>;
|
|
49
|
+
export declare function getModelOwner(modelName: string): string;
|