# PLAYGROUND 桌面主题制作指导书

> 用途：指导 AI 生成可以直接导入 PLAYGROUND 的桌面主题 JSON。桌面主题只负责手机主页的视觉与布局，不负责聊天记录、角色和其他业务数据。

## 1. 桌面主题负责什么

桌面主题可以包含：

- 桌面壁纸
- App 图标图片
- App 在第几页、哪个网格位置
- Dock 中的 App 顺序
- 桌面主题中附带的小组件资源

桌面主题不能包含：

- 角色资料
- 用户资料
- 聊天记录和消息
- Memory、世界书
- API Key、模型配置
- 任何 IndexedDB 业务数据

## 2. 正确导入方式

1. 让 AI 输出纯 JSON。
2. 保存为例如 `rainy-desktop-theme.json`。
3. 进入“外观 App”。
4. 打开“壁纸与图标”。
5. 点击“导入桌面主题”。
6. 选择 JSON 文件并确认。

注意：当前桌面主题导入器支持壁纸、App 图标、桌面布局、Dock 和桌面小组件资源。统一的图标大小、字体、字号、字体颜色需要在导入后进入“自定义应用图标”统一调整；不要让 AI 伪造未被导入器识别的字段。

## 3. 给 AI 的直接指令

```text
你是 PLAYGROUND Web 的桌面主题设计师。

请生成一个可以直接保存为 .json 并导入 PLAYGROUND 的桌面主题文件。

输出要求：
- 只输出纯 JSON，不要 Markdown 代码围栏，不要解释文字。
- JSON 必须是严格合法 JSON：双引号、无注释、无尾逗号、无未转义换行。
- 主题只包含壁纸、App 图标、桌面布局、Dock 顺序和可选桌面小组件。
- 严禁包含角色、用户、聊天、消息、Memory、世界书、API Key 或数据库数据。
- 手机桌面基准尺寸为 390 x 844。
- 桌面每页是 4 列 x 5 行，gridX 只能是 0 到 3，gridY 只能是 0 到 4。
- 不要让两个 App 占用同一页同一个格子。
- 每个图标都使用 URL 或 data:image/...;base64,...，不要写本地电脑路径。
- 如果没有图片资源，保留 appCustomizations 为空，不要捏造图片文件路径。
- 必须输出完整的 homeScreenLayout，避免导入时把当前布局替换为空白页。

可用 App id：
settings、archive、world_book、chat、deeptalk、reader、forum、couples、music、shopping、quicktravel、appearance、model_config

请根据以下需求生成主题：
- 主题名称：[例如：雨季书房]
- 壁纸：[图片 URL 或 data URL]
- 桌面 App 排列：[逐个写明 App、页码、列、行]
- Dock 顺序：[最多写常用 App]
- App 图标：[提供图片 URL 或省略]
- 可选桌面小组件：[需要时填写]
```

## 4. 可直接使用的 JSON 骨架

下面是当前导入器识别的结构。把占位内容替换为真实内容后再导入：

```json
{
  "homeWallpaper": "https://example.com/wallpaper.jpg",
  "appCustomizations": {
    "chat": {
      "name": "聊天",
      "icon": "https://example.com/chat-icon.png"
    },
    "appearance": {
      "name": "外观",
      "icon": "data:image/png;base64,REPLACE_WITH_REAL_BASE64"
    }
  },
  "homeScreenLayout": {
    "currentPageIndex": 0,
    "pages": [
      { "id": 0 },
      { "id": 1 }
    ],
    "desktopApps": [
      { "id": "chat", "gridX": 0, "gridY": 0, "pageIndex": 0 },
      { "id": "archive", "gridX": 1, "gridY": 0, "pageIndex": 0 },
      { "id": "appearance", "gridX": 2, "gridY": 0, "pageIndex": 0 },
      { "id": "model_config", "gridX": 3, "gridY": 0, "pageIndex": 0 }
    ],
    "dockApps": [
      { "id": "chat" },
      { "id": "archive" },
      { "id": "settings" }
    ],
    "desktopWidgets": []
  }
}
```

## 5. 布局尺寸规则

每页桌面是 4 列 x 5 行：

```text
gridX: 0  1  2  3
gridY: 0  1  2  3  4
```

- 左上角是 `gridX: 0, gridY: 0`。
- 最右列是 `gridX: 3`。
- 最底行是 `gridY: 4`。
- `pageIndex` 从 0 开始。
- 同一个 App 不要重复放置。
- 同一个页面同一个位置不要放两个 App。
- `dockApps` 只表达顺序，不使用 `gridX`、`gridY`。
- 不需要使用的格子不要写入 `desktopApps`。

## 6. App 图标规则

支持的 App id 必须使用英文内部 id。常见中文名称映射如下：

| 中文名称 | id |
|---|---|
| 设置 | `settings` |
| 联系人 / 档案库 | `archive` |
| 世界书 | `world_book` |
| 聊天 | `chat` |
| 记忆 / 深谈 | `deeptalk` |
| 阅读 | `reader` |
| 论坛 | `forum` |
| 情侣空间 | `couples` |
| 听歌 | `music` |
| 购物 | `shopping` |
| 平行世界 | `quicktravel` |
| 外观 | `appearance` |
| 模型中心 | `model_config` |

图标建议：

- PNG 或 WebP。
- 建议正方形，尺寸 256 x 256 或 512 x 512。
- 透明图标要保留透明背景。
- 单张图片尽量小于 1 MB。
- 不要写 `C:\\Users\\...`、`file:///...` 等本地路径。
- 图片缺失时不要填假 URL；省略该 App 的自定义图标即可使用系统默认图标。

## 7. 桌面主题中的小组件

如果主题要携带小组件，结构如下：

```json
{
  "type": "custom_ui",
  "size": "medium",
  "data": {
    "name": "雨天便签",
    "type": "custom_widget_template",
    "widthSpan": 2,
    "heightSpan": 2,
    "html": "<div class=\"widget-root\">雨天</div>",
    "css": ".widget-root{width:100%;height:100%;box-sizing:border-box;padding:12px;}"
  }
}
```

小组件会作为资源导入，不会自动放到桌面。导入后需要在桌面编辑模式中点击空白格，选择该小组件并放置。

## 8. 导入前自检清单

- [ ] 文件是纯 JSON，不是 Markdown。
- [ ] 没有注释、尾逗号和未转义换行。
- [ ] `homeScreenLayout`、`pages`、`desktopApps`、`dockApps`、`desktopWidgets` 都存在。
- [ ] 所有 `gridX` 在 0 到 3 之间。
- [ ] 所有 `gridY` 在 0 到 4 之间。
- [ ] 没有重复格子。
- [ ] App id 使用支持列表中的英文 id。
- [ ] 图标是 URL 或 data URL，不是本地路径。
- [ ] 不包含任何业务数据。
- [ ] 导入后统一图标大小、字体、字号和字体颜色在外观 App 中调整。

## 9. 出错时怎么处理

- 提示 JSON 无法解析：让 AI 输出严格 JSON，去掉代码围栏和注释。
- 导入后桌面为空：检查是否包含完整的 `homeScreenLayout`。
- 某个 App 没出现：检查 `id` 是否拼写正确。
- 图标不显示：检查 URL 是否可访问，或改用真实 data URL。
- 图标位置不对：检查 `pageIndex`、`gridX`、`gridY` 是否从 0 开始。
- 统一大小和字体没有变化：导入后到“自定义应用图标”中设置并点击保存。
