# Code-em **Repository Path**: iqei/code-em ## Basic Information - **Project Name**: Code-em - **Description**: No description available - **Primary Language**: Unknown - **License**: Not specified - **Default Branch**: main - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 0 - **Forks**: 0 - **Created**: 2026-07-18 - **Last Updated**: 2026-07-23 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README # Code'em Code'em 是一款服务端权威判定的 VS Code 联机无限注德州扑克插件。当前正在实现 [内部 Alpha](./docs/MVP_SCOPE.md),完整玩法见 [产品规格](./docs/PRODUCT_SPEC.md),技术边界见 [技术架构](./docs/TECHNICAL_ARCHITECTURE.md)。 ## 工作区 ```text apps/server Fastify HTTP 与 WebSocket 游戏服务 apps/vscode VS Code 扩展宿主与隐蔽模式 Webview packages/* 规则、协议、客户端投影、牌型计算与测试工具 ``` 所有 Node.js 依赖、pnpm store 和数据库运行环境都保留在项目或容器内,不需要全局安装 PostgreSQL。 当前插件使用专属 Activity Bar 侧边栏承载服务器大厅;点击 Code'em 图标即可直接查看当前服务器上的公开房、密码房和邀请码房,无需先输入命令。创建、加入、观战或继续当前房间成功后,等待入座和牌桌界面会打开或复用一个完整编辑器标签页;侧边栏始终保留房间目录,不在窄栏中渲染牌桌。牌桌顶部的大厅按钮只会聚焦侧边栏,不会把当前标签页替换成重复的大厅主页。 侧边栏标题栏的 GitHub 图标用于显式登录稳定账号,齿轮可打开 Internal Alpha 开发服务器设置;修改 `codeem.serverUrl` 后插件会立即停止旧连接,并在新服务器上恢复该服务器已记录的房间或刷新大厅。创建房间必须先登录 GitHub 稳定账号,访客仍可加入娱乐房或观战;插件会在创建入口引导登录。远程 GitHub 登录只允许 HTTPS,并会在发送身份令牌前显示当前服务器来源供用户确认。 GitHub 令牌只用于服务端调用一次 GitHub 身份接口,不写入 Code'em 数据库或日志。服务端只保存 Code'em 会话令牌和设备凭据的 SHA-256 哈希,并为每个设备的会话轮换分配单调递增世代;插件使用未出站的本地随机种子为每个服务器派生独立设备 ID,通过跨窗口文件锁协调 SecretStorage,避免首次并发激活拆分访客身份或让晚到的旧会话覆盖新会话。房间继续使用原 Code'em 昵称,不公开 GitHub 用户名、真实姓名、头像地址或主页信息。 同一账号同时从多台设备进入牌桌时,只有当前控制设备可以准备、离座、行动、聊天或发送表情;其他设备保持只读,仍可查看自己的底牌和牌桌状态,并保留老板键这一紧急例外。只读设备可以显式接管座位操作权,原设备随即转为只读。控制设备标识只以服务端私有状态持久化,不进入快照、公共事件或日志;接管不会推进牌局版本,也不会重置行动倒计时。 公开房可直接入座或观战,密码房输入密码后可入座或观战。邀请码房只使用一个邀请码,加入请求不再区分玩家和观众:有空位时可进房选择入座,座位已满则自动以观众身份进入。观众在两手牌之间等到空位后也可以选择入座。目录不会返回任何加入凭证。远程服务器应配置 `wss://` 地址;默认 `ws://127.0.0.1` 仅用于本机开发。 入座玩家可以在两手牌之间手动切换“暂离”。首次行动超时只会自动过牌或弃牌;连续两次行动超时,下一手自动暂离。玩家断线持续到当前手结束时,下一手也会自动暂离;如果在当前手结束前重连,则不会因此自动暂离。多设备玩家只有全部设备断开,才视为玩家断线。自动或手动暂离都会取消准备状态,不计入下一手的准备与开局人数;返回牌桌后需要重新准备。暂离开始后保留 5 分钟,超时在非牌局、非封桌状态自动释放座位,但积分账户和场次账本仍保留;插件会通知全桌。插件只在服务端声明支持时显示暂离操作,连接旧服务端时会保持原有准备流程。 老板键在任何 Code'em 界面都可触发:macOS 为 `Cmd+Option+Shift+B`,Windows/Linux 为 `Ctrl+Alt+Shift+B`。它会先关闭插件面板和快速输入;当前已入座时再通知服务端封桌,其他玩家和观战者不会被强制隐藏。 ## 本地开发 要求 Node.js 24、pnpm 11,以及 OrbStack 或兼容 Docker Compose 的容器运行时。项目脚本会自动选择标准 `docker compose`、`docker-compose`,或 OrbStack 应用内置的 Compose,不需要安装全局数据库、创建软链接或修改系统 `PATH`。 初始化项目: ```bash cp .env.example .env pnpm install pnpm db:up pnpm db:migrate ``` 数据库默认只监听 `127.0.0.1:54329`,数据保存在当前 Compose 项目下的 `codeem-postgres-data` 命名卷。`pnpm db:up` 会等待数据库健康检查通过,随后再启动服务端: ```bash pnpm dev:server ``` 健康检查地址为 `http://127.0.0.1:3000/health`。修改迁移后再次运行 `pnpm db:migrate`;生产部署也应在启动新版本服务前独立执行迁移。 生成并安装本地 VS Code 扩展: ```bash pnpm --filter codeem package:vsix code --install-extension apps/vscode/dist/codeem-0.0.1.vsix --force ``` 生成 Linux + 1Panel 后端部署包: ```bash pnpm package:server ``` 产物位于 `dist/codeem-server-0.0.1.tar.gz`,包含多阶段 Dockerfile、生产 Compose、环境变量模板和 `dzpk.iqei.cn` 反向代理说明,不包含本地 `.env`、数据库数据或宿主机依赖。 常用数据库命令: ```bash pnpm db:logs pnpm db:down ``` `pnpm db:down` 只停止并移除本项目容器和网络,不删除数据库卷。 ## 质量检查 ```bash pnpm check pnpm test:run ```