@trishchuk/codex-mcp-tool 1.3.0 → 1.4.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.
Files changed (44) hide show
  1. package/README.md +84 -247
  2. package/dist/constants.d.ts +3 -0
  3. package/dist/constants.d.ts.map +1 -1
  4. package/dist/constants.js +2 -0
  5. package/dist/constants.js.map +1 -1
  6. package/dist/index.js +1 -2
  7. package/dist/index.js.map +1 -1
  8. package/dist/tools/ask-codex.tool.d.ts.map +1 -1
  9. package/dist/tools/ask-codex.tool.js +67 -52
  10. package/dist/tools/ask-codex.tool.js.map +1 -1
  11. package/dist/tools/batch-codex.tool.js +1 -1
  12. package/dist/tools/batch-codex.tool.js.map +1 -1
  13. package/dist/tools/health.tool.d.ts +3 -0
  14. package/dist/tools/health.tool.d.ts.map +1 -0
  15. package/dist/tools/health.tool.js +189 -0
  16. package/dist/tools/health.tool.js.map +1 -0
  17. package/dist/tools/index.d.ts.map +1 -1
  18. package/dist/tools/index.js +3 -1
  19. package/dist/tools/index.js.map +1 -1
  20. package/dist/tools/list-sessions.tool.d.ts +3 -0
  21. package/dist/tools/list-sessions.tool.d.ts.map +1 -0
  22. package/dist/tools/list-sessions.tool.js +71 -0
  23. package/dist/tools/list-sessions.tool.js.map +1 -0
  24. package/dist/utils/codexCommandBuilder.d.ts +7 -0
  25. package/dist/utils/codexCommandBuilder.d.ts.map +1 -1
  26. package/dist/utils/codexCommandBuilder.js +40 -14
  27. package/dist/utils/codexCommandBuilder.js.map +1 -1
  28. package/dist/utils/codexExecutor.d.ts +10 -1
  29. package/dist/utils/codexExecutor.d.ts.map +1 -1
  30. package/dist/utils/codexExecutor.js +6 -2
  31. package/dist/utils/codexExecutor.js.map +1 -1
  32. package/dist/utils/errorTypes.d.ts +74 -0
  33. package/dist/utils/errorTypes.d.ts.map +1 -0
  34. package/dist/utils/errorTypes.js +268 -0
  35. package/dist/utils/errorTypes.js.map +1 -0
  36. package/dist/utils/sessionStorage.d.ts +79 -0
  37. package/dist/utils/sessionStorage.d.ts.map +1 -0
  38. package/dist/utils/sessionStorage.js +276 -0
  39. package/dist/utils/sessionStorage.js.map +1 -0
  40. package/dist/utils/versionDetection.d.ts +17 -2
  41. package/dist/utils/versionDetection.d.ts.map +1 -1
  42. package/dist/utils/versionDetection.js +30 -2
  43. package/dist/utils/versionDetection.js.map +1 -1
  44. package/package.json +2 -2
