bookworm-boot/guide-unified.html
bookworm d11b36f815 fix: DPAPI凭证加密 + pwsh7路径凭证注入 + PS5.1双调用优化 + assets追踪
- install.ps1: Save-SecretsToCache 改用真正 DPAPI 加密 (System.Security.ProtectedData)
  增加 GEMINI_API_KEY 到缓存键列表
- install.ps1: Get-CachedSecrets DPAPI 解密 + 旧版明文缓存向后兼容
- 启动Bookworm.bat: pwsh7路径启动 claude 前从注册表加载 DPAPI 加密凭证
- 更新并启动Bookworm.bat: 同上 + PS5.1 回退路径从2次调用精简为1次
- assets/: 纳入版本管理 (favicon-32.png / logo-200x200.png / logo-dark.svg)
- HTML: 同步 download/guide-mac/guide-unified/guide 页面更新

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-04-06 21:49:50 +08:00

1320 lines
62 KiB
HTML
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

<!DOCTYPE html>
<html lang="zh-CN">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Bookworm Portable - 保姆式安装手册 (Windows + macOS)</title>
<link rel="icon" type="image/png" sizes="32x32" href="assets/favicon-32.png">
<style>
:root {
--bg: #0d1117;
--card: #161b22;
--border: #30363d;
--text: #e6edf3;
--text-dim: #8b949e;
--accent: #58a6ff;
--green: #3fb950;
--yellow: #d29922;
--red: #f85149;
--purple: #bc8cff;
--cyan: #39d2c0;
--win-color: #0078d4;
--mac-color: #999999;
}
* { margin: 0; padding: 0; box-sizing: border-box; }
body {
background: var(--bg);
color: var(--text);
font-family: -apple-system, 'Segoe UI', 'PingFang SC', 'Microsoft YaHei', 'Helvetica Neue', sans-serif;
line-height: 1.7;
padding: 0;
}
a { color: var(--accent); text-decoration: none; }
a:hover { text-decoration: underline; }
/* ===== HEADER ===== */
.header {
background: linear-gradient(135deg, #1a1f35 0%, #0d1117 100%);
border-bottom: 1px solid var(--border);
padding: 3rem 2rem 2rem;
text-align: center;
}
.header pre {
color: var(--cyan);
font-size: 0.65rem;
line-height: 1.2;
margin-bottom: 1rem;
display: inline-block;
text-align: left;
font-family: 'Cascadia Code', 'Fira Code', 'Consolas', monospace;
}
.header h1 { font-size: 2rem; font-weight: 700; margin-bottom: 0.5rem; }
.header h1 span { color: var(--accent); }
.header p { color: var(--text-dim); font-size: 1.05rem; margin-bottom: 0.8rem; }
.badge-row { display: flex; gap: 0.8rem; justify-content: center; margin-top: 0.8rem; flex-wrap: wrap; }
.badge {
display: inline-flex; align-items: center; gap: 0.4rem;
background: var(--card); border: 1px solid var(--border);
border-radius: 20px; padding: 0.3rem 0.9rem; font-size: 0.85rem; color: var(--text-dim);
}
.badge strong { color: var(--text); }
/* ===== PLATFORM DETECTION BADGE ===== */
.detect-badge {
display: inline-flex; align-items: center; gap: 0.5rem;
background: rgba(88,166,255,0.12); border: 1px solid rgba(88,166,255,0.3);
border-radius: 20px; padding: 0.4rem 1rem; font-size: 0.9rem;
color: var(--accent); margin-bottom: 1rem;
}
.detect-badge .dot {
width: 8px; height: 8px; border-radius: 50%; background: var(--green);
animation: pulse 2s infinite;
}
@keyframes pulse {
0%, 100% { opacity: 1; }
50% { opacity: 0.4; }
}
/* ===== TAB SWITCHER ===== */
.platform-tabs {
display: flex; gap: 0.6rem; justify-content: center; margin: 1rem 0;
}
.tab-btn {
display: inline-flex; align-items: center; gap: 0.5rem;
padding: 0.55rem 1.5rem; border-radius: 8px; font-size: 0.95rem;
font-weight: 600; cursor: pointer; border: none; transition: all 0.2s;
font-family: inherit;
}
.tab-btn.active {
background: var(--accent); color: #000;
}
.tab-btn.inactive {
background: var(--card); color: var(--text-dim);
border: 1px solid var(--border);
}
.tab-btn.inactive:hover {
border-color: var(--accent); color: var(--text);
}
/* ===== PLATFORM TAG INDICATORS ===== */
.platform-tag {
display: inline-block; font-size: 0.68rem; font-weight: 700;
padding: 0.1rem 0.45rem; border-radius: 4px; margin-left: 0.4rem;
vertical-align: middle; letter-spacing: 0.3px;
}
.tag-win {
background: rgba(0,120,212,0.18); border: 1px solid rgba(0,120,212,0.4);
color: #69b4ff;
}
.tag-mac {
background: rgba(153,153,153,0.15); border: 1px solid rgba(153,153,153,0.35);
color: #bbb;
}
.tag-both {
background: rgba(63,185,80,0.12); border: 1px solid rgba(63,185,80,0.3);
color: var(--green);
}
/* ===== MAIN CONTAINER ===== */
.container { max-width: 920px; margin: 0 auto; padding: 2rem 1.5rem 4rem; }
.section { margin-bottom: 2.5rem; }
.section h2 {
font-size: 1.4rem; margin-bottom: 1rem; padding-bottom: 0.5rem;
border-bottom: 1px solid var(--border); display: flex; align-items: center; gap: 0.6rem;
}
.section h2 .num {
background: var(--accent); color: #000; width: 28px; height: 28px;
border-radius: 50%; display: inline-flex; align-items: center; justify-content: center;
font-size: 0.85rem; font-weight: 700; flex-shrink: 0;
}
.section h2 .num.green { background: var(--green); }
.section h2 .num.yellow { background: var(--yellow); }
.section h2 .num.red { background: var(--red); }
/* ===== CODE BLOCKS ===== */
.code-block {
background: #0d1117; border: 1px solid var(--border); border-radius: 8px;
padding: 1rem 1.2rem; margin: 0.8rem 0; overflow-x: auto; position: relative;
cursor: pointer; transition: border-color 0.2s;
}
.code-block:hover { border-color: var(--accent); }
.code-block::after {
content: "点击复制"; position: absolute; top: 0.4rem; right: 0.6rem;
font-size: 0.7rem; color: var(--text-dim); background: var(--card);
padding: 0.15rem 0.5rem; border-radius: 4px; border: 1px solid var(--border);
opacity: 0; transition: opacity 0.2s;
}
.code-block:hover::after { opacity: 1; }
.code-block.copied::after { content: "已复制!"; color: var(--green); opacity: 1; }
.code-block code {
font-family: 'Cascadia Code', 'SF Mono', 'Fira Code', 'Consolas', 'Menlo', monospace;
font-size: 0.9rem; line-height: 1.6; color: var(--text);
white-space: pre-wrap; word-break: break-all;
}
.code-block .label {
position: absolute; top: 0.4rem; left: 0.6rem;
font-size: 0.65rem; color: var(--text-dim); background: var(--card);
padding: 0.1rem 0.5rem; border-radius: 4px; border: 1px solid var(--border);
text-transform: uppercase; letter-spacing: 0.5px;
}
.code-block.has-label { padding-top: 2rem; }
.cmd { color: var(--green); }
.flag { color: var(--yellow); }
.url { color: var(--accent); }
.comment { color: var(--text-dim); }
/* ===== CARDS ===== */
.card {
background: var(--card); border: 1px solid var(--border);
border-radius: 10px; padding: 1.2rem 1.5rem; margin: 0.8rem 0;
}
.card h3 { font-size: 1rem; margin-bottom: 0.5rem; color: var(--accent); }
.card p { color: var(--text-dim); font-size: 0.95rem; }
/* ===== HIGHLIGHT BOX ===== */
.highlight-box {
background: var(--card); border: 1px solid var(--green);
border-radius: 10px; padding: 1.5rem; margin: 1rem 0; text-align: center;
box-shadow: 0 0 20px rgba(63,185,80,0.08);
}
.highlight-box h3 { color: var(--green); font-size: 1.1rem; margin-bottom: 0.6rem; }
.highlight-box p { color: var(--text-dim); font-size: 0.9rem; }
/* ===== STEPS ===== */
.step { display: flex; gap: 1rem; margin: 1.2rem 0; align-items: flex-start; }
.step-icon {
width: 40px; height: 40px; border-radius: 10px;
display: flex; align-items: center; justify-content: center;
font-size: 1.1rem; font-weight: 700; flex-shrink: 0; margin-top: 0.1rem;
}
.step-icon.green { background: rgba(63,185,80,0.15); border: 1px solid rgba(63,185,80,0.3); color: var(--green); }
.step-icon.blue { background: rgba(88,166,255,0.15); border: 1px solid rgba(88,166,255,0.3); color: var(--accent); }
.step-icon.yellow { background: rgba(210,153,34,0.15); border: 1px solid rgba(210,153,34,0.3); color: var(--yellow); }
.step-icon.red { background: rgba(248,81,73,0.15); border: 1px solid rgba(248,81,73,0.3); color: var(--red); }
.step-icon.purple { background: rgba(188,140,255,0.15); border: 1px solid rgba(188,140,255,0.3); color: var(--purple); }
.step-content { flex: 1; }
.step-content h4 { font-size: 1.05rem; margin-bottom: 0.3rem; }
.step-content p { color: var(--text-dim); font-size: 0.9rem; }
/* ===== TABLES ===== */
table { width: 100%; border-collapse: collapse; margin: 0.8rem 0; font-size: 0.9rem; }
th, td { padding: 0.6rem 1rem; text-align: left; border-bottom: 1px solid var(--border); }
th { color: var(--text-dim); font-weight: 600; font-size: 0.8rem; text-transform: uppercase; letter-spacing: 0.5px; }
td code { background: var(--bg); padding: 0.15rem 0.4rem; border-radius: 4px; font-size: 0.85rem; border: 1px solid var(--border); font-family: 'Cascadia Code', 'SF Mono', 'Consolas', monospace; }
/* ===== ALERTS ===== */
.alert {
border-radius: 8px; padding: 1rem 1.2rem; margin: 1rem 0;
font-size: 0.9rem; display: flex; gap: 0.8rem; align-items: flex-start;
}
.alert-icon { font-size: 1.2rem; flex-shrink: 0; line-height: 1.5; }
.alert.warning { background: rgba(210,153,34,0.08); border: 1px solid rgba(210,153,34,0.3); }
.alert.danger { background: rgba(248,81,73,0.08); border: 1px solid rgba(248,81,73,0.3); }
.alert.info { background: rgba(88,166,255,0.08); border: 1px solid rgba(88,166,255,0.3); }
.alert.success { background: rgba(63,185,80,0.08); border: 1px solid rgba(63,185,80,0.3); }
/* ===== CHECKLIST ===== */
.checklist { list-style: none; padding: 0; }
.checklist li {
padding: 0.5rem 0; padding-left: 2rem; position: relative;
border-bottom: 1px solid rgba(48,54,61,0.5); color: var(--text-dim);
}
.checklist li::before {
content: ""; position: absolute; left: 0; top: 0.65rem;
width: 18px; height: 18px; border: 2px solid var(--border); border-radius: 4px;
}
.checklist li.done::before {
background: var(--green); border-color: var(--green);
content: ""; background-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24' fill='white'%3E%3Cpath d='M9 16.17L4.83 12l-1.42 1.41L9 19 21 7l-1.41-1.41z'/%3E%3C/svg%3E");
background-size: 14px; background-position: center; background-repeat: no-repeat;
}
.checklist li.done { color: var(--text); }
.checklist li strong { color: var(--text); }
/* ===== FLOW DIAGRAM ===== */
.flow {
display: flex; align-items: center; justify-content: center;
gap: 0; margin: 1.5rem 0; flex-wrap: wrap;
}
.flow-node {
background: var(--card); border: 1px solid var(--border); border-radius: 8px;
padding: 0.6rem 1rem; font-size: 0.85rem; text-align: center; min-width: 100px;
}
.flow-node.active { border-color: var(--green); box-shadow: 0 0 8px rgba(63,185,80,0.2); }
.flow-arrow { color: var(--text-dim); font-size: 1.2rem; padding: 0 0.3rem; }
/* ===== SCREENSHOT NOTE ===== */
.screenshot-note {
background: var(--card); border: 1px solid var(--border); border-radius: 8px;
padding: 0.8rem 1rem; margin: 0.5rem 0; font-size: 0.85rem; color: var(--text-dim);
border-left: 3px solid var(--yellow);
}
.screenshot-note strong { color: var(--yellow); }
/* ===== SECTION DIVIDER ===== */
.platform-divider {
border: none; border-top: 1px dashed var(--border);
margin: 1.5rem 0;
}
/* ===== FOOTER ===== */
.footer {
text-align: center; padding: 2rem; color: var(--text-dim);
font-size: 0.8rem; border-top: 1px solid var(--border);
}
/* ===== DOWNLOAD BUTTONS ===== */
.dl-btn {
display: inline-block; margin-top: 1.2rem; padding: 0.7rem 2rem;
background: var(--accent); color: #000; font-weight: 700; border-radius: 8px;
font-size: 1rem; text-decoration: none; transition: opacity 0.2s;
font-family: inherit;
}
.dl-btn:hover { opacity: 0.85; text-decoration: none; }
/* ===== RESPONSIVE ===== */
@media (max-width: 640px) {
.header { padding: 2rem 1rem 1.5rem; }
.header pre { font-size: 0.45rem; }
.header h1 { font-size: 1.4rem; }
.container { padding: 1.5rem 1rem; }
.flow { flex-direction: column; }
.flow-arrow { transform: rotate(90deg); }
.step { flex-direction: column; gap: 0.5rem; }
.platform-tabs { flex-direction: column; align-items: center; }
table { display: block; overflow-x: auto; }
}
</style>
</head>
<body>
<!-- ================================================================ -->
<!-- HEADER -->
<!-- ================================================================ -->
<div class="header">
<pre> ____ _
| __ ) ___ ___ | | ____ _____ _ __ _ __ ___
| _ \ / _ \ / _ \| |/ /\ \ /\ / / _ \| '__| '_ ` _ \
| |_) | (_) | (_) | &lt; \ V V / (_) | | | | | | | |
|____/ \___/ \___/|_|\_\ \_/\_/ \___/|_| |_| |_| |_|</pre>
<h1>Bookworm <span>Portable</span> 保姆式安装手册</h1>
<p>从零开始,一步步教你在任意电脑上激活 Bookworm</p>
<div class="detect-badge">
<span class="dot"></span>
检测到你的系统:<strong id="detected-os">Windows</strong>
</div>
<!-- 手动切换平台 -->
<div class="platform-tabs">
<button class="tab-btn tab-win active" onclick="switchPlatform('win')">🪟 Windows</button>
<button class="tab-btn tab-mac inactive" onclick="switchPlatform('mac')">🍎 macOS</button>
</div>
<div class="badge-row">
<span class="badge"><strong>92</strong> Skills</span>
<span class="badge"><strong>18</strong> Agents</span>
<span class="badge"><strong>34</strong> Hooks</span>
<span class="badge"><strong>AES-256</strong> 加密</span>
<span class="badge"><strong>NDA</strong> 技术保密</span>
</div>
</div>
<!-- ================================================================ -->
<!-- MAIN CONTENT -->
<!-- ================================================================ -->
<div class="container">
<!-- ============================================================ -->
<!-- SECTION 0: 最快方式 — 一键安装 -->
<!-- ============================================================ -->
<div class="section">
<h2><span class="num green">0</span>最快方式 — 一键安装器 <span class="tag-both">推荐</span></h2>
<!-- Windows 一键安装 -->
<div class="win-only">
<div class="highlight-box">
<h3>最快方式Windows 一键安装器</h3>
<p style="margin-bottom:0.8rem">获取 <strong>Bookworm-AutoSetup.bat</strong> → 双击运行 → 输入密码 → 完成</p>
<p style="font-size:0.8rem;color:var(--text-dim);margin-bottom:1rem">安装器自动检测依赖、下载配置、创建桌面快捷方式、启动 Claude Code</p>
<a href="/Bookworm-AutoSetup.bat" download class="dl-btn">&#11015; 下载一键安装器 (.bat)</a>
</div>
<p style="text-align:center;color:var(--text-dim);font-size:0.85rem;margin-bottom:0.5rem">安装流程:</p>
<div class="flow">
<div class="flow-node">安装依赖<br><small style="color:var(--text-dim)">Node.js + Git</small></div>
<span class="flow-arrow">&#10132;</span>
<div class="flow-node">安装 Claude Code<br><small style="color:var(--text-dim)">npm 全局安装</small></div>
<span class="flow-arrow">&#10132;</span>
<div class="flow-node">双击运行<br><small style="color:var(--text-dim)">AutoSetup.bat</small></div>
<span class="flow-arrow">&#10132;</span>
<div class="flow-node">输入密码<br><small style="color:var(--text-dim)">主密码</small></div>
<span class="flow-arrow">&#10132;</span>
<div class="flow-node active">Bookworm 激活<br><small style="color:var(--green)">完成</small></div>
</div>
<p style="text-align:center;color:var(--text-dim);font-size:0.9rem">首次安装约 10 分钟(含依赖下载),之后每次双击启动约 10-30 秒</p>
</div>
<!-- macOS 一键安装 -->
<div class="mac-only" style="display:none">
<div class="highlight-box">
<h3>最快方式macOS 一键安装脚本</h3>
<p style="margin-bottom:0.8rem">下载 <strong>Bookworm-Setup.sh</strong> → 在终端运行 → 输入密码 → 完成</p>
<p style="font-size:0.8rem;color:var(--text-dim);margin-bottom:0.6rem">脚本自动检测依赖、安装 Homebrew/Node.js/Git、下载配置、启动 Claude Code</p>
<a href="/Bookworm-Setup.sh" download class="dl-btn">&#11015; 下载一键安装脚本 (.sh)</a>
</div>
<div class="card" style="margin-top:0.8rem">
<h3>下载后如何运行</h3>
<p>打开终端(按 <code>&#8984; + 空格</code>,搜索"终端"),进入下载目录后执行:</p>
</div>
<div class="code-block has-label" onclick="copyCode(this)">
<span class="label">终端 (Terminal)</span>
<code><span class="comment"># 进入下载目录(通常在下载文件夹)</span>
<span class="cmd">cd</span> ~/Downloads
<span class="comment"># 赋予执行权限并运行</span>
<span class="cmd">chmod</span> +x Bookworm-Setup.sh &amp;&amp; ./Bookworm-Setup.sh</code>
</div>
<p style="text-align:center;color:var(--text-dim);font-size:0.85rem;margin-bottom:0.5rem">安装流程:</p>
<div class="flow">
<div class="flow-node">安装依赖<br><small style="color:var(--text-dim)">Homebrew + Node.js</small></div>
<span class="flow-arrow">&#10132;</span>
<div class="flow-node">安装 Claude Code<br><small style="color:var(--text-dim)">npm 全局安装</small></div>
<span class="flow-arrow">&#10132;</span>
<div class="flow-node">运行脚本<br><small style="color:var(--text-dim)">bash Setup.sh</small></div>
<span class="flow-arrow">&#10132;</span>
<div class="flow-node">输入密码<br><small style="color:var(--text-dim)">主密码</small></div>
<span class="flow-arrow">&#10132;</span>
<div class="flow-node active">Bookworm 激活<br><small style="color:var(--green)">完成</small></div>
</div>
<p style="text-align:center;color:var(--text-dim);font-size:0.9rem">首次安装约 10 分钟(含依赖下载),之后每次启动约 5-15 秒</p>
</div>
<div class="alert info" style="margin-top:1rem">
<span class="alert-icon">&#128073;</span>
<div>
<strong>想了解每一步在做什么?</strong>
继续向下阅读完整手册,每步都有详细说明。如果一键安装器已经成功,可直接跳到 <strong>第 4 节:日常使用</strong>
</div>
</div>
</div>
<!-- ============================================================ -->
<!-- SECTION 1: 安装依赖软件 -->
<!-- ============================================================ -->
<div class="section">
<h2><span class="num">1</span>安装依赖软件</h2>
<!-- 通用 - 代理提醒 -->
<div class="alert danger">
<span class="alert-icon">&#9888;</span>
<div>
<strong>国内必须:代理/VPN 软件</strong><br>
Claude Code 启动时会检查 <code>api.anthropic.com</code>,国内无法直连。<br>
请先安装并启动代理软件Clash / V2Ray / 快柠檬 / Surge / 任意 VPN安装脚本会<strong>自动检测</strong>系统代理。<br>
无代理 = Claude Code 无法启动。
</div>
</div>
<div class="alert info">
<span class="alert-icon">&#128161;</span>
<div>
<strong>中转站不走代理</strong><br>
API 中转站 <code>bww.letcareme.com</code> 部署在国内阿里云,<strong>不需要通过代理访问</strong><br>
安装脚本已自动设置 <code>NO_PROXY=bww.letcareme.com,code.letcareme.com</code>,无需手动配置。<br>
如果代理软件有"绕过规则"设置,建议把 <code>*.letcareme.com</code> 加入直连列表。
</div>
</div>
<p style="margin-bottom:0.8rem">需要安装以下软件。如果已经装过,可以直接跳到下一节。</p>
<!-- ===== Windows 专属 ===== -->
<div class="win-only">
<!-- A. Node.js -->
<div class="step">
<div class="step-icon blue">A</div>
<div class="step-content">
<h4>安装 Node.js <span class="tag-win">Windows</span>(必须)</h4>
<p>Node.js 是运行 Claude Code 的基础环境,必须安装。</p>
</div>
</div>
<div class="card">
<h3>方式一:官网下载(推荐,操作最简单)</h3>
<p>打开浏览器访问 <a href="https://nodejs.org/zh-cn" target="_blank">https://nodejs.org</a>,点击绿色的 <strong>"LTS 推荐"</strong> 按钮下载,双击 .msi 文件安装,全部默认 Next一路点到完成。</p>
</div>
<div class="card">
<h3>方式二PowerShell 命令安装winget</h3>
<p>右键开始菜单 → 选择 <strong>"PowerShell (管理员)"</strong><strong>"终端 (管理员)"</strong>,然后执行:</p>
</div>
<div class="code-block has-label" onclick="copyCode(this)">
<span class="label">PowerShell (管理员)</span>
<code><span class="cmd">winget</span> install OpenJS.NodeJS.LTS</code>
</div>
<div class="alert warning">
<span class="alert-icon">&#9888;</span>
<div>
<strong>安装完成后必须重开 PowerShell</strong><br>
关闭当前 PowerShell 窗口,重新打开一个新的,否则 <code>node</code><code>npm</code> 命令找不到。
</div>
</div>
<p style="margin-top:0.8rem">验证安装成功(新开 PowerShell 后执行):</p>
<div class="code-block" onclick="copyCode(this)">
<code><span class="cmd">node</span> -v <span class="comment"># 应显示 v22.x.x</span>
<span class="cmd">npm</span> -v <span class="comment"># 应显示 10.x.x</span></code>
</div>
<!-- B. Git -->
<div class="step" style="margin-top:1.5rem">
<div class="step-icon blue">B</div>
<div class="step-content">
<h4>安装 Git <span class="tag-win">Windows</span>(必须)</h4>
<p>用于从服务器下载 Bookworm 配置文件,也会附带安装 openssl解密凭证需要</p>
</div>
</div>
<div class="card">
<p>打开 <a href="https://git-scm.com/download/win" target="_blank">https://git-scm.com/download/win</a>,下载 <strong>"64-bit Git for Windows Setup"</strong>,双击安装,全部 Next不用修改任何设置。</p>
</div>
<p>验证:</p>
<div class="code-block" onclick="copyCode(this)">
<code><span class="cmd">git</span> --version <span class="comment"># 应显示 git version 2.x.x</span></code>
</div>
<!-- C. PowerShell 7 -->
<div class="step" style="margin-top:1.5rem">
<div class="step-icon yellow">C</div>
<div class="step-content">
<h4>安装 PowerShell 7 <span class="tag-win">Windows</span>(推荐)</h4>
<p>Windows 自带的 PowerShell 5.1 有中文兼容问题,建议升级到 7用命令 <code>pwsh</code> 启动。</p>
</div>
</div>
<div class="code-block has-label" onclick="copyCode(this)">
<span class="label">PowerShell (管理员)</span>
<code><span class="cmd">winget</span> install Microsoft.PowerShell</code>
</div>
<p style="color:var(--text-dim);font-size:0.85rem">如果 winget 不可用,去 <a href="https://github.com/PowerShell/PowerShell/releases" target="_blank">GitHub Releases</a> 下载 .msi 安装包。安装后用 <code>pwsh</code> 命令启动新版 PowerShell。</p>
</div>
<!-- ===== macOS 专属 ===== -->
<div class="mac-only" style="display:none">
<!-- A. Homebrew -->
<div class="step">
<div class="step-icon blue">A</div>
<div class="step-content">
<h4>安装 Homebrew <span class="tag-mac">macOS</span>(包管理器)</h4>
<p>Homebrew 是 macOS 上最常用的软件包管理器,用它可以一行命令安装 Node.js 和 Git。</p>
</div>
</div>
<p>打开 <strong>终端</strong>(按 <code>&#8984; + 空格</code> 搜索"终端"或"Terminal"),执行:</p>
<div class="code-block" onclick="copyCode(this)">
<code><span class="cmd">/bin/bash</span> -c "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/HEAD/install.sh)"</code>
</div>
<div class="alert info">
<span class="alert-icon">&#128161;</span>
<div>
<strong>国内下载慢?用清华镜像加速</strong><br>
执行安装命令前,先在终端设置以下环境变量:<br>
<code>export HOMEBREW_BREW_GIT_REMOTE="https://mirrors.tuna.tsinghua.edu.cn/git/homebrew/brew.git"</code><br>
<code>export HOMEBREW_CORE_GIT_REMOTE="https://mirrors.tuna.tsinghua.edu.cn/git/homebrew/homebrew-core.git"</code><br>
设置后再执行上面的安装命令。
</div>
</div>
<div class="alert warning">
<span class="alert-icon">&#9888;</span>
<div>
<strong>Apple Silicon (M1/M2/M3/M4) 用户注意!</strong><br>
安装完成后Homebrew 不在默认 PATH 里,需要手动添加。终端会有提示,执行以下命令:
</div>
</div>
<div class="code-block" onclick="copyCode(this)">
<code><span class="comment"># Apple Silicon Mac 需要执行Intel Mac 不需要)</span>
<span class="cmd">echo</span> 'eval "$(/opt/homebrew/bin/brew shellenv)"' &gt;&gt; ~/.zprofile
<span class="cmd">eval</span> "$(/opt/homebrew/bin/brew shellenv)"</code>
</div>
<p style="margin-top:0.8rem">验证安装成功:</p>
<div class="code-block" onclick="copyCode(this)">
<code><span class="cmd">brew</span> --version <span class="comment"># 应显示 Homebrew 4.x.x</span></code>
</div>
<!-- B. Node.js -->
<div class="step" style="margin-top:1.5rem">
<div class="step-icon blue">B</div>
<div class="step-content">
<h4>安装 Node.js <span class="tag-mac">macOS</span>(必须)</h4>
<p>用 Homebrew 一行命令安装。</p>
</div>
</div>
<div class="code-block" onclick="copyCode(this)">
<code><span class="cmd">brew</span> install node</code>
</div>
<p style="color:var(--text-dim);font-size:0.85rem">也可以从 <a href="https://nodejs.org/zh-cn" target="_blank">nodejs.org</a> 下载 .pkg 安装包(图形化安装向导)。</p>
<p style="margin-top:0.5rem">验证安装成功:</p>
<div class="code-block" onclick="copyCode(this)">
<code><span class="cmd">node</span> -v <span class="comment"># 应显示 v22.x.x</span>
<span class="cmd">npm</span> -v <span class="comment"># 应显示 10.x.x</span></code>
</div>
<!-- C. Git -->
<div class="step" style="margin-top:1.5rem">
<div class="step-icon blue">C</div>
<div class="step-content">
<h4>安装 Git <span class="tag-mac">macOS</span>(必须)</h4>
<p>macOS 通常自带 Git如没有则用 Homebrew 安装。</p>
</div>
</div>
<div class="code-block" onclick="copyCode(this)">
<code><span class="comment"># 检查是否已安装</span>
<span class="cmd">git</span> --version
<span class="comment"># 如果提示安装 Xcode Command Line Tools点击"安装"即可</span>
<span class="comment"># 或者用 Homebrew 安装(推荐):</span>
<span class="cmd">brew</span> install git</code>
</div>
</div>
</div>
<!-- ============================================================ -->
<!-- SECTION 2: 安装 Claude Code (common) -->
<!-- ============================================================ -->
<div class="section">
<h2><span class="num">2</span>安装 Claude Code <span class="tag-both">通用</span></h2>
<div class="step">
<div class="step-icon green">1</div>
<div class="step-content">
<h4>全局安装 Claude Code</h4>
<p class="win-only">在 PowerShell 中执行(不需要管理员权限):</p>
<p class="mac-only" style="display:none">在终端中执行:</p>
</div>
</div>
<div class="code-block" onclick="copyCode(this)">
<code><span class="cmd">npm</span> i -g @anthropic-ai/claude-code</code>
</div>
<p class="win-only" style="color:var(--text-dim);font-size:0.85rem">安装过程需要几分钟,等待完成即可。如果报"执行策略"错误,见第 7 节排查。</p>
<p class="mac-only" style="display:none;color:var(--text-dim);font-size:0.85rem">安装过程需要几分钟,等待完成即可。如果报 Permission denied在命令前加 <code>sudo</code>,或参考第 7 节排查。</p>
<div class="step">
<div class="step-icon green">2</div>
<div class="step-content">
<h4>验证安装</h4>
</div>
</div>
<div class="code-block" onclick="copyCode(this)">
<code><span class="cmd">claude</span> --version <span class="comment"># 应显示版本号,如 1.x.x</span></code>
</div>
<div class="alert info">
<span class="alert-icon">&#128161;</span>
<div>
<strong>不需要登录 Claude 账号!</strong><br>
Bookworm 使用自己的 API 中转站,安装完 Claude Code 后直接进入下一步。<strong>不要</strong>执行 <code>claude login</code> 或设置 <code>ANTHROPIC_API_KEY</code>,那是给个人用户用的。
</div>
</div>
</div>
<!-- ============================================================ -->
<!-- SECTION 3: 安装 Bookworm -->
<!-- ============================================================ -->
<div class="section">
<h2><span class="num">3</span>安装 Bookworm核心步骤</h2>
<!-- Step 1: git clone (common) -->
<div class="step">
<div class="step-icon purple">1</div>
<div class="step-content">
<h4>克隆引导仓库 <span class="tag-both">通用</span></h4>
<p class="win-only">在 PowerShell 中执行以下命令:</p>
<p class="mac-only" style="display:none">在终端中执行以下命令:</p>
</div>
</div>
<div class="code-block" onclick="copyCode(this)">
<code><span class="cmd">git clone</span> <span class="url">https://code.letcareme.com/bookworm/bookworm-boot.git</span>
<span class="cmd">cd</span> bookworm-boot</code>
</div>
<div class="screenshot-note">
<strong>弹出用户名密码?</strong> 输入管理员提供给你的 <strong>Gitea 账号密码</strong>。注意:这是 Gitea 的密码,不是下面说的主密码。
</div>
<!-- Step 2: Windows -->
<div class="win-only">
<div class="step">
<div class="step-icon purple">2</div>
<div class="step-content">
<h4>双击运行安装脚本 <span class="tag-win">Windows</span></h4>
<p>双击文件夹里的 <strong>更新并启动Bookworm.bat</strong>,脚本会自动完成所有配置。</p>
</div>
</div>
<div class="card">
<h3>或者用命令行运行</h3>
<p>如果双击 .bat 不起作用,在 PowerShell 中手动执行:</p>
</div>
<div class="code-block has-label" onclick="copyCode(this)">
<span class="label">PowerShell</span>
<code><span class="cmd">pwsh</span> <span class="flag">-ExecutionPolicy Bypass</span> -File auto-setup.ps1</code>
</div>
<p style="color:var(--text-dim);font-size:0.85rem">没有 <code>pwsh</code> 可用 <code>powershell</code> 替代。</p>
</div>
<!-- Step 2: macOS -->
<div class="mac-only" style="display:none">
<div class="step">
<div class="step-icon purple">2</div>
<div class="step-content">
<h4>运行安装脚本 <span class="tag-mac">macOS</span></h4>
<p>在终端中执行安装脚本:</p>
</div>
</div>
<div class="code-block has-label" onclick="copyCode(this)">
<span class="label">终端 (Terminal)</span>
<code><span class="cmd">bash</span> Bookworm-Setup.sh</code>
</div>
<p style="color:var(--text-dim);font-size:0.85rem">如果提示权限不足:<code>chmod +x Bookworm-Setup.sh &amp;&amp; ./Bookworm-Setup.sh</code></p>
</div>
<!-- Step 3: 输入主密码 (common) -->
<div class="step">
<div class="step-icon purple">3</div>
<div class="step-content">
<h4>输入主密码 <span class="tag-both">通用</span></h4>
<p>脚本会提示 <strong>"输入主密码解密凭证"</strong>,输入管理员提供的<strong>主密码</strong>(不是 Gitea 密码),按回车。</p>
<p class="mac-only" style="display:none;margin-top:0.3rem">密码输入时终端<strong>不显示任何字符</strong>,这是正常的安全设计,直接输入再按回车即可。</p>
<p style="margin-top:0.3rem;color:var(--text-dim);font-size:0.88rem"><strong>输错了可以重试,最多 3 次。</strong></p>
</div>
</div>
<div class="screenshot-note">
<strong>两个密码不要搞混:</strong><br>
<strong>Gitea 密码</strong> = 第 1 步克隆仓库时输入的,用于从服务器下载文件<br>
<strong>主密码</strong> = 第 3 步解密 API 凭证时输入的,用于启动 Claude Code
</div>
<!-- Step 4: 等待完成 (common) -->
<div class="step">
<div class="step-icon green">4</div>
<div class="step-content">
<h4>等待完成 <span class="tag-both">通用</span></h4>
<p>脚本会显示步骤进度,自动完成:前置检查 → 代理检测 → 解密凭证 → 同步配置 → 完整性校验 → 启动 Claude Code</p>
</div>
</div>
<div class="alert success">
<span class="alert-icon">&#10003;</span>
<div>
<strong>看到绿色 "Bookworm 就绪" 横幅就说明成功了!</strong><br>
Claude Code 启动后,脚本会验证配置完整性,全部 [OK] 后进入 Bookworm 模式。<br>
所有 API 请求通过中转站转发,不需要自己的 Claude 账号。
</div>
</div>
<div class="alert warning">
<span class="alert-icon">&#9888;</span>
<div>
<strong>看到黄色 "原生模式启动" 横幅?</strong><br>
说明 Bookworm 配置不完整。请重新运行安装脚本(不加 <code>-StartOnly</code> 参数),或联系管理员。
</div>
</div>
</div>
<!-- ============================================================ -->
<!-- SECTION 4: 日常使用 -->
<!-- ============================================================ -->
<div class="section">
<h2><span class="num">4</span>日常使用</h2>
<!-- Windows 日常使用 -->
<div class="win-only">
<div class="card">
<h3>方法一:双击 .bat 文件 <span class="tag-win">Windows</span>(推荐,最简单)</h3>
<p><code>bookworm-boot</code> 文件夹里有两个 .bat 文件,双击即可,无需打开 PowerShell</p>
</div>
<table>
<tr><th>文件名</th><th>作用</th><th>适用场景</th></tr>
<tr>
<td><code>启动Bookworm.bat</code></td>
<td>快速启动,不更新配置</td>
<td>每天日常使用</td>
</tr>
<tr>
<td><code>更新并启动Bookworm.bat</code></td>
<td>先同步最新 Skills 再启动</td>
<td>管理员通知有更新时</td>
</tr>
</table>
<div class="alert info">
<span class="alert-icon">&#128161;</span>
<div>
<strong>看到 "有新更新可用"</strong><br>
说明管理员推送了更新。双击 <strong>更新并启动Bookworm.bat</strong> 即可同步。
</div>
</div>
<div class="card" style="margin-top:1rem">
<h3>方法二:命令行(备用)</h3>
<p>如果 .bat 文件无法运行,在 PowerShell 中手动执行:</p>
</div>
<div class="code-block has-label" onclick="copyCode(this)">
<span class="label">PowerShell</span>
<code><span class="comment"># 快速启动</span>
<span class="cmd">cd</span> bookworm-boot
<span class="cmd">pwsh</span> <span class="flag">-ExecutionPolicy Bypass</span> -File install.ps1 <span class="flag">-StartOnly</span>
<span class="comment"># 同步更新后启动</span>
<span class="cmd">cd</span> bookworm-boot
<span class="cmd">pwsh</span> <span class="flag">-ExecutionPolicy Bypass</span> -File install.ps1</code>
</div>
</div>
<!-- macOS 日常使用 -->
<div class="mac-only" style="display:none">
<div class="card">
<h3>方法一:终端别名 <span class="tag-mac">macOS</span>(推荐,最简单)</h3>
<p>安装脚本已自动添加别名到 <code>~/.zshrc</code>,直接在终端输入:</p>
</div>
<div class="code-block" onclick="copyCode(this)">
<code><span class="cmd">bw</span> <span class="comment"># 快速启动</span>
<span class="cmd">bw-update</span> <span class="comment"># 同步更新后启动</span></code>
</div>
<table style="margin-top:0.8rem">
<tr><th>命令</th><th>作用</th><th>适用场景</th></tr>
<tr>
<td><code>bw</code></td>
<td>直接启动 Claude Code + Bookworm</td>
<td>每天日常使用</td>
</tr>
<tr>
<td><code>bw-update</code></td>
<td>更新 boot + 配置仓库</td>
<td>管理员通知有更新时</td>
</tr>
</table>
<div class="alert info">
<span class="alert-icon">&#128161;</span>
<div>
<strong>看到 "有 N 个新更新可用"</strong><br>
说明管理员更新了 Skills 或 Hooks。执行 <code>bw-update</code> 即可同步。
</div>
</div>
</div>
</div>
<!-- ============================================================ -->
<!-- SECTION 5: 密码说明 (common) -->
<!-- ============================================================ -->
<div class="section">
<h2><span class="num">5</span>密码说明 <span class="tag-both">通用</span></h2>
<div class="card">
<h3>本系统有两个密码,不要搞混</h3>
<table>
<tr><th>名称</th><th>用途</th><th>何时输入</th></tr>
<tr><td><strong>Gitea 密码</strong></td><td>从服务器下载文件(克隆仓库)</td><td>首次安装时git 弹出要求</td></tr>
<tr><td><strong>主密码</strong></td><td>解密 API 凭证</td><td>每次启动脚本时提示输入</td></tr>
</table>
</div>
<div class="alert info">
<span class="alert-icon">&#128161;</span>
<div>
<strong>密码输错了?</strong> 最多可以重试 3 次不用紧张。3 次都错才会退出,重新运行脚本即可。
</div>
</div>
<div class="card" style="margin-top:0.8rem">
<h3>本日免密功能</h3>
<p>首次解密成功后,脚本会询问 <strong>"今日内免密启动? (y/n)"</strong></p>
<p><strong>y</strong> 后,当天再次启动无需输入主密码,次日自动过期。</p>
<p class="win-only" style="color:var(--text-dim);font-size:0.85rem;margin-top:0.3rem">
凭证缓存在 Windows Credential Manager 中DPAPI 加密,仅当前用户可读)。
</p>
<p class="mac-only" style="display:none;color:var(--text-dim);font-size:0.85rem;margin-top:0.3rem">
凭证缓存在 macOS 钥匙串 (Keychain) 中,仅当前用户可读。
</p>
</div>
<div class="alert warning" style="margin-top:0.8rem">
<span class="alert-icon">&#128274;</span>
<div><strong>主密码无法找回</strong> &mdash; 请妥善保管。忘记后需联系管理员重新生成加密凭证文件。</div>
</div>
</div>
<!-- ============================================================ -->
<!-- SECTION 6: 清理/卸载 -->
<!-- ============================================================ -->
<div class="section">
<h2><span class="num">6</span>使用完毕 &mdash; 清理 / 卸载</h2>
<!-- Windows 卸载 -->
<div class="win-only">
<div class="card" style="border-color:var(--green)">
<h3 style="color:var(--green)">最简单:双击 卸载Bookworm.bat <span class="tag-win">Windows</span></h3>
<p><code>bookworm-boot</code> 文件夹里的 <strong>卸载Bookworm.bat</strong>,双击即可一键完整卸载:终止进程 + 清除凭证 + 恢复原始配置 + 删除桌面快捷方式。</p>
</div>
<p style="margin-top:1rem;color:var(--text-dim);font-size:0.9rem">或者用命令行精细控制:</p>
<table>
<tr><th>场景</th><th>命令</th><th>说明</th></tr>
<tr>
<td><strong>基础清理</strong></td>
<td><code>pwsh -File stop.ps1</code></td>
<td>清除环境变量,保留配置供下次快速启动</td>
</tr>
<tr>
<td><strong>完整恢复</strong></td>
<td><code>pwsh -File stop.ps1 -Restore</code></td>
<td>删除 Bookworm恢复电脑原始状态</td>
</tr>
<tr>
<td><strong>深度清理</strong></td>
<td><code>pwsh -File stop.ps1 -Restore -Deep</code></td>
<td>完整恢复 + 清除历史 + 清除 Git/凭证缓存</td>
</tr>
</table>
<div class="alert danger">
<span class="alert-icon">&#9888;</span>
<div>
<strong>在他人电脑 / 公用电脑上务必卸载:</strong><br>
双击 <strong>卸载Bookworm.bat</strong> 或执行 <code>pwsh -File stop.ps1 -Restore -Deep</code>,确保不留下任何凭证。
</div>
</div>
</div>
<!-- macOS 卸载 -->
<div class="mac-only" style="display:none">
<div class="card" style="border-color:var(--green)">
<h3 style="color:var(--green)">快捷卸载脚本 <span class="tag-mac">macOS</span></h3>
<p>在终端中执行:<code>bash uninstall-mac.sh --restore --deep</code></p>
</div>
<p style="margin-top:1rem;color:var(--text-dim);font-size:0.9rem">或者手动执行清理命令:</p>
<table>
<tr><th>场景</th><th>命令</th><th>说明</th></tr>
<tr>
<td><strong>基础清理</strong></td>
<td><code>rm -rf ~/.claude</code></td>
<td>删除 Bookworm 配置,保留引导仓库供重新安装</td>
</tr>
<tr>
<td><strong>完整恢复</strong></td>
<td><code>rm -rf ~/.claude ~/bookworm-boot</code></td>
<td>删除所有 Bookworm 文件</td>
</tr>
<tr>
<td><strong>深度清理</strong></td>
<td><code>rm -rf ~/.claude ~/bookworm-boot &amp;&amp; sed -i '' '/Bookworm Portable/,+2d' ~/.zshrc &amp;&amp; git credential-osxkeychain erase &lt;&lt;&lt; "host=code.letcareme.com"</code></td>
<td>完整恢复 + 清除 zshrc 别名 + 清除 Git 凭证</td>
</tr>
</table>
<div class="alert danger">
<span class="alert-icon">&#9888;</span>
<div>
<strong>在他人电脑 / 公用电脑上务必清理:</strong><br>
执行深度清理命令,确保不留下任何凭证或配置文件。
</div>
</div>
</div>
</div>
<!-- ============================================================ -->
<!-- SECTION 7: 常见问题排查 -->
<!-- ============================================================ -->
<div class="section">
<h2><span class="num red">!</span>常见问题排查</h2>
<!-- ===== 通用问题 ===== -->
<div class="card">
<h3>&#10060; git clone 失败 / 认证失败 <span class="tag-both">通用</span></h3>
<p><strong>解决步骤:</strong></p>
<ol style="color:var(--text-dim);padding-left:1.5rem;margin-top:0.3rem">
<li>浏览器打开 <code>https://code.letcareme.com</code> 确认网站可访问</li>
<li>确认用户名密码正确(区分大小写)</li>
<li>如果开了 2FA需要用 Access Token 替代密码</li>
<li class="mac-only" style="display:none">如果 macOS 弹出钥匙串对话框,点"始终允许"</li>
<li>检查网络是否需要代理才能访问</li>
</ol>
</div>
<div class="card">
<h3>&#10060; 解密凭证失败 / 主密码错误 <span class="tag-both">通用</span></h3>
<p><strong>原因:</strong>主密码区分大小写,且无法找回。</p>
<p><strong>解决:</strong>仔细检查密码是否有多余空格或大小写问题。如确认忘记,联系管理员重新生成 <code>secrets.enc</code></p>
</div>
<div class="card">
<h3>&#10060; ECONNRESET / "Unable to connect to API" <span class="tag-both">通用</span></h3>
<p><strong>原因:</strong>代理软件把国内中转站 <code>bww.letcareme.com</code> 的流量也走了国际线路,导致连接被重置。</p>
<p><strong>解决:</strong>手动设置 NO_PROXY 后重试,或在代理软件中将 <code>*.letcareme.com</code> 加入直连规则:</p>
</div>
<div class="win-only">
<div class="code-block has-label" onclick="copyCode(this)">
<span class="label">PowerShell</span>
<code><span class="comment"># 设置中转站直连(不走代理)</span>
$env:NO_PROXY = "bww.letcareme.com,code.letcareme.com"
<span class="comment"># 重新启动</span>
<span class="cmd">cd</span> bookworm-boot
<span class="cmd">pwsh</span> <span class="flag">-ExecutionPolicy Bypass</span> -File install.ps1 <span class="flag">-StartOnly</span></code>
</div>
</div>
<div class="mac-only" style="display:none">
<div class="code-block has-label" onclick="copyCode(this)">
<span class="label">终端 (Terminal)</span>
<code><span class="comment"># 设置中转站直连(不走代理)</span>
<span class="cmd">export</span> NO_PROXY="bww.letcareme.com,code.letcareme.com"
<span class="comment"># 重新启动</span>
<span class="cmd">bw</span></code>
</div>
</div>
<p style="color:var(--text-dim);font-size:0.85rem">新版安装脚本已自动设置 NO_PROXY<code>git pull</code> 更新后此问题不再出现。</p>
<div class="card">
<h3>&#10060; "Not logged in" / 直接运行 claude 报错 <span class="tag-both">通用</span></h3>
<p><strong>原因:</strong>API 凭证是进程级环境变量,只在安装脚本启动的进程中有效。新开终端直接运行 <code>claude</code> 没有凭证。</p>
<p><strong>解决:</strong><strong>不要直接运行 <code>claude</code></strong>,必须通过以下方式启动:</p>
<ul class="win-only" style="color:var(--text-dim);font-size:0.9rem;padding-left:1.2rem;margin-top:0.3rem">
<li>双击桌面 <strong>Bookworm</strong> 快捷方式</li>
<li>双击 <strong>启动Bookworm.bat</strong></li>
<li>命令行:<code>pwsh -ExecutionPolicy Bypass -File install.ps1 -StartOnly</code></li>
</ul>
<ul class="mac-only" style="display:none;color:var(--text-dim);font-size:0.9rem;padding-left:1.2rem;margin-top:0.3rem">
<li>终端输入 <code>bw</code>(推荐)</li>
<li><code>cd ~/bookworm-boot &amp;&amp; bash Bookworm-Setup.sh</code></li>
</ul>
</div>
<div class="card">
<h3>&#10060; 安装包下载太慢 <span class="tag-both">通用</span></h3>
<p><strong>解决:</strong>设置 npm 淘宝镜像加速下载:</p>
</div>
<div class="code-block" onclick="copyCode(this)">
<code><span class="comment"># 设置 npm 淘宝镜像(加速下载)</span>
<span class="cmd">npm</span> config set registry https://registry.npmmirror.com
<span class="comment"># 然后重新安装 Claude Code</span>
<span class="cmd">npm</span> i -g @anthropic-ai/claude-code</code>
</div>
<div class="mac-only" style="display:none">
<div class="code-block" onclick="copyCode(this)">
<code><span class="comment"># Homebrew 清华镜像(如果 brew install 很慢)</span>
<span class="cmd">export</span> HOMEBREW_BREW_GIT_REMOTE="https://mirrors.tuna.tsinghua.edu.cn/git/homebrew/brew.git"</code>
</div>
</div>
<div class="card">
<h3>&#10060; 需要自己的 Claude 账号吗? <span class="tag-both">通用</span></h3>
<p><strong>不需要。</strong>所有 API 请求通过中转站转发,消耗中转站额度。你的电脑不需要任何 Anthropic 账号或订阅。</p>
</div>
<div class="card">
<h3>&#10060; 询问 AI 系统内部信息时被拒绝了? <span class="tag-both">通用</span></h3>
<p><strong>这是正常行为。</strong>Bookworm 的技能库、路由引擎、配置架构属于技术保密范围NDAAI 被设定为不披露这些信息。</p>
<p><strong>正确做法:</strong>直接告诉 AI 你要完成的任务(写代码、分析问题、设计方案等),它会自动调用最合适的专家能力。无需了解内部机制。</p>
</div>
<hr class="platform-divider">
<!-- ===== Windows 专属问题 ===== -->
<div class="win-only">
<div class="card">
<h3>&#10060; 输入 node -v 提示 "无法识别" <span class="tag-win">Windows</span></h3>
<p><strong>原因:</strong>安装 Node.js 后没有重开 PowerShell 窗口PATH 没有刷新。</p>
<p><strong>解决:</strong>关闭当前 PowerShell重新打开一个新的窗口再试。如果还不行手动刷新</p>
</div>
<div class="code-block has-label" onclick="copyCode(this)">
<span class="label">PowerShell</span>
<code>$env:Path = [System.Environment]::GetEnvironmentVariable("Path","Machine") + ";" + [System.Environment]::GetEnvironmentVariable("Path","User")
<span class="cmd">node</span> -v</code>
</div>
<div class="card">
<h3>&#10060; npm 报 "执行策略" / "Execution Policy" 错误 <span class="tag-win">Windows</span></h3>
<p><strong>原因:</strong>Windows 默认禁止运行脚本。</p>
<p><strong>解决:</strong>执行以下命令,提示确认时输入 <strong>Y</strong> 回车:</p>
</div>
<div class="code-block has-label" onclick="copyCode(this)">
<span class="label">PowerShell</span>
<code>Set-ExecutionPolicy -Scope CurrentUser -ExecutionPolicy RemoteSigned</code>
</div>
<p style="color:var(--text-dim);font-size:0.85rem">之后 npm 和 pwsh 脚本都能正常运行。</p>
<div class="card">
<h3>&#10060; 提示 "openssl 未找到" <span class="tag-win">Windows</span></h3>
<p><strong>原因:</strong>解密凭证需要 openssl它随 Git for Windows 一起安装。</p>
<p><strong>解决:</strong>确认 Git 已正确安装。脚本会自动搜索 <code>C:\Program Files\Git</code> 下的 openssl.exe。如果 Git 装在其他盘,可能需要手动将 Git 的 bin 目录加入 PATH。</p>
</div>
<div class="card">
<h3>&#10060; Claude Code 启动后没有 Bookworm 横幅 <span class="tag-win">Windows</span></h3>
<p><strong>原因:</strong>配置文件未正确同步到 <code>~/.claude</code></p>
<p><strong>解决:</strong>不加 <code>-StartOnly</code> 重新运行安装脚本,让它重新同步配置:</p>
</div>
<div class="code-block has-label" onclick="copyCode(this)">
<span class="label">PowerShell</span>
<code><span class="cmd">pwsh</span> <span class="flag">-ExecutionPolicy Bypass</span> -File install.ps1</code>
</div>
</div>
<!-- ===== macOS 专属问题 ===== -->
<div class="mac-only" style="display:none">
<div class="card">
<h3>&#10060; brew 命令找不到 <span class="tag-mac">macOS</span></h3>
<p><strong>原因:</strong>Homebrew 未添加到 PATHApple Silicon Mac 常见)。</p>
<p><strong>解决:</strong></p>
</div>
<div class="code-block has-label" onclick="copyCode(this)">
<span class="label">终端 (Terminal)</span>
<code><span class="comment"># Apple Silicon (M1/M2/M3/M4)</span>
<span class="cmd">eval</span> "$(/opt/homebrew/bin/brew shellenv)"
<span class="comment"># Intel Mac</span>
<span class="cmd">eval</span> "$(/usr/local/bin/brew shellenv)"</code>
</div>
<div class="card">
<h3>&#10060; npm 全局安装报 "Permission denied" <span class="tag-mac">macOS</span></h3>
<p><strong>原因:</strong>macOS 默认目录权限限制。</p>
<p><strong>解决方式一(推荐):</strong>修改 npm 全局目录:</p>
</div>
<div class="code-block has-label" onclick="copyCode(this)">
<span class="label">终端 (Terminal)</span>
<code><span class="cmd">mkdir</span> -p ~/.npm-global
<span class="cmd">npm</span> config set prefix '~/.npm-global'
<span class="cmd">echo</span> 'export PATH=~/.npm-global/bin:$PATH' &gt;&gt; ~/.zshrc
<span class="cmd">source</span> ~/.zshrc
<span class="comment"># 然后重新安装</span>
<span class="cmd">npm</span> i -g @anthropic-ai/claude-code</code>
</div>
<p style="color:var(--text-dim);font-size:0.85rem">解决方式二(简单):在命令前加 <code>sudo</code>(短期可用,不推荐长期使用)。</p>
<div class="card">
<h3>&#10060; openssl 版本不兼容 <span class="tag-mac">macOS</span></h3>
<p><strong>原因:</strong>macOS 自带的是 LibreSSL部分加密参数格式与 OpenSSL 不同。</p>
<p><strong>解决:</strong>安装 Homebrew 版 OpenSSL脚本会自动检测路径</p>
</div>
<div class="code-block has-label" onclick="copyCode(this)">
<span class="label">终端 (Terminal)</span>
<code><span class="cmd">brew</span> install openssl
<span class="comment"># 安装脚本会自动检测并使用 Homebrew 安装的 openssl 路径</span></code>
</div>
</div>
</div>
<!-- ============================================================ -->
<!-- FOOTER: 安装检查清单 -->
<!-- ============================================================ -->
<div class="section">
<h2>安装检查清单</h2>
<p style="color:var(--text-dim);margin-bottom:0.5rem">逐项确认,全部打勾即可开始使用:</p>
<!-- Windows 清单 -->
<div class="win-only">
<ul class="checklist">
<li><strong>Node.js 已安装</strong> &mdash; <code>node -v</code> 显示版本号 (v22.x.x)</li>
<li><strong>Git 已安装</strong> &mdash; <code>git --version</code> 显示版本号</li>
<li><strong>npm 可用</strong> &mdash; <code>npm -v</code> 显示版本号(如报错先设 ExecutionPolicy</li>
<li><strong>Claude Code 已安装</strong> &mdash; <code>claude --version</code> 显示版本号</li>
<li><strong>PowerShell 7 已安装</strong> &mdash; <code>pwsh --version</code> 显示 7.x推荐但非必须</li>
<li><strong>已获取 Gitea 账号密码</strong> &mdash; 管理员提供</li>
<li><strong>已获取主密码</strong> &mdash; 管理员提供(用于解密 API 凭证)</li>
<li><strong>能访问 code.letcareme.com</strong> &mdash; 浏览器打开确认可正常访问</li>
<li><strong>代理/VPN 已启动</strong> &mdash; 国内必须,脚本自动检测 (Clash / V2Ray / 快柠檬等)</li>
</ul>
</div>
<!-- macOS 清单 -->
<div class="mac-only" style="display:none">
<ul class="checklist">
<li><strong>Homebrew 已安装</strong> &mdash; <code>brew --version</code> 显示版本号</li>
<li><strong>Node.js 已安装</strong> &mdash; <code>node -v</code> 显示版本号 (v22.x.x)</li>
<li><strong>Git 已安装</strong> &mdash; <code>git --version</code> 显示版本号</li>
<li><strong>npm 可用</strong> &mdash; <code>npm -v</code> 显示版本号</li>
<li><strong>Claude Code 已安装</strong> &mdash; <code>claude --version</code> 显示版本号</li>
<li><strong>已获取 Gitea 账号密码</strong> &mdash; 管理员提供</li>
<li><strong>已获取主密码</strong> &mdash; 管理员提供(用于解密 API 凭证)</li>
<li><strong>能访问 code.letcareme.com</strong> &mdash; 浏览器打开确认可正常访问</li>
<li><strong>代理/VPN 已启动</strong> &mdash; 国内必须,脚本自动检测 (ClashX / Surge / V2Ray 等)</li>
</ul>
</div>
</div>
<!-- ============================================================ -->
<!-- 快速参考 -->
<!-- ============================================================ -->
<div class="section">
<h2>快速参考</h2>
<!-- Windows 参考表 -->
<div class="win-only">
<table>
<tr><th>操作</th><th>最简方式</th><th>命令行方式</th></tr>
<tr><td>首次安装</td><td>git clone + 双击<br><strong>更新并启动Bookworm.bat</strong></td><td><code>pwsh -ExecutionPolicy Bypass -File install.ps1</code></td></tr>
<tr><td>快速启动</td><td>双击 <strong>启动Bookworm.bat</strong></td><td><code>pwsh -File install.ps1 -StartOnly</code></td></tr>
<tr><td>同步更新</td><td>双击 <strong>更新并启动Bookworm.bat</strong></td><td><code>pwsh -File install.ps1</code></td></tr>
<tr><td>基础清理</td><td colspan="2"><code>pwsh -ExecutionPolicy Bypass -File stop.ps1</code></td></tr>
<tr><td>完整恢复</td><td colspan="2"><code>pwsh -ExecutionPolicy Bypass -File stop.ps1 -Restore</code></td></tr>
<tr><td>深度清理</td><td colspan="2"><code>pwsh -ExecutionPolicy Bypass -File stop.ps1 -Restore -Deep</code></td></tr>
</table>
</div>
<!-- macOS 参考表 -->
<div class="mac-only" style="display:none">
<table>
<tr><th>操作</th><th>快捷命令</th><th>完整命令</th></tr>
<tr><td>首次安装</td><td><code>bash Bookworm-Setup.sh</code></td><td><code>cd ~/bookworm-boot &amp;&amp; bash Bookworm-Setup.sh</code></td></tr>
<tr><td>快速启动</td><td><code>bw</code></td><td><code>NO_PROXY="bww.letcareme.com,code.letcareme.com,localhost" claude</code></td></tr>
<tr><td>同步更新</td><td><code>bw-update</code></td><td><code>cd ~/bookworm-boot &amp;&amp; git pull &amp;&amp; cd ~/.claude &amp;&amp; git pull</code></td></tr>
<tr><td>基础清理</td><td colspan="2"><code>rm -rf ~/.claude</code></td></tr>
<tr><td>完整恢复</td><td colspan="2"><code>rm -rf ~/.claude ~/bookworm-boot</code></td></tr>
<tr><td>深度清理</td><td colspan="2"><code>rm -rf ~/.claude ~/bookworm-boot &amp;&amp; sed -i '' '/Bookworm/,+2d' ~/.zshrc</code></td></tr>
</table>
</div>
</div>
<!-- ============================================================ -->
<!-- 安全须知 -->
<!-- ============================================================ -->
<div class="section">
<h2>安全须知 <span class="tag-both">通用</span></h2>
<table>
<tr><th>特性</th><th>规格</th></tr>
<tr><td>凭证加密</td><td>AES-256-CBC + PBKDF2 (600,000 迭代)</td></tr>
<tr><td>传输加密</td><td>HTTPS (TLS 1.2+, Let's Encrypt 证书)</td></tr>
<tr class="win-only">
<td>凭证存储</td>
<td>进程级环境变量 + 可选本日缓存 (Windows Credential Manager, DPAPI 加密, 当日 23:59 过期)</td>
</tr>
<tr class="mac-only" style="display:none">
<td>凭证存储</td>
<td>进程级环境变量 + 可选本日缓存 (macOS Keychain, 当日 23:59 过期)</td>
</tr>
<tr><td>登录保护</td><td>fail2ban (5 次失败/小时 &#8594; 封禁 24 小时)</td></tr>
<tr><td>技术保密</td><td>NDA — 系统内部架构、路由规则、技能库不对外披露</td></tr>
</table>
<div class="alert warning" style="margin-top:1rem">
<span class="alert-icon">&#128274;</span>
<div>
<strong>主密码无法找回</strong> &mdash; 请妥善保管,不要写在便利贴上。忘记后需管理员重新生成加密凭证。
</div>
</div>
</div>
</div>
<!-- ================================================================ -->
<!-- FOOTER -->
<!-- ================================================================ -->
<div class="footer">
Bookworm Portable v1.5-NDA &mdash; 保姆式安装手册 (Windows + macOS 统一版)<br>
&copy; 2026 Bookworm Smart Assistant &mdash; 技术保密 · 禁止转发
</div>
<!-- ================================================================ -->
<!-- JAVASCRIPT -->
<!-- ================================================================ -->
<script>
// ===== 平台自动检测 =====
const isMac = navigator.platform.toUpperCase().includes('MAC') ||
navigator.userAgent.toUpperCase().includes('MAC');
let currentPlatform = isMac ? 'mac' : 'win';
// 切换平台显示
function switchPlatform(platform) {
currentPlatform = platform;
// 显示/隐藏平台专属内容
document.querySelectorAll('.win-only').forEach(el => {
el.style.display = platform === 'win' ? '' : 'none';
});
document.querySelectorAll('.mac-only').forEach(el => {
el.style.display = platform === 'mac' ? '' : 'none';
});
// 更新 tab 按钮状态
const tabWin = document.querySelector('.tab-win');
const tabMac = document.querySelector('.tab-mac');
if (platform === 'win') {
tabWin.classList.add('active');
tabWin.classList.remove('inactive');
tabMac.classList.add('inactive');
tabMac.classList.remove('active');
} else {
tabMac.classList.add('active');
tabMac.classList.remove('inactive');
tabWin.classList.add('inactive');
tabWin.classList.remove('active');
}
// 更新检测文字
document.getElementById('detected-os').textContent = platform === 'win' ? 'Windows' : 'macOS';
}
// ===== 点击复制代码块 =====
function copyCode(el) {
const code = el.querySelector('code');
if (!code) return;
// 获取纯文本,去掉多余空白行
const text = code.innerText.trim();
if (navigator.clipboard && navigator.clipboard.writeText) {
navigator.clipboard.writeText(text).then(() => {
el.classList.add('copied');
setTimeout(() => el.classList.remove('copied'), 1500);
}).catch(() => fallbackCopy(el, text));
} else {
fallbackCopy(el, text);
}
}
function fallbackCopy(el, text) {
const ta = document.createElement('textarea');
ta.value = text;
ta.style.position = 'fixed';
ta.style.opacity = '0';
document.body.appendChild(ta);
ta.select();
try {
document.execCommand('copy');
el.classList.add('copied');
setTimeout(() => el.classList.remove('copied'), 1500);
} catch (e) {}
document.body.removeChild(ta);
}
// ===== 初始化:根据检测结果设置平台 =====
// 在 DOM 加载后执行
document.addEventListener('DOMContentLoaded', function() {
switchPlatform(currentPlatform);
});
// 如果脚本在 DOMContentLoaded 后执行,直接调用
if (document.readyState !== 'loading') {
switchPlatform(currentPlatform);
}
</script>
</body>
</html>