dsh-deepseek-web-login 0.2.0

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.
@@ -0,0 +1,307 @@
1
+ <svg data-theme="light" width="1080" height="600" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 1080 600" role="img" lang="zh-CN" aria-labelledby="archify-diagram-title archify-diagram-description" data-preset="classic" data-quality-profile="showcase">
2
+ <style>
3
+ <![CDATA[
4
+ svg {
5
+
6
+ --bg: #f8fafc;
7
+ --grid: #e2e8f0;
8
+ --text: #0f172a;
9
+ --text-muted: #64748b;
10
+ --text-dim: #94a3b8;
11
+ --text-faint: #64748b;
12
+
13
+ --panel: #ffffff;
14
+ --panel-border: #e2e8f0;
15
+ --lane-fill: rgba(248, 250, 252, 0.65);
16
+ --lane-stroke: #cbd5e1;
17
+
18
+ --arrow: #94a3b8;
19
+ --arrow-emphasis: #059669;
20
+
21
+ --mask: #ffffff;
22
+
23
+ --frontend-fill: rgba(34, 211, 238, 0.15);
24
+ --frontend-stroke: #0891b2;
25
+ --backend-fill: rgba(52, 211, 153, 0.18);
26
+ --backend-stroke: #059669;
27
+ --database-fill: rgba(167, 139, 250, 0.2);
28
+ --database-stroke: #7c3aed;
29
+ --cloud-fill: rgba(251, 191, 36, 0.18);
30
+ --cloud-stroke: #d97706;
31
+ --security-fill: rgba(251, 113, 133, 0.15);
32
+ --security-stroke: #e11d48;
33
+ --messagebus-fill: rgba(251, 146, 60, 0.15);
34
+ --messagebus-stroke:#ea580c;
35
+ --external-fill: rgba(148, 163, 184, 0.18);
36
+ --external-stroke: #64748b;
37
+
38
+ --toolbar-bg: rgba(255, 255, 255, 0.92);
39
+ --toolbar-border: #cbd5e1;
40
+ --toolbar-text: #334155;
41
+ --toolbar-hover: #ffffff;
42
+ --toolbar-menu-bg: #ffffff;
43
+ }
44
+ svg .archify-export-bg { fill: var(--bg); }
45
+ /* ========================================================== SVG SEMANTIC CLASSES — use these instead of inline fill/stroke ========================================================== */ .c-grid { stroke: var(--grid); fill: none; }
46
+ .c-mask { fill: var(--mask); stroke: none; }
47
+ .c-frontend { fill: var(--frontend-fill); stroke: var(--frontend-stroke); }
48
+ .c-backend { fill: var(--backend-fill); stroke: var(--backend-stroke); }
49
+ .c-database { fill: var(--database-fill); stroke: var(--database-stroke); }
50
+ .c-cloud { fill: var(--cloud-fill); stroke: var(--cloud-stroke); }
51
+ .c-external { fill: var(--external-fill); stroke: var(--external-stroke); }
52
+ /* Text helpers */ .t-primary { fill: var(--text); }
53
+ .t-muted { fill: var(--text-muted); }
54
+ .t-dim { fill: var(--text-dim); }
55
+ .t-backend { fill: var(--backend-stroke); }
56
+ .t-security { fill: var(--security-stroke); }
57
+ .t-messagebus { fill: var(--messagebus-stroke); }
58
+ /* Semantic Sigils are small authored role stamps, not icons from a brand pack and not viewer controls. Prefix selectors with svg so the canonical export's SVG-only stylesheet collector keeps them automatically. */ svg .semantic-sigil { fill: none; stroke: currentColor; stroke-width: 1.35; stroke-linecap: round; stroke-linejoin: round; opacity: 0.76; pointer-events: none; }
59
+ svg .semantic-sigil > * { vector-effect: non-scaling-stroke; }
60
+ svg .semantic-sigil .sigil-fill { fill: currentColor; stroke: none; }
61
+ svg .s-frontend { color: var(--frontend-stroke); }
62
+ svg .s-backend { color: var(--backend-stroke); }
63
+ svg .s-database { color: var(--database-stroke); }
64
+ svg .s-cloud { color: var(--cloud-stroke); }
65
+ svg .s-external { color: var(--external-stroke); }
66
+ /* Arrows */ .a-default { stroke: var(--arrow); fill: none; }
67
+ .a-emphasis { stroke: var(--arrow-emphasis); fill: none; }
68
+ .a-security { stroke: var(--security-stroke); fill: none; stroke-dasharray: 5,5; }
69
+ .a-dashed { stroke: var(--database-stroke); fill: none; stroke-dasharray: 4,4; }
70
+ /* Arrowhead markers reference these */ .m-default { fill: var(--arrow); }
71
+ .m-emphasis { fill: var(--arrow-emphasis); }
72
+ .m-security { fill: var(--security-stroke); }
73
+ .m-dashed { fill: var(--database-stroke); }
74
+ .c-lane { fill: var(--lane-fill); stroke: var(--lane-stroke); stroke-dasharray: 6,6; }
75
+ ]]>
76
+ </style>
77
+ <rect width="100%" height="100%" class="archify-export-bg"/>
78
+
79
+ <title id="archify-diagram-title">登录与凭证捕获:浏览器窗口登录一次</title>
80
+ <desc id="archify-diagram-description">由 Archify 生成的时序图。</desc>
81
+ <!-- Definitions -->
82
+ <defs>
83
+ <marker id="arrowhead" markerWidth="10" markerHeight="7" refX="9" refY="3.5" orient="auto">
84
+ <polygon points="0 0, 10 3.5, 0 7" class="m-default" />
85
+ </marker>
86
+ <marker id="arrowhead-emphasis" markerWidth="10" markerHeight="7" refX="9" refY="3.5" orient="auto">
87
+ <polygon points="0 0, 10 3.5, 0 7" class="m-emphasis" />
88
+ </marker>
89
+ <marker id="arrowhead-security" markerWidth="10" markerHeight="7" refX="9" refY="3.5" orient="auto">
90
+ <polygon points="0 0, 10 3.5, 0 7" class="m-security" />
91
+ </marker>
92
+ <marker id="arrowhead-dashed" markerWidth="10" markerHeight="7" refX="9" refY="3.5" orient="auto">
93
+ <polygon points="0 0, 10 3.5, 0 7" class="m-dashed" />
94
+ </marker>
95
+ <pattern id="grid" width="40" height="40" patternUnits="userSpaceOnUse">
96
+ <path d="M 40 0 L 0 0 0 40" class="c-grid" stroke-width="0.5"/>
97
+ </pattern>
98
+ </defs>
99
+
100
+ <!-- Background Grid -->
101
+ <rect width="100%" height="100%" fill="url(#grid)" />
102
+
103
+ <!-- Time Segments -->
104
+ <rect data-graph-role="structural-frame" data-composition-frame-kind="segment" data-composition-frame-id="0" x="48" y="150" width="984" height="146" rx="10" class="c-lane" stroke-width="1"/>
105
+
106
+ <rect data-graph-role="structural-frame" data-composition-frame-kind="segment" data-composition-frame-id="1" x="48" y="296" width="984" height="108" rx="10" class="c-lane" stroke-width="1"/>
107
+
108
+ <rect data-graph-role="structural-frame" data-composition-frame-kind="segment" data-composition-frame-id="2" x="48" y="404" width="984" height="108" rx="10" class="c-lane" stroke-width="1"/>
109
+
110
+ <!-- Lifelines -->
111
+ <path d="M 145.5 142 L 145.5 535" class="a-default" stroke-width="0.8" stroke-dasharray="3,7"/>
112
+ <path d="M 348.25 142 L 348.25 535" class="a-default" stroke-width="0.8" stroke-dasharray="3,7"/>
113
+ <path d="M 551 142 L 551 535" class="a-default" stroke-width="0.8" stroke-dasharray="3,7"/>
114
+ <path d="M 753.75 142 L 753.75 535" class="a-default" stroke-width="0.8" stroke-dasharray="3,7"/>
115
+ <path d="M 956.5 142 L 956.5 535" class="a-default" stroke-width="0.8" stroke-dasharray="3,7"/>
116
+
117
+ <!-- Activations -->
118
+ <rect x="343.25" y="170" width="10" height="342" rx="3" class="c-mask"/>
119
+ <rect x="343.25" y="170" width="10" height="342" rx="3" class="c-backend" stroke-width="1"/>
120
+ <rect x="546" y="206" width="10" height="108" rx="3" class="c-mask"/>
121
+ <rect x="546" y="206" width="10" height="108" rx="3" class="c-external" stroke-width="1"/>
122
+ <rect x="748.75" y="242" width="10" height="144" rx="3" class="c-mask"/>
123
+ <rect x="748.75" y="242" width="10" height="144" rx="3" class="c-cloud" stroke-width="1"/>
124
+ <rect x="951.5" y="422" width="10" height="72" rx="3" class="c-mask"/>
125
+ <rect x="951.5" y="422" width="10" height="72" rx="3" class="c-database" stroke-width="1"/>
126
+
127
+ <!-- Messages -->
128
+ <g data-edge-from="panel" data-edge-to="host" data-edge-label="点击「浏览器窗口登录」" data-edge-key="0">
129
+ <path data-composition-edge-from="panel" data-composition-edge-to="host" data-composition-points="152.5,170;341.25,170" d="M 152.5 170 L 341.25 170" class="a-emphasis" stroke-width="1.8" marker-end="url(#arrowhead-emphasis)"/>
130
+ <g data-detail="context">
131
+ <rect x="183.675" y="150" width="126.4" height="16" rx="3" class="c-mask"/>
132
+ <text x="246.875" y="160" class="t-backend" font-size="9" text-anchor="middle">点击「浏览器窗口登录」</text>
133
+ </g>
134
+ </g>
135
+
136
+ <g data-edge-from="host" data-edge-to="browser" data-edge-label="启动 Edge / Chrome(CDP)" data-edge-key="1">
137
+ <path data-composition-edge-from="host" data-composition-edge-to="browser" data-composition-points="355.25,206;544,206" d="M 355.25 206 L 544 206" class="a-emphasis" stroke-width="1.8" marker-end="url(#arrowhead-emphasis)"/>
138
+ <g data-detail="context">
139
+ <rect x="378.625" y="186" width="142" height="16" rx="3" class="c-mask"/>
140
+ <text x="449.625" y="196" class="t-backend" font-size="9" text-anchor="middle">启动 Edge / Chrome(CDP)</text>
141
+ </g>
142
+ </g>
143
+
144
+ <g data-edge-from="browser" data-edge-to="web" data-edge-label="手机号 / 邮箱 / 验证码" data-edge-key="2">
145
+ <path data-composition-edge-from="browser" data-composition-edge-to="web" data-composition-points="558,242;746.75,242" d="M 558 242 L 746.75 242" class="a-default" stroke-width="1.4" marker-end="url(#arrowhead)"/>
146
+ <g data-detail="context">
147
+ <rect x="589.175" y="222" width="126.4" height="16" rx="3" class="c-mask"/>
148
+ <text x="652.375" y="232" class="t-backend" font-size="9" text-anchor="middle">手机号 / 邮箱 / 验证码</text>
149
+ </g>
150
+ </g>
151
+
152
+ <g data-edge-from="web" data-edge-to="browser" data-edge-label="登录成功,写入登录态" data-edge-key="3">
153
+ <path data-composition-edge-from="web" data-composition-edge-to="browser" data-composition-points="746.75,278;558,278" d="M 746.75 278 L 558 278" class="a-default" stroke-width="1.4" stroke-dasharray="3,5" marker-end="url(#arrowhead)"/>
154
+ <g data-detail="context">
155
+ <rect x="594.375" y="258" width="116" height="16" rx="3" class="c-mask"/>
156
+ <text x="652.375" y="268" class="t-muted" font-size="9" text-anchor="middle">登录成功,写入登录态</text>
157
+ </g>
158
+ </g>
159
+
160
+ <g data-edge-from="browser" data-edge-to="host" data-edge-label="旁路捕获凭证" data-edge-key="4">
161
+ <path data-composition-edge-from="browser" data-composition-edge-to="host" data-composition-points="544,314;355.25,314" d="M 544 314 L 355.25 314" class="a-security" stroke-width="1.4" marker-end="url(#arrowhead-security)"/>
162
+ <g data-detail="context">
163
+ <rect x="412.425" y="294" width="74.4" height="16" rx="3" class="c-mask"/>
164
+ <text x="449.625" y="304" class="t-security" font-size="9" text-anchor="middle">旁路捕获凭证</text>
165
+ </g>
166
+ </g>
167
+
168
+ <g data-edge-from="host" data-edge-to="web" data-edge-label="GET /api/v0/users/current" data-edge-key="5">
169
+ <path data-composition-edge-from="host" data-composition-edge-to="web" data-composition-points="355.25,350;746.75,350" d="M 355.25 350 L 746.75 350" class="a-security" stroke-width="1.4" marker-end="url(#arrowhead-security)"/>
170
+ <g data-detail="context">
171
+ <rect x="480" y="330" width="142" height="16" rx="3" class="c-mask"/>
172
+ <text x="551" y="340" class="t-security" font-size="9" text-anchor="middle">GET /api/v0/users/current</text>
173
+ </g>
174
+ </g>
175
+
176
+ <g data-edge-from="web" data-edge-to="host" data-edge-label="200 用户信息" data-edge-key="6">
177
+ <path data-composition-edge-from="web" data-composition-edge-to="host" data-composition-points="746.75,386;355.25,386" d="M 746.75 386 L 355.25 386" class="a-default" stroke-width="1.4" stroke-dasharray="3,5" marker-end="url(#arrowhead)"/>
178
+ <g data-detail="context">
179
+ <rect x="513.8" y="366" width="74.4" height="16" rx="3" class="c-mask"/>
180
+ <text x="551" y="376" class="t-muted" font-size="9" text-anchor="middle">200 用户信息</text>
181
+ </g>
182
+ </g>
183
+
184
+ <g data-edge-from="host" data-edge-to="creds" data-edge-label="落盘 deepseek-auth.json" data-edge-key="7">
185
+ <path data-composition-edge-from="host" data-composition-edge-to="creds" data-composition-points="355.25,422;949.5,422" d="M 355.25 422 L 949.5 422" class="a-emphasis" stroke-width="1.8" marker-end="url(#arrowhead-emphasis)"/>
186
+ <g data-detail="context">
187
+ <rect x="586.575" y="402" width="131.60000000000002" height="16" rx="3" class="c-mask"/>
188
+ <text x="652.375" y="412" class="t-backend" font-size="9" text-anchor="middle">落盘 deepseek-auth.json</text>
189
+ </g>
190
+ </g>
191
+
192
+ <g data-edge-from="host" data-edge-to="creds" data-edge-label="凭证丢失时复用持久分区重建" data-edge-key="8">
193
+ <path data-composition-edge-from="host" data-composition-edge-to="creds" data-composition-points="355.25,458;949.5,458" d="M 355.25 458 L 949.5 458" class="a-dashed" stroke-width="1.4" marker-end="url(#arrowhead-dashed)"/>
194
+ <g data-detail="context">
195
+ <rect x="578.775" y="438" width="147.20000000000002" height="16" rx="3" class="c-mask"/>
196
+ <text x="652.375" y="448" class="t-messagebus" font-size="9" text-anchor="middle">凭证丢失时复用持久分区重建</text>
197
+ </g>
198
+ </g>
199
+
200
+ <g data-edge-from="host" data-edge-to="panel" data-edge-label="面板显示已登录" data-edge-key="9">
201
+ <path data-composition-edge-from="host" data-composition-edge-to="panel" data-composition-points="341.25,494;152.5,494" d="M 341.25 494 L 152.5 494" class="a-default" stroke-width="1.4" stroke-dasharray="3,5" marker-end="url(#arrowhead)"/>
202
+ <g data-detail="context">
203
+ <rect x="204.475" y="474" width="84.8" height="16" rx="3" class="c-mask"/>
204
+ <text x="246.875" y="484" class="t-muted" font-size="9" text-anchor="middle">面板显示已登录</text>
205
+ </g>
206
+ </g>
207
+
208
+ <!-- Segment Labels -->
209
+ <g data-graph-role="segment-label" data-segment-id="0">
210
+ <rect x="56" y="128" width="55.6" height="18" rx="3" class="c-mask"/>
211
+ <text x="62" y="141" class="t-dim" font-size="9" font-weight="600">登录一次</text>
212
+ </g>
213
+ <g data-graph-role="segment-label" data-segment-id="1">
214
+ <rect x="56" y="274" width="66" height="18" rx="3" class="c-mask"/>
215
+ <text x="62" y="287" class="t-dim" font-size="9" font-weight="600">捕获与校验</text>
216
+ </g>
217
+ <g data-graph-role="segment-label" data-segment-id="2">
218
+ <rect x="56" y="382" width="66" height="18" rx="3" class="c-mask"/>
219
+ <text x="62" y="395" class="t-dim" font-size="9" font-weight="600">落盘与救援</text>
220
+ </g>
221
+
222
+ <!-- Participants -->
223
+ <g id="node-panel" data-node-id="panel" data-node-label="设置面板" tabindex="0" role="button" aria-label="聚焦设置面板,DSH 设置页, 时序参与者" aria-pressed="false" data-node-kind="frontend" data-node-sublabel="DSH 设置页" data-node-context="时序参与者">
224
+ <title>设置面板 · DSH 设置页 · 时序参与者</title>
225
+ <rect x="62" y="72" width="167" height="54" rx="6" class="c-mask"/>
226
+ <rect x="62" y="72" width="167" height="54" rx="6" class="c-frontend" stroke-width="1.5"/>
227
+ <g aria-hidden="true" data-semantic-sigil="frontend" class="semantic-sigil s-frontend" transform="translate(68 78) scale(0.6875)">
228
+ <rect x="2" y="3" width="12" height="10" rx="2"/>
229
+ <path d="M2 6.5h12"/>
230
+ <circle cx="4.1" cy="4.8" r=".7" class="sigil-fill"/>
231
+ <circle cx="6.3" cy="4.8" r=".7" class="sigil-fill"/>
232
+ </g>
233
+ <text data-node-label="" data-detail-anchor="" x="145.5" y="94" class="t-primary" font-size="11" font-weight="600" text-anchor="middle">设置面板</text>
234
+ <text data-detail="context" x="145.5" y="111" class="t-muted" font-size="7" text-anchor="middle">DSH 设置页</text>
235
+ </g>
236
+
237
+ <g id="node-host" data-node-id="host" data-node-label="插件 host" tabindex="0" role="button" aria-label="聚焦插件 host,插件进程, 时序参与者" aria-pressed="false" data-node-kind="backend" data-node-sublabel="插件进程" data-node-context="时序参与者">
238
+ <title>插件 host · 插件进程 · 时序参与者</title>
239
+ <rect x="264.75" y="72" width="167" height="54" rx="6" class="c-mask"/>
240
+ <rect x="264.75" y="72" width="167" height="54" rx="6" class="c-backend" stroke-width="1.5"/>
241
+ <g aria-hidden="true" data-semantic-sigil="backend" class="semantic-sigil s-backend" transform="translate(270.75 78) scale(0.6875)">
242
+ <path d="M6 3 3 8l3 5M10 3l3 5-3 5"/>
243
+ </g>
244
+ <text data-node-label="" data-detail-anchor="" x="348.25" y="94" class="t-primary" font-size="11" font-weight="600" text-anchor="middle">插件 host</text>
245
+ <text data-detail="context" x="348.25" y="111" class="t-muted" font-size="7" text-anchor="middle">插件进程</text>
246
+ </g>
247
+
248
+ <g id="node-browser" data-node-id="browser" data-node-label="浏览器登录窗口" tabindex="0" role="button" aria-label="聚焦浏览器登录窗口,Edge / Chrome, 时序参与者" aria-pressed="false" data-node-kind="external" data-node-sublabel="Edge / Chrome" data-node-context="时序参与者">
249
+ <title>浏览器登录窗口 · Edge / Chrome · 时序参与者</title>
250
+ <rect x="467.5" y="72" width="167" height="54" rx="6" class="c-mask"/>
251
+ <rect x="467.5" y="72" width="167" height="54" rx="6" class="c-external" stroke-width="1.5"/>
252
+ <g aria-hidden="true" data-semantic-sigil="external" class="semantic-sigil s-external" transform="translate(473.5 78) scale(0.6875)">
253
+ <rect x="2.5" y="5" width="8.5" height="8" rx="1.5"/>
254
+ <path d="M8 2.5h5.5V8M13.5 2.5 7.5 8.5"/>
255
+ </g>
256
+ <text data-node-label="" data-detail-anchor="" x="551" y="94" class="t-primary" font-size="11" font-weight="600" text-anchor="middle">浏览器登录窗口</text>
257
+ <text data-detail="context" x="551" y="111" class="t-muted" font-size="7" text-anchor="middle">Edge / Chrome</text>
258
+ </g>
259
+
260
+ <g id="node-web" data-node-id="web" data-node-label="chat.deepseek.com" tabindex="0" role="button" aria-label="聚焦chat.deepseek.com,网页端, 时序参与者" aria-pressed="false" data-node-kind="cloud" data-node-sublabel="网页端" data-node-context="时序参与者">
261
+ <title>chat.deepseek.com · 网页端 · 时序参与者</title>
262
+ <rect x="670.25" y="72" width="167" height="54" rx="6" class="c-mask"/>
263
+ <rect x="670.25" y="72" width="167" height="54" rx="6" class="c-cloud" stroke-width="1.5"/>
264
+ <g aria-hidden="true" data-semantic-sigil="cloud" class="semantic-sigil s-cloud" transform="translate(676.25 78) scale(0.6875)">
265
+ <path d="M4.3 12.5h7.3a2.4 2.4 0 0 0 .2-4.8 4 4 0 0 0-7.5-1.3A3.1 3.1 0 0 0 4.3 12.5Z"/>
266
+ </g>
267
+ <text data-node-label="" data-detail-anchor="" x="753.75" y="94" class="t-primary" font-size="11" font-weight="600" text-anchor="middle">chat.deepseek.com</text>
268
+ <text data-detail="context" x="753.75" y="111" class="t-muted" font-size="7" text-anchor="middle">网页端</text>
269
+ </g>
270
+
271
+ <g id="node-creds" data-node-id="creds" data-node-label="本机凭证" tabindex="0" role="button" aria-label="聚焦本机凭证,本机文件, 时序参与者" aria-pressed="false" data-node-kind="database" data-node-sublabel="本机文件" data-node-context="时序参与者">
272
+ <title>本机凭证 · 本机文件 · 时序参与者</title>
273
+ <rect x="873" y="72" width="167" height="54" rx="6" class="c-mask"/>
274
+ <rect x="873" y="72" width="167" height="54" rx="6" class="c-database" stroke-width="1.5"/>
275
+ <g aria-hidden="true" data-semantic-sigil="database" class="semantic-sigil s-database" transform="translate(879 78) scale(0.6875)">
276
+ <ellipse cx="8" cy="4" rx="5" ry="2"/>
277
+ <path d="M3 4v8c0 1.1 2.2 2 5 2s5-.9 5-2V4M3 8c0 1.1 2.2 2 5 2s5-.9 5-2"/>
278
+ </g>
279
+ <text data-node-label="" data-detail-anchor="" x="956.5" y="94" class="t-primary" font-size="11" font-weight="600" text-anchor="middle">本机凭证</text>
280
+ <text data-detail="context" x="956.5" y="111" class="t-muted" font-size="7" text-anchor="middle">本机文件</text>
281
+ </g>
282
+
283
+ <!-- Legend -->
284
+ <g data-legend="">
285
+ <text x="40" y="526" class="t-primary" font-size="12" font-weight="650">图例</text>
286
+ <g data-legend-semantic-kind="emphasis" data-legend-x="40" data-legend-baseline="546" data-legend-width="63">
287
+ <path d="M 40 543 L 74 543" class="a-emphasis" stroke-width="1.8" marker-end="url(#arrowhead-emphasis)"/>
288
+ <text x="83" y="546" class="t-muted" font-size="10" font-weight="500">请求</text>
289
+ </g>
290
+ <g data-legend-semantic-kind="return" data-legend-x="125" data-legend-baseline="546" data-legend-width="63">
291
+ <path d="M 125 543 L 159 543" class="a-default" stroke-width="1.4" stroke-dasharray="3,5" marker-end="url(#arrowhead)"/>
292
+ <text x="168" y="546" class="t-muted" font-size="10" font-weight="500">返回</text>
293
+ </g>
294
+ <g data-legend-semantic-kind="security" data-legend-x="210" data-legend-baseline="546" data-legend-width="63">
295
+ <path d="M 210 543 L 244 543" class="a-security" stroke-width="1.4" marker-end="url(#arrowhead-security)"/>
296
+ <text x="253" y="546" class="t-muted" font-size="10" font-weight="500">安全</text>
297
+ </g>
298
+ <g data-legend-semantic-kind="dashed" data-legend-x="295" data-legend-baseline="546" data-legend-width="83">
299
+ <path d="M 295 543 L 329 543" class="a-dashed" stroke-width="1.4" marker-end="url(#arrowhead-dashed)"/>
300
+ <text x="338" y="546" class="t-muted" font-size="10" font-weight="500">异步追踪</text>
301
+ </g>
302
+ <g data-legend-semantic-kind="default" data-legend-x="400" data-legend-baseline="546" data-legend-width="83">
303
+ <path d="M 400 543 L 434 543" class="a-default" stroke-width="1.4" marker-end="url(#arrowhead)"/>
304
+ <text x="443" y="546" class="t-muted" font-size="10" font-weight="500">默认消息</text>
305
+ </g>
306
+ </g>
307
+ </svg>
@@ -0,0 +1,64 @@
1
+ <svg xmlns="http://www.w3.org/2000/svg" width="900" height="660" viewBox="0 0 900 660" role="img" aria-label="设置面板示意">
2
+ <defs>
3
+ <style>
4
+ .panel{fill:#151922;stroke:#2a2f3a;stroke-width:1.4}
5
+ .h{font:600 13.5px system-ui,-apple-system,'Segoe UI',Roboto,sans-serif;fill:#e8edf5}
6
+ .b{font:12px ui-monospace,SFMono-Regular,Menlo,Consolas,monospace;fill:#cbd5e1}
7
+ .k{font:12px ui-monospace,SFMono-Regular,Menlo,Consolas,monospace;fill:#8b93a3}
8
+ .btn{font:600 12px system-ui,-apple-system,'Segoe UI',Roboto,sans-serif;fill:#ffffff}
9
+ .ghost{font:600 12px system-ui,-apple-system,'Segoe UI',Roboto,sans-serif;fill:#cbd5e1}
10
+ .hint{font:11.5px ui-monospace,SFMono-Regular,Menlo,Consolas,monospace;fill:#8b93a3}
11
+ </style>
12
+ </defs>
13
+ <rect x="0" y="0" width="900" height="660" rx="14" fill="#0f1115" stroke="#2a2f3a" stroke-width="1.6"/>
14
+ <text x="24" y="34" class="h" font-size="14">DeepSeek 网页登录(免费模型)</text>
15
+ <text x="24" y="56" class="hint">用 chat.deepseek.com 网页版登录态驱动 DSH agent —— 不需要 API Key。provider 路由:deepseek-web</text>
16
+
17
+ <!-- 登录状态卡 -->
18
+ <rect class="panel" x="24" y="74" width="852" height="212" rx="10"/>
19
+ <text x="42" y="100" class="h">登录状态</text>
20
+ <rect x="126" y="88" width="52" height="17" rx="8.5" fill="#1d3a2a" stroke="#2ecc71"/>
21
+ <text x="136" y="100.5" font-family="system-ui,sans-serif" font-size="11" fill="#2ecc71">已登录</text>
22
+
23
+ <text x="42" y="128" class="k">适配器注册</text><text x="180" y="128" class="b">✅ deepseek-web 已注册到 llm</text>
24
+ <text x="42" y="150" class="k">账号</text><text x="180" y="150" class="b">use***@example.com</text>
25
+ <text x="42" y="172" class="k">捕获时间</text><text x="180" y="172" class="b">2026/09/10 21:14:03</text>
26
+ <text x="42" y="194" class="k">Cookie</text><text x="180" y="194" class="b">已捕获</text>
27
+ <text x="42" y="216" class="k">指纹头</text><text x="180" y="216" class="b">已捕获</text>
28
+ <text x="42" y="238" class="k">PoW WASM</text><text x="180" y="238" class="b">fe-static.deepseek.com</text>
29
+ <text x="42" y="260" class="k">服务端校验</text><text x="180" y="260" class="b">通过</text>
30
+
31
+ <rect x="596" y="118" width="128" height="32" rx="6" fill="#4a9eff"/>
32
+ <text x="614" y="139" class="btn">浏览器窗口登录</text>
33
+ <rect x="734" y="118" width="128" height="32" rx="6" fill="none" stroke="#444c5c"/>
34
+ <text x="742" y="139" class="ghost">从已登录窗口恢复</text>
35
+ <rect x="734" y="160" width="88" height="30" rx="6" fill="none" stroke="#444c5c"/>
36
+ <text x="758" y="180" class="ghost">刷新状态</text>
37
+ <text x="600" y="216" class="hint">「从已登录窗口恢复」= 复用上次登录过的</text>
38
+ <text x="600" y="232" class="hint">窗口分区直接取凭证(免重新登录)</text>
39
+ <text x="600" y="256" class="hint">凭证存于 ~/.dsh/web-login/(不入仓库)</text>
40
+
41
+ <!-- 手动 token -->
42
+ <rect class="panel" x="24" y="302" width="852" height="150" rx="10"/>
43
+ <text x="42" y="328" class="h">手动粘贴 Token(可选路径)</text>
44
+ <text x="42" y="352" class="hint">在浏览器打开 chat.deepseek.com 并登录 → F12 控制台执行下面一行 → 粘贴结果:</text>
45
+ <rect x="42" y="362" width="470" height="26" rx="5" fill="#0f1115" stroke="#333a47"/>
46
+ <text x="54" y="380" class="b">JSON.parse(localStorage.getItem('userToken')).value</text>
47
+ <rect x="42" y="398" width="816" height="34" rx="6" fill="#0f1115" stroke="#333a47"/>
48
+ <text x="54" y="420" class="k">粘贴 token(包装 JSON 或裸 token 都行;可选:下一行粘贴 Cookie)</text>
49
+
50
+ <!-- 测试 -->
51
+ <rect class="panel" x="24" y="468" width="852" height="86" rx="10"/>
52
+ <text x="42" y="494" class="h">连通性测试</text>
53
+ <text x="42" y="516" class="hint">直接经适配器发一次最小请求(会消耗一点网页端额度):</text>
54
+ <rect x="42" y="524" width="240" height="26" rx="6" fill="#0f1115" stroke="#333a47"/>
55
+ <text x="54" y="542" class="b">DeepSeek 网页 · 快速模式(不思考)</text>
56
+ <rect x="296" y="522" width="96" height="30" rx="6" fill="#4a9eff"/>
57
+ <text x="320" y="543" class="btn">发送测试</text>
58
+
59
+ <!-- 模型 -->
60
+ <rect class="panel" x="24" y="570" width="852" height="70" rx="10"/>
61
+ <text x="42" y="596" class="h">可用模型(网页免费)</text>
62
+ <text x="42" y="618" class="b">deepseek-chat · thinking 关 · 上下文 0.8M | deepseek-reasoner · thinking 开 · 上下文 0.8M</text>
63
+ <text x="42" y="634" class="hint">两条是同一个「快速模式」的思考开关两档预设;图片输入直接可用(走网页端文件上传通道)</text>
64
+ </svg>
Binary file