# NAS共享知识库记忆治理 — Kestra 接管方案

更新时间：2026-06-02
负责人 profile：meow-chan / IT 协调
状态：完整接管方案草案，尚未切换生产调度

## 1. 当前已核对的现状

现有 Hermes cron 链共有 3 个任务：

| 阶段 | 现有 cron job | 频率 | 脚本 | 当前状态 |
|---|---|---:|---|---|
| 采集 + 审批包创建 | `f859bdb12387` NAS共享知识库每日事实基础候选汇总-三人审批门禁 | `0 8 * * *` | `nas_kb_profile_collect.py` | enabled / last ok |
| 审批结果监控 + NAS 合并执行 | `a3d332a1d4b8` NAS共享知识库审批结果监控与合并执行 | `every 10m` | `nas_kb_approval_queue_status.py` | enabled / last ok |
| NAS 写入后 profile 记忆瘦身 | `388e37df5449` NAS共享知识库写入后profile记忆自动瘦身 | `every 30m` | `profile_memory_cleanup_after_nas.py` | enabled / no_agent / last ok |

本地 Kestra POC 已核对：

- Kestra UI/API：`http://127.0.0.1:18080/ui/` 可访问；API 未带认证会返回 401，说明 Basic Auth 仍在。
- POC bridge：`http://127.0.0.1:19091/health` 可访问。
- 项目路径：`/Users/bot1/Volumes/root_for_ai/AI工作区/通用_多Agent编排_Kestra评估POC_20260602_2208`。

## 2. 接管目标

把“采集其他 profile 记忆/事实候选 → 生成审批包 → 发三人审批 → 监控审批 → 批准后写 NAS 共享知识库 → 按审批包精确瘦身 profile MEMORY.md”的链路，从 Hermes cron 分散调度，改为 Kestra 可视化调度与审计。

Kestra 的角色只限于：

1. 调度、状态机、重试、执行 UI、审计历史；
2. 调用受控 Bridge v1 的固定任务 key；
3. 展示每个阶段的结构化结果。

Kestra 不直接承担：

- Hermes 治理规则 / Skills / 用户意图解释；
- 任意 shell 命令执行；
- 任意 prompt 直通；
- 直接 NAS 写入；
- 直接修改 Hermes profile config/skills/gateway/LaunchAgent；
- 绕过三人审批和 NAS 写入边界。

## 3. 推荐接管架构

```text
Kestra schedules / manual execution
  -> POST http://host.docker.internal:19092/v1/nas-kb/run
  -> Host-side Bridge v1 validates token + task_key + request_id
  -> Fixed wrappers:
       A. collect + meow-chan curation/approval creation
       B. approval status + approved NAS merge
       C. post-NAS profile MEMORY.md cleanup
  -> Bridge redacts/truncates output, returns JSON
  -> Kestra stores execution history
```

Bridge v1 新增端口建议使用 `19092`，避免碰 POC bridge `19091`。

## 4. Flow 拆分

### Flow 1：`studio.nas_kb_memory_governance.daily_collect_approval`

触发：每天 08:00 Asia/Shanghai。

任务：

1. `preflight`：检查 bridge、脚本、队列目录、Feishu env key 是否存在（只报告 present/missing，不打印值）。
2. `daily_collect_and_create_approval`：
   - 运行 `nas_kb_profile_collect.py` 只读采集各 profile 候选；
   - 把采集 JSON 保存到本地 state；
   - 固定 brief 调用 `hermes --profile meow-chan` 复核、去重、生成审批包、生成 memory cleanup preview、发布 HTML 审批详情、发 Feishu 三人审批；
   - 此阶段不写 NAS。

### Flow 2：`studio.nas_kb_memory_governance.approval_monitor_merge`

触发：每 10 分钟。

任务：

