{"id":50779314,"url":"https://github.com/soloveliness-a11y/ink-shadow","last_synced_at":"2026-06-26T04:01:07.003Z","repository":{"id":363981845,"uuid":"1265842026","full_name":"soloveliness-a11y/ink-shadow","owner":"soloveliness-a11y","description":"AI 创作剧本 → 自动出图 → 浏览器联机。全流程闭环的剧本杀平台。","archived":false,"fork":false,"pushed_at":"2026-06-14T12:02:42.000Z","size":79224,"stargazers_count":3,"open_issues_count":0,"forks_count":1,"subscribers_count":0,"default_branch":"main","last_synced_at":"2026-06-17T07:25:12.883Z","etag":null,"topics":["ai-typescript","claude-api","multiplayer","murder-mystery-game","react","web-game"],"latest_commit_sha":null,"homepage":"","language":"TypeScript","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"mit","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/soloveliness-a11y.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null,"zenodo":null,"notice":null,"maintainers":null,"copyright":null,"agents":null,"dco":null,"cla":null}},"created_at":"2026-06-11T05:58:36.000Z","updated_at":"2026-06-14T12:02:46.000Z","dependencies_parsed_at":null,"dependency_job_id":"b0bfa460-f39c-4957-839d-c16d8d2505ef","html_url":"https://github.com/soloveliness-a11y/ink-shadow","commit_stats":null,"previous_names":["soloveliness-a11y/ink-shadow"],"tags_count":4,"template":false,"template_full_name":null,"purl":"pkg:github/soloveliness-a11y/ink-shadow","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/soloveliness-a11y%2Fink-shadow","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/soloveliness-a11y%2Fink-shadow/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/soloveliness-a11y%2Fink-shadow/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/soloveliness-a11y%2Fink-shadow/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/soloveliness-a11y","download_url":"https://codeload.github.com/soloveliness-a11y/ink-shadow/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/soloveliness-a11y%2Fink-shadow/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":34802385,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-05-26T15:22:16.424Z","status":"online","status_checked_at":"2026-06-26T02:00:06.560Z","response_time":106,"last_error":null,"robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":true,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["ai-typescript","claude-api","multiplayer","murder-mystery-game","react","web-game"],"created_at":"2026-06-12T02:00:48.091Z","updated_at":"2026-06-26T04:01:06.944Z","avatar_url":"https://github.com/soloveliness-a11y.png","language":"TypeScript","funding_links":[],"categories":[],"sub_categories":[],"readme":"# 墨影 · AI 剧本杀\n\n\u003e AI 创作剧本 → 自动配套油画风视觉素材 → 4~8 人浏览器端联机游玩。全流程闭环。\n\n## 功能\n\n- **AI 剧本创作**：给定主题/人数，Claude 自动生成完整剧本包（角色、线索、环节 DAG、多结局）\n- **视觉出图**：自动批量生成封面、角色头像、场景、线索等油画风素材，WebP 压缩\n- **联机游玩**：浏览器即玩，4~8 人实时对局，支持断线重连、平票决胜、反作弊\n- **剧本适配**：将市场已有剧本（如豪门系列）转化为标准化 JSON 剧本包\n\n## 快速开始\n\n```bash\npnpm install\n./start.sh          # 构建 + 启动\n# 或\n./start.sh --dev    # 开发模式（跳过构建）\n```\n\n打开 `http://localhost:8080`，输入昵称即可开房。双击 `启动游戏.command` 也可。\n\n**一键公网分享**：双击 `分发给朋友.command`，自动起 Cloudflare 隧道，把链接发给朋友直接玩。\n\n## 一键生产新剧本\n\n```bash\npnpm produce --players 6 --theme \"校园密室\"\n```\n\n自动完成：剧本生成 → 结构校验 → 出图 → 回填素材路径。\n\n```bash\npnpm produce --skip-visual    # 仅生成剧本，跳过出图\n```\n\n## 技术栈\n\n| 层 | 技术 | 说明 |\n|----|------|------|\n| 语言 | TypeScript 5.6, Node 24 | 全栈统一 |\n| Monorepo | pnpm 10 workspace | 5 个包 |\n| 前端 | React 18 + Zustand + Vite 6 | 单页应用，响应式适配桌面/手机 |\n| 后端 | Node HTTP + ws (WebSocket) | 无框架，纯手工状态机 |\n| Schema | Zod | 运行时类型校验 + TS 类型推导 |\n| 剧本生成 | Claude API (Anthropic SDK) | 分层 prompt + 自洽校验 |\n| 视觉出图 | gpt-image (中转站) + sharp | 批量出图，自动 WebP 压缩 |\n| BGM | Howler.js | 7 阶段 × 多首 = 33 首背景音乐 |\n\n## 架构\n\n```\n┌─────────────┐     WebSocket      ┌──────────────┐\n│   Client    │◄──────────────────►│    Server     │\n│  React+Zust │  protocol v3 JSON  │  PhaseEngine  │\n└─────────────┘                    │  RoomManager  │\n                                   └──────┬───────┘\n                                          │ 加载\n                                   ┌──────▼───────┐\n                                   │   Content     │\n                                   │  剧本包 (JSON) │\n                                   └──────────────┘\n\n┌─────────────┐   ┌───────────────┐   ┌──────────────┐\n│  Generator  │   │ VisualPipeline │   │   Schema     │\n│  Claude API │   │  gpt-image +  │   │  Zod 契约包   │\n│  分层 prompt │   │  sharp→WebP   │   │  共同基准     │\n└─────────────┘   └───────────────┘   └──────────────┘\n```\n\n**核心设计**：剧本自带环节 DAG（有向无环图），引擎是通用状态机解释器。不同剧本只需换 JSON，不改代码。\n\n## 项目结构\n\n```\nmurder-mystery-game/\n├── packages/\n│   ├── schema/           # Zod 契约包：数据类型 + 校验 + 协议定义\n│   ├── server/           # 游戏引擎：PhaseEngine DAG + Room + WebSocket\n│   ├── client/           # React 前端：7 个阶段场景 + 响应式布局\n│   ├── generator/        # 剧本生成器：Claude API + 自洽校验 + repair\n│   └── visual-pipeline/  # 视觉管线：批量出图 + WebP 压缩 + 指纹追踪\n├── content/\n│   ├── _mock/            # 内置剧本「公馆惊魂·一九三五」\n│   └── _template/        # 新剧本模板\n├── scripts/              # 工具脚本（生成/出图/拆分/同步）\n├── PLAN/                 # 架构蓝图（设计文档）\n└── start.sh              # 一键启动\n```\n\n## 游戏流程\n\n```\n大厅(选剧本) → 分配角色 → 角色简介 → 轮流自述\n→ 搜证×N轮(场景探索/线索获取/公开/私聊) → 投票(平票自动决胜) → 真相揭晓\n```\n\n每个环节由剧本 DAG 定义，引擎自动推进。支持计时器、房主手动推进、搜证次数限制。\n\n## 引擎特性\n\n- **DAG 环节流**：`always | voteResult | voteTie | flag` 四种边条件\n- **平票决胜**：自动进入限制投票目标的决胜轮\n- **断线保护**：掉线玩家自动跳过（sequential 环节不卡死）\n- **反作弊视图**：每个玩家只看到自己该看到的信息（线索/投票状态/凶手身份）\n- **测试模式**：Bot 填充 + 手动推进，方便剧本预览调试\n\n## 前端特性\n\n- 7 个阶段场景：Lobby / Assigning / Briefing / Intro / Free / Vote / Reveal\n- 响应式布局：桌面端侧栏 + 手机端底部抽屉\n- 资源优化：图片 `loading=lazy` + 后台预加载 + 服务端 ETag/304 缓存\n- BGM 自动切换：7 阶段各配多首，随机播放\n- 案情速记：本地存储笔记本，不公开给其他玩家\n\n## 剧本生成特性\n\n- 分层 prompt：世界观 → 角色 → 线索 → 推理链 → DAG\n- 自洽校验：凶手存在性、DAG 可达性、投票 always 兜底、线索引用完整性\n- 自动 repair：补齐缺失字段、修正 turnOrder、映射 solutionChain\n\n## 视觉管线特性\n\n- 批量出图：封面 + 角色头像 + 场景 + 道具 + 线索\n- 自动 WebP 转换：sharp quality:82，迁移已有 PNG\n- 指纹追踪：prompt 变化自动检测并重新出图\n- 断点续出：`--resume` 跳过已完成任务\n\n## 剧本适配\n\n将市场已有剧本（PDF/文字）转化为标准 JSON 剧本包：\n\n```bash\n# 已有单体 script.json → 拆分为目录结构\nnode scripts/split-script.mjs content/新剧本/script.json\n\n# 同步资产回填（文件 → script.json）\npnpm exec tsx scripts/sync-assets.ts 新剧本\n```\n\n完整字段规范见 [content/SCRIPT-SPEC.md](content/SCRIPT-SPEC.md)。\n\n## 内置剧本\n\n**公馆惊魂·一九三五** — 民国上海·公馆命案\n\n- 6 人本 / 普通难度 / 约 180 分钟\n- 7 个角色（含死者）、23 条线索、3 个场景\n- 19 个环节（含搜证×2 + 投票 + 平票决胜 + 7 个结局揭示）\n\n## 测试\n\n```bash\npnpm -r test          # 全量测试\npnpm typecheck        # TypeScript 类型检查\npnpm --filter @mmg/client build  # 构建前端\n```\n\n| 包 | 测试数 | 覆盖范围 |\n|----|--------|----------|\n| @mmg/schema | 6 | 结构校验、DAG 可达性、引用完整性 |\n| @mmg/generator | 10 | 剧本校验、repair 修复、solutionChain 映射 |\n| @mmg/server | 31 | 房间生命周期、DAG 推进、掉线保护、投票/平票、反作弊视图 |\n| @mmg/visual-pipeline | 9 | 任务规划、stub 出图、断点续出、幽灵修复、promptHash 重出 |\n\n**56 tests, 0 failures.**\n\n## 文档\n\n| 文档 | 内容 |\n|------|------|\n| [content/SCRIPT-SPEC.md](content/SCRIPT-SPEC.md) | 剧本创作规范（完整字段 + 设计原则） |\n| [content/PROMPT.md](content/PROMPT.md) | LLM 生成剧本的 Prompt 模板 |\n| [PLAN/00-architecture.md](PLAN/00-architecture.md) | 总体架构、模块边界、技术栈选型 |\n| [PLAN/01-script-schema.md](PLAN/01-script-schema.md) | 剧本数据契约（TS 类型 + Zod + DAG） |\n| [PLAN/02-m1-script-generation.md](PLAN/02-m1-script-generation.md) | 剧本生成引擎 |\n| [PLAN/03-m2-visual-pipeline.md](PLAN/03-m2-visual-pipeline.md) | 视觉管线 |\n| [PLAN/04-m3-multiplayer-engine.md](PLAN/04-m3-multiplayer-engine.md) | 联机引擎 |\n| [PLAN/05-roadmap-acceptance.md](PLAN/05-roadmap-acceptance.md) | 里程碑与验收标准 |\n| [PLAN/10-distribution.md](PLAN/10-distribution.md) | 分发方案 |\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fsoloveliness-a11y%2Fink-shadow","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fsoloveliness-a11y%2Fink-shadow","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fsoloveliness-a11y%2Fink-shadow/lists"}