Skip to content

Releases: cinnabarpath9/werewolf

v1.2.8 — 第三轮外审修复

Choose a tag to compare

@cinnabarpath9 cinnabarpath9 released this 02 Nov 19:51

v1.2.8

第三轮外部代码审查(自 1.2.4 之后的新改动)发现的 P1×4 / P2×11,全部修复。

P1

  • 恢复竞选期间再爆 = 双爆:以前会被当成"再挂起"(警徽永远吞不掉、竞选可反复挂起);现在恢复路径明确按第二只狼处理 → 警徽被吞、当天结束。
  • 遗言 / 竞选发言 / 竞选 PK 也受 800 字按句截断(以前只有白天轮次发言截断)。
  • 结算页死因:补上「被猎人开枪带走」;死因文案改由引擎统一提供(settlement_rows.death_text),前端不再自己维护一份表。
  • 复盘列表:点的那一局如果已被清理,明确提示"不在了",不再静默改看最新一局。

P2

  • 托管按真实座位解析画像(多真人房不再固定用 1 号);未配思考档时不抹掉渠道默认;
  • 复盘里看到的是真正发给模型的那份 packet(托管重拼过);
  • 双爆轮文案不再硬编码"第 2 天",调用失败时不再写"都选择不爆"的假账;
  • Task.legal 不再传 None;结算 counts 缺失时不崩;BGM 导入支持扩展名兜底;换曲后带版本串避免旧缓存;
  • 测试改按 extra.double_explode 分流(不再依赖提示词文案);bgm 测试遇坏文件走 FAIL 而不是崩掉。

审查说明

本轮 GLM-5.3-Flash 已按作者要求走千帆 TokenPlan(模型 id glm-5.3-flash);MiMo 扫雷位两批均未返回(超时/上游无响应),所以本轮没有双源,结论由 GLM + 本 agent 逐条读码复现核对,覆盖缺口已记在报告里。

验证:--quick 115/115、--fast 97/97、check_gates 9/9。

包名说明(2026-11-03)

  • 本地/网盘用:werewolf-1.2.8-电脑端.zip、werewolf-1.2.8-手机端.zip(作者定的中文后缀);
  • GitHub Release 附件不支持中文文件名(API 会把中文抹成空),所以这里用等价的 ASCII 名:
    • werewolf-1.2.8-pc-desktop.zip = 电脑端(同 werewolf-1.2.8-电脑端.zip)
    • werewolf-1.2.8-phone-termux.zip = 手机端 Termux(同 werewolf-1.2.8-手机端.zip)

v1.2.7 — 背景音乐换成公有领域钢琴曲

Choose a tag to compare

@cinnabarpath9 cinnabarpath9 released this 02 Nov 19:27

v1.2.7

背景音乐换成公有领域录音

  • 曲目:Erik Satie《Gymnopédie No. 1》(1888 年作品,本身已进入公有领域),钢琴独奏、无歌词、舒缓;
  • 演奏/录音:Teknopazzo(Wikimedia Commons,CC0 1.0)—— 可自由使用、修改、商用,无需署名;
  • 规格:MP3 192kbps / 44.1 kHz / 立体声,4.69 MB,3 分 25 秒(≤10 分钟、≤10 MB),循环播放;
  • 不剪辑、不改曲;来源与许可写在 web/audio/CREDITS.md。
  • 设置里仍是:开关(默认开)/ 音量 / 导入自己的音乐(只存本机浏览器)/ 恢复默认。

其他

  • 删除上一版自研合成的 bgm.wav 与 tools/make_bgm.py(作者明确:不要自己合成);
  • README 增加背景音乐说明;规范.md 加规矩:默认音乐必须是公有领域/CC0,且必须更新 CREDITS。

验证:--fast 97/97、check_gates 9/9;t_bgm_audio.py 17 项(CC0 来源、时长 205s、4.69MB、192kbps、44.1kHz、立体声、纯器乐、前端接线)。

