@trishchuk/codex-mcp-tool 1.0.6 → 1.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.
- package/README.md +92 -16
- package/dist/constants.d.ts +64 -2
- package/dist/constants.d.ts.map +1 -1
- package/dist/constants.js +85 -31
- package/dist/constants.js.map +1 -1
- package/dist/index.js +28 -26
- package/dist/index.js.map +1 -1
- package/dist/tools/apply-diff.tool.d.ts +3 -0
- package/dist/tools/apply-diff.tool.d.ts.map +1 -0
- package/dist/tools/apply-diff.tool.js +52 -0
- package/dist/tools/apply-diff.tool.js.map +1 -0
- package/dist/tools/ask-codex.tool.d.ts.map +1 -1
- package/dist/tools/ask-codex.tool.js +171 -33
- package/dist/tools/ask-codex.tool.js.map +1 -1
- package/dist/tools/batch-codex.tool.d.ts +3 -0
- package/dist/tools/batch-codex.tool.d.ts.map +1 -0
- package/dist/tools/batch-codex.tool.js +134 -0
- package/dist/tools/batch-codex.tool.js.map +1 -0
- package/dist/tools/brainstorm.tool.d.ts.map +1 -1
- package/dist/tools/brainstorm.tool.js +62 -29
- package/dist/tools/brainstorm.tool.js.map +1 -1
- package/dist/tools/exec-codex.tool.d.ts +3 -0
- package/dist/tools/exec-codex.tool.d.ts.map +1 -0
- package/dist/tools/exec-codex.tool.js +46 -0
- package/dist/tools/exec-codex.tool.js.map +1 -0
- package/dist/tools/fetch-chunk.tool.d.ts.map +1 -1
- package/dist/tools/fetch-chunk.tool.js +12 -8
- package/dist/tools/fetch-chunk.tool.js.map +1 -1
- package/dist/tools/index.d.ts.map +1 -1
- package/dist/tools/index.js +4 -2
- package/dist/tools/index.js.map +1 -1
- package/dist/tools/registry.d.ts +3 -3
- package/dist/tools/registry.d.ts.map +1 -1
- package/dist/tools/registry.js +9 -5
- package/dist/tools/registry.js.map +1 -1
- package/dist/tools/review-codex.tool.d.ts +3 -0
- package/dist/tools/review-codex.tool.d.ts.map +1 -0
- package/dist/tools/review-codex.tool.js +91 -0
- package/dist/tools/review-codex.tool.js.map +1 -0
- package/dist/tools/simple-tools.d.ts +1 -0
- package/dist/tools/simple-tools.d.ts.map +1 -1
- package/dist/tools/simple-tools.js +42 -11
- package/dist/tools/simple-tools.js.map +1 -1
- package/dist/tools/test-tool.example.d.ts.map +1 -1
- package/dist/tools/test-tool.example.js +12 -10
- package/dist/tools/test-tool.example.js.map +1 -1
- package/dist/tools/timeout-test.tool.js +5 -5
- package/dist/tools/timeout-test.tool.js.map +1 -1
- package/dist/utils/changeModeChunker.d.ts.map +1 -1
- package/dist/utils/changeModeChunker.js +10 -6
- package/dist/utils/changeModeChunker.js.map +1 -1
- package/dist/utils/changeModeParser.d.ts.map +1 -1
- package/dist/utils/changeModeParser.js.map +1 -1
- package/dist/utils/changeModeRunner.d.ts.map +1 -1
- package/dist/utils/changeModeRunner.js +17 -11
- package/dist/utils/changeModeRunner.js.map +1 -1
- package/dist/utils/changeModeTranslator.d.ts.map +1 -1
- package/dist/utils/changeModeTranslator.js +5 -2
- package/dist/utils/changeModeTranslator.js.map +1 -1
- package/dist/utils/chunkCache.d.ts.map +1 -1
- package/dist/utils/chunkCache.js +6 -4
- package/dist/utils/chunkCache.js.map +1 -1
- package/dist/utils/codexCommandBuilder.d.ts +80 -0
- package/dist/utils/codexCommandBuilder.d.ts.map +1 -0
- package/dist/utils/codexCommandBuilder.js +259 -0
- package/dist/utils/codexCommandBuilder.js.map +1 -0
- package/dist/utils/codexExecutor.d.ts +19 -0
- package/dist/utils/codexExecutor.d.ts.map +1 -1
- package/dist/utils/codexExecutor.js +49 -57
- package/dist/utils/codexExecutor.js.map +1 -1
- package/dist/utils/commandExecutor.d.ts.map +1 -1
- package/dist/utils/commandExecutor.js +25 -17
- package/dist/utils/commandExecutor.js.map +1 -1
- package/dist/utils/fibonacci.d.ts +2 -0
- package/dist/utils/fibonacci.d.ts.map +1 -0
- package/dist/utils/fibonacci.js +17 -0
- package/dist/utils/fibonacci.js.map +1 -0
- package/dist/utils/gitHelper.d.ts +20 -0
- package/dist/utils/gitHelper.d.ts.map +1 -0
- package/dist/utils/gitHelper.js +66 -0
- package/dist/utils/gitHelper.js.map +1 -0
- package/dist/utils/logger.d.ts +2 -1
- package/dist/utils/logger.d.ts.map +1 -1
- package/dist/utils/logger.js +21 -15
- package/dist/utils/logger.js.map +1 -1
- package/dist/utils/modelDetection.d.ts +45 -0
- package/dist/utils/modelDetection.d.ts.map +1 -0
- package/dist/utils/modelDetection.js +148 -0
- package/dist/utils/modelDetection.js.map +1 -0
- package/dist/utils/outputParser.d.ts +26 -0
- package/dist/utils/outputParser.d.ts.map +1 -0
- package/dist/utils/outputParser.js +174 -0
- package/dist/utils/outputParser.js.map +1 -0
- package/dist/utils/reviewParser.d.ts +28 -0
- package/dist/utils/reviewParser.d.ts.map +1 -0
- package/dist/utils/reviewParser.js +87 -0
- package/dist/utils/reviewParser.js.map +1 -0
- package/dist/utils/versionDetection.d.ts +108 -0
- package/dist/utils/versionDetection.d.ts.map +1 -0
- package/dist/utils/versionDetection.js +160 -0
- package/dist/utils/versionDetection.js.map +1 -0
- package/dist/utils/workingDirResolver.d.ts +52 -0
- package/dist/utils/workingDirResolver.d.ts.map +1 -0
- package/dist/utils/workingDirResolver.js +217 -0
- package/dist/utils/workingDirResolver.js.map +1 -0
- package/package.json +8 -3
|
@@ -0,0 +1,259 @@
|
|
|
1
|
+
import { CLI } from '../constants.js';
|
|
2
|
+
import { Logger } from './logger.js';
|
|
3
|
+
import { resolveWorkingDirectory } from './workingDirResolver.js';
|
|
4
|
+
import { getModelWithFallback } from './modelDetection.js';
|
|
5
|
+
import { supportsNativeSearch, supportsAddDir, supportsToolTokenLimit, } from './versionDetection.js';
|
|
6
|
+
import { writeFileSync, unlinkSync } from 'fs';
|
|
7
|
+
import { tmpdir } from 'os';
|
|
8
|
+
import { join } from 'path';
|
|
9
|
+
import { randomBytes } from 'crypto';
|
|
10
|
+
/**
|
|
11
|
+
* Builder class for constructing Codex CLI commands
|
|
12
|
+
* Eliminates code duplication between executeCodexCLI and executeCodex
|
|
13
|
+
*/
|
|
14
|
+
export class CodexCommandBuilder {
|
|
15
|
+
args = [];
|
|
16
|
+
/**
|
|
17
|
+
* Build a complete Codex CLI command with all options
|
|
18
|
+
* @param prompt User prompt
|
|
19
|
+
* @param options Command options
|
|
20
|
+
* @returns Build result with args, temp file, and final prompt
|
|
21
|
+
*/
|
|
22
|
+
async build(prompt, options) {
|
|
23
|
+
this.args = []; // Reset args for fresh build
|
|
24
|
+
// 1. Validation
|
|
25
|
+
this.validateOptions(options);
|
|
26
|
+
// 2. Model selection with fallback
|
|
27
|
+
await this.addModelArg(options?.model);
|
|
28
|
+
// 3. Safety controls (yolo, fullAuto, approval, sandbox)
|
|
29
|
+
this.addSafetyArgs(options);
|
|
30
|
+
// 4. Working directory
|
|
31
|
+
this.addWorkingDir(options, prompt);
|
|
32
|
+
// 5. OSS mode
|
|
33
|
+
if (options?.oss) {
|
|
34
|
+
this.args.push(CLI.FLAGS.OSS);
|
|
35
|
+
}
|
|
36
|
+
// 6. Search + Feature flags (shared 69-line logic)
|
|
37
|
+
await this.addSearchAndFeatures(options);
|
|
38
|
+
// 7. Disable features
|
|
39
|
+
if (options?.disableFeatures && Array.isArray(options.disableFeatures)) {
|
|
40
|
+
for (const feature of options.disableFeatures) {
|
|
41
|
+
this.args.push(CLI.FLAGS.DISABLE, feature);
|
|
42
|
+
}
|
|
43
|
+
}
|
|
44
|
+
// 8. Advanced features (addDirs + tokenLimit)
|
|
45
|
+
await this.addAdvancedFeatures(options);
|
|
46
|
+
// 9. Configuration
|
|
47
|
+
if (options?.config) {
|
|
48
|
+
if (typeof options.config === 'string') {
|
|
49
|
+
this.args.push(CLI.FLAGS.CONFIG, options.config);
|
|
50
|
+
}
|
|
51
|
+
else {
|
|
52
|
+
const configStr = Object.entries(options.config)
|
|
53
|
+
.map(([k, v]) => `${k}=${v}`)
|
|
54
|
+
.join(',');
|
|
55
|
+
this.args.push(CLI.FLAGS.CONFIG, configStr);
|
|
56
|
+
}
|
|
57
|
+
}
|
|
58
|
+
// 10. Profile
|
|
59
|
+
if (options?.profile) {
|
|
60
|
+
this.args.push(CLI.FLAGS.PROFILE, options.profile);
|
|
61
|
+
}
|
|
62
|
+
// 11. Images
|
|
63
|
+
if (options?.image) {
|
|
64
|
+
const images = Array.isArray(options.image) ? options.image : [options.image];
|
|
65
|
+
for (const img of images) {
|
|
66
|
+
this.args.push(CLI.FLAGS.IMAGE, img);
|
|
67
|
+
}
|
|
68
|
+
}
|
|
69
|
+
// 12. Exec mode
|
|
70
|
+
if (options?.useExec !== false) {
|
|
71
|
+
this.args.push('exec');
|
|
72
|
+
}
|
|
73
|
+
// 13. Handle prompt (concise mode, stdin for large prompts)
|
|
74
|
+
return this.handlePrompt(prompt, options);
|
|
75
|
+
}
|
|
76
|
+
/**
|
|
77
|
+
* Validate options for conflicts
|
|
78
|
+
*/
|
|
79
|
+
validateOptions(options) {
|
|
80
|
+
if (options?.approvalPolicy && options?.yolo) {
|
|
81
|
+
throw new Error('Cannot use both yolo and approvalPolicy');
|
|
82
|
+
}
|
|
83
|
+
if (options?.sandboxMode && options?.yolo) {
|
|
84
|
+
throw new Error('Cannot use both yolo and sandboxMode');
|
|
85
|
+
}
|
|
86
|
+
}
|
|
87
|
+
/**
|
|
88
|
+
* Add model argument with fallback chain
|
|
89
|
+
*/
|
|
90
|
+
async addModelArg(model) {
|
|
91
|
+
const selectedModel = await getModelWithFallback(model);
|
|
92
|
+
this.args.push(CLI.FLAGS.MODEL, selectedModel);
|
|
93
|
+
if (model && model !== selectedModel) {
|
|
94
|
+
Logger.warn(`Requested model '${model}' not available, using fallback: '${selectedModel}'`);
|
|
95
|
+
}
|
|
96
|
+
else {
|
|
97
|
+
Logger.debug(`Using model: ${selectedModel}`);
|
|
98
|
+
}
|
|
99
|
+
}
|
|
100
|
+
/**
|
|
101
|
+
* Add safety control arguments (yolo, fullAuto, approval, sandbox)
|
|
102
|
+
*/
|
|
103
|
+
addSafetyArgs(options) {
|
|
104
|
+
if (options?.yolo) {
|
|
105
|
+
this.args.push(CLI.FLAGS.YOLO);
|
|
106
|
+
}
|
|
107
|
+
else if (options?.fullAuto) {
|
|
108
|
+
this.args.push(CLI.FLAGS.FULL_AUTO);
|
|
109
|
+
}
|
|
110
|
+
else {
|
|
111
|
+
// Approval policy
|
|
112
|
+
if (options?.approvalPolicy) {
|
|
113
|
+
this.args.push(CLI.FLAGS.ASK_FOR_APPROVAL, options.approvalPolicy);
|
|
114
|
+
}
|
|
115
|
+
else if (options?.approval) {
|
|
116
|
+
this.args.push(CLI.FLAGS.APPROVAL, options.approval);
|
|
117
|
+
}
|
|
118
|
+
// Sandbox mode
|
|
119
|
+
if (options?.sandboxMode) {
|
|
120
|
+
this.args.push(CLI.FLAGS.SANDBOX_MODE, options.sandboxMode);
|
|
121
|
+
}
|
|
122
|
+
else if (options?.search || options?.oss) {
|
|
123
|
+
// Auto-enable workspace-write for search/oss if no sandbox specified
|
|
124
|
+
Logger.debug('Search/OSS enabled: auto-setting sandbox to workspace-write for network access');
|
|
125
|
+
this.args.push(CLI.FLAGS.SANDBOX_MODE, 'workspace-write');
|
|
126
|
+
}
|
|
127
|
+
}
|
|
128
|
+
}
|
|
129
|
+
/**
|
|
130
|
+
* Add working directory argument
|
|
131
|
+
*/
|
|
132
|
+
addWorkingDir(options, prompt) {
|
|
133
|
+
const resolvedWorkingDir = resolveWorkingDirectory({
|
|
134
|
+
workingDir: options?.workingDir || options?.cd,
|
|
135
|
+
prompt: prompt,
|
|
136
|
+
});
|
|
137
|
+
if (resolvedWorkingDir) {
|
|
138
|
+
// Use appropriate flag based on mode
|
|
139
|
+
const flag = options?.cd !== undefined ? CLI.FLAGS.CD : CLI.FLAGS.WORKING_DIR;
|
|
140
|
+
this.args.push(flag, resolvedWorkingDir);
|
|
141
|
+
Logger.debug(`Resolved working directory: ${resolvedWorkingDir}`);
|
|
142
|
+
}
|
|
143
|
+
}
|
|
144
|
+
/**
|
|
145
|
+
* Add search and feature flags (shared 69-line logic from both functions)
|
|
146
|
+
*/
|
|
147
|
+
async addSearchAndFeatures(options) {
|
|
148
|
+
// Web Search - Dual-flag approach for backward compatibility (v1.3.0+)
|
|
149
|
+
if (options?.search) {
|
|
150
|
+
// Check if native --search flag is supported (Codex CLI v0.52.0+)
|
|
151
|
+
const hasNativeSearch = await supportsNativeSearch();
|
|
152
|
+
if (hasNativeSearch) {
|
|
153
|
+
// Use native --search flag for newer versions
|
|
154
|
+
this.args.push(CLI.FLAGS.SEARCH);
|
|
155
|
+
Logger.debug('Using native --search flag (Codex CLI v0.52.0+)');
|
|
156
|
+
}
|
|
157
|
+
else {
|
|
158
|
+
Logger.debug('Native --search flag not supported, falling back to web_search_request feature flag');
|
|
159
|
+
}
|
|
160
|
+
// Always add feature flag for backward compatibility
|
|
161
|
+
const enableFeatures = [...(options?.enableFeatures || [])];
|
|
162
|
+
if (!enableFeatures.includes('web_search_request')) {
|
|
163
|
+
enableFeatures.push('web_search_request');
|
|
164
|
+
}
|
|
165
|
+
// Add all features to args
|
|
166
|
+
for (const feature of enableFeatures) {
|
|
167
|
+
this.args.push(CLI.FLAGS.ENABLE, feature);
|
|
168
|
+
}
|
|
169
|
+
}
|
|
170
|
+
else {
|
|
171
|
+
// Normal feature flag handling when search is not enabled
|
|
172
|
+
const enableFeatures = [...(options?.enableFeatures || [])];
|
|
173
|
+
for (const feature of enableFeatures) {
|
|
174
|
+
this.args.push(CLI.FLAGS.ENABLE, feature);
|
|
175
|
+
}
|
|
176
|
+
}
|
|
177
|
+
}
|
|
178
|
+
/**
|
|
179
|
+
* Add advanced features (addDirs, toolOutputTokenLimit)
|
|
180
|
+
*/
|
|
181
|
+
async addAdvancedFeatures(options) {
|
|
182
|
+
// Additional writable directories (v1.3.0+, requires Codex CLI v0.59.0+)
|
|
183
|
+
if (options?.addDirs && Array.isArray(options.addDirs)) {
|
|
184
|
+
const hasAddDir = await supportsAddDir();
|
|
185
|
+
if (hasAddDir) {
|
|
186
|
+
for (const dir of options.addDirs) {
|
|
187
|
+
this.args.push(CLI.FLAGS.ADD_DIR, dir);
|
|
188
|
+
}
|
|
189
|
+
Logger.debug('Using --add-dir flag (Codex CLI v0.59.0+)');
|
|
190
|
+
}
|
|
191
|
+
else {
|
|
192
|
+
Logger.warn('Additional directories specified but --add-dir flag not supported (requires Codex CLI v0.59.0+). Ignoring addDirs parameter.');
|
|
193
|
+
}
|
|
194
|
+
}
|
|
195
|
+
// Tool output token limit (v1.3.0+, requires Codex CLI v0.59.0+)
|
|
196
|
+
if (options?.toolOutputTokenLimit) {
|
|
197
|
+
const hasTokenLimit = await supportsToolTokenLimit();
|
|
198
|
+
if (hasTokenLimit) {
|
|
199
|
+
this.args.push(CLI.FLAGS.CONFIG, `tool_output_token_limit=${options.toolOutputTokenLimit}`);
|
|
200
|
+
Logger.debug('Using tool_output_token_limit config (Codex CLI v0.59.0+)');
|
|
201
|
+
}
|
|
202
|
+
else {
|
|
203
|
+
Logger.warn('Tool output token limit specified but not supported (requires Codex CLI v0.59.0+). Ignoring toolOutputTokenLimit parameter.');
|
|
204
|
+
}
|
|
205
|
+
}
|
|
206
|
+
}
|
|
207
|
+
/**
|
|
208
|
+
* Handle prompt with concise mode and stdin for large prompts
|
|
209
|
+
*/
|
|
210
|
+
handlePrompt(prompt, options) {
|
|
211
|
+
let finalPrompt = prompt;
|
|
212
|
+
let tempFile;
|
|
213
|
+
// Add conciseness instruction if requested
|
|
214
|
+
if (options?.concisePrompt) {
|
|
215
|
+
finalPrompt = `Please provide a focused, concise response without unnecessary elaboration. ${prompt}`;
|
|
216
|
+
}
|
|
217
|
+
// Check if prompt is too long for command line (OS dependent, ~100KB is safe)
|
|
218
|
+
const MAX_COMMAND_LINE_LENGTH = 100000;
|
|
219
|
+
const useStdin = options?.useStdinForLongPrompts !== false && finalPrompt.length > MAX_COMMAND_LINE_LENGTH;
|
|
220
|
+
if (useStdin) {
|
|
221
|
+
// Create temporary file for large prompts
|
|
222
|
+
const tempFileName = `codex-prompt-${randomBytes(8).toString('hex')}.txt`;
|
|
223
|
+
const tempFilePath = join(tmpdir(), tempFileName);
|
|
224
|
+
try {
|
|
225
|
+
writeFileSync(tempFilePath, finalPrompt, 'utf8');
|
|
226
|
+
Logger.debug(`Prompt too long (${finalPrompt.length} chars), using temp file: ${tempFilePath}`);
|
|
227
|
+
// Use stdin redirection via special prompt format
|
|
228
|
+
this.args.push(`@${tempFilePath}`);
|
|
229
|
+
tempFile = tempFilePath;
|
|
230
|
+
}
|
|
231
|
+
catch (error) {
|
|
232
|
+
Logger.warn(`Failed to create temp file for large prompt: ${error}. Proceeding with direct prompt.`);
|
|
233
|
+
this.args.push(finalPrompt);
|
|
234
|
+
}
|
|
235
|
+
}
|
|
236
|
+
else {
|
|
237
|
+
// Normal prompt handling
|
|
238
|
+
this.args.push(finalPrompt);
|
|
239
|
+
}
|
|
240
|
+
return {
|
|
241
|
+
args: this.args,
|
|
242
|
+
tempFile,
|
|
243
|
+
finalPrompt,
|
|
244
|
+
};
|
|
245
|
+
}
|
|
246
|
+
/**
|
|
247
|
+
* Cleanup temporary file if created
|
|
248
|
+
*/
|
|
249
|
+
static cleanupTempFile(tempFile) {
|
|
250
|
+
try {
|
|
251
|
+
unlinkSync(tempFile);
|
|
252
|
+
Logger.debug(`Cleaned up temp file: ${tempFile}`);
|
|
253
|
+
}
|
|
254
|
+
catch (error) {
|
|
255
|
+
Logger.warn(`Failed to cleanup temp file ${tempFile}:`, error);
|
|
256
|
+
}
|
|
257
|
+
}
|
|
258
|
+
}
|
|
259
|
+
//# sourceMappingURL=codexCommandBuilder.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"codexCommandBuilder.js","sourceRoot":"","sources":["../../src/utils/codexCommandBuilder.ts"],"names":[],"mappings":"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"}
|
|
@@ -15,15 +15,34 @@ export interface CodexExecOptions {
|
|
|
15
15
|
readonly fullAuto?: boolean;
|
|
16
16
|
readonly approvalPolicy?: ApprovalPolicy;
|
|
17
17
|
readonly sandboxMode?: SandboxMode;
|
|
18
|
+
readonly approval?: string;
|
|
18
19
|
readonly yolo?: boolean;
|
|
19
20
|
readonly cd?: string;
|
|
21
|
+
readonly workingDir?: string;
|
|
20
22
|
readonly timeoutMs?: number;
|
|
23
|
+
readonly timeout?: number;
|
|
21
24
|
readonly maxOutputBytes?: number;
|
|
22
25
|
readonly retry?: RetryOptions;
|
|
23
26
|
readonly useStdinForLongPrompts?: boolean;
|
|
27
|
+
readonly image?: string | string[];
|
|
28
|
+
readonly config?: string | Record<string, any>;
|
|
29
|
+
readonly profile?: string;
|
|
30
|
+
readonly useExec?: boolean;
|
|
31
|
+
readonly search?: boolean;
|
|
32
|
+
readonly oss?: boolean;
|
|
33
|
+
readonly enableFeatures?: string[];
|
|
34
|
+
readonly disableFeatures?: string[];
|
|
35
|
+
readonly addDirs?: string[];
|
|
36
|
+
readonly toolOutputTokenLimit?: number;
|
|
24
37
|
}
|
|
25
38
|
/**
|
|
26
39
|
* Execute Codex CLI with enhanced error handling and memory efficiency
|
|
27
40
|
*/
|
|
28
41
|
export declare function executeCodexCLI(prompt: string, options?: CodexExecOptions, onProgress?: (newOutput: string) => void): Promise<string>;
|
|
42
|
+
/**
|
|
43
|
+
* High-level executeCodex function with comprehensive options support
|
|
44
|
+
*/
|
|
45
|
+
export declare function executeCodex(prompt: string, options?: CodexExecOptions & {
|
|
46
|
+
[key: string]: any;
|
|
47
|
+
}, onProgress?: (newOutput: string) => void): Promise<string>;
|
|
29
48
|
//# sourceMappingURL=codexExecutor.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"codexExecutor.d.ts","sourceRoot":"","sources":["../../src/utils/codexExecutor.ts"],"names":[],"mappings":"AAAA,OAAO,
|
|
1
|
+
{"version":3,"file":"codexExecutor.d.ts","sourceRoot":"","sources":["../../src/utils/codexExecutor.ts"],"names":[],"mappings":"AAAA,OAAO,EAA0B,YAAY,EAAE,MAAM,sBAAsB,CAAC;AAM5E,oBAAY,cAAc;IACxB,KAAK,UAAU;IACf,SAAS,eAAe;IACxB,SAAS,eAAe;IACxB,SAAS,cAAc;CACxB;AAED,oBAAY,WAAW;IACrB,QAAQ,cAAc;IACtB,cAAc,oBAAoB;IAClC,gBAAgB,uBAAuB;CACxC;AAED,MAAM,WAAW,gBAAgB;IAC/B,QAAQ,CAAC,KAAK,CAAC,EAAE,MAAM,CAAC;IACxB,QAAQ,CAAC,QAAQ,CAAC,EAAE,OAAO,CAAC;IAC5B,QAAQ,CAAC,cAAc,CAAC,EAAE,cAAc,CAAC;IACzC,QAAQ,CAAC,WAAW,CAAC,EAAE,WAAW,CAAC;IACnC,QAAQ,CAAC,QAAQ,CAAC,EAAE,MAAM,CAAC;IAC3B,QAAQ,CAAC,IAAI,CAAC,EAAE,OAAO,CAAC;IACxB,QAAQ,CAAC,EAAE,CAAC,EAAE,MAAM,CAAC;IACrB,QAAQ,CAAC,UAAU,CAAC,EAAE,MAAM,CAAC;IAC7B,QAAQ,CAAC,SAAS,CAAC,EAAE,MAAM,CAAC;IAC5B,QAAQ,CAAC,OAAO,CAAC,EAAE,MAAM,CAAC;IAC1B,QAAQ,CAAC,cAAc,CAAC,EAAE,MAAM,CAAC;IACjC,QAAQ,CAAC,KAAK,CAAC,EAAE,YAAY,CAAC;IAC9B,QAAQ,CAAC,sBAAsB,CAAC,EAAE,OAAO,CAAC;IAC1C,QAAQ,CAAC,KAAK,CAAC,EAAE,MAAM,GAAG,MAAM,EAAE,CAAC;IACnC,QAAQ,CAAC,MAAM,CAAC,EAAE,MAAM,GAAG,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC;IAC/C,QAAQ,CAAC,OAAO,CAAC,EAAE,MAAM,CAAC;IAC1B,QAAQ,CAAC,OAAO,CAAC,EAAE,OAAO,CAAC;IAC3B,QAAQ,CAAC,MAAM,CAAC,EAAE,OAAO,CAAC;IAC1B,QAAQ,CAAC,GAAG,CAAC,EAAE,OAAO,CAAC;IACvB,QAAQ,CAAC,cAAc,CAAC,EAAE,MAAM,EAAE,CAAC;IACnC,QAAQ,CAAC,eAAe,CAAC,EAAE,MAAM,EAAE,CAAC;IAEpC,QAAQ,CAAC,OAAO,CAAC,EAAE,MAAM,EAAE,CAAC;IAC5B,QAAQ,CAAC,oBAAoB,CAAC,EAAE,MAAM,CAAC;CACxC;AAED;;GAEG;AACH,wBAAsB,eAAe,CACnC,MAAM,EAAE,MAAM,EACd,OAAO,CAAC,EAAE,gBAAgB,EAC1B,UAAU,CAAC,EAAE,CAAC,SAAS,EAAE,MAAM,KAAK,IAAI,GACvC,OAAO,CAAC,MAAM,CAAC,CA0CjB;AAED;;GAEG;AACH,wBAAsB,YAAY,CAChC,MAAM,EAAE,MAAM,EACd,OAAO,CAAC,EAAE,gBAAgB,GAAG;IAAE,CAAC,GAAG,EAAE,MAAM,GAAG,GAAG,CAAA;CAAE,EACnD,UAAU,CAAC,EAAE,CAAC,SAAS,EAAE,MAAM,KAAK,IAAI,GACvC,OAAO,CAAC,MAAM,CAAC,CAgDjB"}
|
|
@@ -1,10 +1,7 @@
|
|
|
1
1
|
import { executeCommandDetailed } from './commandExecutor.js';
|
|
2
2
|
import { Logger } from './logger.js';
|
|
3
3
|
import { CLI } from '../constants.js';
|
|
4
|
-
import {
|
|
5
|
-
import { tmpdir } from 'os';
|
|
6
|
-
import { join } from 'path';
|
|
7
|
-
import { randomBytes } from 'crypto';
|
|
4
|
+
import { CodexCommandBuilder } from './codexCommandBuilder.js';
|
|
8
5
|
// Type-safe enums
|
|
9
6
|
export var ApprovalPolicy;
|
|
10
7
|
(function (ApprovalPolicy) {
|
|
@@ -23,61 +20,19 @@ export var SandboxMode;
|
|
|
23
20
|
* Execute Codex CLI with enhanced error handling and memory efficiency
|
|
24
21
|
*/
|
|
25
22
|
export async function executeCodexCLI(prompt, options, onProgress) {
|
|
26
|
-
const
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
throw new Error('Cannot use both yolo and sandboxMode');
|
|
33
|
-
}
|
|
34
|
-
// Build command arguments
|
|
35
|
-
if (options?.yolo) {
|
|
36
|
-
args.push(CLI.FLAGS.YOLO);
|
|
37
|
-
}
|
|
38
|
-
else if (options?.fullAuto) {
|
|
39
|
-
args.push(CLI.FLAGS.FULL_AUTO);
|
|
40
|
-
}
|
|
41
|
-
else {
|
|
42
|
-
if (options?.approvalPolicy) {
|
|
43
|
-
args.push(CLI.FLAGS.ASK_FOR_APPROVAL, options.approvalPolicy);
|
|
44
|
-
}
|
|
45
|
-
if (options?.sandboxMode) {
|
|
46
|
-
args.push(CLI.FLAGS.SANDBOX_MODE, options.sandboxMode);
|
|
47
|
-
}
|
|
48
|
-
}
|
|
49
|
-
if (options?.model) {
|
|
50
|
-
args.push(CLI.FLAGS.MODEL, options.model);
|
|
51
|
-
}
|
|
52
|
-
if (options?.cd) {
|
|
53
|
-
args.push(CLI.FLAGS.CD, options.cd);
|
|
54
|
-
}
|
|
55
|
-
// Non-interactive run
|
|
56
|
-
args.push('exec');
|
|
57
|
-
args.push(CLI.FLAGS.SKIP_GIT_REPO_CHECK);
|
|
58
|
-
// Add conciseness instruction
|
|
59
|
-
const concisePrompt = `Please provide a focused, concise response without unnecessary elaboration. ${prompt}`;
|
|
60
|
-
// Check if prompt is too long for command line (OS dependent, ~100KB is safe)
|
|
61
|
-
const promptSizeBytes = Buffer.byteLength(concisePrompt, 'utf8');
|
|
62
|
-
const useStdin = options?.useStdinForLongPrompts !== false && promptSizeBytes > 100 * 1024;
|
|
63
|
-
let tempFile;
|
|
23
|
+
const builder = new CodexCommandBuilder();
|
|
24
|
+
const { args, tempFile } = await builder.build(prompt, {
|
|
25
|
+
...options,
|
|
26
|
+
concisePrompt: true,
|
|
27
|
+
useStdinForLongPrompts: options?.useStdinForLongPrompts !== false,
|
|
28
|
+
});
|
|
64
29
|
try {
|
|
65
|
-
if (useStdin) {
|
|
66
|
-
// Write prompt to temp file and pass via stdin redirect
|
|
67
|
-
tempFile = join(tmpdir(), `codex-prompt-${randomBytes(8).toString('hex')}.txt`);
|
|
68
|
-
writeFileSync(tempFile, concisePrompt, 'utf8');
|
|
69
|
-
args.push(`< ${tempFile}`);
|
|
70
|
-
Logger.debug(`Using temp file for large prompt (${promptSizeBytes} bytes)`);
|
|
71
|
-
}
|
|
72
|
-
else {
|
|
73
|
-
args.push(concisePrompt);
|
|
74
|
-
}
|
|
75
30
|
// Use detailed execution for better error handling
|
|
76
31
|
const result = await executeCommandDetailed(CLI.COMMANDS.CODEX, args, {
|
|
77
32
|
onProgress,
|
|
78
33
|
timeoutMs: options?.timeoutMs,
|
|
79
34
|
maxOutputBytes: options?.maxOutputBytes,
|
|
80
|
-
retry: options?.retry
|
|
35
|
+
retry: options?.retry,
|
|
81
36
|
});
|
|
82
37
|
if (!result.ok) {
|
|
83
38
|
// Try to salvage partial output if available
|
|
@@ -99,13 +54,50 @@ export async function executeCodexCLI(prompt, options, onProgress) {
|
|
|
99
54
|
finally {
|
|
100
55
|
// Clean up temp file
|
|
101
56
|
if (tempFile) {
|
|
102
|
-
|
|
103
|
-
|
|
57
|
+
CodexCommandBuilder.cleanupTempFile(tempFile);
|
|
58
|
+
}
|
|
59
|
+
}
|
|
60
|
+
}
|
|
61
|
+
/**
|
|
62
|
+
* High-level executeCodex function with comprehensive options support
|
|
63
|
+
*/
|
|
64
|
+
export async function executeCodex(prompt, options, onProgress) {
|
|
65
|
+
const builder = new CodexCommandBuilder();
|
|
66
|
+
const { args } = await builder.build(prompt, {
|
|
67
|
+
...options,
|
|
68
|
+
concisePrompt: false,
|
|
69
|
+
useStdinForLongPrompts: false,
|
|
70
|
+
});
|
|
71
|
+
try {
|
|
72
|
+
const timeoutMs = options?.timeout || options?.timeoutMs || 600000; // 10 minutes default
|
|
73
|
+
const result = await executeCommandDetailed(CLI.COMMANDS.CODEX, args, {
|
|
74
|
+
onProgress,
|
|
75
|
+
timeoutMs,
|
|
76
|
+
maxOutputBytes: options?.maxOutputBytes,
|
|
77
|
+
retry: options?.retry,
|
|
78
|
+
});
|
|
79
|
+
if (!result.ok) {
|
|
80
|
+
// Enhanced error handling with specific messages
|
|
81
|
+
const errorMessage = result.stderr || 'Unknown error';
|
|
82
|
+
if (errorMessage.includes('command not found') || errorMessage.includes('not found')) {
|
|
83
|
+
throw new Error('Codex CLI not found. Install with: npm install -g @openai/codex');
|
|
84
|
+
}
|
|
85
|
+
if (errorMessage.includes('authentication') || errorMessage.includes('unauthorized')) {
|
|
86
|
+
throw new Error('Authentication failed. Run "codex login" or set OPENAI_API_KEY');
|
|
104
87
|
}
|
|
105
|
-
|
|
106
|
-
|
|
88
|
+
if (errorMessage.includes('quota') || errorMessage.includes('rate limit')) {
|
|
89
|
+
throw new Error('Rate limit exceeded. Please wait and try again');
|
|
107
90
|
}
|
|
91
|
+
if (errorMessage.includes('permission') || errorMessage.includes('sandbox')) {
|
|
92
|
+
throw new Error(`Permission denied. Try adjusting sandbox mode or approval policy: ${errorMessage}`);
|
|
93
|
+
}
|
|
94
|
+
throw new Error(`Codex CLI failed: ${errorMessage}`);
|
|
108
95
|
}
|
|
96
|
+
return result.stdout;
|
|
97
|
+
}
|
|
98
|
+
catch (error) {
|
|
99
|
+
Logger.error('Codex execution failed:', error);
|
|
100
|
+
throw error;
|
|
109
101
|
}
|
|
110
102
|
}
|
|
111
103
|
//# sourceMappingURL=codexExecutor.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"codexExecutor.js","sourceRoot":"","sources":["../../src/utils/codexExecutor.ts"],"names":[],"mappings":"AAAA,OAAO,
|
|
1
|
+
{"version":3,"file":"codexExecutor.js","sourceRoot":"","sources":["../../src/utils/codexExecutor.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"commandExecutor.d.ts","sourceRoot":"","sources":["../../src/utils/commandExecutor.ts"],"names":[],"mappings":"AAGA,MAAM,WAAW,aAAa;IAC5B,EAAE,EAAE,OAAO,CAAC;IACZ,IAAI,EAAE,MAAM,GAAG,IAAI,CAAC;IACpB,MAAM,CAAC,EAAE,MAAM,CAAC,OAAO,CAAC;IACxB,MAAM,EAAE,MAAM,CAAC;IACf,MAAM,EAAE,MAAM,CAAC;IACf,QAAQ,EAAE,OAAO,CAAC;IAClB,aAAa,CAAC,EAAE,MAAM,CAAC;CACxB;AAED,MAAM,WAAW,YAAY;IAC3B,QAAQ,EAAE,MAAM,CAAC;IACjB,SAAS,EAAE,MAAM,CAAC;IAClB,OAAO,EAAE,CAAC,SAAS,GAAG,cAAc,GAAG,aAAa,CAAC,EAAE,CAAC;CACzD;AAED,MAAM,WAAW,cAAc;IAC7B,UAAU,CAAC,EAAE,CAAC,SAAS,EAAE,MAAM,KAAK,IAAI,CAAC;IACzC,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB,KAAK,CAAC,EAAE,YAAY,CAAC;CACtB;AAED;;GAEG;AACH,wBAAsB,sBAAsB,CAC1C,OAAO,EAAE,MAAM,EACf,IAAI,EAAE,MAAM,EAAE,EACd,OAAO,GAAE,cAAmB,GAC3B,OAAO,CAAC,aAAa,CAAC,
|
|
1
|
+
{"version":3,"file":"commandExecutor.d.ts","sourceRoot":"","sources":["../../src/utils/commandExecutor.ts"],"names":[],"mappings":"AAGA,MAAM,WAAW,aAAa;IAC5B,EAAE,EAAE,OAAO,CAAC;IACZ,IAAI,EAAE,MAAM,GAAG,IAAI,CAAC;IACpB,MAAM,CAAC,EAAE,MAAM,CAAC,OAAO,CAAC;IACxB,MAAM,EAAE,MAAM,CAAC;IACf,MAAM,EAAE,MAAM,CAAC;IACf,QAAQ,EAAE,OAAO,CAAC;IAClB,aAAa,CAAC,EAAE,MAAM,CAAC;CACxB;AAED,MAAM,WAAW,YAAY;IAC3B,QAAQ,EAAE,MAAM,CAAC;IACjB,SAAS,EAAE,MAAM,CAAC;IAClB,OAAO,EAAE,CAAC,SAAS,GAAG,cAAc,GAAG,aAAa,CAAC,EAAE,CAAC;CACzD;AAED,MAAM,WAAW,cAAc;IAC7B,UAAU,CAAC,EAAE,CAAC,SAAS,EAAE,MAAM,KAAK,IAAI,CAAC;IACzC,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB,KAAK,CAAC,EAAE,YAAY,CAAC;CACtB;AAED;;GAEG;AACH,wBAAsB,sBAAsB,CAC1C,OAAO,EAAE,MAAM,EACf,IAAI,EAAE,MAAM,EAAE,EACd,OAAO,GAAE,cAAmB,GAC3B,OAAO,CAAC,aAAa,CAAC,CAyCxB;AAmHD;;GAEG;AACH,wBAAsB,cAAc,CAClC,OAAO,EAAE,MAAM,EACf,IAAI,EAAE,MAAM,EAAE,EACd,UAAU,CAAC,EAAE,CAAC,SAAS,EAAE,MAAM,KAAK,IAAI,EACxC,SAAS,GAAE,MAAe,GACzB,OAAO,CAAC,MAAM,CAAC,CAgBjB"}
|
|
@@ -1,22 +1,27 @@
|
|
|
1
|
-
import
|
|
2
|
-
import { Logger } from
|
|
1
|
+
import spawn from 'cross-spawn';
|
|
2
|
+
import { Logger } from './logger.js';
|
|
3
3
|
/**
|
|
4
4
|
* Execute a command with streaming output and structured error handling
|
|
5
5
|
*/
|
|
6
6
|
export async function executeCommandDetailed(command, args, options = {}) {
|
|
7
7
|
const { onProgress, timeoutMs = 600000, maxOutputBytes = 50 * 1024 * 1024, // 50MB default
|
|
8
|
-
retry } = options;
|
|
8
|
+
retry, } = options;
|
|
9
9
|
let attempt = 0;
|
|
10
10
|
const maxAttempts = retry?.attempts || 1;
|
|
11
11
|
while (attempt < maxAttempts) {
|
|
12
12
|
attempt++;
|
|
13
|
-
const result = await executeOnce(command, args, {
|
|
13
|
+
const result = await executeOnce(command, args, {
|
|
14
|
+
onProgress,
|
|
15
|
+
timeoutMs,
|
|
16
|
+
maxOutputBytes,
|
|
17
|
+
});
|
|
14
18
|
if (result.ok) {
|
|
15
19
|
return result;
|
|
16
20
|
}
|
|
17
|
-
const shouldRetry = retry &&
|
|
18
|
-
(result.
|
|
19
|
-
|
|
21
|
+
const shouldRetry = retry &&
|
|
22
|
+
((result.timedOut && retry.retryOn.includes('timeout')) ||
|
|
23
|
+
(result.code !== 0 && result.code !== null && retry.retryOn.includes('exit_nonzero')) ||
|
|
24
|
+
(result.code === null && !result.signal && retry.retryOn.includes('spawn_error')));
|
|
20
25
|
if (!shouldRetry || attempt >= maxAttempts) {
|
|
21
26
|
return result;
|
|
22
27
|
}
|
|
@@ -29,13 +34,13 @@ export async function executeCommandDetailed(command, args, options = {}) {
|
|
|
29
34
|
throw new Error('Unexpected retry loop exit');
|
|
30
35
|
}
|
|
31
36
|
async function executeOnce(command, args, { onProgress, timeoutMs, maxOutputBytes }) {
|
|
32
|
-
return new Promise(
|
|
37
|
+
return new Promise(resolve => {
|
|
33
38
|
const startTime = Date.now();
|
|
34
39
|
Logger.commandExecution(command, args, startTime);
|
|
35
40
|
const childProcess = spawn(command, args, {
|
|
36
41
|
env: process.env,
|
|
37
42
|
shell: false,
|
|
38
|
-
stdio: [
|
|
43
|
+
stdio: ['ignore', 'pipe', 'pipe'],
|
|
39
44
|
});
|
|
40
45
|
const stdoutChunks = [];
|
|
41
46
|
const stderrChunks = [];
|
|
@@ -56,7 +61,7 @@ async function executeOnce(command, args, { onProgress, timeoutMs, maxOutputByte
|
|
|
56
61
|
}, 5000);
|
|
57
62
|
}
|
|
58
63
|
}, timeoutMs || 600000);
|
|
59
|
-
childProcess.stdout
|
|
64
|
+
childProcess.stdout?.on('data', (data) => {
|
|
60
65
|
// Check output size limit
|
|
61
66
|
if (maxOutputBytes && totalStdoutBytes + data.length > maxOutputBytes) {
|
|
62
67
|
if (!outputExceeded) {
|
|
@@ -74,10 +79,10 @@ async function executeOnce(command, args, { onProgress, timeoutMs, maxOutputByte
|
|
|
74
79
|
}
|
|
75
80
|
});
|
|
76
81
|
// Capture stderr for error reporting
|
|
77
|
-
childProcess.stderr
|
|
82
|
+
childProcess.stderr?.on('data', (data) => {
|
|
78
83
|
stderrChunks.push(data);
|
|
79
84
|
});
|
|
80
|
-
childProcess.on(
|
|
85
|
+
childProcess.on('error', error => {
|
|
81
86
|
if (!isResolved) {
|
|
82
87
|
isResolved = true;
|
|
83
88
|
clearTimeout(timeoutId);
|
|
@@ -90,7 +95,7 @@ async function executeOnce(command, args, { onProgress, timeoutMs, maxOutputByte
|
|
|
90
95
|
code: null,
|
|
91
96
|
stdout: '',
|
|
92
97
|
stderr: `Command '${command}' not found. Is it installed and in PATH?`,
|
|
93
|
-
timedOut: false
|
|
98
|
+
timedOut: false,
|
|
94
99
|
});
|
|
95
100
|
}
|
|
96
101
|
else {
|
|
@@ -99,12 +104,12 @@ async function executeOnce(command, args, { onProgress, timeoutMs, maxOutputByte
|
|
|
99
104
|
code: null,
|
|
100
105
|
stdout: Buffer.concat(stdoutChunks).toString('utf8'),
|
|
101
106
|
stderr: errorMessage,
|
|
102
|
-
timedOut: false
|
|
107
|
+
timedOut: false,
|
|
103
108
|
});
|
|
104
109
|
}
|
|
105
110
|
}
|
|
106
111
|
});
|
|
107
|
-
childProcess.on(
|
|
112
|
+
childProcess.on('close', (code, signal) => {
|
|
108
113
|
if (!isResolved) {
|
|
109
114
|
isResolved = true;
|
|
110
115
|
clearTimeout(timeoutId);
|
|
@@ -119,7 +124,7 @@ async function executeOnce(command, args, { onProgress, timeoutMs, maxOutputByte
|
|
|
119
124
|
stdout: stdout.trim(),
|
|
120
125
|
stderr: stderr.trim(),
|
|
121
126
|
timedOut,
|
|
122
|
-
partialStdout: outputExceeded ? stdout : undefined
|
|
127
|
+
partialStdout: outputExceeded ? stdout : undefined,
|
|
123
128
|
});
|
|
124
129
|
}
|
|
125
130
|
});
|
|
@@ -129,7 +134,10 @@ async function executeOnce(command, args, { onProgress, timeoutMs, maxOutputByte
|
|
|
129
134
|
* Backward compatible wrapper that returns stdout string
|
|
130
135
|
*/
|
|
131
136
|
export async function executeCommand(command, args, onProgress, timeoutMs = 600000) {
|
|
132
|
-
const result = await executeCommandDetailed(command, args, {
|
|
137
|
+
const result = await executeCommandDetailed(command, args, {
|
|
138
|
+
onProgress,
|
|
139
|
+
timeoutMs,
|
|
140
|
+
});
|
|
133
141
|
if (!result.ok) {
|
|
134
142
|
const errorMessage = result.stderr || 'Unknown error';
|
|
135
143
|
throw new Error(result.timedOut
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"commandExecutor.js","sourceRoot":"","sources":["../../src/utils/commandExecutor.ts"],"names":[],"mappings":"AAAA,OAAO,
|
|
1
|
+
{"version":3,"file":"commandExecutor.js","sourceRoot":"","sources":["../../src/utils/commandExecutor.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"fibonacci.d.ts","sourceRoot":"","sources":["../../src/utils/fibonacci.ts"],"names":[],"mappings":"AAAA,wBAAgB,SAAS,CAAC,CAAC,EAAE,MAAM,GAAG,MAAM,CAmB3C"}
|