* feat(api): classify openai-compatible provider failures * Update src/services/api/providerConfig.ts Co-authored-by: Copilot <175728472+Copilot@users.noreply.github.com> * Update src/services/api/errors.ts Co-authored-by: Copilot <175728472+Copilot@users.noreply.github.com> * feat(api): harden openai-compatible diagnostics and env fallback * Update src/services/api/openaiShim.ts Co-authored-by: Copilot <175728472+Copilot@users.noreply.github.com> * Update src/services/api/openaiShim.ts Co-authored-by: Copilot <175728472+Copilot@users.noreply.github.com> * Update src/services/api/errors.ts Co-authored-by: Copilot <175728472+Copilot@users.noreply.github.com> * Update src/services/api/errors.ts Co-authored-by: Copilot <175728472+Copilot@users.noreply.github.com> * Apply suggestion from @Copilot Co-authored-by: Copilot <175728472+Copilot@users.noreply.github.com> * fix openaiShim duplicate requests and diagnostics * remove unused url from http failure classifier * dedupe env diagnostic warnings * Remove hardcoded URLs from OpenAI error tests Removed hardcoded URLs from network failure classification tests. * Update providerConfig.envDiagnostics.test.ts * fix(openai-shim): return successful responses and restore localhost classifier tests * Update src/services/api/openaiShim.ts Co-authored-by: Copilot <175728472+Copilot@users.noreply.github.com> * Update src/services/api/openaiShim.ts Co-authored-by: Copilot <175728472+Copilot@users.noreply.github.com> * Update src/services/api/openaiShim.ts Co-authored-by: Copilot <175728472+Copilot@users.noreply.github.com> * feat(provider): add truthful local generation readiness checks Implement Phase 2 provider readiness behavior by adding structured Ollama generation probes, wiring setup flows to readiness states, extending system-check with generation readiness output, and updating focused tests. * feat(api): add local self-healing fallback retries Implement Phase 3 self-healing behavior for local OpenAI-compatible providers: retry base URL fallbacks for localhost resolution and endpoint mismatches, plus capability-gated toolless retry for tool-incompatible local models; include diagnostics and focused tests. * fix(api): address review blockers for local provider reliability * Update src/utils/providerDiscovery.ts Co-authored-by: Copilot <175728472+Copilot@users.noreply.github.com> * Update src/services/api/openaiShim.ts Co-authored-by: Copilot <175728472+Copilot@users.noreply.github.com> * fix: harden readiness probes and cross-platform test stability * fix: refresh toolless retry payload and stabilize osc clipboard test * fix: harden Ollama readiness parsing and redact provider URLs --------- Co-authored-by: Copilot <175728472+Copilot@users.noreply.github.com>
48 lines
1.1 KiB
TypeScript
48 lines
1.1 KiB
TypeScript
const SENSITIVE_URL_QUERY_PARAM_TOKENS = [
|
|
'api_key',
|
|
'apikey',
|
|
'key',
|
|
'token',
|
|
'access_token',
|
|
'refresh_token',
|
|
'signature',
|
|
'sig',
|
|
'secret',
|
|
'password',
|
|
'passwd',
|
|
'pwd',
|
|
'auth',
|
|
'authorization',
|
|
]
|
|
|
|
function shouldRedactUrlQueryParam(name: string): boolean {
|
|
const lower = name.toLowerCase()
|
|
return SENSITIVE_URL_QUERY_PARAM_TOKENS.some(token => lower.includes(token))
|
|
}
|
|
|
|
export function redactUrlForDisplay(rawUrl: string): string {
|
|
try {
|
|
const parsed = new URL(rawUrl)
|
|
if (parsed.username) {
|
|
parsed.username = 'redacted'
|
|
}
|
|
if (parsed.password) {
|
|
parsed.password = 'redacted'
|
|
}
|
|
|
|
for (const key of parsed.searchParams.keys()) {
|
|
if (shouldRedactUrlQueryParam(key)) {
|
|
parsed.searchParams.set(key, 'redacted')
|
|
}
|
|
}
|
|
|
|
return parsed.toString()
|
|
} catch {
|
|
return rawUrl
|
|
.replace(/\/\/[^/@\s]+(?::[^/@\s]*)?@/g, '//redacted@')
|
|
.replace(
|
|
/([?&](?:token|access_token|refresh_token|api_key|apikey|key|password|passwd|pwd|auth|authorization|signature|sig|secret)=)[^&#]*/gi,
|
|
'$1redacted',
|
|
)
|
|
}
|
|
} |