Clouds Coder 2026.06.22-Stable #34
FonaTech
announced in
Announcements
Replies: 0 comments
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Uh oh!
There was an error while loading. Please reload this page.
-
CHANGELOG 2026-06-22
RAG reinforcement, real MCP client, personalized long-term memory, and graph visualization
This update concentrates on retrieval quality and knowledge plumbing. The RAG engine moved from TF-IDF cosine to BM25 with symbol-exact boosting, gained cross-lingual recall without any embedding model, learned to ingest book-length documents safely, and exposed a self-ingestion tool the agent can use to remember good references. Alongside it, Clouds Coder gained a genuine Model Context Protocol (MCP) client, a redesigned long-term user-memory path that is uniform across modes yet genuinely personalized, and a fully animated 2D/3D knowledge graph with adaptive labels.
English
Headline: Lexical-only RAG that actually recalls, plus real MCP and personalized memory
1. RAG retrieval moved to BM25 + symbol-exact boost (lexical-only)
TFGraphIDFIndex/CodeGraphIndexchanged from TF-IDF cosine (which length-penalizes and saturates poorly) to BM25 (RAG_BM25_K1=1.5,RAG_BM25_B=0.6). Postings now store raw term frequency; length normalization lives in the BM25 denominator.raw/(raw+RAG_BM25_SATURATION=4.0), deliberately not min-max. Min-max would force the best candidate in an all-weak pool to 1.0 and break the no-evidence / minimum-synthesis thresholds; saturation preserves absolute relevance so a weak pool stays weak.0.5·(0.85+0.15·rarity)); a partial part-match is dampened. Exact identifier queries are high-precision intent, so they now reliably surface the defining chunk.lexical × 0.80 + graph_bonus + symbol_boost, applied identically to the knowledge RAG and the code RAG.2. Chunking that preserves structure
outer.innerandClass.method. Each chunk persists itssymbol/symbol_kindso the symbol boost can see them (these were previously dropped)._rag_boundary_split) backs each oversized-block cut to the nearest paragraph / sentence / newline / whitespace boundary, with boundary-aligned overlap, replacing the old mid-character slicing.3. Cross-lingual knowledge retrieval — no embedding model
_augment_query_cross_lingual) for arbitrary / out-of-vocabulary terms.cross_lingual=false.4.
rag_remember— agent self-ingestion toolrag_remember(text, title?, tags?, category?, source?). It reuses the same dedup/import path as the admin text-import (sha256-deduped, no extra LLM call) with a provenance header.write_to_blackboard.5. Book-length ingestion, made safe
RAG_MAX_CHUNKS_PER_DOCwas raised from 500 to 20000, and a singleRAG_MAX_DOCUMENT_CHARScap (default 12M, envAGENT_RAG_MAX_DOCUMENT_CHARS, clamped 150k–40M) now replaces the scattered per-extractor truncation limits across PDF / docx / csv / pptx / xls parsing and the upload re-read path.pdftotextsubprocess timeout was aligned to the same parse-timeout budget.6. Versioned index snapshots
bm25-v1format tag plus the newchunk_lengths/avg_chunk_lenfields. On a format mismatch,restore()declines and the index rebuilds transparently from the persisteddocuments.json/chunks.jsonsource of truth — no data loss, no manual migration.7. Animated 2D/3D knowledge graph with adaptive labels
8. Real MCP (Model Context Protocol) client
MCPServerProcess,MCPManager): it spawns each configured server as a child process and speaks theinitialize → notifications/initialized → tools/list → tools/callhandshake over stdin/stdout, with id-correlated pending futures fed by a per-process reader thread.LLM.config.jsonin both the Claude/Codex dialect (mcpServers/mcp_serverswith{command, args, env}) and the OpenCode dialect (mcpwith{type:"local", command:[argv], environment:{}}); remote/sse/http transports are recorded but skipped with a notice (stdio only).mcp__<server>__<tool>and behave exactly like built-in tools across every mode and role (single-agent, manager, explorer, developer, reviewer, plan-mode), bypassing the per-role allowlist and routed ahead of any builtin so they cannot be shadowed.--port + 4(e.g. 8084 at the default 8080), independent of the IDE UI, with health monitoring, auto-restart of crashed servers, and hot-reload when the on-disk config changes. The service is reachable over a small HTTP surface (/mcp/health,/mcp/tools,/mcp/status,/mcp/reload,/mcp/restart,/mcp/call).mcp-builderskill was rewritten to teach the real wire protocol and both config dialects, and is now released as inline source rather than from the embedded bundle.9. Port scheme made consistent
--portincrementally: agent = P, skills = P+1, rag = P+2, code = P+3, mcp = P+4, ide = P+5. The IDE moved off its old fixed port (which collided with mcp at the default 8080 and silently disabled the MCP service), and both the IDE and MCP conflict checks now count only services that actually started, so a disabled service can never block another from binding.10. Long-term user memory: uniform yet personalized
_user_profile_capsule_prompt_block) is now byte-identical across theweakandonmodes (same injection budget), empty whenoff, and injects at most once per user message. Memory mode governs how rich the capsule is at build time, never how heavy each turn is — so performance is uniform across off / weak / on.onmode a best-effort post-session distillation reads the recent conversation and proposes durable preferences as structured items (confidence ranked above the regex capture but never treated as certain). This runs off the hot path in the existing background session-finished step, so it adds no per-turn cost.11. Multi-agent todo numbering unified
N.Mnumbers by display position (not by author), a single-seed invariant prevents two paths from both creating a step's subtasks, and a read-before-write canonical echo shows the reconciled list back in the tool result so workers reuse existing numbers instead of restating work as free text.12. Chat-page preview: open HTML in a real browser
13. Source splitter updated
split_coder.pynow classifies every top-level symbol: a newmcp/package (mcp/driver.py) houses the MCP driver classes, helpers, and constants, and the display / JSON / reasoning helpers were routed to their natural utility modules. The split self-check passes with zero unclassified symbols.2026-06-22 Summary
Retrieval is the theme: BM25 plus symbol-exact boosting and structure-preserving chunking make lexical-only recall reliable, cross-lingual querying works without an embedding model, books ingest safely, and the agent can remember good references on its own. Around that, a real MCP client makes external tools first-class everywhere, long-term memory became uniform in cost yet personalized in substance, and the knowledge graph is now fully animated with adaptive, density-culled labels in both 2D and 3D.
中文
标题:真正能召回的纯词法 RAG,加上真实 MCP 与个性化长期记忆
1. RAG 检索改为 BM25 + 符号精确加权(纯词法)
TFGraphIDFIndex/CodeGraphIndex的词法核心从 TF-IDF 余弦(会惩罚长文本、饱和特性差)改为 BM25(RAG_BM25_K1=1.5、RAG_BM25_B=0.6)。倒排表现在存储原始词频,长度归一化交给 BM25 的分母处理。raw/(raw+RAG_BM25_SATURATION=4.0),刻意不用 min-max。min-max 会把全弱候选池里的最佳项强行拉到 1.0,破坏「无证据 / 最低综合分」阈值;饱和函数保留绝对相关性,弱池仍判为弱。0.5·(0.85+0.15·rarity));部分匹配则衰减。精确标识符查询是高精度意图,现在能稳定召回定义所在的分块。lexical × 0.80 + graph_bonus + symbol_boost,知识 RAG 与代码 RAG 完全一致。2. 保留结构的切分
outer.inner、Class.method这样的层级名称。每个分块都会持久化symbol/symbol_kind(此前被丢弃),符号加权才能看到它们。_rag_boundary_split):超长块的每个切点都回退到最近的段落 / 句子 / 换行 / 空白边界,并按边界对齐重叠,取代旧的「字符中间硬切」。3. 跨语言知识检索 —— 无需嵌入模型
_augment_query_cross_lingual。cross_lingual=false关闭。4.
rag_remember—— 智能体自我入库工具rag_remember(text, title?, tags?, category?, source?)。它复用与管理端文本导入相同的去重 / 导入路径(sha256 去重、无额外 LLM 调用),并带溯源头信息。write_to_blackboard一样,对 explorer / reviewer 角色和 plan 模式调研都开放。5. 书籍级导入,且安全
RAG_MAX_CHUNKS_PER_DOC从 500 提升到 20000,并用统一的RAG_MAX_DOCUMENT_CHARS上限(默认 12M,环境变量AGENT_RAG_MAX_DOCUMENT_CHARS,限定 150k–40M)取代散落在 PDF / docx / csv / pptx / xls 解析与上传重读路径中的各处截断。pdftotext子进程超时已与同一解析超时预算对齐。6. 带版本的索引快照
bm25-v1格式标记以及新的chunk_lengths/avg_chunk_len字段。格式不匹配时restore()拒绝恢复,索引会从持久化的documents.json/chunks.json真源透明重建——无数据丢失、无需手工迁移。7. 带动画的 2D/3D 知识图谱与自适应标签
8. 真实的 MCP(模型上下文协议)客户端
MCPServerProcess、MCPManager):把每个配置的服务器作为子进程拉起,通过 stdin/stdout 走initialize → notifications/initialized → tools/list → tools/call握手,由每进程一个读取线程喂入 id 关联的待决 future。LLM.config.json读取,兼容 Claude/Codex 方言(mcpServers/mcp_servers,{command, args, env})与 OpenCode 方言(mcp,{type:"local", command:[argv], environment:{}});remote/sse/http 传输会记录但带提示跳过(仅 stdio)。mcp__<server>__<tool>形式出现,在所有模式与角色(单智能体、manager、explorer、developer、reviewer、plan 模式)下与内置工具行为完全一致,绕过按角色的白名单,并排在所有内置工具之前路由,因此不会被遮蔽。--port + 4(默认 8080 下即 8084),与 IDE UI 无关,带健康监控、崩溃服务器自动重启、磁盘配置变更热重载。该服务通过一组小型 HTTP 接口可达(/mcp/health、/mcp/tools、/mcp/status、/mcp/reload、/mcp/restart、/mcp/call)。mcp-builder技能已重写,讲解真实的线缆协议与两种配置方言,并改为内联源码发布,不再来自嵌入包。9. 端口方案统一
--port递增:agent = P、skills = P+1、rag = P+2、code = P+3、mcp = P+4、ide = P+5。IDE 从旧的固定端口(在默认 8080 下与 mcp 冲突并静默禁用了 MCP 服务)迁出;IDE 与 MCP 的冲突检查现在只统计真正启动的服务,因此被禁用的服务永远不会阻塞其它服务绑定。10. 长期用户记忆:均一而个性化
_user_profile_capsule_prompt_block)在weak与on模式下逐字节相同(相同注入预算),off时为空,且每条用户消息最多注入一次。记忆模式只决定胶囊在构建期的丰富度,绝不决定每轮的开销——因此 off / weak / on 的性能是均一的。on模式下,一次尽力而为的会话后蒸馏读取近期对话,把持久偏好提炼为结构化条目(置信度排在正则捕获之上,但绝不视为确定)。它在既有的后台「会话结束」步骤中运行,处于热路径之外,因此不增加每轮成本。11. 多智能体待办编号统一
N.M编号;单次播种不变式防止两条路径同时创建某步的子任务;写前读的规范回显会把对齐后的清单回写到工具结果里,使 worker 复用既有编号,而不是用自由文本重述工作。12. 对话页预览:用真实浏览器打开 HTML
13. 源码拆分器更新
split_coder.py现在能为每个顶层符号分类:新增mcp/包(mcp/driver.py)容纳 MCP 驱动的类、辅助函数与常量,display / JSON / reasoning 辅助函数也归入各自天然的工具模块。拆分自检通过,零未分类符号。2026-06-22 更新摘要
主题是检索:BM25 加符号精确加权、再加上保留结构的切分,让纯词法召回变得可靠;跨语言查询无需嵌入模型即可工作;书籍可安全导入;智能体能自行记住好的参考。围绕这些,真实的 MCP 客户端让外部工具在各处都成为一等公民,长期记忆做到开销均一而内容个性化,知识图谱在 2D 与 3D 中都实现了带自适应密度剔除标签的完整动画。
日本語
見出し:本当に再現できる語彙のみ RAG、そして本物の MCP と個別化された長期記憶
1. RAG 検索を BM25 + シンボル完全一致ブーストへ(語彙のみ)
TFGraphIDFIndex/CodeGraphIndexの語彙コアを、TF-IDF コサイン(長文を不利にし飽和特性が悪い)から BM25(RAG_BM25_K1=1.5、RAG_BM25_B=0.6)に変更。転置リストは生の出現頻度を保持し、長さ正規化は BM25 の分母が担う。raw/(raw+RAG_BM25_SATURATION=4.0)を採用し、min-max は意図的に使わない。min-max は全弱プールでも最良候補を 1.0 に押し上げ「証拠なし / 最低統合スコア」しきい値を壊すが、飽和は絶対的な関連度を保つため弱いプールは弱いままになる。0.5·(0.85+0.15·rarity))を与え、部分一致は減衰させる。完全な識別子クエリは高精度な意図なので、定義チャンクを安定して再現できる。lexical × 0.80 + graph_bonus + symbol_boost。ナレッジ RAG とコード RAG で完全に同一。2. 構造を保つチャンク化
outer.inner・Class.methodのような階層名を付ける。各チャンクはsymbol/symbol_kindを保持し(以前は破棄されていた)、シンボルブーストから参照できる。_rag_boundary_split)が、過大ブロックの各切断点を最寄りの段落 / 文 / 改行 / 空白の境界へ戻し、境界に揃えたオーバーラップを付ける。従来の文字途中での切断を置き換えた。3. 言語横断のナレッジ検索 —— 埋め込みモデル不要
_augment_query_cross_lingualを使う。cross_lingual=falseにより無効化可能。4.
rag_remember—— エージェント自己取り込みツールrag_remember(text, title?, tags?, category?, source?)。管理画面のテキスト取り込みと同じ重複排除 / 取り込み経路(sha256 重複排除・追加の LLM 呼び出しなし)を再利用し、来歴ヘッダを付ける。write_to_blackboardと同様に explorer / reviewer ロールおよび plan モードの調査でも許可される。5. 書籍級の取り込みを安全に
RAG_MAX_CHUNKS_PER_DOCを 500 から 20000 に引き上げ、統一のRAG_MAX_DOCUMENT_CHARS上限(既定 12M、環境変数AGENT_RAG_MAX_DOCUMENT_CHARS、150k–40M にクランプ)が、PDF / docx / csv / pptx / xls 解析やアップロード再読込に散在していた切り捨てを置き換えた。pdftotextサブプロセスのタイムアウトも同じ解析タイムアウト予算に揃えた。6. バージョン付きインデックススナップショット
bm25-v1形式タグと新フィールドchunk_lengths/avg_chunk_lenを持つ。形式不一致時にはrestore()が復元を拒否し、永続化されたdocuments.json/chunks.jsonという真の出所からインデックスを透過的に再構築する——データ損失も手動移行もなし。7. アニメーション付き 2D/3D ナレッジグラフと適応ラベル
8. 本物の MCP(Model Context Protocol)クライアント
MCPServerProcess、MCPManager)を追加:設定された各サーバーを子プロセスとして起動し、stdin/stdout 越しにinitialize → notifications/initialized → tools/list → tools/callのハンドシェイクを話す。id 対応の保留 future はプロセスごとの読み取りスレッドが供給する。LLM.config.jsonから読み、Claude/Codex 方言(mcpServers/mcp_servers、{command, args, env})と OpenCode 方言(mcp、{type:"local", command:[argv], environment:{}})の両方に対応。remote/sse/http トランスポートは記録するが通知付きでスキップ(stdio のみ)。mcp__<server>__<tool>として現れ、あらゆるモードとロール(単一エージェント、manager、explorer、developer、reviewer、plan モード)で組み込みツールと完全に同じ挙動を取る。ロール別許可リストを迂回し、いかなる組み込みよりも先にルーティングされるため隠れることがない。--port + 4(既定 8080 なら 8084)にマウントされ、IDE UI とは独立で、ヘルス監視・クラッシュサーバーの自動再起動・ディスク設定変更時のホットリロードを備える。小さな HTTP 面(/mcp/health、/mcp/tools、/mcp/status、/mcp/reload、/mcp/restart、/mcp/call)で到達できる。mcp-builderスキルは実際のワイヤープロトコルと両方の設定方言を教えるよう書き直し、埋め込みバンドルからではなくインラインソースとして提供するようにした。9. ポート方式の一貫化
--portに従って増分する:agent = P、skills = P+1、rag = P+2、code = P+3、mcp = P+4、ide = P+5。IDE は旧来の固定ポート(既定 8080 で mcp と衝突し MCP サービスを黙って無効化していた)から移動し、IDE と MCP の衝突チェックは実際に起動したサービスのみを数えるようになったため、無効なサービスが他のバインドを阻むことはない。10. 長期ユーザー記憶:均一でありながら個別化
_user_profile_capsule_prompt_block)はweakとonモードでバイト単位まで同一(同じ注入バジェット)、offでは空、ユーザーメッセージごとに最大一度だけ注入する。記憶モードはカプセルの構築時の豊かさを左右するだけで、各ターンの重さは左右しない——よって off / weak / on で性能は均一。onモードではベストエフォートのセッション後蒸留が直近の会話を読み、持続的な好みを構造化項目として提案する(信頼度は正規表現キャプチャより上位だが確定とは扱わない)。既存のバックグラウンド「セッション終了」ステップで実行され、ホットパス外なのでターン毎コストを増やさない。11. マルチエージェントの ToDo 採番を統一
N.Mを割り当て、単一シード不変条件が二経路による同一ステップのサブタスク二重生成を防ぎ、書き込み前読み取りの正準エコーが調整済みリストをツール結果へ書き戻すので、worker は作業を自由文で言い直さず既存番号を再利用する。12. チャットページのプレビュー:HTML を本物のブラウザで開く
13. ソース分割ツールを更新
split_coder.pyはすべてのトップレベルシンボルを分類するようになった:新しいmcp/パッケージ(mcp/driver.py)が MCP ドライバのクラス・補助関数・定数を収め、display / JSON / reasoning 補助関数はそれぞれ自然なユーティリティモジュールへ振り分けた。分割のセルフチェックは未分類シンボル 0 で通過する。2026-06-22 要約
テーマは検索:BM25 とシンボル完全一致ブースト、そして構造を保つチャンク化により語彙のみの再現が信頼でき、言語横断クエリは埋め込みモデルなしで動き、書籍も安全に取り込め、エージェントは良い参考を自ら記憶できる。その周囲で、本物の MCP クライアントが外部ツールをどこでも一級市民にし、長期記憶はコスト均一でありながら中身は個別化され、ナレッジグラフは 2D・3D の両方で適応的・密度カリング付きラベルとともに完全にアニメーション化された。
This discussion was created from the release Clouds Coder 2026.06.22-Stable.
Beta Was this translation helpful? Give feedback.
All reactions