Repository navigation
Releases: shibry88-netizen/TalkTact
Release list
0.8.11 正式版
TalkTact 0.8.11 正式版
界面重做:从「一圈玻璃围着一块白板」到真正的玻璃拟态
- 渐变背景改由界面自己绘制(不再打包背景图);卡片重做成半透明的紫灰玻璃(顶边高光 + 右下暗边),圆角 / 间距 / 字号统一成套,「玻璃强度」可调。
- 状态色收进 8dp 状态点 / 13sp 文字 / chip / 1dp 描边;底栏顺序改为 运行状态 / 军师 / 角色 / 试一试 / 设置;高级设置分 5 组;军师页「当前军师」做成常驻卡。
- 换了新的应用图标(紫色渐变 + 白色气泡 + 金色星光),含 Android 13 主题图标。
- 长提示文案改成可折叠(默认 2 行)。
修掉用户实测的五个问题
- 「一圈玻璃围着一块白板」(点名「生成模式」那一栏)—— 卡片比背景亮不到 3%、背景紫透不上来、描边与内部亮度几乎无差,全部按实测数值重做。
- 敏感内容点「仍然分析这一条」后死循环回到风险卡 —— 放行的钥匙以前含角色档案,而档案每轮都在长。
- 没开白名单时,某些对话连折叠小气泡都不出现 —— 读不到输入框就整块藏掉了,现在永远留一个能点的按钮并写清原因。
- 出了结果卡片折起来又点不开 —— 折叠状态被每 900ms 的识别循环抢走;现在折叠意图归用户。
- LSPosed 状态不是实时的(其实是「曾经在微信里跑过」)—— 改成双向实时探测,运行状态页直接写「x 秒前回过话 · 页面=ChattingUI」。
顺带修掉(这轮排查中揪出来的)
- 浮层自我污染:读聊天标题时把我们自己卡片里的字读成了会话名 → 会话语境每 1~2 秒被重置 → 模型被反复重问 → 请求太密被限流,卡片正文在「思考中」和结果之间来回跳。现在遍历界面时整棵跳过自己的浮层。
- 会话上下文指纹只由「会话名 + 设置」决定(角色档案 / 说话风格不再让上下文失效、不再白烧 token)。
- 异步请求状态归位,过期回调不再改动当前界面。
完整变更记录:https://github.com/shibry88-netizen/TalkTact/blob/main/CHANGELOG.md
下载:TalkTact-0.8.11.apk
大小:73,684,496 字节(≈ 70 MiB)
sha256:3cef1a20d9abde6a039f22370aef35b6a4728364f4befe3c7c8e15a7d5718b70
它只读聊天页上的消息、只把候选回复填进输入框,不会自动发送,也不做任何上报 —— 详见 FAQ 与 PRIVACY。
从 0.8.7 及更早版本升级,必须先卸载旧版再安装(卸载会删掉配置,请先在「设置 → 备份 / 迁移」导出备份)。
0.8.8 及之后的版本之间正常覆盖升级即可。
0.8.12 第 2 版(测试)
0.8.12 第 2 版(测试)—— 对着真机可验收的点
装过 0.8.11 及之后的包可直接覆盖安装(签名没变)。本版新增「接口形态 + 服务商预设」,其余为第 1 版内容。
接口形态:不再只有「OpenAI 兼容」一种
- 新增「接口形态」下拉:OpenAI 兼容(Chat Completions,默认)/ OpenAI Responses / Anthropic Messages / 自定义路径。
- 差异只有三处 —— URL 路径、请求体、鉴权头(Anthropic 走
x-api-key+ 版本头,max_tokens必填、system 是顶层字段)。响应解析各写各的:Responses 从output[]取正文;Anthropic 把输入/输出 token 合成一个数。 - 接口自检也跟着形态走:以前不管选什么都按
/chat/completions发,选 Anthropic 的人会看到「接口 404」。现在自检按所选形态发。 ⚠️ 本地代理目前只转发 OpenAI 兼容形态:选了 Responses / Anthropic 且代理开着时,卡片里会直接提示把代理关掉或换回 OpenAI 兼容(代理是「Key 不出 App 进程」的核心路径,刻意不动它)。
服务商预设
- 「接口地址」上面加了「服务商」下拉:DeepSeek / Anthropic / 通义千问 / 智谱 GLM / Kimi / 火山方舟 / 百度千帆 / 硅基流动 / 阶跃星辰 / MiniMax / OpenAI —— 只省掉「去官网查地址」这一步,选中后地址、模型、形态照样能手改,不改变任何请求逻辑。
- 刻意不预填模型名(只有 DeepSeek 填了查证过的名字):模型名各家迭代快,写死过期的比留空更坑;留空时旁边就有「从服务端拉取模型列表」。
- 选中后显示那一家的注意事项(DeepSeek「temperature 设了不报错但不生效;有峰谷价」、火山方舟「模型要填推理接入点 ID
ep-xxxxxxxx」、通义「地址必须带/compatible-mode」等)。
本版验收重点
- 直连 + 换形态能不能正常生成(重点:Anthropic / Responses)。
- 接口自检在非 OpenAI 形态下是否不再误报「接口 404」。
- 选服务商能不能一键填地址。
- 本地代理 + 非 OpenAI 形态时,提示有没有出现。
- 下面第 1 版那 8 条回归。
第 1 版内容(保留)
- 隐私口径:命中敏感词的消息不再进「角色」档案 —— 以前只拦当次调用,正文照样进档、下一轮又作为背景发给模型;现在归档这一步就滤掉。
- 白名单:白名单外的会话连图都不认(识图闸门从 recordToRoles 之后提到识图之前)。
- 状态机收敛:busy/rewriteBusy/pendingRequestKey 合成一个 job;force → recheck;onPause 与 hideAll 的复位代码合并;每 tick 少解析一遍配置;风险色只有一份映射(「中」的 chip 底色原本是另一个色号)。
- 界面(设计师 P1):运行状态明细改「异常优先」排序 + hero 直接点出最该处理的那条;试一试候选卡改成和微信里那张卡片同一规格(同一张卡 + 圆角填充块 + ✎ 展开预设);角色页「本人」加渐变竖条 + 「系统」chip;清空记录 / 删除角色独立成「危险操作」卡;微信内卡片浅色底从白 0.95 改白 0.72。
- 界面(设计师 P2):设置首页「高级设置」入口卡加 3 行状态摘要;低配档玻璃补偿(填充 +0.04 / 描边 0.16 / 去投影);光晕漂移只在最高档位启用。
- 诊断页:「最近一次调用」提到页首 + 页底加「导出诊断包(.zip)」。
- 英文 README(README.en.md)。
- 回归重点:气泡弹出 / 敏感拦截 / 白名单 / 本地代理 / 分级模式 / OCR / 角色档案。
0.8.10 正式版
TalkTact 0.8.10 正式版(versionCode 37)
变更记录:https://github.com/shibry88-netizen/TalkTact/blob/main/CHANGELOG.md
仓库内留档:release/TalkTact-0.8.10.apk
下载:TalkTact-0.8.10.apk
sha256:7163d4737f8dcca625f3c0a43becaf73e3e75fab24946dd792304f3431d60f11
它只读聊天页上的消息、只把候选回复填进输入框,不会自动发送,也不做任何上报 —— 详见 FAQ 与 PRIVACY。
从 0.8.7 及更早版本升级,必须先卸载旧版再安装 —— 配置会一起删掉,
请先在「设置 → 备份 / 迁移」里导出备份,装完再导入。
📦 本仓库的这份 release 由主仓库手工补发(publish.yml 未改动,模块仓库照旧出正式版),
供官网下载按钮直接指向。留档目录见 release/。
0.8.9 测试版(第 1 版)
TalkTact 0.8.9 测试版(第 1 版)
安装:从 0.8.8 过来直接覆盖安装(同一把签名);从 0.8.7 及更早来的要先卸载重装。
这一版是三件小事 + 两个坑:
-
OCR 取图收紧了(不再白认)
- 以前对着语音 / 表情 / 视频 / 文件 / 位置这些行也会去认一遍图,结果永远是「认了:这张图里没字」,
白占一次识别、状态行还一屏一屏地刷。现在只对「图片 / 照片」这类行才去找图。 - 取图的兜底档也收紧了:头像、表情包那种方形小图不再算候选,语音波形这类小图标也被挡在外面。
- 顺手删掉了「连整行都画下来」那一档 —— 画整行会把昵称、时间这些界面文字一起认成「对方说的话」,
比认不出来更糟;现在宁可这一行不认图(回落成 [图片/表情/语音] 占位,和装 OCR 之前一样)。
← 要你帮忙试的:发 / 收一张有字的图,看卡片回复像不像;再看「设置 → 高级设置 → 图片文字识别」
那一行的状态。若出现「这些都没被采纳(太小 / 方形小图),这一行不认图」,把这句话发我。
- 以前对着语音 / 表情 / 视频 / 文件 / 位置这些行也会去认一遍图,结果永远是「认了:这张图里没字」,
-
「生成模式」两个 pill 改成立刻生效
- 以前点完还得滚到页底按「保存」才管用,现在点一下就落盘(卡里也写了这句)。
- 接口地址、温度那些仍然是草稿(要按页底保存)—— 所以高级设置页顶部新增一条提示
「本页有未保存的改动」,滚到哪儿都知道有没有没存的。
-
军师页提示词 / 角色详情备注:保存按钮旁边多了「未保存」红字
- 判据是「草稿和上次落盘的那份不一样」,不是「点过保存没有」—— 刚打开页面不会误报。
顺手填的两个坑:
- 角色详情改完「TA 是你什么人 / 平时的关系」,保存后返回列表 —— 以前列表还是旧档案,现在立刻更新。
- 高级设置页顶部的未保存提示(见上)。
sha256:c3eb20d1198af1c10635a45420c04e2816dafcba025de0655ae7f6e510e14ff9
附件:TalkTact-0.8.9-test.apk、talktact-0.8.9.patch(相对 main 累积、含二进制)
它只读聊天页上的消息、只把候选回复填进输入框,不会自动发送,也不做任何上报 —— 详见 FAQ 与 PRIVACY。
0.8.11 第 11 版(测试)
测试版第 11 版 · 覆盖安装即可(签名没换)
这一版找到的是真正的病根(你那份轨迹直接指出来了)。
你的轨迹里最要命的两行,每 1~2 秒互换一次:
标题 读到新标题「正在读这一屏、调接口…」但只出现一轮 → 这一轮仍按「home」处理
标题 读到新标题「home」但只出现一轮 → 这一轮仍按「正在读这一屏、调接口…」处理
「正在读这一屏、调接口…」是我们卡片正文里的字。也就是说:模块在找「这是哪个聊天」的时候,
把我们自己的悬浮卡片当成了微信的标题控件(浮层是挂在微信界面根节点上的,而所有识别都在遍历整棵树)。
后果是一串连锁反应:
· 会话名每 1~2 秒翻一次 → 模块以为自己换了会话 → 重置上下文、把「最短间隔」那道闸也清了
· 于是立刻重新问一次模型 → 卡片正文在「思考中…」和结果之间来回跳(你看到的往复循环)
· 请求太密 → 被服务商限流 → 就是你看到的「结果 失败:两路都没跑通」
· 附带:角色页里可能被写进了一个叫「home」或卡片文字的假角色
修法:给浮层打上标记,模块遍历界面时整棵跳过自己 —— 找标题 / 找消息列表 / 找输入框 / 诊断 dump
从此都看不见我们自己的卡片。
验收重点:
- 卡片正文不再来回跳(这条应该彻底好了)
- 日志里不再出现「读到新标题「正在读这一屏、调接口…」」这种行
- 「发起分析」不再每 1~2 秒刷一次;之前那种「两路都没跑通」应该也好转
- 顺手看一眼「角色」页:如果有以卡片文字 / 「home」命名的奇怪条目,长按删掉即可(那是这个 bug 的副产品)
- 老问题回归:气泡点开是否还会自己关;有些对话是否仍是「一句话也没有」
APK:TalkTact-0.8.11-test.apk
大小:73,684,496 字节
sha256:3cef1a20d9abde6a039f22370aef35b6a4728364f4befe3c7c8e15a7d5718b70
补丁:talktact-0.8.11.patch(2,844,095 字节)
0.8.10 测试版(第 3 版)
TalkTact 0.8.10 测试版(第 3 版)
安装:覆盖安装即可(同一把签名,从第 1 / 2 版直接装)。
这一版加了一个排查工具,并修掉一处「自检误报鉴权失败」:
-
【新增】决策轨迹 —— 「为什么没弹卡片」不用再猜了
- 注入侧每一轮读到了什么、判成什么、为什么停,都会记一条:读不到输入框 / 没找到列表 /
一条都没解析出来 / 最后一条是我发的 / 被白名单拦 / 还在最短间隔内 / 指纹没变 ……
以前这些分支大多不留痕,中间那几轮到底走到哪一步基本靠猜。 - 连续相同的记录会合并成一条并累加次数(形如「×40」):正常聊天时它几乎不增长,
判定一变就留下痕迹 —— 所以它能回看「最近几分钟」,而不是只覆盖最后几十秒。 - 固定 80 条、单条 200 字封顶,只写内存;会随心跳自动回传(最快 20 秒一次),
也可以在「界面结构诊断」页手动抓取后立刻看到。 - 刻意不含聊天正文:它要常驻 App 本地,所以不该比诊断包更容易泄露聊天内容。
- 诊断包里多出
07-决策轨迹.txt;诊断包说明也写清了「04 / 05 会有聊天内容,07 不含」。
- 注入侧每一轮读到了什么、判成什么、为什么停,都会记一条:读不到输入框 / 没找到列表 /
-
【修】首页「开始自检」在本地代理开着时误报鉴权失败
- 现象:高级设置里本地代理开着时,自检报 401;关掉再自检就变通。
- 原因:自检那一路是被设计成直连去量真实 DNS / TCP 的,但只要代理开着,
它仍带着「走代理」的请求头,请求就被代理按第一套接口转发了 —— 第二路自然对不上 Key。 - 现在:自检直连时用被检那套自己的地址与真 Key,代理开着也不影响它的结论。
sha256:6fec576b45e5497bed83a26a259734b2456cce05395be2ccdb1ff1a8af9536a8
附件:TalkTact-0.8.10-test.apk、talktact-0.8.10.patch(相对 main 累积、含二进制)
它只读聊天页上的消息、只把候选回复填进输入框,不会自动发送,也不做任何上报 —— 详见 FAQ 与 PRIVACY。
0.8.8 测试版(第 20 版)
第 20 版:你回的那行字一下把问题定位住了 —— OCR 那条路是通的(代理、认字流程都到位),卡在「那一行里没找到图」。这版放宽取图判据,并把那一行的现场写进状态行。
装过 test-0.8.8 的直接覆盖安装(签名没变)。
你回的那行字说明了什么
这一屏没找到能认的图(候选 0(行内没有短边 >84dp 的非文字控件))
「候选 0」= 在那一行的视图树里,一个符合「短边 >84dp 的非文字控件」的候选都没有。
所以不是认错字,是根本没把那张图取出来。
这版改了三处(都是放宽)
- 不再要求「控件是可见的」(只排除 GONE):微信把内容塞进 INVISIBLE 的占位控件里是老毛病
(读文字那部分代码早就这么放宽了),而「把控件画成图」对 INVISIBLE 的控件照样管用。第 19 版用「必须可见」,很可能就是它。 - 去掉「面积 ≥ 整行 40%」这条:它只会造成漏判(图比整行小得多很常见),而头像 / 表情本来就靠「短边 >84dp」挡住了。
- 多加两档兜底:大叶子 → 大容器 → 任意叶子(排除贴边方图 = 头像)→ 连整行本身都收。
宁可认错一张(认不出字就回落成占位),也别一个候选都不给。
顺便:那行字会带「现场」了
现在它会长这样(认到字 / 没认到字时都会带上):
认了:这张图里没字 · 380ms|行 1080x520 视图 37 正文=「…」|1)MMImageView 700x1000 v=4(位图 800x1200)|2)View 1080x520 v=0
行 1080x520= 这一行的尺寸;视图 37= 遍历到几个控件;正文=「…」= 这一行被当成的文字(确认扫的是不是那一行)- 后面是最大的 3 个非文字控件:类名 + 尺寸 +
v=(0 可见 / 4 不可见 / 8 已移除) - 下次如果还不行,这一行字就够我直接定位了,不用再猜。
请这样试
- 还是先确认「本地代理」开着,然后去微信停在那个有文字的图上。
- 切回 App →「设置 → 高级设置 → 图片文字识别」看「最近一次:」。
- 把那一行(可能很长)原样发我。三种结果:
认到 N 字→ 成了 ✅(顺便告我卡片上的回复对不对)认了:这张图里没字|行 …→ 取到了东西但没字,括号里那串现场告诉我取成了什么这一屏没找到能认的图(行 …)→ 还是没取到,那串现场同样说明问题
sha256: 0336fbbb9546354500fd89bddf408545b14ef47bc07149d271ceef871a4c9867
⚠️ 风控提示:本模块只是把你看到的内容发给你自己的模型接口,不会自动发送任何消息。
请自行评估账号风险,建议只在自己的号上小范围使用。