Add unified analytics tracking for all CLIProxy-routed providers
(Gemini/Droid, Codex, OpenCode, Antigravity, Qwen) alongside
existing Claude JSONL data.
- New transformer converts CLIProxy usage API response to
DailyUsage/HourlyUsage/MonthlyUsage types
- New syncer periodically fetches CLIProxy data (5min interval)
and persists snapshots to ~/.ccs/cache/cliproxy-usage/
- Aggregator treats CLIProxy as 3rd data source alongside
default Claude config and CCS instances
- Charts automatically show multi-provider data in unified view
- Graceful degradation when CLIProxy is unavailable
- replace sync fs calls in compatible CLI JSON helper with fs.promises
- make droid diagnostics/raw-settings service + routes async
- update unit tests for async save/read paths
- add shared backend JSON file probe/write utilities for compatible CLI settings
- add shared frontend raw JSON editor panel and wire Droid page to it
- support PUT save flow with validation and mtime conflict handling
- replace ~/.config/factory/config.json diagnostics with legacy ~/.factory/config.json
- keep ~/.factory/settings.json as the primary BYOK source in UI + API payload
- update droid dashboard tests and frontend typings for legacyConfig
- add /droid route under a new Compatible CLIs sidebar section
- expose /api/droid/diagnostics and /api/droid/settings/raw for install and BYOK visibility
- include read-only settings.json viewer plus model/provider breakdown
- add unit coverage for droid dashboard service parsing and path logic
- add Droid provider resolver aligned with Factory BYOK schema
- persist and normalize CCS_DROID_PROVIDER across CLI and dashboard flows
- use Droid managed selector aliases with safe legacy fallback
- add unit coverage for provider inference and selector usage
Closes#632
- validate target request payloads for create and update APIs
- pass target into single/composite service operations
- include target in variant API responses
- validate target payloads for profile create/update
- return target in profile list and create responses
- allow updating target independently from settings values
- add lock-held mutateUnifiedConfig read-modify-write path for config.yaml
- use atomic mutation in /api/settings/auth/antigravity-risk to prevent stale overwrites
- replace browser confirm with in-app 2-step banner + typed phrase validation
- verify saved AGY power-user value with post-save read before showing success
Refs #509
- add safer error responses for settings/auth routes to avoid leaking internals
- guard sensitive AGY settings endpoints to localhost when dashboard auth is off
- validate start-route bodies and reject OAuth start in remote mode for consistency
- preserve cliproxy.kiro_no_incognito and token_refresh during config merges
- enforce AGY acknowledgement in remote auth-token run/auth command paths
Handle shared skills and agents when entries are symlinked directories.
Also avoid classifying root markdown files in skills/agents as commands.
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
Address review feedback from PR #585:
- Add missing kimi-k2 pricing entry ($0.60/$2.50, cache $0.15)
to avoid fallback to unknown model pricing
- Add kimi provider tests to model-catalog.test.js verifying
catalog structure, default model, and model IDs
- Add kimi entry to UI model-catalogs.ts with K2.5, K2 Thinking, K2
models and preset mappings so dashboard shows available models
- Add kimi to CHANNEL_TO_PROVIDER and SYNCABLE_PROVIDERS in
catalog-cache.ts so models sync from upstream CLIProxyAPI
- Add kimi/moonshot to provider-editor ownerMap for model filtering
- Update Kimi model pricing to match official Kimi Platform rates:
kimi-k2.5 ($0.60/$3.00), kimi-k2-thinking ($0.60/$2.50),
kimi-k2-turbo-preview ($1.15/$8.00)
- Add missing kimi-k2.5 pricing entry
Closes#581