Repository navigation
Releases: FuHehe12/cc-wire-analyzer
Releases · FuHehe12/cc-wire-analyzer
Release list
v0.4.43
中文
修复
- 输入框右键现在有粘贴、复制、全选菜单——此前 mac 无右键粘贴入口,长串配置只能靠快捷键。
- 在别的页面切换界面语言后回到分析页,快照占用行与对比结果不再是切换前的语言。
- 「压缩当天录制」等存储操作被拒绝时提示给出具体原因与指引,不再只有「操作失败」四个字。
- 录制代理转发时地址中的查询串(如 beta 标志)被丢弃,现原样透传并完整记录;客户端未声明压缩时不代它请求压缩,避免收到无法解开的乱码。
- mac 应用内更新换版成功后新窗口不出现、程序图标变白框,重启改经系统正常启动方式拉起新版本。
- mac 翻译与模型连通测试报证书错误,证书信任源改为全应用统一从打包内置清单获取,更新检查与翻译共用同一处。
- mac 程序图标在程序坞呈白色方框观感(启动后仍会被运行时图标盖回),图标资产与运行时图标统一按系统圆角规范裁形并留出透明边距。
English
Fixed
- Text inputs now have a right-click menu with paste, copy and select-all; previously macOS offered no right-click paste entry, leaving keyboard shortcuts as the only way to paste long strings.
- After switching the interface language on another page, the snapshot usage row and comparison results on the analysis page no longer stay in the previous language.
- When storage operations such as compacting today's recordings are rejected, the notice now states the specific reason and what to do, instead of a bare "operation failed".
- The recording proxy dropped the query string from forwarded addresses (such as beta flags); it now passes it through unchanged and records it in full, and no longer requests compression on behalf of clients that did not ask for it, avoiding undecodable responses.
- On macOS, after an in-app update the new window did not appear and the Dock icon turned into a white block; the restart now launches the new version through the system's normal launch mechanism.
- Translation and model connectivity tests on macOS reported certificate errors; the trust store is now loaded for the whole app from the bundled certificate list, shared by the update checker and translation.
- The macOS Dock icon read as a white block (and was overwritten by the runtime icon after launch); the icon asset and the runtime icon are now both shaped with the system rounded-corner mask and transparent margins.
日本語
修正
- 入力欄に右クリックメニュー(貼り付け・コピー・すべて選択)が加わりました。macOS では以前これがなく、長い設定文字列の貼り付けはショートカットキーしかありませんでした。
- 他のページで表示言語を切り替えた後、分析ページのスナップ占有行と比較結果が切り替え前の言語のまま残ることがなくなりました。
- 「当日の録画を圧縮」などのストレージ操作が拒否された際、具体的な理由と対処を示すようになりました。「操作に失敗」の一語だけではなくなります。
- 録画プロキシが転送アドレスのクエリ文字列(ベータフラグなど)を落とす問題を修正しました。クエリはそのまま透過して完全に記録し、圧縮を宣言していないクライアントの代わりに圧縮を要求しなくなったため、解読不能な応答を避けられます。
- macOS でアプリ内更新の置き換え後、新しいウィンドウが出ず Dock アイコンが白い枠になる問題を修正しました。再起動はシステムの通常の起動方法で新バージョンを立ち上げます。
- macOS で翻訳とモデル接続テストが証明書エラーになる問題を修正しました。信頼の供給源をパッケージ同梱の証明書リストからアプリ全体で統一して取得し、更新確認と翻訳で共有します。
- macOS の Dock アイコンが白い四角に見える問題(起動後は実行時アイコンで上書きされる)を修正しました。アイコン素材と実行時アイコンをシステムの角丸規定に合わせて整形し、透明の余白を確保しました。
v0.4.42
中文
新增
- mac 首次安装提供标准安装镜像,双击打开后把应用拖入「应用程序」即可,从源头避免隔离运行导致的退回手动换版;原有压缩包保留供应用内更新使用。
文档
- 仓库首页新增安装说明:两个平台各给一条从下载到能用的最短路径,含首次运行时系统拦截的处理。
English
Added
- First-time macOS installs now ship as a standard disk image: open it and drag the app into Applications, which prevents the isolated-run state that used to push updates back to manual swaps. The zip archive remains for in-app updates.
Docs
- The repository front page now has an installation section: the shortest path from download to a running app on each platform, including how to get past the first-run system prompts.
日本語
追加
- macOS の初回インストール用に標準的なディスクイメージを提供します。開いてアプリを「アプリケーション」へドラッグするだけで、隔離実行による手動置き換えへの退行を源から防げます。従来の zip はアプリ内アップデーター用に残ります。
ドキュメント
- リポジトリのトップページにインストール手順を追加しました。各プラットフォームでダウンロードから起動までの最短経路と、初回起動時のシステム警告への対処を示します。
v0.4.41
中文
变更
- mac 检查更新后与 Windows 一样点一下完成换版并重启,替换不了(无写权限、非标准安装位置)时仍指路访达由用户手动拖入。经浏览器下载安装的 mac 用户请把应用拖入「应用程序」一次:系统会隔离运行这类下载来的应用,拖入前点一下换版会退回手动模式。
修复
- mac 下载更新后解出的新版本无法启动,改用与打包同一套系统工具解压以完整还原包内链接与权限,解压失败时如实报错。
English
Changed
- On macOS, checking for updates now finishes the swap with one click and restarts, same as on Windows; when replacement is not possible (no write permission, non-standard install location) it still points you to Finder for a manual drag-in. If you originally installed via a browser download, drag the app into Applications once: macOS runs such apps from an isolated location, and until then one-click replacement falls back to manual mode.
Fixed
- On macOS the newly downloaded version failed to launch after an update; extraction now uses the same system tool as packaging to fully restore the links and permissions inside the archive, and extraction failures are reported honestly.
日本語
変更
- macOS でも、更新確認後は Windows と同じくワンクリックで置き換えて再起動します。置き換えられない場合(書き込み権限がない、標準外の場所へのインストール)は、引き続き Finder を示して手動でのドラッグ入れを案内します。ブラウザ経由でダウンロード・インストールした場合は、アプリを「アプリケーション」へ一度ドラッグしてください。macOS はこの種のアプリを隔離された場所で実行するため、ドラッグまでワンクリック置き換えは手動モードに戻ります。
修正
- macOS で更新ダウンロード後の新バージョンが起動しない問題を修正しました。パッケージ作成と同じシステムツールで解凍し、アーカイブ内のリンクと権限を完全に復元します。解凍に失敗した場合は正直にエラーを報告します。
v0.4.40
中文
新增
- 应用采用浅底蓝色与珊瑚色色带图标,桌面窗口、双平台安装包和网页入口使用同一套视觉标识。
English
Added
- The app adopts a light-blue icon with coral ribbons; the desktop window, both platform installers and the web pages now share this single visual identity.
日本語
追加
- 明るい青地にコーラル色の帯を配したアプリアイコンを採用しました。デスクトップのウィンドウ、両プラットフォームのインストーラー、Web ページで同じビジュアルを共有します。
v0.4.39
中文
新增
- 顶栏多了「详情」一格:看某条请求时切去时序或设置,点它就切回刚才那条,之前点出来的翻译和 AI 解读都还在,不用重来一遍。
变更
- 捕获详情页里加密思考那段说明收成一句话,不再占两行。
修复
- mac 安装包每次启动都要现场解包并逐个校验几十个组件,双击到界面出现约需 6 秒,改为安装时就放好后,热启动约 0.6 秒、体积不变。
- mac 安装包里没有受信任的根证书,点「检查更新」永远报证书校验失败,现在随包带上并用它连 GitHub。
- 极快连续创建快照时列表排序在两条读取路径上不一致,发版自检因此偶发失败,现在排序确定一致、不再偶发。
- 部分上游会显式声明内容未压缩,此前被误当成解码失败计进错误统计,现在按正常响应对待。
- 命令行敲了不存在的子命令时,此前一声不吭弹出图形界面把命令挂住,现在报错并退出。
- 快照对比两段完全相同时不再显示「正文差异」区块,不会再把相同行误读成一处差异。
- 程序抛出没接住的错误时,终端里不再只剩一个退出码,报错内容会照常打出来。
- 白板上会凭空多出一模一样的贴纸,批量清理碰到它们还会报删除失败,现在两件事都不再发生。
- 拖动一张贴纸和整理整块白板越来越慢,慢的程度跟着快照总量涨,现在与快照堆了多少无关。
- 备份、拖动、删除、整理、批量清理期间界面毫无动静,现在右下角会转圈说明在做什么、整理到第几张。
- 连点「备份当前录制」会真存下好几份一样的快照,现在一次备份没结束前的重复点击不再重复保存。
- 贴纸位置没存上时界面一声不吭、下次打开又回原处,现在会说明失败并把贴纸放回原位。
- 快照占用把分析结果也数成了快照,张数比白板上多;删快照时留下的旧语义分析文件现在也一并清掉。
English
Added
- The top bar gained a "Detail" tab: while reading a request you can switch to the timeline or settings and click it to come straight back to that same request, with the translations and AI explanations you had already pulled up still there.
Changed
- The note about encrypted reasoning in the capture detail view was shortened to a single line instead of two.
Fixed
- The macOS build unpacked itself and verified dozens of components on every launch, taking about 6 seconds from double-click to window; the files are now put in place at install time, so a warm start takes about 0.6 seconds at the same download size.
- The macOS build shipped without trusted root certificates, so "Check for updates" always failed certificate validation; it now carries them and uses them to reach GitHub.
- Creating snapshots in very quick succession ordered the list differently along two read paths, which made the release self-check fail intermittently; the order is now deterministic and the flake is gone.
- Some upstreams explicitly declare content as uncompressed, which used to be counted as a decode failure in the error statistics; such responses are now treated as normal.
- Typing a subcommand that does not exist used to silently open the GUI and hang the command; it now reports the error and exits.
- Snapshot comparison no longer shows a "body differences" block when the two texts are identical, so identical lines are no longer read as a difference.
- When the program raises an uncaught error, the terminal no longer shows just an exit code — the traceback is printed as usual.
- Duplicate stickies appeared on the board out of nowhere, and bulk cleanup then failed to delete them; neither happens any more.
- Dragging a single sticky and tidying the whole board got slower as the snapshot count grew; both are now independent of how many snapshots have piled up.
- Backup, drag, delete, tidy and bulk cleanup gave no sign of progress; a spinner in the bottom right now says what is running and how far along the tidy is.
- Clicking "Back up current recording" repeatedly really did store several identical snapshots; repeat clicks before a backup finishes no longer save again.
- When a sticky's position failed to save, the interface said nothing and the sticky was back where it started next time; it now reports the failure and puts the sticky back.
- Snapshot disk usage counted analysis results as snapshots, giving a higher count than the board showed; deleting a snapshot now also removes the stale semantic-analysis files it used to leave behind.
日本語
追加
- 上部バーに「詳細」タブを追加しました。あるリクエストを読んでいる途中でタイムラインや設定に切り替えても、このタブを押せばそのリクエストにそのまま戻れます。すでに実行した翻訳や AI 解説の結果も残ったままです。
変更
- キャプチャ詳細にある暗号化された思考についての説明を、2 行から 1 行に短縮しました。
修正
- macOS 版は起動のたびに自身を展開して数十個のコンポーネントを検証しており、ダブルクリックから画面表示まで約 6 秒かかっていました。インストール時に配置する方式に変更し、ウォーム起動は約 0.6 秒、サイズは変わりません。
- macOS 版に信頼されたルート証明書が同梱されておらず、「更新を確認」が常に証明書検証エラーになっていました。現在は同梱し、それを使って GitHub に接続します。
- 極めて短い間隔でスナップショットを作成すると、2 つの読み取り経路で一覧の並び順が食い違い、リリース時の自己点検がまれに失敗していました。並び順が確定的になり、この揺らぎはなくなりました。
- 一部の上流は内容が非圧縮であることを明示します。これまではデコード失敗としてエラー統計に数えていましたが、正常な応答として扱うようにしました。
- 存在しないサブコマンドを入力すると、何も言わずに GUI が開いてコマンドが返らなくなっていました。現在はエラーを表示して終了します。
- スナップショット比較で 2 つの本文が完全に同一の場合、「本文の差分」ブロックを表示しなくなりました。同一の行が差分として読まれることはもうありません。
- 捕捉されない例外が発生したとき、ターミナルに終了コードしか残らないことがなくなり、エラー内容が通常どおり出力されます。
- ボード上に同一の付箋が勝手に増え、一括整理がそれらの削除に失敗していました。どちらも発生しなくなりました。
- 付箋 1 枚のドラッグとボード全体の整理が、スナップショットの総数に比例して遅くなっていました。現在は蓄積量に依存しません。
- バックアップ・ドラッグ・削除・整理・一括削除の実行中に画面が無反応でした。現在は右下のスピナーが実行中の処理と整理の進捗を表示します。
- 「現在の記録をバックアップ」を連打すると同じスナップショットが複数保存されていました。1 回のバックアップが終わるまでの重複クリックでは保存されません。
- 付箋の位置の保存に失敗しても画面は何も言わず、次に開くと元の位置に戻っていました。現在は失敗を伝え、付箋を元の位置に戻します。
- スナップショットの使用量が分析結果もスナップショットとして数えており、ボードの表示より枚数が多くなっていました。スナップショット削除時に残っていた古い意味解析ファイルも併せて削除します。
v0.4.38
中文
新增
- 捕获页多了「已冷藏」折叠区:很久没点开的日期自动收起来并再压小一截,点一下就解冻回日期栏。
- 设置里能关掉自动冷藏或改天数(默认 7 天),也能在捕获页手动冷藏某一天。
变更
- 实时分析页的字号收成六档,同一层级的内容不再各是各的大小。
修复
- 实时分析页点开一个目标时,显示的编号与图上那张卡对不上,会把一件任务读成整体目标。
- 捕获详情页里被上游加密的思考显示成空白,与模型压根没思考分不开。现在会标明已加密、读不到内容。
文档
- 官网补上实时分析的介绍(新章节、首屏文案与常见问题同步),请求详情一节加实际转发说明。
- 建站源码与工具回归主线目录,public/ 冻结快照里对应的副本下线,原始摘要保留可核验恢复。
- 披露断面开始分批下线:先删与主线逐字节一致的许可证副本和只差两处链接的构建手册,其余待内容复核。
- 变更记录改成三份:日常看的两份只用中文,发版给 GitHub 用的三语正文单独放一份,发版前对不上会直接挡住。
- 变更记录的写法要求收归开发入口文件一处,开发约定里那份互相打架的旧口径删掉。
- 变更记录顶部的状态卡从五节收成三节,不再抄当前版本的功能描述。
English
Added
- The capture page now has a collapsible "Cold storage" shelf: days you have not opened in a while are tucked away and squeezed down further, and one click thaws a day back onto the date bar.
- Settings can turn off automatic cold storage or change the threshold (7 days by default), and you can also freeze a single day by hand from the capture page.
Changed
- The realtime-analysis page now uses six font sizes, so content at the same level no longer comes in a different size in every block.
Fixed
- Opening a goal on the realtime-analysis page showed a number that did not match the card in the diagram, which made a single task read as the overall goal.
- Reasoning that the upstream had encrypted showed up blank in the capture detail view, indistinguishable from the model not having reasoned at all. It is now marked as encrypted and unreadable.
Docs
- The website gained an introduction to realtime analysis (new section, hero copy and FAQ kept in sync), and the request-detail section now explains actual forwarding.
- Website source and tooling moved back to the mainline directories; the matching copies in the frozen public/ snapshot were retired, with the original digests kept so the removal stays verifiable.
- The disclosure snapshot is being retired in batches: first to go were the licence copies that were byte-identical to the mainline and a build handbook that differed only in two links; the rest await a content review.
- The changelog is now three files: the two you read day to day are Chinese-only, the trilingual text for GitHub releases lives on its own, and a mismatch blocks the release.
- The rules for writing the changelog were consolidated into the development entry file, and the conflicting older wording in the development conventions was deleted.
- The status card at the top of the changelog went from five sections to three, and no longer copies the current version's feature descriptions.
日本語
追加
- キャプチャ画面に「冷蔵済み」の折りたたみ領域を追加しました。しばらく開いていない日付は自動的にしまわれ、さらに圧縮されます。クリックすれば解凍されて日付バーに戻ります。
- 設定から自動冷蔵を無効にしたり日数を変更したりできます(既定は 7 日)。キャプチャ画面から特定の日を手動で冷蔵することもできます。
変更
- リアルタイム分析画面のフォントサイズを 6 段階に整理し、同じ階層の内容がブロックごとに違う大きさになることがなくなりました。
修正
- リアルタイム分析画面で目標を開くと、表示される番号が図中のカードと一致せず、1 つのタスクが全体目標として読まれてしまう問題を修正しました。
- 上流で暗号化された思考がキャプチャ詳細で空白として表示され、モデルがそもそも思考していない場合と区別できませんでした。現在は暗号化済みで内容が読めないことを明示します。
ドキュメント
- 公式サイトにリアルタイム分析の紹介を追加しました(新しい節、ファーストビューの文言、FAQ を同期)。リクエスト詳細の節には実際の転送についての説明を追加しました。
- サイトのソースとツールを本流のディレクトリに戻し、凍結された public/ スナップショット内の該当コピーを撤去しました。検証できるよう元のダイジェストは残しています。
- 開示スナップショットの段階的な撤去を開始しました。まず本流とバイト単位で同一のライセンスコピーと、リンク 2 か所しか違わないビルド手引きを削除しました。残りは内容確認待ちです。
- 変更記録を 3 つのファイルに分けました。日常的に読む 2 つは日本語ではなく中国語のみ、GitHub リリース用の三言語の本文は独立させ、食い違いがあればリリースを止めます。
- 変更記録の書き方に関する規定を開発の入口ファイル 1 か所に集約し、開発規約側にあった矛盾する古い記述を削除しました。
- 変更記録冒頭のステータスカードを 5 節から 3 節に整理し、現行バージョンの機能説明を書き写すのをやめました。
v0.4.37
中文
新增
- 捕获详情页显示每条请求实际转发的上游地址(issue 260913_捕获详情显示实际转发上游)。请求侧元信息卡(model / stream 同排)新增 upstream chip:裸 host 自解释,悬停见完整 URL,空值不渲染。数据层
rec.upstream与后端聚合早已在用,本次只是把它呈现给人——OAuth 会话被 BASE_URL patch 劫到第三方上游时,「401 是谁拒的」此前在界面上无从回答(260913 排障即由此而来)。零新增 i18n 键,与 stop_reason 等协议字段的裸展示风格一致。
变更
- 实时分析页空态说明改为先讲用户处境,再讲机制(issue 260908-260912_实时分析页面与动作账本)。
ob.empty.body是这一页唯一的自我介绍位,原文案通篇讲机制(外环是另开的一个 AI、CCWA 只给事实存结论),第一次打开的人知道「谁在干活」,不知道「我为什么需要它」。改成三段式:vibe coding 多轮之后记不清跟 AI 说过什么、更难判断它把话理解成了什么(尤其它自创项目黑话)→ 这一页让外部 Agent 读录制、梳理整体目标,看清做过什么、在做哪一件、它怎么理解 → 原有机制交代与上手句。四处同步(行内兜底 + 中/英/日词典),ob.empty.title不改(空态标题说状态,用途归正文)。
修复
tools/build/manual/build_product.py在 Python 3.11 下编译不过(issue 260713-260912_发版链路与产物一致性)。第 34 行 f-string 的替换字段里用了与外层同类型的单引号(f'… {gap['id']}'),这是 PEP 701(3.12)才合法的写法,3.10/3.11 直接报SyntaxError。在 3.11 下逐文件扫描src/、tests/、tools/共 54 个 .py,失败只有这一处。CI 没拦住是因为 verify job 跑 3.12、CONTRIBUTING 也写明「本地说明书生成使用 Python 3.12+」,只有第八节清单的compileall条目覆盖tools/build却没带这个前提,在 3.11 本机按清单跑就会撞上。外层引号改成双引号后 3.10+ 均可编译,语义不变。
文档
- CHANGELOG 的写作要求移入
CLAUDE.md,并改成「条目求短」(issue 260714-260912_CHANGELOG写法的反复)。要求此前分散在两处:CHANGELOG.md开头的导语(分类与「说明问题、改动与必要影响」)和CLAUDE.md迭代纪律(「不设字数上限」)——写在被写文件自己开头的那半份在干活时读不到规则的身份,另一半还直接授权了长条目,于是条目越写越长(用户 260912 第二次点出)。现在导语只留导航并指向CLAUDE.md,写作要求全部归「迭代纪律」,并把字数条款改成一条三到五句、细节留 issue 与 commit。存量条目不回改,新条目按新规则写。 - 第八节自测清单补回
node tests/observe_guide_selftest.js(issue 260809-260912_文档体检与闸门机械化)。与release.ymlverify 的 Self-tests 步(17 条 Python + 2 条 Node)逐条对账,CI 有而清单没有的只有这一条;它断言界面「复制接入说明」三语×已建/未建观测的文案,少登则它只在 CI 上跑,CI 红在它上面时本地复现不出来。核对中发现此前对 compileall 的理解有误:清单那条与 CI 的 Syntax 步只是路径写法不同,compileall递归子目录,两者覆盖完全相同,并非「清单多覆盖」;上一条 bug 没被 CI 拦住的原因是 CI 跑 3.12,与路径无关。「改 CI 时顺手对一遍清单」260825 就写了,这次是发版逐条跑时才对出来的——「顺手」没有触发点。 - 架构总览 §3.1 端点分组表补齐整组缺失,并给
doc_audit加分组覆盖软检查(issue 260809-260912_文档体检与闸门机械化)。问题:该表只列了约 20 条路由骨架,快照、就地更新、外环观测、来源、上游配置历史、实例、存储占用、失败趋势等整组缺席(合计 40+ 端点、外加页面路由),而doc_audit的端点对账只认 API契约.md,契约侧全绿,导航层没有任何机器在看——「架构总览」是新人和 agent 的第一张地图。改动:①表按方案 B 重写成通配分组(组名 / 通配端点 / 受众 / 契约章节指路,行序跟契约章节走),受众列逐组对照契约原文、前端 fetch 调用面与 CLI 子命令重新核对(/api/actions契约明写「外环观测者用」、界面只读显示清单;trends/uncompact无界面入口走 CLI 或 API;ai-guide/unknowns前端零调用,维持仅 AI);补页面路由行(/、/view、/favicon.ico)与 catch-all 并列。②doc_audit新增第 10 条检查_overview_group_gaps:每个/api/*路由的组前缀(第一段)须在 §3.1 出现,只查组不查端点,与通配写法天然兼容;归软差异不挡发版(导航层漏一行不该卡发版,契约那条硬门已保证事实源不缺);自测补五条用例(缺口能检出 / 通配覆盖同组 / §3.1 锚点解析到正文 / 真实表全覆盖 / 软分类不挡)。③开发约定第十一节文档维护表新增「端点分组导航」行:新增端点不必回改表,新增组必须登记。实施中踩到一次自误报:示例写法`/api/<组>`被幽灵端点正则当成引用提取,改成散文写法后干净——闸门对自己人也生效。验证:doc_audit.py对账干净(通配写法未触发 ghost 误报)、--self-test全过、check_refs.py未解析 0,issue 的缺失清单逐组人工对拍全部覆盖。
v0.4.36
中文
文档
- 观察者提示词把「G 是什么」和「最高目标的两种变法」写成可操作的判据(issue 260912_G的定义与最高目标的两种变法)。用户反馈「G 是本次对话中的最高目标,是 AI 理解的最高目标,任务是不改变这个目标的情况下的任务;对于最高目标,有的时候是改进,有的时候是转折——提示词没有清晰写出来,其他 AI 总是弄不清」。逐处核对属实,且三处提示词面(
AI_USAGE.md、API契约.md、界面「复制接入说明」的ob.guide三语)缺的是同样两件事:①定义不可操作——都写「最高目标/用户总体上要达到的结果」,是同义反复,没给观察者拿什么去量;②最高目标的变化只写了转折这一种,举例全是「旧目标被放下、换成另一件」,而真实会话里更常见的是目标仍指向同一件事但被抬高、收窄或加了新的结果条件(「原来是精炼这份 CHANGELOG,现在是把整个项目转到原型阶段,前面那件成了它的第一步」),这一型方向连续、没有「换了一件事」的外部信号,于是被回落记成refine——260912 反馈包里两次被误记的跳变正是它。还有一个可指认的成因:turn的中文标签就叫「转折」,那是任务层的转折,与用户说的「最高目标转折」撞车。改动:给 G 和 T 各一句判据(G=「它现在做的每件事最终是为了什么」,T=「这件事做完或放弃,最高目标还是那个吗」),并写明 G 记的是执行 AI 当时认定的目标,不是用户原话的抄录、也不是观察者事后归纳的主题;把最高目标的两种变法(改进 / 转折)并列成表,各给形态、例子和各自会被误记成什么(改进→refine,转折→turn);判断固定成三步(先复核 G 变没变 → 变了记goal并在 trigger 写清是改进还是转折 → 没变才在refine/turn里二选一);点破术语撞车,要求写的时候把层说出来;旧 G 的收口一并写全(superseded/unresolved/mistaken)。不新增change取值——改进与转折的结构条件完全相同,差别用 trigger 一句话承载即可,新增取值要动校验、编号、自测与三语标签。界面图例G|目标的单边说法(「只有出现新的结果诉求才会有 G2、G3」)同步补成「被抬高、收窄或换了方向都算」。
English
Documentation
- The observer prompt turns "what G is" and "the two ways the top-level goal changes" into criteria you can act on (issue 260912_G的定义与最高目标的两种变法). User feedback: "G is the highest goal in this conversation, the highest goal as the AI understands it, and a task is work that does not change that goal. As for the highest goal, sometimes it is an improvement and sometimes a turn — the prompt does not say this clearly, and other AIs keep getting it wrong." Each place checked out, and all three prompt surfaces (
AI_USAGE.md,API契约.md, and the three languages ofob.guidebehind the interface's "copy setup instructions") were missing the same two things: ① the definition was not actionable — every one of them said "highest goal / the result the user is after overall", which is circular and leaves the observer nothing to measure against; ② only one kind of change to the highest goal was described — a turn, with every example being "the old goal was dropped and replaced by another", whereas the more common real case is a goal that still points at the same thing but is raised, narrowed, or given a new result condition ("it used to be trimming this CHANGELOG; now it is moving the whole project to the prototype phase, and the earlier piece has become its first step"). That shape is directionally continuous and carries no external signal of "something else was started", so it fell back torefine— and exactly that was the jump mis-recorded twice in the 260912 feedback pack. One more identifiable cause: the Chinese label ofturnis literally "转折", a task-level turn, which collides with what the user means by a turn of the highest goal. Changes: G and T each get one criterion (G = "what is everything it is doing now ultimately for", T = "if this were finished or dropped, would the highest goal still be that one?"), together with the statement that G records the goal the acting AI held at the time, not a transcript of the user's words nor a theme the observer abstracts afterwards; the two ways the highest goal changes (improvement / turn) are laid out side by side in a table, each with its shape, an example, and what it tends to be mis-recorded as (improvement →refine, turn →turn); the decision is fixed to three steps (first re-check whether G changed → if it did, recordgoaland say in the trigger whether it is an improvement or a turn → only if it did not, choose betweenrefineandturn); the collision of terms is called out with an instruction to name the level when writing; and closing out the old G is spelled out (superseded/unresolved/mistaken). No newchangevalue — improvement and turn have identical structural conditions, so one line in the trigger carries the difference, while a new value would mean touching validation, numbering, self-tests and three-language labels. The interface legend's one-sided wording forG|目标("a G2 or G3 appears only when a new result is asked for") is brought in line with "raised, narrowed, or pointed elsewhere all count".
日本語
ドキュメント
- 観察者プロンプトで「G とは何か」と「最高目標の二通りの変わり方」を実行可能な判断基準にしました(issue 260912_G的定义与最高目标的两种变法)。利用者からのフィードバック:「G はこの会話における最高目標であり、AI が理解している最高目標です。タスクとは、その目標を変えない範囲の作業です。最高目標には、改善のときもあれば転換のときもあります——プロンプトにそれが明確に書かれておらず、他の AI はいつも混乱します」。箇所ごとに確認したところ事実で、しかも三つのプロンプト面(
AI_USAGE.md、API契約.md、画面の「接続手順をコピー」にあるob.guideの三言語)に同じ二点が欠けていました:①定義が実行不可能——いずれも「最高目標/利用者が全体として達成しようとしている結果」と書くだけで同義反復であり、観察者が何をものさしにすればよいかを与えていません。②最高目標の変化が転換の一種類しか書かれていない——例はすべて「古い目標が置き去られ、別のものに置き換わる」ものでしたが、実際の会話でより多いのは、目標が同じ事柄を指したまま引き上げられ、絞り込まれ、あるいは新たな結果条件が加わる型です(「もともとはこの CHANGELOG を精錬することだったが、今はプロジェクト全体を試作段階へ移すことで、前のものはその第一歩になった」)。この型は方向が連続していて「別のことを始めた」という外部信号がないため、refineに落ちて記録されます——260912 のフィードバックで二度誤記された跳躍がまさにこれでした。もう一つ特定できる原因があります:turnの中国語ラベルがそのまま「転換」であり、それはタスク層の転換で、利用者の言う「最高目標の転換」と衝突します。変更点:G と T にそれぞれ一句の判断基準を与え(G=「今行っている一つ一つのことの最終的な目的は何か」、T=「これをやり終えても、あるいは放棄しても、最高目標は依然としてそれか」)、G が記録するのは実行 AI がその時点で認定していた目標であり、利用者の発言の筆記でも観察者が事後にまとめた主題でもないことを明記しました。最高目標の二通りの変わり方(改善/転換)を表に並べ、それぞれ形態・例・誤記されやすい先(改善→refine、転換→turn)を付けました。判断は三歩に固定(まず G が変わったかを再確認 → 変わったらgoalを記録し trigger に改善か転換かを明記 → 変わっていなければrefine/turnの二択)。用語の衝突を指摘し、書くときは層を明示するよう求めました。古い G の収束も書き揃えています(superseded/unresolved/mistaken)。changeの値は増やしていません——改善と転換は構造条件が完全に同じで、違いは trigger の一行が担えます。値を増やせば検証・採番・セルフテスト・三言語ラベルに手が入ります。画面の凡例G|目標の片側の書き方(「新しい結果要求が現れて初めて G2、G3 ができる」)も「引き上げ、絞り込み、方向転換のいずれも該当する」に揃えました。
v0.4.35
中文
新增
- 看历史日期时,今天来的录制会在日期条上报到(issue 260912_今日新录制在历史日期下无提示)。此前用户若先切到某个历史日期再开始录制,今天的录制会被
flushSSE整批静默丢掉:checkDayRollover()只在「用户本来就在看今天」时才切(260801 定的原则:不打断主动选了历史日期的人),而日期条上今天那一格压根不会出现——dates_available只在fetchCaptures时刷新。用户只能自己想起来手动切。现在丢弃前先记一笔:把今天补进日期条、按 id 去重记一个待看计数,那一格显示徽标并高亮,点一下切过去即清零。不抢焦点的原则保留,列表与 total 也不被污染(260712 的幽灵「加载更多」是这么来的)。没有新增任何轮询或请求:capture 本来就由 SSE 推来,数据已经在手上,成本为零。
修复
- 时序页的
×N计数色块在三套外观下对比度都不达标(issue 260912_视觉整体走查结果)。主线 1 的泳道色#A66B13亮度 0.186 卡在正中间——白字 4.44、黑字 4.18,两种字色都过不了 4.5,而fgOnHex()只会按亮度在黑白里二选一,选完仍然不达标。新增inkBg():保持色相逐档压暗直到白字达标,色块底改用它。泳道身份靠色相认,压暗不影响辨认,也不动泳道色板本身(连线与图例共用那份);fgOnHex随之无人调用,删除。同一处理用在轮卡的子代理徽章上。这一处是contrast_probe.js逐视图跑出来的,目视没看出来。
文档
- 观察者提示词补上
goal的判据与正例(issue 260912_观察者提示词目标漂移判据)。AI_USAGE.md的顶部主指令此前只定义了「修正」(refine)与「转折」(turn),goal只在下方长契约里留了「整体目标本身变了」一句、没有任何例子;同一段还单边警示「别把又开了一件事记成目标变了」。起因:一台跨机现场用 0.4.34 的观察者跑 A→G 时,用户起初没说真实目的、中途要求连续跳变(精炼 CHANGELOG → 改工作区规范 → 删测试材料 → 合并栏目 → 删打包文档 → 重组 issue → 为原型阶段做准备),观察者把这一串压成了一个贯穿全程的总目标,只在末尾记一次goal,被用户退回后连做两次rebuild_goal_flow才改对(最终三处goal)。改动:三类变化在主指令里并列给定义、触发信号与正例;判据补成双向的一张小表(什么不算goal/ 什么确实是goal);「G」一词只留给整体目标,任务级一律说 T 或「该任务的首个迭代」;要求记goal时在 trigger 里写一句「为什么是 goal 不是 turn」——两者结构条件完全相同,写不出理由的通常就是turn;新增第 9 条允许「整体目标尚未成型」成为可记录状态(current.understanding首句写明当前整体目标,未明确就直写「用户尚未说明真实目的,目标逐步显现」),不要事后补造连贯;mode补一句判据(随录制增长分批提交=incremental,整场一次性重建=retrospective)。API契约.md的change表与两平面段同步同一口径。 - 同伴会话的消息收成一条可执行规则。
origin=user但正文以Another Claude session sent a message:开头、随后是<teammate-message teammate_id="…">的,是别的 CC 会话发进这条泳道的消息(多 agent 协作时的空闲通知与审查汇报),不是真人,也不是子代理泳道里的[派生指令],而它照样占一个轮号。实测样本:9287e1ca会话 46 条[用户]行里 28 条属于这类。此前这条判据散在多处,观察者按[用户]读会把子代理汇报当成用户的新要求,凭空造出目标变化。
变更
- A→G 图把 G 和 T 的层级画出来(issue 260912_AG图G与T视觉层级)。用户反馈「界面挺好看,但 G 和 T 一眼看上去不能区分」。此前 G 段头是一条顶线加 11px 小标签,T 段头是一条左线加 11px 小标签,两者只差边框方向和 10px 缩进,而下属的 T 卡片是全场最重的元素——层级是反的。现在每个 G 段有自己的底衬(主色淡雾 + 描边 + 顶线),把属于它的 T 全圈进去,「谁属于谁」直接可见;G 的编号做成实心徽标,标题提到 15px;T 的编号改成描边 chip、标题回到常规字重。颜色全部由
--ag-key/--brand-ink经color-mix派生,不新增主题 token。底衬不能用负 z-index:.ag-canvas自己有背景且不构成层叠上下文,负层级会退到更外层被画布背景整个盖住(实测完全不可见),改为插在连线svg之前靠 DOM 顺序压底;段高取决于本段 T 排完后的位置,先渲染再回填。 - A→G 图改成二遍布局,卡片不再互相压住(同一 issue)。此前每个块的位置按固定节拍常量算,而真实高度由内容决定:G 段头实测 67px 而节拍只留 64,于是每一段都压住下面的 T 段头 2px;T 段头只有 25px 却按 46px 留位,间距排下来是 12 / -2 / 21 / 30 / 48 的乱序。调大常量治不了根——段头一换行就又会压上去(260909 反馈「被挡住一部分」是同一病根的上一次发作)。现在生成时的 top 只作首屏近似位,渲染后
layoutGoalFlow()按实测高度重排一次,再画连线;间距统一成 A→G 段 30、段与段 36、G 段头→T 段头 12、T 段头→卡片 10、卡片之间 20。卡片高度由钉死的 112px 改成min-height、正文 clamp 2 行放到 3 行——钉死高度会把长一点的目标截半句,而位置又按同一个常量算,两件事本就连在一起。实测(1600px / 1180px 两档,含展开折叠任务与打开就地详情):重叠 0 处,卡片全部落在各自 G 段内。 - 顶部「当前的理解与现状」重排(同一 issue)。用户反馈展开后「字体怪、集中在一侧、小标题比正文还小、正文叠成一坨、①② 混在一起」。一句话汇报此前卡着
max-width:46em,宽屏上只占左半边;小标题 13px 比它领起的 14px 正文还小;观察者又常把要点写成一整段、序号埋在句中。现在汇报放开宽度上限、提到 18px 并加左色条,小标题提到 15px 加色点,两栏各自坐进一张卡片,正文行距放宽到 2.0;渲染时在 ①–⑳ 前补换行并按行拆段、序号行加悬挂缩进——只动显示,存储的current.understanding正文不变。 - 「录制分析agent行为」补上中英文之间的空格(中文与日文各一处),与项目其它文案一致。
- 两处浏览器探针断言修正。
observe_goal_browser.cjs里「页面正文逐字包含current.understanding」改为去掉空白后比对:分条渲染加的只是空白,不改一个字,这样反而更贴合它要守的「页面不篡改观察者写的内容」。另一处[data-om-action="goal-anchor"]在 strict 模式下命中两个元素——首个 G 段没有显式目标变化可指时,段头自 260909 起就与 A 卡片共用这个 action,与本次改动无关,只是这个手动探针本机从没跑起来过(缺 playwright)所以一直没暴露;改为.ag-anchor [data-om-action="goal-anchor"]。
English
Added
- Recordings that arrive today now announce themselves while you are looking at an older date (issue 260912). If the user switched to a past date before starting a recording, today's captures were dropped wholesale by
flushSSE:checkDayRollover()only switches when the user was already on today (the 260801 rule: never take away a date the user chose deliberately), and today's chip would not even appear, becausedates_availableis refreshed only byfetchCaptures. The only way out was to remember to switch by hand. Now the batch is counted before it is dropped: today joins the date bar, a pending count is kept (deduplicated by id), that chip shows a badge and highlights, and one click switches over and clears it. The no-stealing-focus rule stays, and neither the list nortotalis polluted — that is where the 260712 phantom "load more" came from. No polling and no request was added: captures already arrive over SSE, so the data was in hand and the cost is zero.
Fixed
- The
×Ncount swatch on the timeline failed contrast in all three appearances (issue 260912). Lane colour#A66B13has luminance 0.186, right in the middle: white text scores 4.44 and black 4.18, so neither text colour clears 4.5, whilefgOnHex()only ever picks one of the two and the result stays below the bar. The newinkBg()keeps the hue and darkens step by step until white text passes, and the swatch uses it. Lanes are recognised by hue, so darkening costs nothing, and the lane palette itself — shared with the wires and the legend — is untouched;fgOnHexlost its last caller and was removed. The same treatment applies to the sub-agent badge on turn cards. This one surfaced only by runningcontrast_probe.jsper view; looking at the page was not enough.
Documentation
- The observer prompt gains criteria and a worked example for
goal(issue 260912). The top-level instruction inAI_USAGE.mddefined only refinement (refine) and turn (turn);goalhad a single sentence — "the overall goal itself changed" — buried in the contract below with no example at all, and the same passage warned in one direction only ("do not record starting another piece of work as a changed goal"). Why: on another machine, an observer running A→G on 0.4.34 met a user who had not stated the real purpose and whose requests jumped repeatedly — trim the CHANGELOG → change the workspace rules → delete test material → merge sections → delete packaging docs → reorganise issues → prepare for the prototype phase. The observer compressed all of it into one overall goal and recordedgoalonly at the end; after the user pushed back it took tworebuild_goal_flowpasses to get it right, ending at threegoalentries. Changes: all three kinds of change now sit side by side in the top instruction with definitions, trigger signals and a worked example; the criteria became a two-way table (what is not agoal/ what really is one); the letter "G" is reserved for the overall goal, with the task level always called T; recording agoalnow requires one line in the trigger saying why it is a goal and not a turn — the two have identical structural conditions, and being unable to write that line usually means it is a turn; a new ninth rule makes "the overall goal has not formed yet" a recordable state instead of forcing a guess between two failing criteria; andmodegains a one-line test.API契约.mdfollows the same wording. - Messages from a teammate session became one executable rule. A line with
origin=userwhose body starts withAnother Claude session sent a message:followed by<teammate-message teammate_id="…">comes from another CC session on the same lane — idle notices and review reports during multi-agent work. It is not the human, nor the[派生指令]of a sub-agent lane, and it still occupies a turn number. Measured sample: 28 of the 46[用户]lines in session9287e1ca. The criterion used to be scattered, so an observer reading[用户]at face value would take a sub-agent's report for a new user request and invent a goal change.
Changed
- The A→G diagram now draws the difference between G and T (issue 260912). User feedback: "the interface looks good, but G and T cannot be told apart at a glance." A G heading was a top rule plus an 11px label; a T heading was a left rule plus an 11px label — they differed by which side the border sat on and 10px of indent, while the T cards below them were the heaviest elements on screen. The hierarchy was upside down. Each G section now sits in its own band (tinted wash, hairline, top rule) enclosing its T sections, so membership is visible instead of read; the G number became a solid badge and its title moved up to 15px, while the T number became an outlined chip with a regular-weight title. Every colour derives from
--ag-key/--brand-inkthroughcolor-mix, so no theme token was added. The band cannot use a negative z-index:.ag-canvashas its own background and is not a stacking context, so a negative layer falls outside it and the canvas background covers it completely (verified: invisible). It is inserted before the wiresvginstead and sits underneath by DOM order; its height depends on where the section ends, so it is filled in after rendering. - The A→G diagram switched to a two-pass layout; cards no longer overlap. Positions came from fixed cadence constants while real heights depend on content: a G heading measures 67px against the 64px the cadence reserved, so every section overlapped the T heading below it by 2px, and a T heading of 25px was given 46px — leaving gaps of 12 / -2 / 21 / 30 / 48. Raising the constants does not fix it; one wrapped heading and the overlap is back (the 260909 report "partly covered" was the same root cause). The generated
topis now only a first-paint approximation: after rendering,layoutGoalFlow()re-places everything by measured height and the wires are drawn against the new positions. Card height moved from a hard 112px tomin-heightand the clamp from 2 lines to 3 — a fixed height cut long goals in half, and position derived from that same constant, so the two belong together. Measured at 1600px and 1180px, including expanded tasks and an open inline detail: zero overlaps. - The "current understanding and situation" block was re-set. User feedback on the expanded block: the type looks odd and bunches to one side, the small headings are smaller than the body text they introduce, the body is one solid mas...
v0.4.34
中文
新增
- 工具面进索引与盲区雷达(issue 260911_工具面雷达与beta归属)。索引新增
tools_builtin(内置工具名列表)/tools_fp(内置+MCP 的联合指纹)/tools_mcp_n(MCP 工具数),/api/unknowns随之多出两档:tools报不在classifier.KNOWN_TOOLS基线里的内置工具(snippet 直接给该工具的 description 片段,一眼看出它是干什么的),tool_changes报同一条泳道内工具集前后不一致(value 是差集,如+TaskCreate,TaskGet,TaskList… -EndConversation,RemoteTrigger,SendUserFile)。起因:09-11 查「CC 是不是有新功能」时,Artifact/DesignSync/Monitor/PowerShell/PushNotification/SendFeedback/Workflow七个内置工具只出现在第三方链路的会话上,而索引里关于工具只有tools_n一个数字——这件事只能靠人打开 40 MB 主文件逐条扫才看得见,雷达一个字都报不出来。工具面是 CC 的能力清单,地位等同于anthropic-beta。mcp__前缀的工具不进基线、不参与未知判定,只记数量:那是使用者自己装的 MCP,报它会把真信号淹掉(与 degraded 从 block_keys 分流出去同一个道理)。分组键是会话 + kind + agent_id 而不是会话:首版按会话分组,当天 26 条「工具集变化」没有一条是真的——子代理复用父会话 id、并行子代理之间工具面各不相同、CC 自己发起的检索派发恒tools_n=1,三者合起来就是 main↔subagent 来回翻牌。收口后 09-06 只剩 1 条真变化。详情页的 Tools 折叠同步高亮基线外的内置工具,并在标题显示 MCP 数量。 - betas 段带归属。
/api/unknowns的betas.new/betas.known现在带hosts/cc_versions,new段另带samples。端点的判读第一步写的就是「先看 hosts」,而 betas 恰恰是唯一没有归属的那一段——09-11 的新 beta 正好单一 host 独占,判读要用的信息不在响应里,只能人工拉/api/captures?limit=300自己按beta聚合才确认得了。known段不给 samples(上千条给 id 无意义),new段必须给——那才是要接着查上下文的一段。 /api/*的 404 会指路。未命中的/api/*响应从{error, path}扩成带did_you_mean(最接近的已注册端点,≤3 个,从 Flask url_map 现算,不维护第二份清单)与hint(指向GET /api/ai-guide)。起因:AI 消费者按别处的惯例第一反应调/api/status(本工具叫/api/proxy/status),旧 404 不给任何线索,只能继续猜。相似度比的是去掉api/之后的部分——所有候选都以它开头,带着比会让/api/logs这种根本不存在的东西也配出三个「最接近」;宁可返回空列表也不给错的指引。/api/grep的 coverage 说明未检索区。新增not_searched:HTTP 头(含anthropic-beta)不在检索区,查 beta / 工具面走/api/unknowns。起因:拿 beta 特性名去 grep,命中的全是别的对话正文里提到它的地方,一条真正带该 beta 的请求都搜不出来,而coverage只列了「搜过哪些正文区域」,看不出这件事。
变更
KNOWN_BETAS并入mid-conversation-tool-changes-2026-07-01。09-11 首次出现(CC 2.1.268,当天 47 条全在同一条第三方链路上),逐日回查 08-31~09-10 全无,claude.exe二进制里能取到该字符串——是 CC 客户端声明的新能力,不是网关的形状差异。它的语义正是「工具集可在对话中途变化」,与本版新增的tool_changes档是同一件事的两面。IDX_SCHEMA18 → 19。新增的三个工具面字段在旧索引里恒缺失,会让tools档恒空、tool_changes恒无变化而不报任何错(静默降级)。升级后首次读取会重建当天索引。tests/dev_seed.py:工具名从Task/TodoWrite(真流量里早已不存在)换成基线内的真实名字,否则 seed 出来的每一条都被新雷达报成「没见过的内置工具」,样例数据自己制造的噪声会盖住真信号;新增 E5 样例演示工具集中途变化(未知内置工具 + MCP 各一个);docstring 补上「跑完立刻删」的警告——09-10 有 54 条合成记录因为跑完没删留在真实录制里,回头查协议演进时差点被当成真信号。
English
Added
- The tool surface now reaches the index and the blind-spot radar (issue 260911). Three new index fields —
tools_builtin,tools_fp,tools_mcp_n— and two new sections in/api/unknowns:toolsreports built-in tools outside theclassifier.KNOWN_TOOLSbaseline (the snippet is the tool's own description, so what it does is answerable without a second call), andtool_changesreports a tool set that differs between consecutive requests on the same lane (the value is the diff, e.g.+TaskCreate,TaskGet,TaskList… -EndConversation,RemoteTrigger,SendUserFile). Why: while checking "does CC have new features" on 09-11, seven built-in tools (Artifact,DesignSync,Monitor,PowerShell,PushNotification,SendFeedback,Workflow) turned out to appear only on third-party-link sessions — and the index held exactly one number about tools,tools_n. Seeing that required scanning a 40 MB capture file by hand; the radar said nothing. The tool surface is CC's capability list, on par withanthropic-beta.mcp__tools stay out of the baseline and out of the unknown check (they are the user's own MCP servers; reporting them would drown the real signal) and are only counted. The grouping key is session + kind + agent_id, not session: the first cut grouped by session and produced 26 "tool changes" that were all false — sub-agents reuse the parent session id, parallel sub-agents differ from each other, and CC's own search dispatch always hastools_n=1. After the fix, 09-06 keeps exactly one real change. The detail page highlights off-baseline built-in tools and shows the MCP count in the Tools header. - The betas section carries attribution.
betas.new/betas.knownnow includehosts/cc_versions, andnewalso includessamples. The endpoint's own reading order starts with "look at hosts first", yet betas was the one section without it — and the new beta on 09-11 was single-host, so the deciding information simply was not in the response.knowngets no samples (ids are meaningless across thousands of rows);newmust have them, because that is the section you follow up on. - 404s on
/api/*now point somewhere. The response gainsdid_you_mean(closest registered endpoints, computed from Flask's url_map so there is no second list to drift) andhint(pointing atGET /api/ai-guide). An agent's first instinct is/api/status(here it is/api/proxy/status), and the old 404 offered nothing. Similarity is measured after stripping the sharedapi/prefix, and an empty list is preferred over a wrong steer. /api/grepstates what it does not search. The newnot_searchedfield says HTTP headers (includinganthropic-beta) are outside the searched areas, and points to/api/unknownsfor beta and tool-surface questions. Grepping a beta feature name only ever matched other conversations quoting it.
Changed
KNOWN_BETASgainsmid-conversation-tool-changes-2026-07-01— first seen 09-11 (CC 2.1.268, all 47 on one third-party link), absent on every day from 08-31 to 09-10, and present as a string in theclaude.exebinary: a capability declared by the CC client, not a gateway quirk. Its meaning — the tool set may change mid-conversation — is the other half of the newtool_changessection.IDX_SCHEMA18 → 19. The three tool-surface fields are absent from older indexes, which would leave both new sections silently empty. The first read after upgrading rebuilds the day's index.tests/dev_seed.py: tool names switched fromTask/TodoWrite(long gone from real traffic) to names inside the baseline, so seeded records no longer report themselves as unknown tools; added sample E5 for a mid-conversation tool change; the docstring now warns to delete seeded data immediately — 54 synthetic records left on 09-10 nearly passed for a real protocol signal.
日本語
追加
- ツール面をインデックスと死角レーダーに載せました(issue 260911)。インデックスに
tools_builtin/tools_fp/tools_mcp_nを追加し、/api/unknownsに 2 つの区画が増えました:toolsはclassifier.KNOWN_TOOLSの基準線にない組み込みツールを報告し(snippet はそのツールの description 断片なので、何をするものか一目で分かります)、tool_changesは同一レーン内でツールセットが前後で食い違ったことを報告します(値は差分)。きっかけ:09-11 に「CC に新機能があるのか」を調べた際、7 つの組み込みツール(Artifact/DesignSync/Monitor/PowerShell/PushNotification/SendFeedback/Workflow)がサードパーティ経路のセッションにしか現れないと判明しましたが、インデックスにはツールに関してtools_nという数字が 1 つあるだけ——40 MB の本体ファイルを人手で走査しないと見えず、レーダーは一言も報告しませんでした。ツール面は CC の能力一覧であり、anthropic-betaと同格です。mcp__接頭辞のツールは基準線にも未知判定にも入れず、数だけ数えます(利用者自身が入れた MCP であり、報告すると本物の信号が埋もれます)。グループ化キーはセッションではなく セッション + kind + agent_id:初版はセッション単位で、当日 26 件の「ツール変化」が 1 件も本物ではありませんでした——サブエージェントは親のセッション id を共有し、並列のサブエージェント同士もツール面が異なり、CC 自身の検索ディスパッチは常にtools_n=1だからです。修正後、09-06 に残る本物の変化は 1 件のみ。詳細ページの Tools 折りたたみでも基準線外の組み込みツールを橙色で示し、MCP 数を見出しに出します。 - betas 区画に帰属情報を付けました。
betas.new/betas.knownにhosts/cc_versionsが付き、newにはsamplesも付きます。エンドポイント自身が「まず hosts を見よ」と書いているのに、betas だけが帰属を持たない区画でした。knownに samples は付けません(数千件に id は無意味)。 /api/*の 404 が行き先を示します。did_you_mean(最も近い登録済みエンドポイント、Flask の url_map から都度算出)とhint(GET /api/ai-guideへの案内)を返します。エージェントはまず/api/statusを叩きますが、本ツールでは/api/proxy/statusです。誤った案内より空リストを優先します。/api/grepが検索対象外を明示します。not_searchedを追加:HTTP ヘッダー(anthropic-betaを含む)は検索対象外で、beta やツール面は/api/unknownsで調べます。
変更
KNOWN_BETASにmid-conversation-tool-changes-2026-07-01を追加。09-11 に初出(CC 2.1.268、当日 47 件はすべて同一のサードパーティ経路)、08-31〜09-10 は日ごとに遡って皆無、claude.exeバイナリにも文字列が存在——ゲートウェイ差ではなく CC クライアントが宣言した新機能です。その意味(ツールセットが会話の途中で変わりうる)は新設のtool_changes区画と表裏一体です。IDX_SCHEMA18 → 19。 新しい 3 フィールドは旧インデックスに存在せず、放置すると両区画が無言で空になります。更新後の初回読み取りでその日のインデックスを再構築します。tests/dev_seed.py:ツール名を基準線内の実在名に変更(Task/TodoWriteは実トラフィックにはもう存在せず、そのままでは生成データ自身が未知ツールとして報告されます)、会話途中のツール変化を示す E5 を追加、docstring に「実行後すぐ削除」の警告を追加——09-10 に残った合成 54 件が、危うく本物のプロトコル信号として扱われるところでした。