zcbot/core
caoqianming 7d6109b932 feat(delegate): §8.11 最小子循环——上下文隔离的检索子助手(bump 0.58.30)
触发条件已满足(diag_tool_repeat.py 实测 document_search 122 次地毯搜 /
mp_search 562 次占主上下文大头)。形态 = 一个工具 delegate(instruction):
复用现成 AgentLoop 起空上下文子循环,只注只读/落盘检索白名单,硬轮数上限 20,
固定降 flash 档,跑完只把文字结论返主循环。主循环视角 = 一次普通 tool call
(零并行/零状态共享/深度 1 禁递归)。

对标 Claude Code / Agent SDK subagent:照抄 fresh-context / allowlist 工具 /
只返回最终消息 / maxTurns;有意砍掉并行与嵌套(§6 拒编排),采纳 per-subagent
模型 override 思路(降 flash)。

实现:
- core/delegate.py(新):DELEGATE_ALLOWED 白名单 + FilteredExecutor(包父
  executor 只暴露白名单∩已注册,backend 无关、delegate 不入表天然禁递归)+
  run_delegate(懒加载 AgentLoop 避 litellm 导入/循环 import)
- tools/delegate.py(新):DelegateTool schema 载体,execute 防御性 no-op
- core/loop.py:_run_delegate + _execute_tool_call 内建拦截(拦在 executor 前,
  要读活的 self.llm/caps/executor)+ usage_kind(记账 kind 区分)+
  delegate_model_factory(降档失败降级父模型)+ 内存态子循环禁折叠守卫
  (防 persist_fold 按主 task_id 污染主上下文状态)
- core/session.py:persist=False 内存态(复用主 task_id 计费归主 task、
  消息不入库不污染主流不撞 idx)
- core/agent_builder.py:注册工具 + _delegate_model 工厂(载 deepseek_v4.flash)

落地决策:① 白名单给"落盘检索"(document_download/mp_get_*)写口、不给
write/edit/run_python/shell;② 不引 Redis 抗重启(run 本进程绑定,值钱抓取数据
已落 FS,真要抗重启走 §8.12 bg-proc);③ 未收敛显式标注不当完成。

