games-development-ai/.agents/tools/doc-organizer-analyze.mjs
zizi d97e194383 docs(治理): SoT注册表+docs-gate六检门,清缩历史档126→69
- 注册表:docs/architecture/README.md §2,37 份 canonical(frontmatter topic+canonical:true)与表双向机器对账
- 门:.agents/tools/docs-gate.py 六检(品牌根/canonical唯一/死链/入口卫生/留痕隔离/设计档申报),挂 .githooks/pre-commit(本仓已激活)+ .gitea/workflows/docs-gate.yml(待runner)+ wave-close 第8步;旧 check-deadlinks.sh 退役并入 G3
- 清缩:删 54 项历史档(plans 16/agent-specs 设计与spike 20/brainstorms 5/memorys 3/goals+作战清单完成史归档/王蓝莓design/SAA现状html/add-game-template);channel-spike 564K 代码资产迁仓级 spikes/;六件删前蒸馏已迁(代码评审16条open项→进度总账§5、prefix-cache字段表→cheap-model skill、意图基线29条→需求清单附录、九门降级rationale→验收门、A11 TODO→tech-decisions、3layer边界→littlejs-game-dev 指针)
- 修口径约90处:六处SAA『现行主线』旧标、Nacos/RocketMQ『未部署』旧述(07-01反转)、gameDefinition残留、全部死链改 git show 定位;AGENTS.md 249→136行(决策史归tech-decisions);_index 改纯在飞板;对外演示版 md→html
- 依据:docs/agent-specs/2026-07-02-文档治理-{全量普查与裁决-report,SoT注册表与治理门-设计}.md(四路普查191份md+Codex/Opus双评审必修项已折入);恢复基线 8ea97234(单档 git checkout 8ea97234 -- <路径>)
2026-07-02 14:24:12 +08:00

90 lines
5.2 KiB
JavaScript
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

