feat: add legacy endpoint migration and testing endpoint notice
This commit is contained in:
@@ -10,3 +10,21 @@ export const DEMO_CONFIG: LLMConfig = {
|
|||||||
baseURL: DEMO_BASE_URL,
|
baseURL: DEMO_BASE_URL,
|
||||||
model: DEMO_MODEL,
|
model: DEMO_MODEL,
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/** Legacy testing endpoints that should be auto-migrated to DEMO_BASE_URL */
|
||||||
|
export const LEGACY_TESTING_ENDPOINTS = [
|
||||||
|
'https://hwcxiuzfylggtcktqgij.supabase.co/functions/v1/llm-testing-proxy',
|
||||||
|
]
|
||||||
|
|
||||||
|
export function isTestingEndpoint(url: string): boolean {
|
||||||
|
const normalized = url.replace(/\/+$/, '')
|
||||||
|
return normalized === DEMO_BASE_URL || LEGACY_TESTING_ENDPOINTS.some((ep) => normalized === ep)
|
||||||
|
}
|
||||||
|
|
||||||
|
export function migrateLegacyEndpoint(config: LLMConfig): LLMConfig {
|
||||||
|
const normalized = config.baseURL.replace(/\/+$/, '')
|
||||||
|
if (LEGACY_TESTING_ENDPOINTS.some((ep) => normalized === ep)) {
|
||||||
|
return { ...DEMO_CONFIG }
|
||||||
|
}
|
||||||
|
return config
|
||||||
|
}
|
||||||
|
|||||||
@@ -11,7 +11,7 @@ import type { LLMConfig } from '@page-agent/llms'
|
|||||||
import { useCallback, useEffect, useRef, useState } from 'react'
|
import { useCallback, useEffect, useRef, useState } from 'react'
|
||||||
|
|
||||||
import { MultiPageAgent } from './MultiPageAgent'
|
import { MultiPageAgent } from './MultiPageAgent'
|
||||||
import { DEMO_CONFIG } from './constants'
|
import { DEMO_CONFIG, migrateLegacyEndpoint } from './constants'
|
||||||
|
|
||||||
/** Language preference: undefined means follow system */
|
/** Language preference: undefined means follow system */
|
||||||
export type LanguagePreference = SupportedLanguage | undefined
|
export type LanguagePreference = SupportedLanguage | undefined
|
||||||
@@ -41,13 +41,19 @@ export function useAgent(): UseAgentResult {
|
|||||||
|
|
||||||
useEffect(() => {
|
useEffect(() => {
|
||||||
chrome.storage.local.get(['llmConfig', 'language']).then((result) => {
|
chrome.storage.local.get(['llmConfig', 'language']).then((result) => {
|
||||||
const llmConfig = (result.llmConfig as LLMConfig) ?? DEMO_CONFIG
|
let llmConfig = (result.llmConfig as LLMConfig) ?? DEMO_CONFIG
|
||||||
const language = (result.language as SupportedLanguage) || undefined
|
const language = (result.language as SupportedLanguage) || undefined
|
||||||
const full = { ...llmConfig, language }
|
|
||||||
if (!result.llmConfig) {
|
// Auto-migrate legacy testing endpoints
|
||||||
|
const migrated = migrateLegacyEndpoint(llmConfig)
|
||||||
|
if (migrated !== llmConfig) {
|
||||||
|
llmConfig = migrated
|
||||||
|
chrome.storage.local.set({ llmConfig: migrated })
|
||||||
|
} else if (!result.llmConfig) {
|
||||||
chrome.storage.local.set({ llmConfig: DEMO_CONFIG })
|
chrome.storage.local.set({ llmConfig: DEMO_CONFIG })
|
||||||
}
|
}
|
||||||
setConfig(full)
|
|
||||||
|
setConfig({ ...llmConfig, language })
|
||||||
})
|
})
|
||||||
}, [])
|
}, [])
|
||||||
|
|
||||||
|
|||||||
@@ -2,7 +2,7 @@ import { Copy, CornerUpLeft, Eye, EyeOff, HatGlasses, Home, Loader2, Scale } fro
|
|||||||
import { useEffect, useState } from 'react'
|
import { useEffect, useState } from 'react'
|
||||||
import { siGithub } from 'simple-icons'
|
import { siGithub } from 'simple-icons'
|
||||||
|
|
||||||
import { DEMO_API_KEY, DEMO_BASE_URL, DEMO_MODEL } from '@/agent/constants'
|
import { DEMO_API_KEY, DEMO_BASE_URL, DEMO_MODEL, isTestingEndpoint } from '@/agent/constants'
|
||||||
import type { ExtConfig, LanguagePreference } from '@/agent/useAgent'
|
import type { ExtConfig, LanguagePreference } from '@/agent/useAgent'
|
||||||
import { Button } from '@/components/ui/button'
|
import { Button } from '@/components/ui/button'
|
||||||
import { Input } from '@/components/ui/input'
|
import { Input } from '@/components/ui/input'
|
||||||
@@ -87,6 +87,23 @@ export function ConfigPanel({ config, onSave, onClose }: ConfigPanelProps) {
|
|||||||
</Button>
|
</Button>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
|
{/* Testing API notice */}
|
||||||
|
{isTestingEndpoint(baseURL) && (
|
||||||
|
<div className="p-2.5 rounded-md border border-amber-500/30 bg-amber-500/5 text-[10px] text-muted-foreground leading-relaxed">
|
||||||
|
<Scale className="size-3 inline-block mr-1 -mt-0.5 text-amber-600" />
|
||||||
|
You are using the free testing API. By using this service you agree to the{' '}
|
||||||
|
<a
|
||||||
|
href="https://github.com/alibaba/page-agent/blob/main/docs/terms-and-privacy.md"
|
||||||
|
target="_blank"
|
||||||
|
rel="noopener noreferrer"
|
||||||
|
className="underline hover:text-foreground"
|
||||||
|
>
|
||||||
|
Terms of Use & Privacy Policy
|
||||||
|
</a>
|
||||||
|
. No sensitive data. No guaranteed availability.
|
||||||
|
</div>
|
||||||
|
)}
|
||||||
|
|
||||||
{/* User Auth Token Section */}
|
{/* User Auth Token Section */}
|
||||||
<div className="flex flex-col gap-1.5 p-3 bg-muted/50 rounded-md border">
|
<div className="flex flex-col gap-1.5 p-3 bg-muted/50 rounded-md border">
|
||||||
<label className="text-xs font-medium text-muted-foreground">User Auth Token</label>
|
<label className="text-xs font-medium text-muted-foreground">User Auth Token</label>
|
||||||
|
|||||||
Reference in New Issue
Block a user