@bitclub.ai/opendesk-cli 0.1.4 → 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.
package/manual.html ADDED
@@ -0,0 +1,1940 @@
1
+ <!doctype html>
2
+ <html lang="zh-CN" x-data="{ sidebarOpen: false, activeSection: '' }" class="scroll-smooth">
3
+ <head>
4
+ <meta charset="UTF-8" />
5
+ <meta name="viewport" content="width=device-width, initial-scale=1.0" />
6
+ <title>OpenDesk CLI 使用手册</title>
7
+ <script src="https://cdn.tailwindcss.com"></script>
8
+ <script defer src="https://cdn.jsdelivr.net/npm/alpinejs@3.x.x/dist/cdn.min.js"></script>
9
+ <script>
10
+ tailwind.config = {
11
+ theme: {
12
+ extend: {
13
+ colors: {
14
+ brand: {
15
+ 50: '#eef6ff',
16
+ 100: '#dbeafe',
17
+ 200: '#bdd5ff',
18
+ 300: '#8ec0ff',
19
+ 400: '#58a1ff',
20
+ 500: '#3182f6',
21
+ 600: '#1a65db',
22
+ 700: '#1550b2',
23
+ 800: '#174493',
24
+ 900: '#193b79',
25
+ 950: '#12254d'
26
+ },
27
+ surface: {
28
+ 50: '#f8fafc',
29
+ 100: '#f1f5f9',
30
+ 200: '#e2e8f0',
31
+ 300: '#cbd5e1',
32
+ 400: '#94a3b8',
33
+ 500: '#64748b',
34
+ 600: '#475569',
35
+ 700: '#334155',
36
+ 800: '#1e293b',
37
+ 900: '#0f172a',
38
+ 950: '#020617'
39
+ }
40
+ }
41
+ }
42
+ }
43
+ };
44
+ </script>
45
+ <style>
46
+ [x-cloak] {
47
+ display: none !important;
48
+ }
49
+
50
+ html {
51
+ font-feature-settings: 'cv02', 'cv03', 'cv04', 'cv11';
52
+ }
53
+
54
+ ::-webkit-scrollbar {
55
+ width: 6px;
56
+ }
57
+ ::-webkit-scrollbar-track {
58
+ background: transparent;
59
+ }
60
+ ::-webkit-scrollbar-thumb {
61
+ background: #cbd5e1;
62
+ border-radius: 3px;
63
+ }
64
+ ::-webkit-scrollbar-thumb:hover {
65
+ background: #94a3b8;
66
+ }
67
+
68
+ .sidebar-link.active {
69
+ color: #3182f6;
70
+ background: #eef6ff;
71
+ font-weight: 600;
72
+ }
73
+
74
+ code:not(pre code) {
75
+ background: #f1f5f9;
76
+ padding: 2px 6px;
77
+ border-radius: 4px;
78
+ font-size: 0.875em;
79
+ color: #e11d48;
80
+ border: 1px solid #e2e8f0;
81
+ }
82
+
83
+ pre {
84
+ position: relative;
85
+ border-radius: 8px;
86
+ overflow-x: auto;
87
+ }
88
+
89
+ pre code {
90
+ font-size: 0.85rem;
91
+ line-height: 1.6;
92
+ }
93
+
94
+ .gradient-text {
95
+ background: linear-gradient(135deg, #3182f6 0%, #8b5cf6 100%);
96
+ -webkit-background-clip: text;
97
+ -webkit-text-fill-color: transparent;
98
+ background-clip: text;
99
+ }
100
+
101
+ .hero-gradient {
102
+ background: linear-gradient(135deg, #0f172a 0%, #1e293b 50%, #0f172a 100%);
103
+ }
104
+
105
+ .card-hover {
106
+ transition:
107
+ transform 0.2s ease,
108
+ box-shadow 0.2s ease;
109
+ }
110
+ .card-hover:hover {
111
+ transform: translateY(-2px);
112
+ box-shadow:
113
+ 0 8px 25px -5px rgba(0, 0, 0, 0.1),
114
+ 0 4px 10px -5px rgba(0, 0, 0, 0.04);
115
+ }
116
+
117
+ .toc-line::before {
118
+ content: '';
119
+ position: absolute;
120
+ left: 0;
121
+ top: 0;
122
+ bottom: 0;
123
+ width: 2px;
124
+ background: #e2e8f0;
125
+ }
126
+
127
+ table {
128
+ border-collapse: collapse;
129
+ width: 100%;
130
+ }
131
+ th {
132
+ text-align: left;
133
+ }
134
+
135
+ .screenshot-placeholder {
136
+ border: 2px dashed #cbd5e1;
137
+ background: #f8fafc;
138
+ border-radius: 8px;
139
+ display: flex;
140
+ align-items: center;
141
+ justify-content: center;
142
+ min-height: 200px;
143
+ color: #94a3b8;
144
+ }
145
+
146
+ @media print {
147
+ .no-print {
148
+ display: none !important;
149
+ }
150
+ }
151
+ </style>
152
+ </head>
153
+ <body
154
+ class="bg-white text-surface-800 antialiased"
155
+ x-init="
156
+ const observer = new IntersectionObserver(entries => {
157
+ entries.forEach(entry => {
158
+ if (entry.isIntersecting) {
159
+ activeSection = entry.target.id;
160
+ }
161
+ });
162
+ }, { rootMargin: '-80px 0px -60% 0px', threshold: 0 });
163
+ document.querySelectorAll('section[id]').forEach(s => observer.observe(s));
164
+ "
165
+ >
166
+ <!-- Mobile sidebar toggle -->
167
+ <button
168
+ @click="sidebarOpen = !sidebarOpen"
169
+ class="no-print lg:hidden fixed top-4 left-4 z-50 p-2 bg-white rounded-lg shadow-lg border border-surface-200"
170
+ :class="{ 'left-[272px]': sidebarOpen }"
171
+ >
172
+ <svg x-show="!sidebarOpen" class="w-5 h-5" fill="none" stroke="currentColor" viewBox="0 0 24 24">
173
+ <path stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="M4 6h16M4 12h16M4 18h16" />
174
+ </svg>
175
+ <svg x-show="sidebarOpen" x-cloak class="w-5 h-5" fill="none" stroke="currentColor" viewBox="0 0 24 24">
176
+ <path stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="M6 18L18 6M6 6l12 12" />
177
+ </svg>
178
+ </button>
179
+
180
+ <!-- Sidebar -->
181
+ <aside
182
+ class="no-print fixed top-0 left-0 z-40 w-64 h-screen bg-white border-r border-surface-200 overflow-y-auto transition-transform duration-300"
183
+ :class="{ '-translate-x-full': !sidebarOpen, 'translate-x-0': sidebarOpen }"
184
+ x-init="if (window.innerWidth >= 1024) sidebarOpen = true"
185
+ @resize.window="sidebarOpen = window.innerWidth >= 1024"
186
+ >
187
+ <div class="p-5 border-b border-surface-200">
188
+ <a href="#hero">
189
+ <img
190
+ src="https://raw.gitcode.com/user-images/assets/9176732/f61a65f2-fd26-47f5-9c06-bd750d2dcc5d/cli-logo.png"
191
+ alt="OpenDesk CLI"
192
+ class="h-8"
193
+ />
194
+ </a>
195
+ <p class="text-xs text-surface-400 mt-1">使用手册 v0.2.0</p>
196
+ </div>
197
+
198
+ <nav class="p-4 text-sm space-y-1">
199
+ <p class="text-xs font-semibold text-surface-400 uppercase tracking-wider mb-2 px-3">快速开始</p>
200
+ <a
201
+ href="#overview"
202
+ class="sidebar-link block px-3 py-1.5 rounded-md text-surface-600 hover:bg-surface-50 transition-colors"
203
+ :class="{ 'active': activeSection === 'overview' }"
204
+ >简介</a
205
+ >
206
+ <a
207
+ href="#install"
208
+ class="sidebar-link block px-3 py-1.5 rounded-md text-surface-600 hover:bg-surface-50 transition-colors"
209
+ :class="{ 'active': activeSection === 'install' }"
210
+ >安装与启动</a
211
+ >
212
+
213
+ <p class="text-xs font-semibold text-surface-400 uppercase tracking-wider mt-5 mb-2 px-3">CLI 功能</p>
214
+ <a
215
+ href="#model-config"
216
+ class="sidebar-link block px-3 py-1.5 rounded-md text-surface-600 hover:bg-surface-50 transition-colors"
217
+ :class="{ 'active': activeSection === 'model-config' }"
218
+ >模型配置</a
219
+ >
220
+ <a
221
+ href="#slash-commands"
222
+ class="sidebar-link block px-3 py-1.5 rounded-md text-surface-600 hover:bg-surface-50 transition-colors"
223
+ :class="{ 'active': activeSection === 'slash-commands' }"
224
+ >斜杠命令</a
225
+ >
226
+ <a
227
+ href="#shortcuts"
228
+ class="sidebar-link block px-3 py-1.5 rounded-md text-surface-600 hover:bg-surface-50 transition-colors"
229
+ :class="{ 'active': activeSection === 'shortcuts' }"
230
+ >快捷键</a
231
+ >
232
+ <a
233
+ href="#context-compact"
234
+ class="sidebar-link block px-3 py-1.5 rounded-md text-surface-600 hover:bg-surface-50 transition-colors"
235
+ :class="{ 'active': activeSection === 'context-compact' }"
236
+ >上下文压缩</a
237
+ >
238
+ <a
239
+ href="#mcp-server"
240
+ class="sidebar-link block px-3 py-1.5 rounded-md text-surface-600 hover:bg-surface-50 transition-colors"
241
+ :class="{ 'active': activeSection === 'mcp-server' }"
242
+ >MCP Server</a
243
+ >
244
+ <a
245
+ href="#skill-install"
246
+ class="sidebar-link block px-3 py-1.5 rounded-md text-surface-600 hover:bg-surface-50 transition-colors"
247
+ :class="{ 'active': activeSection === 'skill-install' }"
248
+ >Skill 技能</a
249
+ >
250
+ <a
251
+ href="#mail-config"
252
+ class="sidebar-link block px-3 py-1.5 rounded-md text-surface-600 hover:bg-surface-50 transition-colors"
253
+ :class="{ 'active': activeSection === 'mail-config' }"
254
+ >邮箱配置</a
255
+ >
256
+ <a
257
+ href="#calendar-config"
258
+ class="sidebar-link block px-3 py-1.5 rounded-md text-surface-600 hover:bg-surface-50 transition-colors"
259
+ :class="{ 'active': activeSection === 'calendar-config' }"
260
+ >日历配置</a
261
+ >
262
+
263
+ <p class="text-xs font-semibold text-surface-400 uppercase tracking-wider mt-5 mb-2 px-3">桌面应用</p>
264
+ <a
265
+ href="#app-intro"
266
+ class="sidebar-link block px-3 py-1.5 rounded-md text-surface-600 hover:bg-surface-50 transition-colors"
267
+ :class="{ 'active': activeSection === 'app-intro' }"
268
+ >应用概览</a
269
+ >
270
+ </nav>
271
+ </aside>
272
+
273
+ <!-- Main content -->
274
+ <main class="lg:ml-64 min-h-screen">
275
+ <!-- Hero -->
276
+ <header id="hero" class="bg-surface-50 border-b border-surface-200">
277
+ <div class="max-w-4xl mx-auto px-6 py-16 sm:py-20">
278
+ <h1 class="text-4xl sm:text-5xl font-bold tracking-tight text-surface-900">使用手册</h1>
279
+ <p class="mt-4 text-lg text-surface-600 max-w-2xl leading-relaxed">
280
+ OpenDesk CLI 是运行在终端中的 AI 助手,面向办公和生产力场景,提供一站式 AI 服务。<br />
281
+ <span class="text-surface-500">用智能重新定义生产力,让工作更高效、生活更便捷。</span>
282
+ </p>
283
+ <div class="mt-8 flex flex-wrap gap-3">
284
+ <a
285
+ href="#install"
286
+ class="inline-flex items-center px-5 py-2.5 bg-brand-500 hover:bg-brand-600 text-white rounded-lg text-sm font-medium transition-colors"
287
+ >
288
+ 快速开始
289
+ <svg class="w-4 h-4 ml-1.5" fill="none" stroke="currentColor" viewBox="0 0 24 24">
290
+ <path
291
+ stroke-linecap="round"
292
+ stroke-linejoin="round"
293
+ stroke-width="2"
294
+ d="M13 7l5 5m0 0l-5 5m5-5H6"
295
+ />
296
+ </svg>
297
+ </a>
298
+ <a
299
+ href="https://gitcode.com/openharmony-robot/OpenDesk"
300
+ target="_blank"
301
+ class="inline-flex items-center px-5 py-2.5 bg-white border border-surface-300 hover:bg-surface-100 text-surface-700 rounded-lg text-sm font-medium transition-colors"
302
+ >
303
+ GitCode 仓库
304
+ <svg class="w-4 h-4 ml-1.5" fill="none" stroke="currentColor" viewBox="0 0 24 24">
305
+ <path
306
+ stroke-linecap="round"
307
+ stroke-linejoin="round"
308
+ stroke-width="2"
309
+ d="M10 6H6a2 2 0 00-2 2v10a2 2 0 002 2h10a2 2 0 002-2v-4M14 4h6m0 0v6m0-6L10 14"
310
+ />
311
+ </svg>
312
+ </a>
313
+ </div>
314
+ </div>
315
+ </header>
316
+
317
+ <div class="max-w-4xl mx-auto px-6 py-12 space-y-20">
318
+ <!-- ============================================================ -->
319
+ <!-- Overview -->
320
+ <!-- ============================================================ -->
321
+ <section id="overview">
322
+ <h2 class="text-3xl font-bold tracking-tight">简介</h2>
323
+ <div class="mt-2 h-1 w-12 bg-brand-500 rounded-full"></div>
324
+ <p class="mt-6 text-surface-600 leading-relaxed">
325
+ OpenDesk CLI 是 <strong>OpenDesk</strong>(一站式跨平台 AI
326
+ 办公套件)的命令行版本。它提供了基于终端的文本用户界面(TUI),让您可以在不启动桌面应用的情况下使用
327
+ OpenDesk 的全部核心功能:AI 对话、任务管理、文件操作、邮件收发、日程管理等。
328
+ </p>
329
+
330
+ <div class="mt-8 grid sm:grid-cols-2 gap-4">
331
+ <div class="card-hover p-5 rounded-xl border border-surface-200 bg-white">
332
+ <div
333
+ class="w-10 h-10 rounded-lg bg-brand-50 flex items-center justify-center text-brand-500 mb-3"
334
+ >
335
+ <svg class="w-5 h-5" fill="none" stroke="currentColor" viewBox="0 0 24 24">
336
+ <path
337
+ stroke-linecap="round"
338
+ stroke-linejoin="round"
339
+ stroke-width="2"
340
+ d="M8 9l3 3-3 3m5 0h3M5 20h14a2 2 0 002-2V6a2 2 0 00-2-2H5a2 2 0 00-2 2v12a2 2 0 002 2z"
341
+ />
342
+ </svg>
343
+ </div>
344
+ <h3 class="font-semibold text-sm">终端优先体验</h3>
345
+ <p class="text-xs text-surface-500 mt-1">
346
+ 基于差分渲染的 TUI 界面,超长任务仍保持顺畅的流式输出。
347
+ </p>
348
+ </div>
349
+ <div class="card-hover p-5 rounded-xl border border-surface-200 bg-white">
350
+ <div
351
+ class="w-10 h-10 rounded-lg bg-purple-50 flex items-center justify-center text-purple-500 mb-3"
352
+ >
353
+ <svg class="w-5 h-5" fill="none" stroke="currentColor" viewBox="0 0 24 24">
354
+ <path
355
+ stroke-linecap="round"
356
+ stroke-linejoin="round"
357
+ stroke-width="2"
358
+ d="M13 10V3L4 14h7v7l9-11h-7z"
359
+ />
360
+ </svg>
361
+ </div>
362
+ <h3 class="font-semibold text-sm">完善的 Agent 能力</h3>
363
+ <p class="text-xs text-surface-500 mt-1">
364
+ 标准 Agentic Loop、丰富内置工具、面向 Agent 的文件系统与混合搜索。
365
+ </p>
366
+ </div>
367
+ <div class="card-hover p-5 rounded-xl border border-surface-200 bg-white">
368
+ <div
369
+ class="w-10 h-10 rounded-lg bg-emerald-50 flex items-center justify-center text-emerald-500 mb-3"
370
+ >
371
+ <svg class="w-5 h-5" fill="none" stroke="currentColor" viewBox="0 0 24 24">
372
+ <path
373
+ stroke-linecap="round"
374
+ stroke-linejoin="round"
375
+ stroke-width="2"
376
+ d="M4 5a1 1 0 011-1h14a1 1 0 011 1v2a1 1 0 01-1 1H5a1 1 0 01-1-1V5zM4 13a1 1 0 011-1h6a1 1 0 011 1v6a1 1 0 01-1 1H5a1 1 0 01-1-1v-6zM16 13a1 1 0 011-1h2a1 1 0 011 1v6a1 1 0 01-1 1h-2a1 1 0 01-1-1v-6z"
377
+ />
378
+ </svg>
379
+ </div>
380
+ <h3 class="font-semibold text-sm">丰富的生态集成</h3>
381
+ <p class="text-xs text-surface-500 mt-1">
382
+ 主流大模型、搜索 API、MCP Server、技能(Skills)一键接入。
383
+ </p>
384
+ </div>
385
+ <div class="card-hover p-5 rounded-xl border border-surface-200 bg-white">
386
+ <div
387
+ class="w-10 h-10 rounded-lg bg-amber-50 flex items-center justify-center text-amber-500 mb-3"
388
+ >
389
+ <svg class="w-5 h-5" fill="none" stroke="currentColor" viewBox="0 0 24 24">
390
+ <path
391
+ stroke-linecap="round"
392
+ stroke-linejoin="round"
393
+ stroke-width="2"
394
+ d="M8 12h.01M12 12h.01M16 12h.01M21 12c0 4.418-4.03 8-9 8a9.863 9.863 0 01-4.255-.949L3 20l1.395-3.72C3.512 15.042 3 13.574 3 12c0-4.418 4.03-8 9-8s9 3.582 9 8z"
395
+ />
396
+ </svg>
397
+ </div>
398
+ <h3 class="font-semibold text-sm">对话式配置</h3>
399
+ <p class="text-xs text-surface-500 mt-1">
400
+ 不知道怎么用?直接问 AI 助手,一切都在自由的对话中完成。
401
+ </p>
402
+ </div>
403
+ </div>
404
+ </section>
405
+
406
+ <!-- ============================================================ -->
407
+ <!-- Install -->
408
+ <!-- ============================================================ -->
409
+ <section id="install">
410
+ <h2 class="text-3xl font-bold tracking-tight">安装与启动</h2>
411
+ <div class="mt-2 h-1 w-12 bg-brand-500 rounded-full"></div>
412
+
413
+ <h3 class="mt-8 text-lg font-semibold">通过 npm 安装</h3>
414
+ <p class="mt-2 text-surface-600 text-sm">运行以下命令安装最新稳定版本:</p>
415
+ <pre
416
+ class="mt-3 bg-surface-900 text-surface-100 p-4 rounded-lg"
417
+ ><code>$ npm install -g @bitclub.ai/opendesk-cli
418
+ $ opendesk</code></pre>
419
+
420
+ <p class="mt-4 text-surface-600 text-sm">或安装 Nightly(每日构建)版本以体验最新功能:</p>
421
+ <pre
422
+ class="mt-3 bg-surface-900 text-surface-100 p-4 rounded-lg"
423
+ ><code>$ npm install -g @bitclub.ai/opendesk-cli@nightly
424
+ $ opendesk</code></pre>
425
+
426
+ <div class="mt-4 p-4 bg-amber-50 border border-amber-200 rounded-lg text-sm text-amber-800">
427
+ <strong>提示:</strong>Nightly 版本能持续获取最新功能,但由于未经充分测试,可能存在稳定性问题。
428
+ </div>
429
+
430
+ <h3 class="mt-8 text-lg font-semibold">命令行参数</h3>
431
+ <pre
432
+ class="mt-3 bg-surface-900 text-surface-100 p-4 rounded-lg"
433
+ ><code>opendesk [workspace] [选项]</code></pre>
434
+
435
+ <div class="mt-4 overflow-x-auto">
436
+ <table class="text-sm">
437
+ <thead>
438
+ <tr class="border-b-2 border-surface-200">
439
+ <th class="py-2 pr-4 font-semibold">参数</th>
440
+ <th class="py-2 pr-4 font-semibold">说明</th>
441
+ <th class="py-2 font-semibold">默认值</th>
442
+ </tr>
443
+ </thead>
444
+ <tbody class="text-surface-600">
445
+ <tr class="border-b border-surface-100">
446
+ <td class="py-2 pr-4"><code>workspace</code></td>
447
+ <td class="py-2 pr-4">工作区目录路径</td>
448
+ <td class="py-2">当前目录 <code>.</code></td>
449
+ </tr>
450
+ <tr class="border-b border-surface-100">
451
+ <td class="py-2 pr-4"><code>--model &lt;alias&gt;</code></td>
452
+ <td class="py-2 pr-4">指定要使用的模型别名</td>
453
+ <td class="py-2">配置的默认模型</td>
454
+ </tr>
455
+ <tr class="border-b border-surface-100">
456
+ <td class="py-2 pr-4"><code>-c, --command &lt;cmd&gt;</code></td>
457
+ <td class="py-2 pr-4">一次性执行命令后退出(非交互模式)</td>
458
+ <td class="py-2">无</td>
459
+ </tr>
460
+ <tr class="border-b border-surface-100">
461
+ <td class="py-2 pr-4"><code>-v, --version</code></td>
462
+ <td class="py-2 pr-4">显示版本信息</td>
463
+ <td class="py-2">无</td>
464
+ </tr>
465
+ </tbody>
466
+ </table>
467
+ </div>
468
+
469
+ <h3 class="mt-8 text-lg font-semibold">使用示例</h3>
470
+ <pre
471
+ class="mt-3 bg-surface-900 text-surface-100 p-4 rounded-lg"
472
+ ><code><span class="text-surface-400"># 在当前目录启动</span>
473
+ $ opendesk
474
+
475
+ <span class="text-surface-400"># 在指定目录启动</span>
476
+ $ opendesk /path/to/workspace
477
+
478
+ <span class="text-surface-400"># 使用特定模型启动</span>
479
+ $ opendesk --model gpt-4
480
+
481
+ <span class="text-surface-400"># 一次性执行命令</span>
482
+ $ opendesk -c "分析当前目录的代码结构"</code></pre>
483
+
484
+ <!-- Screenshot placeholder: CLI startup screen -->
485
+ <div class="mt-6 screenshot-placeholder p-6 text-center">
486
+ <div>
487
+ <svg
488
+ class="w-10 h-10 mx-auto mb-2 text-surface-300"
489
+ fill="none"
490
+ stroke="currentColor"
491
+ viewBox="0 0 24 24"
492
+ >
493
+ <path
494
+ stroke-linecap="round"
495
+ stroke-linejoin="round"
496
+ stroke-width="1.5"
497
+ d="M4 16l4.586-4.586a2 2 0 012.828 0L16 16m-2-2l1.586-1.586a2 2 0 012.828 0L20 14m-6-6h.01M6 20h12a2 2 0 002-2V6a2 2 0 00-2-2H6a2 2 0 00-2 2v12a2 2 0 002 2z"
498
+ />
499
+ </svg>
500
+ <p class="text-sm font-medium text-surface-400">[截图] CLI 启动界面</p>
501
+ <p class="text-xs text-surface-300 mt-1">展示 OpenDesk CLI 的完整 TUI 界面布局</p>
502
+ </div>
503
+ </div>
504
+ </section>
505
+
506
+ <!-- ============================================================ -->
507
+ <!-- Model Configuration -->
508
+ <!-- ============================================================ -->
509
+ <section id="model-config">
510
+ <h2 class="text-3xl font-bold tracking-tight">模型配置</h2>
511
+ <div class="mt-2 h-1 w-12 bg-brand-500 rounded-full"></div>
512
+
513
+ <p class="mt-6 text-surface-600 leading-relaxed">
514
+ OpenDesk 通过集中式配置管理 AI
515
+ 模型。您需要先配置<strong>模型服务商</strong>(Provider),再添加<strong>模型</strong>(Model),最后设置<strong>默认模型</strong>。
516
+ </p>
517
+
518
+ <h3 class="mt-8 text-lg font-semibold">首次配置流程</h3>
519
+ <ol class="mt-4 space-y-3 text-sm text-surface-600">
520
+ <li class="flex gap-3">
521
+ <span
522
+ class="flex-shrink-0 w-6 h-6 bg-brand-500 text-white rounded-full flex items-center justify-center text-xs font-bold"
523
+ >1</span
524
+ >
525
+ <span>输入 <code>/config</code> 打开配置菜单</span>
526
+ </li>
527
+ <li class="flex gap-3">
528
+ <span
529
+ class="flex-shrink-0 w-6 h-6 bg-brand-500 text-white rounded-full flex items-center justify-center text-xs font-bold"
530
+ >2</span
531
+ >
532
+ <span
533
+ >选择 <strong>"模型服务商配置"</strong>,添加一个模型服务商(如 OpenRouter、OpenAI
534
+ 等)</span
535
+ >
536
+ </li>
537
+ <li class="flex gap-3">
538
+ <span
539
+ class="flex-shrink-0 w-6 h-6 bg-brand-500 text-white rounded-full flex items-center justify-center text-xs font-bold"
540
+ >3</span
541
+ >
542
+ <span>选择 <strong>"模型配置"</strong>,添加一个具体的模型</span>
543
+ </li>
544
+ <li class="flex gap-3">
545
+ <span
546
+ class="flex-shrink-0 w-6 h-6 bg-brand-500 text-white rounded-full flex items-center justify-center text-xs font-bold"
547
+ >4</span
548
+ >
549
+ <span>选择 <strong>"默认模型配置"</strong>,选择您要使用的默认模型</span>
550
+ </li>
551
+ </ol>
552
+
553
+ <!-- Screenshot placeholder: Config menu -->
554
+ <div class="mt-6 screenshot-placeholder p-6 text-center">
555
+ <div>
556
+ <svg
557
+ class="w-10 h-10 mx-auto mb-2 text-surface-300"
558
+ fill="none"
559
+ stroke="currentColor"
560
+ viewBox="0 0 24 24"
561
+ >
562
+ <path
563
+ stroke-linecap="round"
564
+ stroke-linejoin="round"
565
+ stroke-width="1.5"
566
+ d="M4 16l4.586-4.586a2 2 0 012.828 0L16 16m-2-2l1.586-1.586a2 2 0 012.828 0L20 14m-6-6h.01M6 20h12a2 2 0 002-2V6a2 2 0 00-2-2H6a2 2 0 00-2 2v12a2 2 0 002 2z"
567
+ />
568
+ </svg>
569
+ <p class="text-sm font-medium text-surface-400">[截图] /config 配置菜单界面</p>
570
+ <p class="text-xs text-surface-300 mt-1">展示模型服务商配置、模型配置、默认模型配置选项</p>
571
+ </div>
572
+ </div>
573
+
574
+ <h3 class="mt-8 text-lg font-semibold">服务商配置</h3>
575
+ <p class="mt-2 text-surface-600 text-sm">每个服务商需要配置以下信息:</p>
576
+ <div class="mt-4 overflow-x-auto">
577
+ <table class="text-sm">
578
+ <thead>
579
+ <tr class="border-b-2 border-surface-200">
580
+ <th class="py-2 pr-4 font-semibold">字段</th>
581
+ <th class="py-2 pr-4 font-semibold">说明</th>
582
+ <th class="py-2 font-semibold">示例</th>
583
+ </tr>
584
+ </thead>
585
+ <tbody class="text-surface-600">
586
+ <tr class="border-b border-surface-100">
587
+ <td class="py-2 pr-4"><code>name</code></td>
588
+ <td class="py-2 pr-4">服务商名称</td>
589
+ <td class="py-2"><code>openrouter</code></td>
590
+ </tr>
591
+ <tr class="border-b border-surface-100">
592
+ <td class="py-2 pr-4"><code>base_url</code></td>
593
+ <td class="py-2 pr-4">API 基础地址</td>
594
+ <td class="py-2"><code>https://openrouter.ai/api/v1</code></td>
595
+ </tr>
596
+ <tr class="border-b border-surface-100">
597
+ <td class="py-2 pr-4"><code>api_key</code></td>
598
+ <td class="py-2 pr-4">API 密钥</td>
599
+ <td class="py-2"><code>sk-xxx...</code></td>
600
+ </tr>
601
+ <tr class="border-b border-surface-100">
602
+ <td class="py-2 pr-4"><code>no_proxy</code></td>
603
+ <td class="py-2 pr-4">是否禁用代理</td>
604
+ <td class="py-2"><code>false</code></td>
605
+ </tr>
606
+ </tbody>
607
+ </table>
608
+ </div>
609
+
610
+ <h3 class="mt-8 text-lg font-semibold">模型配置</h3>
611
+ <p class="mt-2 text-surface-600 text-sm">每个模型需要配置以下信息:</p>
612
+ <div class="mt-4 overflow-x-auto">
613
+ <table class="text-sm">
614
+ <thead>
615
+ <tr class="border-b-2 border-surface-200">
616
+ <th class="py-2 pr-4 font-semibold">字段</th>
617
+ <th class="py-2 pr-4 font-semibold">说明</th>
618
+ <th class="py-2 font-semibold">示例</th>
619
+ </tr>
620
+ </thead>
621
+ <tbody class="text-surface-600">
622
+ <tr class="border-b border-surface-100">
623
+ <td class="py-2 pr-4"><code>alias</code></td>
624
+ <td class="py-2 pr-4">本地使用的模型别名</td>
625
+ <td class="py-2"><code>gemini-2.5-flash</code></td>
626
+ </tr>
627
+ <tr class="border-b border-surface-100">
628
+ <td class="py-2 pr-4"><code>provider_name</code></td>
629
+ <td class="py-2 pr-4">关联的服务商名称</td>
630
+ <td class="py-2"><code>openrouter</code></td>
631
+ </tr>
632
+ <tr class="border-b border-surface-100">
633
+ <td class="py-2 pr-4"><code>model_name</code></td>
634
+ <td class="py-2 pr-4">服务商侧的模型 ID</td>
635
+ <td class="py-2"><code>google/gemini-2.5-flash</code></td>
636
+ </tr>
637
+ </tbody>
638
+ </table>
639
+ </div>
640
+
641
+ <h3 class="mt-8 text-lg font-semibold">默认模型类型</h3>
642
+ <p class="mt-2 text-surface-600 text-sm">OpenDesk 支持为不同场景配置独立的默认模型:</p>
643
+ <div class="mt-4 overflow-x-auto">
644
+ <table class="text-sm">
645
+ <thead>
646
+ <tr class="border-b-2 border-surface-200">
647
+ <th class="py-2 pr-4 font-semibold">模型类型</th>
648
+ <th class="py-2 font-semibold">用途</th>
649
+ </tr>
650
+ </thead>
651
+ <tbody class="text-surface-600">
652
+ <tr class="border-b border-surface-100">
653
+ <td class="py-2 pr-4"><code>default_model</code></td>
654
+ <td class="py-2">对话、任务等主要场景中使用的默认模型</td>
655
+ </tr>
656
+ <tr class="border-b border-surface-100">
657
+ <td class="py-2 pr-4"><code>default_intent_parsing_model</code></td>
658
+ <td class="py-2">意图解析使用的多模态模型</td>
659
+ </tr>
660
+ <tr class="border-b border-surface-100">
661
+ <td class="py-2 pr-4"><code>default_embedding_model</code></td>
662
+ <td class="py-2">知识库检索使用的向量嵌入模型</td>
663
+ </tr>
664
+ <tr class="border-b border-surface-100">
665
+ <td class="py-2 pr-4"><code>default_reranker_model</code></td>
666
+ <td class="py-2">检索结果重排序使用的模型</td>
667
+ </tr>
668
+ <tr class="border-b border-surface-100">
669
+ <td class="py-2 pr-4"><code>default_vision_model</code></td>
670
+ <td class="py-2">图片分析使用的多模态模型</td>
671
+ </tr>
672
+ </tbody>
673
+ </table>
674
+ </div>
675
+
676
+ <h3 class="mt-8 text-lg font-semibold">配置文件位置</h3>
677
+ <p class="mt-2 text-surface-600 text-sm">配置以 JSON 格式存储在用户数据目录中:</p>
678
+ <div class="mt-4 overflow-x-auto">
679
+ <table class="text-sm">
680
+ <thead>
681
+ <tr class="border-b-2 border-surface-200">
682
+ <th class="py-2 pr-4 font-semibold">操作系统</th>
683
+ <th class="py-2 font-semibold">路径</th>
684
+ </tr>
685
+ </thead>
686
+ <tbody class="text-surface-600">
687
+ <tr class="border-b border-surface-100">
688
+ <td class="py-2 pr-4">Windows</td>
689
+ <td class="py-2"><code>%APPDATA%/opendesk/setting.json</code></td>
690
+ </tr>
691
+ <tr class="border-b border-surface-100">
692
+ <td class="py-2 pr-4">Linux / macOS</td>
693
+ <td class="py-2"><code>~/.opendesk/setting.json</code></td>
694
+ </tr>
695
+ </tbody>
696
+ </table>
697
+ </div>
698
+
699
+ <h3 class="mt-8 text-lg font-semibold">配置文件示例</h3>
700
+ <pre class="mt-3 bg-surface-900 text-surface-100 p-4 rounded-lg text-xs"><code>{
701
+ "default_model": "gemini-2.5-flash",
702
+ "default_intent_parsing_model": "gemini-2.0-flash",
703
+ "default_embedding_model": "text-embedding-3-small",
704
+ "default_reranker_model": "rerank-english-v3.0",
705
+ "default_vision_model": "gemini-2.0-flash",
706
+ "providers": [
707
+ {
708
+ "name": "openrouter",
709
+ "base_url": "https://openrouter.ai/api/v1",
710
+ "api_key": "sk-xxx...",
711
+ "no_proxy": false
712
+ }
713
+ ],
714
+ "models": [
715
+ {
716
+ "alias": "gemini-2.5-flash",
717
+ "provider_name": "openrouter",
718
+ "model_name": "google/gemini-2.5-flash"
719
+ }
720
+ ]
721
+ }</code></pre>
722
+ </section>
723
+
724
+ <!-- ============================================================ -->
725
+ <!-- Slash Commands -->
726
+ <!-- ============================================================ -->
727
+ <section id="slash-commands">
728
+ <h2 class="text-3xl font-bold tracking-tight">斜杠命令</h2>
729
+ <div class="mt-2 h-1 w-12 bg-brand-500 rounded-full"></div>
730
+
731
+ <p class="mt-6 text-surface-600 leading-relaxed">
732
+ 在输入框中输入 <code>/</code> 即可查看可用命令列表并触发自动补全。所有命令均以
733
+ <code>/</code> 开头。
734
+ </p>
735
+
736
+ <h3 class="mt-8 text-lg font-semibold">全局命令</h3>
737
+ <div class="mt-4 overflow-x-auto">
738
+ <table class="text-sm">
739
+ <thead>
740
+ <tr class="border-b-2 border-surface-200">
741
+ <th class="py-2 pr-4 font-semibold">命令</th>
742
+ <th class="py-2 pr-4 font-semibold">说明</th>
743
+ <th class="py-2 pr-4 font-semibold">用法</th>
744
+ <th class="py-2 font-semibold">快捷键</th>
745
+ </tr>
746
+ </thead>
747
+ <tbody class="text-surface-600">
748
+ <tr class="border-b border-surface-100">
749
+ <td class="py-2 pr-4 font-mono text-brand-600"><code>/new</code></td>
750
+ <td class="py-2 pr-4">启动新任务并发送消息</td>
751
+ <td class="py-2 pr-4"><code>/new [消息]</code></td>
752
+ <td class="py-2">
753
+ <kbd
754
+ class="px-1.5 py-0.5 bg-surface-100 border border-surface-200 rounded text-xs"
755
+ >Ctrl+N</kbd
756
+ >
757
+ </td>
758
+ </tr>
759
+ <tr class="border-b border-surface-100">
760
+ <td class="py-2 pr-4 font-mono text-brand-600"><code>/switch</code></td>
761
+ <td class="py-2 pr-4">切换到其他任务</td>
762
+ <td class="py-2 pr-4"><code>/switch</code></td>
763
+ <td class="py-2">
764
+ <kbd
765
+ class="px-1.5 py-0.5 bg-surface-100 border border-surface-200 rounded text-xs"
766
+ >Ctrl+L</kbd
767
+ >
768
+ </td>
769
+ </tr>
770
+ <tr class="border-b border-surface-100">
771
+ <td class="py-2 pr-4 font-mono text-brand-600"><code>/help</code></td>
772
+ <td class="py-2 pr-4">显示快捷键与指令帮助</td>
773
+ <td class="py-2 pr-4"><code>/help</code></td>
774
+ <td class="py-2"></td>
775
+ </tr>
776
+ <tr class="border-b border-surface-100">
777
+ <td class="py-2 pr-4 font-mono text-brand-600"><code>/config</code></td>
778
+ <td class="py-2 pr-4">打开系统设置</td>
779
+ <td class="py-2 pr-4"><code>/config</code></td>
780
+ <td class="py-2"></td>
781
+ </tr>
782
+ <tr class="border-b border-surface-100">
783
+ <td class="py-2 pr-4 font-mono text-brand-600"><code>/export</code></td>
784
+ <td class="py-2 pr-4">导出当前会话为 HTML 文件</td>
785
+ <td class="py-2 pr-4"><code>/export [文件名]</code></td>
786
+ <td class="py-2"></td>
787
+ </tr>
788
+ <tr class="border-b border-surface-100">
789
+ <td class="py-2 pr-4 font-mono text-brand-600"><code>/dashboard</code></td>
790
+ <td class="py-2 pr-4">查看系统仪表盘</td>
791
+ <td class="py-2 pr-4"><code>/dashboard</code></td>
792
+ <td class="py-2"></td>
793
+ </tr>
794
+ <tr class="border-b border-surface-100">
795
+ <td class="py-2 pr-4 font-mono text-brand-600"><code>/compact</code></td>
796
+ <td class="py-2 pr-4">手动压缩当前任务的上下文</td>
797
+ <td class="py-2 pr-4"><code>/compact</code></td>
798
+ <td class="py-2"></td>
799
+ </tr>
800
+ <tr class="border-b border-surface-100">
801
+ <td class="py-2 pr-4 font-mono text-brand-600"><code>/fork</code></td>
802
+ <td class="py-2 pr-4">复制当前会话并切换到新会话</td>
803
+ <td class="py-2 pr-4"><code>/fork</code></td>
804
+ <td class="py-2"></td>
805
+ </tr>
806
+ <tr class="border-b border-surface-100">
807
+ <td class="py-2 pr-4 font-mono text-brand-600"><code>/rename</code></td>
808
+ <td class="py-2 pr-4">重命名当前任务</td>
809
+ <td class="py-2 pr-4"><code>/rename &lt;新名称&gt;</code></td>
810
+ <td class="py-2"></td>
811
+ </tr>
812
+ <tr class="border-b border-surface-100">
813
+ <td class="py-2 pr-4 font-mono text-brand-600"><code>/bookmark</code></td>
814
+ <td class="py-2 pr-4">管理任务书签</td>
815
+ <td class="py-2 pr-4"><code>/bookmark add|list|remove</code></td>
816
+ <td class="py-2"></td>
817
+ </tr>
818
+ <tr class="border-b border-surface-100">
819
+ <td class="py-2 pr-4 font-mono text-brand-600"><code>/log</code></td>
820
+ <td class="py-2 pr-4">显示日志面板</td>
821
+ <td class="py-2 pr-4"><code>/log [off|last|all]</code></td>
822
+ <td class="py-2"></td>
823
+ </tr>
824
+ <tr class="border-b border-surface-100">
825
+ <td class="py-2 pr-4 font-mono text-brand-600"><code>/debug</code></td>
826
+ <td class="py-2 pr-4">调试命令</td>
827
+ <td class="py-2 pr-4">
828
+ <code>/debug log [on|off]</code> 或 <code>/debug taskid</code>
829
+ </td>
830
+ <td class="py-2"></td>
831
+ </tr>
832
+ <tr class="border-b border-surface-100">
833
+ <td class="py-2 pr-4 font-mono text-brand-600"><code>/stop</code></td>
834
+ <td class="py-2 pr-4">停止当前正在执行的任务</td>
835
+ <td class="py-2 pr-4"><code>/stop</code></td>
836
+ <td class="py-2"></td>
837
+ </tr>
838
+ <tr class="border-b border-surface-100">
839
+ <td class="py-2 pr-4 font-mono text-brand-600"><code>/cancel</code></td>
840
+ <td class="py-2 pr-4">撤销消息队列中的待发送消息</td>
841
+ <td class="py-2 pr-4"><code>/cancel</code></td>
842
+ <td class="py-2"></td>
843
+ </tr>
844
+ <tr class="border-b border-surface-100">
845
+ <td class="py-2 pr-4 font-mono text-brand-600"><code>/clear</code></td>
846
+ <td class="py-2 pr-4">删除所有任务历史</td>
847
+ <td class="py-2 pr-4"><code>/clear</code></td>
848
+ <td class="py-2"></td>
849
+ </tr>
850
+ <tr class="border-b border-surface-100">
851
+ <td class="py-2 pr-4 font-mono text-brand-600"><code>/upgrade</code></td>
852
+ <td class="py-2 pr-4">升级 CLI 到最新版本</td>
853
+ <td class="py-2 pr-4"><code>/upgrade</code></td>
854
+ <td class="py-2"></td>
855
+ </tr>
856
+ <tr class="border-b border-surface-100">
857
+ <td class="py-2 pr-4 font-mono text-brand-600"><code>/exit</code></td>
858
+ <td class="py-2 pr-4">退出 OpenDesk</td>
859
+ <td class="py-2 pr-4"><code>/exit</code></td>
860
+ <td class="py-2"></td>
861
+ </tr>
862
+ <tr class="border-b border-surface-100">
863
+ <td class="py-2 pr-4 font-mono text-brand-600"><code>/quit</code></td>
864
+ <td class="py-2 pr-4">退出 OpenDesk(与 /exit 相同)</td>
865
+ <td class="py-2 pr-4"><code>/quit</code></td>
866
+ <td class="py-2"></td>
867
+ </tr>
868
+ <tr class="border-b border-surface-100">
869
+ <td class="py-2 pr-4 font-mono text-brand-600"><code>/manual</code></td>
870
+ <td class="py-2 pr-4">打开使用手册</td>
871
+ <td class="py-2 pr-4"><code>/manual</code></td>
872
+ <td class="py-2"></td>
873
+ </tr>
874
+ <tr class="border-b border-surface-100">
875
+ <td class="py-2 pr-4 font-mono text-brand-600"><code>/memory</code></td>
876
+ <td class="py-2 pr-4">记忆管理(添加、搜索、删除、列表)</td>
877
+ <td class="py-2 pr-4"><code>/memory add|search|forget|list</code></td>
878
+ <td class="py-2"></td>
879
+ </tr>
880
+ <tr class="border-b border-surface-100">
881
+ <td class="py-2 pr-4 font-mono text-brand-600"><code>/quickpass</code></td>
882
+ <td class="py-2 pr-4">导出快捷口令(设置分享)</td>
883
+ <td class="py-2 pr-4"><code>/quickpass config base|all</code></td>
884
+ <td class="py-2"></td>
885
+ </tr>
886
+ </tbody>
887
+ </table>
888
+ </div>
889
+
890
+ <h3 class="mt-8 text-lg font-semibold">应用命令</h3>
891
+ <p class="mt-2 text-surface-600 text-sm">以下命令来自内置应用,用于打开对应的应用界面:</p>
892
+ <div class="mt-4 overflow-x-auto">
893
+ <table class="text-sm">
894
+ <thead>
895
+ <tr class="border-b-2 border-surface-200">
896
+ <th class="py-2 pr-4 font-semibold">命令</th>
897
+ <th class="py-2 pr-4 font-semibold">说明</th>
898
+ <th class="py-2 font-semibold">来源应用</th>
899
+ </tr>
900
+ </thead>
901
+ <tbody class="text-surface-600">
902
+ <tr class="border-b border-surface-100">
903
+ <td class="py-2 pr-4 font-mono text-brand-600"><code>/mail</code></td>
904
+ <td class="py-2 pr-4">打开邮箱</td>
905
+ <td class="py-2">邮箱 (Mailbox)</td>
906
+ </tr>
907
+ <tr class="border-b border-surface-100">
908
+ <td class="py-2 pr-4 font-mono text-brand-600"><code>/calendar</code></td>
909
+ <td class="py-2 pr-4">打开日历</td>
910
+ <td class="py-2">日历 (Calendar)</td>
911
+ </tr>
912
+ <tr class="border-b border-surface-100">
913
+ <td class="py-2 pr-4 font-mono text-brand-600"><code>/skills</code></td>
914
+ <td class="py-2 pr-4">打开技能管理界面</td>
915
+ <td class="py-2">技能管理器 (SkillMgr)</td>
916
+ </tr>
917
+ </tbody>
918
+ </table>
919
+ </div>
920
+
921
+ <h3 class="mt-8 text-lg font-semibold">命令详细说明</h3>
922
+ <div class="mt-4 space-y-6">
923
+ <div class="p-4 bg-surface-50 rounded-lg border border-surface-100">
924
+ <h4 class="font-semibold text-sm"><code>/new</code> — 新建任务</h4>
925
+ <p class="text-xs text-surface-500 mt-1">创建一个新的任务会话,可选地立即发送一条消息。</p>
926
+ <pre class="mt-2 bg-surface-900 text-surface-100 p-3 rounded-md text-xs"><code>/new
927
+ /new 分析这个项目的代码结构</code></pre>
928
+ </div>
929
+
930
+ <div class="p-4 bg-surface-50 rounded-lg border border-surface-100">
931
+ <h4 class="font-semibold text-sm"><code>/export</code> — 导出会话</h4>
932
+ <p class="text-xs text-surface-500 mt-1">
933
+ 将当前会话导出为 HTML 文件。可自定义文件名,不指定则自动生成带时间戳的文件名。
934
+ </p>
935
+ <pre
936
+ class="mt-2 bg-surface-900 text-surface-100 p-3 rounded-md text-xs"
937
+ ><code>/export my-session.html
938
+ /export</code></pre>
939
+ </div>
940
+
941
+ <div class="p-4 bg-surface-50 rounded-lg border border-surface-100">
942
+ <h4 class="font-semibold text-sm"><code>/bookmark</code> — 任务书签</h4>
943
+ <p class="text-xs text-surface-500 mt-1">
944
+ 管理重要任务的书签,方便快速跳转。支持 Tab 自动补全参数。
945
+ </p>
946
+ <pre
947
+ class="mt-2 bg-surface-900 text-surface-100 p-3 rounded-md text-xs"
948
+ ><code>/bookmark add <span class="text-surface-500"># 将当前任务添加到书签</span>
949
+ /bookmark list <span class="text-surface-500"># 查看所有书签</span>
950
+ /bookmark remove <span class="text-surface-500"># 从书签中移除当前任务</span></code></pre>
951
+ </div>
952
+
953
+ <div class="p-4 bg-surface-50 rounded-lg border border-surface-100">
954
+ <h4 class="font-semibold text-sm"><code>/log</code> — 日志控制</h4>
955
+ <p class="text-xs text-surface-500 mt-1">控制日志面板的显示。支持 Tab 自动补全参数。</p>
956
+ <pre
957
+ class="mt-2 bg-surface-900 text-surface-100 p-3 rounded-md text-xs"
958
+ ><code>/log all <span class="text-surface-500"># 显示所有日志</span>
959
+ /log last <span class="text-surface-500"># 显示最后 10 条日志</span>
960
+ /log off <span class="text-surface-500"># 关闭日志显示</span></code></pre>
961
+ </div>
962
+
963
+ <div class="p-4 bg-surface-50 rounded-lg border border-surface-100">
964
+ <h4 class="font-semibold text-sm"><code>/debug</code> — 调试命令</h4>
965
+ <p class="text-xs text-surface-500 mt-1">
966
+ 调试相关命令,包含日志开关和任务ID显示功能。支持 Tab 自动补全参数。
967
+ </p>
968
+ <pre
969
+ class="mt-2 bg-surface-900 text-surface-100 p-3 rounded-md text-xs"
970
+ ><code>/debug log on <span class="text-surface-500"># 开启调试日志</span>
971
+ /debug log off <span class="text-surface-500"># 关闭调试日志</span>
972
+ /debug log <span class="text-surface-500"># 查看当前调试日志状态</span>
973
+ /debug taskid <span class="text-surface-500"># 显示当前任务ID</span></code></pre>
974
+ </div>
975
+
976
+ <div class="p-4 bg-surface-50 rounded-lg border border-surface-100">
977
+ <h4 class="font-semibold text-sm"><code>/memory</code> — 记忆管理</h4>
978
+ <p class="text-xs text-surface-500 mt-1">
979
+ 管理 AI 的长期记忆。支持全局记忆与工作区记忆两种范围,可由 AI
980
+ 自动调用或通过斜杠命令手动操作。记忆操作基于大模型进行语义去重、合并与智能搜索。同一时刻只允许一个记忆操作执行。
981
+ </p>
982
+ <pre
983
+ class="mt-2 bg-surface-900 text-surface-100 p-3 rounded-md text-xs"
984
+ ><code>/memory add <span class="text-surface-500"># 从当前对话中提取并保存有价值的记忆(后台执行)</span>
985
+ /memory search 关键词 <span class="text-surface-500"># 语义搜索相关记忆并注入对话上下文</span>
986
+ /memory forget 描述 <span class="text-surface-500"># 根据描述智能删除匹配的记忆</span>
987
+ /memory list <span class="text-surface-500"># 打开记忆浏览面板,查看/筛选所有记忆</span></code></pre>
988
+ <div class="mt-3 text-xs text-surface-500">
989
+ <p><strong>记忆类型:</strong>用户偏好、重要事实、关键决策、有用上下文</p>
990
+ <p><strong>存储范围:</strong>全局记忆(跨项目共享)、工作区记忆(仅限当前项目)</p>
991
+ <p class="mt-1">
992
+ AI 在对话中也会自动使用 <code>addMemory</code> 和
993
+ <code>searchMemory</code> 工具来管理记忆。
994
+ </p>
995
+ </div>
996
+ </div>
997
+
998
+ <div class="p-4 bg-surface-50 rounded-lg border border-surface-100">
999
+ <h4 class="font-semibold text-sm"><code>/quickpass</code> — 快捷口令</h4>
1000
+ <p class="text-xs text-surface-500 mt-1">
1001
+ 将当前设置导出为口令字符串,方便通过微信、邮件等渠道分享给其他 OpenDesk
1002
+ 用户。口令内置完整性校验,确保传输过程中数据不被意外修改。
1003
+ </p>
1004
+ <pre
1005
+ class="mt-2 bg-surface-900 text-surface-100 p-3 rounded-md text-xs"
1006
+ ><code>/quickpass config base <span class="text-surface-500"># 导出基础设置口令(不含应用配置)</span>
1007
+ /quickpass config all <span class="text-surface-500"># 导出全部设置口令(含应用配置)</span></code></pre>
1008
+ <div class="mt-3 text-xs text-surface-500">
1009
+ <p><strong>导出:</strong>执行命令后,口令会在全宽弹窗中显示,方便复制。</p>
1010
+ <p>
1011
+ <strong>导入:</strong>在 TUI 聊天输入框中粘贴完整口令并按回车,系统自动识别并导入。
1012
+ </p>
1013
+ <p>
1014
+ <strong>口令格式:</strong><code>[[Opendesk 名称 -- &lt;base64+校验和&gt;]]</code>
1015
+ </p>
1016
+ </div>
1017
+ </div>
1018
+ </div>
1019
+ </section>
1020
+
1021
+ <!-- ============================================================ -->
1022
+ <!-- Shortcuts -->
1023
+ <!-- ============================================================ -->
1024
+ <section id="shortcuts">
1025
+ <h2 class="text-3xl font-bold tracking-tight">快捷键</h2>
1026
+ <div class="mt-2 h-1 w-12 bg-brand-500 rounded-full"></div>
1027
+
1028
+ <div class="mt-6 overflow-x-auto">
1029
+ <table class="text-sm">
1030
+ <thead>
1031
+ <tr class="border-b-2 border-surface-200">
1032
+ <th class="py-2 pr-4 font-semibold">快捷键</th>
1033
+ <th class="py-2 font-semibold">功能</th>
1034
+ </tr>
1035
+ </thead>
1036
+ <tbody class="text-surface-600">
1037
+ <tr class="border-b border-surface-100">
1038
+ <td class="py-2.5 pr-4">
1039
+ <kbd
1040
+ class="px-2 py-1 bg-surface-100 border border-surface-200 rounded text-xs font-mono"
1041
+ >Ctrl + N</kbd
1042
+ >
1043
+ </td>
1044
+ <td class="py-2.5">新建任务</td>
1045
+ </tr>
1046
+ <tr class="border-b border-surface-100">
1047
+ <td class="py-2.5 pr-4">
1048
+ <kbd
1049
+ class="px-2 py-1 bg-surface-100 border border-surface-200 rounded text-xs font-mono"
1050
+ >Ctrl + L</kbd
1051
+ >
1052
+ </td>
1053
+ <td class="py-2.5">切换任务</td>
1054
+ </tr>
1055
+ <tr class="border-b border-surface-100">
1056
+ <td class="py-2.5 pr-4">
1057
+ <kbd
1058
+ class="px-2 py-1 bg-surface-100 border border-surface-200 rounded text-xs font-mono"
1059
+ >Ctrl + C</kbd
1060
+ >
1061
+ </td>
1062
+ <td class="py-2.5">清空输入框 / 显示帮助提示</td>
1063
+ </tr>
1064
+ <tr class="border-b border-surface-100">
1065
+ <td class="py-2.5 pr-4">
1066
+ <kbd
1067
+ class="px-2 py-1 bg-surface-100 border border-surface-200 rounded text-xs font-mono"
1068
+ >Tab</kbd
1069
+ >
1070
+ </td>
1071
+ <td class="py-2.5">自动补全命令</td>
1072
+ </tr>
1073
+ <tr class="border-b border-surface-100">
1074
+ <td class="py-2.5 pr-4">
1075
+ <kbd
1076
+ class="px-2 py-1 bg-surface-100 border border-surface-200 rounded text-xs font-mono"
1077
+ >Enter</kbd
1078
+ >
1079
+ </td>
1080
+ <td class="py-2.5">提交输入</td>
1081
+ </tr>
1082
+ <tr class="border-b border-surface-100">
1083
+ <td class="py-2.5 pr-4">
1084
+ <kbd
1085
+ class="px-2 py-1 bg-surface-100 border border-surface-200 rounded text-xs font-mono"
1086
+ >↑ / ↓</kbd
1087
+ >
1088
+ </td>
1089
+ <td class="py-2.5">浏览历史输入</td>
1090
+ </tr>
1091
+ </tbody>
1092
+ </table>
1093
+ </div>
1094
+ </section>
1095
+
1096
+ <!-- ============================================================ -->
1097
+ <!-- Context Compression -->
1098
+ <!-- ============================================================ -->
1099
+ <section id="context-compact">
1100
+ <h2 class="text-3xl font-bold tracking-tight">上下文压缩</h2>
1101
+ <div class="mt-2 h-1 w-12 bg-brand-500 rounded-full"></div>
1102
+
1103
+ <p class="mt-6 text-surface-600 leading-relaxed">
1104
+ 在长时间的对话中,上下文会不断增长并可能接近模型的上下文窗口限制。OpenDesk
1105
+ 提供了<strong>两级上下文压缩机制</strong>,可以自动或手动压缩上下文,确保对话流畅进行。
1106
+ </p>
1107
+
1108
+ <h3 class="mt-8 text-lg font-semibold">自动触发</h3>
1109
+ <p class="mt-2 text-surface-600 text-sm">
1110
+ 当已使用的 prompt tokens 达到模型上下文窗口的
1111
+ <strong>80%</strong> 时,系统会自动触发上下文压缩。OpenDesk
1112
+ 会先查询内置的模型上下文大小表,如果查不到则通过 API 获取。
1113
+ </p>
1114
+
1115
+ <h3 class="mt-8 text-lg font-semibold">手动触发</h3>
1116
+ <p class="mt-2 text-surface-600 text-sm">
1117
+ 您可以随时使用 <code>/compact</code> 命令手动触发上下文压缩。
1118
+ </p>
1119
+
1120
+ <h3 class="mt-8 text-lg font-semibold">两级压缩机制</h3>
1121
+ <div class="mt-4 space-y-4">
1122
+ <div class="p-5 rounded-xl border border-surface-200 bg-white">
1123
+ <div class="flex items-center gap-3 mb-3">
1124
+ <span
1125
+ class="flex-shrink-0 w-8 h-8 bg-blue-100 text-blue-600 rounded-lg flex items-center justify-center text-sm font-bold"
1126
+ >L1</span
1127
+ >
1128
+ <h4 class="font-semibold">Level 1 — 工具调用压缩</h4>
1129
+ </div>
1130
+ <p class="text-sm text-surface-600">
1131
+ 标记较旧的工具调用为"已压缩",在构建发送给 LLM 的消息时跳过其详细内容。保留最近
1132
+ <strong>30%</strong>(但不低于 10 个)的工具调用不压缩,其余标记
1133
+ <code>compress_id</code>。
1134
+ </p>
1135
+ </div>
1136
+
1137
+ <div class="p-5 rounded-xl border border-surface-200 bg-white">
1138
+ <div class="flex items-center gap-3 mb-3">
1139
+ <span
1140
+ class="flex-shrink-0 w-8 h-8 bg-purple-100 text-purple-600 rounded-lg flex items-center justify-center text-sm font-bold"
1141
+ >L2</span
1142
+ >
1143
+ <h4 class="font-semibold">Level 2 — 结构化总结</h4>
1144
+ </div>
1145
+ <p class="text-sm text-surface-600">
1146
+ 当 Level 1 不再有效果时,系统调用 LLM 对较旧的消息生成一份结构化总结,并以
1147
+ <code>CompactSeparatorMessage</code> 的形式插入消息序列中。总结采用 XML
1148
+ 格式,包含以下信息:
1149
+ </p>
1150
+ <ul class="mt-2 text-sm text-surface-600 list-disc list-inside space-y-1">
1151
+ <li><strong>overall_goal</strong>:用户的核心目标</li>
1152
+ <li><strong>key_knowledge</strong>:必须记住的关键事实与约束</li>
1153
+ <li><strong>file_system_state</strong>:文件操作记录</li>
1154
+ <li><strong>recent_actions</strong>:近期操作及结果</li>
1155
+ <li><strong>current_plan</strong>:当前分步计划及各步状态</li>
1156
+ </ul>
1157
+ </div>
1158
+ </div>
1159
+
1160
+ <h3 class="mt-8 text-lg font-semibold">压缩流程</h3>
1161
+ <div class="mt-4 p-5 bg-surface-50 rounded-xl border border-surface-100">
1162
+ <div class="flex flex-col space-y-3 text-sm text-surface-600">
1163
+ <div class="flex items-center gap-3">
1164
+ <span
1165
+ class="flex-shrink-0 w-5 h-5 bg-brand-500 text-white rounded-full flex items-center justify-center text-[10px] font-bold"
1166
+ >1</span
1167
+ >
1168
+ <span>检测 <code>prompt_tokens &ge; contextSize &times; 80%</code>,触发压缩</span>
1169
+ </div>
1170
+ <div class="ml-2.5 w-px h-4 bg-surface-300"></div>
1171
+ <div class="flex items-center gap-3">
1172
+ <span
1173
+ class="flex-shrink-0 w-5 h-5 bg-brand-500 text-white rounded-full flex items-center justify-center text-[10px] font-bold"
1174
+ >2</span
1175
+ >
1176
+ <span>执行 Level 1:压缩旧的工具调用详情</span>
1177
+ </div>
1178
+ <div class="ml-2.5 w-px h-4 bg-surface-300"></div>
1179
+ <div class="flex items-center gap-3">
1180
+ <span
1181
+ class="flex-shrink-0 w-5 h-5 bg-brand-500 text-white rounded-full flex items-center justify-center text-[10px] font-bold"
1182
+ >3</span
1183
+ >
1184
+ <span>若 Level 1 无新增效果,升级到 Level 2:调用 LLM 生成结构化总结</span>
1185
+ </div>
1186
+ <div class="ml-2.5 w-px h-4 bg-surface-300"></div>
1187
+ <div class="flex items-center gap-3">
1188
+ <span
1189
+ class="flex-shrink-0 w-5 h-5 bg-brand-500 text-white rounded-full flex items-center justify-center text-[10px] font-bold"
1190
+ >4</span
1191
+ >
1192
+ <span>插入 <code>CompactSeparatorMessage</code>,后续请求仅发送总结 + 近期消息</span>
1193
+ </div>
1194
+ </div>
1195
+ </div>
1196
+ </section>
1197
+
1198
+ <!-- ============================================================ -->
1199
+ <!-- MCP Server -->
1200
+ <!-- ============================================================ -->
1201
+ <section id="mcp-server">
1202
+ <h2 class="text-3xl font-bold tracking-tight">安装 MCP Server</h2>
1203
+ <div class="mt-2 h-1 w-12 bg-brand-500 rounded-full"></div>
1204
+
1205
+ <p class="mt-6 text-surface-600 leading-relaxed">
1206
+ <strong>MCP (Model Context Protocol)</strong> 是一种标准协议,用于让 AI
1207
+ 模型使用外部工具和数据源。OpenDesk 支持自动搜索、下载、安装和管理 MCP
1208
+ Server,无需手动编写配置文件。
1209
+ </p>
1210
+
1211
+ <h3 class="mt-8 text-lg font-semibold">对话式安装</h3>
1212
+ <p class="mt-2 text-surface-600 text-sm">
1213
+ 最简单的方式是直接告诉 AI 助手您需要什么功能,它会自动搜索并安装合适的 MCP Server。
1214
+ </p>
1215
+ <pre
1216
+ class="mt-3 bg-surface-900 text-surface-100 p-4 rounded-lg text-sm"
1217
+ ><code><span class="text-surface-400"># 直接用自然语言描述需求</span>
1218
+ 帮我安装一个可以操作文件系统的 MCP Server
1219
+ 帮我安装一个 GitHub MCP Server</code></pre>
1220
+
1221
+ <!-- Screenshot placeholder: MCP installation -->
1222
+ <div class="mt-6 screenshot-placeholder p-6 text-center">
1223
+ <div>
1224
+ <svg
1225
+ class="w-10 h-10 mx-auto mb-2 text-surface-300"
1226
+ fill="none"
1227
+ stroke="currentColor"
1228
+ viewBox="0 0 24 24"
1229
+ >
1230
+ <path
1231
+ stroke-linecap="round"
1232
+ stroke-linejoin="round"
1233
+ stroke-width="1.5"
1234
+ d="M4 16l4.586-4.586a2 2 0 012.828 0L16 16m-2-2l1.586-1.586a2 2 0 012.828 0L20 14m-6-6h.01M6 20h12a2 2 0 002-2V6a2 2 0 00-2-2H6a2 2 0 00-2 2v12a2 2 0 002 2z"
1235
+ />
1236
+ </svg>
1237
+ <p class="text-sm font-medium text-surface-400">[截图] MCP Server 安装过程</p>
1238
+ <p class="text-xs text-surface-300 mt-1">展示对话式安装 MCP Server 的交互过程</p>
1239
+ </div>
1240
+ </div>
1241
+
1242
+ <h3 class="mt-8 text-lg font-semibold">MCP Server 配置参数</h3>
1243
+ <p class="mt-2 text-surface-600 text-sm">每个 MCP Server 支持以下配置:</p>
1244
+ <div class="mt-4 overflow-x-auto">
1245
+ <table class="text-sm">
1246
+ <thead>
1247
+ <tr class="border-b-2 border-surface-200">
1248
+ <th class="py-2 pr-4 font-semibold">字段</th>
1249
+ <th class="py-2 pr-4 font-semibold">说明</th>
1250
+ <th class="py-2 font-semibold">适用传输方式</th>
1251
+ </tr>
1252
+ </thead>
1253
+ <tbody class="text-surface-600">
1254
+ <tr class="border-b border-surface-100">
1255
+ <td class="py-2 pr-4"><code>name</code></td>
1256
+ <td class="py-2 pr-4">显示名称</td>
1257
+ <td class="py-2">全部</td>
1258
+ </tr>
1259
+ <tr class="border-b border-surface-100">
1260
+ <td class="py-2 pr-4"><code>transport</code></td>
1261
+ <td class="py-2 pr-4">传输方式</td>
1262
+ <td class="py-2">
1263
+ <code>stdio</code> / <code>sse</code> / <code>streamableHttp</code>
1264
+ </td>
1265
+ </tr>
1266
+ <tr class="border-b border-surface-100">
1267
+ <td class="py-2 pr-4"><code>enabled</code></td>
1268
+ <td class="py-2 pr-4">是否启用</td>
1269
+ <td class="py-2">全部</td>
1270
+ </tr>
1271
+ <tr class="border-b border-surface-100">
1272
+ <td class="py-2 pr-4"><code>command</code></td>
1273
+ <td class="py-2 pr-4">启动命令(如 <code>npx</code>、<code>node</code>)</td>
1274
+ <td class="py-2"><code>stdio</code></td>
1275
+ </tr>
1276
+ <tr class="border-b border-surface-100">
1277
+ <td class="py-2 pr-4"><code>args</code></td>
1278
+ <td class="py-2 pr-4">命令参数列表</td>
1279
+ <td class="py-2"><code>stdio</code></td>
1280
+ </tr>
1281
+ <tr class="border-b border-surface-100">
1282
+ <td class="py-2 pr-4"><code>cwd</code></td>
1283
+ <td class="py-2 pr-4">工作目录</td>
1284
+ <td class="py-2"><code>stdio</code></td>
1285
+ </tr>
1286
+ <tr class="border-b border-surface-100">
1287
+ <td class="py-2 pr-4"><code>url</code></td>
1288
+ <td class="py-2 pr-4">远程服务 URL</td>
1289
+ <td class="py-2"><code>sse</code> / <code>streamableHttp</code></td>
1290
+ </tr>
1291
+ <tr class="border-b border-surface-100">
1292
+ <td class="py-2 pr-4"><code>headers</code></td>
1293
+ <td class="py-2 pr-4">自定义 HTTP 请求头</td>
1294
+ <td class="py-2"><code>sse</code> / <code>streamableHttp</code></td>
1295
+ </tr>
1296
+ <tr class="border-b border-surface-100">
1297
+ <td class="py-2 pr-4"><code>env</code></td>
1298
+ <td class="py-2 pr-4">环境变量</td>
1299
+ <td class="py-2"><code>stdio</code></td>
1300
+ </tr>
1301
+ </tbody>
1302
+ </table>
1303
+ </div>
1304
+
1305
+ <h3 class="mt-8 text-lg font-semibold">管理工具</h3>
1306
+ <p class="mt-2 text-surface-600 text-sm">
1307
+ AI 助手内置了以下 MCP 管理工具,您可以通过自然语言调用:
1308
+ </p>
1309
+ <div class="mt-4 grid sm:grid-cols-2 gap-3">
1310
+ <div class="p-3 bg-surface-50 rounded-lg border border-surface-100">
1311
+ <p class="text-sm font-semibold"><code>installMcpServer</code></p>
1312
+ <p class="text-xs text-surface-500 mt-1">安装新的 MCP Server</p>
1313
+ </div>
1314
+ <div class="p-3 bg-surface-50 rounded-lg border border-surface-100">
1315
+ <p class="text-sm font-semibold"><code>listMcpServers</code></p>
1316
+ <p class="text-xs text-surface-500 mt-1">列出已安装的 MCP Server 及其状态</p>
1317
+ </div>
1318
+ <div class="p-3 bg-surface-50 rounded-lg border border-surface-100">
1319
+ <p class="text-sm font-semibold"><code>deleteMcpServer</code></p>
1320
+ <p class="text-xs text-surface-500 mt-1">删除指定的 MCP Server</p>
1321
+ </div>
1322
+ <div class="p-3 bg-surface-50 rounded-lg border border-surface-100">
1323
+ <p class="text-sm font-semibold"><code>toggleMcpServer</code></p>
1324
+ <p class="text-xs text-surface-500 mt-1">启用或禁用指定的 MCP Server</p>
1325
+ </div>
1326
+ </div>
1327
+
1328
+ <h3 class="mt-8 text-lg font-semibold">从其他工具导入</h3>
1329
+ <p class="mt-2 text-surface-600 text-sm">
1330
+ OpenDesk 支持从 <strong>Claude Desktop</strong> 或 <strong>Cursor</strong> 的 MCP 配置 JSON
1331
+ 文件中批量导入 MCP Server 配置。
1332
+ </p>
1333
+ </section>
1334
+
1335
+ <!-- ============================================================ -->
1336
+ <!-- Skill Install -->
1337
+ <!-- ============================================================ -->
1338
+ <section id="skill-install">
1339
+ <h2 class="text-3xl font-bold tracking-tight">安装 Skill 技能</h2>
1340
+ <div class="mt-2 h-1 w-12 bg-brand-500 rounded-full"></div>
1341
+
1342
+ <p class="mt-6 text-surface-600 leading-relaxed">
1343
+ <strong>Skill(技能)</strong>是 OpenDesk 的扩展能力单元,每个技能是一个包含
1344
+ <code>SKILL.md</code> 文件的目录,兼容 Anthropic Agent Skills
1345
+ 格式。技能可以从在线平台或本地路径安装。
1346
+ </p>
1347
+
1348
+ <h3 class="mt-8 text-lg font-semibold">安装来源</h3>
1349
+ <div class="mt-4 space-y-3">
1350
+ <div class="p-4 rounded-lg border border-surface-200 bg-white flex gap-4 items-start">
1351
+ <div
1352
+ class="w-8 h-8 rounded-md bg-blue-50 flex items-center justify-center text-blue-500 flex-shrink-0 mt-0.5"
1353
+ >
1354
+ <svg class="w-4 h-4" fill="none" stroke="currentColor" viewBox="0 0 24 24">
1355
+ <path
1356
+ stroke-linecap="round"
1357
+ stroke-linejoin="round"
1358
+ stroke-width="2"
1359
+ d="M21 12a9 9 0 01-9 9m9-9a9 9 0 00-9-9m9 9H3m9 9a9 9 0 01-9-9m9 9c1.657 0 3-4.03 3-9s-1.343-9-3-9m0 18c-1.657 0-3-4.03-3-9s1.343-9 3-9m-9 9a9 9 0 019-9"
1360
+ />
1361
+ </svg>
1362
+ </div>
1363
+ <div>
1364
+ <h4 class="text-sm font-semibold">在线平台</h4>
1365
+ <p class="text-xs text-surface-500 mt-1">
1366
+ 从 <strong>Skill0.io</strong>、<strong>SkillsMP</strong>、<strong>ClawHub</strong>
1367
+ 等平台搜索和安装技能。
1368
+ </p>
1369
+ </div>
1370
+ </div>
1371
+ <div class="p-4 rounded-lg border border-surface-200 bg-white flex gap-4 items-start">
1372
+ <div
1373
+ class="w-8 h-8 rounded-md bg-emerald-50 flex items-center justify-center text-emerald-500 flex-shrink-0 mt-0.5"
1374
+ >
1375
+ <svg class="w-4 h-4" fill="none" stroke="currentColor" viewBox="0 0 24 24">
1376
+ <path
1377
+ stroke-linecap="round"
1378
+ stroke-linejoin="round"
1379
+ stroke-width="2"
1380
+ d="M10 20l4-16m4 4l4 4-4 4M6 16l-4-4 4-4"
1381
+ />
1382
+ </svg>
1383
+ </div>
1384
+ <div>
1385
+ <h4 class="text-sm font-semibold">GitHub</h4>
1386
+ <p class="text-xs text-surface-500 mt-1">通过 GitHub 仓库 URL 直接安装技能。</p>
1387
+ </div>
1388
+ </div>
1389
+ <div class="p-4 rounded-lg border border-surface-200 bg-white flex gap-4 items-start">
1390
+ <div
1391
+ class="w-8 h-8 rounded-md bg-amber-50 flex items-center justify-center text-amber-500 flex-shrink-0 mt-0.5"
1392
+ >
1393
+ <svg class="w-4 h-4" fill="none" stroke="currentColor" viewBox="0 0 24 24">
1394
+ <path
1395
+ stroke-linecap="round"
1396
+ stroke-linejoin="round"
1397
+ stroke-width="2"
1398
+ d="M3 7v10a2 2 0 002 2h14a2 2 0 002-2V9a2 2 0 00-2-2h-6l-2-2H5a2 2 0 00-2 2z"
1399
+ />
1400
+ </svg>
1401
+ </div>
1402
+ <div>
1403
+ <h4 class="text-sm font-semibold">本地路径</h4>
1404
+ <p class="text-xs text-surface-500 mt-1">从本地目录安装,适合开发自定义技能。</p>
1405
+ </div>
1406
+ </div>
1407
+ <div class="p-4 rounded-lg border border-surface-200 bg-white flex gap-4 items-start">
1408
+ <div
1409
+ class="w-8 h-8 rounded-md bg-rose-50 flex items-center justify-center text-rose-500 flex-shrink-0 mt-0.5"
1410
+ >
1411
+ <svg class="w-4 h-4" fill="none" stroke="currentColor" viewBox="0 0 24 24">
1412
+ <path
1413
+ stroke-linecap="round"
1414
+ stroke-linejoin="round"
1415
+ stroke-width="2"
1416
+ d="M13.828 10.172a4 4 0 00-5.656 0l-4 4a4 4 0 105.656 5.656l1.102-1.101m-.758-4.899a4 4 0 005.656 0l4-4a4 4 0 00-5.656-5.656l-1.1 1.1"
1417
+ />
1418
+ </svg>
1419
+ </div>
1420
+ <div>
1421
+ <h4 class="text-sm font-semibold">URL 下载</h4>
1422
+ <p class="text-xs text-surface-500 mt-1">通过 URL 下载 zip / tar.gz 格式的技能包。</p>
1423
+ </div>
1424
+ </div>
1425
+ </div>
1426
+
1427
+ <h3 class="mt-8 text-lg font-semibold">对话式安装</h3>
1428
+ <pre
1429
+ class="mt-3 bg-surface-900 text-surface-100 p-4 rounded-lg text-sm"
1430
+ ><code><span class="text-surface-400"># 搜索并安装技能</span>
1431
+ 帮我搜索一个可以创建 Cursor Rule 的技能并安装
1432
+
1433
+ <span class="text-surface-400"># 从 GitHub 安装</span>
1434
+ 帮我安装这个技能:https://github.com/user/my-skill
1435
+
1436
+ <span class="text-surface-400"># 查看已安装技能</span>
1437
+ 列出所有已安装的技能</code></pre>
1438
+
1439
+ <h3 class="mt-8 text-lg font-semibold">管理工具</h3>
1440
+ <div class="mt-4 overflow-x-auto">
1441
+ <table class="text-sm">
1442
+ <thead>
1443
+ <tr class="border-b-2 border-surface-200">
1444
+ <th class="py-2 pr-4 font-semibold">工具</th>
1445
+ <th class="py-2 font-semibold">说明</th>
1446
+ </tr>
1447
+ </thead>
1448
+ <tbody class="text-surface-600">
1449
+ <tr class="border-b border-surface-100">
1450
+ <td class="py-2 pr-4"><code>addSkillFromPath</code></td>
1451
+ <td class="py-2">从本地目录安装技能</td>
1452
+ </tr>
1453
+ <tr class="border-b border-surface-100">
1454
+ <td class="py-2 pr-4"><code>addSkillFromUrl</code></td>
1455
+ <td class="py-2">从 URL 下载安装技能</td>
1456
+ </tr>
1457
+ <tr class="border-b border-surface-100">
1458
+ <td class="py-2 pr-4"><code>addSkillFromGitHubUrl</code></td>
1459
+ <td class="py-2">从 GitHub 仓库安装技能</td>
1460
+ </tr>
1461
+ <tr class="border-b border-surface-100">
1462
+ <td class="py-2 pr-4"><code>listSkills</code></td>
1463
+ <td class="py-2">列出已安装的技能</td>
1464
+ </tr>
1465
+ <tr class="border-b border-surface-100">
1466
+ <td class="py-2 pr-4"><code>deleteSkill</code></td>
1467
+ <td class="py-2">删除指定技能</td>
1468
+ </tr>
1469
+ <tr class="border-b border-surface-100">
1470
+ <td class="py-2 pr-4"><code>refreshSkills</code></td>
1471
+ <td class="py-2">刷新技能列表</td>
1472
+ </tr>
1473
+ <tr class="border-b border-surface-100">
1474
+ <td class="py-2 pr-4"><code>getSkillsDirectory</code></td>
1475
+ <td class="py-2">查看技能存储目录</td>
1476
+ </tr>
1477
+ </tbody>
1478
+ </table>
1479
+ </div>
1480
+
1481
+ <h3 class="mt-8 text-lg font-semibold">使用 /skills 命令</h3>
1482
+ <p class="mt-2 text-surface-600 text-sm">
1483
+ 输入 <code>/skills</code> 命令可以打开技能管理界面,查看和管理所有已安装的技能。
1484
+ </p>
1485
+ </section>
1486
+
1487
+ <!-- ============================================================ -->
1488
+ <!-- Mail Config -->
1489
+ <!-- ============================================================ -->
1490
+ <section id="mail-config">
1491
+ <h2 class="text-3xl font-bold tracking-tight">邮箱配置</h2>
1492
+ <div class="mt-2 h-1 w-12 bg-brand-500 rounded-full"></div>
1493
+
1494
+ <p class="mt-6 text-surface-600 leading-relaxed">
1495
+ OpenDesk CLI
1496
+ 内置了邮箱应用,支持收发邮件。您可以通过<strong>对话式配置</strong>来添加邮箱账户,系统会自动识别常见的邮箱服务商并使用预设配置。
1497
+ </p>
1498
+
1499
+ <h3 class="mt-8 text-lg font-semibold">对话式配置</h3>
1500
+ <pre
1501
+ class="mt-3 bg-surface-900 text-surface-100 p-4 rounded-lg text-sm"
1502
+ ><code><span class="text-surface-400"># 添加邮箱账户</span>
1503
+ 帮我配置 QQ 邮箱,邮箱地址是 user@qq.com
1504
+
1505
+ <span class="text-surface-400"># 查看已配置的邮箱</span>
1506
+ 列出我的邮箱账户
1507
+
1508
+ <span class="text-surface-400"># 切换默认邮箱</span>
1509
+ 切换到我的 163 邮箱</code></pre>
1510
+
1511
+ <h3 class="mt-8 text-lg font-semibold">支持的邮箱服务商</h3>
1512
+ <p class="mt-2 text-surface-600 text-sm">OpenDesk 预置了以下邮箱服务商的服务器配置:</p>
1513
+ <div class="mt-4 flex flex-wrap gap-2">
1514
+ <span class="px-3 py-1 bg-surface-100 text-surface-600 rounded-full text-xs font-medium"
1515
+ >QQ 邮箱</span
1516
+ >
1517
+ <span class="px-3 py-1 bg-surface-100 text-surface-600 rounded-full text-xs font-medium"
1518
+ >163 邮箱</span
1519
+ >
1520
+ <span class="px-3 py-1 bg-surface-100 text-surface-600 rounded-full text-xs font-medium"
1521
+ >126 邮箱</span
1522
+ >
1523
+ <span class="px-3 py-1 bg-surface-100 text-surface-600 rounded-full text-xs font-medium"
1524
+ >yeah.net</span
1525
+ >
1526
+ <span class="px-3 py-1 bg-surface-100 text-surface-600 rounded-full text-xs font-medium"
1527
+ >Outlook</span
1528
+ >
1529
+ <span class="px-3 py-1 bg-surface-100 text-surface-600 rounded-full text-xs font-medium"
1530
+ >Gmail</span
1531
+ >
1532
+ <span class="px-3 py-1 bg-surface-100 text-surface-600 rounded-full text-xs font-medium"
1533
+ >139 邮箱</span
1534
+ >
1535
+ <span class="px-3 py-1 bg-surface-100 text-surface-600 rounded-full text-xs font-medium"
1536
+ >新浪邮箱</span
1537
+ >
1538
+ <span class="px-3 py-1 bg-surface-100 text-surface-600 rounded-full text-xs font-medium"
1539
+ >搜狐邮箱</span
1540
+ >
1541
+ <span class="px-3 py-1 bg-surface-100 text-surface-600 rounded-full text-xs font-medium"
1542
+ >阿里邮箱</span
1543
+ >
1544
+ <span class="px-3 py-1 bg-surface-100 text-surface-600 rounded-full text-xs font-medium"
1545
+ >华为邮箱</span
1546
+ >
1547
+ </div>
1548
+
1549
+ <h3 class="mt-8 text-lg font-semibold">邮箱账户配置参数</h3>
1550
+ <div class="mt-4 overflow-x-auto">
1551
+ <table class="text-sm">
1552
+ <thead>
1553
+ <tr class="border-b-2 border-surface-200">
1554
+ <th class="py-2 pr-4 font-semibold">字段</th>
1555
+ <th class="py-2 pr-4 font-semibold">说明</th>
1556
+ <th class="py-2 font-semibold">备注</th>
1557
+ </tr>
1558
+ </thead>
1559
+ <tbody class="text-surface-600">
1560
+ <tr class="border-b border-surface-100">
1561
+ <td class="py-2 pr-4"><code>name</code></td>
1562
+ <td class="py-2 pr-4">账户显示名称</td>
1563
+ <td class="py-2"></td>
1564
+ </tr>
1565
+ <tr class="border-b border-surface-100">
1566
+ <td class="py-2 pr-4"><code>email</code></td>
1567
+ <td class="py-2 pr-4">邮箱地址</td>
1568
+ <td class="py-2"></td>
1569
+ </tr>
1570
+ <tr class="border-b border-surface-100">
1571
+ <td class="py-2 pr-4"><code>password</code></td>
1572
+ <td class="py-2 pr-4">密码或授权码</td>
1573
+ <td class="py-2">部分邮箱需使用应用专用密码</td>
1574
+ </tr>
1575
+ <tr class="border-b border-surface-100">
1576
+ <td class="py-2 pr-4"><code>inbox.protocol</code></td>
1577
+ <td class="py-2 pr-4">收件协议</td>
1578
+ <td class="py-2"><code>pop3</code> 或 <code>imap</code></td>
1579
+ </tr>
1580
+ <tr class="border-b border-surface-100">
1581
+ <td class="py-2 pr-4"><code>inbox.host / port</code></td>
1582
+ <td class="py-2 pr-4">收件服务器地址和端口</td>
1583
+ <td class="py-2">预设服务商自动填充</td>
1584
+ </tr>
1585
+ <tr class="border-b border-surface-100">
1586
+ <td class="py-2 pr-4"><code>outbox.host / port</code></td>
1587
+ <td class="py-2 pr-4">发件服务器 (SMTP) 地址和端口</td>
1588
+ <td class="py-2">预设服务商自动填充</td>
1589
+ </tr>
1590
+ </tbody>
1591
+ </table>
1592
+ </div>
1593
+
1594
+ <h3 class="mt-8 text-lg font-semibold">使用邮箱</h3>
1595
+ <p class="mt-2 text-surface-600 text-sm">
1596
+ 配置完成后,可以使用 <code>/mail</code> 命令打开邮箱界面查看和管理邮件,也可以直接通过自然语言让
1597
+ AI 助手帮您收发邮件。
1598
+ </p>
1599
+ <pre
1600
+ class="mt-3 bg-surface-900 text-surface-100 p-4 rounded-lg text-sm"
1601
+ ><code><span class="text-surface-400"># 查看邮件</span>
1602
+ 帮我看看最新的邮件
1603
+
1604
+ <span class="text-surface-400"># 发送邮件</span>
1605
+ 帮我给 colleague@example.com 发一封邮件,主题是"会议安排"</code></pre>
1606
+ </section>
1607
+
1608
+ <!-- ============================================================ -->
1609
+ <!-- Calendar Config -->
1610
+ <!-- ============================================================ -->
1611
+ <section id="calendar-config">
1612
+ <h2 class="text-3xl font-bold tracking-tight">日历配置</h2>
1613
+ <div class="mt-2 h-1 w-12 bg-brand-500 rounded-full"></div>
1614
+
1615
+ <p class="mt-6 text-surface-600 leading-relaxed">
1616
+ OpenDesk 内置日历应用,支持本地日程管理,并可选择同步 Outlook 日历数据(仅 Windows 平台)。
1617
+ </p>
1618
+
1619
+ <h3 class="mt-8 text-lg font-semibold">数据源</h3>
1620
+ <div class="mt-4 space-y-3">
1621
+ <div class="p-4 rounded-lg border border-surface-200 bg-white flex gap-4 items-start">
1622
+ <div
1623
+ class="w-8 h-8 rounded-md bg-brand-50 flex items-center justify-center text-brand-500 flex-shrink-0 mt-0.5"
1624
+ >
1625
+ <svg class="w-4 h-4" fill="none" stroke="currentColor" viewBox="0 0 24 24">
1626
+ <path
1627
+ stroke-linecap="round"
1628
+ stroke-linejoin="round"
1629
+ stroke-width="2"
1630
+ d="M4 7v10c0 2.21 3.582 4 8 4s8-1.79 8-4V7M4 7c0 2.21 3.582 4 8 4s8-1.79 8-4M4 7c0-2.21 3.582-4 8-4s8 1.79 8 4"
1631
+ />
1632
+ </svg>
1633
+ </div>
1634
+ <div>
1635
+ <h4 class="text-sm font-semibold">本地数据库</h4>
1636
+ <p class="text-xs text-surface-500 mt-1">
1637
+ 默认使用 NeDB 本地数据库存储日程,数据保存在
1638
+ <code>apps/calendar/calendar.db</code> 中,无需额外配置。
1639
+ </p>
1640
+ </div>
1641
+ </div>
1642
+ <div class="p-4 rounded-lg border border-surface-200 bg-white flex gap-4 items-start">
1643
+ <div
1644
+ class="w-8 h-8 rounded-md bg-blue-50 flex items-center justify-center text-blue-500 flex-shrink-0 mt-0.5"
1645
+ >
1646
+ <svg class="w-4 h-4" fill="none" stroke="currentColor" viewBox="0 0 24 24">
1647
+ <path
1648
+ stroke-linecap="round"
1649
+ stroke-linejoin="round"
1650
+ stroke-width="2"
1651
+ d="M8 7V3m8 4V3m-9 8h10M5 21h14a2 2 0 002-2V7a2 2 0 00-2-2H5a2 2 0 00-2 2v12a2 2 0 002 2z"
1652
+ />
1653
+ </svg>
1654
+ </div>
1655
+ <div>
1656
+ <h4 class="text-sm font-semibold">
1657
+ Outlook 同步<span
1658
+ class="ml-2 inline-block px-1.5 py-0.5 bg-blue-100 text-blue-700 rounded text-[10px] font-medium"
1659
+ >仅 Windows</span
1660
+ >
1661
+ </h4>
1662
+ <p class="text-xs text-surface-500 mt-1">
1663
+ 可选启用 Outlook 日历同步,通过 PowerShell 读取本地 Outlook 日程数据。
1664
+ </p>
1665
+ </div>
1666
+ </div>
1667
+ </div>
1668
+
1669
+ <h3 class="mt-8 text-lg font-semibold">配置 Outlook 同步</h3>
1670
+ <p class="mt-2 text-surface-600 text-sm">
1671
+ 进入 <code>/config</code> 配置菜单,在日历应用的配置中启用 Outlook 数据源:
1672
+ </p>
1673
+ <pre class="mt-3 bg-surface-900 text-surface-100 p-4 rounded-lg text-xs"><code>{
1674
+ "applications": {
1675
+ "calendar": {
1676
+ "dataSources": {
1677
+ "outlook": {
1678
+ "enabled": true
1679
+ }
1680
+ }
1681
+ }
1682
+ }
1683
+ }</code></pre>
1684
+
1685
+ <h3 class="mt-8 text-lg font-semibold">使用日历</h3>
1686
+ <p class="mt-2 text-surface-600 text-sm">
1687
+ 使用 <code>/calendar</code> 命令打开日历界面,或通过自然语言让 AI 助手管理日程。
1688
+ </p>
1689
+ <pre
1690
+ class="mt-3 bg-surface-900 text-surface-100 p-4 rounded-lg text-sm"
1691
+ ><code><span class="text-surface-400"># 查看今天的日程</span>
1692
+ 今天有什么安排?
1693
+
1694
+ <span class="text-surface-400"># 添加日程</span>
1695
+ 帮我在明天下午 2 点添加一个会议,主题是"项目评审"
1696
+
1697
+ <span class="text-surface-400"># 删除日程</span>
1698
+ 帮我取消今天下午的会议</code></pre>
1699
+
1700
+ <h3 class="mt-8 text-lg font-semibold">日程参数</h3>
1701
+ <div class="mt-4 overflow-x-auto">
1702
+ <table class="text-sm">
1703
+ <thead>
1704
+ <tr class="border-b-2 border-surface-200">
1705
+ <th class="py-2 pr-4 font-semibold">字段</th>
1706
+ <th class="py-2 font-semibold">说明</th>
1707
+ </tr>
1708
+ </thead>
1709
+ <tbody class="text-surface-600">
1710
+ <tr class="border-b border-surface-100">
1711
+ <td class="py-2 pr-4"><code>subject</code></td>
1712
+ <td class="py-2">日程主题</td>
1713
+ </tr>
1714
+ <tr class="border-b border-surface-100">
1715
+ <td class="py-2 pr-4"><code>date</code></td>
1716
+ <td class="py-2">日期(YYYY-MM-DD 格式)</td>
1717
+ </tr>
1718
+ <tr class="border-b border-surface-100">
1719
+ <td class="py-2 pr-4"><code>startTime / endTime</code></td>
1720
+ <td class="py-2">开始 / 结束时间</td>
1721
+ </tr>
1722
+ <tr class="border-b border-surface-100">
1723
+ <td class="py-2 pr-4"><code>location</code></td>
1724
+ <td class="py-2">地点</td>
1725
+ </tr>
1726
+ <tr class="border-b border-surface-100">
1727
+ <td class="py-2 pr-4"><code>isAllDay</code></td>
1728
+ <td class="py-2">是否为全天事件</td>
1729
+ </tr>
1730
+ </tbody>
1731
+ </table>
1732
+ </div>
1733
+ </section>
1734
+
1735
+ <!-- ============================================================ -->
1736
+ <!-- App Overview -->
1737
+ <!-- ============================================================ -->
1738
+ <section id="app-intro">
1739
+ <h2 class="text-3xl font-bold tracking-tight">应用概览</h2>
1740
+ <div class="mt-2 h-1 w-12 bg-brand-500 rounded-full"></div>
1741
+
1742
+ <p class="mt-6 text-surface-600 leading-relaxed">
1743
+ OpenDesk 桌面版包含丰富的内置应用,以下是各应用的简要介绍。详细使用文档正在编写中。
1744
+ </p>
1745
+
1746
+ <div class="mt-8 grid sm:grid-cols-2 lg:grid-cols-3 gap-4">
1747
+ <div class="card-hover p-5 rounded-xl border border-surface-200 bg-white">
1748
+ <div
1749
+ class="w-10 h-10 rounded-lg bg-blue-50 flex items-center justify-center text-blue-500 mb-3"
1750
+ >
1751
+ <svg class="w-5 h-5" fill="none" stroke="currentColor" viewBox="0 0 24 24">
1752
+ <path
1753
+ stroke-linecap="round"
1754
+ stroke-linejoin="round"
1755
+ stroke-width="2"
1756
+ d="M17 8h2a2 2 0 012 2v6a2 2 0 01-2 2h-2v4l-4-4H9a1.994 1.994 0 01-1.414-.586m0 0L11 14h4a2 2 0 002-2V6a2 2 0 00-2-2H5a2 2 0 00-2 2v6a2 2 0 002 2h2v4l.586-.586z"
1757
+ />
1758
+ </svg>
1759
+ </div>
1760
+ <h3 class="font-semibold text-sm">AI Agent Center</h3>
1761
+ <p class="text-xs text-surface-500 mt-1">
1762
+ 多 Agent 聊天、OpenAI API 兼容、流式输出和工具调用。
1763
+ </p>
1764
+ </div>
1765
+ <div class="card-hover p-5 rounded-xl border border-surface-200 bg-white">
1766
+ <div
1767
+ class="w-10 h-10 rounded-lg bg-rose-50 flex items-center justify-center text-rose-500 mb-3"
1768
+ >
1769
+ <svg class="w-5 h-5" fill="none" stroke="currentColor" viewBox="0 0 24 24">
1770
+ <path
1771
+ stroke-linecap="round"
1772
+ stroke-linejoin="round"
1773
+ stroke-width="2"
1774
+ d="M3 8l7.89 5.26a2 2 0 002.22 0L21 8M5 19h14a2 2 0 002-2V7a2 2 0 00-2-2H5a2 2 0 00-2 2v10a2 2 0 002 2z"
1775
+ />
1776
+ </svg>
1777
+ </div>
1778
+ <h3 class="font-semibold text-sm">智能邮箱</h3>
1779
+ <p class="text-xs text-surface-500 mt-1">POP3/IMAP 收件和 SMTP 发件,AI 辅助邮件处理。</p>
1780
+ </div>
1781
+ <div class="card-hover p-5 rounded-xl border border-surface-200 bg-white">
1782
+ <div
1783
+ class="w-10 h-10 rounded-lg bg-indigo-50 flex items-center justify-center text-indigo-500 mb-3"
1784
+ >
1785
+ <svg class="w-5 h-5" fill="none" stroke="currentColor" viewBox="0 0 24 24">
1786
+ <path
1787
+ stroke-linecap="round"
1788
+ stroke-linejoin="round"
1789
+ stroke-width="2"
1790
+ d="M8 7V3m8 4V3m-9 8h10M5 21h14a2 2 0 002-2V7a2 2 0 00-2-2H5a2 2 0 00-2 2v12a2 2 0 002 2z"
1791
+ />
1792
+ </svg>
1793
+ </div>
1794
+ <h3 class="font-semibold text-sm">日历</h3>
1795
+ <p class="text-xs text-surface-500 mt-1">日程管理,支持 Outlook 同步。</p>
1796
+ </div>
1797
+ <div class="card-hover p-5 rounded-xl border border-surface-200 bg-white">
1798
+ <div
1799
+ class="w-10 h-10 rounded-lg bg-amber-50 flex items-center justify-center text-amber-500 mb-3"
1800
+ >
1801
+ <svg class="w-5 h-5" fill="none" stroke="currentColor" viewBox="0 0 24 24">
1802
+ <path
1803
+ stroke-linecap="round"
1804
+ stroke-linejoin="round"
1805
+ stroke-width="2"
1806
+ d="M19 20H5a2 2 0 01-2-2V6a2 2 0 012-2h10a2 2 0 012 2v1m2 13a2 2 0 01-2-2V7m2 13a2 2 0 002-2V9a2 2 0 00-2-2h-2m-4-3H9M7 16h6M7 8h6v4H7V8z"
1807
+ />
1808
+ </svg>
1809
+ </div>
1810
+ <h3 class="font-semibold text-sm">新闻聚合</h3>
1811
+ <p class="text-xs text-surface-500 mt-1">Hacker News 等多来源新闻聚合。</p>
1812
+ </div>
1813
+ <div class="card-hover p-5 rounded-xl border border-surface-200 bg-white">
1814
+ <div
1815
+ class="w-10 h-10 rounded-lg bg-teal-50 flex items-center justify-center text-teal-500 mb-3"
1816
+ >
1817
+ <svg class="w-5 h-5" fill="none" stroke="currentColor" viewBox="0 0 24 24">
1818
+ <path
1819
+ stroke-linecap="round"
1820
+ stroke-linejoin="round"
1821
+ stroke-width="2"
1822
+ d="M3 7v10a2 2 0 002 2h14a2 2 0 002-2V9a2 2 0 00-2-2h-6l-2-2H5a2 2 0 00-2 2z"
1823
+ />
1824
+ </svg>
1825
+ </div>
1826
+ <h3 class="font-semibold text-sm">文件管理器</h3>
1827
+ <p class="text-xs text-surface-500 mt-1">文件浏览、搜索,AI 驱动的文件操作。</p>
1828
+ </div>
1829
+ <div class="card-hover p-5 rounded-xl border border-surface-200 bg-white">
1830
+ <div
1831
+ class="w-10 h-10 rounded-lg bg-violet-50 flex items-center justify-center text-violet-500 mb-3"
1832
+ >
1833
+ <svg class="w-5 h-5" fill="none" stroke="currentColor" viewBox="0 0 24 24">
1834
+ <path
1835
+ stroke-linecap="round"
1836
+ stroke-linejoin="round"
1837
+ stroke-width="2"
1838
+ d="M21 21l-6-6m2-5a7 7 0 11-14 0 7 7 0 0114 0z"
1839
+ />
1840
+ </svg>
1841
+ </div>
1842
+ <h3 class="font-semibold text-sm">统一搜索</h3>
1843
+ <p class="text-xs text-surface-500 mt-1">向量索引 + BM25 + 关键字混合搜索。</p>
1844
+ </div>
1845
+ <div class="card-hover p-5 rounded-xl border border-surface-200 bg-white">
1846
+ <div
1847
+ class="w-10 h-10 rounded-lg bg-cyan-50 flex items-center justify-center text-cyan-500 mb-3"
1848
+ >
1849
+ <svg class="w-5 h-5" fill="none" stroke="currentColor" viewBox="0 0 24 24">
1850
+ <path
1851
+ stroke-linecap="round"
1852
+ stroke-linejoin="round"
1853
+ stroke-width="2"
1854
+ d="M15 10l4.553-2.276A1 1 0 0121 8.618v6.764a1 1 0 01-1.447.894L15 14M5 18h8a2 2 0 002-2V8a2 2 0 00-2-2H5a2 2 0 00-2 2v8a2 2 0 002 2z"
1855
+ />
1856
+ </svg>
1857
+ </div>
1858
+ <h3 class="font-semibold text-sm">快速录屏 (Recall)</h3>
1859
+ <p class="text-xs text-surface-500 mt-1">屏幕录制与回放。</p>
1860
+ </div>
1861
+ <div class="card-hover p-5 rounded-xl border border-surface-200 bg-white">
1862
+ <div
1863
+ class="w-10 h-10 rounded-lg bg-emerald-50 flex items-center justify-center text-emerald-500 mb-3"
1864
+ >
1865
+ <svg class="w-5 h-5" fill="none" stroke="currentColor" viewBox="0 0 24 24">
1866
+ <path
1867
+ stroke-linecap="round"
1868
+ stroke-linejoin="round"
1869
+ stroke-width="2"
1870
+ d="M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2m-6 9l2 2 4-4"
1871
+ />
1872
+ </svg>
1873
+ </div>
1874
+ <h3 class="font-semibold text-sm">待办管理</h3>
1875
+ <p class="text-xs text-surface-500 mt-1">任务和待办事项的 AI 辅助管理。</p>
1876
+ </div>
1877
+ <div class="card-hover p-5 rounded-xl border border-surface-200 bg-white">
1878
+ <div
1879
+ class="w-10 h-10 rounded-lg bg-orange-50 flex items-center justify-center text-orange-500 mb-3"
1880
+ >
1881
+ <svg class="w-5 h-5" fill="none" stroke="currentColor" viewBox="0 0 24 24">
1882
+ <path
1883
+ stroke-linecap="round"
1884
+ stroke-linejoin="round"
1885
+ stroke-width="2"
1886
+ d="M7 21a4 4 0 01-4-4V5a2 2 0 012-2h4a2 2 0 012 2v12a4 4 0 01-4 4zm0 0h12a2 2 0 002-2v-4a2 2 0 00-2-2h-2.343M11 7.343l1.657-1.657a2 2 0 012.828 0l2.829 2.829a2 2 0 010 2.828l-8.486 8.485M7 17h.01"
1887
+ />
1888
+ </svg>
1889
+ </div>
1890
+ <h3 class="font-semibold text-sm">PPT / Designer</h3>
1891
+ <p class="text-xs text-surface-500 mt-1">AI 驱动的演示文稿和设计工具。</p>
1892
+ </div>
1893
+ </div>
1894
+
1895
+ <div class="mt-8 p-4 bg-brand-50 border border-brand-200 rounded-lg text-sm text-brand-800">
1896
+ <strong>提示:</strong>桌面应用的详细使用文档正在编写中,敬请期待。
1897
+ </div>
1898
+ </section>
1899
+
1900
+ <!-- ============================================================ -->
1901
+ <!-- Footer -->
1902
+ <!-- ============================================================ -->
1903
+ <footer class="mt-20 pt-8 border-t border-surface-200 text-center text-sm text-surface-400 pb-12">
1904
+ <p>OpenDesk &mdash; 一站式 AI 办公生活空间</p>
1905
+ <p class="mt-1">
1906
+ Licensed under
1907
+ <a
1908
+ href="http://license.coscl.org.cn/MulanPSL2"
1909
+ target="_blank"
1910
+ class="text-brand-500 hover:underline"
1911
+ >Mulan PSL v2</a
1912
+ >
1913
+ </p>
1914
+ <p class="mt-1">
1915
+ <a
1916
+ href="https://gitcode.com/openharmony-robot/OpenDesk"
1917
+ target="_blank"
1918
+ class="text-brand-500 hover:underline"
1919
+ >GitCode</a
1920
+ >
1921
+ &middot;
1922
+ <a
1923
+ href="https://gitcode.com/openharmony-robot/OpenDesk/issues"
1924
+ target="_blank"
1925
+ class="text-brand-500 hover:underline"
1926
+ >反馈问题</a
1927
+ >
1928
+ &middot;
1929
+ <a
1930
+ href="https://gitcode.com/openharmony-robot/OpenDesk/discussions"
1931
+ target="_blank"
1932
+ class="text-brand-500 hover:underline"
1933
+ >讨论区</a
1934
+ >
1935
+ </p>
1936
+ </footer>
1937
+ </div>
1938
+ </main>
1939
+ </body>
1940
+ </html>