multi-ccp 0.1.3 → 0.1.4

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -1 +1 @@
1
- {"version":3,"file":"ccr.js","sourceRoot":"","sources":["../../src/core/ccr.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"ccr.js","sourceRoot":"","sources":["../../src/core/ccr.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,47 @@
1
+ import type { ProfileSummary } from "./types.js";
2
+ import type { PathContext } from "./paths.js";
3
+ export type ProfilePresetType = "api" | "ccr" | "login" | "custom-api" | "manual-ccr";
4
+ export interface BaseProfilePreset {
5
+ id: string;
6
+ label: string;
7
+ type: ProfilePresetType;
8
+ category: "api" | "ccr" | "custom" | "login";
9
+ defaultProfileName: string;
10
+ description: string;
11
+ modelSummary?: string;
12
+ tags?: string[];
13
+ sortOrder?: number;
14
+ }
15
+ export interface ApiProfilePreset extends BaseProfilePreset {
16
+ type: "api";
17
+ env: Record<string, string>;
18
+ }
19
+ export interface CcrProfilePreset extends BaseProfilePreset {
20
+ type: "ccr";
21
+ ccrPreset: string;
22
+ ccrRoute: string;
23
+ tokenDefault?: string;
24
+ }
25
+ export interface CustomApiProfilePreset extends BaseProfilePreset {
26
+ type: "custom-api";
27
+ }
28
+ export interface ManualCcrProfilePreset extends BaseProfilePreset {
29
+ type: "manual-ccr";
30
+ }
31
+ export interface LoginProfilePreset extends BaseProfilePreset {
32
+ type: "login";
33
+ }
34
+ export type BuiltinProfilePreset = ApiProfilePreset | CcrProfilePreset | CustomApiProfilePreset | ManualCcrProfilePreset | LoginProfilePreset;
35
+ export declare const PROFILE_PRESETS: BuiltinProfilePreset[];
36
+ export declare function listProfilePresets(): BuiltinProfilePreset[];
37
+ export declare function getProfilePreset(id: string): BuiltinProfilePreset;
38
+ export declare function createApiProfileFromPreset(input: {
39
+ presetId: string;
40
+ name?: string;
41
+ token: string;
42
+ }, context?: PathContext): Promise<ProfileSummary>;
43
+ export declare function createCcrProfileFromPreset(input: {
44
+ presetId: string;
45
+ name?: string;
46
+ token?: string;
47
+ }, context?: PathContext): Promise<ProfileSummary>;
@@ -0,0 +1,142 @@
1
+ import { CcpError } from "./errors.js";
2
+ import { createApiProfileFromEnv, createCcrProfile } from "./profiles.js";
3
+ export const PROFILE_PRESETS = [
4
+ {
5
+ id: "aicodemirror",
6
+ label: "AI CodeMirror",
7
+ type: "api",
8
+ category: "api",
9
+ defaultProfileName: "aicodemirror",
10
+ description: "Anthropic-compatible endpoint using Claude Code default models.",
11
+ modelSummary: "Claude Code default",
12
+ tags: ["API", "Default Model"],
13
+ sortOrder: 10,
14
+ env: {
15
+ ANTHROPIC_BASE_URL: "https://api.aicodemirror.com/api/claudecode"
16
+ }
17
+ },
18
+ {
19
+ id: "deepseek",
20
+ label: "DeepSeek",
21
+ type: "api",
22
+ category: "api",
23
+ defaultProfileName: "deepseek",
24
+ description: "DeepSeek endpoint with long-context main models and flash subagent.",
25
+ modelSummary: "deepseek-v4-pro",
26
+ tags: ["API", "1M", "Flash"],
27
+ sortOrder: 20,
28
+ env: {
29
+ ANTHROPIC_BASE_URL: "https://api.deepseek.com/anthropic",
30
+ ANTHROPIC_DEFAULT_HAIKU_MODEL: "deepseek-v4-flash",
31
+ ANTHROPIC_DEFAULT_OPUS_MODEL: "deepseek-v4-pro[1M]",
32
+ ANTHROPIC_DEFAULT_SONNET_MODEL: "deepseek-v4-pro[1M]",
33
+ ANTHROPIC_MODEL: "deepseek-v4-pro",
34
+ CLAUDE_CODE_SUBAGENT_MODEL: "deepseek-v4-flash"
35
+ }
36
+ },
37
+ {
38
+ id: "mimo",
39
+ label: "Mimo",
40
+ type: "api",
41
+ category: "api",
42
+ defaultProfileName: "mimo",
43
+ description: "Mimo token-plan endpoint with 1M Opus/Sonnet model slots.",
44
+ modelSummary: "mimo-v2.5-pro",
45
+ tags: ["API", "1M"],
46
+ sortOrder: 30,
47
+ env: {
48
+ ANTHROPIC_BASE_URL: "https://token-plan-cn.xiaomimimo.com/anthropic",
49
+ ANTHROPIC_DEFAULT_HAIKU_MODEL: "mimo-v2.5-pro",
50
+ ANTHROPIC_DEFAULT_OPUS_MODEL: "mimo-v2.5-pro[1M]",
51
+ ANTHROPIC_DEFAULT_SONNET_MODEL: "mimo-v2.5-pro[1M]",
52
+ ANTHROPIC_MODEL: "mimo-v2.5-pro",
53
+ CLAUDE_CODE_SUBAGENT_MODEL: "mimo-v2.5-pro"
54
+ }
55
+ },
56
+ {
57
+ id: "custom-api",
58
+ label: "Custom API",
59
+ type: "custom-api",
60
+ category: "custom",
61
+ defaultProfileName: "custom-api",
62
+ description: "Manually enter an Anthropic-compatible endpoint and optional model.",
63
+ modelSummary: "Custom",
64
+ tags: ["API", "Manual"],
65
+ sortOrder: 90
66
+ },
67
+ {
68
+ id: "ccr-gpt",
69
+ label: "CCR GPT",
70
+ type: "ccr",
71
+ category: "ccr",
72
+ defaultProfileName: "ccr-gpt",
73
+ description: "CCR preset profile bound to openai,gpt-5.5.",
74
+ modelSummary: "openai,gpt-5.5",
75
+ tags: ["CCR", "GPT", "Router"],
76
+ sortOrder: 40,
77
+ ccrPreset: "ccr-gpt",
78
+ ccrRoute: "openai,gpt-5.5",
79
+ tokenDefault: "ccr-local-secret"
80
+ },
81
+ {
82
+ id: "manual-ccr",
83
+ label: "Manual CCR",
84
+ type: "manual-ccr",
85
+ category: "custom",
86
+ defaultProfileName: "ccr-profile",
87
+ description: "Choose or type a CCR route manually.",
88
+ modelSummary: "Manual route",
89
+ tags: ["CCR", "Manual"],
90
+ sortOrder: 100
91
+ },
92
+ {
93
+ id: "login",
94
+ label: "Claude Login",
95
+ type: "login",
96
+ category: "login",
97
+ defaultProfileName: "login",
98
+ description: "Create an isolated Claude Code account-login profile.",
99
+ modelSummary: "Claude account",
100
+ tags: ["Login"],
101
+ sortOrder: 110
102
+ }
103
+ ];
104
+ export function listProfilePresets() {
105
+ return PROFILE_PRESETS.map((preset) => ({ ...preset, ...(preset.type === "api" ? { env: { ...preset.env } } : {}) }));
106
+ }
107
+ export function getProfilePreset(id) {
108
+ const preset = PROFILE_PRESETS.find((item) => item.id === id);
109
+ if (!preset) {
110
+ throw new CcpError(`Unknown profile preset '${id}'.`);
111
+ }
112
+ return preset;
113
+ }
114
+ export async function createApiProfileFromPreset(input, context = {}) {
115
+ const preset = getProfilePreset(input.presetId);
116
+ if (preset.type !== "api") {
117
+ throw new CcpError(`Preset '${input.presetId}' is not an API preset.`);
118
+ }
119
+ const name = input.name?.trim() || preset.defaultProfileName;
120
+ return createApiProfileFromEnv({
121
+ name,
122
+ preset: preset.id,
123
+ env: {
124
+ ...preset.env,
125
+ ANTHROPIC_AUTH_TOKEN: input.token.trim() || "REPLACE_WITH_FULL_TOKEN"
126
+ }
127
+ }, context);
128
+ }
129
+ export async function createCcrProfileFromPreset(input, context = {}) {
130
+ const preset = getProfilePreset(input.presetId);
131
+ if (preset.type !== "ccr") {
132
+ throw new CcpError(`Preset '${input.presetId}' is not a CCR preset.`);
133
+ }
134
+ return createCcrProfile({
135
+ name: input.name?.trim() || preset.defaultProfileName,
136
+ presetName: preset.ccrPreset,
137
+ presetId: preset.id,
138
+ route: preset.ccrRoute,
139
+ token: input.token?.trim() || preset.tokenDefault || "ccr-local-secret"
140
+ }, context);
141
+ }
142
+ //# sourceMappingURL=presets.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"presets.js","sourceRoot":"","sources":["../../src/core/presets.ts"],"names":[],"mappings":"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"}
@@ -1,5 +1,5 @@
1
1
  import { type PathContext } from "./paths.js";
2
- import type { ClaudeSettings, CreateApiProfileInput, CreateLoginProfileInput, CreateCcrProfileInput, ProfileMeta, ProfileSummary, ProfileType } from "./types.js";
2
+ import type { ClaudeSettings, CreateApiProfileFromEnvInput, CreateApiProfileInput, CreateLoginProfileInput, CreateCcrProfileInput, ProfileMeta, ProfileSummary, ProfileType } from "./types.js";
3
3
  export declare function getProfileDir(name: string, context?: PathContext): string;
4
4
  export declare function profileExists(name: string, context?: PathContext): Promise<boolean>;
5
5
  export declare function resolveConfigDir(name: string, options?: {
@@ -14,6 +14,7 @@ export declare function inferProfileType(settings?: ClaudeSettings, meta?: Profi
14
14
  export declare function summarizeProfile(name: string, dir: string): Promise<ProfileSummary>;
15
15
  export declare function listProfiles(context?: PathContext): Promise<ProfileSummary[]>;
16
16
  export declare function createApiProfile(input: CreateApiProfileInput, context?: PathContext): Promise<ProfileSummary>;
17
+ export declare function createApiProfileFromEnv(input: CreateApiProfileFromEnvInput, context?: PathContext): Promise<ProfileSummary>;
17
18
  export declare function createLoginProfile(input: CreateLoginProfileInput, context?: PathContext): Promise<ProfileSummary>;
18
19
  export declare function createCcrProfile(input: CreateCcrProfileInput, context?: PathContext): Promise<ProfileSummary>;
19
20
  export declare function removeProfile(name: string, context?: PathContext): Promise<string>;
@@ -126,6 +126,20 @@ export async function createApiProfile(input, context = {}) {
126
126
  await writeMeta(profileDir, { version: 1, type: "api", createdAt: new Date().toISOString() });
127
127
  return summarizeProfile(input.name, profileDir);
128
128
  }
129
+ export async function createApiProfileFromEnv(input, context = {}) {
130
+ const profileDir = await assertNewProfile(input.name, context);
131
+ const baseUrl = input.env.ANTHROPIC_BASE_URL?.trim();
132
+ if (!baseUrl) {
133
+ throw new CcpError("ANTHROPIC_BASE_URL is required.");
134
+ }
135
+ await mkdir(profileDir, { recursive: true });
136
+ await writeSettings(profileDir, {
137
+ theme: "dark",
138
+ env: { ...input.env, ANTHROPIC_BASE_URL: baseUrl }
139
+ });
140
+ await writeMeta(profileDir, { version: 1, type: "api", preset: input.preset, createdAt: new Date().toISOString() });
141
+ return summarizeProfile(input.name, profileDir);
142
+ }
129
143
  export async function createLoginProfile(input, context = {}) {
130
144
  const profileDir = await assertNewProfile(input.name, context);
131
145
  await mkdir(profileDir, { recursive: true });
@@ -138,7 +152,8 @@ export async function createCcrProfile(input, context = {}) {
138
152
  if (!input.route.trim()) {
139
153
  throw new CcpError("CCR route is required for a preset-bound CCR profile.");
140
154
  }
141
- const endpoint = await getCcrPresetEndpoint(input.name, context);
155
+ const presetName = input.presetName?.trim() || input.name;
156
+ const endpoint = await getCcrPresetEndpoint(presetName, context);
142
157
  await mkdir(profileDir, { recursive: true });
143
158
  await writeSettings(profileDir, {
144
159
  theme: "dark",
@@ -156,11 +171,12 @@ export async function createCcrProfile(input, context = {}) {
156
171
  type: "ccr",
157
172
  endpoint,
158
173
  autoStart: true,
159
- ccrPreset: input.name,
174
+ ccrPreset: presetName,
160
175
  ccrRoute: input.route.trim(),
176
+ preset: input.presetId,
161
177
  createdAt: new Date().toISOString()
162
178
  });
163
- await ensureCcrPreset(input.name, input.route.trim(), context);
179
+ await ensureCcrPreset(presetName, input.route.trim(), context);
164
180
  return summarizeProfile(input.name, profileDir);
165
181
  }
166
182
  export async function removeProfile(name, context = {}) {
@@ -1 +1 @@
1
- {"version":3,"file":"profiles.js","sourceRoot":"","sources":["../../src/core/profiles.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"profiles.js","sourceRoot":"","sources":["../../src/core/profiles.ts"],"names":[],"mappings":"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"}
@@ -8,6 +8,7 @@ export interface ProfileMeta {
8
8
  version: number;
9
9
  type: Exclude<ProfileType, "unknown">;
10
10
  createdAt?: string;
11
+ preset?: string;
11
12
  endpoint?: string;
12
13
  autoStart?: boolean;
13
14
  ccrPreset?: string;
@@ -29,6 +30,11 @@ export interface CreateApiProfileInput {
29
30
  token: string;
30
31
  model: string;
31
32
  }
33
+ export interface CreateApiProfileFromEnvInput {
34
+ name: string;
35
+ env: Record<string, string>;
36
+ preset?: string;
37
+ }
32
38
  export interface CreateLoginProfileInput {
33
39
  name: string;
34
40
  }
@@ -36,4 +42,6 @@ export interface CreateCcrProfileInput {
36
42
  name: string;
37
43
  route: string;
38
44
  token: string;
45
+ presetName?: string;
46
+ presetId?: string;
39
47
  }
@@ -0,0 +1,69 @@
1
+ const token = document.querySelector('meta[name="ccp-ui-token"]').content;
2
+ const state = { profiles: [], dashboard: null, selected: null, filter: 'all', query: '', view: 'cards', ccr: null, ccrRoutes: [], presets: [], selectedPreset: 'custom-api', lastPresetName: '', presetQuery: '', presetFilter: 'all' };
3
+ const $ = (id) => document.getElementById(id);
4
+ const api = async (path, options = {}) => {
5
+ const res = await fetch(path, { ...options, headers: { 'content-type': 'application/json', 'x-ccp-ui-token': token, ...(options.headers || {}) } });
6
+ const data = await res.json().catch(() => ({}));
7
+ if (!res.ok) throw new Error(data.error || 'Request failed');
8
+ return data;
9
+ };
10
+ function escapeHtml(v){return String(v ?? '').replace(/[&<>"']/g,m=>({'&':'&amp;','<':'&lt;','>':'&gt;','"':'&quot;',"'":'&#39;'}[m]));}
11
+ function tagClass(tag){ if(['Ready','Running'].includes(tag)) return 'ready'; if(['Need Attention','Missing Token','Missing Base URL','CCR Offline','No Token'].includes(tag)) return 'warn'; if(['Invalid','Path Missing','Conflict'].includes(tag)) return 'bad'; return ''; }
12
+ function tags(items){ return `<div class="tag-row">${items.slice(0,3).map(t=>`<span class="tag ${tagClass(t)}">${escapeHtml(t)}</span>`).join('')}</div>`; }
13
+ function toast(message){ const el=document.createElement('div'); el.className='toast'; el.textContent=message; const openDialog=document.querySelector('dialog[open]'); let region=openDialog?.querySelector('.dialog-toast-region'); if(openDialog&&!region){ region=document.createElement('div'); region.className='dialog-toast-region'; (openDialog.querySelector('.modal-card')||openDialog).append(region); } (region || $('toastRegion')).append(el); setTimeout(()=>el.remove(),3600); }
14
+ function brief(profile){ if(profile.type==='api') return `<div><strong>Model</strong> ${escapeHtml(profile.model || 'Claude Code default')}</div><div><strong>Base</strong> ${escapeHtml(hostname(profile.baseUrl)||'Missing')}</div><div><strong>Token</strong> ${profile.tokenStatus==='set'?'Configured':'Missing'}</div>`; if(profile.type==='login') return `<div>Claude account login profile</div><div><strong>Path</strong> ${escapeHtml(shortPath(profile.dir))}</div>`; if(profile.type==='ccr') return `<div><strong>Preset</strong> ${escapeHtml(profile.meta?.ccrPreset || profile.name)}</div><div><strong>Route</strong> ${escapeHtml(profile.meta?.ccrRoute || 'Not set')}</div><div><strong>Endpoint</strong> ${escapeHtml(hostname(profile.baseUrl))}</div>`; if(profile.type==='main') return `<div>Claude Code default configuration</div><div><strong>Path</strong> ${escapeHtml(shortPath(profile.dir))}</div>`; return `<div><strong>Path</strong> ${escapeHtml(shortPath(profile.dir))}</div>`; }
15
+ function hostname(url){ try{return new URL(url).hostname}catch{return url||''} }
16
+ function shortPath(p){ return String(p||'').replace(/^.*?\.claude-profiles/, '~/.claude-profiles').replace(/^.*?\.claude$/, '~/.claude'); }
17
+ function filtered(){ return state.profiles.filter(p=>{ const q=state.query.toLowerCase(); const hay=[p.name,p.type,p.model,p.baseUrl,p.statusText,...(p.tags||[])].join(' ').toLowerCase(); const okQ=!q||hay.includes(q); const okF=state.filter==='all'||p.type===state.filter||(state.filter==='attention'&&p.status!=='ready'); return okQ&&okF; }); }
18
+ function renderSummary(){ const d=state.dashboard?.profiles || {}; const c=state.dashboard?.ccr || {}; const metrics=[['Profiles',d.total??0,'all'],['API',d.api??0,'api'],['Login',d.login??0,'login'],['CCR',d.ccr??0,'ccr'],['Attention',d.needsAttention??0,'attention']]; $('summaryGrid').innerHTML = metrics.map(([label,val,kind])=>`<article class="metric ${kind}"><span>${label}</span><b>${val}</b></article>`).join('') + `<article class="metric ccr-status" role="button" id="ccrMetric"><span>Router</span><b>${c.running?'Running':'Offline'}</b></article>`; $('ccrMetric').onclick=openCcrPanel; }
19
+ function iconSvg(name){
20
+ const icons={
21
+ home:'<svg viewBox="0 0 24 24" aria-hidden="true"><path d="M4 11.4 12 4l8 7.4v7.1a1.5 1.5 0 0 1-1.5 1.5h-13A1.5 1.5 0 0 1 4 18.5v-7.1Z"/><path d="M9 20v-6h6v6"/></svg>',
22
+ key:'<svg viewBox="0 0 24 24" aria-hidden="true"><rect x="4" y="5" width="16" height="14" rx="2"/><path d="M8 9h8"/><path d="M8 13h5"/><path d="M8 17h8"/></svg>',
23
+ user:'<svg viewBox="0 0 24 24" aria-hidden="true"><path d="M20 21a8 8 0 0 0-16 0"/><circle cx="12" cy="8" r="4"/></svg>',
24
+ route:'<svg viewBox="0 0 24 24" aria-hidden="true"><circle cx="6" cy="6" r="2"/><circle cx="18" cy="6" r="2"/><circle cx="12" cy="18" r="2"/><path d="M8 7.5 11 16"/><path d="m16 7.5-3 8.5"/><path d="M8 6h8"/></svg>',
25
+ circleHelp:'<svg viewBox="0 0 24 24" aria-hidden="true"><circle cx="12" cy="12" r="10"/><path d="M9.1 9a3 3 0 1 1 5.8 1c-.8 1.1-1.9 1.3-2.4 2.5"/><path d="M12 17h.01"/></svg>',
26
+ moon:'<svg viewBox="0 0 24 24" aria-hidden="true"><path d="M20.8 13.3A8.5 8.5 0 1 1 10.7 3.2 6.7 6.7 0 0 0 20.8 13.3Z"/></svg>',
27
+ sun:'<svg viewBox="0 0 24 24" aria-hidden="true"><circle cx="12" cy="12" r="4"/><path d="M12 2v2"/><path d="M12 20v2"/><path d="m4.93 4.93 1.41 1.41"/><path d="m17.66 17.66 1.41 1.41"/><path d="M2 12h2"/><path d="M20 12h2"/><path d="m6.34 17.66-1.41 1.41"/><path d="m19.07 4.93-1.41 1.41"/></svg>',
28
+ refresh:'<svg viewBox="0 0 24 24" aria-hidden="true"><path d="M21 12a9 9 0 0 1-15.5 6.2"/><path d="M3 12A9 9 0 0 1 18.5 5.8"/><path d="M18.5 3.5v4.8h-4.8"/><path d="M5.5 20.5v-4.8h4.8"/></svg>',
29
+ plus:'<svg viewBox="0 0 24 24" aria-hidden="true"><path d="M12 5v14"/><path d="M5 12h14"/></svg>',
30
+ search:'<svg viewBox="0 0 24 24" aria-hidden="true"><circle cx="11" cy="11" r="7"/><path d="m20 20-3.5-3.5"/></svg>'
31
+ };
32
+ return icons[name]||icons.circleHelp;
33
+ }
34
+ function hydrateIcons(){ document.querySelectorAll('[data-icon]').forEach(el=>{ el.innerHTML=iconSvg(el.dataset.icon); }); }
35
+ function iconFor(type){ return iconSvg({main:'home',api:'key',login:'user',ccr:'route',unknown:'circleHelp'}[type]||'circleHelp'); }
36
+ function actionHint(p){ if(p.type==='api') return p.tokenStatus==='set'?'API key ready':'Needs token'; if(p.type==='ccr') return p.statusText; if(p.type==='login') return 'Login isolated'; if(p.type==='main') return 'Default config'; return p.statusText; }
37
+ function renderBoard(options={}){ const board=$('profileBoard'); const items=filtered(); if(!items.length){ board.innerHTML=`${boardToolbar()}<div class="empty-state"><p class="eyebrow">empty result</p><h2>没有匹配的 Profile</h2><p>调整搜索或筛选条件,或者创建一个新的 Profile。</p></div>`; bindBoardControls(board); restoreBoardFocus(options); return; } board.innerHTML=`${boardToolbar()}<div class="board-head"><div><p class="eyebrow">profiles</p><h2>${items.length} visible profiles</h2></div><p>${items.filter(p=>p.status!=='ready').length} need attention</p></div>${state.view==='cards'?renderCards(items):renderList(items)}`; bindBoardControls(board); restoreBoardFocus(options); board.querySelectorAll('[data-select]').forEach(el=>el.addEventListener('click',()=>selectProfile(el.dataset.select))); board.querySelectorAll('[data-copy]').forEach(el=>el.addEventListener('click',e=>{e.stopPropagation(); copy(el.dataset.copy)})); }
38
+ function restoreBoardFocus(options){ if(!options.focusSearch) return; const input=$('profileBoard').querySelector('#searchInput'); if(!input) return; input.focus(); const pos=input.value.length; input.setSelectionRange(pos,pos); }
39
+ function boardToolbar(){ return `<div class="board-toolbar"><div class="board-tools-left"><div class="search-wrap"><span>${iconSvg('search')}</span><input id="searchInput" type="search" placeholder="搜索 profile、模型、endpoint..." value="${escapeHtml(state.query)}" /></div><div class="filters" id="typeFilters"><button class="chip ${state.filter==='all'?'active':''}" data-filter="all" type="button">All</button><button class="chip ${state.filter==='main'?'active':''}" data-filter="main" type="button">Main</button><button class="chip ${state.filter==='api'?'active':''}" data-filter="api" type="button">API</button><button class="chip ${state.filter==='login'?'active':''}" data-filter="login" type="button">Login</button><button class="chip ${state.filter==='ccr'?'active':''}" data-filter="ccr" type="button">CCR</button><button class="chip ${state.filter==='attention'?'active':''}" data-filter="attention" type="button">Attention</button></div></div><div class="board-tools-right"><button class="chip ${state.view==='cards'?'active':''}" id="cardViewBtn" type="button">Cards</button><button class="chip ${state.view==='list'?'active':''}" id="listViewBtn" type="button">List</button></div></div>`; }
40
+ function bindBoardControls(scope){ const search=scope.querySelector('#searchInput'); if(search) search.oninput=e=>{state.query=e.target.value;renderBoard({focusSearch:true});}; const filters=scope.querySelector('#typeFilters'); if(filters) filters.onclick=e=>{ if(!e.target.dataset.filter)return; state.filter=e.target.dataset.filter; renderBoard(); }; const card=scope.querySelector('#cardViewBtn'); if(card) card.onclick=()=>{state.view='cards';renderBoard();}; const list=scope.querySelector('#listViewBtn'); if(list) list.onclick=()=>{state.view='list';renderBoard();}; }
41
+ function renderCards(arr){ return `<div class="cards">${arr.map(p=>`<article class="profile-card ${state.selected===p.name?'selected':''}" data-select="${escapeHtml(p.name)}"><div class="card-top"><div class="profile-icon ${p.type}">${iconFor(p.type)}</div><div class="card-title"><h3>${escapeHtml(p.name)}</h3><p>${escapeHtml(actionHint(p))}</p></div></div>${tags(p.tags)}<div class="profile-meta">${brief(p)}</div><div class="card-actions"><button class="ghost tiny" data-copy="${escapeHtml(p.startCommand)}">Cmd</button></div></article>`).join('')}</div>`; }
42
+ function renderList(arr){ return `<table class="list-table"><thead><tr><th>Name</th><th>Tags</th><th>Model / Route</th><th>Base / Path</th><th>Actions</th></tr></thead><tbody>${arr.map(p=>`<tr class="${state.selected===p.name?'selected':''}" data-select="${escapeHtml(p.name)}"><td><strong>${escapeHtml(p.name)}</strong></td><td>${tags(p.tags)}</td><td>${escapeHtml(p.model || p.meta?.ccrRoute || '—')}</td><td>${escapeHtml(hostname(p.baseUrl)||shortPath(p.dir))}</td><td><button class="ghost tiny" data-copy="${escapeHtml(p.startCommand)}">Cmd</button></td></tr>`).join('')}</tbody></table>`; }
43
+ async function selectProfile(name){ const data=await api(`/api/profiles/${encodeURIComponent(name)}`); if(data.profile?.type==='ccr') await loadRoutes(); state.selected=name; $('workspace').classList.add('drawer-open'); $('drawer').setAttribute('aria-hidden','false'); renderDrawer(data.profile); renderBoard(); }
44
+ function renderDrawer(p){ const env=p.settings?.env||{}; $('drawer').innerHTML=`<div class="drawer-rail"><button class="icon-btn" id="drawerClose" type="button" title="关闭">×</button></div><div class="drawer-fixed"><p class="eyebrow">${escapeHtml(p.type)} profile</p><h2>${escapeHtml(p.name)}</h2>${tags(p.tags)}<div class="drawer-section launch-section"><p class="eyebrow">launch</p><div class="command"><code>${escapeHtml(p.startCommand)}</code><button class="ghost tiny" id="copyStart">Copy</button></div></div></div><div class="drawer-scroll"><div class="profile-summary"><div class="drawer-section profile-info"><div class="kv"><span>Status</span><strong>${escapeHtml(p.statusText)}</strong><span>Path</span><strong>${escapeHtml(p.settingsPath)}</strong></div>${fullConfigBlock(p)}</div></div>${settingsForm(p,env)}<div class="drawer-section"><p class="eyebrow">sessions</p><button class="ghost" onclick="alert('Session Sync Workspace 将在下一阶段实现')">Use in Sync Workspace</button></div>${p.type!=='main'?`<div class="drawer-section"><p class="eyebrow">danger zone</p><p class="hint">删除操作不可撤销。请输入 profile 名称确认。</p><div class="danger-actions"><input id="deleteConfirm" placeholder="${escapeHtml(p.name)}"/><button class="ghost" id="deleteBtn">Delete Profile</button></div></div>`:''}</div>`; $('drawerClose').onclick=closeDrawer; $('copyStart').onclick=()=>copy(p.startCommand); const openCcr=$('openCcrUiFromDrawer'); if(openCcr) openCcr.onclick=e=>{e.preventDefault();openCcrUi();}; const save=$('saveSettings'); if(save) save.onclick=()=>saveProfile(p); const del=$('deleteBtn'); if(del) del.onclick=()=>deleteProfile(p.name); }
45
+ function closeDrawer(){ state.selected=null; $('workspace').classList.remove('drawer-open'); $('drawer').setAttribute('aria-hidden','true'); $('drawer').innerHTML='<div class="drawer-rail"><button class="icon-btn" id="drawerClose" type="button" title="关闭">×</button></div><div class="empty-drawer"><p class="eyebrow">profile details</p><h2>选择一个 Profile</h2><p>点击左侧卡片后,详情和编辑面板会从右侧展开。</p></div>'; $('drawerClose').onclick=closeDrawer; renderBoard(); }
46
+ function ccrRouteOptions(selected=''){ const routes=state.ccrRoutes||[]; if(!routes.length) return '<option value="">没有可用 CCR 路由</option>'; const missing=selected&&!routes.includes(selected)?`<option value="" selected>当前路由不可用:${escapeHtml(selected)}</option>`:''; const placeholder=selected&&routes.includes(selected)?'<option value="">选择模型路由</option>':'<option value="" selected>选择模型路由</option>'; return [missing||placeholder,...routes.map(route=>`<option value="${escapeHtml(route)}" ${route===selected?'selected':''}>${escapeHtml(route)}</option>`)].join(''); }
47
+ function fullConfigBlock(p){ const config={settings:p.settings||{}, ...(p.meta?{ccp:p.meta}:{})}; return `<details class="preset-config drawer-config"><summary>完整配置</summary><pre>${escapeHtml(JSON.stringify(config,null,2))}</pre></details>`; }
48
+ function settingsForm(p,env){ if(p.type==='api') return `<div class="drawer-section"><p class="eyebrow">settings</p><label>Base URL<input id="baseUrl" value="${escapeHtml(env.ANTHROPIC_BASE_URL||'')}"></label><label>New Token<input id="token" type="password" placeholder="留空保持不变"></label><label>Model<input id="model" value="${escapeHtml(env.ANTHROPIC_MODEL||'')}"></label><label>Opus Model<input id="opusModel" value="${escapeHtml(env.ANTHROPIC_DEFAULT_OPUS_MODEL||'')}"></label><label>Sonnet Model<input id="sonnetModel" value="${escapeHtml(env.ANTHROPIC_DEFAULT_SONNET_MODEL||'')}"></label><label>Haiku Model<input id="haikuModel" value="${escapeHtml(env.ANTHROPIC_DEFAULT_HAIKU_MODEL||'')}"></label><label>Subagent Model<input id="subagentModel" value="${escapeHtml(env.CLAUDE_CODE_SUBAGENT_MODEL||'')}"></label><button class="primary" id="saveSettings">Save Settings</button></div>`; if(p.type==='ccr') return `<div class="drawer-section"><p class="eyebrow">ccr router</p><label>模型路由<select id="route" required>${ccrRouteOptions(p.meta?.ccrRoute||'')}</select></label><div class="kv"><span>Preset</span><strong>${escapeHtml(p.meta?.ccrPreset||p.name)}</strong><span>Endpoint</span><strong>${escapeHtml(env.ANTHROPIC_BASE_URL||p.baseUrl||'')}</strong></div><p class="hint">保存后 multi-ccp 会根据模型路由重新生成该 CCR preset。provider/model 请在 <a href="#" id="openCcrUiFromDrawer">CCR UI</a> 中管理。</p><button class="primary" id="saveSettings">Save Route</button></div>`; return `<div class="drawer-section"><p class="eyebrow">settings</p><p class="hint">该 Profile 当前以只读方式展示。</p></div>`; }
49
+ async function saveProfile(p){ const body=p.type==='ccr'?{kind:'ccr',route:$('route').value}:{kind:'api',baseUrl:$('baseUrl').value,token:$('token').value,model:$('model').value,opusModel:$('opusModel').value,sonnetModel:$('sonnetModel').value,haikuModel:$('haikuModel').value,subagentModel:$('subagentModel').value}; const data=await api(`/api/profiles/${encodeURIComponent(p.name)}`,{method:'PUT',body:JSON.stringify(body)}); toast('已保存'); await load(); renderDrawer(data.profile); }
50
+ async function deleteProfile(name){ if(($('deleteConfirm').value||'')!==name){toast('请输入完整 Profile 名称确认');return;} if(!confirm(`确认删除 profile "${name}"?此操作不可撤销。`)) return; await api(`/api/profiles/${encodeURIComponent(name)}`,{method:'DELETE',body:JSON.stringify({confirmName:name})}); state.selected=null; toast('已删除'); await load(); closeDrawer(); }
51
+ async function copy(text){ await navigator.clipboard.writeText(text); toast('已复制'); }
52
+ async function openCcrUi(){ const data=state.ccr || await api('/api/ccr/status'); window.open(data.uiUrl||data.endpoint,'_blank'); }
53
+ async function openCcrPanel(){ const data=await api('/api/ccr/status'); state.ccr=data; $('ccrPanel').innerHTML=`<div class="modal-head"><div><p class="eyebrow">claude code router</p><h2>CCR ${data.running?'Running':'Offline'}</h2></div><button class="icon-btn" onclick="ccrDialog.close()">×</button></div><div class="drawer-section"><div class="kv"><span>Installed</span><strong>${data.installed}</strong><span>Endpoint</span><strong>${escapeHtml(data.endpoint)}</strong><span>Profiles</span><strong>${data.profilesUsingCcr}</strong></div></div><p class="hint">CCR provider、model、route 配置请在 Claude Code Router UI 中修改。</p><menu class="modal-actions"><button class="primary" id="ccrOpen">Open CCR UI</button></menu>`; $('ccrDialog').showModal(); $('ccrOpen').onclick=openCcrUi; }
54
+ async function load(){ const [d,p]=await Promise.all([api('/api/dashboard'),api('/api/profiles')]); state.dashboard=d; state.profiles=p.profiles; renderSummary(); renderBoard(); }
55
+ async function loadPresets(){ if(state.presets.length) return; const data=await api('/api/presets'); state.presets=data.presets||[]; renderPresetPicker(); }
56
+ function presetIcon(type){ return iconSvg(type==='ccr'||type==='manual-ccr'?'route':type==='login'?'user':'key'); }
57
+ function presetTypeLabel(type){ return type==='custom-api'?'API':type==='manual-ccr'?'CCR':String(type).toUpperCase(); }
58
+ function presetCategory(p){ return p.category || (p.type==='api'?'api':p.type==='ccr'?'ccr':p.type==='login'?'login':'custom'); }
59
+ function filteredPresets(){ const q=state.presetQuery.toLowerCase(); return [...state.presets].sort((a,b)=>(a.sortOrder??999)-(b.sortOrder??999)||a.label.localeCompare(b.label)).filter(p=>{ const category=presetCategory(p); const okFilter=state.presetFilter==='all'||category===state.presetFilter; const hay=[p.id,p.label,p.description,p.type,p.category,p.modelSummary,...(p.tags||[]),p.env?.ANTHROPIC_BASE_URL,p.ccrPreset,p.ccrRoute].join(' ').toLowerCase(); return okFilter && (!q || hay.includes(q)); }); }
60
+ function selectedPreset(){ return state.presets.find(p=>p.id===state.selectedPreset) || state.presets[0]; }
61
+ function renderPresetPicker(){ const list=$('presetList'); if(!list) return; const items=filteredPresets(); if(!state.presets.find(p=>p.id===state.selectedPreset) && state.presets[0]) state.selectedPreset=state.presets[0].id; list.innerHTML=items.length?items.map(p=>`<button type="button" class="preset-option ${p.id===state.selectedPreset?'active':''}" data-preset="${escapeHtml(p.id)}"><span class="preset-icon">${presetIcon(p.type)}</span><span><strong>${escapeHtml(p.label)}</strong><small>${escapeHtml(presetTypeLabel(p.type))} · ${escapeHtml(p.modelSummary||'')}</small></span></button>`).join(''):'<div class="preset-empty">没有匹配的预设</div>'; list.querySelectorAll('[data-preset]').forEach(btn=>btn.onclick=()=>selectPreset(btn.dataset.preset)); bindPresetControls(); renderPresetDetail(); }
62
+ function selectPreset(id){ state.selectedPreset=id; renderPresetPicker(); }
63
+ function bindPresetControls(){ const search=$('presetSearch'); if(search && !search.dataset.bound){ search.dataset.bound='1'; search.oninput=e=>{ state.presetQuery=e.target.value; renderPresetPicker(); const next=$('presetSearch'); if(next){ next.focus(); next.setSelectionRange(next.value.length,next.value.length); } }; } if(search) search.value=state.presetQuery; const filters=$('presetFilters'); if(filters && !filters.dataset.bound){ filters.dataset.bound='1'; filters.onclick=e=>{ const value=e.target.dataset.presetFilter; if(!value) return; state.presetFilter=value; renderPresetPicker(); }; } document.querySelectorAll('#presetFilters [data-preset-filter]').forEach(btn=>btn.classList.toggle('active',btn.dataset.presetFilter===state.presetFilter)); }
64
+ function renderPresetDetail(){ const preset=selectedPreset(); if(!preset) return; $('presetId').value=preset.id; $('newKind').value=preset.type; const name=$('newProfileName'); if(!name.value || state.lastPresetName===name.value) name.value=preset.defaultProfileName||''; state.lastPresetName=name.value; document.querySelectorAll('[data-kind-fields]').forEach(el=>{ const active=el.dataset.kindFields===preset.type; el.hidden=!active; el.querySelectorAll('input,select,textarea,button').forEach(field=>{ field.disabled=!active; }); }); const env=preset.env||{}; const rows=[]; const ccrUi=state.dashboard?.ccr?.uiUrl || 'http://127.0.0.1:3456/ui/'; if(env.ANTHROPIC_BASE_URL) rows.push(['Base URL',env.ANTHROPIC_BASE_URL]); if(preset.ccrPreset) rows.push(['CCR Preset',preset.ccrPreset]); if(preset.ccrRoute) rows.push(['CCR Route',preset.ccrRoute]); if(preset.modelSummary) rows.push(['Model',preset.modelSummary]); const fullConfig=JSON.stringify(preset.type==='api'?{env:{...env,ANTHROPIC_AUTH_TOKEN:'<API_KEY>'}}:preset.type==='ccr'?{ccp:{type:'ccr',ccrPreset:preset.ccrPreset,ccrRoute:preset.ccrRoute},env:{ANTHROPIC_BASE_URL:`http://127.0.0.1:3456/preset/${preset.ccrPreset}`,ANTHROPIC_AUTH_TOKEN:'<CCR_TOKEN>',NO_PROXY:'127.0.0.1,localhost',DISABLE_TELEMETRY:'1',DISABLE_COST_WARNINGS:'1',API_TIMEOUT_MS:'600000'}}:{},null,2); $('presetSummary').innerHTML=`<p class="eyebrow">${escapeHtml(presetTypeLabel(preset.type))} preset</p><h3>${escapeHtml(preset.label)}</h3><p>${escapeHtml(preset.description||'')}</p>${preset.type==='ccr'||preset.type==='manual-ccr'?`<a class="preset-adjust" href="${escapeHtml(ccrUi)}" target="_blank" rel="noreferrer">CCR UI ↗</a>`:''}${rows.length?`<dl>${rows.map(([k,v])=>`<dt>${escapeHtml(k)}</dt><dd>${escapeHtml(v)}</dd>`).join('')}</dl>`:''}${fullConfig!=='{}'?`<details class="preset-config"><summary>完整配置</summary><pre>${escapeHtml(fullConfig)}</pre></details>`:''}`; }
65
+ function bind(){ hydrateIcons(); $('refreshBtn').onclick=()=>load().then(()=>toast('已刷新')); $('drawerClose').onclick=closeDrawer; document.querySelectorAll('[data-dialog-close]').forEach(btn=>btn.addEventListener('click',()=>{ resetNewProfileForm(); $(btn.dataset.dialogClose).close(); })); document.querySelectorAll('dialog').forEach(dialog=>dialog.addEventListener('click',event=>{ if(event.target!==dialog) return; if(dialog.id==='newProfileDialog') resetNewProfileForm(); dialog.close(); })); $('themeToggle').onclick=()=>{ const dark=document.documentElement.dataset.theme==='dark'; document.documentElement.dataset.theme=dark?'light':'dark'; localStorage.setItem('ccp-ui-theme',dark?'light':'dark'); $('themeToggle').innerHTML=dark?iconSvg('moon'):iconSvg('sun'); $('themeToggle').title=dark?'切换深色':'切换浅色'; $('themeToggle').setAttribute('aria-label',dark?'切换深色':'切换浅色'); }; const saved=localStorage.getItem('ccp-ui-theme')||'light'; document.documentElement.dataset.theme=saved; $('themeToggle').innerHTML=saved==='dark'?iconSvg('sun'):iconSvg('moon'); $('themeToggle').title=saved==='dark'?'切换浅色':'切换深色'; $('themeToggle').setAttribute('aria-label',saved==='dark'?'切换浅色':'切换深色'); $('newProfileBtn').onclick=async()=>{ resetNewProfileForm(); await Promise.all([loadRoutes(),loadPresets()]); renderPresetPicker(); $('newProfileDialog').showModal(); }; $('createProfileSubmit').onclick=createProfile; }
66
+ async function loadRoutes(){ try{ const data=await api('/api/ccr/routes'); state.ccrRoutes=data.routes||[]; const list=$('manualCcrRoute'); if(list) list.innerHTML=ccrRouteOptions(list.value); }catch{ state.ccrRoutes=[]; const list=$('manualCcrRoute'); if(list) list.innerHTML='<option value="">无法加载 CCR 路由</option>'; } }
67
+ function resetNewProfileForm(){ const formEl=$('newProfileForm'); if(!formEl) return; formEl.reset(); state.selectedPreset='custom-api'; state.lastPresetName=''; state.presetQuery=''; state.presetFilter='all'; if(state.presets.length) renderPresetPicker(); }
68
+ function createProfile(){ const formEl=$('newProfileForm'); if(!formEl.reportValidity()){ const invalid=formEl.querySelector(':invalid'); toast(invalid?.closest('label')?.textContent?.trim() ? `请检查:${invalid.closest('label').textContent.trim()}` : '请完善必填项'); invalid?.focus(); return; } const form=new FormData(formEl); const preset=selectedPreset(); const kind=preset?.type || form.get('kind'); const raw=Object.fromEntries(form.entries()); let url='/api/profiles/preset'; let body={presetId:raw.presetId,name:raw.name,kind,token:raw.token}; if(kind==='custom-api'){ url='/api/profiles/api'; body={name:raw.name,baseUrl:raw.baseUrl,token:raw.customToken||'',model:raw.model||''}; } else if(kind==='manual-ccr'){ url='/api/profiles/ccr'; body={name:raw.name,presetName:raw.manualCcrPreset||raw.name,route:raw.route,token:raw.manualCcrToken||''}; } else if(kind==='login'){ url='/api/profiles/login'; body={name:raw.name}; } else if(kind==='ccr'){ body={presetId:raw.presetId,name:raw.name,kind:'ccr',token:raw.ccrToken||''}; } api(url,{method:'POST',body:JSON.stringify(body)}).then(async()=>{ $('newProfileDialog').close(); resetNewProfileForm(); toast('Profile 已创建'); await load(); }).catch(err=>toast(err.message)); }
69
+ bind(); load().catch(err=>toast(err.message));