From 057fbfc05c1d77543aee38535ca40a011db741b6 Mon Sep 17 00:00:00 2001 From: ymq Date: Thu, 10 Sep 2026 17:43:34 +0800 Subject: [PATCH] =?UTF-8?q?docs:=20README=20=E8=A1=A5=20Hermes=20=E8=83=BD?= =?UTF-8?q?=E5=8A=9B=E5=AF=B9=E9=BD=90=E5=9B=9B=E9=A1=B9(memory/manage=5Fs?= =?UTF-8?q?kill/=E5=90=8E=E5=8F=B0=E8=BF=9B=E7=A8=8B/=E5=B9=B6=E8=A1=8C?= =?UTF-8?q?=E5=A7=94=E6=B4=BE)=E5=AE=9E=E7=8E=B0=E8=AF=B4=E6=98=8E?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- README.md | 35 +++++++++++++++++++++++++++++++++++ 1 file changed, 35 insertions(+) diff --git a/README.md b/README.md index cc1c92a..1bfc2b1 100644 --- a/README.md +++ b/README.md @@ -44,6 +44,9 @@ cd pkgs/pipeline-service && pip install . | `agent_loop_v2.py` | Agent Executor v2(会话 agent 执行引擎) | | `workspace.py` | 项目/通用会话工作空间目录管理 | | `sdlc_ability.py` | SDLC 产线能力包(工具定义 + handler) | +| `skill_live.py` | 技能实时发布/管理(publish_skill_live + manage_skill_live 多租户隔离) | +| `bg_jobs.py` | run_command 后台任务(状态文件化 .bg/,跨 worker 可见) | +| `subagents.py` | 后台并行子 agent 委派(.sub/,spawn/steer/stop/result) | ## 通用会话产线隔离(2026-09-05,7 层纵深防御) @@ -63,3 +66,35 @@ cd pkgs/pipeline-service && pip install . 7. **历史回放**:_load_history / _t_session_search 对 generic 只读写 `pipeline_id='' OR IS NULL` 的自身历史(与存库端 store_pl='' 对称), 禁止按 created_by 全量回放(会带出用户各产线对话中的项目信息) + +## Hermes 能力对齐:写入侧 + 运行时侧(2026-09-10) + +四个 handler 在 `agent_loop_v2.py`,工具定义在 pipeline-core `agent_config.py` +(GENERAL_TOOLS)。全部经测试机服务端直调 31/31 + HTTP 端到端 5/5 实测通过。 + +### 1. memory 工具(持久记忆写入,`_t_memory`) +- 写入门禁(代码强制,多机构多用户):scope 白名单 user/project/pipeline, + global/org 种子域禁写;org_id/user_id 强制注入会话真实身份(忽略 LLM 传值); + 无 user_id(无人值守)拒写;remove 只能删本人条目(org+user 双过滤)。 +- 记忆注入改可见性版(`_build_system_prompt` 传 org_id/user_id → store.visible_to + 过滤),修了旧「按域叠加」会带出他机构归属记忆的隐患。 + +### 2. manage_skill 工具(技能增改删,`skill_live.manage_skill_live`) +- 五动作 create/patch/write_file/remove_file/delete,隔离全在 skill_live: + 只落本租户 orgs/{org}(org≠0)或 users/{uid}(org 0 降级/个人); +- **fork-on-write**:改 global 原版先整目录继承拷贝到本租户再改(同名覆盖仅本租户 + 生效);**校验通过才 fork**(旧「先 fork 后校验」失败会留副本遮蔽原版,已修); +- org+user 双副本同步改(user 遮蔽 org,防改了被遮蔽那份);产线/角色/项目层拒改; + delete 只删本租户副本(global 删不到,删后重新可见);子文件限四目录 + realpath 双检。 + +### 3. run_command background + process 工具(`bg_jobs.py`,`_t_run_command`/`_t_process`) +- 状态文件化 workspace/.bg/{job_id}/(meta.json+output.log),跨 worker/进程可见; +- 沙箱档位与前台一致(generic 强制 strict bwrap,无 bwrap 拒绝,绝不降级裸 shell); +- start_new_session 独立进程组 + 超时 SIGTERM 整组(不留孤儿);心跳 stale 判活。 + +### 4. delegate_subtask background + subagent 工具(`subagents.py`,`_t_delegate_subtask`/`_t_subagent`) +- 后台并行(同 workspace 上限 3),状态文件化 .sub/{sid}/;深度限制 1(子禁再委派); +- 子会话 session_isolation='none':不读父历史、不写 pipeline_conversations(防污染回放); +- steer/stop 走文件传递,子 agent 每轮 tool-loop 边界 `subagents.heartbeat` 消费; + result.txt 流式落盘,stop/崩溃即部分结果(绝不空手)。 +