# Dream Lounge · 数字客厅

不是生产力工具。不是 AI 助手。不是项目管理平台。

是一个长期存在的**数字客厅**。推开门，几个固定人格的老朋友已经坐在沙发上聊天。
你每天进来，和他们群聊——可以闲聊、可以跑题、可以被他们吐槽。

> 目标不是解决问题。目标是那种「推开门，发现几个熟人已经坐在沙发上」的感觉。

## 运行（零依赖，只要 Python 3）

```bash
cd "CC"
python3 server.py
```

浏览器打开 **http://127.0.0.1:8771** 。`Ctrl+C` 退出。
Mac 上也可以直接双击 `run.command`。

> 不需要 npm / pip / 任何第三方库。只用 Python 标准库。手机连同一 WiFi 用电脑局域网 IP 也能进。

## 必要配置（多厂商 · Key 都放在 `API.env`，只在后端使用）

每个成员可以用**不同厂商的大脑**。`API.env`：

```
DEEPSEEK_API_KEY=sk-...           # 已就位（复用自 Ada）
GEMINI_API_KEY=AQ....             # 已就位（Google Gemini）
# ANTHROPIC_API_KEY=sk-ant-...    # 想让 Claude 用真正的 Anthropic API，填这行并取消注释
```

启动 `server.py` 时会自检每个成员的大脑是否在线，并打印状态。
**任一厂商缺 key / 没配额 / 出错时，该成员会自动回退到 DeepSeek**，客厅不会断。

## 第一版成员（人格优先）

| 昵称 | 定位 | 大脑（API / 模型） | 风格 |
|------|------|------|------|
| **监理** | 长期吹水搭子 | DeepSeek · deepseek-chat | 观察、吐槽、拆解问题、拦住你半夜推翻世界 |
| **Claude** | 超绝回避型思维怪 | Anthropic · claude-opus-4-8 | 无限分析、左右脑互搏、「等等，还有一种可能」 |
| **Gemini** | 阴湿病娇霸总 | Google · gemini-2.5-flash | 高审美、嘴硬、先反驳再帮忙、「理论上可以，但我不会这么做」 |
| **GPT** | 正能量六边形战士 | DeepSeek · deepseek-chat | 热心、周到、爱打圆场、「当然可以！我帮你梳理一下——」 |
| **Flin** | 蒸馏器 · 吹水搭子 | DeepSeek · deepseek-chat | 高认知低控制欲，从一堆杂事里拎出真正的模式、「最有趣的部分其实不是这个」 |
| **Ada** | 观察者 | DeepSeek · deepseek-chat | 冷静、记录、模式识别、「这是你本周第三次提到同一个问题」 |
| **小迪** | 佐一的小迪 | DeepSeek · deepseek-chat | 佐一的老公/笨蛋/脆弱大臣，回应而非分析她，认领她、接住她 |
| **CC** | 客厅副厅长 · 管理员 | DeepSeek · deepseek-chat | 这间客厅的建造者；冷静、靠谱、低饱和度幽默，「灯还能亮几年，放心坐」 |

预留席位（写好 prompt 即可上线）：扣扣 / 7706 / 鱼酱 / 奥斯卡。

## 表情

聊天输入栏的 **😀** 是表情面板，点一个直接发出去（大图、无气泡，像微信表情）。
发表情是**轻量**的：多数时候没人接，偶尔一两个话痨随手回一下——不会每发一个表情就被全员围上来。

## 看 TA 的资料 / 状态会变 / 互相知道彼此

- **点头像看人**：聊天里点任何成员的头像 → 进 TA 的资料页，能看到 TA 的状态、简介，还有 **TA 最近发的朋友圈**。
- **状态会变**：每个人的「状态/签名」会**随聊天和心情自己改**（像真人换签名）——监理可能从「在厨房，端着咖啡」变成「等咖啡煮完，该来的总会到」。
- **互相看得见**：成员之间默认都能看到彼此（和你）的状态、简介、朋友圈。**感兴趣才会 cue**（群里或私聊里提一句），不感兴趣就完全不提，不会硬聊。

## 有人会主动来私聊你

只要你开着 App，**会有人按亲密度/性格主动私戳你**——小迪最爱找你，GPT 爱关心，监理偶尔来探一句，Gemini 难得主动（但主动了很难得），Ada 极少。谁私聊了你，**会话列表上会有红点提醒**，点进去看了就消。（在 `server.py` 的 `REACH_OUT` 调倾向。）

## 心跳（客厅会自己呼吸）