1. `approval_monitor_and_merge`：
   - 运行 `nas_kb_approval_queue_status.py`；
   - 若无待处理包，静默返回 no-op；
   - 若有审批终态，固定 brief 调用 `meow-chan` 处理：
     - APPROVED：仅当审批包列明精确 NAS 目标路径、操作类型、覆盖/删除/移动风险，并确认三人全部通过后，执行批准范围内的 NAS 合并；
     - REJECTED/CANCELED/DELETED：记录状态，不写 NAS，必要时生成修订建议。
2. `memory_cleanup_auto_apply`：批准包 NAS 写入完成后，运行 `profile_memory_cleanup_after_nas.py --auto-apply-approved`，只替换审批包预授权、hash 未变的 `MEMORY.md` 条目。

### Flow 3：`studio.nas_kb_memory_governance.memory_cleanup_fallback`

触发：每 30 分钟。

作用：保留 no-agent 风格兜底，防止某次 NAS 写入后 cleanup 未执行。无变化时 stdout 为空/返回 no-op。

### Flow 4：`studio.nas_kb_memory_governance.preflight_status`

触发：手动。

作用：上线前/故障时检查 Kestra → Bridge → 本机脚本/队列/Feishu env present 状态，不触发采集、不发审批、不写 NAS。

## 5. 本批产物

- `runtime/scripts/kestra_nas_kb_bridge_v1.py`：Bridge v1 脚本，固定 task_key allowlist，无自由 shell。
- `runtime/briefs/nas_kb_daily_collect_and_create_approval.md`：每日采集审批 fixed brief。
- `runtime/briefs/nas_kb_approval_monitor_and_merge.md`：审批监控/NAS 合并 fixed brief。
- `runtime/flows/nas_kb_daily_collect_approval.yml`：每日采集与发审批 flow。
- `runtime/flows/nas_kb_approval_monitor_merge.yml`：审批监控与合并 flow。
- `runtime/flows/nas_kb_memory_cleanup_fallback.yml`：记忆瘦身兜底 flow。
- `runtime/flows/nas_kb_preflight_status.yml`：手动预检 flow。
- `runtime/kestra_nas_kb_takeover_RUNBOOK.md`：启动、部署、切换、回滚步骤。

## 6. 切换策略

### 阶段 A：部署 Bridge v1 与 Flow，但不暂停现有 cron

1. 启动 Bridge v1 监听 `127.0.0.1:19092`。
2. 把 4 个 flow 部署到 Kestra。
3. 只运行 `preflight_status`。
4. 手动运行 `memory_cleanup_fallback`，确认无变化时不扰民。

### 阶段 B：影子运行

1. 手动触发 `daily_collect_approval` 一次，但可先临时设 `dry_run=true` 或在 brief 内要求只生成草稿不发审批。
2. 核对生成包、HTML、Feishu审批行为是否与 cron 旧链一致。
3. 监控 `approval_monitor_merge` 只读状态，确认不会误写 NAS。

### 阶段 C：正式接管（需要用户再次确认）

正式切换前必须再次确认以下操作：

- 暂停 Hermes cron job：`f859bdb12387`、`a3d332a1d4b8`、`388e37df5449`；
- 启用 Kestra 三个 schedule flow；
- 确认 Kestra/Bridge token、日志保留、Basic Auth、端口只在本机/内网；
- 保留回滚路径：恢复三个 Hermes cron job。

## 7. 安全边界

1. `03_用户资料` 绝对只读，不在本流程中写入。
2. NAS 共享知识库写入只发生在三人审批 APPROVED 且审批包列明精确目标/操作/风险之后。
3. profile MEMORY 瘦身只改 `/Users/bot1/.hermes/profiles/<profile>/memories/MEMORY.md`，只替换计划中 hash 未变的 exact entries，先备份。
4. Bridge 不接受任意命令、任意 prompt、任意路径。
5. Kestra Flow YAML 不写 secrets；Bridge token 使用 Kestra secret/env 注入。
6. 任何切换/暂停 cron/改常驻服务都需要用户二次确认。