@@ -0,0 +1,79 @@
1
+ /**
2
+ * Session data structure
3
+ */
4
+ export interface SessionData {
5
+ sessionId: string;
6
+ workspaceId: string;
7
+ codexConversationId?: string;
8
+ lastPrompt: string;
9
+ lastResponse: string;
10
+ model?: string;
11
+ workingDir?: string;
12
+ createdAt: number;
13
+ updatedAt: number;
14
+ }
15
+ /**
16
+ * Generate workspace ID using MD5 hash
17
+ * Format: repo:head:path -> 12-char hex
18
+ */
19
+ export declare function generateWorkspaceId(workingDir: string): string;
20
+ /**
21
+ * Generate unique session ID
22
+ */
23
+ export declare function generateSessionId(): string;
24
+ /**
25
+ * Save or update a session
26
+ */
27
+ export declare function saveSession(data: Partial<SessionData> & {
28
+ sessionId: string;
29
+ }): SessionData;
30
+ /**
31
+ * Get session by ID
32
+ */
33
+ export declare function getSession(sessionId: string): SessionData | null;
34
+ /**
35
+ * Get session by workspace ID (returns most recent)
36
+ */
37
+ export declare function getSessionByWorkspace(workspaceId: string): SessionData | null;
38
+ /**
39
+ * Get or create session for a workspace
40
+ *
41
+ * When sessionId is provided: returns existing session or creates new with that ID
42
+ * When sessionId is NOT provided: returns workspace session or creates new with generated ID
43
+ */
44
+ export declare function getOrCreateSession(workingDir: string, sessionId?: string): SessionData;
45
+ /**
46
+ * Update session with Codex conversation ID (for native resume)
47
+ */
48
+ export declare function setCodexConversationId(sessionId: string, conversationId: string): void;
49
+ /**
50
+ * Get Codex conversation ID for resume
51
+ */
52
+ export declare function getCodexConversationId(sessionId: string): string | undefined;
53
+ /**
54
+ * List all active sessions
55
+ */
56
+ export declare function listSessions(): SessionData[];
57
+ /**
58
+ * Delete a session
59
+ */
60
+ export declare function deleteSession(sessionId: string): boolean;
61
+ /**
62
+ * Clear all sessions
63
+ */
64
+ export declare function clearAllSessions(): void;
65
+ /**
66
+ * Get session statistics
67
+ */
68
+ export declare function getSessionStats(): {
69
+ total: number;
70
+ withConversationId: number;
71
+ maxSessions: number;
72
+ ttlMs: number;
73
+ };
74
+ /**
75
+ * Parse Codex conversation ID from stderr output
76
+ * Pattern: "conversation id: abc123" or "Conversation ID: abc-123-def"
77
+ */
78
+ export declare function parseConversationIdFromOutput(output: string): string | null;
79
+ //# sourceMappingURL=sessionStorage.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"sessionStorage.d.ts","sourceRoot":"","sources":["../../src/utils/sessionStorage.ts"],"names":[],"mappings":"AAoBA;;GAEG;AACH,MAAM,WAAW,WAAW;IAC1B,SAAS,EAAE,MAAM,CAAC;IAClB,WAAW,EAAE,MAAM,CAAC;IACpB,mBAAmB,CAAC,EAAE,MAAM,CAAC;IAC7B,UAAU,EAAE,MAAM,CAAC;IACnB,YAAY,EAAE,MAAM,CAAC;IACrB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,SAAS,EAAE,MAAM,CAAC;IAClB,SAAS,EAAE,MAAM,CAAC;CACnB;AAiDD;;;GAGG;AACH,wBAAgB,mBAAmB,CAAC,UAAU,EAAE,MAAM,GAAG,MAAM,CAO9D;AAED;;GAEG;AACH,wBAAgB,iBAAiB,IAAI,MAAM,CAI1C;AAoCD;;GAEG;AACH,wBAAgB,WAAW,CAAC,IAAI,EAAE,OAAO,CAAC,WAAW,CAAC,GAAG;IAAE,SAAS,EAAE,MAAM,CAAA;CAAE,GAAG,WAAW,CAsB3F;AAED;;GAEG;AACH,wBAAgB,UAAU,CAAC,SAAS,EAAE,MAAM,GAAG,WAAW,GAAG,IAAI,CAehE;AAED;;GAEG;AACH,wBAAgB,qBAAqB,CAAC,WAAW,EAAE,MAAM,GAAG,WAAW,GAAG,IAAI,CAc7E;AAED;;;;;GAKG;AACH,wBAAgB,kBAAkB,CAAC,UAAU,EAAE,MAAM,EAAE,SAAS,CAAC,EAAE,MAAM,GAAG,WAAW,CAiCtF;AAED;;GAEG;AACH,wBAAgB,sBAAsB,CAAC,SAAS,EAAE,MAAM,EAAE,cAAc,EAAE,MAAM,GAAG,IAAI,CAStF;AAED;;GAEG;AACH,wBAAgB,sBAAsB,CAAC,SAAS,EAAE,MAAM,GAAG,MAAM,GAAG,SAAS,CAG5E;AAED;;GAEG;AACH,wBAAgB,YAAY,IAAI,WAAW,EAAE,CAG5C;AAED;;GAEG;AACH,wBAAgB,aAAa,CAAC,SAAS,EAAE,MAAM,GAAG,OAAO,CAMxD;AAED;;GAEG;AACH,wBAAgB,gBAAgB,IAAI,IAAI,CAIvC;AAED;;GAEG;AACH,wBAAgB,eAAe,IAAI;IACjC,KAAK,EAAE,MAAM,CAAC;IACd,kBAAkB,EAAE,MAAM,CAAC;IAC3B,WAAW,EAAE,MAAM,CAAC;IACpB,KAAK,EAAE,MAAM,CAAC;CACf,CAgBA;AAED;;;GAGG;AACH,wBAAgB,6BAA6B,CAAC,MAAM,EAAE,MAAM,GAAG,MAAM,GAAG,IAAI,CAe3E"}
@@ -0,0 +1,276 @@
1
+ import { createHash } from 'crypto';
2
+ import { existsSync, readFileSync } from 'fs';
3
+ import { join, basename, dirname } from 'path';
4
+ import { Logger } from './logger.js';
5
+ /**
6
+ * Session Storage for Codex MCP Tool
7
+ * Provides workspace-isolated session management with native Codex resume support
8
+ *
9
+ * Features:
10
+ * - Workspace isolation via MD5 hash (repo:head:path)
11
+ * - Native Codex conversation ID storage for resume
12
+ * - Configurable TTL via CODEX_SESSION_TTL_MS
13
+ * - Aggressive cleanup (max 50 sessions)
14
+ */
15
+ // Configuration from environment
16
+ const SESSION_TTL_MS = parseInt(process.env.CODEX_SESSION_TTL_MS || '', 10) || 24 * 60 * 60 * 1000; // 24 hours default
17
+ const MAX_SESSIONS = parseInt(process.env.CODEX_MAX_SESSIONS || '', 10) || 50;
18
+ /**
19
+ * In-memory session storage
20
+ */
21
+ const sessionStore = new Map();
22
+ /**
23
+ * Find git root directory by walking up the tree
24
+ */
25
+ function findGitRoot(startPath) {
26
+ let currentPath = startPath;
27
+ // Limit search depth to prevent infinite loops
28
+ for (let i = 0; i < 20; i++) {
29
+ const gitPath = join(currentPath, '.git');
30
+ if (existsSync(gitPath)) {
31
+ return currentPath;
32
+ }
33
+ const parentPath = dirname(currentPath);
34
+ if (parentPath === currentPath) {
35
+ // Reached filesystem root
36
+ break;
37
+ }
38
+ currentPath = parentPath;
39
+ }
40
+ return null;
41
+ }
42
+ /**
43
+ * Read git HEAD content for workspace identification
44
+ */
45
+ function readGitHead(gitRoot) {
46
+ if (!gitRoot)
47
+ return '';
48
+ try {
49
+ const headPath = join(gitRoot, '.git', 'HEAD');
50
+ if (existsSync(headPath)) {
51
+ return readFileSync(headPath, 'utf8').trim();
52
+ }
53
+ }
54
+ catch (error) {
55
+ Logger.debug('Failed to read git HEAD:', error);
56
+ }
57
+ return '';
58
+ }
59
+ /**
60
+ * Generate workspace ID using MD5 hash
61
+ * Format: repo:head:path -> 12-char hex
62
+ */
63
+ export function generateWorkspaceId(workingDir) {
64
+ const gitRoot = findGitRoot(workingDir);
65
+ const repoName = basename(gitRoot || workingDir);
66
+ const headContent = readGitHead(gitRoot);
67
+ const hashInput = `${repoName}:${headContent}:${workingDir}`;
68
+ return createHash('md5').update(hashInput).digest('hex').substring(0, 12);
69
+ }
70
+ /**
71
+ * Generate unique session ID
72
+ */
73
+ export function generateSessionId() {
74
+ const timestamp = Date.now().toString(36);
75
+ const random = Math.random().toString(36).substring(2, 8);
76
+ return `ses_${timestamp}_${random}`;
77
+ }
78
+ /**
79
+ * Clean up expired sessions and enforce max limit
80
+ */
81
+ function cleanupSessions() {
82
+ const now = Date.now();
83
+ const expiredIds = [];
84
+ // Find expired sessions
85
+ for (const [id, session] of sessionStore.entries()) {
86
+ if (now - session.updatedAt > SESSION_TTL_MS) {
87
+ expiredIds.push(id);
88
+ }
89
+ }
90
+ // Remove expired
91
+ for (const id of expiredIds) {
92
+ sessionStore.delete(id);
93
+ Logger.debug(`Cleaned up expired session: ${id}`);
94
+ }
95
+ // Enforce max limit - remove oldest if over limit
96
+ if (sessionStore.size > MAX_SESSIONS) {
97
+ const sessions = Array.from(sessionStore.entries()).sort(([, a], [, b]) => a.updatedAt - b.updatedAt);
98
+ const toRemove = sessions.slice(0, sessionStore.size - MAX_SESSIONS);
99
+ for (const [id] of toRemove) {
100
+ sessionStore.delete(id);
101
+ Logger.debug(`Cleaned up oldest session (over limit): ${id}`);
102
+ }
103
+ }
104
+ }
105
+ /**
106
+ * Save or update a session
107
+ */
108
+ export function saveSession(data) {
109
+ cleanupSessions();
110
+ const existing = sessionStore.get(data.sessionId);
111
+ const now = Date.now();
112
+ const session = {
113
+ sessionId: data.sessionId,
114
+ workspaceId: data.workspaceId || existing?.workspaceId || '',
115
+ codexConversationId: data.codexConversationId || existing?.codexConversationId,
116
+ lastPrompt: data.lastPrompt || existing?.lastPrompt || '',
117
+ lastResponse: data.lastResponse || existing?.lastResponse || '',
118
+ model: data.model || existing?.model,
119
+ workingDir: data.workingDir || existing?.workingDir,
120
+ createdAt: existing?.createdAt || now,
121
+ updatedAt: now,
122
+ };
123
+ sessionStore.set(data.sessionId, session);
124
+ Logger.debug(`Saved session: ${data.sessionId} (workspace: ${session.workspaceId})`);
125
+ return session;
126
+ }
127
+ /**
128
+ * Get session by ID
129
+ */
130
+ export function getSession(sessionId) {
131
+ const session = sessionStore.get(sessionId);
132
+ if (!session) {
133
+ return null;
134
+ }
135
+ // Check if expired
136
+ if (Date.now() - session.updatedAt > SESSION_TTL_MS) {
137
+ sessionStore.delete(sessionId);
138
+ Logger.debug(`Session expired: ${sessionId}`);
139
+ return null;
140
+ }
141
+ return session;
142
+ }
143
+ /**
144
+ * Get session by workspace ID (returns most recent)
145
+ */
146
+ export function getSessionByWorkspace(workspaceId) {
147
+ cleanupSessions();
148
+ let mostRecent = null;
149
+ for (const session of sessionStore.values()) {
150
+ if (session.workspaceId === workspaceId) {
151
+ if (!mostRecent || session.updatedAt > mostRecent.updatedAt) {
152
+ mostRecent = session;
153
+ }
154
+ }
155
+ }
156
+ return mostRecent;
157
+ }
158
+ /**
159
+ * Get or create session for a workspace
160
+ *
161
+ * When sessionId is provided: returns existing session or creates new with that ID
162
+ * When sessionId is NOT provided: returns workspace session or creates new with generated ID
163
+ */
164
+ export function getOrCreateSession(workingDir, sessionId) {
165
+ const workspaceId = generateWorkspaceId(workingDir);
166
+ // If sessionId provided explicitly - honor it
167
+ if (sessionId) {
168
+ const existing = getSession(sessionId);
169
+ if (existing) {
170
+ return existing;
171
+ }
172
+ // Create NEW session with requested ID (don't fall back to workspace!)
173
+ return saveSession({
174
+ sessionId,
175
+ workspaceId,
176
+ workingDir,
177
+ lastPrompt: '',
178
+ lastResponse: '',
179
+ });
180
+ }
181
+ // No sessionId provided - try workspace fallback
182
+ const workspaceSession = getSessionByWorkspace(workspaceId);
183
+ if (workspaceSession) {
184
+ return workspaceSession;
185
+ }
186
+ // Generate new session ID
187
+ return saveSession({
188
+ sessionId: generateSessionId(),
189
+ workspaceId,
190
+ workingDir,
191
+ lastPrompt: '',
192
+ lastResponse: '',
193
+ });
194
+ }
195
+ /**
196
+ * Update session with Codex conversation ID (for native resume)
197
+ */
198
+ export function setCodexConversationId(sessionId, conversationId) {
199
+ const session = getSession(sessionId);
200
+ if (session) {
201
+ saveSession({
202
+ ...session,
203
+ codexConversationId: conversationId,
204
+ });
205
+ Logger.debug(`Set Codex conversation ID for session ${sessionId}: ${conversationId}`);
206
+ }
207
+ }
208
+ /**
209
+ * Get Codex conversation ID for resume
210
+ */
211
+ export function getCodexConversationId(sessionId) {
212
+ const session = getSession(sessionId);
213
+ return session?.codexConversationId;
214
+ }
215
+ /**
216
+ * List all active sessions
217
+ */
218
+ export function listSessions() {
219
+ cleanupSessions();
220
+ return Array.from(sessionStore.values()).sort((a, b) => b.updatedAt - a.updatedAt);
221
+ }
222
+ /**
223
+ * Delete a session
224
+ */
225
+ export function deleteSession(sessionId) {
226
+ const deleted = sessionStore.delete(sessionId);
227
+ if (deleted) {
228
+ Logger.debug(`Deleted session: ${sessionId}`);
229
+ }
230
+ return deleted;
231
+ }
232
+ /**
233
+ * Clear all sessions
234
+ */
235
+ export function clearAllSessions() {
236
+ const count = sessionStore.size;
237
+ sessionStore.clear();
238
+ Logger.debug(`Cleared all ${count} sessions`);
239
+ }
240
+ /**
241
+ * Get session statistics
242
+ */
243
+ export function getSessionStats() {
244
+ cleanupSessions();
245
+ let withConversationId = 0;
246
+ for (const session of sessionStore.values()) {
247
+ if (session.codexConversationId) {
248
+ withConversationId++;
249
+ }
250
+ }
251
+ return {
252
+ total: sessionStore.size,
253
+ withConversationId,
254
+ maxSessions: MAX_SESSIONS,
255
+ ttlMs: SESSION_TTL_MS,
256
+ };
257
+ }
258
+ /**
259
+ * Parse Codex conversation ID from stderr output
260
+ * Pattern: "conversation id: abc123" or "Conversation ID: abc-123-def"
261
+ */
262
+ export function parseConversationIdFromOutput(output) {
263
+ const patterns = [
264
+ /conversation\s*id\s*:\s*([a-zA-Z0-9-]+)/i,
265
+ /conv(?:ersation)?[-_]?id\s*[=:]\s*([a-zA-Z0-9-]+)/i,
266
+ /session\s*id\s*:\s*([a-zA-Z0-9-]+)/i,
267
+ ];
268
+ for (const pattern of patterns) {
269
+ const match = output.match(pattern);
270
+ if (match && match[1]) {
271
+ return match[1];
272
+ }
273
+ }
274
+ return null;
275
+ }
276
+ //# sourceMappingURL=sessionStorage.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"sessionStorage.js","sourceRoot":"","sources":["../../src/utils/sessionStorage.ts"],"names":[],"mappings":"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"}
@@ -38,6 +38,11 @@ export declare const FEATURE_VERSIONS: {
38
38
  readonly minor: 56;
39
39
  readonly patch: 0;
40
40
  };