export const meta = {
name: 'doc-organizer-analyze',
description: '文档整理·分析相:按三轴 fan-out 分类窗口内/热目录候选文档,返回结构化处置建议(只读,绝不改文件)',
phases: [
{ title: '轴①过期分类', detail: '每候选档判 KEEP/ARCHIVE/COMPRESS/EVICT/DELETE' },
{ title: '轴②核心档措辞', detail: '每 stale 档逐处判当现行=改/已降级=放过' },
],
}
// args = { candidates:[{file,lines,type}], staleDocs:[{file,suspect}], ledgerGap }
// 防御:Workflow 工具有时把 args 当 JSON 字符串透传(非对象)→ 字符串则解析,保证 candidates/staleDocs 取得到。
let A = args || {}
if (typeof A === 'string') { try { A = JSON.parse(A) } catch (e) { A = {} } }
const candidates = Array.isArray(A.candidates) ? A.candidates : []
const staleDocs = Array.isArray(A.staleDocs) ? A.staleDocs : []
// 现行真相基准(与 .agents/knowledge/tech-decisions.md + AGENTS §3 对齐;子代理仍须自读权威源核实)
const TRUTH =
'现行真相:生成主线=生成 agent 写真 src/ 多文件工程于插件库(HJ-GEN-001 终审 2026-06-12;gameDefinition 已废·A-model 直写真 src·旧"模板驱动/LLM 直出 GameConfig"已废) via new-api 网关(Dify/OpenGame 降远期·MVP 从不部署);' +
'正交两轴:AI 参与深度 Tier0/1/2 与引擎按表现复杂度选(轻-中=LittleJS 增强发行版+Runner v2,勿写13/15KB;最高=Phaser)是两根正交轴、引擎不是分档轴;自研 Canvas<15KB 已废;Cocos 只留 3D/渠道导出轴(人在环);' +
'模板=LittleJS 插件;游戏模板/填参线已废(W-CLEAN),玩法模板(品类框架·引导生成·非pre-built代码)未废=有效待建;agentic 框架 2026-06-25 reframe 统一收敛 AgentScope(三档共用一个 agent 框架),SAA(Spring AI Alibaba v1.1.2.2)/dify/coze 降最低优先级、留作远期适配验证;' +
'美术/音乐=mmx-cli,ComfyUI 退备选;Nacos(配置中心+服务发现)/RocketMQ(异步 gen 队列)/Sentinel(准入侧流控)=MVP 生产基建三件套·已自托管 mini-infra(2026-07-01 build-vs-buy 反转旧"未部署"口径,勿再标 future-state);命名空间=com.wanxiang.huijing;品牌=绘境AI'
const CLS = {
type: 'object',
required: ['action', 'status', 'rationale'],
properties: {
action: { type: 'string', enum: ['KEEP', 'ARCHIVE', 'COMPRESS', 'EVICT', 'DELETE'] },
status: { type: 'string', enum: ['ACTIVE', 'SHIPPED', 'SUPERSEDED', 'SPIKE-DONE', 'DUP'] },
pointer: { type: 'string', description: '收口报告/.agents skill/commit/memory/替代档' },
rationale: { type: 'string', description: '一句话理由' },
},
}
const STALE = {
type: 'object',
required: ['revise', 'findings'],
properties: {
revise: { type: 'boolean', description: '是否需改(有把废弃选型当现行的句)' },
bigRewrite: { type: 'boolean', description: '是否>200行重写/多图重画需先单独出计划' },
findings: {
type: 'array',
items: {
type: 'object',
required: ['line', 'verdict'],
properties: {
line: { type: 'string', description: '行号或定位' },
verdict: { type: 'string', enum: ['改', '放过'] },
fix: { type: 'string', description: 'verdict=改时:现行口径一句' },
},
},
},
},
}
// 轴① 过期历史档分类(判据=§10/_index;每片自读 head+tail+MEMORY.md+_index.md
phase('轴①过期分类')
const axis1 = await parallel(
candidates.map((c) => () =>
agent(
`只读分类 docs/agent-specs/${c.file}(${c.lines || '?'}行,${c.type || '?'})。` +
`先读其前45+后25行 + /root/.claude/projects/-root-games-development-ai/memory/MEMORY.md + docs/agent-specs/_index.md。` +
`判据:review/政策含"为什么"=KEEP或ARCHIVE;execution/edit-plan 一次性=COMPRESS;代码/证据/原始输出=EVICT;机器噪声=DELETE。` +
`KEEP=仍管当前/未来工作 或 某线唯一 SoT(决策/收口)。绝不改任何文件。`,
{ label: `cls:${c.file}`, phase: '轴①过期分类', model: 'opus', schema: CLS }
).then((r) => ({ file: c.file, ...r }))
)
)
// 轴② 核心设计档措辞对齐(基准=tech-decisions.md+AGENTS §3;事实核查据 contracts/Flyway)
phase('轴②核心档措辞')
const axis2 = await parallel(
staleDocs.map((d) => () =>
agent(
`只读审 ${d.file}(${d.suspect || '?'}处疑似)残留废弃选型词。逐处判"把废弃选型当现行架构/默认/MVP在用"=改, "已标降级/future-state/删除线/决策史/甘特蓝图"=放过。` +
`${TRUTH}。基准先读 .agents/knowledge/tech-decisions.md + AGENTS.md §3。` +
`事实核查勿臆造:字段名/MQ是否真部署 据 contracts/+DB Flyway 实测,虚构字段才删、规划项标 future-state 勿删。绝不改文件,只产 findings。`,
{ label: `stale:${d.file}`, phase: '轴②核心档措辞', model: 'opus', schema: STALE }
).then((r) => ({ file: d.file, ...r }))
)
)
// 返回结构化结果供主代理编译"清理计划"(主代理写计划档→另派评审子代理→呈创始人审批→批准后才执行)
return {
axis1: axis1.filter(Boolean),
axis2: axis2.filter(Boolean),
ledgerGap: A.ledgerGap || null,
note: '本结果仅供编计划;任何归档/压缩/改写须等创始人批准后由阶段二执行',
}