docs: 编写NapCatQQ自动化实施计划

This commit is contained in:
sunlei 2026-06-24 22:53:38 +08:00
parent 18a74582f1
commit e6bc9e056e
2 changed files with 1654 additions and 0 deletions

View File

@ -0,0 +1,618 @@
# NapCatQQ 上游同步与运行时发布流水线实施计划
> **For agentic workers:** REQUIRED SUB-SKILL: Use superpowers:subagent-driven-development (recommended) or superpowers:executing-plans to implement this plan task-by-task. Steps use checkbox (`- [ ]`) syntax for tracking.
**Goal:** 把 NapCatQQ 上游 release 审计、Codex CLI 辅助审查、KT 派生运行时镜像构建、API 显式参数推广全部收敛到可验证的 ktWorkflow 自动化链路。
**Architecture:** `mcp/ktWorkflow` 作为自动化控制面负责确定性采集器、提示词、schema 校验、Codex CLI runner、artifact 归档、MCP tools 和 Jenkins/systemd 命令入口。API 仓库只负责运行时镜像构建契约和部署参数消费Jenkins/NAS 定时器只调用 ktWorkflow不复制审计算法。
**Tech Stack:** TypeScript ESM、MCP SDK、zod、Node `child_process`、Codex CLI `exec`、Jenkins Pipeline、Docker、K8s、NestJS API runtime config、Jest。
---
## 文件结构
### `D:\MyFiles\KT\mcp\ktWorkflow`
- 新增 `prompts/napcat/upstream-audit.md`:上游 release 风险分类提示词。
- 新增 `prompts/napcat/sync-candidate-review.md`:候选分支审查提示词。
- 新增 `prompts/napcat/runtime-release-readiness.md`:运行时镜像发布就绪审查提示词。
- 新增 `prompts/napcat/remote-dev-handoff.md`NAS 远程开发交接提示词。
- 新增 `prompts/napcat/schemas/upstream-audit.schema.json``codex exec --output-schema` 使用的 JSON Schema。
- 新增 `prompts/napcat/schemas/runtime-release-readiness.schema.json`:运行时发布就绪报告 schema。
- 新增 `src/tools/napcatAutomation.types.ts`zod schema、输入输出类型、分类和 reason code 常量。
- 新增 `src/tools/napcatAutomation.prompts.ts`:提示词路径解析和读取。
- 新增 `src/tools/napcatAutomation.ts`确定性采集器、Codex runner、artifact writer、MCP/CLI builder。
- 修改 `src/types.ts`、`src/core/cli.ts`、`src/registerTools.ts`、`src/server.ts`、`src/core/constants.ts`、`src/selfTest.ts`、`package.json`、`README.md`。
### `D:\MyFiles\KT\Node\kt-template-online-api`
- 修改 `scripts/napcat-desktop-cn-stage-build.mjs`:写入 upstream release、base image digest、Jenkins URL 等 marker。
- 修改 `test/modules/qqbot/napcat/napcat-desktop-cn-image.spec.ts`:覆盖 marker 与默认镜像契约。
- 新增 `test/modules/qqbot/napcat/napcat-runtime-promotion.spec.ts`:覆盖 Jenkins/K8s runtime override。
- 修改 `Jenkinsfile`:增加 `QQBOT_NAPCAT_IMAGE_OVERRIDE``QQBOT_NAPCAT_DESKTOP_PROFILE_VERSION_OVERRIDE`
- 修改 `k8s/prod/api.yaml`:保留安全默认值,由 Jenkins 在发布时显式覆盖。
- 修改 `README.md`、`API.md`:记录发布和回滚契约。
### `D:\MyFiles\KT\GitHub\NapCatQQ`
- 新增 `ci/kt-runtime-release.md`KT 运行时发布清单。
- 本计划不改 NapCat 登录源码;如果上游同步撞到登录 hot zone另起 NapCatQQ 专项计划。
### `D:\MyFiles\KT`
- 修改 `TASKS.md`:记录实施结果和验证证据。
---
### Task 1ktWorkflow NapCat 自动化契约
**Files:**
- Create: `D:\MyFiles\KT\mcp\ktWorkflow\src\tools\napcatAutomation.types.ts`
- Create: `D:\MyFiles\KT\mcp\ktWorkflow\prompts\napcat\schemas\upstream-audit.schema.json`
- Create: `D:\MyFiles\KT\mcp\ktWorkflow\prompts\napcat\schemas\runtime-release-readiness.schema.json`
- Modify: `D:\MyFiles\KT\mcp\ktWorkflow\src\selfTest.ts`
- [ ] **Step 1先写 RED self-test**
覆盖三件事:`manual-review` 分类能被解析、`HOT_ZONE_CHANGED` reason code 存在、`upstreamAuditOutputSchema` 能校验最小输出。
```ts
import {
napcatAutomationReasonCodes,
parseNapcatAutomationClassification,
upstreamAuditOutputSchema,
} from './tools/napcatAutomation.types.js';
const napcatAuditSchemaSmoke = upstreamAuditOutputSchema.safeParse({
classification: 'manual-review',
reasonCodes: ['HOT_ZONE_CHANGED'],
recommendedAction: 'request-human-review',
summary: 'Login hot-zone changed.',
});
if (!napcatAuditSchemaSmoke.success) {
throw new Error('NapCat upstream audit schema self-check failed');
}
if (!napcatAutomationReasonCodes.includes('HOT_ZONE_CHANGED')) {
throw new Error('NapCat reason-code list self-check failed');
}
if (parseNapcatAutomationClassification('manual-review') !== 'manual-review') {
throw new Error('NapCat classification parser self-check failed');
}
```
- [ ] **Step 2确认 RED**
```powershell
pnpm --dir D:\MyFiles\KT\mcp\ktWorkflow run self-test
```
预期:因为 `napcatAutomation.types.js` 不存在而失败。
- [ ] **Step 3实现类型与 zod schema**
实现 `safe-candidate`、`manual-review`、`blocked` 三类分类,以及 `NO_UPSTREAM_CHANGE`、`HOT_ZONE_CHANGED`、`FORK_PATCH_OVERLAP`、`DRY_MERGE_CONFLICT`、`BUILD_GRAPH_CHANGED`、`METADATA_UNAVAILABLE`、`CODEX_SCHEMA_INVALID` 七个 reason code。新增函数必须写 JSDoc参数说明要解释来源和约束。
- [ ] **Step 4写 Codex CLI JSON Schema**
`upstream-audit.schema.json` 必须要求 `classification`、`reasonCodes`、`recommendedAction`、`summary`,并禁止额外字段;`runtime-release-readiness.schema.json` 必须要求 `sourceValidation`、`imageValidation`、`apiPromotionReadiness`、`onlineSmokeReadiness`、`rollbackPointer`。
- [ ] **Step 5确认 GREEN**
```powershell
pnpm --dir D:\MyFiles\KT\mcp\ktWorkflow run self-test
pnpm --dir D:\MyFiles\KT\mcp\ktWorkflow run typecheck
```
- [ ] **Step 6提交**
```powershell
git -C D:\MyFiles\KT\mcp\ktWorkflow add prompts/napcat src/tools/napcatAutomation.types.ts src/selfTest.ts
git -C D:\MyFiles\KT\mcp\ktWorkflow commit -m "feat: 定义NapCat自动化审计契约"
```
---
### Task 2ktWorkflow 提示词包与安全读取器
**Files:**
- Create: `D:\MyFiles\KT\mcp\ktWorkflow\prompts\napcat\upstream-audit.md`
- Create: `D:\MyFiles\KT\mcp\ktWorkflow\prompts\napcat\sync-candidate-review.md`
- Create: `D:\MyFiles\KT\mcp\ktWorkflow\prompts\napcat\runtime-release-readiness.md`
- Create: `D:\MyFiles\KT\mcp\ktWorkflow\prompts\napcat\remote-dev-handoff.md`
- Create: `D:\MyFiles\KT\mcp\ktWorkflow\src\tools\napcatAutomation.prompts.ts`
- Modify: `D:\MyFiles\KT\mcp\ktWorkflow\src\selfTest.ts`
- [ ] **Step 1先写 RED self-test**
self-test 遍历所有提示词,要求每个 prompt 都包含安全边界:
```md
Do not edit files.
Do not run merge, commit, push, deploy, or Docker mutation commands.
Use only the supplied context packet.
Return JSON that matches the requested schema.
```
- [ ] **Step 2确认 RED**
```powershell
pnpm --dir D:\MyFiles\KT\mcp\ktWorkflow run self-test
```
- [ ] **Step 3实现 prompt loader**
`loadNapcatAutomationPrompt(name)` 只允许读取 `prompts/napcat/${name}.md` 中的固定 prompt 名称,不能接受任意路径。函数必须有 JSDoc说明 `name` 来自稳定枚举,不是用户文件路径。
- [ ] **Step 4写四份提示词**
四份 prompt 分别服务:
- `upstream-audit.md`:只基于 context packet 做 release 风险分类。
- `sync-candidate-review.md`:审查示例候选分支 `kt/sync/v4.8.0`重点看登录态、二维码、WebUI auth、captcha/new-device。
- `runtime-release-readiness.md`拆开源码验证、镜像验证、API 推广、线上 smoke、回滚点。
- `remote-dev-handoff.md`:输出 NAS 远程开发交接,不让 Codex 自动改代码。
- [ ] **Step 5确认 GREEN**
```powershell
pnpm --dir D:\MyFiles\KT\mcp\ktWorkflow run self-test
pnpm --dir D:\MyFiles\KT\mcp\ktWorkflow run typecheck
```
- [ ] **Step 6提交**
```powershell
git -C D:\MyFiles\KT\mcp\ktWorkflow add prompts/napcat src/tools/napcatAutomation.prompts.ts src/selfTest.ts
git -C D:\MyFiles\KT\mcp\ktWorkflow commit -m "feat: 增加NapCat自动化提示词包"
```
---
### Task 3确定性上游审计采集器
**Files:**
- Create: `D:\MyFiles\KT\mcp\ktWorkflow\src\tools\napcatAutomation.ts`
- Modify: `D:\MyFiles\KT\mcp\ktWorkflow\src\tools\napcatAutomation.types.ts`
- Modify: `D:\MyFiles\KT\mcp\ktWorkflow\src\selfTest.ts`
- [ ] **Step 1先写 hot-zone RED self-test**
构造上游和 KT patch 同时命中 `packages/napcat-core/login/runtime.ts` 的输入,要求分类为 `manual-review`reasonCodes 包含 `HOT_ZONE_CHANGED`
- [ ] **Step 2确认 RED**
```powershell
pnpm --dir D:\MyFiles\KT\mcp\ktWorkflow run self-test
```
- [ ] **Step 3实现 hot-zone 分类器**
分类规则:
- dry merge 冲突 -> `blocked` + `DRY_MERGE_CONFLICT`
- 上游命中登录/二维码/WebUI/auth/OneBot/build hot zone -> `manual-review`
- 上游文件与 KT fork patch 文件重叠 -> `manual-review`
- 无 hot-zone、无重叠、无冲突 -> `safe-candidate`
- [ ] **Step 4生成只读审计命令**
`buildNapcatUpstreamAudit(execute=false)` 只能生成只读命令:`git fetch`、`git diff --name-only`、`git merge-tree`、`git range-diff`。不能包含 `git merge`、`git push`、`docker build`、`kubectl`。
- [ ] **Step 5确认 GREEN**
```powershell
pnpm --dir D:\MyFiles\KT\mcp\ktWorkflow run self-test
pnpm --dir D:\MyFiles\KT\mcp\ktWorkflow run typecheck
```
- [ ] **Step 6提交**
```powershell
git -C D:\MyFiles\KT\mcp\ktWorkflow add src/tools/napcatAutomation.ts src/tools/napcatAutomation.types.ts src/selfTest.ts
git -C D:\MyFiles\KT\mcp\ktWorkflow commit -m "feat: 增加NapCat上游审计采集器"
```
---
### Task 4Codex CLI Runner 与 Artifact 捕获
**Files:**
- Modify: `D:\MyFiles\KT\mcp\ktWorkflow\src\tools\napcatAutomation.ts`
- Modify: `D:\MyFiles\KT\mcp\ktWorkflow\src\selfTest.ts`
- [ ] **Step 1先写 Codex 命令安全 RED self-test**
测试 `buildNapcatCodexExecCommand()` 必须包含 `--ask-for-approval never`、`--json`、`--ephemeral`、`--output-schema`,且不能包含 `git push`、`kubectl`、`docker build`。
- [ ] **Step 2确认 RED**
```powershell
pnpm --dir D:\MyFiles\KT\mcp\ktWorkflow run self-test
```
- [ ] **Step 3实现 Codex 命令封装**
命令固定走 NAS 形态:
```bash
CODEX_HOME=/vol1/docker/kt-codex/home/.codex \
codex exec \
--cd /vol1/docker/kt-codex/workspace/KT \
--profile-v2 automation \
--sandbox workspace-write \
--ask-for-approval never \
--json \
--ephemeral \
--output-schema /vol1/docker/kt-codex/workspace/KT/mcp/ktWorkflow/prompts/napcat/schemas/upstream-audit.schema.json \
--output-last-message "$ARTIFACT_DIR/codex-upstream-audit.md" \
- < "$CONTEXT_PACKET"
```
- [ ] **Step 4实现 execute 模式**
`execute=true && useCodex=true` 时写入 context packet运行 Codex捕获 JSONL校验 zod schema。schema 失败时返回 `blocked` + `CODEX_SCHEMA_INVALID`,并保留原始输出 artifact。
- [ ] **Step 5确认 GREEN**
```powershell
pnpm --dir D:\MyFiles\KT\mcp\ktWorkflow run self-test
pnpm --dir D:\MyFiles\KT\mcp\ktWorkflow run typecheck
```
- [ ] **Step 6提交**
```powershell
git -C D:\MyFiles\KT\mcp\ktWorkflow add src/tools/napcatAutomation.ts src/selfTest.ts
git -C D:\MyFiles\KT\mcp\ktWorkflow commit -m "feat: 封装NapCat Codex审计执行器"
```
---
### Task 5MCP Tools 与 CLI Scripts
**Files:**
- Modify: `D:\MyFiles\KT\mcp\ktWorkflow\src\types.ts`
- Modify: `D:\MyFiles\KT\mcp\ktWorkflow\src\core\cli.ts`
- Modify: `D:\MyFiles\KT\mcp\ktWorkflow\src\registerTools.ts`
- Modify: `D:\MyFiles\KT\mcp\ktWorkflow\src\server.ts`
- Modify: `D:\MyFiles\KT\mcp\ktWorkflow\src\core\constants.ts`
- Modify: `D:\MyFiles\KT\mcp\ktWorkflow\package.json`
- Modify: `D:\MyFiles\KT\mcp\ktWorkflow\README.md`
- Modify: `D:\MyFiles\KT\mcp\ktWorkflow\src\selfTest.ts`
- [ ] **Step 1先写注册和 CLI parser RED self-test**
要求 `registeredToolNames` 包含 `kt_napcat_upstream_audit``parseNapcatUpstreamAuditCliArgs()` 能解析 `--execute`、`--use-codex`、`--artifact-root`。
- [ ] **Step 2确认 RED**
```powershell
pnpm --dir D:\MyFiles\KT\mcp\ktWorkflow run self-test
```
- [ ] **Step 3注册五个 MCP tools**
- `kt_napcat_upstream_audit`
- `kt_napcat_sync_candidate_review`
- `kt_napcat_runtime_release_readiness`
- `kt_napcat_remote_dev_handoff`
- `kt_nas_codex_bootstrap_plan`
所有 input schema 都要有默认值,且 `execute` 默认 `false`
- [ ] **Step 4增加 package scripts**
```json
{
"napcat-upstream-audit": "node --import ./node_modules/tsx/dist/loader.mjs src/server.ts --napcat-upstream-audit",
"napcat-sync-candidate-review": "node --import ./node_modules/tsx/dist/loader.mjs src/server.ts --napcat-sync-candidate-review",
"napcat-runtime-release-readiness": "node --import ./node_modules/tsx/dist/loader.mjs src/server.ts --napcat-runtime-release-readiness",
"nas-codex-bootstrap": "node --import ./node_modules/tsx/dist/loader.mjs src/server.ts --nas-codex-bootstrap"
}
```
- [ ] **Step 5确认 GREEN**
```powershell
pnpm --dir D:\MyFiles\KT\mcp\ktWorkflow run napcat-upstream-audit -- --artifact-root .kt-workspace/test-artifacts/napcat-upstream-sync
pnpm --dir D:\MyFiles\KT\mcp\ktWorkflow run self-test
pnpm --dir D:\MyFiles\KT\mcp\ktWorkflow run typecheck
```
- [ ] **Step 6提交**
```powershell
git -C D:\MyFiles\KT\mcp\ktWorkflow add package.json README.md src
git -C D:\MyFiles\KT\mcp\ktWorkflow commit -m "feat: 接入NapCat自动化MCP工具和CLI"
```
---
### Task 6NAS Codex Bootstrap 工具
**Files:**
- Modify: `D:\MyFiles\KT\mcp\ktWorkflow\src\tools\napcatAutomation.ts`
- Modify: `D:\MyFiles\KT\mcp\ktWorkflow\src\selfTest.ts`
- Modify: `D:\MyFiles\KT\mcp\ktWorkflow\README.md`
- [ ] **Step 1先写 Linux 路径 RED self-test**
测试 dry-run 输出必须包含 `/vol1/docker/kt-codex/home/.codex`,且不能包含 `C:\Users`
- [ ] **Step 2确认 RED**
```powershell
pnpm --dir D:\MyFiles\KT\mcp\ktWorkflow run self-test
```
- [ ] **Step 3实现 dry-run**
dry-run 只输出检查命令:
```bash
node --version
corepack --version
pnpm --version
git --version
docker --version
codex --version
test -d /vol1/docker/kt-codex/workspace/KT
test -d /vol1/docker/kt-codex/home/.codex
```
- [ ] **Step 4实现 execute 模式**
`execute=true` 可以创建目录和安装运行环境,但不能 push、merge、deploy也不能改业务仓库。敏感 Codex auth 只允许可信直连同步,不进入 Git、Jenkins artifact、Docker context 或日志。
- [ ] **Step 5确认 GREEN**
```powershell
pnpm --dir D:\MyFiles\KT\mcp\ktWorkflow run nas-codex-bootstrap -- --dry-run
pnpm --dir D:\MyFiles\KT\mcp\ktWorkflow run self-test
pnpm --dir D:\MyFiles\KT\mcp\ktWorkflow run typecheck
```
- [ ] **Step 6提交**
```powershell
git -C D:\MyFiles\KT\mcp\ktWorkflow add README.md src
git -C D:\MyFiles\KT\mcp\ktWorkflow commit -m "feat: 增加NAS Codex环境引导工具"
```
---
### Task 7API 运行时 Artifact 元数据
**Files:**
- Modify: `D:\MyFiles\KT\Node\kt-template-online-api\scripts\napcat-desktop-cn-stage-build.mjs`
- Modify: `D:\MyFiles\KT\Node\kt-template-online-api\test\modules\qqbot\napcat\napcat-desktop-cn-image.spec.ts`
- Modify: `D:\MyFiles\KT\Node\kt-template-online-api\README.md`
- Modify: `D:\MyFiles\KT\Node\kt-template-online-api\API.md`
- [ ] **Step 1先写 marker RED test**
`napcat-desktop-cn-image.spec.ts` 要断言 stage-build 脚本包含:
```ts
expect(script).toContain('upstreamReleaseTag');
expect(script).toContain('upstreamReleaseCommit');
expect(script).toContain('napcatBaseImageDigest');
expect(script).toContain('jenkinsBuildUrl');
```
- [ ] **Step 2确认 RED**
```powershell
corepack pnpm --dir D:\MyFiles\KT\Node\kt-template-online-api exec jest test/modules/qqbot/napcat/napcat-desktop-cn-image.spec.ts --runTestsByPath --runInBand
```
- [ ] **Step 3扩展 stage-build 参数和 marker**
新增参数:
- `--upstream-release-tag`
- `--upstream-release-commit`
- `--napcat-base-image-digest`
- `--jenkins-build-url`
写入 `fork-artifact.json`,和现有 `forkCommit`、`distSha256`、`napcatMjsSha256` 一起归档。
- [ ] **Step 4同步 README/API**
文档必须写清楚API 仓库不提交 `NapCat.Shell.zip`,生产镜像必须来自带完整 marker 的 staged contextbase image 必须是 digest。
- [ ] **Step 5确认 GREEN**
```powershell
corepack pnpm --dir D:\MyFiles\KT\Node\kt-template-online-api exec jest test/modules/qqbot/napcat/napcat-desktop-cn-image.spec.ts --runTestsByPath --runInBand
corepack pnpm --dir D:\MyFiles\KT\Node\kt-template-online-api run typecheck
git -C D:\MyFiles\KT\Node\kt-template-online-api diff --check
```
- [ ] **Step 6提交**
```powershell
git -C D:\MyFiles\KT\Node\kt-template-online-api add scripts/napcat-desktop-cn-stage-build.mjs test/modules/qqbot/napcat/napcat-desktop-cn-image.spec.ts README.md API.md
git -C D:\MyFiles\KT\Node\kt-template-online-api commit -m "feat: 扩展NapCat运行时构建元数据"
```
---
### Task 8API Jenkins 运行时推广 Override
**Files:**
- Create: `D:\MyFiles\KT\Node\kt-template-online-api\test\modules\qqbot\napcat\napcat-runtime-promotion.spec.ts`
- Modify: `D:\MyFiles\KT\Node\kt-template-online-api\Jenkinsfile`
- Modify: `D:\MyFiles\KT\Node\kt-template-online-api\k8s\prod\api.yaml`
- Modify: `D:\MyFiles\KT\Node\kt-template-online-api\README.md`
- Modify: `D:\MyFiles\KT\Node\kt-template-online-api\API.md`
- [ ] **Step 1先写 Jenkins/K8s RED test**
测试 Jenkinsfile 必须有两个参数:
- `QQBOT_NAPCAT_IMAGE_OVERRIDE`
- `QQBOT_NAPCAT_DESKTOP_PROFILE_VERSION_OVERRIDE`
并且 K8s deploy 阶段必须通过 `kubectl set env` 注入 `QQBOT_NAPCAT_IMAGE``QQBOT_NAPCAT_DESKTOP_PROFILE_VERSION`
- [ ] **Step 2确认 RED**
```powershell
corepack pnpm --dir D:\MyFiles\KT\Node\kt-template-online-api exec jest test/modules/qqbot/napcat/napcat-runtime-promotion.spec.ts --runTestsByPath --runInBand
```
- [ ] **Step 3增加 Jenkins 参数**
两个参数默认空字符串。为空时继续使用 manifest 默认值;非空时才覆盖运行时 env。
- [ ] **Step 4K8s deploy 阶段注入 env**
`kubectl set image` 之后执行:
```groovy
def napcatImageOverride = params.QQBOT_NAPCAT_IMAGE_OVERRIDE?.trim()
def napcatProfileOverride = params.QQBOT_NAPCAT_DESKTOP_PROFILE_VERSION_OVERRIDE?.trim()
if (napcatImageOverride) {
runCmd("kubectl ${kubeConfigArg} ${namespaceArg} set env ${shellQuote("deployment/${deploymentName}")} ${shellQuote("QQBOT_NAPCAT_IMAGE=${napcatImageOverride}")}")
}
if (napcatProfileOverride) {
runCmd("kubectl ${kubeConfigArg} ${namespaceArg} set env ${shellQuote("deployment/${deploymentName}")} ${shellQuote("QQBOT_NAPCAT_DESKTOP_PROFILE_VERSION=${napcatProfileOverride}")}")
}
```
- [ ] **Step 5确认 GREEN**
```powershell
corepack pnpm --dir D:\MyFiles\KT\Node\kt-template-online-api exec jest test/modules/qqbot/napcat/napcat-runtime-promotion.spec.ts test/modules/qqbot/napcat/napcat-desktop-cn-image.spec.ts --runTestsByPath --runInBand
corepack pnpm --dir D:\MyFiles\KT\Node\kt-template-online-api run typecheck
git -C D:\MyFiles\KT\Node\kt-template-online-api diff --check
```
- [ ] **Step 6提交**
```powershell
git -C D:\MyFiles\KT\Node\kt-template-online-api add Jenkinsfile k8s/prod/api.yaml README.md API.md test/modules/qqbot/napcat/napcat-runtime-promotion.spec.ts
git -C D:\MyFiles\KT\Node\kt-template-online-api commit -m "feat: 支持NapCat运行时镜像参数推广"
```
---
### Task 9NapCatQQ 发布清单与 Jenkins 入口模板
**Files:**
- Create: `D:\MyFiles\KT\GitHub\NapCatQQ\ci\kt-runtime-release.md`
- Create: `D:\MyFiles\KT\mcp\ktWorkflow\ci\jenkins\KT-NapCatQQ-Upstream-Sync.Jenkinsfile`
- Create: `D:\MyFiles\KT\mcp\ktWorkflow\ci\jenkins\KT-NapCatQQ-Runtime-Release.Jenkinsfile`
- Modify: `D:\MyFiles\KT\mcp\ktWorkflow\README.md`
- [ ] **Step 1写 NapCatQQ 发布清单**
清单必须包含origin 指向 KT 可写 fork/mirror、upstream 指向 `https://github.com/NapNeko/NapCatQQ.git`、运行 `pnpm install --frozen-lockfile`、聚焦登录测试、typecheck、build:webui/build:shell/build:framework、Docker 构建只走 ktWorkflow/Jenkins、不自动合并上游。
- [ ] **Step 2写上游审计 Jenkins 模板**
模板只调用:
```groovy
sh '''
set -e
pnpm --dir /vol1/docker/kt-codex/workspace/KT/mcp/ktWorkflow run napcat-upstream-audit -- \
--execute \
--use-codex \
--artifact-root /vol1/docker/kt-codex/artifacts/napcat-upstream-sync
'''
```
- [ ] **Step 3写运行时发布 Jenkins 模板**
模板调用 ktWorkflow readiness 和 API promotion 命令,不内联审计算法,不自动 merge不自动 push。
- [ ] **Step 4验证模板**
```powershell
rg -n "napcat-upstream-audit|napcat-runtime-release-readiness|git merge|git push" D:\MyFiles\KT\mcp\ktWorkflow\ci\jenkins
git -C D:\MyFiles\KT\mcp\ktWorkflow diff --check
git -C D:\MyFiles\KT\GitHub\NapCatQQ diff --check
```
预期:能看到 ktWorkflow 调用,看不到自动 `git merge``git push`
- [ ] **Step 5提交**
```powershell
git -C D:\MyFiles\KT\mcp\ktWorkflow add README.md ci/jenkins
git -C D:\MyFiles\KT\mcp\ktWorkflow commit -m "docs: 增加NapCatQQ自动化Jenkins入口"
git -C D:\MyFiles\KT\GitHub\NapCatQQ add ci/kt-runtime-release.md
git -C D:\MyFiles\KT\GitHub\NapCatQQ commit -m "docs: 增加KT运行时发布清单"
```
---
### Task 10本地验证、审查和计划收口
**Files:**
- Modify: `D:\MyFiles\KT\TASKS.md`
- [ ] **Step 1跑本地验证**
```powershell
pnpm --dir D:\MyFiles\KT\mcp\ktWorkflow run napcat-upstream-audit -- --artifact-root .kt-workspace/test-artifacts/napcat-upstream-sync
pnpm --dir D:\MyFiles\KT\mcp\ktWorkflow run nas-codex-bootstrap -- --dry-run
pnpm --dir D:\MyFiles\KT\mcp\ktWorkflow run self-test
pnpm --dir D:\MyFiles\KT\mcp\ktWorkflow run typecheck
corepack pnpm --dir D:\MyFiles\KT\Node\kt-template-online-api exec jest test/modules/qqbot/napcat/napcat-desktop-cn-image.spec.ts test/modules/qqbot/napcat/napcat-runtime-promotion.spec.ts --runTestsByPath --runInBand
corepack pnpm --dir D:\MyFiles\KT\Node\kt-template-online-api run typecheck
git -C D:\MyFiles\KT\mcp\ktWorkflow diff --check
git -C D:\MyFiles\KT\Node\kt-template-online-api diff --check
git -C D:\MyFiles\KT\GitHub\NapCatQQ diff --check
```
- [ ] **Step 2跑 KT global-review**
```powershell
pnpm --dir D:\MyFiles\KT\mcp\ktWorkflow run global-review -- --content-scan-mode changed --max-findings-per-project 20
```
预期:`findings=[]`;如果是工具误报,修 ktWorkflow review 规则后复跑。
- [ ] **Step 3更新 TASKS**
记录范围、关键词、验证证据:
```md
### 2026-06-24NapCatQQ 上游同步与运行时发布流水线实施
- 范围mcp/ktWorkflow、Node/kt-template-online-api、GitHub/NapCatQQ。
- 关键词ktWorkflow NapCat 自动化、Codex CLI exec、上游 release 审计、NAS bootstrap、API runtime image/profile override。
- 验证self-test/typecheck/Jest/global-review/diff-check 通过;线上 Jenkins/NAS dry-run 等待下一阶段。
```
- [ ] **Step 4清理历史产物预览**
```powershell
pnpm --dir D:\MyFiles\KT\mcp\ktWorkflow run cleanup-history -- --dry-run
```
如果 `deleted` 非空,执行 `--execute` 后复跑 dry-run直到 `deleted=[]`
- [ ] **Step 5提交 TASKS**
```powershell
git -C D:\MyFiles\KT add TASKS.md
git -C D:\MyFiles\KT commit -m "docs: 记录NapCatQQ自动化实施结果"
```
---
## 执行交接
计划已保存到 `docs/superpowers/plans/2026-06-24-napcatqq-upstream-sync-runtime-release-pipeline-implementation-plan.zh-CN.md`
两种执行方式:
1. **Subagent-Driven推荐**:每个 task 派一个新 subagent父线程逐 task reviewktWorkflow/API/NapCatQQ 分仓提交。
2. **Inline Execution**:本线程用 `superpowers:executing-plans` 批次执行,每个仓库边界做 review checkpoint。
推荐选 **1**。这条线跨三个仓库和两个运行环境,用 task 级 subagent 更容易守住边界。