import{W as V,m as c,j as s,r as b,X as L,Q as m,S as C,d as _,J as g,y as W,a as q,b as N,P as E,Y as z,V as B,_ as Z,M as O,H as f,h as G,E as a,x as M}from"./vendor.tN_wDMSn.js";import{_ as j}from"./index.js";const h=[{id:"quickstart",title:"1. 快速入门",subsections:[{id:"intro",title:"1.1 插件简介",content:`**小栈AI** 是一款深度集成 WordPress 的 AI 综合插件。它不只是聊天机器人——它可以直接操作你的网站。

### 核心能力

- **内容生成**：AI 写文章、生成标签、SEO 标题描述、摘要、封面图
- **内容优化**：润色、改写、扩展、翻译、内链构建、质量评分
- **自动化流水线**：发布文章后自动执行标签→SEO→摘要→封面→ALT→内链全流程
- **自动化规则**：灵活的"事件→条件→动作"规则引擎，支持定时写文章
- **AI 对话**：悬浮聊天按钮，支持在对话中触发所有工具
- **Zibll 主题深度适配**：积分、余额、VIP、封禁、通知、签到、勋章、订单等
- **多 Worker 并发**：批量处理文章时自动并行，不影响网站性能

### 系统要求

- WordPress 6.0+
- PHP 8.0+
- 至少一个 AI API 密钥（DeepSeek / 豆包 / OpenAI 兼容）`},{id:"first-config",title:"1.2 首次配置",content:`安装并激活插件后，按以下步骤完成首次配置：

### 第一步：激活授权

进入 **小栈AI → 授权管理**，输入授权码激活。

测试环境可用授权码：\`XZD-DEV-2026\` 或 \`XZD-TEST-001\`

### 第二步：配置 AI 连接

进入 **小栈AI → AI配置 → 文本连接池**，添加至少一个 AI 连接：

1. 点击「添加连接」
2. 选择提供商（DeepSeek / 豆包 / OpenAI 兼容）
3. 填入 API 密钥和接口地址
4. 选择默认模型
5. 点击「测试连接」验证
6. 保存

> **提示**：可添加多个连接作为备用，系统会按优先级自动切换。

### 第三步：配置图片生成（可选）

进入 **AI配置 → 图片连接池**，配置图片生成连接。
也可在 **AI配置 → 免费图库** 中配置 Pexels / Unsplash / Pixabay 的 API 密钥。

### 第四步：站点类型检测

进入 **功能配置 → 主题适配**，点击「重新检测」。
系统会自动识别你的主题类型（Zibll 商城 / Zibll 论坛 / 其他），并显示能力矩阵。

### 第五步：开始使用

- 在文章编辑页面，右侧 **AI 面板** 提供一键处理
- 网站前台右下角 **悬浮按钮** 可以打开 AI 对话
- **仪表盘** 查看系统状态和 AI 学习进度`},{id:"activation",title:"1.3 授权激活",content:`### 授权状态说明

| 状态 | 说明 |
|------|------|
| 未激活 | 需要输入授权码才能使用 AI 功能 |
| 已授权 | 正常使用中 |
| 已过期 | 授权到期，部分功能受限 |

### 激活步骤

1. 进入 **小栈AI → 授权管理**
2. 输入授权码
3. 点击「激活」

### 授权失效怎么办

- 检查网络连接
- 确认授权码是否正确
- 确认授权是否到期
- 联系管理员获取新授权码`}]},{id:"admin",title:"2. 后台管理",subsections:[{id:"dashboard",title:"2.1 仪表盘",content:`仪表盘分为三个 Tab：

### 概览 Tab

展示网站关键统计数据：

- **文章总数**：已发布文章数量
- **AI 处理文章数**：已被 AI 处理过的文章数
- **标签总数 / SEO 数 / 摘要数**：各项 AI 产出的累计数
- **系统监控**：9 项实时指标（队列深度、Worker 活跃数、API 调用次数、成功率、内存峰值等）

### AI 建议 Tab

系统自动生成的优化建议，如：
- "检测到 5 篇文章缺少标签，建议批量生成"
- "有 3 篇文章缺少 SEO 描述"

可直接在建议卡片上点击「执行」一键处理。

### AI 学习 Tab

- **学习时间**：可自定义每天 AI 学习的时间（默认凌晨 3 点）
- **倒计时**：距离下次学习的剩余时间（基于服务器时间，精确）
- **待处理明细**：待学习的文章数 + 前 5 篇文章标题
- **能力矩阵**：✅ 已学习 / ⚠️ 未学习 的各项 AI 能力`},{id:"ai-config",title:"2.2 AI 配置",content:`AI 配置包含五个设置区域：

### 文本连接池

管理 AI 文本生成的 API 连接：
- 支持 DeepSeek / 豆包 / OpenAI 兼容三种提供商
- 可添加多个连接作为故障转移备用
- 可测试连接是否正常
- 密钥以脱敏方式显示（如 \`sk-...ab12\`）

### 图片连接池

管理 AI 图片生成的 API 连接，配置方式同文本连接池。

### 免费图库

配置免费图片服务的 API 密钥：
- **Pexels**：高质量免费图片
- **Unsplash**：艺术风格图片
- **Pixabay**：插画和矢量图

### AI 身份

自定义 AI 在前台对话中的表现：
- **AI 名称**：对话中显示的名称
- **AI 头像**：对话中显示的头像 URL
- **欢迎语**：首次打开对话时显示的欢迎消息
- **系统提示词**：自定义 AI 的行为指令

### 悬浮按钮

控制前台右下角 AI 悬浮按钮的外观和行为：
- **位置**：水平和垂直方向的位置（桌面/移动端独立设置）
- **外观**：颜色、渐变、阴影、透明度、大小、形状、图标
- **动画**：呼吸动画、悬停效果、显示延迟
- **显示控制**：前台/后台/文章页/排除路径/移动端
- **提示文字**：鼠标悬停时显示的文字
- **集成模式**：融入主题（与 Zibll 主题按钮合并）vs 独立显示

### 速率安全

- **角色速率限制**：不同用户角色的调用频率限制
- **月度预算**：每月 AI API 调用费用上限`},{id:"function-config",title:"2.3 功能配置",content:`功能配置包含四个 Tab：

### 流水线

自动化处理流水线，文章发布后自动按顺序执行：

**同步阶段**（发布时立即执行）：
1. 生成标签
2. 生成 SEO 标题描述
3. 生成 AI 摘要
4. 生成封面图
5. 生成图片 ALT 文本
6. 构建内链

**异步阶段**（发布后在后台执行）：
1. 内容润色
2. 内容扩展
3. WebP 图片转换

**触发条件**：发布文章 / 更新文章 / 定时扫描 / 手动触发

**排除设置**：
- 排除特定分类（可自动包含子分类）
- 排除特定作者
- 排除特定文章类型
- 排除密码保护文章（默认开启）
- 排除置顶文章（默认关闭）
- 最小内容长度限制（默认 100 字符）

**文章冷却期**：发布后 N 分钟内不触发流水线（默认 5 分钟），给作者手动修改的时间窗口。

**定时扫描设置**：
- 扫描间隔：5/10/15/30/60 分钟
- 每次扫描数量：5-100 篇
- 手动批量执行：支持按范围（最近 N 篇/全部/指定 ID/日期范围/分类筛选）选择文章和阶段

### 自动化规则

灵活的"事件→条件→动作"规则引擎：

**可用事件**：
- 文章发布 / 文章更新
- 评论发布
- 每日定时（可自定义时间）
- AI 定时写文章（可多选时间点）

**条件格式**：使用 \`current_hour: {in: [8, 12, 18]}\` 匹配指定时间点

**规则类型**：
- 永久生效
- 仅执行一次
- 限次执行（可设最大执行次数和过期时间）

**动作**：选择工具后自动展示参数表单（中文标签 + 类型匹配输入）

### 工具注册表

查看所有已注册的 AI 工具（共 129+ 个）：
- 搜索和过滤工具
- 查看工具详情和参数说明
- 在线测试工具调用

### 主题适配

- 自动检测主题类型
- 显示能力矩阵（✅ 可用 / ⚠️ 不可用）`},{id:"logs",title:"2.4 操作日志",content:`记录所有 AI 操作的完整历史：

### 日志分类
- **全部日志**：所有操作记录
- **AI 对话**：前台和后台的对话记录
- **工具调用**：AI 工具执行记录
- **流水线**：自动化流水线执行记录
- **自动化规则**：规则引擎触发记录
- **错误**：执行失败的记录

### 功能
- 搜索（按目标或操作类型）
- 按状态筛选（成功/失败）
- 按日期范围筛选
- 导出 CSV
- 查看操作详情
- 撤销操作（部分支持）`},{id:"license",title:"2.5 授权管理",content:`查看授权状态、到期时间和激活信息。

- 显示当前授权状态（已授权/未授权/已过期）
- 显示到期时间
- 输入新授权码激活
- 授权到期前 7 天会显示提醒`}]},{id:"chat-tools",title:"3. AI对话功能",subsections:[{id:"content-tools",title:"3.1 内容工具",content:`在 AI 对话中可触发的所有内容工具：

### 标签生成
> "给文章 82 生成 5 个标签"

支持三种模式：覆盖 / 追加 / 跳过。
AI 生成的标签会标记为 \`_xzd_ai_tags_list\`，与手动标签区分。

### SEO 生成
> "给文章 82 生成 SEO 标题和描述"

采用**双通道写入**：
- 通道一：写入 \`_xzd_ai_seo_*\` 自定义字段
- 通道二：写入 Zibll 主题的 \`zib_other_data\`

### 摘要生成
> "给文章 82 生成 AI 摘要"

生成的摘要写入 \`post_excerpt\` 或自定义字段。

### 内容润色
> "润色文章 82"
> "润色文章 82，语气更正式"

支持附加指令。

### 内容翻译
> "翻译文章 82 为英文"

### 内容改写
> "用专业风格改写文章 82"

### 内容扩展
> "扩展文章 82"

### 内链构建
> "给文章 82 构建内链"

### 质量评分
> "给文章 82 做质量评分"

### AI 写文章
> "写一篇关于 AI 发展趋势的文章"

可用参数：主题、关键词、分类、标签、发布状态（发布/草稿/待审）、插图数量。

### 封面生成
> "给文章 82 生成封面图"

图片来源支持 AI 生成或免费图库。

### ALT 文本
> "给文章 82 的图片生成 ALT 文本"`},{id:"wp-tools",title:"3.2 WP 管理工具",content:'在 AI 对话中管理 WordPress：\n\n### 文章管理\n- 创建文章：`"创建一篇文章，标题为..."`\n- 更新文章：`"更新文章 82 的标题为..."`\n- 发布文章：`"发布文章 85"`\n- 删除文章：`"删除文章 85"`\n- 搜索文章：`"搜索关于 AI 的文章"`\n- 查看文章：`"查看文章 82 的内容"`\n- 站点统计：`"网站有多少篇文章"`\n- 清除缓存：`"清除网站缓存"`\n\n### 用户管理\n- 列出用户：`"列出所有管理员"`\n- 查看用户：`"查看用户 testuser"`\n- 创建用户：`"创建一个订阅者账号"`\n- 修改角色：`"将 testuser 改为作者"`\n- 删除用户：`"删除用户 xxx"`\n\n### 分类标签\n- 创建/删除分类\n- 创建/删除标签'},{id:"zibll-tools",title:"3.3 主题工具（Zibll 深度适配）",content:'以下工具仅在 Zibll 主题下可用：\n\n### 积分系统\n- `"查看用户 testuser 的积分"`\n- `"给 testuser 增加 100 积分"`\n- `"扣减 testuser 50 积分"`\n\n### 余额系统\n- `"查看 testuser 的余额"`\n- `"给 testuser 增加 50 元余额"`\n- `"扣减 testuser 20 元余额"`\n\n### VIP 系统\n- `"查看 testuser 的 VIP 状态"`\n- `"设置 testuser 为 VIP 会员，1 个月"`\n- `"修改 testuser 的 VIP 等级"`\n- `"移除 testuser 的 VIP"`\n\n### 封禁系统\n- `"封禁用户 testuser，原因：恶意评论"`\n- `"解封用户 testuser"`\n\n### 通知系统\n- `"给 testuser 发送站内通知：你的文章已审核通过"`\n\n### 签到系统\n- `"今日签到"（需要用户登录）`\n\n### 勋章系统\n- `"查看 testuser 的勋章"`\n- `"给 testuser 添加勋章"`\n\n### 订单查询\n- `"查看最近 10 笔订单"`\n- `"查看 testuser 的订单"`\n\n### 邀请数据\n- `"查看 testuser 的邀请数据"`'},{id:"media-tools",title:"3.4 媒体工具",content:`### 搜索免费图库
> "搜索关于 AI 的免费图片"

从 Pexels / Unsplash / Pixabay 搜索图片，可直接插入文章。

### 生成内插图
> "给文章 82 生成 2 张内插图"

AI 自动分析文章结构，在合适的段落之间插入图片。

### 图片 ALT
> "给媒体库所有图片生成 ALT 文本"

### 图片本地化
> "将外链图片本地化到媒体库"

### WebP 转换
> "将文章 82 中的图片转为 WebP 格式"

需服务器安装 Imagick 或 GD 库。

### 添加水印
> "给文章 82 的图片添加水印"`},{id:"kb-tools",title:"3.5 知识库工具",content:`### 搜索知识库
> "搜索知识库关于 SEO 的内容"

搜索 AI 已学习的知识条目。

### 触发学习
> "触发知识库学习"

手动触发 AI 学习流程。AI 会在设定的学习时间自动学习最新文章，你也可以手动触发。`},{id:"friendlink-tools",title:"3.6 友链工具",content:`### 添加友链
> "添加友链：名称 AI 研究所，网址 https://example.com"

### 查看友链
> "查看所有友链"

### 删除友链
> "删除友链 AI 研究所"

### 友链互审
> "提交友链接互审"
> "审批友链接申请"`},{id:"automation-tools",title:"3.7 自动化规则（对话中管理）",content:`### 创建规则
> "设置规则：新文章发布时自动生成标签、SEO 和摘要"

### 查看规则
> "查看当前所有自动化规则"

### 启用/禁用规则
> "启用规则 1"
> "禁用规则 2"

### 删除规则
> "删除规则 3"

### 查询可用事件
> "有哪些可用的自动化事件"

### 查询可用动作
> "有哪些可用的自动化动作"

### 定时写文章
> "每天早上 8 点写一篇 AI 行业动态，自动配 2 张图，发布到 AI 技术分类"`},{id:"pipeline-tools",title:"3.8 流水线（对话中管理）",content:`### 查看配置
> "查看当前流水线配置"

### 修改配置
> "开启标签生成的同步处理"

### 批量处理
> "批量处理最近 30 天的文章，生成标签和 SEO"
> "批量处理 AI 分类下的所有文章"`}]},{id:"editor",title:"4. 编辑器AI面板",subsections:[{id:"gutenberg-panel",title:"4.1 Gutenberg 侧边栏",content:`在 Gutenberg 编辑器（区块编辑器）中，右侧边栏会显示 **AI 面板**。

### 7 个 Tab

| Tab | 功能 |
|-----|------|
| 摘要 | AI 生成文章摘要，可插入到 excerpt |
| 标签 | AI 生成标签，可预览/选择/直接应用 |
| SEO | AI 生成 SEO 标题和描述，双通道写入 |
| 润色 | AI 润色文章内容，支持附加指令 |
| 内链 | AI 构建内链，自动识别可链接关键词 |
| 图片 | AI 生成封面图、内插图、免费图库搜索 |
| 建议 | AI 给出的综合优化建议 |

### 使用方式
1. 编辑文章时，点击右侧「AI 面板」
2. 选择对应 Tab
3. 点击「生成」或「一键处理」
4. 预览结果，满意后点击「应用」

### 一键全处理
在「建议」Tab 中点击「一键全处理」，自动执行：
标签生成 → SEO 生成 → 摘要生成 → 内链构建`},{id:"classic-editor",title:"4.2 经典编辑器",content:`经典编辑器中同样可以使用 AI 面板，功能与 Gutenberg 一致。

在经典编辑器页面，AI 面板以固定按钮的形式呈现，点击后展开面板。`},{id:"one-click",title:"4.3 一键全处理流程",content:`### 执行顺序

\`\`\`
标签生成 → SEO 标题描述 → 摘要生成 → 封面图 → 图片 ALT → 内链构建
\`\`\`

### 注意事项

- 一键全处理使用已配置的默认参数
- 处理结果会显示在 AI 面板中，需手动确认后应用
- 如果某一步失败，后续步骤仍会继续执行
- 处理完成可在 **操作日志** 中查看详情`}]},{id:"automation",title:"5. 自动化与定时任务",subsections:[{id:"pipeline-work",title:"5.1 流水线工作原理",content:`### 执行流程

\`\`\`
用户发布文章
    ↓
EventTrigger 检测到 publish_post 事件
    ↓
检查自动化规则 → 有规则跳过被规则覆盖的阶段
    ↓
剩余阶段入队到 PendingQueue
    ↓
心跳系统每 30 秒检查队列
    ↓
调度 Worker 执行各阶段
    ↓
结果写入文章（保护 post_modified 不篡改）
    ↓
记录到操作日志
\`\`\`

### 同步 vs 异步

- **同步阶段**：发布时立即执行，用户可在编辑器中看到结果
- **异步阶段**：发布后在后台执行，不阻塞用户操作

### 冷却期

文章发布后 5 分钟内不触发流水线（可配置），给作者手动修改的时间窗口。`},{id:"rule-work",title:"5.2 自动化规则工作原理",content:`### 三要素

\`\`\`
事件（Event） → 条件（Condition） → 动作（Action）
\`\`\`

### 事件（Event）

触发规则执行的事情：
- 文章发布 / 文章更新
- 评论发布
- 每日定时（自定义小时）
- AI 定时写文章

### 条件（Condition）

限制规则执行的条件（可选）：
- 时间匹配：\`current_hour: {in: [8, 12, 18]}\`
- 文章分类匹配
- 作者匹配
- 等等

### 动作（Action）

条件满足后执行的操作：
- 选择任意已注册的 AI 工具
- 填写工具参数
- 例如：\`write_article\`（写文章）、\`generate_tags\`（生成标签）

### 执行次数

- **永久生效**：每次事件触发都执行
- **仅执行一次**：执行后自动禁用
- **限次执行**：最多执行 N 次或到指定日期后禁用`},{id:"timed-scan",title:"5.3 定时扫描",content:`定时扫描是批处理的自动版本。

### 工作原理

\`\`\`
每 N 分钟（可配置 5/10/15/30/60）
    ↓
扫描最近发布的文章
    ↓
检查文章是否已被流水线处理过
    ↓
未处理 → 入队等待 Worker 处理
已处理 → 跳过
\`\`\`

### 队列水位控制

为防止低配服务器队列爆炸，系统内置**水位自动控制**：

\`\`\`
高水位 50 篇 → 暂停扫描 + 停止旧文章入队
     ↓ 等待 Worker 消化队列
低水位 10 篇 → 恢复扫描 + 恢复入队

新发布文章始终不受水位限制，优先处理
\`\`\`

- 队列总积压 ≥ 50 时自动暂停历史扫描
- 队列降到 ≤ 10 时自动恢复
- 新发布文章走快速通道，永远优先

### 配置

在 **功能配置 → 流水线** 左侧：
- **扫描间隔**：建议不低于 10 分钟（共享主机）
- **每次数量**：5-100 篇（推荐 10-20）

### 适用场景

- 新发布文章在冷却期内被跳过，冷却期后定时扫描自动补处理
- 网站有大量历史文章，不想手动批量处理`},{id:"scheduled-write",title:"5.4 AI 定时写文章",content:`### 配置方式

**方式一**（推荐）：后台 → 功能配置 → 自动化规则 → 新建规则
- 选择事件：AI 定时写文章
- 勾选触发时间：如 8 点、12 点、18 点
- 选择动作：write_article
- 填写参数：主题、分类、插图数量、发布状态等

**方式二**：在 AI 对话中
> "每天早上 8 点和中午 12 点各写一篇 AI 行业动态，自动配 2 张图，发布到 AI 技术分类"

### 完整流程

\`\`\`
Cron 每 30 分钟检查
    ↓
current_hour 匹配 conditions
    ↓
RuleEngine 执行 write_article
    ↓
AI 生成文章内容 + Gutenberg 块
    ↓
分析文章结构，找到最佳插图位置
    ↓
获取图片（AI 生成或免费图库）
    ↓
下载图片到媒体库，插入 core/image 块
    ↓
设置特色图片（如果开启自动封面）
    ↓
生成 SEO（如果开启）
    ↓
wp_insert_post 发布/草稿
    ↓
daily_max 防重检查
\`\`\`

### 安全机制

- 每次执行前检查当天已写文章数，超限自动跳过
- AI 调用失败自动重试 1 次
- 文章内容 < 100 字符视为失败，不发布
- 每篇文章之间间隔 30 秒，防止 API 速率限制`},{id:"batch-process",title:"5.5 批量处理",content:`### 多 Worker 并发

当批量处理大量文章时，系统自动启动多个 Worker 并行工作：

\`\`\`
Queue Manager 接收批量请求
    ↓
按优先级排序（新文章优先）
    ↓
分块（每块最多 N 篇，N = 最大并发数）
    ↓
调度到 Action Scheduler
    ↓
Worker 1 → 文章 A   Worker 2 → 文章 B   Worker 3 → 文章 C
    ↓                ↓                ↓
独立锁（每篇文章）  独立锁            独立锁
    ↓                ↓                ↓
执行阶段            执行阶段          执行阶段
    ↓                ↓                ↓
释放锁 + 记录日志   释放锁 + 记录日志  释放锁 + 记录日志
\`\`\`

### 优先级

1. **最高**：最近 1 小时内新发布的文章
2. **高**：最近 24 小时内修改的文章
3. **中**：从未处理过的历史文章
4. **低**：已处理过但内容变更的文章

### 并发设置

在 **功能配置 → 流水线** 右侧 **Worker 并发设置** 卡片：

**自动模式**（默认）：系统根据服务器类型自动判断：
- 共享主机/虚机 → 1 个 Worker
- VPS → 2 个 Worker
- 独服/高性能 → 4 个 Worker

**手动模式**：可以临时调高并发加速处理积压文章：
- 范围：1-8 个 Worker
- 保存前会弹出确认提示
- 处理完成后建议恢复自动

### 性能保证

- 全异步后台处理，不影响前台访问
- 新文章始终优先处理
- AI API 全局速率限制（令牌桶算法）
- 单 Worker 内存保护`},{id:"automation-pipeline-coop",title:"5.6 自动化与流水线的协作",content:`### 按阶段粒度互斥

自动化规则和流水线**不会重复处理**同一篇文章的同一阶段。

**举例**：
- 流水线配置了：标签 → SEO → 摘要 → 封面
- 自动化规则：发布文章时只执行「摘要」
- 实际执行：自动化规则执行摘要，流水线执行标签、SEO、封面
- 摘要不会被执行两次！

### 计算逻辑

\`\`\`
1. 收集所有 publish_post 规则的 action tool_id → 集合 R
2. 流水线启用的 stages → 集合 P
3. 计算 P - R = 剩余需执行的阶段
4. 如果剩余为空 → 完全跳过流水线
5. 如果剩余非空 → 只执行剩余阶段
\`\`\`

### AI 标签 vs 手动标签

系统会自动区分 AI 生成的标签和手动添加的标签：
- AI 生成的标签记录在 \`_xzd_ai_tags_list\` 自定义字段中
- 当文章已有手动标签时，\`fill_empty\` 和 \`generate_tags\` 默认跳过
- 用户可选择覆盖/追加/跳过模式`}]},{id:"floating-btn",title:"6. 浮动按钮",subsections:[{id:"fb-modes",title:"6.1 两种模式",content:`### 融入主题模式

- 检测到 Zibll 主题后**默认启用**
- AI 按钮与主题自带的悬浮按钮**融合**为一个
- 用户体验更统一

### 独立显示模式

- AI 按钮完全独立显示
- 可自定义位置、外观、动画
- 适用场景：
  - 非 Zibll 主题
  - 希望 AI 按钮有独立视觉风格
  - 主题按钮位置与 AI 按钮冲突

### 如何切换

进入 **AI配置 → 悬浮按钮 → 集成模式**，选择「融入主题」或「独立显示」。

如果切换到独立模式但按钮没有变化，请清除浏览器缓存后刷新。`},{id:"fb-position",title:"6.2 位置设置",content:`### 桌面端和移动端独立设置

- **水平位置**：左 / 右 / 居中
- **垂直位置**：上 / 中 / 下
- **偏移量**：距边缘的像素值

两端的设置互相独立——桌面端可以放在右下角，移动端放在左下角。`},{id:"fb-appearance",title:"6.3 外观自定义",content:`### 可自定义项

| 属性 | 说明 |
|------|------|
| 颜色 | 按钮背景色（支持 HEX/RGB） |
| 渐变 | 支持线性/径向渐变背景 |
| 阴影 | 阴影颜色、大小、模糊度 |
| 透明度 | 0-100% |
| 大小 | 按钮尺寸（px） |
| 形状 | 圆形 / 圆角方形 |
| 图标 | SVG 图标或 Emoji |

所有修改**实时预览**。`},{id:"fb-animation",title:"6.4 动画效果",content:`- **呼吸动画**：按钮缓慢缩放（默认开启）
- **悬停效果**：鼠标悬停时放大/变亮
- **显示延迟**：页面加载后延迟 N 毫秒显示`},{id:"fb-display",title:"6.5 显示控制",content:`### 显示位置

- 前台页面
- 后台页面
- 仅文章页
- 排除指定路径（如 /checkout, /my-account）
- 移动端是否显示

### 速率限制

可设置不同角色每日最大对话次数。`},{id:"fb-tooltip",title:"6.6 提示文字",content:`自定义鼠标悬停时显示的提示文字，如：

- "AI 助手"
- "有问题？问我"
- "智能写作助手"

支持 Emoji。`}]},{id:"permissions",title:"7. 权限说明",subsections:[{id:"perm-roles",title:"7.1 功能权限对照表",content:`| 功能 | 游客 | 订阅者 | 作者 | 编辑 | 管理员 |
|------|------|--------|------|------|--------|
| AI 对话 | ✅ | ✅ | ✅ | ✅ | ✅ |
| 查看文章 | ❌ | ✅ | ✅ | ✅ | ✅ |
| 编辑自己的文章 | ❌ | ❌ | ✅ | ✅ | ✅ |
| 编辑他人文章 | ❌ | ❌ | ❌ | ✅ | ✅ |
| 发布文章 | ❌ | ❌ | ✅ | ✅ | ✅ |
| 管理分类标签 | ❌ | ❌ | ❌ | ✅ | ✅ |
| 管理用户 | ❌ | ❌ | ❌ | ❌ | ✅ |
| 后台设置 | ❌ | ❌ | ❌ | ❌ | ✅ |
| 操作日志 | ❌ | ❌ | ❌ | ❌ | ✅ |
| 授权管理 | ❌ | ❌ | ❌ | ❌ | ✅ |`},{id:"perm-tools",title:"7.2 对话工具权限",content:`对话中可使用的工具取决于用户的 WordPress 角色：

- **游客**：仅可使用基本信息查询
- **订阅者**：可查看自己的信息，使用内容生成工具
- **作者**：可管理自己的文章，使用所有内容工具
- **编辑**：可管理所有文章，使用大部分管理工具
- **管理员**：可使用所有工具（包括用户管理、系统设置）

> 如果对话中提示"权限不足"，说明你的角色无权使用该工具。`},{id:"perm-rate",title:"7.3 速率限制",content:`### 默认限制

| 角色 | 每日对话次数 | 每小时次数 |
|------|-------------|-----------|
| 游客 | 10 | 5 |
| 订阅者 | 50 | 15 |
| 作者 | 200 | 30 |
| 编辑 | 500 | 60 |
| 管理员 | 1000 | 100 |

### 自定义

进入 **AI配置 → 速率安全** 可自定义各角色的限制。

### 月度预算

设置每月 AI API 调用费用上限，超出后自动暂停，防止意外高额账单。`}]},{id:"faq",title:"8. 常见问题",subsections:[{id:"faq-settings-lost",title:"8.1 为什么保存设置后刷新丢失了？",content:`### 原因

WordPress 的 \`wp_options\` 表在并发写入时可能发生锁冲突，导致部分设置保存失败。

### 解决

V7 已修复此问题：
- 配置保存采用 3 次指数退避重试（200ms / 400ms / 800ms）
- 如果保存失败，前端会明确提示「保存失败，请稍后重试」
- 不会再出现"显示成功但实际未保存"的情况

### 如果仍然遇到

1. 检查 \`wp_options\` 表是否正常
2. 检查是否有其他插件同时大量写入配置
3. 联系管理员检查数据库状态`},{id:"faq-post-date",title:"8.2 为什么旧文章处理完出现在首页？",content:`### 原因

WordPress 默认按 \`post_modified\` 排序。如果 AI 批量处理历史文章时更新了修改时间，这些旧文章就会"跳"到首页。

### 解决

V7 已修复：所有 AI 触发的文章更新都会**显式保留 \`post_date\` 和 \`post_modified\`** 字段。

处理完成后：
- 文章内容更新（标签、SEO、摘要写入自定义字段）
- 但 \`post_modified\` **不变**
- 旧文章不会跳到首页

如果你仍然看到日期被修改，请检查操作日志中该文章的记录。`},{id:"faq-conflict",title:"8.3 为什么自动化规则和流水线好像冲突了？",content:`它们**不会冲突**。

系统采用**按阶段粒度互斥**的机制：
- 如果自动化规则执行了「生成标签」，流水线就跳过「生成标签」
- 但流水线仍会执行其他阶段（SEO、摘要等）

详见 **5.6 自动化与流水线的协作**。`},{id:"faq-not-publish",title:"8.4 AI 写文章为什么没有自动发布？",content:`检查以下几点：

1. **发布状态**：创建定时写文章规则时，确认「发布状态」设置为「发布」而非「草稿」
2. **日限额**：检查当天已写文章数是否达到限制（默认每天 3 篇）
3. **内容质量**：AI 生成的内容 < 100 字符会视为失败
4. **操作日志**：查看是否有相关错误记录

建议首次使用先设为「草稿」模式试运行，确认效果后再改为「发布」。`},{id:"faq-floating-mode",title:"8.5 悬浮按钮为什么不能切换独立模式？",content:"可能原因：\n\n1. **JS 检测优先**：即使后台设置了独立模式，JS 层检测到 Zibll 主题会自动融合 → **V7 已修复**：JS 会读取 `--xzd-integration-mode` CSS 变量，值为 `standalone` 时强制跳过融合\n2. **缓存问题**：清除浏览器缓存后刷新\n3. **CDN 缓存**：如果使用 CDN，清除 CDN 缓存\n\n如果仍未生效，在浏览器控制台执行：\n```js\ngetComputedStyle(document.documentElement).getPropertyValue('--xzd-integration-mode')\n```\n应返回 `standalone`。如果不是，说明设置未保存成功。"},{id:"faq-scan-vs-batch",title:"8.6 定时扫描和批量操作有什么区别？",content:`| 项目 | 定时扫描 | 批量操作 |
|------|---------|---------|
| 触发方式 | 自动（Cron 定时） | 手动（后台点击） |
| 目标 | 发现并补充遗漏的文章 | 一次性处理指定范围文章 |
| 适用场景 | 无人值守，自动维护 | 初始化、专项处理 |
| 范围 | 最近发布的未处理文章 | 自定义范围（最近/全部/ID/日期/分类） |
| 并发 | 使用 Worker 系统 | 使用 Worker 系统 |

两者**底层使用同一套 Worker 并发系统**，只是触发方式不同。`}]},{id:"best-practices",title:"9. 注意事项与最佳实践",subsections:[{id:"bp-test-first",title:"9.1 首次使用建议",content:`### 推荐流程

1. **先手动，后自动**：选 3-5 篇文章手动处理，确认效果满意
2. **逐个开启阶段**：先开启「标签生成」，观察效果后再开启「SEO 生成」...
3. **关注操作日志**：查看是否有错误，及时调整配置
4. **确认效果**：去前台查看文章页面，确认标签、SEO、摘要显示正常
5. **再开启全自动**：确认无误后开启流水线和自动化规则`},{id:"bp-batch-size",title:"9.2 大量历史文章建议分批处理",content:`### 建议

- **每批不超过 50 篇**
- 批次之间间隔 10 分钟以上
- 优先处理最重要的分类
- 共享主机建议每批 20-30 篇

### 为什么要分批

- 大量文章同时处理会导致 API 调用密集
- AI API 有速率限制
- 分批处理可以在每批之间检查结果，及时调整配置`},{id:"bp-draft-first",title:"9.3 AI 定时写文章建议先试运行",content:`### 建议流程

1. **第 1 阶段**：设为「草稿」模式，每天 1 篇，运行 2-3 天
2. **检查质量**：查看文章内容、插图位置、分类标签是否正确
3. **调整参数**：根据实际效果调整主题、提示词、插图数量
4. **第 2 阶段**：满意后改为「发布」模式
5. **第 3 阶段**：逐步增加频率（每天 1 篇 → 2 篇 → 3 篇）

### 不要

- 不要一开始就每天 3 篇自动发布
- 不要不检查就批量发布 AI 文章
- 不要用过于宽泛的写作主题`},{id:"bp-scan-interval",title:"9.4 定时扫描间隔建议",content:`### 建议

| 主机类型 | 建议间隔 | 原因 |
|---------|---------|------|
| 共享主机 | ≥ 15 分钟 | 资源有限，频繁扫描影响性能 |
| VPS（2C4G） | ≥ 10 分钟 | 有足够资源 |
| VPS（4C8G+） | ≥ 5 分钟 | 资源充裕 |

### 为什么不建议太频繁

- 每次扫描都要查询数据库
- 扫描间隔太短导致重复扫描同一批文章
- 文章冷却期默认 5 分钟，扫描间隔应大于冷却期`},{id:"bp-worker-count",title:"9.5 Worker 并发数建议",content:`### 自动模式（推荐）

系统自动根据服务器类型选择并发数，无需手动干预。

| 主机类型 | 自动并发 | 说明 |
|---------|---------|------|
| 共享主机/虚机 | 1 | 资源有限，单Worker稳妥 |
| VPS（2C4G） | 2 | 平衡性能和安全 |
| VPS（4C8G+） | 2 | 可手动调高到3-4 |
| 独服 | 4 | 资源充裕 |

### 手动调高（临时加速）

当队列积压较多时可临时调高并发：

1. 进入 **功能配置 → 流水线** 右侧 **Worker 并发设置**
2. 切换到「手动」模式
3. 设置需要的并发数（建议不超过4）
4. 点击保存，确认弹窗后生效
5. 队列清空后点「恢复自动」

### 不建议超过 4

- 每个 Worker 约占用 128MB 内存
- 超过 4 个并发可能导致：
  - 服务器内存不足（4×128MB = 512MB+）
  - AI API 速率限制触发
  - 数据库连接数耗尽`}]}];function R(){const k=[];for(const d of h)for(const l of d.subsections)k.push({sectionId:d.id,sectionTitle:d.title,subId:l.id,subTitle:l.title,text:l.title+" "+l.content});return k}const H={class:"docs-page"},U={class:"docs-topbar"},J={class:"topbar-search"},Q={class:"docs-body"},X={class:"docs-toc"},F={class:"toc-inner"},K=["onClick"],Y={class:"toc-subsections"},ee=["onClick","title"],te=["id"],oe=["innerHTML"],ne={key:1,class:"empty-result"},ie={__name:"DocsView",setup(k){const d=f(""),l=f({quickstart:!0}),x=f("intro"),v=f(null),w=R(),A=G(()=>{const i=d.value.trim().toLowerCase();if(!i)return h;const e=new Set;for(const t of w)t.text.toLowerCase().includes(i)&&e.add(t.subId);return e.size===0?[]:h.map(t=>{const r=t.subsections.filter(n=>e.has(n.id));return r.length===0?null:{...t,subsections:r}}).filter(Boolean)});function S(i){return!!l.value[i]}function y(i){l.value[i]?l.value={}:l.value={[i]:!0}}function T(i){x.value=i;const e=h.find(t=>t.subsections.some(r=>r.id===i));e&&(l.value={[e.id]:!0}),M(()=>{const t=document.getElementById(i);t&&v.value&&v.value.scrollTo({top:t.offsetTop-24,behavior:"smooth"})})}V(d,i=>{if(i.trim()){const e={};for(const t of A.value)e[t.id]=!0;l.value=e}});function D(i){if(!i)return"";let e=i;const t=[];e=e.replace(/```(\w*)\n([\s\S]*?)```/g,(n,o,p)=>{const u=t.length,P=p.replace(/&/g,"&amp;").replace(/</g,"&lt;").replace(/>/g,"&gt;");return t.push(`<pre><code class="${o}">${P}</code></pre>`),`%%CODEBLOCK_${u}%%`});const r=[];return e=e.replace(/`([^`]+)`/g,(n,o)=>{const p=r.length,u=o.replace(/&/g,"&amp;").replace(/</g,"&lt;").replace(/>/g,"&gt;");return r.push(`<code>${u}</code>`),`%%INLINECODE_${p}%%`}),e=e.replace(/\n(\|.+\|)\n\|[-| :]+\|\n((?:\|.+\|\n?)*)/g,(n,o,p)=>{const u=o.split("|").filter(I=>I.trim()).map(I=>`<th>${I.trim()}</th>`).join(""),P=p.trim().split(`
`).map(I=>`<tr>${I.split("|").filter($=>$.trim()).map($=>`<td>${$.trim()}</td>`).join("")}</tr>`).join("");return`
<table><thead><tr>${u}</tr></thead><tbody>${P}</tbody></table>
`}),e=e.replace(/^#### (.+)$/gm,"<h4>$1</h4>"),e=e.replace(/^### (.+)$/gm,"<h3>$1</h3>"),e=e.replace(/^## (.+)$/gm,"<h2>$1</h2>"),e=e.replace(/^# (.+)$/gm,"<h1>$1</h1>"),e=e.replace(/^---$/gm,"<hr>"),e=e.replace(/^&gt; (.+)$/gm,"<blockquote>$1</blockquote>"),e=e.replace(/<\/blockquote>\n<blockquote>/g,`
`),e=e.replace(/^- (.+)$/gm,"<li>$1</li>"),e=e.replace(/((?:<li>.*<\/li>\n?)+)/g,"<ul>$1</ul>"),e=e.replace(/^\d+\. (.+)$/gm,"<li>$1</li>"),e=e.replace(/\*\*(.+?)\*\*/g,"<strong>$1</strong>"),e=e.replace(/\*(.+?)\*/g,"<em>$1</em>"),e=e.replace(/\[([^\]]+)\]\(([^)]+)\)/g,'<a href="$2" target="_blank">$1</a>'),e=e.replace(/\n\n+/g,"</p><p>"),e="<p>"+e+"</p>",e=e.replace(/<p>\s*<\/p>/g,""),e=e.replace(/<p>(<h[1234]>)/g,"$1"),e=e.replace(/(<\/h[1234]>)<\/p>/g,"$1"),e=e.replace(/<p>(<table>)/g,"$1"),e=e.replace(/(<\/table>)<\/p>/g,"$1"),e=e.replace(/<p>(<ul>)/g,"$1"),e=e.replace(/(<\/ul>)<\/p>/g,"$1"),e=e.replace(/<p>(<pre>)/g,"$1"),e=e.replace(/(<\/pre>)<\/p>/g,"$1"),e=e.replace(/<p>(<blockquote>)/g,"$1"),e=e.replace(/(<\/blockquote>)<\/p>/g,"$1"),e=e.replace(/<p>(<hr>)<\/p>/g,"$1"),e=e.replace(/%%CODEBLOCK_(\d+)%%/g,(n,o)=>t[parseInt(o)]),e=e.replace(/%%INLINECODE_(\d+)%%/g,(n,o)=>r[parseInt(o)]),e}return(i,e)=>{const t=O("n-icon"),r=O("n-input");return a(),c("div",H,[s("div",U,[e[1]||(e[1]=s("div",{class:"topbar-left"},[s("h1",{class:"page-title"},"使用说明"),s("p",{class:"page-desc"},"小栈AI插件完整功能文档与使用指南")],-1)),s("div",J,[b(r,{value:d.value,"onUpdate:value":e[0]||(e[0]=n=>d.value=n),placeholder:"搜索文档...",clearable:"",round:"",size:"small",style:{width:"260px"}},{prefix:L(()=>[b(t,{component:m(C)},null,8,["component"])]),_:1},8,["value"])])]),s("div",Q,[s("aside",X,[s("div",F,[(a(!0),c(_,null,g(A.value,n=>(a(),c("div",{key:n.id,class:"toc-section"},[s("div",{class:W(["toc-section-title",{expanded:S(n.id)}]),onClick:o=>y(n.id)},[b(t,{size:"14",component:S(n.id)?m(q):m(N)},null,8,["component"]),s("span",null,E(n.title),1)],10,K),z(s("div",Y,[(a(!0),c(_,null,g(n.subsections,o=>(a(),c("a",{key:o.id,class:W(["toc-subitem",{active:x.value===o.id}]),onClick:Z(p=>T(o.id),["prevent"]),title:o.title},E(o.title),11,ee))),128))],512),[[B,S(n.id)]])]))),128))])]),s("main",{class:"docs-content",ref_key:"contentRef",ref:v},[A.value.length>0?(a(!0),c(_,{key:0},g(A.value,n=>(a(),c("div",{key:n.id,class:"content-section"},[(a(!0),c(_,null,g(n.subsections,o=>(a(),c("div",{key:o.id,id:o.id,class:"doc-block"},[s("div",{innerHTML:D(o.content)},null,8,oe)],8,te))),128))]))),128)):(a(),c("div",ne,[b(t,{size:"48",component:m(C),style:{color:"#D4D4D8"}},null,8,["component"]),s("p",null,'未找到匹配"'+E(d.value)+'"的文档内容',1),e[2]||(e[2]=s("p",{class:"empty-hint"},'试试其他关键词，如"标签"、"SEO"、"流水线"、"定时写文章"',-1))]))],512)])])}}},ce=j(ie,[["__scopeId","data-v-5025ff15"]]);export{ce as default};
