wecom-current-employee-registration.md 6.0 KB

当前消息直接登记接口 · 隔离准备件

本件交运维001做隔离合并和 Linux 测试,不是安装授权。王刚001继续等待。接口只登记本地员工档案,不创建会话、员工登录账号或业务记录;后续真实消息验收仍需单实例安装窗口。

调用链与边界

模型调用无参数工具 ksf_register_current_employee → Python handler 直接调用 identity_bridge.current_identity() → 读取维护人配置并核对 botId 指纹 → 私有 stdin 管道调用 Node 档案代码 → 返回脱敏的员工档案键及 Agent 档案键。

身份字段不经过模型转述;模型不能通过工具参数替换 botId、senderId、messageId 或路径。查询工具 wecom_identity_current 可保留作诊断,但不用它的输出生成登记 JSON。

内部 Node worker 复用 registerChannelParticipant,因此键算法、员工标签、幂等规则和账号快照与现有 Skill 一致。旧 register-channel-employee 的所有形式均已禁用;register-employee 也不接受 channel_context 或 aibot 账号。role=operations 不允许走课堂员工登记。

保证范围:工具正常调用链不接受模型指定身份。私有 stdin 不是认证协议;文件权限、维护人配置与进程内上下文不能隔离任意同 UID 代码执行。自由终端若可改插件/档案,仍有相同 UID 的权限边界限制。本件不宣称抵御该能力,也不把服务端的 scope/来源字段一致性检查称为独立企微验真。

合并位置(本轮只在隔离副本)

  1. integrations/wecom-identity/workshop_registration.py 对应平台包 plugins/platforms/wecom/workshop_registration.py。
  2. integrations/wecom-identity/init.py 是组合插件入口,替换 v3 的 plugin/wecom-identity/init.py;一次注册查询与登记两个工具。沿用 v3 的 plugin.yaml,但描述可补登记能力。
  3. Skill 新增 scripts/ksf-identity-bridge.mjs;其余更新按 Skill FILES.sha256 十项核对。scripts/install-workshop-skill.mjs 支持原工作坊、旧双槽、通用登记和已发 aibot 包的已知基线;保留凭据绑定与状态。不要在本轮执行安装器。
  4. 维护人配置将来放在 HERMES_HOME/plugins/wecom-identity/registration.json,0600、当前网关属主、路径不能含软链接。仅含 version、agentProfileKey、botIdSha256,示例 null 故意不可运行,不能原样安装。
  5. agentProfileKey 必须是维护人确认的 agent-account:完整摘要;对应档案须有真实 botId、channel/account.platform=wecom、role=workshop。名称“王刚001”由维护人确认关联,不能由聊天/包名推导。botIdSha256 使用真实 botId 原始 UTF-8、无盐、小写完整 SHA-256;不要写 secret。

王刚001尚无可信稳定账号档案时,维护人先按核实的 bot 账号与名称建立 Agent 档案,再取返回键配置。不得凭模板填写或把运维001档案用于王刚001。当前未知实际宿主映射,准备件不写入任何真实配置或身份档案。

接口契约

工具名:ksf_register_current_employee。参数必须为空对象;任何非空对象或其他类型都返回 NO_ARGUMENTS_ALLOWED,不读取身份、不写档案。

成功结果含 ok=true、operation=current-employee-registered、invocationId、changed、profile.key/name/identityBasis、agentProfileKey、needsNameBinding、currentMessageChecked=true;accountAuthenticated=false、displayNameAuthenticated=false、networkRequests=databaseWrites=0。无真实姓名时为员工待绑定标签。

失败结果只给固定错误码;不输出原始异常、worker stderr、配置或账号。worker 报失败时不自动重试、不自动删已写档案,先保留现场核对。即使回执校验失败,也不能由失败回执推断零本地写入。

Node 内部请求形状:version=ksf.current-employee-registration.v1、agentProfileKey、identity(原六字段)。worker 不接 argv 参数,stdin 上限16KiB;身份来源检查由进程内 handler 完成,worker 只检查结构、Agent 角色和 bot 作用域,不把自身单独当成可信自动登记命令。

合并前先修 v3 的实例清理

v3 sweep() 枚举所有 .json,instance.json 只在 adapter 初始化写一次;超过六小时后新消息触发 sweep,即删除实例登记,后续工具报 INSTANCE_REGISTRY_MISSING。

建议仅清理文件名匹配完整 64 hex + .json 的消息文件,临时文件另按既定规则处理;实例文件单独存放或明确排除。测试把 instance.json 调旧、保留一条旧消息文件,再写入新消息,确认旧消息清掉而实例仍在,随后桥可读取身份。不用重启或每条消息重写实例来掩盖问题。

实例文件0600也不能证明“不可被同 UID 改写”。先限定单个 HERMES_HOME 对应一个活动 aibot 适配器;未来多 bot 同目录需改实例作用域,不能继续使用共享 instance.json。

隔离验证

在包根,Node 检查:node --test test/workshop-identity.test.js。

Linux Python 检查:将 KSF_ADAPTER_REVIEW_ROOT 指向解压的 v3/修订后补丁根目录,再运行 python3 test/workshop-registration.test.py。本测试用合成 ContextVar 与模拟原始文件读取,真实执行 Python→Node→临时档案,不需要服务凭据、不联网。它不替代 Hermes 真实 handler 的 ContextVar 继承或 POSIX 权限验收。

补丁自己的五套 Linux 测试仍需在修订副本重跑;清理回归、同一份 ContextVar 映射下真正重叠线程、组合插件加载两个工具应另行覆盖。v3 现有线程测试在每次 start 后立即 join,并非并发重叠。请给当前 0.21.3 的 _VAR_MAP/_UNSET 定义、设置/清理与 register_tool/handler 调用的最小源码和指纹,用于核对替身是否等同实际接口,不需要配置原文。

两边隔离测试与代码核对通过后再交单实例安装计划,安排真实消息验收与已暴露 secret 的受控轮换。服务端两个身份函数是否已升级仍需独立回读;本件没有部署它们,不将之前只读预检当上线。