41
+ readonly RESUME: {
42
+ readonly major: 0;
43
+ readonly minor: 36;
44
+ readonly patch: 0;
45
+ };
41
46
  };
42
47
  /**
43
48
  * Parse version string into structured format
@@ -66,10 +71,11 @@ export declare function meetsMinVersion(version: CodexVersion, minVersion: {
66
71
  patch: number;
67
72
  }): boolean;
68
73
  /**
69
- * Get installed Codex CLI version
74
+ * Get installed Codex CLI version (with caching)
75
+ * @param bypassCache If true, forces fresh version check
70
76
  * @returns Promise<CodexVersion> Version information
71
77
  */
72
- export declare function getCodexVersion(): Promise<CodexVersion>;
78
+ export declare function getCodexVersion(bypassCache?: boolean): Promise<CodexVersion>;
73
79
  /**
74
80
  * Check if specific feature is available in installed version
75
81
  * @param featureName Name of feature from FEATURE_VERSIONS
@@ -96,6 +102,15 @@ export declare function supportsToolTokenLimit(): Promise<boolean>;
96
102
  * @returns Promise<boolean> True if GPT-5.1 models are supported
97
103
  */
98
104
  export declare function supportsGPT51Models(): Promise<boolean>;
105
+ /**
106
+ * Check if native resume command is available
107
+ * @returns Promise<boolean> True if 'codex resume' is supported
108
+ */
109
+ export declare function supportsResume(): Promise<boolean>;
110
+ /**
111
+ * Clear version cache (useful for testing)
112
+ */
113
+ export declare function clearVersionCache(): void;
99
114
  /**
100
115
  * Get all supported features for current version
101
116
  * @returns Promise<Record<string, boolean>> Map of feature names to availability
@@ -1 +1 @@
1
- {"version":3,"file":"versionDetection.d.ts","sourceRoot":"","sources":["../../src/utils/versionDetection.ts"],"names":[],"mappings":"AAGA;;;GAGG;AAEH,MAAM,WAAW,YAAY;IAC3B,KAAK,EAAE,MAAM,CAAC;IACd,KAAK,EAAE,MAAM,CAAC;IACd,KAAK,EAAE,MAAM,CAAC;IACd,GAAG,EAAE,MAAM,CAAC;IACZ,OAAO,EAAE,OAAO,CAAC;CAClB;AAED;;GAEG;AACH,eAAO,MAAM,gBAAgB;;;;;;;;;;;;;;;;;;;;;;;;;;CAMnB,CAAC;AAEX;;;;GAIG;AACH,wBAAgB,YAAY,CAAC,aAAa,EAAE,MAAM,GAAG,YAAY,CAwBhE;AAED;;;GAGG;AACH,wBAAgB,eAAe,CAC7B,EAAE,EAAE,YAAY,EAChB,EAAE,EAAE;IAAE,KAAK,EAAE,MAAM,CAAC;IAAC,KAAK,EAAE,MAAM,CAAC;IAAC,KAAK,EAAE,MAAM,CAAA;CAAE,GAClD,MAAM,CAIR;AAED;;;;;GAKG;AACH,wBAAgB,eAAe,CAC7B,OAAO,EAAE,YAAY,EACrB,UAAU,EAAE;IAAE,KAAK,EAAE,MAAM,CAAC;IAAC,KAAK,EAAE,MAAM,CAAC;IAAC,KAAK,EAAE,MAAM,CAAA;CAAE,GAC1D,OAAO,CAOT;AAED;;;GAGG;AACH,wBAAsB,eAAe,IAAI,OAAO,CAAC,YAAY,CAAC,CAgC7D;AAED;;;;GAIG;AACH,wBAAsB,kBAAkB,CACtC,WAAW,EAAE,MAAM,OAAO,gBAAgB,GACzC,OAAO,CAAC,OAAO,CAAC,CAKlB;AAED;;;GAGG;AACH,wBAAsB,oBAAoB,IAAI,OAAO,CAAC,OAAO,CAAC,CAE7D;AAED;;;GAGG;AACH,wBAAsB,cAAc,IAAI,OAAO,CAAC,OAAO,CAAC,CAEvD;AAED;;;GAGG;AACH,wBAAsB,sBAAsB,IAAI,OAAO,CAAC,OAAO,CAAC,CAE/D;AAED;;;GAGG;AACH,wBAAsB,mBAAmB,IAAI,OAAO,CAAC,OAAO,CAAC,CAE5D;AAED;;;GAGG;AACH,wBAAsB,oBAAoB,IAAI,OAAO,CAAC,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC,CAS7E;AAED;;GAEG;AACH,wBAAsB,cAAc,IAAI,OAAO,CAAC,IAAI,CAAC,CASpD"}
1
+ {"version":3,"file":"versionDetection.d.ts","sourceRoot":"","sources":["../../src/utils/versionDetection.ts"],"names":[],"mappings":"AAGA;;;GAGG;AAEH,MAAM,WAAW,YAAY;IAC3B,KAAK,EAAE,MAAM,CAAC;IACd,KAAK,EAAE,MAAM,CAAC;IACd,KAAK,EAAE,MAAM,CAAC;IACd,GAAG,EAAE,MAAM,CAAC;IACZ,OAAO,EAAE,OAAO,CAAC;CAClB;AAED;;GAEG;AACH,eAAO,MAAM,gBAAgB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CAOnB,CAAC;AAOX;;;;GAIG;AACH,wBAAgB,YAAY,CAAC,aAAa,EAAE,MAAM,GAAG,YAAY,CAwBhE;AAED;;;GAGG;AACH,wBAAgB,eAAe,CAC7B,EAAE,EAAE,YAAY,EAChB,EAAE,EAAE;IAAE,KAAK,EAAE,MAAM,CAAC;IAAC,KAAK,EAAE,MAAM,CAAC;IAAC,KAAK,EAAE,MAAM,CAAA;CAAE,GAClD,MAAM,CAIR;AAED;;;;;GAKG;AACH,wBAAgB,eAAe,CAC7B,OAAO,EAAE,YAAY,EACrB,UAAU,EAAE;IAAE,KAAK,EAAE,MAAM,CAAC;IAAC,KAAK,EAAE,MAAM,CAAC;IAAC,KAAK,EAAE,MAAM,CAAA;CAAE,GAC1D,OAAO,CAOT;AAED;;;;GAIG;AACH,wBAAsB,eAAe,CAAC,WAAW,GAAE,OAAe,GAAG,OAAO,CAAC,YAAY,CAAC,CA2CzF;AAED;;;;GAIG;AACH,wBAAsB,kBAAkB,CACtC,WAAW,EAAE,MAAM,OAAO,gBAAgB,GACzC,OAAO,CAAC,OAAO,CAAC,CAKlB;AAED;;;GAGG;AACH,wBAAsB,oBAAoB,IAAI,OAAO,CAAC,OAAO,CAAC,CAE7D;AAED;;;GAGG;AACH,wBAAsB,cAAc,IAAI,OAAO,CAAC,OAAO,CAAC,CAEvD;AAED;;;GAGG;AACH,wBAAsB,sBAAsB,IAAI,OAAO,CAAC,OAAO,CAAC,CAE/D;AAED;;;GAGG;AACH,wBAAsB,mBAAmB,IAAI,OAAO,CAAC,OAAO,CAAC,CAE5D;AAED;;;GAGG;AACH,wBAAsB,cAAc,IAAI,OAAO,CAAC,OAAO,CAAC,CAEvD;AAED;;GAEG;AACH,wBAAgB,iBAAiB,IAAI,IAAI,CAGxC;AAED;;;GAGG;AACH,wBAAsB,oBAAoB,IAAI,OAAO,CAAC,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC,CAS7E;AAED;;GAEG;AACH,wBAAsB,cAAc,IAAI,OAAO,CAAC,IAAI,CAAC,CASpD"}
@@ -9,7 +9,12 @@ export const FEATURE_VERSIONS = {
9
9
  ADD_DIR: { major: 0, minor: 59, patch: 0 }, // --add-dir flag
10
10
  WINDOWS_AGENT: { major: 0, minor: 59, patch: 0 }, // Windows agent mode
11
11
  GPT5_1_MODELS: { major: 0, minor: 56, patch: 0 }, // GPT-5.1 model family
12
+ RESUME: { major: 0, minor: 36, patch: 0 }, // codex resume command (v1.4.0+)
12
13
  };
14
+ // Version cache for performance optimization
15
+ let cachedVersion = null;
16
+ let cacheTimestamp = 0;
17
+ const VERSION_CACHE_TTL = 5 * 60 * 1000; // 5 minutes
13
18
  /**
14
19
  * Parse version string into structured format
15
20
  * @param versionString Raw version string (e.g., "0.59.0", "v0.52.1")
@@ -62,10 +67,16 @@ export function meetsMinVersion(version, minVersion) {
62
67
  return compareVersions(version, minVersion) >= 0;
63
68
  }
64
69
  /**
65
- * Get installed Codex CLI version
70
+ * Get installed Codex CLI version (with caching)
71
+ * @param bypassCache If true, forces fresh version check
66
72
  * @returns Promise<CodexVersion> Version information
67
73
  */
