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.
Files changed (121) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +139 -0
  3. package/README.zh-CN.md +136 -0
  4. package/dist/index.d.ts +1 -0
  5. package/dist/index.js +2 -0
  6. package/dist/index.js.map +1 -0
  7. package/dist/lib/api/agent-service.d.ts +136 -0
  8. package/dist/lib/api/agent-service.js +938 -0
  9. package/dist/lib/api/agent-service.js.map +1 -0
  10. package/dist/lib/api/ai-service.d.ts +26 -0
  11. package/dist/lib/api/ai-service.js +38 -0
  12. package/dist/lib/api/ai-service.js.map +1 -0
  13. package/dist/lib/api/cursor-client.d.ts +119 -0
  14. package/dist/lib/api/cursor-client.js +511 -0
  15. package/dist/lib/api/cursor-client.js.map +1 -0
  16. package/dist/lib/api/cursor-models.d.ts +13 -0
  17. package/dist/lib/api/cursor-models.js +34 -0
  18. package/dist/lib/api/cursor-models.js.map +1 -0
  19. package/dist/lib/api/openai-compat.d.ts +10 -0
  20. package/dist/lib/api/openai-compat.js +262 -0
  21. package/dist/lib/api/openai-compat.js.map +1 -0
  22. package/dist/lib/api/proto/agent-messages.d.ts +25 -0
  23. package/dist/lib/api/proto/agent-messages.js +132 -0
  24. package/dist/lib/api/proto/agent-messages.js.map +1 -0
  25. package/dist/lib/api/proto/bidi.d.ts +17 -0
  26. package/dist/lib/api/proto/bidi.js +24 -0
  27. package/dist/lib/api/proto/bidi.js.map +1 -0
  28. package/dist/lib/api/proto/decoding.d.ts +19 -0
  29. package/dist/lib/api/proto/decoding.js +118 -0
  30. package/dist/lib/api/proto/decoding.js.map +1 -0
  31. package/dist/lib/api/proto/encoding.d.ts +64 -0
  32. package/dist/lib/api/proto/encoding.js +180 -0
  33. package/dist/lib/api/proto/encoding.js.map +1 -0
  34. package/dist/lib/api/proto/exec.d.ts +12 -0
  35. package/dist/lib/api/proto/exec.js +383 -0
  36. package/dist/lib/api/proto/exec.js.map +1 -0
  37. package/dist/lib/api/proto/index.d.ts +13 -0
  38. package/dist/lib/api/proto/index.js +10 -0
  39. package/dist/lib/api/proto/index.js.map +1 -0
  40. package/dist/lib/api/proto/interaction.d.ts +15 -0
  41. package/dist/lib/api/proto/interaction.js +99 -0
  42. package/dist/lib/api/proto/interaction.js.map +1 -0
  43. package/dist/lib/api/proto/kv.d.ts +52 -0
  44. package/dist/lib/api/proto/kv.js +156 -0
  45. package/dist/lib/api/proto/kv.js.map +1 -0
  46. package/dist/lib/api/proto/tool-calls.d.ts +9 -0
  47. package/dist/lib/api/proto/tool-calls.js +144 -0
  48. package/dist/lib/api/proto/tool-calls.js.map +1 -0
  49. package/dist/lib/api/proto/types.d.ts +201 -0
  50. package/dist/lib/api/proto/types.js +10 -0
  51. package/dist/lib/api/proto/types.js.map +1 -0
  52. package/dist/lib/auth/helpers.d.ts +40 -0
  53. package/dist/lib/auth/helpers.js +103 -0
  54. package/dist/lib/auth/helpers.js.map +1 -0
  55. package/dist/lib/auth/index.d.ts +7 -0
  56. package/dist/lib/auth/index.js +10 -0
  57. package/dist/lib/auth/index.js.map +1 -0
  58. package/dist/lib/auth/login.d.ts +55 -0
  59. package/dist/lib/auth/login.js +184 -0
  60. package/dist/lib/auth/login.js.map +1 -0
  61. package/dist/lib/config.d.ts +153 -0
  62. package/dist/lib/config.js +182 -0
  63. package/dist/lib/config.js.map +1 -0
  64. package/dist/lib/openai-compat/handler.d.ts +40 -0
  65. package/dist/lib/openai-compat/handler.js +808 -0
  66. package/dist/lib/openai-compat/handler.js.map +1 -0
  67. package/dist/lib/openai-compat/index.d.ts +9 -0
  68. package/dist/lib/openai-compat/index.js +13 -0
  69. package/dist/lib/openai-compat/index.js.map +1 -0
  70. package/dist/lib/openai-compat/types.d.ts +127 -0
  71. package/dist/lib/openai-compat/types.js +6 -0
  72. package/dist/lib/openai-compat/types.js.map +1 -0
  73. package/dist/lib/openai-compat/utils.d.ts +143 -0
  74. package/dist/lib/openai-compat/utils.js +348 -0
  75. package/dist/lib/openai-compat/utils.js.map +1 -0
  76. package/dist/lib/session-reuse.d.ts +88 -0
  77. package/dist/lib/session-reuse.js +198 -0
  78. package/dist/lib/session-reuse.js.map +1 -0
  79. package/dist/lib/storage.d.ts +55 -0
  80. package/dist/lib/storage.js +159 -0
  81. package/dist/lib/storage.js.map +1 -0
  82. package/dist/lib/utils/cache.d.ts +131 -0
  83. package/dist/lib/utils/cache.js +297 -0
  84. package/dist/lib/utils/cache.js.map +1 -0
  85. package/dist/lib/utils/fetch.d.ts +84 -0
  86. package/dist/lib/utils/fetch.js +261 -0
  87. package/dist/lib/utils/fetch.js.map +1 -0
  88. package/dist/lib/utils/index.d.ts +13 -0
  89. package/dist/lib/utils/index.js +22 -0
  90. package/dist/lib/utils/index.js.map +1 -0
  91. package/dist/lib/utils/jwt.d.ts +40 -0
  92. package/dist/lib/utils/jwt.js +102 -0
  93. package/dist/lib/utils/jwt.js.map +1 -0
  94. package/dist/lib/utils/logger.d.ts +107 -0
  95. package/dist/lib/utils/logger.js +227 -0
  96. package/dist/lib/utils/logger.js.map +1 -0
  97. package/dist/lib/utils/model-resolver.d.ts +49 -0
  98. package/dist/lib/utils/model-resolver.js +503 -0
  99. package/dist/lib/utils/model-resolver.js.map +1 -0
  100. package/dist/lib/utils/request-pool.d.ts +38 -0
  101. package/dist/lib/utils/request-pool.js +105 -0
  102. package/dist/lib/utils/request-pool.js.map +1 -0
  103. package/dist/lib/utils/request-transformer.d.ts +87 -0
  104. package/dist/lib/utils/request-transformer.js +154 -0
  105. package/dist/lib/utils/request-transformer.js.map +1 -0
  106. package/dist/lib/utils/tokenizer.d.ts +14 -0
  107. package/dist/lib/utils/tokenizer.js +76 -0
  108. package/dist/lib/utils/tokenizer.js.map +1 -0
  109. package/dist/plugin/index.d.ts +8 -0
  110. package/dist/plugin/index.js +9 -0
  111. package/dist/plugin/index.js.map +1 -0
  112. package/dist/plugin/plugin.d.ts +21 -0
  113. package/dist/plugin/plugin.js +309 -0
  114. package/dist/plugin/plugin.js.map +1 -0
  115. package/dist/plugin/types.d.ts +120 -0
  116. package/dist/plugin/types.js +7 -0
  117. package/dist/plugin/types.js.map +1 -0
  118. package/dist/server.d.ts +15 -0
  119. package/dist/server.js +95 -0
  120. package/dist/server.js.map +1 -0
  121. 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;