dsh-model-think-level 1.0.0 → 1.0.2
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 +8 -160
- package/lib/client/EffortEditor.d.ts +54 -2
- package/lib/client/KeyManager.d.ts +48 -0
- package/lib/client/auto-effort.d.ts +35 -0
- package/lib/client/injection/auto-effort-seat.d.ts +50 -0
- package/lib/client/injection/dom.d.ts +22 -0
- package/lib/client/injection/editor-tab-bar.d.ts +33 -0
- package/lib/client/injection/editor-tabs.d.ts +94 -0
- package/lib/client/injection/icon.d.ts +20 -0
- package/lib/client/injection/key-manager.d.ts +64 -0
- package/lib/client/injection/key-reveal.d.ts +84 -0
- package/lib/client/injection/model-menu.d.ts +34 -10
- package/lib/client/injection/models-page-editor.d.ts +30 -0
- package/lib/client/injection/provider-card-slot.d.ts +9 -4
- package/lib/client/injection/provider-delete-seat.d.ts +38 -0
- package/lib/client/key-manager-client.d.ts +71 -0
- package/lib/client/locales.d.ts +35 -0
- package/lib/client/styles.d.ts +1 -1
- package/lib/client/types.d.ts +31 -0
- package/lib/client.js +563 -6
- package/lib/client.js.map +4 -4
- package/lib/constants.d.ts +34 -0
- package/lib/headers-pi-ai.d.ts +54 -0
- package/lib/index.js +785 -13
- package/lib/index.js.map +4 -4
- package/lib/key-index.d.ts +91 -0
- package/lib/key-refs.d.ts +81 -0
- package/package.json +4 -1
- package/docs/banner-dark.svg +0 -82
- package/docs/banner-zh-dark.svg +0 -82
- package/docs/banner-zh.svg +0 -78
- package/docs/banner.svg +0 -78
- package/docs/demo-zh.svg +0 -85
- package/docs/demo.svg +0 -85
|
@@ -0,0 +1,91 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* The provider key index: plugin-owned metadata about the keys configured for
|
|
3
|
+
* one provider route.
|
|
4
|
+
*
|
|
5
|
+
* The harness stores VALUES only: `<DSH_HOME>/.credentials.yaml` holds one value
|
|
6
|
+
* per reference, the service reports `{configured, source, writable}` and never
|
|
7
|
+
* the value, and there is no enumeration API at all. A list of "the keys this
|
|
8
|
+
* provider has", each with a human label, therefore cannot live in the harness
|
|
9
|
+
* — it is plugin state. It is kept here, beside the harness home rather than
|
|
10
|
+
* inside the pi-ai profile, because the official add-provider card writes the
|
|
11
|
+
* WHOLE profile at `providers.<route>` and an unknown sibling key there would
|
|
12
|
+
* be at the mercy of schema validation.
|
|
13
|
+
*
|
|
14
|
+
* The file holds no secrets: references and labels only, which is what makes it
|
|
15
|
+
* safe to keep in plain text and easy for a user to inspect or repair by hand.
|
|
16
|
+
* Every read is defensive (a corrupted file degrades to "nothing listed") and
|
|
17
|
+
* every write is atomic (`write` to a sibling temp file, then `rename`), so a
|
|
18
|
+
* crash mid-write cannot leave a half-parsed index behind.
|
|
19
|
+
*
|
|
20
|
+
* All of it is synchronous on purpose: the host is single-threaded, so a
|
|
21
|
+
* read-modify-write inside one request handler cannot interleave with another
|
|
22
|
+
* request's, which is the whole concurrency story this file needs.
|
|
23
|
+
*
|
|
24
|
+
* @module dsh-model-think-level/key-index
|
|
25
|
+
*/
|
|
26
|
+
import { type KeyEntry } from './key-refs.js';
|
|
27
|
+
/** One route's entry, re-exported so the host half has a single import site. */
|
|
28
|
+
export type KeyIndexEntry = KeyEntry;
|
|
29
|
+
/** The whole index document, exactly as it sits on disk. */
|
|
30
|
+
export interface KeyIndexDocument {
|
|
31
|
+
/** Schema version; a future shape can migrate by reading this. */
|
|
32
|
+
readonly version: 1;
|
|
33
|
+
/** Route → keys, in the order the manager lists them. */
|
|
34
|
+
readonly providers: Record<string, readonly KeyIndexEntry[]>;
|
|
35
|
+
}
|
|
36
|
+
/** A fresh, empty index. */
|
|
37
|
+
export declare function emptyKeyIndex(): KeyIndexDocument;
|
|
38
|
+
/**
|
|
39
|
+
* The harness home: `$DSH_HOME` when the host exports it, else the `~/.dsh`
|
|
40
|
+
* the harness would have defaulted to. Never throws.
|
|
41
|
+
*/
|
|
42
|
+
export declare function harnessHome(): string;
|
|
43
|
+
/** Absolute path of the plugin's key index. */
|
|
44
|
+
export declare function keyIndexFilePath(home?: string): string;
|
|
45
|
+
/**
|
|
46
|
+
* Parse an already-decoded index document. Never throws and never trusts the
|
|
47
|
+
* input: anything unrecognisable is dropped entry by entry, so a hand-edited or
|
|
48
|
+
* truncated file costs at most the lines it got wrong.
|
|
49
|
+
* @param raw - the decoded JSON value (or anything else).
|
|
50
|
+
* @returns a well-formed document.
|
|
51
|
+
*/
|
|
52
|
+
export declare function parseKeyIndex(raw: unknown): KeyIndexDocument;
|
|
53
|
+
/** Read the index at one path, or an empty one when there is nothing to read. */
|
|
54
|
+
export declare function readKeyIndex(file?: string): KeyIndexDocument;
|
|
55
|
+
/** Write the index at one path, atomically. */
|
|
56
|
+
export declare function writeKeyIndex(document: KeyIndexDocument, file?: string): void;
|
|
57
|
+
/**
|
|
58
|
+
* One synchronous read-modify-write. The returned document is what was stored.
|
|
59
|
+
* @param mutate - pure document transform.
|
|
60
|
+
* @param file - index path (tests pass a temp file).
|
|
61
|
+
*/
|
|
62
|
+
export declare function updateKeyIndex(mutate: (document: KeyIndexDocument) => KeyIndexDocument, file?: string): KeyIndexDocument;
|
|
63
|
+
/** One route's keys, or an empty list. */
|
|
64
|
+
export declare function keyEntriesOf(document: KeyIndexDocument, route: string): readonly KeyIndexEntry[];
|
|
65
|
+
/** Whether one route's list names this reference. */
|
|
66
|
+
export declare function hasKeyEntry(document: KeyIndexDocument, route: string, ref: string): boolean;
|
|
67
|
+
/**
|
|
68
|
+
* Add a key, or relabel the one already there. Order is preserved: the list is
|
|
69
|
+
* what the panel renders, and a key that moves on every rename is a worse list.
|
|
70
|
+
* @param document - the current document.
|
|
71
|
+
* @param route - the provider route key.
|
|
72
|
+
* @param ref - the credential reference.
|
|
73
|
+
* @param alias - a label, or undefined to keep whatever is stored.
|
|
74
|
+
*/
|
|
75
|
+
export declare function withKeyEntry(document: KeyIndexDocument, route: string, ref: string, alias?: string | undefined): KeyIndexDocument;
|
|
76
|
+
/**
|
|
77
|
+
* Set (or clear) one key's label.
|
|
78
|
+
* @param document - the current document.
|
|
79
|
+
* @param route - the provider route key.
|
|
80
|
+
* @param ref - the credential reference; a no-op when it is not listed.
|
|
81
|
+
* @param alias - the new label, or undefined to fall back to the reference.
|
|
82
|
+
*/
|
|
83
|
+
export declare function withKeyAlias(document: KeyIndexDocument, route: string, ref: string, alias: string | undefined): KeyIndexDocument;
|
|
84
|
+
/**
|
|
85
|
+
* Drop one key. The route key itself is removed once its list empties, so a
|
|
86
|
+
* provider the user cleaned up leaves no residue in the file.
|
|
87
|
+
* @param document - the current document.
|
|
88
|
+
* @param route - the provider route key.
|
|
89
|
+
* @param ref - the credential reference to forget.
|
|
90
|
+
*/
|
|
91
|
+
export declare function withoutKeyEntry(document: KeyIndexDocument, route: string, ref: string): KeyIndexDocument;
|
|
@@ -0,0 +1,81 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* The credential-reference vocabulary the API-key manager shares between both
|
|
3
|
+
* halves.
|
|
4
|
+
*
|
|
5
|
+
* A provider's key list is a list of NAMES: every value lives in the harness
|
|
6
|
+
* credential store under its own reference, and the profile records exactly one
|
|
7
|
+
* of those names (`providers.<route>.apiKeyEnv`) as the reference the adapter
|
|
8
|
+
* resolves when it calls the provider. This module owns the naming rules the
|
|
9
|
+
* two halves must agree on — the browser half picks the next free name for a
|
|
10
|
+
* new key, the host half re-validates whatever arrives — so one name can never
|
|
11
|
+
* mean two different things on the two sides of the wire.
|
|
12
|
+
*
|
|
13
|
+
* Deliberately free of `node:` imports: the client bundle imports this module
|
|
14
|
+
* too (the same way `constants.ts` is shared), and a single `node:` import
|
|
15
|
+
* would drag the host into the browser build.
|
|
16
|
+
*
|
|
17
|
+
* @module dsh-model-think-level/key-refs
|
|
18
|
+
*/
|
|
19
|
+
/** One key the manager lists for a provider route. */
|
|
20
|
+
export interface KeyEntry {
|
|
21
|
+
/** Credential reference holding the value. */
|
|
22
|
+
readonly ref: string;
|
|
23
|
+
/** User-facing label; absent means "show the reference itself". */
|
|
24
|
+
readonly alias?: string;
|
|
25
|
+
}
|
|
26
|
+
/** Longest reference the manager will mint or accept. */
|
|
27
|
+
export declare const KEY_REF_MAX_LENGTH = 80;
|
|
28
|
+
/** Longest alias the manager stores. A label, never a secret. */
|
|
29
|
+
export declare const KEY_ALIAS_MAX_LENGTH = 40;
|
|
30
|
+
/**
|
|
31
|
+
* The shape of a reference the manager accepts. Looser than the credential
|
|
32
|
+
* store's own POSIX-ish rule on purpose: a route may legitimately start with a
|
|
33
|
+
* digit (`9router` → `9ROUTER_API_KEY`), and the store stays the authority on
|
|
34
|
+
* what it will hold. This is the plugin's sanity bound, not the validation.
|
|
35
|
+
*/
|
|
36
|
+
export declare const KEY_REF_PATTERN: RegExp;
|
|
37
|
+
/**
|
|
38
|
+
* The reference the official Models page derives for a provider route: the
|
|
39
|
+
* route upper-cased with every non-alphanumeric run folded to `_`, plus
|
|
40
|
+
* `_API_KEY`. Mirrors the official page exactly so the first key the manager
|
|
41
|
+
* adds for a provider is the very reference that page would have written.
|
|
42
|
+
* @param route - the provider route key (`ofox`, `aliyun-cn`).
|
|
43
|
+
* @returns the derived reference name.
|
|
44
|
+
*/
|
|
45
|
+
export declare function deriveKeyRef(route: string): string;
|
|
46
|
+
/** Whether a value is a reference name this manager will pass to the store. */
|
|
47
|
+
export declare function isKeyRefName(value: unknown): value is string;
|
|
48
|
+
/**
|
|
49
|
+
* The first free name in the sequence `<DERIVED>`, `<DERIVED>_2`, `<DERIVED>_3`…
|
|
50
|
+
* @param route - the provider route key.
|
|
51
|
+
* @param taken - every reference already listed for that route.
|
|
52
|
+
* @returns a reference not in `taken`.
|
|
53
|
+
*/
|
|
54
|
+
export declare function nextKeyRef(route: string, taken: readonly string[]): string;
|
|
55
|
+
/**
|
|
56
|
+
* A stored alias, or undefined when the label carries nothing.
|
|
57
|
+
*
|
|
58
|
+
* Control characters are dropped rather than escaped: an alias is rendered as
|
|
59
|
+
* text on the official page, and a stray newline there is a rendering bug, not
|
|
60
|
+
* data worth keeping.
|
|
61
|
+
* @param value - whatever arrived (user input, or a hand-edited index file).
|
|
62
|
+
* @returns the trimmed label, capped at {@link KEY_ALIAS_MAX_LENGTH}.
|
|
63
|
+
*/
|
|
64
|
+
export declare function normalizeKeyAlias(value: unknown): string | undefined;
|
|
65
|
+
/**
|
|
66
|
+
* Whether a value is a key the official page would itself accept: printable
|
|
67
|
+
* ASCII with no spaces (its own `LEGAL_API_KEY`). The manager applies the same
|
|
68
|
+
* rule so a key it stores can never be one the official card would refuse.
|
|
69
|
+
*/
|
|
70
|
+
export declare function isLegalKeyValue(value: unknown): value is string;
|
|
71
|
+
/**
|
|
72
|
+
* A stored key's display form: a head, an ellipsis and a tail — enough to tell
|
|
73
|
+
* two look-alike keys apart, never the whole secret.
|
|
74
|
+
*
|
|
75
|
+
* The manager shows every row this way, so a list can say which key a row holds
|
|
76
|
+
* without putting anything usable on the page; the eye beside the field stays
|
|
77
|
+
* the one gesture that reveals a value. A value too short to survive trimming
|
|
78
|
+
* gets a fixed-width mask instead: at that length a head and a tail would be
|
|
79
|
+
* most of the key.
|
|
80
|
+
*/
|
|
81
|
+
export declare function maskKeyValue(value: string): string;
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "dsh-model-think-level",
|
|
3
|
-
"version": "1.0.
|
|
3
|
+
"version": "1.0.2",
|
|
4
4
|
"description": "Thinking levels, vision badges and request headers for third-party models in DeepSeek Harness: pick a provider and a model inside the composer menu, gate a model's reasoning with one switch in the official Models page card, and configure per-route request headers.",
|
|
5
5
|
"license": "MIT",
|
|
6
6
|
"author": "GaoHu1997 <gaohu9712@163.com>",
|
|
@@ -92,12 +92,15 @@
|
|
|
92
92
|
"@deepseek-ai/cordis": "4.0.3",
|
|
93
93
|
"@deepseek-ai/dsh-api-remotes": "^0.2.0-rc.1",
|
|
94
94
|
"@deepseek-ai/dsh-api-session-controller": "^0.2.0-rc.1",
|
|
95
|
+
"@deepseek-ai/dsh-attachment": "^0.2.0-rc.1",
|
|
95
96
|
"@deepseek-ai/dsh-client-locale": "^0.2.0-rc.1",
|
|
96
97
|
"@deepseek-ai/dsh-client-store": "^0.2.0-rc.1",
|
|
97
98
|
"@deepseek-ai/dsh-client-ui-model-selection": "^0.2.0-rc.1",
|
|
98
99
|
"@deepseek-ai/dsh-client-ui-settings": "^0.2.0-rc.1",
|
|
99
100
|
"@deepseek-ai/dsh-client-ui-slots": "^0.2.0-rc.1",
|
|
101
|
+
"@deepseek-ai/dsh-credentials": "^0.2.0-rc.1",
|
|
100
102
|
"@deepseek-ai/dsh-host-webserver": "^0.2.0-rc.1",
|
|
103
|
+
"@deepseek-ai/dsh-launch-environment": "^0.2.0-rc.1",
|
|
101
104
|
"@deepseek-ai/dsh-llm-pi-ai": "^0.2.0-rc.1",
|
|
102
105
|
"@deepseek-ai/dsh-settings": "^0.2.0-rc.1",
|
|
103
106
|
"@deepseek-ai/schemastery": "3.18.3",
|
package/docs/banner-dark.svg
DELETED
|
@@ -1,82 +0,0 @@
|
|
|
1
|
-
<svg xmlns="http://www.w3.org/2000/svg" width="1200" height="260" viewBox="0 0 1200 260" font-family="system-ui,-apple-system,'Segoe UI',sans-serif">
|
|
2
|
-
<defs>
|
|
3
|
-
<linearGradient id="b" x1="0" y1="0" x2="1" y2=".6"><stop offset="0" stop-color="#05070f"/><stop offset=".5" stop-color="#0e1638"/><stop offset="1" stop-color="#241a4e"/></linearGradient>
|
|
4
|
-
<linearGradient id="tk" x1="0" y1="0" x2="1" y2=".25"><stop offset="0" stop-color="#03040a"/><stop offset=".22" stop-color="#071126"/><stop offset=".45" stop-color="#101d4c"/><stop offset=".7" stop-color="#302262"/><stop offset="1" stop-color="#5d35a0"/></linearGradient>
|
|
5
|
-
<linearGradient id="ov" x1="0" y1="0" x2="1" y2="0"><stop offset="0" stop-color="#000" stop-opacity=".28"/><stop offset=".42" stop-color="#000" stop-opacity="0"/><stop offset="1" stop-color="#a871ff" stop-opacity=".12"/></linearGradient>
|
|
6
|
-
<radialGradient id="or"><stop offset="0" stop-color="#5282ff" stop-opacity=".14"/><stop offset="1" stop-color="#5282ff" stop-opacity="0"/></radialGradient>
|
|
7
|
-
<radialGradient id="fl" fx="1" fy=".5"><stop offset="0" stop-color="#fff" stop-opacity=".96"/><stop offset=".11" stop-color="#bcbdff" stop-opacity=".8"/><stop offset=".28" stop-color="#6a57ff" stop-opacity=".5"/><stop offset=".49" stop-color="#691fff" stop-opacity=".2"/><stop offset=".74" stop-color="#691fff" stop-opacity="0"/></radialGradient>
|
|
8
|
-
<linearGradient id="hl" x1="0" y1="0" x2="1" y2="0"><stop offset="0" stop-color="#64a0ff" stop-opacity="0"/><stop offset=".4" stop-color="#64a0ff" stop-opacity=".42"/><stop offset=".55" stop-color="#f1ecff"/><stop offset=".72" stop-color="#c152ff" stop-opacity=".65"/><stop offset="1" stop-color="#c152ff" stop-opacity="0"/></linearGradient>
|
|
9
|
-
<linearGradient id="vl" x1="0" y1="0" x2="0" y2="1"><stop offset="0" stop-color="#c4beff" stop-opacity="0"/><stop offset=".5" stop-color="#c4beff" stop-opacity=".84"/><stop offset="1" stop-color="#c4beff" stop-opacity="0"/></linearGradient>
|
|
10
|
-
<radialGradient id="ho"><stop offset="0" stop-color="#cfd6ff" stop-opacity=".5"/><stop offset="1" stop-color="#cfd6ff" stop-opacity="0"/></radialGradient>
|
|
11
|
-
<radialGradient id="kg"><stop offset="0" stop-color="#874eff" stop-opacity=".55"/><stop offset="1" stop-color="#874eff" stop-opacity="0"/></radialGradient>
|
|
12
|
-
<linearGradient id="pg" x1="0" x2="1"><stop offset="0" stop-color="#4876ff" stop-opacity="0"/><stop offset=".68" stop-color="#7087ff" stop-opacity=".5"/><stop offset="1" stop-color="#ecdeff" stop-opacity=".7"/></linearGradient>
|
|
13
|
-
<radialGradient id="mk" gradientUnits="userSpaceOnUse" cx="955" cy="193" r="242"><stop offset="0" stop-color="#fff"/><stop offset=".2" stop-color="#c9c9c9"/><stop offset=".45" stop-color="#9a9a9a"/><stop offset=".75" stop-color="#757575"/><stop offset="1" stop-color="#606060"/></radialGradient>
|
|
14
|
-
<pattern id="pt" width="62.83" height="30" patternUnits="userSpaceOnUse"><rect x="12" width="2" height="30" fill="#a9c2ff" opacity=".05"/><rect x="16" width="2" height="30" fill="#a9c2ff" opacity=".09"/><rect x="20" width="2" height="30" fill="#a9c2ff" opacity=".13"/><rect x="24" width="2" height="30" fill="#a9c2ff" opacity=".17"/><rect x="28" width="2" height="30" fill="#a9c2ff" opacity=".19"/><rect x="32" width="2" height="30" fill="#a9c2ff" opacity=".2"/><rect x="36" width="2" height="30" fill="#a9c2ff" opacity=".31"/><rect x="40" width="2" height="30" fill="#a9c2ff" opacity=".56"/><rect x="44" width="2" height="30" fill="#e8eaff" opacity=".88"/><rect x="48" width="2" height="30" fill="#e8eaff" opacity=".88"/><rect x="52" width="2" height="30" fill="#a9c2ff" opacity=".63"/><rect x="56" width="2" height="30" fill="#a9c2ff" opacity=".51"/><rect x="60" width="2" height="30" fill="#e8eaff" opacity=".54"/></pattern>
|
|
15
|
-
<filter id="fb" x="-40%" y="-40%" width="180%" height="180%"><feGaussianBlur stdDeviation="2"/></filter>
|
|
16
|
-
<filter id="f3" x="-60%" y="-60%" width="220%" height="220%"><feGaussianBlur stdDeviation="3"/></filter>
|
|
17
|
-
<clipPath id="pc"><rect x="715" y="179" width="240" height="28" rx="14"/></clipPath>
|
|
18
|
-
<clipPath id="tc"><rect x="714" y="178" width="284" height="30" rx="15"/></clipPath>
|
|
19
|
-
<mask id="m"><rect x="714" y="178" width="284" height="30" fill="url(#mk)"/></mask>
|
|
20
|
-
</defs>
|
|
21
|
-
<rect width="1200" height="260" fill="url(#b)"/>
|
|
22
|
-
<g fill="#c9d4ff"><circle cx="636" cy="46" r="1.5" opacity=".55"/><circle cx="402" cy="247" r="1.2" opacity=".35"/><circle cx="1174" cy="50" r="1.3" opacity=".4"/></g>
|
|
23
|
-
<text x="56" y="102" font-size="38" font-weight="700" fill="#f0f3fa">DSH Model Think Level</text>
|
|
24
|
-
<text x="56" y="142" font-size="16" fill="#9aa5c0">Thinking levels, vision badges & request headers —</text>
|
|
25
|
-
<text x="56" y="166" font-size="16" fill="#9aa5c0">edited inside the official Models page, auto-adapted in one click.</text>
|
|
26
|
-
<g font-size="12.5">
|
|
27
|
-
<rect x="56" y="192" width="170" height="27" rx="13.5" fill="#5d83ff"/><text x="141" y="210" text-anchor="middle" font-weight="600" fill="#fff">DeepSeek Harness plugin</text>
|
|
28
|
-
<rect x="238" y="192" width="150" height="27" rx="13.5" fill="#131a30" stroke="#47538a"/><text x="313" y="210" text-anchor="middle" fill="#c6d2f2">One-click auto-adapt</text>
|
|
29
|
-
<rect x="400" y="192" width="163" height="27" rx="13.5" fill="#131a30" stroke="#47538a"/><text x="481" y="210" text-anchor="middle" fill="#c6d2f2">Provider → model picker</text>
|
|
30
|
-
</g>
|
|
31
|
-
<rect x="690" y="24" width="450" height="212" rx="13" fill="#161b2c" stroke="#273049"/>
|
|
32
|
-
<text x="714" y="54" font-size="15" font-weight="700" fill="#f0f3fa">Reasoning effort</text>
|
|
33
|
-
<text x="1116" y="54" font-size="13" font-weight="600" fill="#7d97ff" text-anchor="end">Auto-adapt</text>
|
|
34
|
-
<g font-size="13" fill="#c6cddc">
|
|
35
|
-
<text x="740" y="78">off</text><text x="740" y="106">low</text><text x="740" y="134">high</text>
|
|
36
|
-
</g>
|
|
37
|
-
<g fill="#0f1526" stroke="#3a4666">
|
|
38
|
-
<rect x="714" y="65" width="18" height="18" rx="4"/><rect x="714" y="93" width="18" height="18" rx="4"/><rect x="714" y="121" width="18" height="18" rx="4"/>
|
|
39
|
-
</g>
|
|
40
|
-
<g fill="#0f1526" stroke="#2c3554">
|
|
41
|
-
<rect x="812" y="62" width="120" height="24" rx="5"/><rect x="812" y="90" width="120" height="24" rx="5"/><rect x="812" y="118" width="120" height="24" rx="5"/>
|
|
42
|
-
</g>
|
|
43
|
-
<g opacity="0"><animate attributeName="opacity" values="0;0;1;1;0;0" keyTimes="0;.047;.086;.844;.922;1" dur="6.4s" repeatCount="indefinite"/>
|
|
44
|
-
<rect x="714" y="65" width="18" height="18" rx="4" fill="#5d83ff"/>
|
|
45
|
-
<path d="M718 74l4 4 8-9" fill="none" stroke="#fff" stroke-width="2.4" stroke-linecap="round" stroke-linejoin="round" stroke-dasharray="20" stroke-dashoffset="20"><animate attributeName="stroke-dashoffset" values="20;20;0;0;20;20" keyTimes="0;.047;.086;.844;.922;1" dur="6.4s" repeatCount="indefinite"/></path>
|
|
46
|
-
<text x="822" y="78" font-size="12.5" fill="#e8ecf6">off</text></g>
|
|
47
|
-
<g opacity="0"><animate attributeName="opacity" values="0;0;1;1;0;0" keyTimes="0;.125;.164;.844;.922;1" dur="6.4s" repeatCount="indefinite"/>
|
|
48
|
-
<rect x="714" y="93" width="18" height="18" rx="4" fill="#5d83ff"/>
|
|
49
|
-
<path d="M718 102l4 4 8-9" fill="none" stroke="#fff" stroke-width="2.4" stroke-linecap="round" stroke-linejoin="round" stroke-dasharray="20" stroke-dashoffset="20"><animate attributeName="stroke-dashoffset" values="20;20;0;0;20;20" keyTimes="0;.125;.164;.844;.922;1" dur="6.4s" repeatCount="indefinite"/></path>
|
|
50
|
-
<text x="822" y="106" font-size="12.5" fill="#e8ecf6">low</text></g>
|
|
51
|
-
<g opacity="0"><animate attributeName="opacity" values="0;0;1;1;0;0" keyTimes="0;.203;.242;.844;.922;1" dur="6.4s" repeatCount="indefinite"/>
|
|
52
|
-
<rect x="714" y="121" width="18" height="18" rx="4" fill="#5d83ff"/>
|
|
53
|
-
<path d="M718 130l4 4 8-9" fill="none" stroke="#fff" stroke-width="2.4" stroke-linecap="round" stroke-linejoin="round" stroke-dasharray="20" stroke-dashoffset="20"><animate attributeName="stroke-dashoffset" values="20;20;0;0;20;20" keyTimes="0;.203;.242;.844;.922;1" dur="6.4s" repeatCount="indefinite"/></path>
|
|
54
|
-
<text x="822" y="134" font-size="12.5" fill="#e8ecf6">high</text></g>
|
|
55
|
-
<g opacity="0"><animate attributeName="opacity" values="0;0;1;1;0;0" keyTimes="0;.281;.328;.844;.922;1" dur="6.4s" repeatCount="indefinite"/>
|
|
56
|
-
<rect x="714" y="142" width="402" height="22" rx="6" fill="none" stroke="#39435f" stroke-dasharray="4 3"/>
|
|
57
|
-
<text x="728" y="156.5" font-size="11" fill="#97a2c4">Context window 1,048,576 · Max output 128,000</text></g>
|
|
58
|
-
<rect x="711" y="175" width="290" height="36" rx="18" fill="none" stroke="#6f42ff" stroke-width="5" opacity="0"><animate attributeName="opacity" values="0;.28;0" dur="1.9s" repeatCount="indefinite"/></rect>
|
|
59
|
-
<ellipse cx="856" cy="211" rx="140" ry="6" fill="#0c1137" opacity=".35" filter="url(#f3)"/>
|
|
60
|
-
<rect x="714" y="178" width="284" height="30" rx="15" fill="url(#tk)"/>
|
|
61
|
-
<rect x="716" y="179" width="280" height="1.2" fill="#bdc7ff" opacity=".15"/>
|
|
62
|
-
<rect x="716" y="206" width="280" height="1.2" fill="#000" opacity=".55"/>
|
|
63
|
-
<ellipse cx="765" cy="191" rx="60" ry="14" fill="url(#or)"/>
|
|
64
|
-
<rect x="714" y="178" width="284" height="30" rx="15" fill="url(#ov)"/>
|
|
65
|
-
<g clip-path="url(#pc)"><g mask="url(#m)">
|
|
66
|
-
<rect x="714" y="178" width="284" height="30" fill="#2a38af" opacity=".26"/>
|
|
67
|
-
<ellipse cx="955" cy="193" rx="80" ry="16" fill="url(#ho)"/>
|
|
68
|
-
<g><animateTransform attributeName="transform" type="translate" values="0 0;-62.8 0" dur=".74s" repeatCount="indefinite"/><rect x="651" y="178" width="348" height="30" fill="url(#pt)"/></g>
|
|
69
|
-
<rect x="941" y="185" width="14" height="2" fill="url(#pg)"><animate attributeName="x" values="941;710" dur="3.4s" repeatCount="indefinite"/></rect>
|
|
70
|
-
<rect x="941" y="200" width="9" height="1.6" fill="url(#pg)"><animate attributeName="x" values="941;710" dur="4.6s" begin="-2.1s" repeatCount="indefinite"/></rect>
|
|
71
|
-
</g></g>
|
|
72
|
-
<g clip-path="url(#tc)">
|
|
73
|
-
<ellipse cx="916" cy="193" rx="39" ry="23" fill="url(#fl)" filter="url(#fb)"/>
|
|
74
|
-
<rect x="928" y="191.7" width="54" height="2.6" fill="#9b7cff" opacity=".5" filter="url(#fb)"/>
|
|
75
|
-
<rect x="929" y="192.2" width="52" height="1.6" fill="url(#hl)"/>
|
|
76
|
-
<rect x="953.4" y="182" width="3.2" height="22" fill="#9c7cff" opacity=".5" filter="url(#fb)"/>
|
|
77
|
-
<rect x="954.2" y="183" width="1.6" height="20" fill="url(#vl)"/>
|
|
78
|
-
</g>
|
|
79
|
-
<circle cx="955" cy="193" r="30" fill="url(#kg)"><animate attributeName="opacity" values=".5;.95;.5" dur="1.9s" repeatCount="indefinite"/></circle>
|
|
80
|
-
<circle cx="955" cy="193" r="16.2" fill="none" stroke="#7763ff" stroke-opacity=".18" stroke-width="2.6"/>
|
|
81
|
-
<circle cx="955" cy="193" r="14" fill="#fff" stroke="#fff" stroke-opacity=".94"/>
|
|
82
|
-
</svg>
|
package/docs/banner-zh-dark.svg
DELETED
|
@@ -1,82 +0,0 @@
|
|
|
1
|
-
<svg xmlns="http://www.w3.org/2000/svg" width="1200" height="260" viewBox="0 0 1200 260" font-family="system-ui,-apple-system,'Segoe UI',sans-serif">
|
|
2
|
-
<defs>
|
|
3
|
-
<linearGradient id="b" x1="0" y1="0" x2="1" y2=".6"><stop offset="0" stop-color="#05070f"/><stop offset=".5" stop-color="#0e1638"/><stop offset="1" stop-color="#241a4e"/></linearGradient>
|
|
4
|
-
<linearGradient id="tk" x1="0" y1="0" x2="1" y2=".25"><stop offset="0" stop-color="#03040a"/><stop offset=".22" stop-color="#071126"/><stop offset=".45" stop-color="#101d4c"/><stop offset=".7" stop-color="#302262"/><stop offset="1" stop-color="#5d35a0"/></linearGradient>
|
|
5
|
-
<linearGradient id="ov" x1="0" y1="0" x2="1" y2="0"><stop offset="0" stop-color="#000" stop-opacity=".28"/><stop offset=".42" stop-color="#000" stop-opacity="0"/><stop offset="1" stop-color="#a871ff" stop-opacity=".12"/></linearGradient>
|
|
6
|
-
<radialGradient id="or"><stop offset="0" stop-color="#5282ff" stop-opacity=".14"/><stop offset="1" stop-color="#5282ff" stop-opacity="0"/></radialGradient>
|
|
7
|
-
<radialGradient id="fl" fx="1" fy=".5"><stop offset="0" stop-color="#fff" stop-opacity=".96"/><stop offset=".11" stop-color="#bcbdff" stop-opacity=".8"/><stop offset=".28" stop-color="#6a57ff" stop-opacity=".5"/><stop offset=".49" stop-color="#691fff" stop-opacity=".2"/><stop offset=".74" stop-color="#691fff" stop-opacity="0"/></radialGradient>
|
|
8
|
-
<linearGradient id="hl" x1="0" y1="0" x2="1" y2="0"><stop offset="0" stop-color="#64a0ff" stop-opacity="0"/><stop offset=".4" stop-color="#64a0ff" stop-opacity=".42"/><stop offset=".55" stop-color="#f1ecff"/><stop offset=".72" stop-color="#c152ff" stop-opacity=".65"/><stop offset="1" stop-color="#c152ff" stop-opacity="0"/></linearGradient>
|
|
9
|
-
<linearGradient id="vl" x1="0" y1="0" x2="0" y2="1"><stop offset="0" stop-color="#c4beff" stop-opacity="0"/><stop offset=".5" stop-color="#c4beff" stop-opacity=".84"/><stop offset="1" stop-color="#c4beff" stop-opacity="0"/></linearGradient>
|
|
10
|
-
<radialGradient id="ho"><stop offset="0" stop-color="#cfd6ff" stop-opacity=".5"/><stop offset="1" stop-color="#cfd6ff" stop-opacity="0"/></radialGradient>
|
|
11
|
-
<radialGradient id="kg"><stop offset="0" stop-color="#874eff" stop-opacity=".55"/><stop offset="1" stop-color="#874eff" stop-opacity="0"/></radialGradient>
|
|
12
|
-
<linearGradient id="pg" x1="0" x2="1"><stop offset="0" stop-color="#4876ff" stop-opacity="0"/><stop offset=".68" stop-color="#7087ff" stop-opacity=".5"/><stop offset="1" stop-color="#ecdeff" stop-opacity=".7"/></linearGradient>
|
|
13
|
-
<radialGradient id="mk" gradientUnits="userSpaceOnUse" cx="955" cy="193" r="242"><stop offset="0" stop-color="#fff"/><stop offset=".2" stop-color="#c9c9c9"/><stop offset=".45" stop-color="#9a9a9a"/><stop offset=".75" stop-color="#757575"/><stop offset="1" stop-color="#606060"/></radialGradient>
|
|
14
|
-
<pattern id="pt" width="62.83" height="30" patternUnits="userSpaceOnUse"><rect x="12" width="2" height="30" fill="#a9c2ff" opacity=".05"/><rect x="16" width="2" height="30" fill="#a9c2ff" opacity=".09"/><rect x="20" width="2" height="30" fill="#a9c2ff" opacity=".13"/><rect x="24" width="2" height="30" fill="#a9c2ff" opacity=".17"/><rect x="28" width="2" height="30" fill="#a9c2ff" opacity=".19"/><rect x="32" width="2" height="30" fill="#a9c2ff" opacity=".2"/><rect x="36" width="2" height="30" fill="#a9c2ff" opacity=".31"/><rect x="40" width="2" height="30" fill="#a9c2ff" opacity=".56"/><rect x="44" width="2" height="30" fill="#e8eaff" opacity=".88"/><rect x="48" width="2" height="30" fill="#e8eaff" opacity=".88"/><rect x="52" width="2" height="30" fill="#a9c2ff" opacity=".63"/><rect x="56" width="2" height="30" fill="#a9c2ff" opacity=".51"/><rect x="60" width="2" height="30" fill="#e8eaff" opacity=".54"/></pattern>
|
|
15
|
-
<filter id="fb" x="-40%" y="-40%" width="180%" height="180%"><feGaussianBlur stdDeviation="2"/></filter>
|
|
16
|
-
<filter id="f3" x="-60%" y="-60%" width="220%" height="220%"><feGaussianBlur stdDeviation="3"/></filter>
|
|
17
|
-
<clipPath id="pc"><rect x="715" y="179" width="240" height="28" rx="14"/></clipPath>
|
|
18
|
-
<clipPath id="tc"><rect x="714" y="178" width="284" height="30" rx="15"/></clipPath>
|
|
19
|
-
<mask id="m"><rect x="714" y="178" width="284" height="30" fill="url(#mk)"/></mask>
|
|
20
|
-
</defs>
|
|
21
|
-
<rect width="1200" height="260" fill="url(#b)"/>
|
|
22
|
-
<g fill="#c9d4ff"><circle cx="636" cy="46" r="1.5" opacity=".55"/><circle cx="402" cy="247" r="1.2" opacity=".35"/><circle cx="1174" cy="50" r="1.3" opacity=".4"/></g>
|
|
23
|
-
<text x="56" y="102" font-size="38" font-weight="700" fill="#f0f3fa">DSH Model Think Level</text>
|
|
24
|
-
<text x="56" y="142" font-size="16" fill="#9aa5c0">第三方模型的思考档位、视觉标识与请求头,</text>
|
|
25
|
-
<text x="56" y="166" font-size="16" fill="#9aa5c0">直接在官方「模型」页内编辑,一键自动适配。</text>
|
|
26
|
-
<g font-size="12.5">
|
|
27
|
-
<rect x="56" y="192" width="150" height="27" rx="13.5" fill="#5d83ff"/><text x="131" y="210" text-anchor="middle" font-weight="600" fill="#fff">DeepSeek Harness 插件</text>
|
|
28
|
-
<rect x="218" y="192" width="104" height="27" rx="13.5" fill="#131a30" stroke="#47538a"/><text x="270" y="210" text-anchor="middle" fill="#c6d2f2">一键自动适配</text>
|
|
29
|
-
<rect x="334" y="192" width="140" height="27" rx="13.5" fill="#131a30" stroke="#47538a"/><text x="404" y="210" text-anchor="middle" fill="#c6d2f2">供应商 → 模型选择器</text>
|
|
30
|
-
</g>
|
|
31
|
-
<rect x="690" y="24" width="450" height="212" rx="13" fill="#161b2c" stroke="#273049"/>
|
|
32
|
-
<text x="714" y="54" font-size="15" font-weight="700" fill="#f0f3fa">思考强度</text>
|
|
33
|
-
<text x="1116" y="54" font-size="13" font-weight="600" fill="#7d97ff" text-anchor="end">自动适配</text>
|
|
34
|
-
<g font-size="13" fill="#c6cddc">
|
|
35
|
-
<text x="740" y="78">off</text><text x="740" y="106">low</text><text x="740" y="134">high</text>
|
|
36
|
-
</g>
|
|
37
|
-
<g fill="#0f1526" stroke="#3a4666">
|
|
38
|
-
<rect x="714" y="65" width="18" height="18" rx="4"/><rect x="714" y="93" width="18" height="18" rx="4"/><rect x="714" y="121" width="18" height="18" rx="4"/>
|
|
39
|
-
</g>
|
|
40
|
-
<g fill="#0f1526" stroke="#2c3554">
|
|
41
|
-
<rect x="812" y="62" width="120" height="24" rx="5"/><rect x="812" y="90" width="120" height="24" rx="5"/><rect x="812" y="118" width="120" height="24" rx="5"/>
|
|
42
|
-
</g>
|
|
43
|
-
<g opacity="0"><animate attributeName="opacity" values="0;0;1;1;0;0" keyTimes="0;.047;.086;.844;.922;1" dur="6.4s" repeatCount="indefinite"/>
|
|
44
|
-
<rect x="714" y="65" width="18" height="18" rx="4" fill="#5d83ff"/>
|
|
45
|
-
<path d="M718 74l4 4 8-9" fill="none" stroke="#fff" stroke-width="2.4" stroke-linecap="round" stroke-linejoin="round" stroke-dasharray="20" stroke-dashoffset="20"><animate attributeName="stroke-dashoffset" values="20;20;0;0;20;20" keyTimes="0;.047;.086;.844;.922;1" dur="6.4s" repeatCount="indefinite"/></path>
|
|
46
|
-
<text x="822" y="78" font-size="12.5" fill="#e8ecf6">off</text></g>
|
|
47
|
-
<g opacity="0"><animate attributeName="opacity" values="0;0;1;1;0;0" keyTimes="0;.125;.164;.844;.922;1" dur="6.4s" repeatCount="indefinite"/>
|
|
48
|
-
<rect x="714" y="93" width="18" height="18" rx="4" fill="#5d83ff"/>
|
|
49
|
-
<path d="M718 102l4 4 8-9" fill="none" stroke="#fff" stroke-width="2.4" stroke-linecap="round" stroke-linejoin="round" stroke-dasharray="20" stroke-dashoffset="20"><animate attributeName="stroke-dashoffset" values="20;20;0;0;20;20" keyTimes="0;.125;.164;.844;.922;1" dur="6.4s" repeatCount="indefinite"/></path>
|
|
50
|
-
<text x="822" y="106" font-size="12.5" fill="#e8ecf6">low</text></g>
|
|
51
|
-
<g opacity="0"><animate attributeName="opacity" values="0;0;1;1;0;0" keyTimes="0;.203;.242;.844;.922;1" dur="6.4s" repeatCount="indefinite"/>
|
|
52
|
-
<rect x="714" y="121" width="18" height="18" rx="4" fill="#5d83ff"/>
|
|
53
|
-
<path d="M718 130l4 4 8-9" fill="none" stroke="#fff" stroke-width="2.4" stroke-linecap="round" stroke-linejoin="round" stroke-dasharray="20" stroke-dashoffset="20"><animate attributeName="stroke-dashoffset" values="20;20;0;0;20;20" keyTimes="0;.203;.242;.844;.922;1" dur="6.4s" repeatCount="indefinite"/></path>
|
|
54
|
-
<text x="822" y="134" font-size="12.5" fill="#e8ecf6">high</text></g>
|
|
55
|
-
<g opacity="0"><animate attributeName="opacity" values="0;0;1;1;0;0" keyTimes="0;.281;.328;.844;.922;1" dur="6.4s" repeatCount="indefinite"/>
|
|
56
|
-
<rect x="714" y="142" width="402" height="22" rx="6" fill="none" stroke="#39435f" stroke-dasharray="4 3"/>
|
|
57
|
-
<text x="728" y="156.5" font-size="11" fill="#97a2c4">上下文窗口 1,048,576 · 最大输出 128,000</text></g>
|
|
58
|
-
<rect x="711" y="175" width="290" height="36" rx="18" fill="none" stroke="#6f42ff" stroke-width="5" opacity="0"><animate attributeName="opacity" values="0;.28;0" dur="1.9s" repeatCount="indefinite"/></rect>
|
|
59
|
-
<ellipse cx="856" cy="211" rx="140" ry="6" fill="#0c1137" opacity=".35" filter="url(#f3)"/>
|
|
60
|
-
<rect x="714" y="178" width="284" height="30" rx="15" fill="url(#tk)"/>
|
|
61
|
-
<rect x="716" y="179" width="280" height="1.2" fill="#bdc7ff" opacity=".15"/>
|
|
62
|
-
<rect x="716" y="206" width="280" height="1.2" fill="#000" opacity=".55"/>
|
|
63
|
-
<ellipse cx="765" cy="191" rx="60" ry="14" fill="url(#or)"/>
|
|
64
|
-
<rect x="714" y="178" width="284" height="30" rx="15" fill="url(#ov)"/>
|
|
65
|
-
<g clip-path="url(#pc)"><g mask="url(#m)">
|
|
66
|
-
<rect x="714" y="178" width="284" height="30" fill="#2a38af" opacity=".26"/>
|
|
67
|
-
<ellipse cx="955" cy="193" rx="80" ry="16" fill="url(#ho)"/>
|
|
68
|
-
<g><animateTransform attributeName="transform" type="translate" values="0 0;-62.8 0" dur=".74s" repeatCount="indefinite"/><rect x="651" y="178" width="348" height="30" fill="url(#pt)"/></g>
|
|
69
|
-
<rect x="941" y="185" width="14" height="2" fill="url(#pg)"><animate attributeName="x" values="941;710" dur="3.4s" repeatCount="indefinite"/></rect>
|
|
70
|
-
<rect x="941" y="200" width="9" height="1.6" fill="url(#pg)"><animate attributeName="x" values="941;710" dur="4.6s" begin="-2.1s" repeatCount="indefinite"/></rect>
|
|
71
|
-
</g></g>
|
|
72
|
-
<g clip-path="url(#tc)">
|
|
73
|
-
<ellipse cx="916" cy="193" rx="39" ry="23" fill="url(#fl)" filter="url(#fb)"/>
|
|
74
|
-
<rect x="928" y="191.7" width="54" height="2.6" fill="#9b7cff" opacity=".5" filter="url(#fb)"/>
|
|
75
|
-
<rect x="929" y="192.2" width="52" height="1.6" fill="url(#hl)"/>
|
|
76
|
-
<rect x="953.4" y="182" width="3.2" height="22" fill="#9c7cff" opacity=".5" filter="url(#fb)"/>
|
|
77
|
-
<rect x="954.2" y="183" width="1.6" height="20" fill="url(#vl)"/>
|
|
78
|
-
</g>
|
|
79
|
-
<circle cx="955" cy="193" r="30" fill="url(#kg)"><animate attributeName="opacity" values=".5;.95;.5" dur="1.9s" repeatCount="indefinite"/></circle>
|
|
80
|
-
<circle cx="955" cy="193" r="16.2" fill="none" stroke="#7763ff" stroke-opacity=".18" stroke-width="2.6"/>
|
|
81
|
-
<circle cx="955" cy="193" r="14" fill="#fff" stroke="#fff" stroke-opacity=".94"/>
|
|
82
|
-
</svg>
|
package/docs/banner-zh.svg
DELETED
|
@@ -1,78 +0,0 @@
|
|
|
1
|
-
<svg xmlns="http://www.w3.org/2000/svg" width="1200" height="260" viewBox="0 0 1200 260" font-family="system-ui,-apple-system,'Segoe UI',sans-serif">
|
|
2
|
-
<defs>
|
|
3
|
-
<linearGradient id="b" x1="0" y1="0" x2="1" y2="0"><stop offset="0" stop-color="#fff"/><stop offset="1" stop-color="#edf2fd"/></linearGradient>
|
|
4
|
-
<linearGradient id="gt" x1="0" y1="0" x2="1" y2="0"><stop offset="0" stop-color="#fff"/><stop offset=".18" stop-color="#d7eaff"/><stop offset=".54" stop-color="#75afea"/><stop offset="1" stop-color="#0751ad"/></linearGradient>
|
|
5
|
-
<linearGradient id="ov" x1="0" y1="0" x2="1" y2="0"><stop offset="0" stop-color="#fff" stop-opacity=".48"/><stop offset=".34" stop-color="#fff" stop-opacity="0"/><stop offset="1" stop-color="#1765c9" stop-opacity=".07"/></linearGradient>
|
|
6
|
-
<radialGradient id="fl" fx="1" fy=".5"><stop offset="0" stop-color="#fff" stop-opacity=".98"/><stop offset=".13" stop-color="#cce7ff" stop-opacity=".88"/><stop offset=".31" stop-color="#5ba2f1" stop-opacity=".48"/><stop offset=".53" stop-color="#256fcf" stop-opacity=".16"/><stop offset=".75" stop-color="#256fcf" stop-opacity="0"/></radialGradient>
|
|
7
|
-
<linearGradient id="hl" x1="0" y1="0" x2="1" y2="0"><stop offset="0" stop-color="#74b1f4" stop-opacity="0"/><stop offset=".4" stop-color="#74b1f4" stop-opacity=".34"/><stop offset=".55" stop-color="#fff"/><stop offset=".72" stop-color="#428be1" stop-opacity=".58"/><stop offset="1" stop-color="#428be1" stop-opacity="0"/></linearGradient>
|
|
8
|
-
<linearGradient id="vl" x1="0" y1="0" x2="0" y2="1"><stop offset="0" stop-color="#fff" stop-opacity="0"/><stop offset=".5" stop-color="#fff" stop-opacity=".94"/><stop offset="1" stop-color="#fff" stop-opacity="0"/></linearGradient>
|
|
9
|
-
<radialGradient id="ho"><stop offset="0" stop-color="#eaf3ff" stop-opacity=".7"/><stop offset="1" stop-color="#eaf3ff" stop-opacity="0"/></radialGradient>
|
|
10
|
-
<radialGradient id="kg"><stop offset="0" stop-color="#3076cf" stop-opacity=".3"/><stop offset="1" stop-color="#3076cf" stop-opacity="0"/></radialGradient>
|
|
11
|
-
<linearGradient id="pg" x1="0" x2="1"><stop offset="0" stop-color="#185eb8" stop-opacity="0"/><stop offset=".68" stop-color="#246cca" stop-opacity=".4"/><stop offset="1" stop-color="#67aff8" stop-opacity=".6"/></linearGradient>
|
|
12
|
-
<radialGradient id="mk" gradientUnits="userSpaceOnUse" cx="955" cy="193" r="242"><stop offset="0" stop-color="#fff"/><stop offset=".2" stop-color="#c9c9c9"/><stop offset=".45" stop-color="#9a9a9a"/><stop offset=".75" stop-color="#757575"/><stop offset="1" stop-color="#606060"/></radialGradient>
|
|
13
|
-
<pattern id="pt" width="62.83" height="30" patternUnits="userSpaceOnUse"><rect x="16" width="2" height="30" fill="#65bef4" opacity=".05"/><rect x="20" width="2" height="30" fill="#65bef4" opacity=".07"/><rect x="24" width="2" height="30" fill="#65bef4" opacity=".09"/><rect x="28" width="2" height="30" fill="#65bef4" opacity=".1"/><rect x="32" width="2" height="30" fill="#65bef4" opacity=".11"/><rect x="36" width="2" height="30" fill="#65bef4" opacity=".17"/><rect x="40" width="2" height="30" fill="#65bef4" opacity=".3"/><rect x="44" width="2" height="30" fill="#65bef4" opacity=".45"/><rect x="48" width="2" height="30" fill="#65bef4" opacity=".45"/><rect x="52" width="2" height="30" fill="#65bef4" opacity=".34"/><rect x="56" width="2" height="30" fill="#65bef4" opacity=".27"/><rect x="60" width="2" height="30" fill="#65bef4" opacity=".29"/></pattern>
|
|
14
|
-
<filter id="fb" x="-40%" y="-40%" width="180%" height="180%"><feGaussianBlur stdDeviation="2"/></filter>
|
|
15
|
-
<filter id="f3" x="-60%" y="-60%" width="220%" height="220%"><feGaussianBlur stdDeviation="3"/></filter>
|
|
16
|
-
<clipPath id="pc"><rect x="715" y="179" width="240" height="28" rx="14"/></clipPath>
|
|
17
|
-
<clipPath id="tc"><rect x="714" y="178" width="284" height="30" rx="15"/></clipPath>
|
|
18
|
-
<mask id="m"><rect x="714" y="178" width="284" height="30" fill="url(#mk)"/></mask>
|
|
19
|
-
</defs>
|
|
20
|
-
<rect width="1200" height="260" fill="url(#b)"/>
|
|
21
|
-
<text x="56" y="102" font-size="38" font-weight="700" fill="#15171b">DSH Model Think Level</text>
|
|
22
|
-
<text x="56" y="142" font-size="16" fill="#5c6470">第三方模型的思考档位、视觉标识与请求头,</text>
|
|
23
|
-
<text x="56" y="166" font-size="16" fill="#5c6470">直接在官方「模型」页内编辑,一键自动适配。</text>
|
|
24
|
-
<g font-size="12.5">
|
|
25
|
-
<rect x="56" y="192" width="150" height="27" rx="13.5" fill="#4d6bfe"/><text x="131" y="210" text-anchor="middle" font-weight="600" fill="#fff">DeepSeek Harness 插件</text>
|
|
26
|
-
<rect x="218" y="192" width="104" height="27" rx="13.5" fill="#fff" stroke="#bcc9f5"/><text x="270" y="210" text-anchor="middle" fill="#3d55d8">一键自动适配</text>
|
|
27
|
-
<rect x="334" y="192" width="140" height="27" rx="13.5" fill="#fff" stroke="#bcc9f5"/><text x="404" y="210" text-anchor="middle" fill="#3d55d8">供应商 → 模型选择器</text>
|
|
28
|
-
</g>
|
|
29
|
-
<rect x="690" y="24" width="450" height="212" rx="13" fill="#f6f8f7" stroke="#e2e6e5"/>
|
|
30
|
-
<text x="714" y="54" font-size="15" font-weight="700" fill="#15171b">思考强度</text>
|
|
31
|
-
<text x="1116" y="54" font-size="13" font-weight="600" fill="#4d6bfe" text-anchor="end">自动适配</text>
|
|
32
|
-
<g font-size="13" fill="#3c434c">
|
|
33
|
-
<text x="740" y="78">off</text><text x="740" y="106">low</text><text x="740" y="134">high</text>
|
|
34
|
-
</g>
|
|
35
|
-
<g fill="#fff" stroke="#b9c1cc">
|
|
36
|
-
<rect x="714" y="65" width="18" height="18" rx="4"/><rect x="714" y="93" width="18" height="18" rx="4"/><rect x="714" y="121" width="18" height="18" rx="4"/>
|
|
37
|
-
</g>
|
|
38
|
-
<g fill="#fbfcfe" stroke="#d7dce2">
|
|
39
|
-
<rect x="812" y="62" width="120" height="24" rx="5"/><rect x="812" y="90" width="120" height="24" rx="5"/><rect x="812" y="118" width="120" height="24" rx="5"/>
|
|
40
|
-
</g>
|
|
41
|
-
<g opacity="0"><animate attributeName="opacity" values="0;0;1;1;0;0" keyTimes="0;.047;.086;.844;.922;1" dur="6.4s" repeatCount="indefinite"/>
|
|
42
|
-
<rect x="714" y="65" width="18" height="18" rx="4" fill="#4d6bfe"/>
|
|
43
|
-
<path d="M718 74l4 4 8-9" fill="none" stroke="#fff" stroke-width="2.4" stroke-linecap="round" stroke-linejoin="round" stroke-dasharray="20" stroke-dashoffset="20"><animate attributeName="stroke-dashoffset" values="20;20;0;0;20;20" keyTimes="0;.047;.086;.844;.922;1" dur="6.4s" repeatCount="indefinite"/></path>
|
|
44
|
-
<text x="822" y="78" font-size="12.5" fill="#1c232b">off</text></g>
|
|
45
|
-
<g opacity="0"><animate attributeName="opacity" values="0;0;1;1;0;0" keyTimes="0;.125;.164;.844;.922;1" dur="6.4s" repeatCount="indefinite"/>
|
|
46
|
-
<rect x="714" y="93" width="18" height="18" rx="4" fill="#4d6bfe"/>
|
|
47
|
-
<path d="M718 102l4 4 8-9" fill="none" stroke="#fff" stroke-width="2.4" stroke-linecap="round" stroke-linejoin="round" stroke-dasharray="20" stroke-dashoffset="20"><animate attributeName="stroke-dashoffset" values="20;20;0;0;20;20" keyTimes="0;.125;.164;.844;.922;1" dur="6.4s" repeatCount="indefinite"/></path>
|
|
48
|
-
<text x="822" y="106" font-size="12.5" fill="#1c232b">low</text></g>
|
|
49
|
-
<g opacity="0"><animate attributeName="opacity" values="0;0;1;1;0;0" keyTimes="0;.203;.242;.844;.922;1" dur="6.4s" repeatCount="indefinite"/>
|
|
50
|
-
<rect x="714" y="121" width="18" height="18" rx="4" fill="#4d6bfe"/>
|
|
51
|
-
<path d="M718 130l4 4 8-9" fill="none" stroke="#fff" stroke-width="2.4" stroke-linecap="round" stroke-linejoin="round" stroke-dasharray="20" stroke-dashoffset="20"><animate attributeName="stroke-dashoffset" values="20;20;0;0;20;20" keyTimes="0;.203;.242;.844;.922;1" dur="6.4s" repeatCount="indefinite"/></path>
|
|
52
|
-
<text x="822" y="134" font-size="12.5" fill="#1c232b">high</text></g>
|
|
53
|
-
<g opacity="0"><animate attributeName="opacity" values="0;0;1;1;0;0" keyTimes="0;.281;.328;.844;.922;1" dur="6.4s" repeatCount="indefinite"/>
|
|
54
|
-
<rect x="714" y="142" width="402" height="22" rx="6" fill="none" stroke="#c6cdd9" stroke-dasharray="4 3"/>
|
|
55
|
-
<text x="728" y="156.5" font-size="11" fill="#6b7480">上下文窗口 1,048,576 · 最大输出 128,000</text></g>
|
|
56
|
-
<rect x="711" y="175" width="290" height="36" rx="18" fill="none" stroke="#1f69c9" stroke-width="5" opacity="0"><animate attributeName="opacity" values="0;.2;0" dur="1.9s" repeatCount="indefinite"/></rect>
|
|
57
|
-
<ellipse cx="856" cy="211" rx="140" ry="6" fill="#3065a5" opacity=".16" filter="url(#f3)"/>
|
|
58
|
-
<rect x="714" y="178" width="284" height="30" rx="15" fill="#e5f0ff"/>
|
|
59
|
-
<rect x="716" y="179" width="280" height="1.4" rx=".7" fill="#fff" opacity=".9"/>
|
|
60
|
-
<rect x="715" y="179" width="240" height="28" rx="14" fill="url(#gt)"/>
|
|
61
|
-
<rect x="714" y="178" width="284" height="30" rx="15" fill="url(#ov)"/>
|
|
62
|
-
<g clip-path="url(#pc)"><g mask="url(#m)">
|
|
63
|
-
<ellipse cx="955" cy="193" rx="80" ry="16" fill="url(#ho)"/>
|
|
64
|
-
<g><animateTransform attributeName="transform" type="translate" values="0 0;-62.8 0" dur=".74s" repeatCount="indefinite"/><rect x="651" y="178" width="348" height="30" fill="url(#pt)"/></g>
|
|
65
|
-
<rect x="941" y="185" width="14" height="2" fill="url(#pg)"><animate attributeName="x" values="941;710" dur="3.4s" repeatCount="indefinite"/></rect>
|
|
66
|
-
<rect x="941" y="200" width="9" height="1.6" fill="url(#pg)"><animate attributeName="x" values="941;710" dur="4.6s" begin="-2.1s" repeatCount="indefinite"/></rect>
|
|
67
|
-
</g></g>
|
|
68
|
-
<g clip-path="url(#tc)">
|
|
69
|
-
<ellipse cx="916" cy="193" rx="39" ry="23" fill="url(#fl)" filter="url(#fb)"/>
|
|
70
|
-
<rect x="928" y="191.7" width="54" height="2.6" fill="#3a85de" opacity=".45" filter="url(#fb)"/>
|
|
71
|
-
<rect x="929" y="192.2" width="52" height="1.6" fill="url(#hl)"/>
|
|
72
|
-
<rect x="953.4" y="182" width="3.2" height="22" fill="#4089e0" opacity=".4" filter="url(#fb)"/>
|
|
73
|
-
<rect x="954.2" y="183" width="1.6" height="20" fill="url(#vl)"/>
|
|
74
|
-
</g>
|
|
75
|
-
<circle cx="955" cy="193" r="26" fill="url(#kg)"><animate attributeName="opacity" values=".55;1;.55" dur="1.9s" repeatCount="indefinite"/></circle>
|
|
76
|
-
<circle cx="955" cy="193" r="15.6" fill="none" stroke="#3a7ccf" stroke-opacity=".09" stroke-width="2"/>
|
|
77
|
-
<circle cx="955" cy="193" r="14" fill="#fff" stroke="#7ea0c5" stroke-opacity=".32"/>
|
|
78
|
-
</svg>
|
package/docs/banner.svg
DELETED
|
@@ -1,78 +0,0 @@
|
|
|
1
|
-
<svg xmlns="http://www.w3.org/2000/svg" width="1200" height="260" viewBox="0 0 1200 260" font-family="system-ui,-apple-system,'Segoe UI',sans-serif">
|
|
2
|
-
<defs>
|
|
3
|
-
<linearGradient id="b" x1="0" y1="0" x2="1" y2="0"><stop offset="0" stop-color="#fff"/><stop offset="1" stop-color="#edf2fd"/></linearGradient>
|
|
4
|
-
<linearGradient id="gt" x1="0" y1="0" x2="1" y2="0"><stop offset="0" stop-color="#fff"/><stop offset=".18" stop-color="#d7eaff"/><stop offset=".54" stop-color="#75afea"/><stop offset="1" stop-color="#0751ad"/></linearGradient>
|
|
5
|
-
<linearGradient id="ov" x1="0" y1="0" x2="1" y2="0"><stop offset="0" stop-color="#fff" stop-opacity=".48"/><stop offset=".34" stop-color="#fff" stop-opacity="0"/><stop offset="1" stop-color="#1765c9" stop-opacity=".07"/></linearGradient>
|
|
6
|
-
<radialGradient id="fl" fx="1" fy=".5"><stop offset="0" stop-color="#fff" stop-opacity=".98"/><stop offset=".13" stop-color="#cce7ff" stop-opacity=".88"/><stop offset=".31" stop-color="#5ba2f1" stop-opacity=".48"/><stop offset=".53" stop-color="#256fcf" stop-opacity=".16"/><stop offset=".75" stop-color="#256fcf" stop-opacity="0"/></radialGradient>
|
|
7
|
-
<linearGradient id="hl" x1="0" y1="0" x2="1" y2="0"><stop offset="0" stop-color="#74b1f4" stop-opacity="0"/><stop offset=".4" stop-color="#74b1f4" stop-opacity=".34"/><stop offset=".55" stop-color="#fff"/><stop offset=".72" stop-color="#428be1" stop-opacity=".58"/><stop offset="1" stop-color="#428be1" stop-opacity="0"/></linearGradient>
|
|
8
|
-
<linearGradient id="vl" x1="0" y1="0" x2="0" y2="1"><stop offset="0" stop-color="#fff" stop-opacity="0"/><stop offset=".5" stop-color="#fff" stop-opacity=".94"/><stop offset="1" stop-color="#fff" stop-opacity="0"/></linearGradient>
|
|
9
|
-
<radialGradient id="ho"><stop offset="0" stop-color="#eaf3ff" stop-opacity=".7"/><stop offset="1" stop-color="#eaf3ff" stop-opacity="0"/></radialGradient>
|
|
10
|
-
<radialGradient id="kg"><stop offset="0" stop-color="#3076cf" stop-opacity=".3"/><stop offset="1" stop-color="#3076cf" stop-opacity="0"/></radialGradient>
|
|
11
|
-
<linearGradient id="pg" x1="0" x2="1"><stop offset="0" stop-color="#185eb8" stop-opacity="0"/><stop offset=".68" stop-color="#246cca" stop-opacity=".4"/><stop offset="1" stop-color="#67aff8" stop-opacity=".6"/></linearGradient>
|
|
12
|
-
<radialGradient id="mk" gradientUnits="userSpaceOnUse" cx="955" cy="193" r="242"><stop offset="0" stop-color="#fff"/><stop offset=".2" stop-color="#c9c9c9"/><stop offset=".45" stop-color="#9a9a9a"/><stop offset=".75" stop-color="#757575"/><stop offset="1" stop-color="#606060"/></radialGradient>
|
|
13
|
-
<pattern id="pt" width="62.83" height="30" patternUnits="userSpaceOnUse"><rect x="16" width="2" height="30" fill="#65bef4" opacity=".05"/><rect x="20" width="2" height="30" fill="#65bef4" opacity=".07"/><rect x="24" width="2" height="30" fill="#65bef4" opacity=".09"/><rect x="28" width="2" height="30" fill="#65bef4" opacity=".1"/><rect x="32" width="2" height="30" fill="#65bef4" opacity=".11"/><rect x="36" width="2" height="30" fill="#65bef4" opacity=".17"/><rect x="40" width="2" height="30" fill="#65bef4" opacity=".3"/><rect x="44" width="2" height="30" fill="#65bef4" opacity=".45"/><rect x="48" width="2" height="30" fill="#65bef4" opacity=".45"/><rect x="52" width="2" height="30" fill="#65bef4" opacity=".34"/><rect x="56" width="2" height="30" fill="#65bef4" opacity=".27"/><rect x="60" width="2" height="30" fill="#65bef4" opacity=".29"/></pattern>
|
|
14
|
-
<filter id="fb" x="-40%" y="-40%" width="180%" height="180%"><feGaussianBlur stdDeviation="2"/></filter>
|
|
15
|
-
<filter id="f3" x="-60%" y="-60%" width="220%" height="220%"><feGaussianBlur stdDeviation="3"/></filter>
|
|
16
|
-
<clipPath id="pc"><rect x="715" y="179" width="240" height="28" rx="14"/></clipPath>
|
|
17
|
-
<clipPath id="tc"><rect x="714" y="178" width="284" height="30" rx="15"/></clipPath>
|
|
18
|
-
<mask id="m"><rect x="714" y="178" width="284" height="30" fill="url(#mk)"/></mask>
|
|
19
|
-
</defs>
|
|
20
|
-
<rect width="1200" height="260" fill="url(#b)"/>
|
|
21
|
-
<text x="56" y="102" font-size="38" font-weight="700" fill="#15171b">DSH Model Think Level</text>
|
|
22
|
-
<text x="56" y="142" font-size="16" fill="#5c6470">Thinking levels, vision badges & request headers —</text>
|
|
23
|
-
<text x="56" y="166" font-size="16" fill="#5c6470">edited inside the official Models page, auto-adapted in one click.</text>
|
|
24
|
-
<g font-size="12.5">
|
|
25
|
-
<rect x="56" y="192" width="170" height="27" rx="13.5" fill="#4d6bfe"/><text x="141" y="210" text-anchor="middle" font-weight="600" fill="#fff">DeepSeek Harness plugin</text>
|
|
26
|
-
<rect x="238" y="192" width="150" height="27" rx="13.5" fill="#fff" stroke="#bcc9f5"/><text x="313" y="210" text-anchor="middle" fill="#3d55d8">One-click auto-adapt</text>
|
|
27
|
-
<rect x="400" y="192" width="163" height="27" rx="13.5" fill="#fff" stroke="#bcc9f5"/><text x="481" y="210" text-anchor="middle" fill="#3d55d8">Provider → model picker</text>
|
|
28
|
-
</g>
|
|
29
|
-
<rect x="690" y="24" width="450" height="212" rx="13" fill="#f6f8f7" stroke="#e2e6e5"/>
|
|
30
|
-
<text x="714" y="54" font-size="15" font-weight="700" fill="#15171b">Reasoning effort</text>
|
|
31
|
-
<text x="1116" y="54" font-size="13" font-weight="600" fill="#4d6bfe" text-anchor="end">Auto-adapt</text>
|
|
32
|
-
<g font-size="13" fill="#3c434c">
|
|
33
|
-
<text x="740" y="78">off</text><text x="740" y="106">low</text><text x="740" y="134">high</text>
|
|
34
|
-
</g>
|
|
35
|
-
<g fill="#fff" stroke="#b9c1cc">
|
|
36
|
-
<rect x="714" y="65" width="18" height="18" rx="4"/><rect x="714" y="93" width="18" height="18" rx="4"/><rect x="714" y="121" width="18" height="18" rx="4"/>
|
|
37
|
-
</g>
|
|
38
|
-
<g fill="#fbfcfe" stroke="#d7dce2">
|
|
39
|
-
<rect x="812" y="62" width="120" height="24" rx="5"/><rect x="812" y="90" width="120" height="24" rx="5"/><rect x="812" y="118" width="120" height="24" rx="5"/>
|
|
40
|
-
</g>
|
|
41
|
-
<g opacity="0"><animate attributeName="opacity" values="0;0;1;1;0;0" keyTimes="0;.047;.086;.844;.922;1" dur="6.4s" repeatCount="indefinite"/>
|
|
42
|
-
<rect x="714" y="65" width="18" height="18" rx="4" fill="#4d6bfe"/>
|
|
43
|
-
<path d="M718 74l4 4 8-9" fill="none" stroke="#fff" stroke-width="2.4" stroke-linecap="round" stroke-linejoin="round" stroke-dasharray="20" stroke-dashoffset="20"><animate attributeName="stroke-dashoffset" values="20;20;0;0;20;20" keyTimes="0;.047;.086;.844;.922;1" dur="6.4s" repeatCount="indefinite"/></path>
|
|
44
|
-
<text x="822" y="78" font-size="12.5" fill="#1c232b">off</text></g>
|
|
45
|
-
<g opacity="0"><animate attributeName="opacity" values="0;0;1;1;0;0" keyTimes="0;.125;.164;.844;.922;1" dur="6.4s" repeatCount="indefinite"/>
|
|
46
|
-
<rect x="714" y="93" width="18" height="18" rx="4" fill="#4d6bfe"/>
|
|
47
|
-
<path d="M718 102l4 4 8-9" fill="none" stroke="#fff" stroke-width="2.4" stroke-linecap="round" stroke-linejoin="round" stroke-dasharray="20" stroke-dashoffset="20"><animate attributeName="stroke-dashoffset" values="20;20;0;0;20;20" keyTimes="0;.125;.164;.844;.922;1" dur="6.4s" repeatCount="indefinite"/></path>
|
|
48
|
-
<text x="822" y="106" font-size="12.5" fill="#1c232b">low</text></g>
|
|
49
|
-
<g opacity="0"><animate attributeName="opacity" values="0;0;1;1;0;0" keyTimes="0;.203;.242;.844;.922;1" dur="6.4s" repeatCount="indefinite"/>
|
|
50
|
-
<rect x="714" y="121" width="18" height="18" rx="4" fill="#4d6bfe"/>
|
|
51
|
-
<path d="M718 130l4 4 8-9" fill="none" stroke="#fff" stroke-width="2.4" stroke-linecap="round" stroke-linejoin="round" stroke-dasharray="20" stroke-dashoffset="20"><animate attributeName="stroke-dashoffset" values="20;20;0;0;20;20" keyTimes="0;.203;.242;.844;.922;1" dur="6.4s" repeatCount="indefinite"/></path>
|
|
52
|
-
<text x="822" y="134" font-size="12.5" fill="#1c232b">high</text></g>
|
|
53
|
-
<g opacity="0"><animate attributeName="opacity" values="0;0;1;1;0;0" keyTimes="0;.281;.328;.844;.922;1" dur="6.4s" repeatCount="indefinite"/>
|
|
54
|
-
<rect x="714" y="142" width="402" height="22" rx="6" fill="none" stroke="#c6cdd9" stroke-dasharray="4 3"/>
|
|
55
|
-
<text x="728" y="156.5" font-size="11" fill="#6b7480">Context window 1,048,576 · Max output 128,000</text></g>
|
|
56
|
-
<rect x="711" y="175" width="290" height="36" rx="18" fill="none" stroke="#1f69c9" stroke-width="5" opacity="0"><animate attributeName="opacity" values="0;.2;0" dur="1.9s" repeatCount="indefinite"/></rect>
|
|
57
|
-
<ellipse cx="856" cy="211" rx="140" ry="6" fill="#3065a5" opacity=".16" filter="url(#f3)"/>
|
|
58
|
-
<rect x="714" y="178" width="284" height="30" rx="15" fill="#e5f0ff"/>
|
|
59
|
-
<rect x="716" y="179" width="280" height="1.4" rx=".7" fill="#fff" opacity=".9"/>
|
|
60
|
-
<rect x="715" y="179" width="240" height="28" rx="14" fill="url(#gt)"/>
|
|
61
|
-
<rect x="714" y="178" width="284" height="30" rx="15" fill="url(#ov)"/>
|
|
62
|
-
<g clip-path="url(#pc)"><g mask="url(#m)">
|
|
63
|
-
<ellipse cx="955" cy="193" rx="80" ry="16" fill="url(#ho)"/>
|
|
64
|
-
<g><animateTransform attributeName="transform" type="translate" values="0 0;-62.8 0" dur=".74s" repeatCount="indefinite"/><rect x="651" y="178" width="348" height="30" fill="url(#pt)"/></g>
|
|
65
|
-
<rect x="941" y="185" width="14" height="2" fill="url(#pg)"><animate attributeName="x" values="941;710" dur="3.4s" repeatCount="indefinite"/></rect>
|
|
66
|
-
<rect x="941" y="200" width="9" height="1.6" fill="url(#pg)"><animate attributeName="x" values="941;710" dur="4.6s" begin="-2.1s" repeatCount="indefinite"/></rect>
|
|
67
|
-
</g></g>
|
|
68
|
-
<g clip-path="url(#tc)">
|
|
69
|
-
<ellipse cx="916" cy="193" rx="39" ry="23" fill="url(#fl)" filter="url(#fb)"/>
|
|
70
|
-
<rect x="928" y="191.7" width="54" height="2.6" fill="#3a85de" opacity=".45" filter="url(#fb)"/>
|
|
71
|
-
<rect x="929" y="192.2" width="52" height="1.6" fill="url(#hl)"/>
|
|
72
|
-
<rect x="953.4" y="182" width="3.2" height="22" fill="#4089e0" opacity=".4" filter="url(#fb)"/>
|
|
73
|
-
<rect x="954.2" y="183" width="1.6" height="20" fill="url(#vl)"/>
|
|
74
|
-
</g>
|
|
75
|
-
<circle cx="955" cy="193" r="26" fill="url(#kg)"><animate attributeName="opacity" values=".55;1;.55" dur="1.9s" repeatCount="indefinite"/></circle>
|
|
76
|
-
<circle cx="955" cy="193" r="15.6" fill="none" stroke="#3a7ccf" stroke-opacity=".09" stroke-width="2"/>
|
|
77
|
-
<circle cx="955" cy="193" r="14" fill="#fff" stroke="#7ea0c5" stroke-opacity=".32"/>
|
|
78
|
-
</svg>
|