前端零结构改动(既有工具卡 spinner+跳秒覆盖不冻屏),只加 toolActivityLabel 的
delegate case。skills/brief 加 delegate 引导。tests/test_delegate.py +8
(FilteredExecutor 过滤/拒穿透/交集 + 白名单不变量 + Session persist);loop 全
路径要 litellm 本机跑不了靠生产手验(同 salvage)。DESIGN §8.11 标 。

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-07-15 14:43:04 +08:00
..
sandbox fix(sandbox): pids-limit 256→1024 修容器内 mermaid 渲染必崩(bump 0.58.2) 2026-07-11 09:02:45 +08:00
storage fix(web): 用户停止后补持久「已停止」提示,cancel 落一等终态(bump 0.58.26) 2026-07-15 09:38:54 +08:00
wechat feat(context): §8.8 Phase 2 长会话中段折叠摘要 + 头部压缩指示环(bump 0.54.1) 2026-07-09 12:39:31 +08:00
__init__.py feat(delegate): §8.11 最小子循环——上下文隔离的检索子助手(bump 0.58.30) 2026-07-15 14:43:04 +08:00
agent_builder.py feat(delegate): §8.11 最小子循环——上下文隔离的检索子助手(bump 0.58.30) 2026-07-15 14:43:04 +08:00
ark_client.py feat(media): 第二图像后端 gpt_image(unifyllm 网关,pro 档)(bump 0.58.0) 2026-07-10 20:47:06 +08:00
asr_lfasr.py feat(asr): 录音文件转写工具 transcribe_audio(讯飞 LFASR,bump 0.53.0) 2026-07-08 15:33:14 +08:00
asr_xfyun.py feat(web): 语音输入流式化:边说边出字,松手秒出最终文本(bump 0.49.0) 2026-07-07 15:42:20 +08:00
audio.py feat(wechat): ClawBot 语音接入 + 企微语音路径补日志(bump 0.52.0) 2026-07-08 09:47:22 +08:00
bocha_client.py Add web_search and web_fetch tools via Bocha AI search API 2026-05-25 11:37:33 +08:00
branding.py feat(wecom): 会话冷启动欢迎消息 + 未绑定入站回绑定指引(bump 0.46.0) 2026-07-07 11:11:10 +08:00
capabilities.py feat(loop): 停机判据从"步数"解耦为"是否在推进" 2026-06-10 13:22:02 +08:00
context.py feat(context): §8.8 Phase 2 长会话中段折叠摘要 + 头部压缩指示环(bump 0.54.1) 2026-07-09 12:39:31 +08:00
context_fold.py feat(context): §8.8 Phase 2 长会话中段折叠摘要 + 头部压缩指示环(bump 0.54.1) 2026-07-09 12:39:31 +08:00
delegate.py feat(delegate): §8.11 最小子循环——上下文隔离的检索子助手(bump 0.58.30) 2026-07-15 14:43:04 +08:00
executor.py Stage C Step 1: Executor 接口骨架 + HostExecutor in-process backend 2026-05-26 10:07:55 +08:00
executor_docker.py fix(exec): run_python script_path 宿主预检+前缀容错+code 落盘回退(bump 0.58.22) 2026-07-13 16:41:43 +08:00
executor_host.py fix(loop): 工具调用 arguments 损坏时丢弃重试 + 非流式兜底,断投毒级联 2026-06-06 20:51:45 +08:00
export_docx.py core(0003): name + working_dir + skill schema 重构 + per-user .memory 2026-05-17 19:15:37 +08:00
llm.py feat(procs): 后台进程 bg proc + 对话锁/完成通知 + seedance 续查(bump 0.56.0) 2026-07-10 16:47:11 +08:00
loop.py feat(delegate): §8.11 最小子循环——上下文隔离的检索子助手(bump 0.58.30) 2026-07-15 14:43:04 +08:00
memory.py feat(shortcuts): 加快捷指令(触发词→完整指令,入口层确定性展开)(bump 0.35.0) 2026-07-01 14:58:55 +08:00
model_access.py feat: per-account 模型访问控制(档位制,复用 plan 列)(bump 0.31.0) 2026-06-26 14:11:22 +08:00
paths.py refactor(paths): 砍 ROOT 外路径分支 — 写入入口只接 simple name join workspace 2026-05-20 22:05:32 +08:00
pptx_guard.py fix(guard): ppt 伪导出根治三层——平台机检门 + 禁令去菜谱 + 脚本 hint 纪律(bump 0.40.0) 2026-07-06 13:40:54 +08:00
probe.py Phase 4 + 6: capability probe + task 概念 / state.json 2026-05-06 16:21:17 +08:00
proc_wrapper.py feat(procs): 后台进程 bg proc + 对话锁/完成通知 + seedance 续查(bump 0.56.0) 2026-07-10 16:47:11 +08:00
procs.py feat(procs): 后台进程 bg proc + 对话锁/完成通知 + seedance 续查(bump 0.56.0) 2026-07-10 16:47:11 +08:00
salvage.py feat(loop): 畸形 tool_call arguments 就地抢救(salvage)省一次非流式重试(bump 0.58.24) 2026-07-15 09:20:38 +08:00
scheduler.py feat(scheduler): 定时任务默认单次超时 0→1800s(bump 0.32.4) 2026-06-29 14:52:09 +08:00
session.py feat(delegate): §8.11 最小子循环——上下文隔离的检索子助手(bump 0.58.30) 2026-07-15 14:43:04 +08:00
shortcuts.py feat(shortcuts): 加快捷指令(触发词→完整指令,入口层确定性展开)(bump 0.35.0) 2026-07-01 14:58:55 +08:00
sinks.py fix(usage): 顶栏 token 累计修 — sync_task_tokens 改走 messages SUM,删 LLM.TokenCounter 2026-05-21 13:39:57 +08:00
skills.py feat(skill): skill 定向模型——ppt 触发自动热切 GLM-5.2(bump 0.39.0) 2026-07-06 08:57:32 +08:00
task.py feat(media): 接入豆包 Seedream 5.0 图像生成 tool + 0007 cost_usd→cost_cny 全表统一币种 2026-05-20 15:20:34 +08:00
toolfail.py feat(ops+web): run 级错误持久提示+失败聚集+provider 致命错误即时告警(bump 0.58.21) 2026-07-13 14:06:29 +08:00
ui.py core/ui: 抽出语义化 console 主题, 调用方去硬编码颜色 2026-05-07 16:10:11 +08:00