v1.2.6 — 背景音乐(默认开 / 可换自己的)

Choose a tag to compare

@cinnabarpath9 cinnabarpath9 released this 02 Nov 19:14

v1.2.6

背景音乐(设置 → 背景音乐)

  • 默认打开:内置一段 64 秒的舒缓轻音乐,循环播放(无歌词)。
  • 可关:关掉后整局静音;开关状态记在本机浏览器。
  • 可调音量:0~100%。
  • 可导入自己的音乐:mp3 / wav / ogg(≤40MB),只存在你本机浏览器(IndexedDB),不上传服务器;
    「恢复默认音乐」一键换回来。
  • 自动播放被拦截时会自己接上:浏览器不允许没有用户操作的自动播放 —— 页面会挂一次性手势监听,
    你第一次点页面/敲键盘时音乐就起来,不用再去设置里点一次。

关于版权

默认曲目是本项目自己合成的(tools/make_bgm.py,numpy 生成:Cmaj7→Am7→Fmaj7→G6,
铺底 pad + 低音 + 稀疏琶音 + 轻混响),没有用任何外部素材,所以不存在版权纠纷。

其他

  • 新增 GET /audio/{name}(只放行 web/audio/ 下的 mp3/wav/ogg);
  • 包体因此变成 3643 KB(多了 2.7MB 音频)。

验证:--fast 97/97、check_gates 9/9;新增 t_bgm_audio.py(12 项:时长/格式/体积/前端接线)。

v1.2.5 — 结算页 / 复盘入口 / 11 人板自爆新规 / 托管修复

Choose a tag to compare

@cinnabarpath9 cinnabarpath9 released this 02 Nov 19:06

v1.2.5

规则(只改 11 人狼王板)

  • 狼王不能自爆:不再问狼王"要不要爆"(省一次调用);狼王只靠出局那一口带人。
  • 单狼自爆不吞警徽:竞选挂起,当天结束;第二天公布夜里信息后,剩下的狼再决策一次。
  • 双狼自爆才吞警徽:警徽流失、当天结束;不爆则恢复竞选(已发言的不重复)再投票定警徽。
  • 补问机制:狼在"上警轮"里就自爆时,第二天会把当时还没表态的人补问完,竞选不会残缺。

界面

  • 对局结算页:打完弹窗显示「场上座位 + 全部身份 + 胜负 + 狼/神/民分布」,出局座位标死因;
    发言/票型点「看复盘」查看。身份只在对局结束的报文里下发。
  • 大厅复盘入口:开局页「复盘 · 看历史对局」→ 只列真实模型对局(演练局不进列表,按时间倒序)→ 点一条看该局信息与逐次调用。

托管一手

  • 托管发言复用真实模型座位那套上下文(规则书/打法书/概念库/台账/发言顺序齐全,任务按"先决策再发言"口径);
  • 托管配置的思考档真正下发(火山→ark、千帆/OpenAI→openai、未知仍 plain 不发错字段);
  • 托管那一手的 model / token / 耗时 现在会写进存档(butler: true),复盘能看出成本;
  • 发言硬上限统一 800 字、按句号截断(以前模型座位 600 硬切、人类/托管不限长)。

其他

  • 通用提示从「口语化、简短」改成「简洁但不空(至少两三句)」并禁止用「X号。」开头复述座位。

验证:--fast 96/96、--quick 114/114、check_gates 9/9;新增回归 t_wolf_double_explode(21)、
t_settlement(10)、t_butler_prompt(16)、t_butler_usage(8)、t_speech_clip(13)。

v1.2.4 — 审查问题全修

Choose a tag to compare

@cinnabarpath9 cinnabarpath9 released this 02 Nov 17:35

v1.2.4

外部代码审查(第二轮)发现的全部问题,一次修完:

