23 KiB
NapCatQQ 上游同步与运行时发布流水线实施计划
执行说明: 按 KT 本地工作流逐项执行,并用文内复选框跟踪计划状态。
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 1:ktWorkflow 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 能校验最小输出。
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
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
pnpm --dir D:\MyFiles\KT\mcp\ktWorkflow run self-test
pnpm --dir D:\MyFiles\KT\mcp\ktWorkflow run typecheck
- Step 6:提交
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 2:ktWorkflow 提示词包与安全读取器
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 都包含安全边界:
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
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
pnpm --dir D:\MyFiles\KT\mcp\ktWorkflow run self-test
pnpm --dir D:\MyFiles\KT\mcp\ktWorkflow run typecheck
- Step 6:提交
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
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
pnpm --dir D:\MyFiles\KT\mcp\ktWorkflow run self-test
pnpm --dir D:\MyFiles\KT\mcp\ktWorkflow run typecheck
- Step 6:提交
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 4:Codex 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
pnpm --dir D:\MyFiles\KT\mcp\ktWorkflow run self-test
- Step 3:实现 Codex 命令封装
命令固定走 NAS 形态:
CODEX_HOME=/vol1/docker/kt-codex/home/.codex \
codex exec \
--cd /vol1/docker/kt-codex/workspace/KT \
--profile 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
pnpm --dir D:\MyFiles\KT\mcp\ktWorkflow run self-test
pnpm --dir D:\MyFiles\KT\mcp\ktWorkflow run typecheck
- Step 6:提交
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 5:MCP 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
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
{
"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
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:提交
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 6:NAS 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
pnpm --dir D:\MyFiles\KT\mcp\ktWorkflow run self-test
- Step 3:实现 dry-run
dry-run 只输出检查命令:
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
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:提交
git -C D:\MyFiles\KT\mcp\ktWorkflow add README.md src
git -C D:\MyFiles\KT\mcp\ktWorkflow commit -m "feat: 增加NAS Codex环境引导工具"
Task 7:API 运行时 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 脚本包含:
expect(script).toContain('upstreamReleaseTag');
expect(script).toContain('upstreamReleaseCommit');
expect(script).toContain('napcatBaseImageDigest');
expect(script).toContain('jenkinsBuildUrl');
- Step 2:确认 RED
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 context,base image 必须是 digest。
- Step 5:确认 GREEN
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:提交
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 8:API 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_OVERRIDEQQBOT_NAPCAT_DESKTOP_PROFILE_VERSION_OVERRIDE
并且 K8s deploy 阶段必须通过 kubectl set env 注入 QQBOT_NAPCAT_IMAGE 和 QQBOT_NAPCAT_DESKTOP_PROFILE_VERSION。
- Step 2:确认 RED
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 4:K8s deploy 阶段注入 env
在 kubectl set image 之后执行:
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
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:提交
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 9:NapCatQQ 发布清单与 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 模板
模板只调用:
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:验证模板
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:提交
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:跑本地验证
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
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
记录范围、关键词、验证证据:
### 2026-06-24:NapCatQQ 上游同步与运行时发布流水线实施
- 范围: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:清理历史产物预览
pnpm --dir D:\MyFiles\KT\mcp\ktWorkflow run cleanup-history -- --dry-run
如果 deleted 非空,执行 --execute 后复跑 dry-run,直到 deleted=[]。
- Step 5:提交 TASKS
git -C D:\MyFiles\KT add TASKS.md
git -C D:\MyFiles\KT commit -m "docs: 记录NapCatQQ自动化实施结果"
执行交接
计划已保存到 docs/plans/2026-06-24-napcatqq-upstream-sync-runtime-release-pipeline-implementation-plan.zh-CN.md。
两种执行方式:
- Subagent-Driven(推荐):每个 task 派一个新 subagent,父线程逐 task review,ktWorkflow/API/NapCatQQ 分仓提交。
- Inline Execution:本线程用
KT local execution批次执行,每个仓库边界做 review checkpoint。
推荐选 1。这条线跨三个仓库和两个运行环境,用 task 级 subagent 更容易守住边界。