huanxi 插件的技能内容从 v1 全面替换为 v2(huanxi-org/huanxi-weekly 等 v1 专属技能下线,新增 huanxi-issue/huanxi-lookup/huanxi-meeting),MCP 连接与 Token 获取方式同步更新为个人中心自助生成。 新增独立的 huanxi-admin 插件(管理端 4 个技能,hxa_ Token,普通员工无需 安装),此前一直卡在"v2 未部署到生产域名前不推送"这条约束,今晚寰汐 v1.0.0 生产切换完成后条件满足。 产物由 huanxi-menagement 仓库 skills/sync_marketplace.py 生成,技能源码 单一真相在该仓库的 skills/,本仓库只接收产物、不手工编辑。 Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_018xxRKMuiGR4wYT3QbwCpDc
4.0 KiB
name, description
| name | description |
|---|---|
| huanxi-admin-shared | 寰汐管理端 MCP 共享基础:管理身份语义、高危操作边界、缓存策略、状态两层模型、人员查询。所有 huanxi-admin-* 技能必须先读本文件。 |
寰汐管理端 · 共享规则
所有 huanxi-admin-* 技能的必读前置。本技能族用的是管理端 Token(hxa_),
与个人端(hxp_)是两条独立通道,工具集不同、视角不同。
你是以谁的身份在操作
管理端 Token 不绑定业务用户,执行时以 Token 创建人的管理员身份进行,
所有写操作按该身份记入审计。whoami 回答「我现在代表谁」。
创建人若已停用或被撤销后台权限,Token 会一并失效——这不是 bug,是随人事变动收回权限。
视角是全量的:模块、任务、汇报都不受「我参不参与」过滤。这是与个人端最大的差别, 也意味着你看到的东西大多不是你自己的,措辞上要注意(说「张三的日报」而不是「你的日报」)。
高危操作不在本端点
账号启停、授予/撤销管理员与老板身份、通讯录全量同步、各类删除、状态选项与标签等 字典的写操作——全部走网页后台。
理由不是「危险所以不给」,而是网页后台有确认弹窗与完整的操作上下文,MCP 通道没有 等价的「让人看清楚再点」环节。用户提这类需求时,直接告诉他去后台哪个页面, 不要试图用别的工具绕过去。
参数以工具自身的说明为准
本文档与各技能都不重画参数表。参数名、必填项、取值范围以工具在 MCP 里注册的 docstring 为唯一真相;技能只描述调用顺序、ID 如何传递、哪里必须停下来等用户确认。
工具名在 Claude 客户端里带前缀 mcp__huanxi-admin__,其他平台按各自约定;
本文档统一写裸名。
状态是可配置的两层模型
不要硬编码状态字面量。 分两层:
category:四类固定语义not_started/in_progress/completed/cancelled,用于判断status_option_id:具体状态项的 UUID,用于写入
改状态前先 dict_get 取对应 entity_type(module/task/issue/meeting,必须选对)
下的选项。字典本身的增删改不在本端点。
人员查询
user_query(q?, ids?, status?, has_backend_permission?)
组织架构树(
org_tree)已随 M16 身份体系替换下线——公司改用蚁熊通行证, 它不提供部门信息。
user_query 比个人端多两个维度:status(active 在职 / observation 交接观察期 /
inactive 已停用)与 has_backend_permission。用于盘点「谁在观察期」「谁有后台权限」。
只读——账号启停与权限授予见上文。
缓存
缓存根 ~/.claude/huanxi-cache/,管理端用 admin/ 子目录,与个人端隔离——
两边看到的模块范围不同,混用会把不该展示的内容展示出去。
| 类别 | 策略 |
|---|---|
身份 admin/me.json |
永久 |
配置字典 dict/*.json |
dict_version 比对 + 24h 兜底 |
人员与模块 admin/all-modules.json |
24h |
工作日 dict/workdays.json |
按日期 key 永久 |
| 业务数据(汇报/任务/会议/议题) | 一律不缓存 |
字典为什么不能只靠 TTL:状态选项可能被停用,拿过期 ID 去写会直接报错——
失败方向是「操作失败」而非「看到旧数据」,值得比对一次。dict_get 的返回自带
versions 字段,连内容一起存即可,不要分两次调。
全局约定
- 有副作用的写操作先确认:
module_set_members(替换语义,会移除名单外的人)、module_update切「已取消」(级联取消该模块全部未完成任务并通知成员)。 - 盘点类查询直接给结论:用户问「谁没交」,答案是名单,不是让他自己看原始数据。
- 先解析 ID 再操作,不要凭名字猜。