@dommaker/harness 0.16.1 → 0.16.2
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +1 -0
- package/bin/harness.js +2 -1
- package/dist/cli/commands/sync-docs.d.ts +2 -0
- package/dist/cli/commands/sync-docs.d.ts.map +1 -1
- package/dist/cli/commands/sync-docs.js +320 -1
- package/dist/cli/commands/sync-docs.js.map +1 -1
- package/package.json +1 -1
- package/src/cli/commands/CONTEXT.md +3 -3
- package/src/cli/commands/__tests__/sync-docs-agents.test.ts +226 -0
- package/src/cli/commands/sync-docs.ts +355 -1
package/README.md
CHANGED
package/bin/harness.js
CHANGED
|
@@ -343,10 +343,11 @@ program
|
|
|
343
343
|
// ========================================
|
|
344
344
|
program
|
|
345
345
|
.command('sync-docs')
|
|
346
|
-
.description('同步项目文档(CAPABILITIES.md、CONTEXT.md)')
|
|
346
|
+
.description('同步项目文档(CAPABILITIES.md、CONTEXT.md、AGENTS.md)')
|
|
347
347
|
.option('-p, --project-path <path>', '项目路径')
|
|
348
348
|
.option('-c, --check', '只检查不修改(CI 模式)', false)
|
|
349
349
|
.option('--json', '输出 JSON 格式(供 LLM 消费)', false)
|
|
350
|
+
.option('--agents', '同步 AGENTS.md(agent 导读)', false)
|
|
350
351
|
.action(async (options) => {
|
|
351
352
|
const ok = await syncDocs(options);
|
|
352
353
|
if (!ok && options.check) {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"sync-docs.d.ts","sourceRoot":"","sources":["../../../src/cli/commands/sync-docs.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAaH,MAAM,WAAW,eAAe;IAC9B,WAAW;IACX,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,qBAAqB;IACrB,KAAK,CAAC,EAAE,OAAO,CAAC;IAChB,wBAAwB;IACxB,SAAS,CAAC,EAAE,OAAO,CAAC;IACpB,2BAA2B;IAC3B,IAAI,CAAC,EAAE,OAAO,CAAC;
|
|
1
|
+
{"version":3,"file":"sync-docs.d.ts","sourceRoot":"","sources":["../../../src/cli/commands/sync-docs.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAaH,MAAM,WAAW,eAAe;IAC9B,WAAW;IACX,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,qBAAqB;IACrB,KAAK,CAAC,EAAE,OAAO,CAAC;IAChB,wBAAwB;IACxB,SAAS,CAAC,EAAE,OAAO,CAAC;IACpB,2BAA2B;IAC3B,IAAI,CAAC,EAAE,OAAO,CAAC;IACf,uCAAuC;IACvC,MAAM,CAAC,EAAE,OAAO,CAAC;CAClB;AAeD;;GAEG;AACH,wBAAsB,QAAQ,CAAC,OAAO,EAAE,eAAe,GAAG,OAAO,CAAC,OAAO,CAAC,CAoQzE"}
|
|
@@ -45,6 +45,7 @@ Object.defineProperty(exports, "__esModule", { value: true });
|
|
|
45
45
|
exports.syncDocs = syncDocs;
|
|
46
46
|
const chalk_1 = __importDefault(require("chalk"));
|
|
47
47
|
const fs = __importStar(require("fs/promises"));
|
|
48
|
+
const fs_1 = require("fs");
|
|
48
49
|
const path = __importStar(require("path"));
|
|
49
50
|
const yaml = __importStar(require("js-yaml"));
|
|
50
51
|
const definitions_1 = require("../../core/constraints/definitions");
|
|
@@ -148,10 +149,26 @@ async function syncDocs(options) {
|
|
|
148
149
|
// 目录不存在或无法访问,跳过
|
|
149
150
|
}
|
|
150
151
|
}
|
|
152
|
+
// 4c. AGENTS.md(--agents 启用):缺失或内容漂移
|
|
153
|
+
let agentsMdExpected = null;
|
|
154
|
+
let agentsMdExists = false;
|
|
155
|
+
let agentsMdStale = false;
|
|
156
|
+
if (options.agents) {
|
|
157
|
+
agentsMdExpected = await buildAgentsMd(projectPath, srcDirs);
|
|
158
|
+
try {
|
|
159
|
+
const existing = await fs.readFile(path.join(projectPath, 'AGENTS.md'), 'utf-8');
|
|
160
|
+
agentsMdExists = true;
|
|
161
|
+
agentsMdStale = existing !== agentsMdExpected;
|
|
162
|
+
}
|
|
163
|
+
catch {
|
|
164
|
+
agentsMdStale = true; // 缺失视为漂移
|
|
165
|
+
}
|
|
166
|
+
}
|
|
167
|
+
const hasAgentsIssues = options.agents === true && agentsMdStale;
|
|
151
168
|
const hasTableIssues = result.added.length > 0 || result.removed.length > 0;
|
|
152
169
|
const hasCapIssues = capCountMismatches.length > 0;
|
|
153
170
|
const hasContextIssues = result.contextMissing.length > 0 || result.contextStale.length > 0;
|
|
154
|
-
const hasIssues = hasTableIssues || hasCapIssues || hasContextIssues;
|
|
171
|
+
const hasIssues = hasTableIssues || hasCapIssues || hasContextIssues || hasAgentsIssues;
|
|
155
172
|
// 5. JSON 输出模式:结构化输出供 LLM 消费
|
|
156
173
|
if (isJson) {
|
|
157
174
|
const jsonOutput = {
|
|
@@ -203,6 +220,16 @@ async function syncDocs(options) {
|
|
|
203
220
|
? [{ action: 'update-context-md', command: 'harness sync-docs', dirs: result.contextStale }]
|
|
204
221
|
: []));
|
|
205
222
|
}
|
|
223
|
+
if (options.agents) {
|
|
224
|
+
jsonOutput.agentsMd = { file: 'AGENTS.md', exists: agentsMdExists, stale: agentsMdStale };
|
|
225
|
+
if (agentsMdStale) {
|
|
226
|
+
jsonOutput.resolution.push({
|
|
227
|
+
action: 'sync-agents-md',
|
|
228
|
+
command: 'harness sync-docs --agents',
|
|
229
|
+
details: '生成/更新 AGENTS.md(agent 导读)',
|
|
230
|
+
});
|
|
231
|
+
}
|
|
232
|
+
}
|
|
206
233
|
console.log(JSON.stringify(jsonOutput, null, 2));
|
|
207
234
|
return !hasIssues;
|
|
208
235
|
}
|
|
@@ -227,6 +254,12 @@ async function syncDocs(options) {
|
|
|
227
254
|
console.log(chalk_1.default.yellow(`\n📋 CONTEXT.md 可能过时(源码比文档新):`));
|
|
228
255
|
result.contextStale.forEach(d => console.log(chalk_1.default.gray(` - ${d}/CONTEXT.md`)));
|
|
229
256
|
}
|
|
257
|
+
if (hasAgentsIssues) {
|
|
258
|
+
console.log(chalk_1.default.yellow(agentsMdExists
|
|
259
|
+
? `\n🤖 AGENTS.md 与当前项目状态不一致:`
|
|
260
|
+
: `\n🤖 缺少 AGENTS.md(agent 导读):`));
|
|
261
|
+
console.log(chalk_1.default.gray(` - AGENTS.md`));
|
|
262
|
+
}
|
|
230
263
|
if (!hasIssues) {
|
|
231
264
|
console.log(chalk_1.default.green('✅ 所有文档都是最新的'));
|
|
232
265
|
return true;
|
|
@@ -250,6 +283,10 @@ async function syncDocs(options) {
|
|
|
250
283
|
await createContextMd(projectPath, dir);
|
|
251
284
|
console.log(chalk_1.default.green(`✅ 已创建 ${dir}/CONTEXT.md`));
|
|
252
285
|
}
|
|
286
|
+
if (hasAgentsIssues && agentsMdExpected !== null) {
|
|
287
|
+
await fs.writeFile(path.join(projectPath, 'AGENTS.md'), agentsMdExpected, 'utf-8');
|
|
288
|
+
console.log(chalk_1.default.green(agentsMdExists ? `✅ 已更新 AGENTS.md` : `✅ 已生成 AGENTS.md`));
|
|
289
|
+
}
|
|
253
290
|
return !hasIssues;
|
|
254
291
|
}
|
|
255
292
|
/**
|
|
@@ -689,4 +726,286 @@ function updateCapabilityCounts(content, projectPath) {
|
|
|
689
726
|
}
|
|
690
727
|
return content;
|
|
691
728
|
}
|
|
729
|
+
// ========================================
|
|
730
|
+
// AGENTS.md 生成(--agents)
|
|
731
|
+
// ========================================
|
|
732
|
+
/** 生成 AGENTS.md 目录结构表时跳过的目录(依赖/构建产物/报告等) */
|
|
733
|
+
const AGENTS_MD_SKIP_DIRS = new Set([
|
|
734
|
+
'node_modules', 'dist', 'build', 'out', 'coverage',
|
|
735
|
+
'playwright-report', 'test-results', '.git', '.next', '.turbo',
|
|
736
|
+
]);
|
|
737
|
+
/** 知名顶层目录的一句话说明 */
|
|
738
|
+
const AGENTS_MD_DIR_ROLES = {
|
|
739
|
+
docs: '项目文档',
|
|
740
|
+
scripts: '工具脚本',
|
|
741
|
+
tests: '测试',
|
|
742
|
+
test: '测试',
|
|
743
|
+
bin: '可执行入口/脚本',
|
|
744
|
+
templates: '项目模板',
|
|
745
|
+
'.github': 'CI/CD 配置',
|
|
746
|
+
'.harness': 'harness 配置与运行时状态',
|
|
747
|
+
};
|
|
748
|
+
/** 常用命令候选(按展示顺序),仅列出 package.json 中实际存在的脚本 */
|
|
749
|
+
const AGENTS_MD_COMMANDS = [
|
|
750
|
+
['dev', '启动开发环境'],
|
|
751
|
+
['build', '构建'],
|
|
752
|
+
['test', '运行测试'],
|
|
753
|
+
['test:e2e', '端到端测试'],
|
|
754
|
+
['test:unit', '单元测试'],
|
|
755
|
+
['typecheck', '类型检查'],
|
|
756
|
+
['lint', '代码检查'],
|
|
757
|
+
['start', '启动生产服务'],
|
|
758
|
+
];
|
|
759
|
+
/**
|
|
760
|
+
* 生成 AGENTS.md 内容(agent 导读:项目简介/目录结构/常用命令/约束治理/知识入口)
|
|
761
|
+
*
|
|
762
|
+
* 纯静态提取(零 LLM),确定性输出:同一代码库状态生成同一内容(无时间戳),
|
|
763
|
+
* 因此重跑幂等,--check 可直接用文本对比检测漂移。
|
|
764
|
+
*/
|
|
765
|
+
async function buildAgentsMd(projectPath, srcDirs) {
|
|
766
|
+
const pkg = await readPackageJsonLite(projectPath);
|
|
767
|
+
const [dirs, governance, knowledgeCount, contextDocCount] = await Promise.all([
|
|
768
|
+
getTopLevelDirEntries(projectPath, srcDirs),
|
|
769
|
+
getGovernanceInfo(projectPath),
|
|
770
|
+
countKnowledgeEntries(projectPath),
|
|
771
|
+
countContextDocs(projectPath, srcDirs),
|
|
772
|
+
]);
|
|
773
|
+
const name = pkg?.name || path.basename(projectPath);
|
|
774
|
+
const description = pkg?.description || await getConfigDescription(projectPath);
|
|
775
|
+
const lines = [
|
|
776
|
+
'# AGENTS.md',
|
|
777
|
+
'',
|
|
778
|
+
'> 本文件由 `harness sync-docs --agents` 自动生成,请勿手改。内容漂移时重新运行该命令更新。',
|
|
779
|
+
'',
|
|
780
|
+
'## 项目简介',
|
|
781
|
+
'',
|
|
782
|
+
description ? `**${name}** — ${description}` : `**${name}**`,
|
|
783
|
+
'',
|
|
784
|
+
'## 目录结构',
|
|
785
|
+
'',
|
|
786
|
+
];
|
|
787
|
+
if (dirs.length > 0) {
|
|
788
|
+
lines.push('| 目录 | 说明 |', '|------|------|');
|
|
789
|
+
for (const d of dirs) {
|
|
790
|
+
lines.push(`| \`${d.dir}/\` | ${d.role} |`);
|
|
791
|
+
}
|
|
792
|
+
}
|
|
793
|
+
else {
|
|
794
|
+
lines.push('(未检测到顶层目录)');
|
|
795
|
+
}
|
|
796
|
+
lines.push('', '## 常用命令', '');
|
|
797
|
+
const pm = detectPackageManager(projectPath);
|
|
798
|
+
const scripts = pkg?.scripts || {};
|
|
799
|
+
const commands = AGENTS_MD_COMMANDS.filter(([n]) => scripts[n]);
|
|
800
|
+
if (commands.length > 0) {
|
|
801
|
+
lines.push('```bash');
|
|
802
|
+
for (const [n, comment] of commands) {
|
|
803
|
+
lines.push(`${formatScriptCommand(pm, n)} # ${comment}`);
|
|
804
|
+
}
|
|
805
|
+
lines.push('```');
|
|
806
|
+
}
|
|
807
|
+
else {
|
|
808
|
+
lines.push('(package.json 中未检测到常用脚本)');
|
|
809
|
+
}
|
|
810
|
+
lines.push('', '## 约束与治理', '');
|
|
811
|
+
if (governance.hasConfig) {
|
|
812
|
+
lines.push(`- 治理配置:\`.harness/config.yml\`${governance.preset ? `(preset: ${governance.preset})` : ''}`);
|
|
813
|
+
}
|
|
814
|
+
if (governance.hasClaudeGovernance) {
|
|
815
|
+
const counts = [
|
|
816
|
+
governance.ironLaws !== undefined ? `Iron Laws ${governance.ironLaws} 条` : null,
|
|
817
|
+
governance.guidelines !== undefined ? `Guidelines ${governance.guidelines} 条` : null,
|
|
818
|
+
].filter(Boolean).join('、');
|
|
819
|
+
lines.push(`- 约束清单:\`CLAUDE.md\` Governance Rules 块${counts ? `(${counts})` : ''}`);
|
|
820
|
+
}
|
|
821
|
+
if (!governance.hasConfig && !governance.hasClaudeGovernance) {
|
|
822
|
+
lines.push('- 未检测到 harness 治理配置,可运行 `harness init` 初始化');
|
|
823
|
+
}
|
|
824
|
+
lines.push('', '## 知识入口', '');
|
|
825
|
+
if (knowledgeCount !== null) {
|
|
826
|
+
lines.push(`- \`.harness/knowledge/\`:项目知识库(${knowledgeCount} 条),用 \`harness knowledge\` 查询`);
|
|
827
|
+
}
|
|
828
|
+
lines.push(contextDocCount > 0
|
|
829
|
+
? `- 各源码目录的 \`CONTEXT.md\` 是权威模块文档(现有 ${contextDocCount} 个),改动代码时同步更新`
|
|
830
|
+
: '- 各源码目录的 `CONTEXT.md` 是权威模块文档,缺失目录可由 `harness sync-docs` 生成模板');
|
|
831
|
+
lines.push('');
|
|
832
|
+
return lines.join('\n');
|
|
833
|
+
}
|
|
834
|
+
/** 读取 package.json(不存在或无法解析时返回 null) */
|
|
835
|
+
async function readPackageJsonLite(dir) {
|
|
836
|
+
try {
|
|
837
|
+
return JSON.parse(await fs.readFile(path.join(dir, 'package.json'), 'utf-8'));
|
|
838
|
+
}
|
|
839
|
+
catch {
|
|
840
|
+
return null;
|
|
841
|
+
}
|
|
842
|
+
}
|
|
843
|
+
/** 从 .harness/config.yml 读取项目描述(package.json 无 description 时的兜底) */
|
|
844
|
+
async function getConfigDescription(projectPath) {
|
|
845
|
+
try {
|
|
846
|
+
const content = await fs.readFile(path.join(projectPath, '.harness', 'config.yml'), 'utf-8');
|
|
847
|
+
const config = yaml.load(content);
|
|
848
|
+
return typeof config?.description === 'string' ? config.description : '';
|
|
849
|
+
}
|
|
850
|
+
catch {
|
|
851
|
+
return '';
|
|
852
|
+
}
|
|
853
|
+
}
|
|
854
|
+
/** 检测包管理器(决定命令前缀):pnpm workspace/lockfile → yarn lockfile → 默认 npm */
|
|
855
|
+
function detectPackageManager(projectPath) {
|
|
856
|
+
if ((0, fs_1.existsSync)(path.join(projectPath, 'pnpm-workspace.yaml')) || (0, fs_1.existsSync)(path.join(projectPath, 'pnpm-lock.yaml'))) {
|
|
857
|
+
return 'pnpm';
|
|
858
|
+
}
|
|
859
|
+
if ((0, fs_1.existsSync)(path.join(projectPath, 'yarn.lock')))
|
|
860
|
+
return 'yarn';
|
|
861
|
+
return 'npm';
|
|
862
|
+
}
|
|
863
|
+
/** 格式化脚本调用方式(npm 的 start/test 可省略 run) */
|
|
864
|
+
function formatScriptCommand(pm, name) {
|
|
865
|
+
if (pm === 'pnpm')
|
|
866
|
+
return `pnpm ${name}`;
|
|
867
|
+
if (pm === 'yarn')
|
|
868
|
+
return `yarn ${name}`;
|
|
869
|
+
return name === 'start' || name === 'test' ? `npm ${name}` : `npm run ${name}`;
|
|
870
|
+
}
|
|
871
|
+
/** 收集顶层目录及其一句话说明(排序保证确定性) */
|
|
872
|
+
async function getTopLevelDirEntries(projectPath, srcDirs) {
|
|
873
|
+
let dirents;
|
|
874
|
+
try {
|
|
875
|
+
dirents = await fs.readdir(projectPath, { withFileTypes: true });
|
|
876
|
+
}
|
|
877
|
+
catch {
|
|
878
|
+
return [];
|
|
879
|
+
}
|
|
880
|
+
const entries = [];
|
|
881
|
+
for (const d of dirents) {
|
|
882
|
+
if (!d.isDirectory())
|
|
883
|
+
continue;
|
|
884
|
+
if (AGENTS_MD_SKIP_DIRS.has(d.name))
|
|
885
|
+
continue;
|
|
886
|
+
// 隐藏目录只保留 .harness / .github
|
|
887
|
+
if (d.name.startsWith('.') && d.name !== '.harness' && d.name !== '.github')
|
|
888
|
+
continue;
|
|
889
|
+
entries.push({ dir: d.name, role: await describeTopLevelDir(projectPath, d.name, srcDirs) });
|
|
890
|
+
}
|
|
891
|
+
entries.sort((a, b) => (a.dir < b.dir ? -1 : a.dir > b.dir ? 1 : 0));
|
|
892
|
+
return entries;
|
|
893
|
+
}
|
|
894
|
+
/** 顶层目录的一句话说明:知名目录 → monorepo 成员 → 源码根 → 子包 description → 占位 */
|
|
895
|
+
async function describeTopLevelDir(projectPath, dir, srcDirs) {
|
|
896
|
+
const known = AGENTS_MD_DIR_ROLES[dir];
|
|
897
|
+
if (known)
|
|
898
|
+
return known;
|
|
899
|
+
if (dir === 'apps' || dir === 'packages') {
|
|
900
|
+
const members = await listWorkspaceMembers(path.join(projectPath, dir));
|
|
901
|
+
if (members.length > 0) {
|
|
902
|
+
return `monorepo ${dir === 'apps' ? '应用' : '共享包'}:${members.join('、')}`;
|
|
903
|
+
}
|
|
904
|
+
return 'monorepo 工作区';
|
|
905
|
+
}
|
|
906
|
+
if (srcDirs.includes(dir))
|
|
907
|
+
return '源码目录';
|
|
908
|
+
const subPkg = await readPackageJsonLite(path.join(projectPath, dir));
|
|
909
|
+
if (subPkg?.description)
|
|
910
|
+
return subPkg.description;
|
|
911
|
+
return '—';
|
|
912
|
+
}
|
|
913
|
+
/** 列出 monorepo 工作区成员(含 package.json 的子目录名,排序) */
|
|
914
|
+
async function listWorkspaceMembers(dir) {
|
|
915
|
+
try {
|
|
916
|
+
const dirents = await fs.readdir(dir, { withFileTypes: true });
|
|
917
|
+
const members = [];
|
|
918
|
+
for (const d of dirents) {
|
|
919
|
+
if (!d.isDirectory() || d.name.startsWith('.'))
|
|
920
|
+
continue;
|
|
921
|
+
if ((0, fs_1.existsSync)(path.join(dir, d.name, 'package.json'))) {
|
|
922
|
+
members.push(d.name);
|
|
923
|
+
}
|
|
924
|
+
}
|
|
925
|
+
return members.sort();
|
|
926
|
+
}
|
|
927
|
+
catch {
|
|
928
|
+
return [];
|
|
929
|
+
}
|
|
930
|
+
}
|
|
931
|
+
/** 收集治理信息:.harness/config.yml 与 CLAUDE.md 治理块(含铁律/指南计数) */
|
|
932
|
+
async function getGovernanceInfo(projectPath) {
|
|
933
|
+
const info = { hasConfig: false, hasClaudeGovernance: false };
|
|
934
|
+
try {
|
|
935
|
+
const content = await fs.readFile(path.join(projectPath, '.harness', 'config.yml'), 'utf-8');
|
|
936
|
+
const config = yaml.load(content);
|
|
937
|
+
info.hasConfig = true;
|
|
938
|
+
if (config && typeof config.preset === 'string') {
|
|
939
|
+
info.preset = config.preset;
|
|
940
|
+
}
|
|
941
|
+
}
|
|
942
|
+
catch {
|
|
943
|
+
// 配置不存在
|
|
944
|
+
}
|
|
945
|
+
try {
|
|
946
|
+
const claude = await fs.readFile(path.join(projectPath, 'CLAUDE.md'), 'utf-8');
|
|
947
|
+
if (/^##\s+Governance Rules/m.test(claude) || claude.includes('HARNESS_CONSTRAINTS_START')) {
|
|
948
|
+
info.hasClaudeGovernance = true;
|
|
949
|
+
info.ironLaws = countConstraintBullets(claude, 'Iron Laws');
|
|
950
|
+
info.guidelines = countConstraintBullets(claude, 'Guidelines');
|
|
951
|
+
}
|
|
952
|
+
}
|
|
953
|
+
catch {
|
|
954
|
+
// CLAUDE.md 不存在
|
|
955
|
+
}
|
|
956
|
+
return info;
|
|
957
|
+
}
|
|
958
|
+
/** 统计 CLAUDE.md 指定约束分节下的条目数(`- **key**:` 行),分节不存在时返回 undefined */
|
|
959
|
+
function countConstraintBullets(content, section) {
|
|
960
|
+
const heading = new RegExp(`^###\\s+${section}[^\\n]*$`, 'm').exec(content);
|
|
961
|
+
if (!heading)
|
|
962
|
+
return undefined;
|
|
963
|
+
const rest = content.slice(heading.index + heading[0].length);
|
|
964
|
+
const end = rest.search(/^###\s|^\s*<!--\s*HARNESS_CONSTRAINTS_END/m);
|
|
965
|
+
const block = end === -1 ? rest : rest.slice(0, end);
|
|
966
|
+
const items = block.match(/^-\s+\*\*[A-Za-z0-9_]+\*\*/gm);
|
|
967
|
+
return items ? items.length : 0;
|
|
968
|
+
}
|
|
969
|
+
/** 统计 .harness/knowledge 下的知识条目数(.md 文件),目录不存在时返回 null */
|
|
970
|
+
async function countKnowledgeEntries(projectPath) {
|
|
971
|
+
try {
|
|
972
|
+
const files = await fs.readdir(path.join(projectPath, '.harness', 'knowledge'));
|
|
973
|
+
return files.filter(f => f.endsWith('.md')).length;
|
|
974
|
+
}
|
|
975
|
+
catch {
|
|
976
|
+
return null;
|
|
977
|
+
}
|
|
978
|
+
}
|
|
979
|
+
/** 统计源码根内的 CONTEXT.md 数量(含源码根本身,跨根去重) */
|
|
980
|
+
async function countContextDocs(projectPath, srcDirs) {
|
|
981
|
+
const found = new Set();
|
|
982
|
+
async function scan(dir) {
|
|
983
|
+
let entries;
|
|
984
|
+
try {
|
|
985
|
+
entries = await fs.readdir(dir, { withFileTypes: true });
|
|
986
|
+
}
|
|
987
|
+
catch {
|
|
988
|
+
return;
|
|
989
|
+
}
|
|
990
|
+
for (const entry of entries) {
|
|
991
|
+
if (!entry.isDirectory())
|
|
992
|
+
continue;
|
|
993
|
+
if (entry.name === 'node_modules' || entry.name === '__tests__' || entry.name === 'dist')
|
|
994
|
+
continue;
|
|
995
|
+
const entryPath = path.join(dir, entry.name);
|
|
996
|
+
if ((0, fs_1.existsSync)(path.join(entryPath, 'CONTEXT.md'))) {
|
|
997
|
+
found.add(entryPath);
|
|
998
|
+
}
|
|
999
|
+
await scan(entryPath);
|
|
1000
|
+
}
|
|
1001
|
+
}
|
|
1002
|
+
for (const root of srcDirs) {
|
|
1003
|
+
const rootPath = path.join(projectPath, root);
|
|
1004
|
+
if ((0, fs_1.existsSync)(path.join(rootPath, 'CONTEXT.md'))) {
|
|
1005
|
+
found.add(rootPath);
|
|
1006
|
+
}
|
|
1007
|
+
await scan(rootPath);
|
|
1008
|
+
}
|
|
1009
|
+
return found.size;
|
|
1010
|
+
}
|
|
692
1011
|
//# sourceMappingURL=sync-docs.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"sync-docs.js","sourceRoot":"","sources":["../../../src/cli/commands/sync-docs.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"sync-docs.js","sourceRoot":"","sources":["../../../src/cli/commands/sync-docs.ts"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -1,10 +1,10 @@
|
|
|
1
1
|
# cli/commands/
|
|
2
2
|
|
|
3
3
|
## 职责
|
|
4
|
-
CLI 子命令实现:
|
|
4
|
+
CLI 子命令实现:25 个命令覆盖约束检查/门禁验证/文档同步/知识管理/失败诊断/发布/会话分析等。
|
|
5
5
|
|
|
6
|
-
## 核心导出(
|
|
7
|
-
check / validate / passes-gate / init / report / status / flow / spec / acceptance / performance / security / contract / review / command / sync-docs / knowledge / failure / posteval-plan / release / analyze-sessions / update-user-model
|
|
6
|
+
## 核心导出(25 命令)
|
|
7
|
+
check / validate / passes-gate / init / report / status / flow / spec / acceptance / performance / security / contract / review / command / sync-docs / knowledge / sdd / failure / posteval-plan / release / analyze-sessions / update-user-model / constraints / doc-freshness-check / spec-baseline-check
|
|
8
8
|
|
|
9
9
|
## 依赖关系
|
|
10
10
|
- 依赖 `src/core/constraints/` 约束引擎
|
|
@@ -0,0 +1,226 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* sync-docs --agents(AGENTS.md 生成)测试
|
|
3
|
+
*/
|
|
4
|
+
|
|
5
|
+
import * as fs from 'fs';
|
|
6
|
+
import * as path from 'path';
|
|
7
|
+
import { syncDocs } from '../sync-docs';
|
|
8
|
+
|
|
9
|
+
describe('sync-docs --agents', () => {
|
|
10
|
+
const tempDir = path.join(process.cwd(), 'temp-test-sync-docs-agents');
|
|
11
|
+
|
|
12
|
+
beforeAll(() => {
|
|
13
|
+
fs.mkdirSync(tempDir, { recursive: true });
|
|
14
|
+
});
|
|
15
|
+
|
|
16
|
+
afterAll(() => {
|
|
17
|
+
try {
|
|
18
|
+
fs.rmSync(tempDir, { recursive: true, force: true });
|
|
19
|
+
} catch {
|
|
20
|
+
// ignore
|
|
21
|
+
}
|
|
22
|
+
});
|
|
23
|
+
|
|
24
|
+
let consoleSpy: jest.SpyInstance;
|
|
25
|
+
|
|
26
|
+
beforeEach(() => {
|
|
27
|
+
jest.clearAllMocks();
|
|
28
|
+
consoleSpy = jest.spyOn(console, 'log').mockImplementation();
|
|
29
|
+
});
|
|
30
|
+
|
|
31
|
+
afterEach(() => {
|
|
32
|
+
consoleSpy.mockRestore();
|
|
33
|
+
});
|
|
34
|
+
|
|
35
|
+
/**
|
|
36
|
+
* 创建夹具仓库:package.json + .harness/config.yml + 知识库 + CLAUDE.md 治理块 + src/docs 目录
|
|
37
|
+
*/
|
|
38
|
+
function createFixture(dir: string, opts: { pnpm?: boolean; withCapabilities?: boolean } = {}): void {
|
|
39
|
+
fs.mkdirSync(path.join(dir, 'src'), { recursive: true });
|
|
40
|
+
fs.mkdirSync(path.join(dir, 'docs'), { recursive: true });
|
|
41
|
+
fs.mkdirSync(path.join(dir, '.harness', 'knowledge'), { recursive: true });
|
|
42
|
+
|
|
43
|
+
fs.writeFileSync(path.join(dir, 'src', 'app.ts'), '/**\n * App module\n */\nexport const app = 1;');
|
|
44
|
+
fs.writeFileSync(path.join(dir, 'src', 'CONTEXT.md'), '# src\n\n夹具模块文档\n');
|
|
45
|
+
fs.writeFileSync(path.join(dir, 'package.json'), JSON.stringify({
|
|
46
|
+
name: 'fixture-app',
|
|
47
|
+
description: '测试夹具项目',
|
|
48
|
+
scripts: {
|
|
49
|
+
dev: 'vite',
|
|
50
|
+
build: 'tsc',
|
|
51
|
+
test: 'jest',
|
|
52
|
+
'test:e2e': 'jest e2e',
|
|
53
|
+
typecheck: 'tsc --noEmit',
|
|
54
|
+
lint: 'eslint .',
|
|
55
|
+
start: 'node dist/index.js',
|
|
56
|
+
clean: 'rimraf dist',
|
|
57
|
+
},
|
|
58
|
+
}, null, 2));
|
|
59
|
+
fs.writeFileSync(path.join(dir, '.harness', 'config.yml'), 'preset: standard\nenabled: true\n');
|
|
60
|
+
fs.writeFileSync(path.join(dir, '.harness', 'knowledge', 'k1.md'), '# k1\n');
|
|
61
|
+
fs.writeFileSync(path.join(dir, 'CLAUDE.md'), [
|
|
62
|
+
'# CLAUDE.md',
|
|
63
|
+
'',
|
|
64
|
+
'## Governance Rules',
|
|
65
|
+
'<!-- HARNESS_CONSTRAINTS_START -->',
|
|
66
|
+
'### Iron Laws (违反将阻断)',
|
|
67
|
+
'- **law_a**: 描述 a',
|
|
68
|
+
'- **law_b**: 描述 b',
|
|
69
|
+
'### Guidelines (应遵循)',
|
|
70
|
+
'- **g_a**: 描述',
|
|
71
|
+
'- **g_b**: 描述',
|
|
72
|
+
'- **g_c**: 描述',
|
|
73
|
+
'### Tips',
|
|
74
|
+
'- **t_a**: 描述',
|
|
75
|
+
'<!-- HARNESS_CONSTRAINTS_END -->',
|
|
76
|
+
].join('\n'));
|
|
77
|
+
|
|
78
|
+
if (opts.pnpm) {
|
|
79
|
+
fs.writeFileSync(path.join(dir, 'pnpm-lock.yaml'), 'lockfileVersion: 1\n');
|
|
80
|
+
}
|
|
81
|
+
if (opts.withCapabilities) {
|
|
82
|
+
fs.writeFileSync(
|
|
83
|
+
path.join(dir, 'CAPABILITIES.md'),
|
|
84
|
+
'# Capabilities\n\n| 模块 | 文件 | 说明 |\n|------|------|------|\n| app | src/app.ts | App module |'
|
|
85
|
+
);
|
|
86
|
+
}
|
|
87
|
+
}
|
|
88
|
+
|
|
89
|
+
it('应该从夹具仓库生成 AGENTS.md(pnpm 项目)', async () => {
|
|
90
|
+
const testDir = path.join(tempDir, 'gen-pnpm');
|
|
91
|
+
createFixture(testDir, { pnpm: true });
|
|
92
|
+
|
|
93
|
+
await syncDocs({ projectPath: testDir, agents: true });
|
|
94
|
+
|
|
95
|
+
const agentsPath = path.join(testDir, 'AGENTS.md');
|
|
96
|
+
expect(fs.existsSync(agentsPath)).toBe(true);
|
|
97
|
+
const content = fs.readFileSync(agentsPath, 'utf-8');
|
|
98
|
+
|
|
99
|
+
// 项目简介
|
|
100
|
+
expect(content).toContain('**fixture-app** — 测试夹具项目');
|
|
101
|
+
// 目录结构
|
|
102
|
+
expect(content).toContain('`docs/`');
|
|
103
|
+
expect(content).toContain('项目文档');
|
|
104
|
+
expect(content).toContain('`src/`');
|
|
105
|
+
expect(content).toContain('源码目录');
|
|
106
|
+
// 常用命令(仅 curated,不含 clean;pnpm 前缀)
|
|
107
|
+
expect(content).toContain('pnpm dev');
|
|
108
|
+
expect(content).toContain('pnpm build');
|
|
109
|
+
expect(content).toContain('pnpm test:e2e');
|
|
110
|
+
expect(content).toContain('pnpm typecheck');
|
|
111
|
+
expect(content).toContain('pnpm start');
|
|
112
|
+
expect(content).not.toContain('clean');
|
|
113
|
+
// 约束与治理
|
|
114
|
+
expect(content).toContain('preset: standard');
|
|
115
|
+
expect(content).toContain('Iron Laws 2 条、Guidelines 3 条');
|
|
116
|
+
// 知识入口
|
|
117
|
+
expect(content).toContain('项目知识库(1 条)');
|
|
118
|
+
expect(content).toContain('CONTEXT.md');
|
|
119
|
+
expect(content).toContain('现有 1 个');
|
|
120
|
+
|
|
121
|
+
fs.rmSync(testDir, { recursive: true, force: true });
|
|
122
|
+
});
|
|
123
|
+
|
|
124
|
+
it('npm 项目应该使用 npm run 前缀', async () => {
|
|
125
|
+
const testDir = path.join(tempDir, 'gen-npm');
|
|
126
|
+
createFixture(testDir);
|
|
127
|
+
|
|
128
|
+
await syncDocs({ projectPath: testDir, agents: true });
|
|
129
|
+
|
|
130
|
+
const content = fs.readFileSync(path.join(testDir, 'AGENTS.md'), 'utf-8');
|
|
131
|
+
expect(content).toContain('npm run build');
|
|
132
|
+
expect(content).toContain('npm test');
|
|
133
|
+
expect(content).toContain('npm start');
|
|
134
|
+
expect(content).toContain('npm run typecheck');
|
|
135
|
+
|
|
136
|
+
fs.rmSync(testDir, { recursive: true, force: true });
|
|
137
|
+
});
|
|
138
|
+
|
|
139
|
+
it('重复运行应该幂等(内容一致且 --check 通过)', async () => {
|
|
140
|
+
const testDir = path.join(tempDir, 'idempotent');
|
|
141
|
+
createFixture(testDir, { pnpm: true, withCapabilities: true });
|
|
142
|
+
|
|
143
|
+
await syncDocs({ projectPath: testDir, agents: true });
|
|
144
|
+
const first = fs.readFileSync(path.join(testDir, 'AGENTS.md'), 'utf-8');
|
|
145
|
+
|
|
146
|
+
// 第二次运行:无任何差异
|
|
147
|
+
const secondRun = await syncDocs({ projectPath: testDir, agents: true });
|
|
148
|
+
const second = fs.readFileSync(path.join(testDir, 'AGENTS.md'), 'utf-8');
|
|
149
|
+
expect(second).toBe(first);
|
|
150
|
+
expect(secondRun).toBe(true);
|
|
151
|
+
|
|
152
|
+
// --check 模式应通过
|
|
153
|
+
const checkResult = await syncDocs({ projectPath: testDir, agents: true, check: true });
|
|
154
|
+
expect(checkResult).toBe(true);
|
|
155
|
+
|
|
156
|
+
fs.rmSync(testDir, { recursive: true, force: true });
|
|
157
|
+
});
|
|
158
|
+
|
|
159
|
+
it('--check 模式应该检测 AGENTS.md 缺失', async () => {
|
|
160
|
+
const testDir = path.join(tempDir, 'check-missing');
|
|
161
|
+
createFixture(testDir, { withCapabilities: true });
|
|
162
|
+
|
|
163
|
+
const result = await syncDocs({ projectPath: testDir, agents: true, check: true });
|
|
164
|
+
expect(result).toBe(false);
|
|
165
|
+
expect(consoleSpy).toHaveBeenCalledWith(expect.stringContaining('缺少 AGENTS.md'));
|
|
166
|
+
// check 模式不写入
|
|
167
|
+
expect(fs.existsSync(path.join(testDir, 'AGENTS.md'))).toBe(false);
|
|
168
|
+
|
|
169
|
+
fs.rmSync(testDir, { recursive: true, force: true });
|
|
170
|
+
});
|
|
171
|
+
|
|
172
|
+
it('--check 模式应该检测内容漂移', async () => {
|
|
173
|
+
const testDir = path.join(tempDir, 'check-drift');
|
|
174
|
+
createFixture(testDir, { pnpm: true, withCapabilities: true });
|
|
175
|
+
|
|
176
|
+
// 先生成
|
|
177
|
+
await syncDocs({ projectPath: testDir, agents: true });
|
|
178
|
+
|
|
179
|
+
// 漂移 1:手改 AGENTS.md
|
|
180
|
+
fs.appendFileSync(path.join(testDir, 'AGENTS.md'), '\n手动追加的一行\n');
|
|
181
|
+
expect(await syncDocs({ projectPath: testDir, agents: true, check: true })).toBe(false);
|
|
182
|
+
|
|
183
|
+
// 重新生成恢复
|
|
184
|
+
await syncDocs({ projectPath: testDir, agents: true });
|
|
185
|
+
expect(await syncDocs({ projectPath: testDir, agents: true, check: true })).toBe(true);
|
|
186
|
+
|
|
187
|
+
// 漂移 2:package.json 删除一个 curated 脚本
|
|
188
|
+
const pkgPath = path.join(testDir, 'package.json');
|
|
189
|
+
const pkg = JSON.parse(fs.readFileSync(pkgPath, 'utf-8'));
|
|
190
|
+
delete pkg.scripts.lint;
|
|
191
|
+
fs.writeFileSync(pkgPath, JSON.stringify(pkg, null, 2));
|
|
192
|
+
expect(await syncDocs({ projectPath: testDir, agents: true, check: true })).toBe(false);
|
|
193
|
+
|
|
194
|
+
fs.rmSync(testDir, { recursive: true, force: true });
|
|
195
|
+
});
|
|
196
|
+
|
|
197
|
+
it('未启用 --agents 时不应生成 AGENTS.md', async () => {
|
|
198
|
+
const testDir = path.join(tempDir, 'no-agents');
|
|
199
|
+
createFixture(testDir, { withCapabilities: true });
|
|
200
|
+
|
|
201
|
+
const result = await syncDocs({ projectPath: testDir });
|
|
202
|
+
expect(result).toBe(true);
|
|
203
|
+
expect(fs.existsSync(path.join(testDir, 'AGENTS.md'))).toBe(false);
|
|
204
|
+
|
|
205
|
+
fs.rmSync(testDir, { recursive: true, force: true });
|
|
206
|
+
});
|
|
207
|
+
|
|
208
|
+
it('--json 模式应该输出 agentsMd 状态', async () => {
|
|
209
|
+
const testDir = path.join(tempDir, 'json-agents');
|
|
210
|
+
createFixture(testDir, { withCapabilities: true });
|
|
211
|
+
|
|
212
|
+
const result = await syncDocs({ projectPath: testDir, agents: true, check: true, json: true });
|
|
213
|
+
expect(result).toBe(false);
|
|
214
|
+
|
|
215
|
+
const jsonCall = consoleSpy.mock.calls.find(
|
|
216
|
+
(call: unknown[]) => typeof call[0] === 'string' && call[0].startsWith('{')
|
|
217
|
+
);
|
|
218
|
+
expect(jsonCall).toBeDefined();
|
|
219
|
+
const parsed = JSON.parse(jsonCall![0]);
|
|
220
|
+
expect(parsed.stale).toBe(true);
|
|
221
|
+
expect(parsed.agentsMd).toEqual({ file: 'AGENTS.md', exists: false, stale: true });
|
|
222
|
+
expect(parsed.resolution.some((r: { action: string }) => r.action === 'sync-agents-md')).toBe(true);
|
|
223
|
+
|
|
224
|
+
fs.rmSync(testDir, { recursive: true, force: true });
|
|
225
|
+
});
|
|
226
|
+
});
|
|
@@ -25,6 +25,8 @@ export interface SyncDocsOptions {
|
|
|
25
25
|
changelog?: boolean;
|
|
26
26
|
/** 输出 JSON 格式(供 LLM 消费) */
|
|
27
27
|
json?: boolean;
|
|
28
|
+
/** 同步 AGENTS.md(agent 导读),在默认章节之外追加 */
|
|
29
|
+
agents?: boolean;
|
|
28
30
|
}
|
|
29
31
|
|
|
30
32
|
interface ModuleInfo {
|
|
@@ -140,10 +142,26 @@ export async function syncDocs(options: SyncDocsOptions): Promise<boolean> {
|
|
|
140
142
|
}
|
|
141
143
|
}
|
|
142
144
|
|
|
145
|
+
// 4c. AGENTS.md(--agents 启用):缺失或内容漂移
|
|
146
|
+
let agentsMdExpected: string | null = null;
|
|
147
|
+
let agentsMdExists = false;
|
|
148
|
+
let agentsMdStale = false;
|
|
149
|
+
if (options.agents) {
|
|
150
|
+
agentsMdExpected = await buildAgentsMd(projectPath, srcDirs);
|
|
151
|
+
try {
|
|
152
|
+
const existing = await fs.readFile(path.join(projectPath, 'AGENTS.md'), 'utf-8');
|
|
153
|
+
agentsMdExists = true;
|
|
154
|
+
agentsMdStale = existing !== agentsMdExpected;
|
|
155
|
+
} catch {
|
|
156
|
+
agentsMdStale = true; // 缺失视为漂移
|
|
157
|
+
}
|
|
158
|
+
}
|
|
159
|
+
const hasAgentsIssues = options.agents === true && agentsMdStale;
|
|
160
|
+
|
|
143
161
|
const hasTableIssues = result.added.length > 0 || result.removed.length > 0;
|
|
144
162
|
const hasCapIssues = capCountMismatches.length > 0;
|
|
145
163
|
const hasContextIssues = result.contextMissing.length > 0 || result.contextStale.length > 0;
|
|
146
|
-
const hasIssues = hasTableIssues || hasCapIssues || hasContextIssues;
|
|
164
|
+
const hasIssues = hasTableIssues || hasCapIssues || hasContextIssues || hasAgentsIssues;
|
|
147
165
|
|
|
148
166
|
// 5. JSON 输出模式:结构化输出供 LLM 消费
|
|
149
167
|
if (isJson) {
|
|
@@ -203,6 +221,17 @@ export async function syncDocs(options: SyncDocsOptions): Promise<boolean> {
|
|
|
203
221
|
);
|
|
204
222
|
}
|
|
205
223
|
|
|
224
|
+
if (options.agents) {
|
|
225
|
+
jsonOutput.agentsMd = { file: 'AGENTS.md', exists: agentsMdExists, stale: agentsMdStale };
|
|
226
|
+
if (agentsMdStale) {
|
|
227
|
+
(jsonOutput.resolution as Array<Record<string, unknown>>).push({
|
|
228
|
+
action: 'sync-agents-md',
|
|
229
|
+
command: 'harness sync-docs --agents',
|
|
230
|
+
details: '生成/更新 AGENTS.md(agent 导读)',
|
|
231
|
+
});
|
|
232
|
+
}
|
|
233
|
+
}
|
|
234
|
+
|
|
206
235
|
console.log(JSON.stringify(jsonOutput, null, 2));
|
|
207
236
|
return !hasIssues;
|
|
208
237
|
}
|
|
@@ -233,6 +262,15 @@ export async function syncDocs(options: SyncDocsOptions): Promise<boolean> {
|
|
|
233
262
|
result.contextStale.forEach(d => console.log(chalk.gray(` - ${d}/CONTEXT.md`)));
|
|
234
263
|
}
|
|
235
264
|
|
|
265
|
+
if (hasAgentsIssues) {
|
|
266
|
+
console.log(
|
|
267
|
+
chalk.yellow(agentsMdExists
|
|
268
|
+
? `\n🤖 AGENTS.md 与当前项目状态不一致:`
|
|
269
|
+
: `\n🤖 缺少 AGENTS.md(agent 导读):`)
|
|
270
|
+
);
|
|
271
|
+
console.log(chalk.gray(` - AGENTS.md`));
|
|
272
|
+
}
|
|
273
|
+
|
|
236
274
|
if (!hasIssues) {
|
|
237
275
|
console.log(chalk.green('✅ 所有文档都是最新的'));
|
|
238
276
|
return true;
|
|
@@ -261,6 +299,11 @@ export async function syncDocs(options: SyncDocsOptions): Promise<boolean> {
|
|
|
261
299
|
console.log(chalk.green(`✅ 已创建 ${dir}/CONTEXT.md`));
|
|
262
300
|
}
|
|
263
301
|
|
|
302
|
+
if (hasAgentsIssues && agentsMdExpected !== null) {
|
|
303
|
+
await fs.writeFile(path.join(projectPath, 'AGENTS.md'), agentsMdExpected, 'utf-8');
|
|
304
|
+
console.log(chalk.green(agentsMdExists ? `✅ 已更新 AGENTS.md` : `✅ 已生成 AGENTS.md`));
|
|
305
|
+
}
|
|
306
|
+
|
|
264
307
|
return !hasIssues;
|
|
265
308
|
}
|
|
266
309
|
|
|
@@ -741,3 +784,314 @@ function updateCapabilityCounts(content: string, projectPath: string): string {
|
|
|
741
784
|
return content;
|
|
742
785
|
}
|
|
743
786
|
|
|
787
|
+
|
|
788
|
+
// ========================================
|
|
789
|
+
// AGENTS.md 生成(--agents)
|
|
790
|
+
// ========================================
|
|
791
|
+
|
|
792
|
+
/** 生成 AGENTS.md 目录结构表时跳过的目录(依赖/构建产物/报告等) */
|
|
793
|
+
const AGENTS_MD_SKIP_DIRS = new Set([
|
|
794
|
+
'node_modules', 'dist', 'build', 'out', 'coverage',
|
|
795
|
+
'playwright-report', 'test-results', '.git', '.next', '.turbo',
|
|
796
|
+
]);
|
|
797
|
+
|
|
798
|
+
/** 知名顶层目录的一句话说明 */
|
|
799
|
+
const AGENTS_MD_DIR_ROLES: Record<string, string> = {
|
|
800
|
+
docs: '项目文档',
|
|
801
|
+
scripts: '工具脚本',
|
|
802
|
+
tests: '测试',
|
|
803
|
+
test: '测试',
|
|
804
|
+
bin: '可执行入口/脚本',
|
|
805
|
+
templates: '项目模板',
|
|
806
|
+
'.github': 'CI/CD 配置',
|
|
807
|
+
'.harness': 'harness 配置与运行时状态',
|
|
808
|
+
};
|
|
809
|
+
|
|
810
|
+
/** 常用命令候选(按展示顺序),仅列出 package.json 中实际存在的脚本 */
|
|
811
|
+
const AGENTS_MD_COMMANDS: Array<[string, string]> = [
|
|
812
|
+
['dev', '启动开发环境'],
|
|
813
|
+
['build', '构建'],
|
|
814
|
+
['test', '运行测试'],
|
|
815
|
+
['test:e2e', '端到端测试'],
|
|
816
|
+
['test:unit', '单元测试'],
|
|
817
|
+
['typecheck', '类型检查'],
|
|
818
|
+
['lint', '代码检查'],
|
|
819
|
+
['start', '启动生产服务'],
|
|
820
|
+
];
|
|
821
|
+
|
|
822
|
+
interface PackageJsonLite {
|
|
823
|
+
name?: string;
|
|
824
|
+
description?: string;
|
|
825
|
+
scripts?: Record<string, string>;
|
|
826
|
+
}
|
|
827
|
+
|
|
828
|
+
interface GovernanceInfo {
|
|
829
|
+
hasConfig: boolean;
|
|
830
|
+
preset?: string;
|
|
831
|
+
hasClaudeGovernance: boolean;
|
|
832
|
+
ironLaws?: number;
|
|
833
|
+
guidelines?: number;
|
|
834
|
+
}
|
|
835
|
+
|
|
836
|
+
/**
|
|
837
|
+
* 生成 AGENTS.md 内容(agent 导读:项目简介/目录结构/常用命令/约束治理/知识入口)
|
|
838
|
+
*
|
|
839
|
+
* 纯静态提取(零 LLM),确定性输出:同一代码库状态生成同一内容(无时间戳),
|
|
840
|
+
* 因此重跑幂等,--check 可直接用文本对比检测漂移。
|
|
841
|
+
*/
|
|
842
|
+
async function buildAgentsMd(projectPath: string, srcDirs: string[]): Promise<string> {
|
|
843
|
+
const pkg = await readPackageJsonLite(projectPath);
|
|
844
|
+
const [dirs, governance, knowledgeCount, contextDocCount] = await Promise.all([
|
|
845
|
+
getTopLevelDirEntries(projectPath, srcDirs),
|
|
846
|
+
getGovernanceInfo(projectPath),
|
|
847
|
+
countKnowledgeEntries(projectPath),
|
|
848
|
+
countContextDocs(projectPath, srcDirs),
|
|
849
|
+
]);
|
|
850
|
+
|
|
851
|
+
const name = pkg?.name || path.basename(projectPath);
|
|
852
|
+
const description = pkg?.description || await getConfigDescription(projectPath);
|
|
853
|
+
|
|
854
|
+
const lines: string[] = [
|
|
855
|
+
'# AGENTS.md',
|
|
856
|
+
'',
|
|
857
|
+
'> 本文件由 `harness sync-docs --agents` 自动生成,请勿手改。内容漂移时重新运行该命令更新。',
|
|
858
|
+
'',
|
|
859
|
+
'## 项目简介',
|
|
860
|
+
'',
|
|
861
|
+
description ? `**${name}** — ${description}` : `**${name}**`,
|
|
862
|
+
'',
|
|
863
|
+
'## 目录结构',
|
|
864
|
+
'',
|
|
865
|
+
];
|
|
866
|
+
|
|
867
|
+
if (dirs.length > 0) {
|
|
868
|
+
lines.push('| 目录 | 说明 |', '|------|------|');
|
|
869
|
+
for (const d of dirs) {
|
|
870
|
+
lines.push(`| \`${d.dir}/\` | ${d.role} |`);
|
|
871
|
+
}
|
|
872
|
+
} else {
|
|
873
|
+
lines.push('(未检测到顶层目录)');
|
|
874
|
+
}
|
|
875
|
+
|
|
876
|
+
lines.push('', '## 常用命令', '');
|
|
877
|
+
const pm = detectPackageManager(projectPath);
|
|
878
|
+
const scripts = pkg?.scripts || {};
|
|
879
|
+
const commands = AGENTS_MD_COMMANDS.filter(([n]) => scripts[n]);
|
|
880
|
+
if (commands.length > 0) {
|
|
881
|
+
lines.push('```bash');
|
|
882
|
+
for (const [n, comment] of commands) {
|
|
883
|
+
lines.push(`${formatScriptCommand(pm, n)} # ${comment}`);
|
|
884
|
+
}
|
|
885
|
+
lines.push('```');
|
|
886
|
+
} else {
|
|
887
|
+
lines.push('(package.json 中未检测到常用脚本)');
|
|
888
|
+
}
|
|
889
|
+
|
|
890
|
+
lines.push('', '## 约束与治理', '');
|
|
891
|
+
if (governance.hasConfig) {
|
|
892
|
+
lines.push(`- 治理配置:\`.harness/config.yml\`${governance.preset ? `(preset: ${governance.preset})` : ''}`);
|
|
893
|
+
}
|
|
894
|
+
if (governance.hasClaudeGovernance) {
|
|
895
|
+
const counts = [
|
|
896
|
+
governance.ironLaws !== undefined ? `Iron Laws ${governance.ironLaws} 条` : null,
|
|
897
|
+
governance.guidelines !== undefined ? `Guidelines ${governance.guidelines} 条` : null,
|
|
898
|
+
].filter(Boolean).join('、');
|
|
899
|
+
lines.push(`- 约束清单:\`CLAUDE.md\` Governance Rules 块${counts ? `(${counts})` : ''}`);
|
|
900
|
+
}
|
|
901
|
+
if (!governance.hasConfig && !governance.hasClaudeGovernance) {
|
|
902
|
+
lines.push('- 未检测到 harness 治理配置,可运行 `harness init` 初始化');
|
|
903
|
+
}
|
|
904
|
+
|
|
905
|
+
lines.push('', '## 知识入口', '');
|
|
906
|
+
if (knowledgeCount !== null) {
|
|
907
|
+
lines.push(`- \`.harness/knowledge/\`:项目知识库(${knowledgeCount} 条),用 \`harness knowledge\` 查询`);
|
|
908
|
+
}
|
|
909
|
+
lines.push(
|
|
910
|
+
contextDocCount > 0
|
|
911
|
+
? `- 各源码目录的 \`CONTEXT.md\` 是权威模块文档(现有 ${contextDocCount} 个),改动代码时同步更新`
|
|
912
|
+
: '- 各源码目录的 `CONTEXT.md` 是权威模块文档,缺失目录可由 `harness sync-docs` 生成模板'
|
|
913
|
+
);
|
|
914
|
+
lines.push('');
|
|
915
|
+
|
|
916
|
+
return lines.join('\n');
|
|
917
|
+
}
|
|
918
|
+
|
|
919
|
+
/** 读取 package.json(不存在或无法解析时返回 null) */
|
|
920
|
+
async function readPackageJsonLite(dir: string): Promise<PackageJsonLite | null> {
|
|
921
|
+
try {
|
|
922
|
+
return JSON.parse(await fs.readFile(path.join(dir, 'package.json'), 'utf-8')) as PackageJsonLite;
|
|
923
|
+
} catch {
|
|
924
|
+
return null;
|
|
925
|
+
}
|
|
926
|
+
}
|
|
927
|
+
|
|
928
|
+
/** 从 .harness/config.yml 读取项目描述(package.json 无 description 时的兜底) */
|
|
929
|
+
async function getConfigDescription(projectPath: string): Promise<string> {
|
|
930
|
+
try {
|
|
931
|
+
const content = await fs.readFile(path.join(projectPath, '.harness', 'config.yml'), 'utf-8');
|
|
932
|
+
const config = yaml.load(content) as Record<string, unknown> | undefined;
|
|
933
|
+
return typeof config?.description === 'string' ? config.description : '';
|
|
934
|
+
} catch {
|
|
935
|
+
return '';
|
|
936
|
+
}
|
|
937
|
+
}
|
|
938
|
+
|
|
939
|
+
/** 检测包管理器(决定命令前缀):pnpm workspace/lockfile → yarn lockfile → 默认 npm */
|
|
940
|
+
function detectPackageManager(projectPath: string): 'pnpm' | 'yarn' | 'npm' {
|
|
941
|
+
if (existsSync(path.join(projectPath, 'pnpm-workspace.yaml')) || existsSync(path.join(projectPath, 'pnpm-lock.yaml'))) {
|
|
942
|
+
return 'pnpm';
|
|
943
|
+
}
|
|
944
|
+
if (existsSync(path.join(projectPath, 'yarn.lock'))) return 'yarn';
|
|
945
|
+
return 'npm';
|
|
946
|
+
}
|
|
947
|
+
|
|
948
|
+
/** 格式化脚本调用方式(npm 的 start/test 可省略 run) */
|
|
949
|
+
function formatScriptCommand(pm: 'pnpm' | 'yarn' | 'npm', name: string): string {
|
|
950
|
+
if (pm === 'pnpm') return `pnpm ${name}`;
|
|
951
|
+
if (pm === 'yarn') return `yarn ${name}`;
|
|
952
|
+
return name === 'start' || name === 'test' ? `npm ${name}` : `npm run ${name}`;
|
|
953
|
+
}
|
|
954
|
+
|
|
955
|
+
/** 收集顶层目录及其一句话说明(排序保证确定性) */
|
|
956
|
+
async function getTopLevelDirEntries(
|
|
957
|
+
projectPath: string,
|
|
958
|
+
srcDirs: string[]
|
|
959
|
+
): Promise<Array<{ dir: string; role: string }>> {
|
|
960
|
+
let dirents: import('fs').Dirent[];
|
|
961
|
+
try {
|
|
962
|
+
dirents = await fs.readdir(projectPath, { withFileTypes: true });
|
|
963
|
+
} catch {
|
|
964
|
+
return [];
|
|
965
|
+
}
|
|
966
|
+
|
|
967
|
+
const entries: Array<{ dir: string; role: string }> = [];
|
|
968
|
+
for (const d of dirents) {
|
|
969
|
+
if (!d.isDirectory()) continue;
|
|
970
|
+
if (AGENTS_MD_SKIP_DIRS.has(d.name)) continue;
|
|
971
|
+
// 隐藏目录只保留 .harness / .github
|
|
972
|
+
if (d.name.startsWith('.') && d.name !== '.harness' && d.name !== '.github') continue;
|
|
973
|
+
entries.push({ dir: d.name, role: await describeTopLevelDir(projectPath, d.name, srcDirs) });
|
|
974
|
+
}
|
|
975
|
+
entries.sort((a, b) => (a.dir < b.dir ? -1 : a.dir > b.dir ? 1 : 0));
|
|
976
|
+
return entries;
|
|
977
|
+
}
|
|
978
|
+
|
|
979
|
+
/** 顶层目录的一句话说明:知名目录 → monorepo 成员 → 源码根 → 子包 description → 占位 */
|
|
980
|
+
async function describeTopLevelDir(projectPath: string, dir: string, srcDirs: string[]): Promise<string> {
|
|
981
|
+
const known = AGENTS_MD_DIR_ROLES[dir];
|
|
982
|
+
if (known) return known;
|
|
983
|
+
|
|
984
|
+
if (dir === 'apps' || dir === 'packages') {
|
|
985
|
+
const members = await listWorkspaceMembers(path.join(projectPath, dir));
|
|
986
|
+
if (members.length > 0) {
|
|
987
|
+
return `monorepo ${dir === 'apps' ? '应用' : '共享包'}:${members.join('、')}`;
|
|
988
|
+
}
|
|
989
|
+
return 'monorepo 工作区';
|
|
990
|
+
}
|
|
991
|
+
|
|
992
|
+
if (srcDirs.includes(dir)) return '源码目录';
|
|
993
|
+
|
|
994
|
+
const subPkg = await readPackageJsonLite(path.join(projectPath, dir));
|
|
995
|
+
if (subPkg?.description) return subPkg.description;
|
|
996
|
+
|
|
997
|
+
return '—';
|
|
998
|
+
}
|
|
999
|
+
|
|
1000
|
+
/** 列出 monorepo 工作区成员(含 package.json 的子目录名,排序) */
|
|
1001
|
+
async function listWorkspaceMembers(dir: string): Promise<string[]> {
|
|
1002
|
+
try {
|
|
1003
|
+
const dirents = await fs.readdir(dir, { withFileTypes: true });
|
|
1004
|
+
const members: string[] = [];
|
|
1005
|
+
for (const d of dirents) {
|
|
1006
|
+
if (!d.isDirectory() || d.name.startsWith('.')) continue;
|
|
1007
|
+
if (existsSync(path.join(dir, d.name, 'package.json'))) {
|
|
1008
|
+
members.push(d.name);
|
|
1009
|
+
}
|
|
1010
|
+
}
|
|
1011
|
+
return members.sort();
|
|
1012
|
+
} catch {
|
|
1013
|
+
return [];
|
|
1014
|
+
}
|
|
1015
|
+
}
|
|
1016
|
+
|
|
1017
|
+
/** 收集治理信息:.harness/config.yml 与 CLAUDE.md 治理块(含铁律/指南计数) */
|
|
1018
|
+
async function getGovernanceInfo(projectPath: string): Promise<GovernanceInfo> {
|
|
1019
|
+
const info: GovernanceInfo = { hasConfig: false, hasClaudeGovernance: false };
|
|
1020
|
+
|
|
1021
|
+
try {
|
|
1022
|
+
const content = await fs.readFile(path.join(projectPath, '.harness', 'config.yml'), 'utf-8');
|
|
1023
|
+
const config = yaml.load(content) as Record<string, unknown> | undefined;
|
|
1024
|
+
info.hasConfig = true;
|
|
1025
|
+
if (config && typeof config.preset === 'string') {
|
|
1026
|
+
info.preset = config.preset;
|
|
1027
|
+
}
|
|
1028
|
+
} catch {
|
|
1029
|
+
// 配置不存在
|
|
1030
|
+
}
|
|
1031
|
+
|
|
1032
|
+
try {
|
|
1033
|
+
const claude = await fs.readFile(path.join(projectPath, 'CLAUDE.md'), 'utf-8');
|
|
1034
|
+
if (/^##\s+Governance Rules/m.test(claude) || claude.includes('HARNESS_CONSTRAINTS_START')) {
|
|
1035
|
+
info.hasClaudeGovernance = true;
|
|
1036
|
+
info.ironLaws = countConstraintBullets(claude, 'Iron Laws');
|
|
1037
|
+
info.guidelines = countConstraintBullets(claude, 'Guidelines');
|
|
1038
|
+
}
|
|
1039
|
+
} catch {
|
|
1040
|
+
// CLAUDE.md 不存在
|
|
1041
|
+
}
|
|
1042
|
+
|
|
1043
|
+
return info;
|
|
1044
|
+
}
|
|
1045
|
+
|
|
1046
|
+
/** 统计 CLAUDE.md 指定约束分节下的条目数(`- **key**:` 行),分节不存在时返回 undefined */
|
|
1047
|
+
function countConstraintBullets(content: string, section: string): number | undefined {
|
|
1048
|
+
const heading = new RegExp(`^###\\s+${section}[^\\n]*$`, 'm').exec(content);
|
|
1049
|
+
if (!heading) return undefined;
|
|
1050
|
+
const rest = content.slice(heading.index + heading[0].length);
|
|
1051
|
+
const end = rest.search(/^###\s|^\s*<!--\s*HARNESS_CONSTRAINTS_END/m);
|
|
1052
|
+
const block = end === -1 ? rest : rest.slice(0, end);
|
|
1053
|
+
const items = block.match(/^-\s+\*\*[A-Za-z0-9_]+\*\*/gm);
|
|
1054
|
+
return items ? items.length : 0;
|
|
1055
|
+
}
|
|
1056
|
+
|
|
1057
|
+
/** 统计 .harness/knowledge 下的知识条目数(.md 文件),目录不存在时返回 null */
|
|
1058
|
+
async function countKnowledgeEntries(projectPath: string): Promise<number | null> {
|
|
1059
|
+
try {
|
|
1060
|
+
const files = await fs.readdir(path.join(projectPath, '.harness', 'knowledge'));
|
|
1061
|
+
return files.filter(f => f.endsWith('.md')).length;
|
|
1062
|
+
} catch {
|
|
1063
|
+
return null;
|
|
1064
|
+
}
|
|
1065
|
+
}
|
|
1066
|
+
|
|
1067
|
+
/** 统计源码根内的 CONTEXT.md 数量(含源码根本身,跨根去重) */
|
|
1068
|
+
async function countContextDocs(projectPath: string, srcDirs: string[]): Promise<number> {
|
|
1069
|
+
const found = new Set<string>();
|
|
1070
|
+
|
|
1071
|
+
async function scan(dir: string): Promise<void> {
|
|
1072
|
+
let entries: import('fs').Dirent[];
|
|
1073
|
+
try {
|
|
1074
|
+
entries = await fs.readdir(dir, { withFileTypes: true });
|
|
1075
|
+
} catch {
|
|
1076
|
+
return;
|
|
1077
|
+
}
|
|
1078
|
+
for (const entry of entries) {
|
|
1079
|
+
if (!entry.isDirectory()) continue;
|
|
1080
|
+
if (entry.name === 'node_modules' || entry.name === '__tests__' || entry.name === 'dist') continue;
|
|
1081
|
+
const entryPath = path.join(dir, entry.name);
|
|
1082
|
+
if (existsSync(path.join(entryPath, 'CONTEXT.md'))) {
|
|
1083
|
+
found.add(entryPath);
|
|
1084
|
+
}
|
|
1085
|
+
await scan(entryPath);
|
|
1086
|
+
}
|
|
1087
|
+
}
|
|
1088
|
+
|
|
1089
|
+
for (const root of srcDirs) {
|
|
1090
|
+
const rootPath = path.join(projectPath, root);
|
|
1091
|
+
if (existsSync(path.join(rootPath, 'CONTEXT.md'))) {
|
|
1092
|
+
found.add(rootPath);
|
|
1093
|
+
}
|
|
1094
|
+
await scan(rootPath);
|
|
1095
|
+
}
|
|
1096
|
+
return found.size;
|
|
1097
|
+
}
|