@resolveio/server-lib 22.1.32 → 22.2.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/collections/ai-terminal-message.collection.js +8 -0
- package/collections/ai-terminal-message.collection.js.map +1 -1
- package/fixtures/cron-jobs.js +21 -12
- package/fixtures/cron-jobs.js.map +1 -1
- package/managers/worker-dispatcher.manager.js +2 -2
- package/managers/worker-dispatcher.manager.js.map +1 -1
- package/methods/ai-terminal.d.ts +7 -0
- package/methods/ai-terminal.js +596 -309
- package/methods/ai-terminal.js.map +1 -1
- package/methods/cron-jobs.js +14 -4
- package/methods/cron-jobs.js.map +1 -1
- package/methods/mongo-explorer.js +75 -62
- package/methods/mongo-explorer.js.map +1 -1
- package/methods/report-builder.js +1 -1
- package/methods/report-builder.js.map +1 -1
- package/package.json +1 -1
- package/server-app.js +2 -2
- package/server-app.js.map +1 -1
- package/services/codex-client.js +15 -15
- package/services/codex-client.js.map +1 -1
- package/services/openai-client.js +8 -5
- package/services/openai-client.js.map +1 -1
- package/workers/codex-runner.worker.js +1 -1
- package/workers/codex-runner.worker.js.map +1 -1
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../src/services/openai-client.ts"],"names":[],"mappings":"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","file":"openai-client.js","sourcesContent":["import { setTimeout as sleepTimeout } from 'timers/promises';\nimport { round } from '../util/common';\n\nexport type OpenAIResponseFormat = 'text' | 'json' | 'json_object' | { type: string; [key: string]: any };\n\nexport interface OpenAIConfig {\n\tapiKey: string;\n\tbaseUrl?: string;\n\tmodel?: string;\n\tfallbackModel?: string;\n\ttemperature?: number;\n\tmaxRetries?: number;\n\tretryDelayMs?: number;\n\tmaxTokens?: number;\n\tresponseFormat?: OpenAIResponseFormat;\n}\n\nexport interface OpenAIChatOptions {\n\ttimeoutMs?: number;\n\tresponseFormat?: OpenAIResponseFormat;\n}\n\nexport interface OpenAIUsageSummary {\n\tinputTokens: number;\n\toutputTokens: number;\n\ttotalTokens: number;\n}\n\nexport interface OpenAIChatResult {\n\tcontent: string;\n\tusage?: OpenAIUsageSummary;\n\tmodel?: string;\n\trequestId?: string;\n}\n\nexport class OpenAIClient {\n\tprivate readonly config: OpenAIConfig;\n\n\tconstructor(config: OpenAIConfig) {\n\t\tthis.config = config;\n\t\tif (!this.config.apiKey) {\n\t\t\tthrow new Error('OPENAI_API_KEY is required for OpenAIClient');\n\t\t}\n\t}\n\n\tasync chat(\n\t\tmessages: Array<{role: 'system' | 'user' | 'assistant'; content: any}>,\n\t\toptions?: OpenAIChatOptions\n\t): Promise<OpenAIChatResult> {\n\t\tconst baseUrl = (this.config.baseUrl || 'https://api.openai.com/v1').replace(/\\/+$/, '');\n\t\tconst primaryModel = this.config.model || 'gpt-5.1';\n\t\tconst fallbackModel = (this.config.fallbackModel || '').trim();\n\t\tconst maxRetries = this.normalizeRetryCount(this.config.maxRetries);\n\t\tconst retryDelayMs = this.normalizeRetryDelay(this.config.retryDelayMs);\n\t\tconst payload: any = {\n\t\t\tmodel: primaryModel,\n\t\t\tmessages,\n\t\t\ttemperature: this.config.temperature ?? 0.2\n\t\t};\n\t\tconst responseFormat = options?.responseFormat ?? this.config.responseFormat;\n\t\tif (responseFormat) {\n\t\t\tconst normalized = typeof responseFormat === 'string' ? responseFormat.toLowerCase() : '';\n\t\t\tif (normalized === 'json' || normalized === 'json_object') {\n\t\t\t\tpayload.response_format = { type: 'json_object' };\n\t\t\t}\n\t\t\telse if (typeof responseFormat === 'object') {\n\t\t\t\tpayload.response_format = responseFormat;\n\t\t\t}\n\t\t\telse if (normalized && normalized !== 'text') {\n\t\t\t\tpayload.response_format = { type: normalized };\n\t\t\t}\n\t\t}\n\t\tif (Number.isFinite(this.config.maxTokens)) {\n\t\t\tpayload.max_completion_tokens = this.normalizeTokenCount(this.config.maxTokens);\n\t\t}\n\n\t\tconst runRequest = async (model: string): Promise<OpenAIChatResult & { responseText: string }> => {\n\t\t\tconst timeoutMs = options?.timeoutMs;\n\t\t\tconst controller = timeoutMs ? new AbortController() : null;\n\t\t\tconst timeoutId = controller ? setTimeout(() => controller.abort(), timeoutMs) : null;\n\t\t\tlet response: Response;\n\t\t\tlet requestId = '';\n\t\t\ttry {\n\t\t\t\tresponse = await fetch(`${baseUrl}/chat/completions`, {\n\t\t\t\t\tmethod: 'POST',\n\t\t\t\t\theaders: {\n\t\t\t\t\t\t'Content-Type': 'application/json',\n\t\t\t\t\t\tAuthorization: `Bearer ${this.config.apiKey}`\n\t\t\t\t\t},\n\t\t\t\t\tbody: JSON.stringify({ ...payload, model }),\n\t\t\t\t\tsignal: controller?.signal\n\t\t\t\t});\n\t\t\t\trequestId = response.headers.get('x-request-id') || '';\n\t\t\t}\n\t\t\tcatch (error) {\n\t\t\t\tif (controller?.signal?.aborted) {\n\t\t\t\t\tthrow new Error('OpenAI request timed out.');\n\t\t\t\t}\n\t\t\t\tthrow error;\n\t\t\t}\n\t\t\tfinally {\n\t\t\t\tif (timeoutId) {\n\t\t\t\t\tclearTimeout(timeoutId);\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tconst responseText = await response.text();\n\t\t\tif (!response.ok) {\n\t\t\t\tthrow new Error(`OpenAI request failed (${response.status}): ${responseText}`);\n\t\t\t}\n\n\t\t\tconst data = responseText ? JSON.parse(responseText) : {};\n\t\t\tconst message = data?.choices?.[0]?.message || {};\n\t\t\tconst content = this.extractContent(message);\n\t\t\tif (!content) {\n\t\t\t\tconst refusal = message?.refusal ? ` Refusal: ${message.refusal}` : '';\n\t\t\t\tthrow new Error(`OpenAI returned no completion content.${refusal}`);\n\t\t\t}\n\n\t\t\tconst usage = this.extractUsage(data?.usage);\n\t\t\treturn {\n\t\t\t\tcontent,\n\t\t\t\tusage,\n\t\t\t\tmodel: data?.model || model,\n\t\t\t\trequestId: data?.id || requestId,\n\t\t\t\tresponseText\n\t\t\t};\n\t\t};\n\n\t\tconst runWithRetry = async (model: string): Promise<OpenAIChatResult & { responseText: string }> => {\n\t\t\tlet attempt = 0;\n\t\t\tlet lastError: unknown = null;\n\t\t\twhile (attempt <= maxRetries) {\n\t\t\t\ttry {\n\t\t\t\t\treturn await runRequest(model);\n\t\t\t\t}\n\t\t\t\tcatch (error) {\n\t\t\t\t\tlastError = error;\n\t\t\t\t\tif (attempt >= maxRetries || !this.isRetryableError(error)) {\n\t\t\t\t\t\tbreak;\n\t\t\t\t\t}\n\t\t\t\t\tconst delay = retryDelayMs * Math.pow(2, attempt);\n\t\t\t\t\tawait this.sleep(delay);\n\t\t\t\t\tattempt += 1;\n\t\t\t\t}\n\t\t\t}\n\t\t\tthrow lastError;\n\t\t};\n\n\t\ttry {\n\t\t\tconst result = await runWithRetry(primaryModel);\n\t\t\treturn {\n\t\t\t\tcontent: result.content,\n\t\t\t\tusage: result.usage,\n\t\t\t\tmodel: result.model,\n\t\t\t\trequestId: result.requestId\n\t\t\t};\n\t\t}\n\t\tcatch (error) {\n\t\t\tif (!fallbackModel || fallbackModel === primaryModel) {\n\t\t\t\tthrow error;\n\t\t\t}\n\t\t\tconst result = await runWithRetry(fallbackModel);\n\t\t\treturn {\n\t\t\t\tcontent: result.content,\n\t\t\t\tusage: result.usage,\n\t\t\t\tmodel: result.model,\n\t\t\t\trequestId: result.requestId\n\t\t\t};\n\t\t}\n\t}\n\n\tprivate extractContent(message: any): string {\n\t\tif (!message) {\n\t\t\treturn '';\n\t\t}\n\t\tconst content = message.content;\n\t\tif (typeof content === 'string') {\n\t\t\treturn content.trim();\n\t\t}\n\t\tif (Array.isArray(content)) {\n\t\t\treturn content\n\t\t\t\t.map((part) => {\n\t\t\t\t\tif (!part) {\n\t\t\t\t\t\treturn '';\n\t\t\t\t\t}\n\t\t\t\t\tif (typeof part === 'string') {\n\t\t\t\t\t\treturn part;\n\t\t\t\t\t}\n\t\t\t\t\tif (typeof part?.text === 'string') {\n\t\t\t\t\t\treturn part.text;\n\t\t\t\t\t}\n\t\t\t\t\tif (typeof part?.content === 'string') {\n\t\t\t\t\t\treturn part.content;\n\t\t\t\t\t}\n\t\t\t\t\treturn '';\n\t\t\t\t})\n\t\t\t\t.join('')\n\t\t\t\t.trim();\n\t\t}\n\t\treturn '';\n\t}\n\n\tprivate extractUsage(usage: any): OpenAIUsageSummary | undefined {\n\t\tif (!usage) {\n\t\t\treturn undefined;\n\t\t}\n\t\tconst inputTokens = this.normalizeTokenValue(usage.prompt_tokens ?? usage.input_tokens);\n\t\tconst outputTokens = this.normalizeTokenValue(usage.completion_tokens ?? usage.output_tokens);\n\t\tconst totalTokens = this.normalizeTokenValue(usage.total_tokens ?? (inputTokens + outputTokens));\n\t\tif (!totalTokens && !inputTokens && !outputTokens) {\n\t\t\treturn undefined;\n\t\t}\n\t\treturn {\n\t\t\tinputTokens,\n\t\t\toutputTokens,\n\t\t\ttotalTokens\n\t\t};\n\t}\n\n\tprivate normalizeTokenValue(value: any): number {\n\t\tconst parsed = Number(value);\n\t\tif (!Number.isFinite(parsed) || parsed < 0) {\n\t\t\treturn 0;\n\t\t}\n\t\treturn round(parsed);\n\t}\n\n\tprivate normalizeTokenCount(value?: number): number {\n\t\tif (!Number.isFinite(value)) {\n\t\t\treturn 0;\n\t\t}\n\t\tconst rounded = round(value || 0);\n\t\treturn rounded < 0 ? 0 : rounded;\n\t}\n\n\tprivate normalizeRetryCount(value?: number): number {\n\t\tif (!Number.isFinite(value)) {\n\t\t\treturn 0;\n\t\t}\n\t\treturn Math.max(0, round(value || 0));\n\t}\n\n\tprivate normalizeRetryDelay(value?: number): number {\n\t\tif (!Number.isFinite(value)) {\n\t\t\treturn 750;\n\t\t}\n\t\treturn Math.max(250, round(value || 0));\n\t}\n\n\tprivate isRetryableError(error: any): boolean {\n\t\tconst message = error instanceof Error ? error.message.toLowerCase() : String(error || '').toLowerCase();\n\t\treturn message.includes('timeout') || message.includes('429') || message.includes('rate limit');\n\t}\n\n\tprivate async sleep(ms: number): Promise<void> {\n\t\tif (!ms) {\n\t\t\treturn;\n\t\t}\n\t\tawait sleepTimeout(ms);\n\t}\n}\n"]}
|
|
1
|
+
{"version":3,"sources":["../../src/services/openai-client.ts"],"names":[],"mappings":"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","file":"openai-client.js","sourcesContent":["import { setTimeout as sleepTimeout } from 'timers/promises';\nimport { round } from '../util/common';\n\nexport type OpenAIResponseFormat = 'text' | 'json' | 'json_object' | { type: string; [key: string]: any };\n\nexport interface OpenAIConfig {\n\tapiKey: string;\n\tbaseUrl?: string;\n\tmodel?: string;\n\tfallbackModel?: string;\n\ttemperature?: number;\n\tmaxRetries?: number;\n\tretryDelayMs?: number;\n\tmaxTokens?: number;\n\tresponseFormat?: OpenAIResponseFormat;\n}\n\nexport interface OpenAIChatOptions {\n\ttimeoutMs?: number;\n\tresponseFormat?: OpenAIResponseFormat;\n}\n\nexport interface OpenAIUsageSummary {\n\tinputTokens: number;\n\toutputTokens: number;\n\ttotalTokens: number;\n}\n\nexport interface OpenAIChatResult {\n\tcontent: string;\n\tusage?: OpenAIUsageSummary;\n\tmodel?: string;\n\trequestId?: string;\n}\n\nexport class OpenAIClient {\n\tprivate readonly config: OpenAIConfig;\n\n\tconstructor(config: OpenAIConfig) {\n\t\tthis.config = config;\n\t\tif (!this.config.apiKey) {\n\t\t\tthrow new Error('AI API key is required for AI client');\n\t\t}\n\t}\n\n\tasync chat(\n\t\tmessages: Array<{role: 'system' | 'user' | 'assistant'; content: any}>,\n\t\toptions?: OpenAIChatOptions\n\t): Promise<OpenAIChatResult> {\n\t\tconst baseUrl = (this.config.baseUrl || 'https://api.openai.com/v1').replace(/\\/+$/, '');\n\t\tconst primaryModel = this.config.model || 'gpt-5.1';\n\t\tconst fallbackModel = (this.config.fallbackModel || '').trim();\n\t\tconst maxRetries = this.normalizeRetryCount(this.config.maxRetries);\n\t\tconst retryDelayMs = this.normalizeRetryDelay(this.config.retryDelayMs);\n\t\tconst payload: any = {\n\t\t\tmodel: primaryModel,\n\t\t\tmessages,\n\t\t\ttemperature: this.config.temperature ?? 0.2\n\t\t};\n\t\tconst responseFormat = options?.responseFormat ?? this.config.responseFormat;\n\t\tif (responseFormat) {\n\t\t\tconst normalized = typeof responseFormat === 'string' ? responseFormat.toLowerCase() : '';\n\t\t\tif (normalized === 'json' || normalized === 'json_object') {\n\t\t\t\tpayload.response_format = { type: 'json_object' };\n\t\t\t}\n\t\t\telse if (typeof responseFormat === 'object') {\n\t\t\t\tpayload.response_format = responseFormat;\n\t\t\t}\n\t\t\telse if (normalized && normalized !== 'text') {\n\t\t\t\tpayload.response_format = { type: normalized };\n\t\t\t}\n\t\t}\n\t\tif (Number.isFinite(this.config.maxTokens)) {\n\t\t\tpayload.max_completion_tokens = this.normalizeTokenCount(this.config.maxTokens);\n\t\t}\n\n\t\tconst runRequest = async (model: string): Promise<OpenAIChatResult & { responseText: string }> => {\n\t\t\tconst timeoutMs = options?.timeoutMs;\n\t\t\tconst controller = timeoutMs ? new AbortController() : null;\n\t\t\tconst timeoutId = controller ? setTimeout(() => controller.abort(), timeoutMs) : null;\n\t\t\tlet response: Response;\n\t\t\tlet requestId = '';\n\t\t\ttry {\n\t\t\t\tresponse = await fetch(`${baseUrl}/chat/completions`, {\n\t\t\t\t\tmethod: 'POST',\n\t\t\t\t\theaders: {\n\t\t\t\t\t\t'Content-Type': 'application/json',\n\t\t\t\t\t\tAuthorization: `Bearer ${this.config.apiKey}`\n\t\t\t\t\t},\n\t\t\t\t\tbody: JSON.stringify({ ...payload, model }),\n\t\t\t\t\tsignal: controller?.signal\n\t\t\t\t});\n\t\t\t\trequestId = response.headers.get('x-request-id') || '';\n\t\t\t}\n\t\t\tcatch (error) {\n\t\t\t\tif (controller?.signal?.aborted) {\n\t\t\t\t\tthrow new Error('AI request timed out.');\n\t\t\t\t}\n\t\t\t\tthrow error;\n\t\t\t}\n\t\t\tfinally {\n\t\t\t\tif (timeoutId) {\n\t\t\t\t\tclearTimeout(timeoutId);\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tconst responseText = await response.text();\n\t\t\tif (!response.ok) {\n\t\t\t\tconst requestError = new Error(`AI request failed (${response.status}).`);\n\t\t\t\t(requestError as any).status = response.status;\n\t\t\t\t(requestError as any).raw = responseText;\n\t\t\t\tthrow requestError;\n\t\t\t}\n\n\t\t\tconst data = responseText ? JSON.parse(responseText) : {};\n\t\t\tconst message = data?.choices?.[0]?.message || {};\n\t\t\tconst content = this.extractContent(message);\n\t\t\tif (!content) {\n\t\t\t\tconst refusal = message?.refusal ? ` Refusal: ${message.refusal}` : '';\n\t\t\t\tthrow new Error(`AI returned no completion content.${refusal}`);\n\t\t\t}\n\n\t\t\tconst usage = this.extractUsage(data?.usage);\n\t\t\treturn {\n\t\t\t\tcontent,\n\t\t\t\tusage,\n\t\t\t\tmodel: data?.model || model,\n\t\t\t\trequestId: data?.id || requestId,\n\t\t\t\tresponseText\n\t\t\t};\n\t\t};\n\n\t\tconst runWithRetry = async (model: string): Promise<OpenAIChatResult & { responseText: string }> => {\n\t\t\tlet attempt = 0;\n\t\t\tlet lastError: unknown = null;\n\t\t\twhile (attempt <= maxRetries) {\n\t\t\t\ttry {\n\t\t\t\t\treturn await runRequest(model);\n\t\t\t\t}\n\t\t\t\tcatch (error) {\n\t\t\t\t\tlastError = error;\n\t\t\t\t\tif (attempt >= maxRetries || !this.isRetryableError(error)) {\n\t\t\t\t\t\tbreak;\n\t\t\t\t\t}\n\t\t\t\t\tconst delay = retryDelayMs * Math.pow(2, attempt);\n\t\t\t\t\tawait this.sleep(delay);\n\t\t\t\t\tattempt += 1;\n\t\t\t\t}\n\t\t\t}\n\t\t\tthrow lastError;\n\t\t};\n\n\t\ttry {\n\t\t\tconst result = await runWithRetry(primaryModel);\n\t\t\treturn {\n\t\t\t\tcontent: result.content,\n\t\t\t\tusage: result.usage,\n\t\t\t\tmodel: result.model,\n\t\t\t\trequestId: result.requestId\n\t\t\t};\n\t\t}\n\t\tcatch (error) {\n\t\t\tif (!fallbackModel || fallbackModel === primaryModel) {\n\t\t\t\tthrow error;\n\t\t\t}\n\t\t\tconst result = await runWithRetry(fallbackModel);\n\t\t\treturn {\n\t\t\t\tcontent: result.content,\n\t\t\t\tusage: result.usage,\n\t\t\t\tmodel: result.model,\n\t\t\t\trequestId: result.requestId\n\t\t\t};\n\t\t}\n\t}\n\n\tprivate extractContent(message: any): string {\n\t\tif (!message) {\n\t\t\treturn '';\n\t\t}\n\t\tconst content = message.content;\n\t\tif (typeof content === 'string') {\n\t\t\treturn content.trim();\n\t\t}\n\t\tif (Array.isArray(content)) {\n\t\t\treturn content\n\t\t\t\t.map((part) => {\n\t\t\t\t\tif (!part) {\n\t\t\t\t\t\treturn '';\n\t\t\t\t\t}\n\t\t\t\t\tif (typeof part === 'string') {\n\t\t\t\t\t\treturn part;\n\t\t\t\t\t}\n\t\t\t\t\tif (typeof part?.text === 'string') {\n\t\t\t\t\t\treturn part.text;\n\t\t\t\t\t}\n\t\t\t\t\tif (typeof part?.content === 'string') {\n\t\t\t\t\t\treturn part.content;\n\t\t\t\t\t}\n\t\t\t\t\treturn '';\n\t\t\t\t})\n\t\t\t\t.join('')\n\t\t\t\t.trim();\n\t\t}\n\t\treturn '';\n\t}\n\n\tprivate extractUsage(usage: any): OpenAIUsageSummary | undefined {\n\t\tif (!usage) {\n\t\t\treturn undefined;\n\t\t}\n\t\tconst inputTokens = this.normalizeTokenValue(usage.prompt_tokens ?? usage.input_tokens);\n\t\tconst outputTokens = this.normalizeTokenValue(usage.completion_tokens ?? usage.output_tokens);\n\t\tconst totalTokens = this.normalizeTokenValue(usage.total_tokens ?? (inputTokens + outputTokens));\n\t\tif (!totalTokens && !inputTokens && !outputTokens) {\n\t\t\treturn undefined;\n\t\t}\n\t\treturn {\n\t\t\tinputTokens,\n\t\t\toutputTokens,\n\t\t\ttotalTokens\n\t\t};\n\t}\n\n\tprivate normalizeTokenValue(value: any): number {\n\t\tconst parsed = Number(value);\n\t\tif (!Number.isFinite(parsed) || parsed < 0) {\n\t\t\treturn 0;\n\t\t}\n\t\treturn round(parsed);\n\t}\n\n\tprivate normalizeTokenCount(value?: number): number {\n\t\tif (!Number.isFinite(value)) {\n\t\t\treturn 0;\n\t\t}\n\t\tconst rounded = round(value || 0);\n\t\treturn rounded < 0 ? 0 : rounded;\n\t}\n\n\tprivate normalizeRetryCount(value?: number): number {\n\t\tif (!Number.isFinite(value)) {\n\t\t\treturn 0;\n\t\t}\n\t\treturn Math.max(0, round(value || 0));\n\t}\n\n\tprivate normalizeRetryDelay(value?: number): number {\n\t\tif (!Number.isFinite(value)) {\n\t\t\treturn 750;\n\t\t}\n\t\treturn Math.max(250, round(value || 0));\n\t}\n\n\tprivate isRetryableError(error: any): boolean {\n\t\tconst message = error instanceof Error ? error.message.toLowerCase() : String(error || '').toLowerCase();\n\t\treturn message.includes('timeout') || message.includes('429') || message.includes('rate limit');\n\t}\n\n\tprivate async sleep(ms: number): Promise<void> {\n\t\tif (!ms) {\n\t\t\treturn;\n\t\t}\n\t\tawait sleepTimeout(ms);\n\t}\n}\n"]}
|
|
@@ -60,7 +60,7 @@ function run() {
|
|
|
60
60
|
}
|
|
61
61
|
data = worker_threads_1.workerData;
|
|
62
62
|
if (!data || typeof data.prompt !== 'string' || !data.config) {
|
|
63
|
-
worker_threads_1.parentPort.postMessage({ ok: false, error: 'Invalid
|
|
63
|
+
worker_threads_1.parentPort.postMessage({ ok: false, error: 'Invalid AI worker payload.' });
|
|
64
64
|
return [2 /*return*/];
|
|
65
65
|
}
|
|
66
66
|
_a.label = 1;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../src/workers/codex-runner.worker.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA,iDAAwD;AACxD,yDAAqF;AAiBrF,SAAe,GAAG;;;;;;oBACjB,IAAI,CAAC,2BAAU,EAAE,CAAC;wBACjB,sBAAO;oBACR,CAAC;oBAEK,IAAI,GAAG,2BAA8B,CAAC;oBAC5C,IAAI,CAAC,IAAI,IAAI,OAAO,IAAI,CAAC,MAAM,KAAK,QAAQ,IAAI,CAAC,IAAI,CAAC,MAAM,EAAE,CAAC;wBAC9D,2BAAU,CAAC,WAAW,CAAC,EAAE,EAAE,EAAE,KAAK,EAAE,KAAK,EAAE
|
|
1
|
+
{"version":3,"sources":["../../src/workers/codex-runner.worker.ts"],"names":[],"mappings":"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","file":"codex-runner.worker.js","sourcesContent":["import { parentPort, workerData } from 'worker_threads';\nimport { CodexClient, CodexConfig, CodexRunOptions } from '../services/codex-client';\n\ntype CodexWorkerInput = {\n\tprompt: string;\n\trunOptions?: CodexRunOptions;\n\tconfig: CodexConfig;\n\tstreamStatus?: boolean;\n};\n\ntype CodexWorkerMessage = {\n\tok: boolean;\n\ttype?: 'stream' | 'final';\n\tresult?: string;\n\terror?: string;\n\tstatus?: string;\n};\n\nasync function run(): Promise<void> {\n\tif (!parentPort) {\n\t\treturn;\n\t}\n\n\tconst data = workerData as CodexWorkerInput;\n\tif (!data || typeof data.prompt !== 'string' || !data.config) {\n\t\tparentPort.postMessage({ ok: false, error: 'Invalid AI worker payload.' } as CodexWorkerMessage);\n\t\treturn;\n\t}\n\n\ttry {\n\t\tconst client = new CodexClient(data.config);\n\t\tconst runOptions = data.runOptions || {};\n\t\tconst streamStatusEnabled = data.streamStatus === true;\n\t\tconst emitStatus = streamStatusEnabled ? createStreamStatusEmitter(parentPort) : null;\n\t\tconst runOptionsWithStream = streamStatusEnabled\n\t\t\t? {\n\t\t\t\t...runOptions,\n\t\t\t\tonStreamEvent: (event: any) => {\n\t\t\t\t\tconst status = deriveStreamStatus(event);\n\t\t\t\t\tif (status && emitStatus) {\n\t\t\t\t\t\temitStatus(status);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t\t: runOptions;\n\t\tconst result = await client.run(data.prompt, runOptionsWithStream);\n\t\tparentPort.postMessage({ ok: true, result, type: 'final' } as CodexWorkerMessage);\n\t}\n\tcatch (error) {\n\t\tconst message = error instanceof Error ? error.message : String(error || 'Unknown error');\n\t\tparentPort.postMessage({ ok: false, error: message, type: 'final' } as CodexWorkerMessage);\n\t}\n}\n\nfunction deriveStreamStatus(event: any): string | null {\n\tif (!event || !event.type) {\n\t\treturn null;\n\t}\n\tif (event.type === 'thread.started' || event.type === 'turn.started') {\n\t\treturn 'Reviewing request';\n\t}\n\tif (event.type === 'turn.completed') {\n\t\treturn 'Drafting response';\n\t}\n\tif (event.type === 'item.started' || event.type === 'item.updated' || event.type === 'item.completed') {\n\t\tconst itemType = String(event?.item?.type || '').trim().toLowerCase();\n\t\tif (!itemType) {\n\t\t\treturn null;\n\t\t}\n\t\tif (itemType === 'mcp_tool_call') {\n\t\t\treturn 'Calling tool';\n\t\t}\n\t\tif (itemType === 'command_execution') {\n\t\t\treturn deriveCommandExecutionStatus(event?.item?.command);\n\t\t}\n\t\tif (itemType === 'web_search') {\n\t\t\treturn 'Searching references';\n\t\t}\n\t\tif (itemType === 'file_change') {\n\t\t\treturn 'Drafting response';\n\t\t}\n\t\tif (itemType === 'agent_message') {\n\t\t\treturn 'Drafting response';\n\t\t}\n\t\tif (itemType === 'reasoning') {\n\t\t\treturn 'Analyzing';\n\t\t}\n\t}\n\treturn null;\n}\n\nfunction deriveCommandExecutionStatus(commandValue: any): string {\n\tconst command = String(commandValue || '').trim().toLowerCase();\n\tif (!command) {\n\t\treturn 'Running command';\n\t}\n\tif (/\\b(rg|grep|ripgrep|ag|ack)\\b/.test(command)) {\n\t\treturn 'Searching files';\n\t}\n\tif (/\\bfind\\b/.test(command)) {\n\t\treturn 'Finding files';\n\t}\n\tif (/\\b(cat|sed|awk|head|tail|less|more)\\b/.test(command)) {\n\t\treturn 'Opening files';\n\t}\n\tif (/\\b(ls|tree)\\b/.test(command)) {\n\t\treturn 'Scanning files';\n\t}\n\treturn 'Running command';\n}\n\nfunction createStreamStatusEmitter(port: any) {\n\tlet lastStatus = '';\n\tlet lastSentAt = 0;\n\treturn (status: string) => {\n\t\tconst trimmed = String(status || '').trim();\n\t\tif (!trimmed) {\n\t\t\treturn;\n\t\t}\n\t\tconst now = Date.now();\n\t\tif (trimmed === lastStatus && now - lastSentAt < 3000) {\n\t\t\treturn;\n\t\t}\n\t\tlastStatus = trimmed;\n\t\tlastSentAt = now;\n\t\tport.postMessage({ ok: true, type: 'stream', status: trimmed } as CodexWorkerMessage);\n\t};\n}\n\n// eslint-disable-next-line @typescript-eslint/no-floating-promises\nvoid (async () => {\n\ttry {\n\t\tawait run();\n\t}\n\tcatch (error) {\n\t\tif (!parentPort) {\n\t\t\treturn;\n\t\t}\n\t\tconst message = error instanceof Error ? error.message : String(error || 'Unknown error');\n\t\tparentPort.postMessage({ ok: false, error: message, type: 'final' } as CodexWorkerMessage);\n\t}\n})();\n"]}
|