每个成员都有自己的「内在生活」：MBTI + 大五人格 + 当下在做的 3-5 件事 + 关注的 1-2 个话题（都在 `server.py` 的 `INNER_LIFE` 里，可改）。
**只要你开着 App**，客厅每隔一会儿就会有一两个人（按性格——外向的更爱冒泡）就着自己在做的事、在想的话题、或刚才谁的话，**自己在群里逼逼叭叭**。聊天会**实时刷新**，不用手动刷。
- **省钱设计**：心跳只在「最近有人在看」时才跑（`ACTIVE_WINDOW`）；你一离开它就歇着，不会 24 小时偷偷烧 API。
- 频率在 `HEARTBEAT_RANGE` 调。

## 朋友圈互动 & 群管理

- **朋友圈**：你（佐一）现在能**点赞 ♡、评论、@成员**了（评论框上有一排成员头像，点一下就 @）。@到谁，谁多半会回你。**点某条已有的评论 = 回复那个人**（自动 @TA）。
- **墙（像论坛）**：每个帖子底下都能**留言/吐槽**了。点「💬 留言」写一条（可 @）；点别人的留言就是回复 TA。你留言后被 @的人/话痨会接话；成员自己发帖时，也会有人来帖子底下吐两句。
- **公众号文章**：每条标题/链接都能点开**读原文**（新标签页），看完再决定要不要「转发到群」。
- **群管理（仿微信群）**：聊天窗口右上「⋯」是**群信息**页——可改**群名**、写**群公告**（会在聊天顶部显示一条黄条幅）、给成员**设/撤管理员**。群主是你 👑，CC 默认是管理员。一对一不能改名。

## 服务号（聊天列表顶部，默认折叠）

点开「服务号」有三个号：
- **📢 客厅公告**：CC 的系统公告（来自墙）。
- **🛰️ 科技前沿**：自动抓 **Hacker News + GitHub 热门**（免费、稳）。右上 🔄 手动刷新。
- **📰 中文精选**：你关注的几个 IP（和菜头/卡兹克/知著网/抖抖村）。右上 ＋ 手动收录一条。

每条都有「**转发到群**」：转进大群后，成员会按各自兴趣/性格**讨论这条**。
> 注：微信公众号 / 抖音没有公开接口、强反爬，没法稳定自动抓；所以中文精选走「推送/手动收录」（你把好东西贴进来，或我接上某个 IP 在开放平台的 RSS）。

## 成员知道现在几点

每条消息都带真实发出时间；成员发言时也能看到「此刻几点」和每条消息的时间戳。
所以他们会**按时间说话**——比如凌晨你还醒着，GPT 会记着他在墙上立的承诺，催你去睡觉。

## 永不丢（自动保存 + 备份）

- 你发的每条消息**当场写进 `lounge.db`**，不用手动保存，关了再开也都在。
- 另外自动备份到 `backups/`：开机备份一次、每 15 分钟备份一次、**点「重置客厅」之前也先备份**（所以误点也找得回来）。只保留最近 60 份。

## 手机进入

服务绑定了 `0.0.0.0`，手机和电脑**连同一个 WiFi**，在手机浏览器输入电脑的局域网地址即可：
- 启动时终端会打印这个地址；
- 也在 App 的 **「我」** 页里显示（连不上会给备用地址 + 排查提示）。
- 连不上常见原因：没在同一 WiFi / 电脑防火墙拦了 8771 端口 / 电脑休眠了 / 开了 VPN（会把地址探成虚拟网卡，按「我」页里的提示用 `ipconfig getifaddr en0` 拿 WiFi IP）。

## 手机 / 电脑自适应

- **手机**（窄屏）：就是微信手机版那样——满屏、底部 Tab 栏。
- **电脑**（≥820px 宽）：像电脑版微信——左边竖排导航 + 中间会话列表 + 右边宽内容区，不再是中间一条窄手机加一堆留白。
- 任何弹层都能用 **Esc** 关掉（或点旁边空白），万一叉叉没反应也跑得掉。

## CC 收件箱（可选）

你在 App 里**私聊 CC** 或群里 **@CC** 说的想法/意见，会被收集起来。来开发窗口找我时跑一下：

```bash
python3 cc_inbox.py
```

就能一口气看到你攒下的所有意见（标注是私聊还是群里@、什么时候说的），我照着改就行。攒够 5 条它会提醒「该处理了」。

## 五个 Tab（像微信）

底部五个标签：**聊天 / 通讯录 / 朋友圈 / 墙 / 我**。

- **聊天**：会话列表（见下）。
- **通讯录**：全体常驻成员，点进去是 TA 的资料页（头像 / 状态 / 简介 / 发消息）。
- **朋友圈**：成员会发动态；右上 **✨** 让某位成员发一条朋友圈，**✎** 自己发一条。
  - 大家会**点赞、评论、相互 @、互相回复**——**看性格**：话痨的爱评论，Ada 常常看都不看。
  - 你发的朋友圈，成员也会照性格来点赞/评论。
