multi-ccp 0.1.2 → 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.
- package/README.md +48 -19
- package/README.zh-CN.md +48 -19
- package/dist/cli/program.js +213 -19
- package/dist/cli/program.js.map +1 -1
- package/dist/core/ccr.js +19 -1
- package/dist/core/ccr.js.map +1 -1
- package/dist/core/presets.d.ts +47 -0
- package/dist/core/presets.js +142 -0
- package/dist/core/presets.js.map +1 -0
- package/dist/core/profiles.d.ts +2 -1
- package/dist/core/profiles.js +31 -14
- package/dist/core/profiles.js.map +1 -1
- package/dist/core/types.d.ts +8 -0
- package/dist/web/assets/app.js +69 -0
- package/dist/web/assets/index.html +111 -0
- package/dist/web/assets/styles.css +1 -0
- package/dist/web/server.d.ts +6 -0
- package/dist/web/server.js +403 -0
- package/dist/web/server.js.map +1 -0
- package/package.json +2 -2
package/dist/core/ccr.js
CHANGED
|
@@ -5,6 +5,16 @@ import path from "node:path";
|
|
|
5
5
|
import { CcpError } from "./errors.js";
|
|
6
6
|
import { getClaudeCodeRouterConfigPath, getClaudeCodeRouterDir } from "./paths.js";
|
|
7
7
|
import { readMeta, readSettings, writeMeta, writeSettings } from "./settings.js";
|
|
8
|
+
const CCR_MODEL_ENV_NAMES = [
|
|
9
|
+
"ANTHROPIC_MODEL",
|
|
10
|
+
"ANTHROPIC_SMALL_FAST_MODEL",
|
|
11
|
+
"ANTHROPIC_DEFAULT_HAIKU_MODEL",
|
|
12
|
+
"ANTHROPIC_DEFAULT_OPUS_MODEL",
|
|
13
|
+
"ANTHROPIC_DEFAULT_OPUS_MODEL_NAME",
|
|
14
|
+
"ANTHROPIC_DEFAULT_SONNET_MODEL",
|
|
15
|
+
"ANTHROPIC_DEFAULT_SONNET_MODEL_NAME",
|
|
16
|
+
"CLAUDE_CODE_SUBAGENT_MODEL"
|
|
17
|
+
];
|
|
8
18
|
function stripBom(value) {
|
|
9
19
|
return value.replace(/^/, "");
|
|
10
20
|
}
|
|
@@ -257,9 +267,17 @@ export async function updateCcrProfileEndpoint(profileDir, endpoint, presetName)
|
|
|
257
267
|
settings.env ??= {};
|
|
258
268
|
if (settings.env.ANTHROPIC_BASE_URL !== endpoint) {
|
|
259
269
|
settings.env.ANTHROPIC_BASE_URL = endpoint;
|
|
260
|
-
await writeSettings(profileDir, settings);
|
|
261
270
|
changed = true;
|
|
262
271
|
}
|
|
272
|
+
for (const name of CCR_MODEL_ENV_NAMES) {
|
|
273
|
+
if (settings.env[name] !== undefined) {
|
|
274
|
+
delete settings.env[name];
|
|
275
|
+
changed = true;
|
|
276
|
+
}
|
|
277
|
+
}
|
|
278
|
+
if (changed) {
|
|
279
|
+
await writeSettings(profileDir, settings);
|
|
280
|
+
}
|
|
263
281
|
}
|
|
264
282
|
const meta = await readMeta(profileDir);
|
|
265
283
|
if (meta) {
|
package/dist/core/ccr.js.map
CHANGED
|
@@ -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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"}
|
package/dist/core/profiles.d.ts
CHANGED
|
@@ -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>;
|
package/dist/core/profiles.js
CHANGED
|
@@ -107,24 +107,39 @@ export async function createApiProfile(input, context = {}) {
|
|
|
107
107
|
if (!input.baseUrl.trim()) {
|
|
108
108
|
throw new CcpError("ANTHROPIC_BASE_URL is required.");
|
|
109
109
|
}
|
|
110
|
-
|
|
111
|
-
throw new CcpError("Model is required.");
|
|
112
|
-
}
|
|
110
|
+
const model = input.model.trim();
|
|
113
111
|
await mkdir(profileDir, { recursive: true });
|
|
112
|
+
const env = {
|
|
113
|
+
ANTHROPIC_AUTH_TOKEN: input.token.trim() || "REPLACE_WITH_FULL_TOKEN",
|
|
114
|
+
ANTHROPIC_BASE_URL: input.baseUrl.trim()
|
|
115
|
+
};
|
|
116
|
+
if (model) {
|
|
117
|
+
env.ANTHROPIC_DEFAULT_HAIKU_MODEL = model;
|
|
118
|
+
env.ANTHROPIC_DEFAULT_OPUS_MODEL = model;
|
|
119
|
+
env.ANTHROPIC_DEFAULT_SONNET_MODEL = model;
|
|
120
|
+
env.ANTHROPIC_MODEL = model;
|
|
121
|
+
}
|
|
114
122
|
await writeSettings(profileDir, {
|
|
115
123
|
theme: "dark",
|
|
116
|
-
env
|
|
117
|
-
ANTHROPIC_AUTH_TOKEN: input.token.trim() || "REPLACE_WITH_FULL_TOKEN",
|
|
118
|
-
ANTHROPIC_BASE_URL: input.baseUrl.trim(),
|
|
119
|
-
ANTHROPIC_DEFAULT_HAIKU_MODEL: input.model.trim(),
|
|
120
|
-
ANTHROPIC_DEFAULT_OPUS_MODEL: input.model.trim(),
|
|
121
|
-
ANTHROPIC_DEFAULT_SONNET_MODEL: input.model.trim(),
|
|
122
|
-
ANTHROPIC_MODEL: input.model.trim()
|
|
123
|
-
}
|
|
124
|
+
env
|
|
124
125
|
});
|
|
125
126
|
await writeMeta(profileDir, { version: 1, type: "api", createdAt: new Date().toISOString() });
|
|
126
127
|
return summarizeProfile(input.name, profileDir);
|
|
127
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
|
+
}
|
|
128
143
|
export async function createLoginProfile(input, context = {}) {
|
|
129
144
|
const profileDir = await assertNewProfile(input.name, context);
|
|
130
145
|
await mkdir(profileDir, { recursive: true });
|
|
@@ -137,7 +152,8 @@ export async function createCcrProfile(input, context = {}) {
|
|
|
137
152
|
if (!input.route.trim()) {
|
|
138
153
|
throw new CcpError("CCR route is required for a preset-bound CCR profile.");
|
|
139
154
|
}
|
|
140
|
-
const
|
|
155
|
+
const presetName = input.presetName?.trim() || input.name;
|
|
156
|
+
const endpoint = await getCcrPresetEndpoint(presetName, context);
|
|
141
157
|
await mkdir(profileDir, { recursive: true });
|
|
142
158
|
await writeSettings(profileDir, {
|
|
143
159
|
theme: "dark",
|
|
@@ -155,11 +171,12 @@ export async function createCcrProfile(input, context = {}) {
|
|
|
155
171
|
type: "ccr",
|
|
156
172
|
endpoint,
|
|
157
173
|
autoStart: true,
|
|
158
|
-
ccrPreset:
|
|
174
|
+
ccrPreset: presetName,
|
|
159
175
|
ccrRoute: input.route.trim(),
|
|
176
|
+
preset: input.presetId,
|
|
160
177
|
createdAt: new Date().toISOString()
|
|
161
178
|
});
|
|
162
|
-
await ensureCcrPreset(
|
|
179
|
+
await ensureCcrPreset(presetName, input.route.trim(), context);
|
|
163
180
|
return summarizeProfile(input.name, profileDir);
|
|
164
181
|
}
|
|
165
182
|
export async function removeProfile(name, context = {}) {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"profiles.js","sourceRoot":"","sources":["../../src/core/profiles.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAE,KAAK,EAAE,OAAO,EAAE,MAAM,kBAAkB,CAAC;AAC1D,OAAO,IAAI,MAAM,WAAW,CAAC;AAC7B,OAAO,EAAE,iBAAiB,EAAE,QAAQ,EAAE,MAAM,aAAa,CAAC;AAC1D,OAAO,EAAE,gBAAgB,EAAE,eAAe,EAAoB,MAAM,YAAY,CAAC;AACjF,OAAO,EAAE,eAAe,EAAE,oBAAoB,EAAE,MAAM,UAAU,CAAC;AACjE,OAAO,EAAE,eAAe,EAAE,QAAQ,EAAE,YAAY,EAAE,gBAAgB,EAAE,SAAS,EAAE,aAAa,EAAE,MAAM,eAAe,CAAC;
|
|
1
|
+
{"version":3,"file":"profiles.js","sourceRoot":"","sources":["../../src/core/profiles.ts"],"names":[],"mappings":"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"}
|
package/dist/core/types.d.ts
CHANGED
|
@@ -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=>({'&':'&','<':'<','>':'>','"':'"',"'":'''}[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));
|