安全 / 信息隔离

  • 浏览器试玩页不再泄漏狼队夜聊:投递前按 visible_to 过滤(public / seat:N / wolf),复测泄漏 0 条;
  • 一键部署镜像不再带作者阵容:清洗规则抽成 tools/release_rules.py(结构化改写 + 断言),
    Dockerfile 构建期执行并删掉 docs/tests 等;.env.example 里的模板档案与发布配置一致;
  • 台账清洗:压平换行、半角方括号转全角,伪造 [投票]/[公告] 段不再成立(读旧档也洗)。

健壮性

  • 设置页刷新后托管模型选择不再丢;坏 JSON 回 400、缺字段不再清空已存温度/上限;
  • 托管:落地前核对 ask_id(不会把旧答案交给新问题)、后台执行不堵 WebSocket、客户端用完即关;
  • 女巫两瓶药都用完时也有「空过」按钮;理由框改为点击时取值;
  • 浏览器端模型调用加 150 秒超时;规则/打法加载失败会提示,不再静默"变笨";
  • 平台注入的 $PORT 会被读取(Render 等不再因写死 8077 判不健康)。

发布闸门与题库

  • check_release 与清洗端共用规则:无引号 YAML key、常量赋值 key 也能抓,表达式不误报;
  • 题库修了三道:VX04 错答不再判对、VX08 正确写法不再被判错、VX07 改用 11 人板真实角色「养鸦人」并把结论改成控场狼胜。

其他

  • 座位上限 112 → 18(与 518 人自定义板一致);SeatLLM.timeout 默认与 resolve 一致;
  • 静态托管包改由 tools/build_play_site.py 生成,不再把 13.8MB 副本塞进仓库。

验证:全量 129/129、--fast 91/91、check_gates 9/9;新增 tests/t_review_fixes.py(27 项)。

v1.2.3 — 在线试玩页(浏览器内跑引擎)

Choose a tag to compare

@cinnabarpath9 cinnabarpath9 released this 02 Nov 15:55

v1.2.3

  • 在线试玩页(web/play.html):引擎跑在浏览器里(Pyodide,同源 web/pyodide/ 13MB),
    点开→填自己的 key→开局;零注册、无服务器、多人可同时(各人各跑一份)。
    已发布:https://cinnabarpath9.github.io/werewolf/web/play.html
    · 6 人明牌板(推荐试玩,510 分钟)/ 11 人狼王板(完整流程,2030 分钟)
    · 页面顶部新增:爱发电 / 开源仓库 / 夸克网盘 / 百度网盘 / Q 群
    · 加载有进度(已等待 N 秒);失败可点「重试加载」
  • 打包:发布包里仍然不带 web/pyodide(只给静态托管用),包体 ~1MB;
  • 修 check_release 的误报:硬编码 key 现在只认带引号的字面量。

许可:源码可见 · 非商业(见 LICENSE)。

v1.2.2 — 托管一手 / 云端免费档

Choose a tag to compare

@cinnabarpath9 cinnabarpath9 released this 02 Nov 14:14

v1.2.2

新增:托管一手

轮到你行动时,面板上多了 「🤖 托管这一手」:

  • 点一下 = 调用一次单独配置的模型,它看你这个座位能看到的全部信息(你的发言历史 + 全场公示栏 + 你的私有信息),
    替你完成这一手(发言 / 投票 / 用药 / 查验…);
  • 配在哪:设置 → 模型 API → 最下面「托管模型」(从已配置 API 里选一条,可选思考档);
  • 不会自动接管后面每一手;托管失败会提示,面板不会消失,你还能自己答。

云端部署走免费档

  • render.yaml 改成 free 计划、无持久盘:打开、填 key、就能玩,除模型 key 费用外没有别的收费;
  • 免费实例重启/休眠会丢存档与设置,启动时会打印提示;要留档就换付费档挂磁盘或在自己电脑/Termux 跑。