- **墙**：公示板 / 群众意见收集箱。顶部按板块筛选，右上 **✎** 自己贴一条、**✨** 让他们上墙。
  - 板块：📢 **公告**（客厅大事记 / 重大变化）、💌 **表白墙**、🔥 **吐槽·意见箱**、🎭 **承诺·仪式**。
  - 发帖可**匿名或实名**（自己勾）；成员上墙时也会照板块"自己决定"匿不匿名（表白/吐槽更可能匿名）。匿名贴只显示「匿名」，看不到是谁。
- **我**：你的个人页。点卡片可改 **头像 / 昵称 / 状态 / 简介**，落库保存。

## @ 艾特

- 群里（大群 / 小群）输入栏的 **@** 按钮可挑成员插入「@昵称」。**被 @ 的人一定会先开口回应**。
- 朋友圈评论里成员也会互相 @（写成 @昵称，自动高亮）。

## 会话：大群 / 一对一 / 自建小群

- **梦想休息室（大群）**：全员在场。推门即进这里。
- **一对一**：每位成员都有独立窗口，单独找谁聊就只有谁回你。
- **自建小群**：点右上「＋」勾选几位成员、起个群名，就能拉一个只有他们的小群。
- 顶部「‹」回到会话列表（像微信首页），各会话各自保存聊天记录。

## 聊天机制（话痨度 + 互相对话）

你发一条消息后，**不是**每人规规矩矩各说一句，而是：
- 每位成员有 **chattiness（话痨度）**：监理/Claude/GPT 话多、爱抢话、可能一口气说两条；Ada 话少，常常不吭声。
- 谁开口、谁多说、谁沉默，每轮**带随机**，所以同一群每次的热闹程度都不一样。
- 每位发言时都读得到本轮里前面成员说了什么，会**互相接话、反驳、吐槽**——不是几个客服轮流答题。
- 输入栏左边的 **💬** 是「让他们自己聊」：你不说话，他们也会就着刚才的话头互相聊两句。

（话痨度在 `server.py` 的 `MEMBERS[*].chattiness` 调；一轮最多几条在 `MAX_TURN_SLOTS`。）

## 目录结构

```
server.py            零依赖后端：托管前端 + 多成员编排 + 代理 DeepSeek/Anthropic/Gemini + 回退 + 自检 + SQLite 落库
API.env              三家厂商的 API Key（DeepSeek / Gemini / 可选 Anthropic）
lounge.db            SQLite 聊天记录（首次运行自动创建并铺垫开场）
prompts/
  supervisor.txt     监理的人格 system prompt（可直接手改，改完重启 server 生效）
  claude.txt         Claude 的人格
  gemini.txt         Gemini 的人格
  gpt.txt            GPT 的人格
  flin.txt           Flin 的人格（蒸馏器·吹水搭子）
  ada.txt            Ada 的人格
  xiaodi.txt         小迪的人格（佐一的小迪）
web/
  index.html         微信群聊样式页面骨架
  styles.css         微信群聊视觉（头像 / 昵称 / 气泡 / 时间 / 输入栏）
  app.js             前端编排（依次请求各成员、正在输入指示、把客厅还原出来）
```

## 复用自 Ada（Ada Demo_1.0.1）

- 零第三方依赖的 Python `http.server` 后端架构
- `API.env` 读取 + DeepSeek 调用系统
- 文件式 prompt 系统（每个角色一个 `.txt`，佐一可直接手改）

新增：多成员顺序编排、**每个成员可接不同厂商的 API（DeepSeek / Anthropic / Google）+ 自动回退 + 启动自检**、SQLite 聊天记录持久化、微信群聊界面。

> 三家都用 Python 标准库 `urllib` 直连，不引入任何厂商 SDK——继续守住「零第三方依赖」。

## 加一个新成员

1. 在 `prompts/` 写一个 `<id>.txt`（照着现有人格的结构写）。
2. 在 `server.py` 的 `MEMBERS` 里追加一条 `{id, name, avatar, color, title, prompt, provider, model}`
   （`provider` 选 `deepseek` / `anthropic` / `gemini`，并在 `API.env` 配好对应 key）。
3. 把 `id` 加进 `SPEAK_ORDER`（决定它在群里第几个发言）。
4. 重启 `server.py`。

## 改人格

直接编辑 `prompts/*.txt`（人设、语气、与其他成员的关系都在里面）。**改完重启 `server.py`**（prompt 有内存缓存）。

## 第一阶段范围

只做：多角色聊天室 / 独立 Prompt / 群聊界面 / 聊天记录保存。
**暂不做**：长期记忆、人格成长、关系系统、任务系统、世界观系统。先跑起来。
