Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 2 additions & 0 deletions src/CodexAcpClient.ts
Original file line number Diff line number Diff line change
Expand Up @@ -117,11 +117,13 @@ export class CodexAcpClient {
developerInstructions: null,
experimentalRawEvents: false
});

const codexModels = await this.fetchAvailableModels();
if (codexModels.length === 0) {
throw new Error("Codex did not return any models");
}
const currentModelId = ModelId.fromThreadResponse(threadStartResponse).toString();

return {
sessionId: threadStartResponse.thread.id,
currentModelId: currentModelId,
Expand Down
17 changes: 9 additions & 8 deletions src/ModelId.ts
Original file line number Diff line number Diff line change
Expand Up @@ -16,17 +16,18 @@ export class ModelId {
}

static fromString(modelId: string): ModelId {
const parts = modelId.split("/");
const model = parts[0];
const effort = parts[1] ?? null;
const bracketMatch = modelId.match(/^(?<model>[^\[]+?)(?:\[(?<effort>[^\]]+)\])?$/);
const model = bracketMatch?.groups?.["model"];
const effort = bracketMatch?.groups?.["effort"] ?? null;

if (!model) {
throw new Error(`Invalid modelId format: ${modelId}`);
if (model) {
return new ModelId(model, effort);
}
return new ModelId(model, effort);

throw new Error(`Invalid modelId format: ${modelId}`);
}

toString(): string {
return this.effort ? `${this.model}/${this.effort}` : this.model;
return this.effort ? `${this.model}[${this.effort}]` : this.model;
}
}
}
2 changes: 1 addition & 1 deletion src/__tests__/CodexACPAgent/CodexAcpClient.test.ts
Original file line number Diff line number Diff line change
Expand Up @@ -16,7 +16,7 @@ describe('ACP server test', { timeout: 40_000 }, () => {
vi.clearAllMocks();
});

const ignoredFields = ["thread", "cwd", "id", "createdAt", "path", "threadId", "userAgent", "sandbox", "reasoningEffort", "conversationId"];
const ignoredFields = ["thread", "cwd", "id", "createdAt", "path", "threadId", "userAgent", "sandbox", "conversationId", "origins", "projects", "supportedReasoningEfforts", "reasoningEffort"];

it('should start conversation', async () => {
const codexAcpAgent = fixture.getCodexAcpAgent();
Expand Down
49 changes: 3 additions & 46 deletions src/__tests__/CodexACPAgent/data/auth-with-key.json
Original file line number Diff line number Diff line change
Expand Up @@ -88,24 +88,7 @@
"model": "gpt-5.1-codex-max",
"displayName": "gpt-5.1-codex-max",
"description": "Codex-optimized flagship for deep and fast reasoning.",
"supportedReasoningEfforts": [
{
"reasoningEffort": "reasoningEffort",
"description": "Fast responses with lighter reasoning"
},
{
"reasoningEffort": "reasoningEffort",
"description": "Balances speed and reasoning depth for everyday tasks"
},
{
"reasoningEffort": "reasoningEffort",
"description": "Greater reasoning depth for complex problems"
},
{
"reasoningEffort": "reasoningEffort",
"description": "Extra high reasoning depth for complex problems"
}
],
"supportedReasoningEfforts": "supportedReasoningEfforts",
"defaultReasoningEffort": "medium",
"isDefault": true
},
Expand All @@ -114,16 +97,7 @@
"model": "gpt-5.1-codex-mini",
"displayName": "gpt-5.1-codex-mini",
"description": "Optimized for codex. Cheaper, faster, but less capable.",
"supportedReasoningEfforts": [
{
"reasoningEffort": "reasoningEffort",
"description": "Dynamically adjusts reasoning based on the task"
},
{
"reasoningEffort": "reasoningEffort",
"description": "Maximizes reasoning depth for complex or ambiguous problems"
}
],
"supportedReasoningEfforts": "supportedReasoningEfforts",
"defaultReasoningEffort": "medium",
"isDefault": false
},
Expand All @@ -132,24 +106,7 @@
"model": "gpt-5.2",
"displayName": "gpt-5.2",
"description": "Latest frontier model with improvements across knowledge, reasoning and coding",
"supportedReasoningEfforts": [
{
"reasoningEffort": "reasoningEffort",
"description": "Balances speed with some reasoning; useful for straightforward queries and short explanations"
},
{
"reasoningEffort": "reasoningEffort",
"description": "Provides a solid balance of reasoning depth and latency for general-purpose tasks"
},
{
"reasoningEffort": "reasoningEffort",
"description": "Maximizes reasoning depth for complex or ambiguous problems"
},
{
"reasoningEffort": "reasoningEffort",
"description": "Extra high reasoning for complex problems"
}
],
"supportedReasoningEfforts": "supportedReasoningEfforts",
"defaultReasoningEffort": "medium",
"isDefault": false
}
Expand Down
49 changes: 3 additions & 46 deletions src/__tests__/CodexACPAgent/data/start-conversation.json
Original file line number Diff line number Diff line change
Expand Up @@ -77,24 +77,7 @@
"model": "gpt-5.1-codex-max",
"displayName": "gpt-5.1-codex-max",
"description": "Codex-optimized flagship for deep and fast reasoning.",
"supportedReasoningEfforts": [
{
"reasoningEffort": "reasoningEffort",
"description": "Fast responses with lighter reasoning"
},
{
"reasoningEffort": "reasoningEffort",
"description": "Balances speed and reasoning depth for everyday tasks"
},
{
"reasoningEffort": "reasoningEffort",
"description": "Greater reasoning depth for complex problems"
},
{
"reasoningEffort": "reasoningEffort",
"description": "Extra high reasoning depth for complex problems"
}
],
"supportedReasoningEfforts": "supportedReasoningEfforts",
"defaultReasoningEffort": "medium",
"isDefault": true
},
Expand All @@ -103,16 +86,7 @@
"model": "gpt-5.1-codex-mini",
"displayName": "gpt-5.1-codex-mini",
"description": "Optimized for codex. Cheaper, faster, but less capable.",
"supportedReasoningEfforts": [
{
"reasoningEffort": "reasoningEffort",
"description": "Dynamically adjusts reasoning based on the task"
},
{
"reasoningEffort": "reasoningEffort",
"description": "Maximizes reasoning depth for complex or ambiguous problems"
}
],
"supportedReasoningEfforts": "supportedReasoningEfforts",
"defaultReasoningEffort": "medium",
"isDefault": false
},
Expand All @@ -121,24 +95,7 @@
"model": "gpt-5.2",
"displayName": "gpt-5.2",
"description": "Latest frontier model with improvements across knowledge, reasoning and coding",
"supportedReasoningEfforts": [
{
"reasoningEffort": "reasoningEffort",
"description": "Balances speed with some reasoning; useful for straightforward queries and short explanations"
},
{
"reasoningEffort": "reasoningEffort",
"description": "Provides a solid balance of reasoning depth and latency for general-purpose tasks"
},
{
"reasoningEffort": "reasoningEffort",
"description": "Maximizes reasoning depth for complex or ambiguous problems"
},
{
"reasoningEffort": "reasoningEffort",
"description": "Extra high reasoning for complex problems"
}
],
"supportedReasoningEfforts": "supportedReasoningEfforts",
"defaultReasoningEffort": "medium",
"isDefault": false
}
Expand Down