mirror of
https://github.com/tiennm99/ccs.git
synced 2026-07-16 18:16:08 +00:00
* fix(ui): validate BASE_URL and AUTH_TOKEN before save - Add validation in use-provider-editor to block save when required env vars (ANTHROPIC_BASE_URL, ANTHROPIC_AUTH_TOKEN) are missing - Show warning banner in raw editor when required fields are absent - Always apply default preset on account add (not just first account) This implements defense-in-depth: validation UI prevents confusion, save-time validation prevents broken configs, auto-preset ensures new providers start with working configuration. Fixes #224 * fix: add validation to remaining settings routes and UI hooks Backend: - settings-routes.ts: Validate ANTHROPIC_BASE_URL and AUTH_TOKEN on PUT - profile-routes.ts: Validate baseUrl/apiKey not empty on update - variant-routes.ts: Require model field for variant creation Frontend: - use-profile-editor.ts: Add required field validation + error handling - use-copilot-config-form.ts: Add required field validation + error handling Both hooks now expose missingRequiredFields for UI warnings. Ref #224 * feat(ux): auto-fill missing BASE_URL/AUTH_TOKEN from defaults at runtime Instead of blocking saves when required env vars are missing, the system now: - Runtime fills missing values from getClaudeEnvVars() defaults - Backend returns warning in response (not 400 error) - UI shows informational toast instead of blocking error - Yellow warning banner still shown for user awareness This provides better UX for CLIProxy users - saves always work, and missing fields automatically use sensible defaults (local proxy URL and global API key). * fix(api): validate settings object before write to prevent undefined file content Add validation to PUT /api/settings/:profile to return 400 if settings object is undefined/null. Previously JSON.stringify(undefined) would write literal "undefined" string to settings file. * fix: add port validation and pre-save warning UI - Add validatePort() helper (1-65535 range) to config-generator.ts - Add missing field warning banner to copilot/config-form UI - Add missing field warning banner to profiles/editor UI - Wire missingRequiredFields prop through components
React + TypeScript + Vite
This template provides a minimal setup to get React working in Vite with HMR and some ESLint rules.
Currently, two official plugins are available:
- @vitejs/plugin-react uses Babel (or oxc when used in rolldown-vite) for Fast Refresh
- @vitejs/plugin-react-swc uses SWC for Fast Refresh
React Compiler
The React Compiler is not enabled on this template because of its impact on dev & build performances. To add it, see this documentation.
Expanding the ESLint configuration
If you are developing a production application, we recommend updating the configuration to enable type-aware lint rules:
export default defineConfig([
globalIgnores(['dist']),
{
files: ['**/*.{ts,tsx}'],
extends: [
// Other configs...
// Remove tseslint.configs.recommended and replace with this
tseslint.configs.recommendedTypeChecked,
// Alternatively, use this for stricter rules
tseslint.configs.strictTypeChecked,
// Optionally, add this for stylistic rules
tseslint.configs.stylisticTypeChecked,
// Other configs...
],
languageOptions: {
parserOptions: {
project: ['./tsconfig.node.json', './tsconfig.app.json'],
tsconfigRootDir: import.meta.dirname,
},
// other options...
},
},
])
You can also install eslint-plugin-react-x and eslint-plugin-react-dom for React-specific lint rules:
// eslint.config.js
import reactX from 'eslint-plugin-react-x'
import reactDom from 'eslint-plugin-react-dom'
export default defineConfig([
globalIgnores(['dist']),
{
files: ['**/*.{ts,tsx}'],
extends: [
// Other configs...
// Enable lint rules for React
reactX.configs['recommended-typescript'],
// Enable lint rules for React DOM
reactDom.configs.recommended,
],
languageOptions: {
parserOptions: {
project: ['./tsconfig.node.json', './tsconfig.app.json'],
tsconfigRootDir: import.meta.dirname,
},
// other options...
},
},
])