@agent-link/server 0.1.536 → 0.1.538

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.
@@ -1,588 +1,233 @@
1
1
  <!DOCTYPE html>
2
2
  <html lang="zh-CN">
3
3
  <head>
4
- <meta charset="UTF-8">
5
- <meta name="viewport" content="width=device-width, initial-scale=1.0">
6
- <title>msclaude — 随时随地操控你的 Coding Agent</title>
7
- <meta name="description" content="msclaude Copilot、Claude Code、Codex 和更多 Coding Agent 提供简洁的远程工作台,支持多目录会话管理、文件预览/编辑、远程终端和端到端加密。">
8
- <meta name="keywords" content="msclaude, Copilot, Claude Code, Codex, Coding Agent, 远程工作台, 浏览器 IDE, 端到端加密, 远程终端, 文件编辑">
9
- <link rel="canonical" href="https://msclaude.ai/zh">
10
- <link rel="alternate" hreflang="en" href="https://msclaude.ai/">
11
- <link rel="alternate" hreflang="zh" href="https://msclaude.ai/zh">
12
- <link rel="alternate" hreflang="x-default" href="https://msclaude.ai/">
13
- <meta property="og:type" content="website">
14
- <meta property="og:title" content="msclaude — 随时随地操控你的 Coding Agent">
15
- <meta property="og:description" content="为 Copilot、Claude Code、Codex 和更多 Coding Agent 准备的远程工作台。多目录会话、文件、终端、端到端加密。">
16
- <meta property="og:url" content="https://msclaude.ai/zh">
17
- <meta property="og:image" content="https://msclaude.ai/iPad.png">
18
- <meta property="og:site_name" content="msclaude">
19
- <meta property="og:locale" content="zh_CN">
20
- <meta property="og:locale:alternate" content="en_US">
21
- <meta name="twitter:card" content="summary_large_image">
22
- <meta name="twitter:title" content="msclaude — 随时随地操控你的 Coding Agent">
23
- <meta name="twitter:description" content=" Copilot、Claude Code、Codex 和更多 Coding Agent 准备的远程工作台。">
24
- <meta name="twitter:image" content="https://msclaude.ai/iPad.png">
25
- <link rel="icon" type="image/svg+xml" href="/favicon.svg">
26
- <link rel="icon" type="image/png" sizes="32x32" href="/favicon-32x32.png">
27
- <link rel="icon" type="image/png" sizes="16x16" href="/favicon-16x16.png">
28
- <link rel="apple-touch-icon" sizes="180x180" href="/apple-touch-icon.png">
29
- <script type="application/ld+json">
30
- {
31
- "@context": "https://schema.org",
32
- "@type": "SoftwareApplication",
33
- "name": "msclaude",
34
- "description": "为 Copilot、Claude Code、Codex 和更多 Coding Agent 准备的远程工作台,支持端到端加密。",
35
- "url": "https://msclaude.ai/zh",
36
- "applicationCategory": "DeveloperApplication",
37
- "operatingSystem": "Windows, macOS, Linux",
38
- "offers": { "@type": "Offer", "price": "0", "priceCurrency": "USD" },
39
- "screenshot": "https://msclaude.ai/iPad.png"
40
- }
41
- </script>
42
- <style>
43
- @font-face {
44
- font-family: 'Space Grotesk';
45
- font-style: normal;
46
- font-weight: 300 700;
47
- font-display: swap;
48
- src: url('/vendor/SpaceGrotesk-latin.woff2') format('woff2');
49
- }
50
-
51
- * { box-sizing: border-box; margin: 0; padding: 0; }
52
-
53
- :root {
54
- --bg: #fbfcff;
55
- --card: #ffffff;
56
- --surface: #f3f6fb;
57
- --border: #e4e9f2;
58
- --text: #111827;
59
- --muted: #64748b;
60
- --accent: #018B8D;
61
- --accent-soft: #e6f7f7;
62
- --green: #16a34a;
63
- --code: #101827;
64
- }
65
-
66
- body {
67
- min-height: 100vh;
68
- background:
69
- radial-gradient(circle at top left, rgba(1, 139, 141, 0.12), transparent 32rem),
70
- linear-gradient(180deg, #ffffff 0%, var(--bg) 55%, #ffffff 100%);
71
- color: var(--text);
72
- font-family: 'Space Grotesk', system-ui, -apple-system, BlinkMacSystemFont, 'Microsoft YaHei', sans-serif;
73
- line-height: 1.65;
74
- -webkit-font-smoothing: antialiased;
75
- }
76
-
77
- a { color: inherit; text-decoration: none; }
78
-
79
- nav, main, footer {
80
- width: min(1120px, calc(100% - 32px));
81
- margin: 0 auto;
82
- }
83
-
84
- nav {
85
- display: flex;
86
- align-items: center;
87
- justify-content: space-between;
88
- padding: 24px 0;
89
- }
90
-
91
- .logo {
92
- display: inline-flex;
93
- align-items: center;
94
- gap: 10px;
95
- font-weight: 700;
96
- letter-spacing: -0.03em;
97
- }
98
-
99
- .logo img { width: 28px; height: 28px; border-radius: 8px; }
100
-
101
- .nav-actions {
102
- align-items: center;
103
- display: flex;
104
- gap: 10px;
105
- }
106
-
107
- .repo-link,
108
- .nav-lang {
109
- border: 1px solid var(--border);
110
- border-radius: 999px;
111
- color: var(--muted);
112
- font-size: 0.86rem;
113
- font-weight: 600;
114
- padding: 8px 13px;
115
- }
116
-
117
- .repo-link:hover,
118
- .nav-lang:hover { color: var(--text); background: #fff; }
119
-
120
- .hero {
121
- display: grid;
122
- grid-template-columns: minmax(0, 1.1fr) minmax(320px, 0.9fr);
123
- gap: 56px;
124
- align-items: center;
125
- padding: 70px 0 42px;
126
- }
127
-
128
- .eyebrow {
129
- display: inline-flex;
130
- align-items: center;
131
- gap: 8px;
132
- background: var(--accent-soft);
133
- border: 1px solid #c8eeee;
134
- border-radius: 999px;
135
- color: var(--accent);
136
- font-size: 0.82rem;
137
- font-weight: 700;
138
- margin-bottom: 22px;
139
- padding: 7px 13px;
140
- }
141
-
142
- .eyebrow::before {
143
- content: "";
144
- width: 7px;
145
- height: 7px;
146
- background: var(--green);
147
- border-radius: 999px;
148
- box-shadow: 0 0 0 4px rgba(22, 163, 74, 0.12);
149
- }
150
-
151
- h1 {
152
- max-width: 720px;
153
- font-size: clamp(2.65rem, 5.8vw, 5.25rem);
154
- letter-spacing: -0.07em;
155
- line-height: 1;
156
- }
157
-
158
- h1 span { color: var(--accent); }
159
-
160
- .lead {
161
- max-width: 640px;
162
- color: var(--muted);
163
- font-size: clamp(1rem, 2vw, 1.18rem);
164
- margin: 24px 0 30px;
165
- }
166
-
167
- .agent-row {
168
- display: flex;
169
- flex-wrap: wrap;
170
- gap: 10px;
171
- margin-bottom: 32px;
172
- }
173
-
174
- .agent-pill {
175
- align-items: center;
176
- background: rgba(255, 255, 255, 0.78);
177
- border: 1px solid var(--border);
178
- border-radius: 999px;
179
- color: #334155;
180
- display: inline-flex;
181
- font-size: 0.92rem;
182
- font-weight: 650;
183
- gap: 8px;
184
- padding: 9px 14px;
185
- }
186
-
187
- .agent-pill::before {
188
- content: "";
189
- width: 8px;
190
- height: 8px;
191
- border-radius: 99px;
192
- background: var(--accent);
193
- }
194
-
195
- .cta-row {
196
- display: flex;
197
- align-items: flex-start;
198
- flex-direction: column;
199
- gap: 14px;
200
- }
201
-
202
- .cta-primary {
203
- align-items: center;
204
- background: var(--text);
205
- border: 0;
206
- border-radius: 14px;
207
- color: #fff;
208
- cursor: pointer;
209
- display: inline-flex;
210
- font: inherit;
211
- font-size: 0.95rem;
212
- font-weight: 700;
213
- gap: 8px;
214
- padding: 13px 18px;
215
- }
216
-
217
- .install-command {
218
- background: #fff;
219
- border: 1px solid var(--border);
220
- border-radius: 14px;
221
- color: #334155;
222
- cursor: pointer;
223
- font-family: Consolas, 'Courier New', monospace;
224
- font-size: 0.9rem;
225
- overflow-x: auto;
226
- padding: 12px 14px;
227
- width: min(100%, 560px);
228
- }
229
-
230
- .install-command span { display: block; white-space: nowrap; }
231
-
232
- .panel {
233
- background: rgba(255, 255, 255, 0.82);
234
- border: 1px solid var(--border);
235
- border-radius: 28px;
236
- box-shadow: 0 24px 80px rgba(15, 23, 42, 0.10);
237
- padding: 18px;
238
- }
239
-
240
- .workspace {
241
- background: #fff;
242
- border: 1px solid var(--border);
243
- border-radius: 22px;
244
- overflow: hidden;
245
- }
246
-
247
- .workspace-top {
248
- align-items: center;
249
- background: var(--surface);
250
- border-bottom: 1px solid var(--border);
251
- color: var(--muted);
252
- display: flex;
253
- font-size: 0.78rem;
254
- font-weight: 700;
255
- justify-content: space-between;
256
- padding: 13px 16px;
257
- }
258
-
259
- .workspace-body {
260
- display: grid;
261
- grid-template-columns: 0.95fr 1.4fr;
262
- min-height: 330px;
263
- }
264
-
265
- .sidebar {
266
- background: #f8fafc;
267
- border-right: 1px solid var(--border);
268
- padding: 16px;
269
- }
270
-
271
- .session {
272
- border: 1px solid transparent;
273
- border-radius: 14px;
274
- color: var(--muted);
275
- font-size: 0.82rem;
276
- margin-bottom: 10px;
277
- padding: 10px;
278
- }
279
-
280
- .session strong { color: var(--text); display: block; font-size: 0.9rem; }
281
- .session.active { background: #fff; border-color: var(--border); box-shadow: 0 8px 24px rgba(15, 23, 42, 0.05); }
282
-
283
- .content { display: flex; flex-direction: column; padding: 16px; gap: 12px; }
284
-
285
- .chat-card, .file-card, .terminal {
286
- border: 1px solid var(--border);
287
- border-radius: 16px;
288
- padding: 14px;
289
- }
290
-
291
- .chat-card { background: linear-gradient(135deg, #eef4ff, #ffffff); }
292
- .chat-card b, .file-card b { display: block; font-size: 0.86rem; margin-bottom: 4px; }
293
- .chat-card p, .file-card p { color: var(--muted); font-size: 0.82rem; }
294
-
295
- .terminal {
296
- background: var(--code);
297
- color: #dbeafe;
298
- cursor: pointer;
299
- font-family: Consolas, 'Courier New', monospace;
300
- font-size: 0.78rem;
301
- line-height: 1.8;
302
- }
303
-
304
- .terminal span { color: #86efac; }
305
-
306
- .section-head {
307
- margin: 72px auto 26px;
308
- max-width: 680px;
309
- text-align: center;
310
- }
311
-
312
- .section-head h2 {
313
- font-size: clamp(1.8rem, 3.6vw, 3rem);
314
- letter-spacing: -0.05em;
315
- line-height: 1.12;
316
- }
317
-
318
- .section-head p {
319
- color: var(--muted);
320
- margin-top: 12px;
321
- }
322
-
323
- .features {
324
- display: grid;
325
- gap: 16px;
326
- grid-template-columns: repeat(4, 1fr);
327
- }
328
-
329
- .feature-card {
330
- background: var(--card);
331
- border: 1px solid var(--border);
332
- border-radius: 22px;
333
- padding: 22px;
334
- }
335
-
336
- .feature-card h3 {
337
- font-size: 1rem;
338
- letter-spacing: -0.02em;
339
- margin: 14px 0 7px;
340
- }
341
-
342
- .feature-card p {
343
- color: var(--muted);
344
- font-size: 0.9rem;
345
- }
346
-
347
- .feature-icon {
348
- align-items: center;
349
- background: var(--accent-soft);
350
- border-radius: 14px;
351
- color: var(--accent);
352
- display: flex;
353
- height: 42px;
354
- justify-content: center;
355
- width: 42px;
356
- }
357
-
358
- .feature-icon svg {
359
- fill: none;
360
- height: 21px;
361
- stroke: currentColor;
362
- stroke-linecap: round;
363
- stroke-linejoin: round;
364
- stroke-width: 2;
365
- width: 21px;
366
- }
367
-
368
- .security {
369
- align-items: center;
370
- background: #0f172a;
371
- border-radius: 28px;
372
- color: #fff;
373
- display: grid;
374
- gap: 28px;
375
- grid-template-columns: 1.1fr 0.9fr;
376
- margin-top: 18px;
377
- padding: 30px;
378
- }
379
-
380
- .security h2 { font-size: clamp(1.6rem, 3vw, 2.5rem); letter-spacing: -0.05em; line-height: 1.12; }
381
- .security p { color: #b6c3d7; margin-top: 12px; }
382
-
383
- .encrypt-flow {
384
- background: rgba(255, 255, 255, 0.06);
385
- border: 1px solid rgba(255, 255, 255, 0.12);
386
- border-radius: 20px;
387
- color: #cbd5e1;
388
- display: grid;
389
- font-family: Consolas, 'Courier New', monospace;
390
- gap: 10px;
391
- padding: 16px;
392
- }
393
-
394
- .encrypt-flow div {
395
- align-items: center;
396
- display: flex;
397
- justify-content: space-between;
398
- gap: 14px;
399
- }
400
-
401
- .encrypt-flow span:last-child { color: #86efac; }
402
-
403
- footer {
404
- border-top: 1px solid var(--border);
405
- color: var(--muted);
406
- display: flex;
407
- font-size: 0.86rem;
408
- justify-content: space-between;
409
- margin-top: 76px;
410
- padding: 28px 0;
411
- }
412
-
413
- .toast {
414
- background: var(--text);
415
- border-radius: 999px;
416
- bottom: 24px;
417
- color: #fff;
418
- font-size: 0.84rem;
419
- font-weight: 700;
420
- left: 50%;
421
- opacity: 0;
422
- padding: 10px 18px;
423
- pointer-events: none;
424
- position: fixed;
425
- transform: translate(-50%, 16px);
426
- transition: opacity 0.22s, transform 0.22s;
427
- }
428
-
429
- .toast.show { opacity: 1; transform: translate(-50%, 0); }
430
-
431
- @media (max-width: 900px) {
432
- .hero, .security { grid-template-columns: 1fr; }
433
- .hero { padding-top: 44px; }
434
- .features { grid-template-columns: repeat(2, 1fr); }
435
- }
436
-
437
- @media (max-width: 620px) {
438
- nav, main, footer { width: min(100% - 24px, 1120px); }
439
- h1 { font-size: clamp(2.35rem, 15vw, 4rem); }
440
- .workspace-body { grid-template-columns: 1fr; }
441
- .sidebar { border-right: 0; border-bottom: 1px solid var(--border); }
442
- .features { grid-template-columns: 1fr; }
443
- .security { padding: 22px; }
444
- footer { flex-direction: column; gap: 8px; }
445
- }
446
- </style>
4
+ <meta charset="UTF-8">
5
+ <meta name="viewport" content="width=device-width, initial-scale=1.0">
6
+ <title>msclaude — 远程控制开发机上的 Coding Agent</title>
7
+ <meta name="description" content="在浏览器中远程控制开发机上的 Pi、GitHub Copilot、Claude Code OpenAI Codex,并行管理多个工作目录,支持端到端加密和自托管中继。">
8
+ <meta name="robots" content="index, follow, max-image-preview:large">
9
+ <meta name="application-name" content="msclaude">
10
+ <meta name="theme-color" content="#f2efe8">
11
+ <link rel="canonical" href="https://msclaude.ai/zh">
12
+ <link rel="alternate" hreflang="en" href="https://msclaude.ai/">
13
+ <link rel="alternate" hreflang="zh-CN" href="https://msclaude.ai/zh">
14
+ <link rel="alternate" hreflang="x-default" href="https://msclaude.ai/">
15
+ <meta property="og:type" content="website">
16
+ <meta property="og:site_name" content="msclaude">
17
+ <meta property="og:locale" content="zh_CN">
18
+ <meta property="og:locale:alternate" content="en_US">
19
+ <meta property="og:title" content="msclaude — 远程控制开发机上的 Coding Agent">
20
+ <meta property="og:description" content="在一个浏览器工作台中使用多个 Agent 和工作目录。代码和执行环境仍然保留在开发机上。">
21
+ <meta property="og:url" content="https://msclaude.ai/zh">
22
+ <meta property="og:image" content="https://msclaude.ai/iPad.png">
23
+ <meta property="og:image:alt" content="展示多个 Coding Agent 并行会话的 msclaude 浏览器工作台">
24
+ <meta name="twitter:card" content="summary_large_image">
25
+ <meta name="twitter:title" content="msclaude — 远程控制开发机上的 Coding Agent">
26
+ <meta name="twitter:description" content="在浏览器中管理开发机上的 Pi、Copilot、Claude Code 和 Codex 会话。">
27
+ <meta name="twitter:image" content="https://msclaude.ai/iPad.png">
28
+ <meta name="twitter:image:alt" content="展示多个 Coding Agent 并行会话的 msclaude 浏览器工作台">
29
+ <link rel="icon" type="image/svg+xml" href="/favicon.svg">
30
+ <link rel="icon" type="image/png" sizes="32x32" href="/favicon-32x32.png">
31
+ <link rel="apple-touch-icon" sizes="180x180" href="/apple-touch-icon.png">
32
+ <link rel="manifest" href="/site.webmanifest">
33
+ <link rel="preload" href="/vendor/SpaceGrotesk-latin.woff2" as="font" type="font/woff2" crossorigin>
34
+ <link rel="stylesheet" href="/landing/landing.css">
35
+ <script src="/landing/landing.js" defer></script>
36
+ <script type="application/ld+json">
37
+ {
38
+ "@context": "https://schema.org",
39
+ "@type": "SoftwareApplication",
40
+ "name": "msclaude",
41
+ "url": "https://msclaude.ai/zh",
42
+ "description": "用于远程控制开发机上 Coding Agent 的浏览器工作台。",
43
+ "applicationCategory": "DeveloperApplication",
44
+ "operatingSystem": "Windows, macOS, Linux",
45
+ "isAccessibleForFree": true,
46
+ "downloadUrl": "https://www.npmjs.com/package/@agent-link/agent",
47
+ "softwareRequirements": "Node.js 18 或更高版本",
48
+ "featureList": [
49
+ "并行管理多个 Coding Agent 会话",
50
+ "支持多个工作目录",
51
+ "支持 Pi、GitHub Copilot、Claude Code OpenAI Codex",
52
+ "文件、Git、终端和本地端口访问",
53
+ "消息端到端加密",
54
+ "支持自托管中继服务"
55
+ ],
56
+ "offers": {
57
+ "@type": "Offer",
58
+ "price": "0",
59
+ "priceCurrency": "USD"
60
+ },
61
+ "sameAs": [
62
+ "https://github.com/kailunshi_microsoft/AgenticWorker",
63
+ "https://www.npmjs.com/package/@agent-link/agent"
64
+ ]
65
+ }
66
+ </script>
447
67
  </head>
448
- <body>
449
- <header>
450
- <nav>
451
- <a class="logo" href="/zh">
452
- <img src="/favicon.svg" alt="msclaude">
453
- <span>msclaude</span>
454
- </a>
455
- <div class="nav-actions">
456
- <a href="https://github.com/kailunshi_microsoft/AgenticWorker" class="repo-link" rel="noopener">GitHub</a>
457
- <a href="/" class="nav-lang">EN</a>
458
- </div>
459
- </nav>
460
- </header>
461
-
462
- <main>
463
- <section class="hero">
464
- <div>
465
- <div class="eyebrow">Coding Agent 的远程工作台</div>
466
- <h1>你的 Agent,<br><span>随时打开。</span></h1>
467
- <p class="lead">msclaude 把本地项目连接到私有 Web 工作台,让你可以在任何设备上操控 Copilot、Claude Code、Codex 和更多 Agent。</p>
468
- <div class="agent-row" aria-label="支持的 Agent">
469
- <span class="agent-pill">GitHub Copilot</span>
470
- <span class="agent-pill">Claude Code</span>
471
- <span class="agent-pill">OpenAI Codex</span>
472
- <span class="agent-pill">更多 Agent 后端</span>
68
+ <body
69
+ data-install-command="npm install -g @agent-link/agent &amp;&amp; agentlink-client start --daemon"
70
+ data-copy-success="安装命令已复制"
71
+ data-copy-failure="复制失败,请手动选择命令"
72
+ >
73
+ <a class="skip-link" href="#main">跳到正文</a>
74
+
75
+ <header class="site-header">
76
+ <nav class="nav-shell" aria-label="主导航">
77
+ <a class="brand" href="/zh" aria-label="msclaude 首页">
78
+ <img class="brand-mark" src="/landing/icons/msclaude-animated.svg" alt="">
79
+ <span>msclaude</span>
80
+ </a>
81
+ <div class="nav-actions">
82
+ <a class="text-link github-link" href="https://github.com/kailunshi_microsoft/AgenticWorker" target="_blank" rel="noopener">GitHub</a>
83
+ <a class="language-link" href="/" lang="en" hreflang="en">EN</a>
473
84
  </div>
474
- <div class="cta-row">
475
- <button class="cta-primary" onclick="copyInstall()">
476
- <svg width="17" height="17" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true"><polyline points="4 17 10 11 4 5"></polyline><line x1="12" y1="19" x2="20" y2="19"></line></svg>
477
- 复制安装命令
478
- </button>
479
- <code class="install-command" onclick="copyInstall()">
480
- <span>npm install -g @agent-link/agent</span>
481
- <span>agentlink-client start -D --entra</span>
482
- </code>
85
+ </nav>
86
+ </header>
87
+
88
+ <main id="main">
89
+ <section class="hero" aria-labelledby="hero-title">
90
+ <div class="hero-copy">
91
+ <p class="eyebrow"><span></span> 开源的本地 Agent 远程工作台</p>
92
+ <h1 id="hero-title">在浏览器中远程控制开发机上的 <em>Coding Agent。</em></h1>
93
+ <p class="hero-lead">msclaude 将浏览器连接到本地运行的 Coding Agent。你可以从其他设备继续开发工作,代码、工具和执行环境仍然保留在自己的机器上。</p>
94
+
95
+ <div class="agent-list" aria-label="支持的 Coding Agent">
96
+ <span><i class="provider-icon"><img src="/landing/icons/agent-pi.svg" alt=""></i> Pi</span>
97
+ <span><i class="provider-icon"><img src="/landing/icons/agent-copilot.svg" alt=""></i> GitHub Copilot</span>
98
+ <span><i class="provider-icon"><img src="/landing/icons/agent-claude.svg" alt=""></i> Claude Code</span>
99
+ <span><i class="provider-icon"><img src="/landing/icons/agent-codex.svg" alt=""></i> OpenAI Codex</span>
100
+ </div>
101
+
102
+ <div class="hero-actions">
103
+ <button class="install-command" type="button" data-copy-install>
104
+ <span class="install-prompt" aria-hidden="true">$</span>
105
+ <code><span>npm install -g @agent-link/agent</span><span>agentlink-client start --daemon</span></code>
106
+ <span class="copy-label">复制</span>
107
+ </button>
108
+ </div>
109
+ <p class="compatibility">Windows · macOS · Linux · Node.js 18+</p>
483
110
  </div>
484
- </div>
485
111
 
486
- <div class="panel" aria-label="msclaude 工作台预览">
487
- <div class="workspace">
488
- <div class="workspace-top">
489
- <span>msclaude.ai/s/abc123</span>
490
- <span>端到端加密</span>
112
+ <div class="product-window" aria-label="并行 Coding Agent 会话示意图">
113
+ <div class="window-bar">
114
+ <span class="window-dots" aria-hidden="true"><i></i><i></i><i></i></span>
115
+ <span>msclaude · 4 个会话</span>
116
+ <span class="encrypted-label">● 端到端加密</span>
491
117
  </div>
492
- <div class="workspace-body">
493
- <div class="sidebar">
494
- <div class="session active"><strong>Q:\src\msclaude</strong>Copilot 修改 UI 文案</div>
495
- <div class="session"><strong>D:\work\api</strong>Claude Code Review Diff</div>
496
- <div class="session"><strong>C:\repo\mobile</strong>Codex 总结截图</div>
497
- <div class="session"><strong>C:\repo\mobile</strong>终端与文件编辑</div>
498
- </div>
499
- <div class="content">
500
- <div class="chat-card">
501
- <b>Agent 对话</b>
502
- <p>发起改动、Review 方案,并让每个目录保留独立上下文。</p>
503
- </div>
504
- <div class="file-card">
505
- <b>文件预览 / 编辑</b>
506
- <p>浏览项目文件、查看内容,并在 Web UI 中完成精准修改。</p>
118
+ <div class="provider-switcher" aria-label="四个支持的 Agent">
119
+ <span class="provider-switcher-label">本页运行的 Agent</span>
120
+ <span class="active"><i class="provider-icon"><img src="/landing/icons/agent-pi.svg" alt=""></i>Pi <b>1</b></span>
121
+ <span><i class="provider-icon"><img src="/landing/icons/agent-copilot.svg" alt=""></i>Copilot <b>1</b></span>
122
+ <span><i class="provider-icon"><img src="/landing/icons/agent-claude.svg" alt=""></i>Claude Code <b>1</b></span>
123
+ <span><i class="provider-icon"><img src="/landing/icons/agent-codex.svg" alt=""></i>Codex <b>1</b></span>
124
+ </div>
125
+ <div class="workspace-ui">
126
+ <aside class="session-sidebar">
127
+ <div class="sidebar-title"><strong>会话</strong><span>+</span></div>
128
+ <div class="directory-label">Q:\src\frontend</div>
129
+ <div class="session-row active"><i class="provider-icon"><img src="/landing/icons/agent-pi.svg" alt=""></i><span><strong>修改主页文案</strong><small>Pi · 处理中</small></span><b></b></div>
130
+ <div class="session-row"><i class="provider-icon"><img src="/landing/icons/agent-copilot.svg" alt=""></i><span><strong>修复登录回调</strong><small>Copilot · 已完成</small></span></div>
131
+ <div class="directory-label">D:\work\api</div>
132
+ <div class="session-row"><i class="provider-icon"><img src="/landing/icons/agent-claude.svg" alt=""></i><span><strong>Review API 改动</strong><small>Claude Code · 处理中</small></span><b></b></div>
133
+ <div class="session-row"><i class="provider-icon"><img src="/landing/icons/agent-codex.svg" alt=""></i><span><strong>更新单元测试</strong><small>Codex · 已完成</small></span></div>
134
+ </aside>
135
+ <div class="chat-ui">
136
+ <div class="chat-head">
137
+ <div><strong>修改主页文案</strong><small>Q:\src\frontend · Pi</small></div>
138
+ <div class="chat-actions"><span>文件</span><span>Git</span><span>终端</span></div>
507
139
  </div>
508
- <div class="terminal" onclick="copyCmd('agentlink-client start -D --entra')">
509
- $ <span>agentlink-client start -D --entra</span>
140
+ <div class="chat-body">
141
+ <div class="message user-message">修改主页文案,并保持页面紧凑。</div>
142
+ <div class="message agent-message">
143
+ <span class="message-author"><i class="provider-icon"><img src="/landing/icons/agent-pi.svg" alt=""></i> Pi</span>
144
+ <p>我会更新产品描述,展示支持的 Agent,并把主要内容控制在两屏以内。</p>
145
+ <div class="tool-call"><span>✓</span><div><strong>apply_patch</strong><small>已更新 landing.html 和 landing.css</small></div></div>
146
+ </div>
510
147
  </div>
148
+ <div class="chat-input"><span>继续给 Pi 发送指令...</span><button aria-label="发送消息">↑</button></div>
511
149
  </div>
512
150
  </div>
513
151
  </div>
514
- </div>
515
- </section>
516
-
517
- <section aria-labelledby="features-title">
518
- <div class="section-head">
519
- <h2 id="features-title">远程使用 Agent 需要的能力,都在这里。</h2>
520
- <p>界面保持克制,只保留让 Agent 真正处理项目所需的关键工具。</p>
521
- </div>
152
+ </section>
153
+
154
+ <section class="capabilities" id="sessions" aria-labelledby="capabilities-title">
155
+ <div class="section-intro">
156
+ <p class="section-label">工作台</p>
157
+ <div>
158
+ <h2 id="capabilities-title">在一个页面中管理多个 Agent 和项目。</h2>
159
+ <p>同时查看不同 Agent 和工作目录中的会话。无需在多个终端或浏览器标签页之间切换,即可检查进度并发送后续指令。</p>
160
+ </div>
161
+ </div>
522
162
 
523
- <div class="features">
524
- <article class="feature-card">
525
- <div class="feature-icon"><svg viewBox="0 0 24 24"><path d="M4 6h16M4 12h16M4 18h10"></path></svg></div>
526
- <h3>多目录会话管理</h3>
527
- <p>为多个本地工作目录维护独立会话、上下文和 Agent 状态。</p>
528
- </article>
529
- <article class="feature-card">
530
- <div class="feature-icon"><svg viewBox="0 0 24 24"><path d="M14 2H6a2 2 0 0 0-2 2v16a2 2 0 0 0 2 2h12a2 2 0 0 0 2-2V8z"></path><path d="M14 2v6h6"></path></svg></div>
531
- <h3>文件预览 / 编辑</h3>
532
- <p>浏览项目文件、预览内容,并直接在浏览器里进行修改。</p>
163
+ <div class="capability-grid">
164
+ <article class="capability-card sessions-card">
165
+ <div class="card-icon">▦</div>
166
+ <div>
167
+ <h3>并行会话</h3>
168
+ <p>并行运行多个 Agent 会话,按工作目录组织,并随时搜索以前的对话。</p>
169
+ </div>
170
+ <div class="session-stack" aria-hidden="true">
171
+ <span><i class="provider-icon"><img src="/landing/icons/agent-pi.svg" alt=""></i><b>Pi</b><small>Q:\src\frontend</small><em>处理中</em></span>
172
+ <span><i class="provider-icon"><img src="/landing/icons/agent-claude.svg" alt=""></i><b>Claude Code</b><small>D:\work\api</small><em>处理中</em></span>
173
+ <span><i class="provider-icon"><img src="/landing/icons/agent-codex.svg" alt=""></i><b>Codex</b><small>C:\repo\mobile</small><em>已完成</em></span>
174
+ </div>
175
+ </article>
176
+
177
+ <article class="capability-card tools-card" id="tools">
178
+ <div class="card-icon">&gt;_</div>
179
+ <h3>对话与开发工具</h3>
180
+ <p>对话是主要操作方式。需要更多上下文或控制时,项目工具会直接显示在会话旁边。</p>
181
+ <ul class="tool-list">
182
+ <li>文件 <small>浏览、预览、编辑</small></li>
183
+ <li>Git <small>状态与 Diff</small></li>
184
+ <li>终端 <small>运行本地命令</small></li>
185
+ <li>Port Proxy <small>打开本地服务</small></li>
186
+ </ul>
187
+ </article>
188
+
189
+ <article class="capability-card steps-card">
190
+ <p class="section-label">工作原理</p>
191
+ <ol>
192
+ <li><span>1</span><div><strong>从本地启动</strong><small>在一个工作目录中运行 msclaude。</small></div></li>
193
+ <li><span>2</span><div><strong>打开会话链接</strong><small>在其他设备上打开生成的网址。</small></div></li>
194
+ <li><span>3</span><div><strong>继续开发</strong><small>远程使用对话、文件、Git 和终端。</small></div></li>
195
+ </ol>
196
+ </article>
197
+ </div>
198
+ </section>
199
+
200
+ <section class="trust-section" aria-label="安全与自托管">
201
+ <article class="trust-card" id="security">
202
+ <div>
203
+ <p class="section-label">端到端加密</p>
204
+ <h2>中继无法读取你的工作内容。</h2>
205
+ <p>浏览器与本地 Agent 之间的消息采用端到端加密。中继无法读取 Prompt、回复、工具输出或文件内容。代码和执行始终保留在开发机上。</p>
206
+ </div>
533
207
  </article>
534
- <article class="feature-card">
535
- <div class="feature-icon"><svg viewBox="0 0 24 24"><path d="m4 17 6-6-6-6"></path><path d="M12 19h8"></path></svg></div>
536
- <h3>远程终端</h3>
537
- <p>执行项目命令、查看输出,不用 SSH 或远程桌面也能排查问题。</p>
208
+ <article class="trust-card">
209
+ <div>
210
+ <p class="section-label">多设备访问</p>
211
+ <h2>从常用设备继续 Agent 会话。</h2>
212
+ <p>在电脑、平板或手机的浏览器中打开同一个会话链接,查看执行进度、发送后续指令,并使用相关开发工具。</p>
213
+ </div>
538
214
  </article>
539
- <article class="feature-card">
540
- <div class="feature-icon"><svg viewBox="0 0 24 24"><rect x="3" y="11" width="18" height="10" rx="2"></rect><path d="M7 11V7a5 5 0 0 1 10 0v4"></path></svg></div>
541
- <h3>端到端加密</h3>
542
- <p>浏览器和本地 Agent 之间端到端加密,中继服务只转发密文。</p>
215
+ <article class="trust-card" id="self-hosting">
216
+ <div>
217
+ <p class="section-label">自托管</p>
218
+ <h2>轻松部署自己的中继服务。</h2>
219
+ <p>使用托管中继最简单,但不是必需条件。轻量的 msclaude 中继可以部署到自己的基础设施,并保留相同的浏览器体验和加密机制。</p>
220
+ </div>
543
221
  </article>
544
- </div>
545
- </section>
546
-
547
- <section class="security" aria-label="安全">
548
- <div>
549
- <h2>默认保护你的代码。</h2>
550
- <p>代码仍然留在本机。msclaude 只建立安全的浏览器访问通道,项目文件、命令执行和凭据都由本地 Agent 控制。</p>
551
- </div>
552
- <div class="encrypt-flow">
553
- <div><span>browser</span><span>sealed message</span></div>
554
- <div><span>relay</span><span>ciphertext only</span></div>
555
- <div><span>local agent</span><span>decrypted locally</span></div>
556
- </div>
557
- </section>
558
- </main>
559
-
560
- <footer>
561
- <span><strong>msclaude</strong></span>
562
- <span>
563
- <a href="https://github.com/kailunshi_microsoft/AgenticWorker" rel="noopener">GitHub</a>
564
- ·
565
- <a href="https://www.linkedin.com/in/shikailun/" rel="noopener">LinkedIn</a>
566
- </span>
567
- </footer>
568
-
569
- <div class="toast" id="copyToast">已复制到剪贴板</div>
570
-
571
- <script>
572
- function copyCmd(text) {
573
- navigator.clipboard.writeText(text);
574
- showToast();
575
- }
222
+ </section>
223
+ </main>
576
224
 
577
- function copyInstall() {
578
- copyCmd('npm install -g @agent-link/agent && agentlink-client start -D --entra');
579
- }
225
+ <footer class="site-footer">
226
+ <a class="brand footer-brand" href="/zh"><img class="brand-mark" src="/landing/icons/msclaude-animated.svg" alt=""><span>msclaude</span></a>
227
+ <p>远程使用开发机上运行的 Coding Agent。</p>
228
+ <div><a href="https://github.com/kailunshi_microsoft/AgenticWorker" target="_blank" rel="noopener">GitHub</a><a href="/" lang="en" hreflang="en">EN</a></div>
229
+ </footer>
580
230
 
581
- function showToast() {
582
- const toast = document.getElementById('copyToast');
583
- toast.classList.add('show');
584
- setTimeout(() => toast.classList.remove('show'), 1800);
585
- }
586
- </script>
231
+ <div class="toast" role="status" aria-live="polite">安装命令已复制</div>
587
232
  </body>
588
233
  </html>