用途:从当前可见会话中提取可长期保留的项目知识,暂存为 proposal_status: done 的会话日志,并立即运行共享策展尾部流程。全程在宿主内基于实时上下文窗口运行,不启动无头 harness 或守护进程。
路由:用户已知节点时用 /kk-add;当前会话刚产生可教学时刻时用 /kk-session-extract;稍后处理累积日志时用 /kk-curate。
主要步骤:先用检测器解析仓库根目录(含 .ai/kenkeep),并以其为工作目录:KK_REPO_ROOT=$(node .ai/kenkeep/scripts/kk-detect-root.mjs) || exit $?;cd "$KK_REPO_ROOT" || exit $?。读取 .ai/kenkeep/.config/prompts/proposal-extract.md(仓库覆盖),不存在则读包内 templates/prompts/proposal-extract.md。构建角色标记的实时转录替代文本,剥离 <kk-private>…</kk-private> 片段,替换提示中的占位符,按 ProposalOutputSchema 产出 { "practice": [...], "map": [...] },每项仅含 { type, tags, title, description, body, kk_confidence }。若会话仅为元讨论、探索、放弃、无关或无持久教学价值,报告未发现持久知识并停止,不写入。
暂存:有候选时,优先用 harness 的实时 UUID-v4 会话 id;否则用 --generate-session-id 并报告幂等性降级。通过 echo '<json>' | npx kenkeep@latest session-log stage-live --session-id <uuid-v4> 暂存,日志位于 .ai/kenkeep/_sessions/,proposal_status: done,captured_by: manual。
策展:作为该暂存会话的策展者,按 /kk-curate 第 2 步规则为每个候选起草一个 CuratorAction,candidate_origin 为 <session_id>:<practice|map>:<index>。生成 RUN_ID 与临时文件,写入 actions 数组后用 npx --yes kenkeep@latest validate curator-output "$PROPOSALS" 校验,失败则修正重试。随后仅针对该暂存会话调用一次 curate-dedup:npx --yes kenkeep@latest curate-dedup --input "$PROPOSALS" --output "$SURVIVORS" --run-id "$RUN_ID" --session-id "$STAGED_SESSION_ID"。再按 /kk-curate 第 5 步用 curate-persist 持久化幸存动作,运行 npx --yes kenkeep@latest index rebuild,并按第 6b 步执行 rebalance(actions 为空则跳过),最后按第 7 步报告并处理 .ai/kenkeep/conflicts/ 下的冲突。
限制:每次运行仅一次 curate-dedup 且必须带 --session-id;提取为空时不写入;不得削弱 UUID-v4 校验,使用 --generate-session-id 时必须报告幂等性降级;不得启动无头 harness 或后台 worker。若发生压缩,可见上下文可能不完整,应描述为可见上下文提取而非全会话提取,除非运行时暴露完整转录。完成后提示用户审查 .ai/kenkeep/nodes/ 下变更节点并用 git commit 接受。