Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
20 commits
Select commit Hold shift + click to select a range
7d7cdd2
feat: implement extensible OAuth 2.0 PKCE provider connect system
ProfSynapse Feb 21, 2026
58b0e93
test: add 174 unit tests for OAuth PKCE provider system
ProfSynapse Feb 21, 2026
31306d9
fix: apply post-review security, quality, and test improvements
ProfSynapse Feb 21, 2026
f27dc82
feat: enable tool call support in OpenAICodexAdapter
ProfSynapse Feb 21, 2026
bb5a4ab
fix: correct tool map callback type in OpenAICodexAdapter
ProfSynapse Feb 21, 2026
15576fb
fix: merge Codex into OpenAI card, move connect button above API key,…
ProfSynapse Feb 22, 2026
09a24c2
fix: use localhost for Codex redirect_uri, cancel stuck OAuth flows
ProfSynapse Feb 22, 2026
f54ebc3
fix: remove experimental consent modal from Codex OAuth flow
ProfSynapse Feb 22, 2026
c8f4b14
feat: auto-fallback from Codex to OpenAI API on rate limit (429)
ProfSynapse Feb 22, 2026
ed02c2b
fix: correct Codex description text and remove stale experimental flags
ProfSynapse Feb 22, 2026
85d2af9
fix: add openai-codex to PROVIDER_NAMES so ChatGPT models appear in d…
ProfSynapse Feb 22, 2026
b7931e9
fix: live-update chat settings provider dropdown after OAuth connect
ProfSynapse Feb 22, 2026
f2106d3
fix: remove hardcoded (Experimental) suffix from secondary OAuth sect…
ProfSynapse Feb 22, 2026
8cd695f
feat: merge Codex models into OpenAI provider display in chat settings
ProfSynapse Feb 22, 2026
3832cc3
fix: add openai-codex case to StaticModelsService so Codex models app…
ProfSynapse Feb 22, 2026
8950c12
fix: don't persist model fallback in ChatSettingsRenderer — prevents …
ProfSynapse Feb 22, 2026
92de0ed
fix: full Codex/ChatGPT tool use — CORS, streaming, continuation, too…
ProfSynapse Feb 22, 2026
21d37b6
fix: remove debug console.log statements from OpenAICodexAdapter
ProfSynapse Feb 22, 2026
5269a34
fix: harden OpenAICodexAdapter with timeout, JSON safety, and model c…
ProfSynapse Feb 22, 2026
41bf6f4
test: add missing coverage for Codex adapter and ProviderMessageBuilder
ProfSynapse Feb 22, 2026
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
48 changes: 48 additions & 0 deletions jest.config.js
Original file line number Diff line number Diff line change
Expand Up @@ -25,6 +25,13 @@ module.exports = {
'src/services/embeddings/ConversationIndexer.ts',
'src/services/embeddings/TraceIndexer.ts',
'src/agents/searchManager/services/ConversationSearchStrategy.ts',
// OAuth service layer + providers + adapter
'src/services/oauth/PKCEUtils.ts',
'src/services/oauth/OAuthCallbackServer.ts',
'src/services/oauth/OAuthService.ts',
'src/services/oauth/providers/OpenRouterOAuthProvider.ts',
'src/services/oauth/providers/OpenAICodexOAuthProvider.ts',
'src/services/llm/adapters/openai-codex/OpenAICodexAdapter.ts',
'!src/**/*.d.ts'
],
coverageThreshold: {
Expand Down Expand Up @@ -126,6 +133,47 @@ module.exports = {
functions: 85,
lines: 85,
statements: 85
},
// OAuth service layer: pure crypto utils (high bar)
'./src/services/oauth/PKCEUtils.ts': {
branches: 80,
functions: 100,
lines: 100,
statements: 100
},
// OAuth callback server: integration-style tests cover all paths
'./src/services/oauth/OAuthCallbackServer.ts': {
branches: 75,
functions: 80,
lines: 80,
statements: 80
},
// OAuth service: orchestration with mocked dependencies
'./src/services/oauth/OAuthService.ts': {
branches: 75,
functions: 80,
lines: 80,
statements: 80
},
// OAuth providers: API integration with mocked fetch
'./src/services/oauth/providers/OpenRouterOAuthProvider.ts': {
branches: 75,
functions: 80,
lines: 80,
statements: 80
},
'./src/services/oauth/providers/OpenAICodexOAuthProvider.ts': {
branches: 75,
functions: 80,
lines: 80,
statements: 80
},
// Codex adapter: SSE parsing + token management with mocked fetch
'./src/services/llm/adapters/openai-codex/OpenAICodexAdapter.ts': {
branches: 75,
functions: 80,
lines: 80,
statements: 80
}
},
coverageDirectory: 'coverage',
Expand Down
6 changes: 6 additions & 0 deletions src/components/LLMProviderModal.ts
Original file line number Diff line number Diff line change
Expand Up @@ -20,6 +20,8 @@ import {
IProviderModal,
ProviderModalConfig,
ProviderModalDependencies,
OAuthModalConfig,
SecondaryOAuthProviderConfig,
} from './llm-provider/types';
import { NexusProviderModal } from './llm-provider/providers/NexusProviderModal';
import { OllamaProviderModal } from './llm-provider/providers/OllamaProviderModal';
Expand All @@ -36,6 +38,8 @@ export interface LLMProviderModalConfig {
keyFormat: string;
signupUrl: string;
config: LLMProviderConfig;
oauthConfig?: OAuthModalConfig;
secondaryOAuthProvider?: SecondaryOAuthProviderConfig;
onSave: (config: LLMProviderConfig) => void;
}

Expand Down Expand Up @@ -144,6 +148,8 @@ export class LLMProviderModal extends Modal {
signupUrl: this.config.signupUrl,
config: { ...this.config.config },
onConfigChange: (config: LLMProviderConfig) => this.handleConfigChange(config),
oauthConfig: this.config.oauthConfig,
secondaryOAuthProvider: this.config.secondaryOAuthProvider,
};
}

Expand Down
Loading