修的两个服务端问题

  • human_seat: 0(全 AI)以前被悄悄改成 1 号真人,导致"全 AI 跑一局"永远卡在等人;
  • 小板子(6 人)以前会被 11 人阵容里多出来的座位号挡死,现在多余座位只忽略、非数字键仍报错。

许可

源码可见 · 非商业(见 LICENSE)。免费玩、免费私下改;禁止商用;对外发布/二次开源需授权。

v1.2.1 — 发布包去个人阵容 / 公告编号 / 云端一键部署

Choose a tag to compare

@cinnabarpath9 cinnabarpath9 released this 01 Nov 19:18

v1.2.1

这一版改了什么

  • 发布包不再带作者的个人阵容:config.yaml 在打包时清空 llm.seats、兜底换成模板档案 DEEPSEEK。
    使用者按自己的渠道和预算,在 .env + 「设置」里配自己喜欢的阵容。
  • 公告带编号(⟦公告#N⟧)、私有信息标记(⟦私有·仅你可见⟧);玩家文本里的标记会被剥掉,
    但玩家说的话原样保留(「公告里说 4 号夜里出局」这类正常推理不会被清洗)。
  • 云端一键部署:仓库带 Dockerfile + render.yaml,README 顶部有入口;WOLF_PAIR_CODE 可钉死配对码。
  • 模型参考文档(仓库根 模型参考.md):作者渠道实测的四个推荐模型、参数、一局 2~3 元的成本参考。

许可

源码可见 · 非商业(见 LICENSE)。免费玩、免费私下改;禁止商用;对外发布/二次开源需授权。
v1.0.0 / v1.1.0 仍按 MIT(已下架,不再提供)。

两个包

werewolf-desktop-1.2.1.zip(电脑)/ werewolf-android-1.2.1.zip(安卓 Termux),内容相同。

v1.2.0 — 许可改为非商业 / 当前发言模型徽章 / 仓库瘦身

Choose a tag to compare

@cinnabarpath9 cinnabarpath9 released this 01 Nov 14:47

重要变化:许可协议

从本版(1.2.0)起,本项目改为「源码可见 + 非商业」许可(见 LICENSE):

  • ✅ 免费:阅读、学习、在自己设备上运行、私下修改(改完自己用);
  • ❌ 禁止任何商业用途(含闭源商用、收费联机/托管、广告订阅变现、打包进商业产品);
  • ❌ 禁止未授权对外发布:公开仓库、网盘、应用商店、群文件、教程附件等;
  • ⚖️ 违反即终止授权。

⚠️ 已按 MIT 发布的 v1.0.0 / v1.1.0 继续适用 MIT——发出去的授权收不回来。
新协议只约束 1.2.0 及之后的版本。需要商业授权或二次发布,请联系作者。

这一版的变化

  • 右上角显示当前发言模型:3号 · deepseek-v4.1-flash,随行动座位变化;
    夜里与狼队专属任务不显示(防点名泄露身份)。
  • 仓库瘦身:开发过程文档(交接、历史日志、审批/复核记录、考题设计、内部规范)
    不再放进公开仓库,只保留玩法文档与部署说明。
  • 对局统计(1.1.0 起):对局结束可自愿贡献结果摘要,房主在设置里看胜率;
    只发胜负/天数/角色,不发发言与思考。

两个包

内容相同,只是启动说明侧重不同:

  • werewolf-desktop-1.2.0.zip:Windows / macOS / Linux 电脑当主机
  • werewolf-android-1.2.0.zip:安卓手机用 Termux 当主机

怎么开始

  1. 解压;Windows 双击 start.bat,macOS/Linux bash start.sh,安卓看 ANDROID-README.md;
  2. 浏览器打开 http://127.0.0.1:8077,填模型 API 与配对码;
  3. 和朋友玩:把联机码或邀请链接发给他。

详细步骤与排障见包里的 部署说明.md。