68
- export async function getCodexVersion() {
74
+ export async function getCodexVersion(bypassCache = false) {
75
+ // Return cached version if valid
76
+ if (!bypassCache && cachedVersion && Date.now() - cacheTimestamp < VERSION_CACHE_TTL) {
77
+ Logger.debug(`Using cached Codex version: ${cachedVersion.raw}`);
78
+ return cachedVersion;
79
+ }
69
80
  try {
70
81
  const versionOutput = await executeCommand('codex', ['--version'], undefined, 5000);
71
82
  // Parse version from output (format: "codex 0.59.0" or just "0.59.0")
@@ -82,6 +93,9 @@ export async function getCodexVersion() {
82
93
  }
83
94
  const version = parseVersion(versionMatch[1]);
84
95
  Logger.log(`Detected Codex CLI version: ${version.major}.${version.minor}.${version.patch}`);
96
+ // Cache the version
97
+ cachedVersion = version;
98
+ cacheTimestamp = Date.now();
85
99
  return version;
86
100
  }
87
101
  catch (error) {
@@ -133,6 +147,20 @@ export async function supportsToolTokenLimit() {
133
147
  export async function supportsGPT51Models() {
134
148
  return await isFeatureAvailable('GPT5_1_MODELS');
135
149
  }
150
+ /**
151
+ * Check if native resume command is available
152
+ * @returns Promise<boolean> True if 'codex resume' is supported
153
+ */
154
+ export async function supportsResume() {
155
+ return await isFeatureAvailable('RESUME');
156
+ }
157
+ /**
158
+ * Clear version cache (useful for testing)
159
+ */
160
+ export function clearVersionCache() {
161
+ cachedVersion = null;
162
+ cacheTimestamp = 0;
163
+ }
136
164
  /**
137
165
  * Get all supported features for current version
138
166
  * @returns Promise<Record<string, boolean>> Map of feature names to availability
@@ -1 +1 @@
1
- {"version":3,"file":"versionDetection.js","sourceRoot":"","sources":["../../src/utils/versionDetection.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"versionDetection.js","sourceRoot":"","sources":["../../src/utils/versionDetection.ts"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@trishchuk/codex-mcp-tool",
3
- "version": "1.3.0",
3
+ "version": "1.4.0",
4
4
  "description": "MCP server for Codex CLI integration",
5
5
  "type": "module",
6
6
  "main": "dist/index.js",
@@ -53,7 +53,7 @@
53
53
  "LICENSE"
54
54
  ],
55
55
  "dependencies": {
56
- "@modelcontextprotocol/sdk": "^0.6.1",
56
+ "@modelcontextprotocol/sdk": "^1.23.0",
57
57
  "cross-spawn": "^7.0.6",
58
58
  "zod": "^3.25.76",
59
59
  "zod-to-json-schema": "^3.24.6"