@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/README.md +94 -0
- package/manual.html +1940 -0
- package/opendesk +4138 -1122
- package/package.json +7 -5
- package/preinstall.cjs +9 -0
- package/opendesk.cmd +0 -31
- package/opendesk.ps1 +0 -8
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 <alias></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 <cmd></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 <新名称></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 名称 -- <base64+校验和>]]</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 ≥ contextSize × 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 — 一站式 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
|
+
·
|
|
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
|
+
·
|
|
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>
|