@dommaker/harness 0.14.0 → 0.16.1

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.
Files changed (168) hide show
  1. package/CHANGELOG.md +11 -0
  2. package/bin/harness.js +71 -0
  3. package/dist/cli/commands/doc-freshness-check.d.ts +53 -0
  4. package/dist/cli/commands/doc-freshness-check.d.ts.map +1 -0
  5. package/dist/cli/commands/doc-freshness-check.js +366 -0
  6. package/dist/cli/commands/doc-freshness-check.js.map +1 -0
  7. package/dist/cli/commands/index.d.ts +4 -1
  8. package/dist/cli/commands/index.d.ts.map +1 -1
  9. package/dist/cli/commands/index.js +13 -1
  10. package/dist/cli/commands/index.js.map +1 -1
  11. package/dist/cli/commands/knowledge.d.ts +12 -0
  12. package/dist/cli/commands/knowledge.d.ts.map +1 -1
  13. package/dist/cli/commands/knowledge.js +140 -6
  14. package/dist/cli/commands/knowledge.js.map +1 -1
  15. package/dist/cli/commands/release.d.ts +11 -0
  16. package/dist/cli/commands/release.d.ts.map +1 -1
  17. package/dist/cli/commands/release.js +80 -12
  18. package/dist/cli/commands/release.js.map +1 -1
  19. package/dist/cli/commands/sdd.d.ts +8 -0
  20. package/dist/cli/commands/sdd.d.ts.map +1 -0
  21. package/dist/cli/commands/sdd.js +68 -0
  22. package/dist/cli/commands/sdd.js.map +1 -0
  23. package/dist/cli/commands/spec-baseline-check.d.ts +30 -0
  24. package/dist/cli/commands/spec-baseline-check.d.ts.map +1 -0
  25. package/dist/cli/commands/spec-baseline-check.js +366 -0
  26. package/dist/cli/commands/spec-baseline-check.js.map +1 -0
  27. package/dist/core/constraints/checker.js +1 -1
  28. package/dist/core/constraints/checker.js.map +1 -1
  29. package/dist/core/constraints/definitions.d.ts.map +1 -1
  30. package/dist/core/constraints/definitions.js +30 -24
  31. package/dist/core/constraints/definitions.js.map +1 -1
  32. package/dist/knowledge/audit.d.ts +1 -1
  33. package/dist/knowledge/audit.d.ts.map +1 -1
  34. package/dist/knowledge/audit.js +60 -8
  35. package/dist/knowledge/audit.js.map +1 -1
  36. package/dist/knowledge/doctor.d.ts +1 -1
  37. package/dist/knowledge/doctor.d.ts.map +1 -1
  38. package/dist/knowledge/import.d.ts +1 -1
  39. package/dist/knowledge/import.d.ts.map +1 -1
  40. package/dist/knowledge/index-generator.d.ts +36 -0
  41. package/dist/knowledge/index-generator.d.ts.map +1 -0
  42. package/dist/knowledge/index-generator.js +241 -0
  43. package/dist/knowledge/index-generator.js.map +1 -0
  44. package/dist/knowledge/index.d.ts +4 -1
  45. package/dist/knowledge/index.d.ts.map +1 -1
  46. package/dist/knowledge/index.js +4 -2
  47. package/dist/knowledge/index.js.map +1 -1
  48. package/dist/knowledge/ingest.d.ts +1 -1
  49. package/dist/knowledge/ingest.d.ts.map +1 -1
  50. package/dist/knowledge/ingest.js +2 -2
  51. package/dist/knowledge/ingest.js.map +1 -1
  52. package/dist/knowledge/lifecycle-hooks.d.ts +1 -1
  53. package/dist/knowledge/lifecycle-hooks.d.ts.map +1 -1
  54. package/dist/knowledge/lifecycle.d.ts +16 -1
  55. package/dist/knowledge/lifecycle.d.ts.map +1 -1
  56. package/dist/knowledge/lifecycle.js +70 -0
  57. package/dist/knowledge/lifecycle.js.map +1 -1
  58. package/dist/knowledge/lint.d.ts +1 -1
  59. package/dist/knowledge/lint.d.ts.map +1 -1
  60. package/dist/knowledge/lint.js +4 -4
  61. package/dist/knowledge/lint.js.map +1 -1
  62. package/dist/knowledge/primitives/code-structure.d.ts +37 -0
  63. package/dist/knowledge/primitives/code-structure.d.ts.map +1 -0
  64. package/dist/knowledge/primitives/code-structure.js +168 -0
  65. package/dist/knowledge/primitives/code-structure.js.map +1 -0
  66. package/dist/knowledge/query.d.ts +1 -1
  67. package/dist/knowledge/query.d.ts.map +1 -1
  68. package/dist/knowledge/reference-tracker.d.ts +1 -1
  69. package/dist/knowledge/reference-tracker.d.ts.map +1 -1
  70. package/dist/knowledge/store.d.ts +29 -2
  71. package/dist/knowledge/store.d.ts.map +1 -1
  72. package/dist/knowledge/store.js +10 -5
  73. package/dist/knowledge/store.js.map +1 -1
  74. package/dist/knowledge/types.d.ts +17 -1
  75. package/dist/knowledge/types.d.ts.map +1 -1
  76. package/dist/knowledge/types.js.map +1 -1
  77. package/dist/monitoring/knowledge-evolver.d.ts +1 -1
  78. package/dist/monitoring/knowledge-evolver.d.ts.map +1 -1
  79. package/dist/sdd/index-generator.d.ts +22 -0
  80. package/dist/sdd/index-generator.d.ts.map +1 -0
  81. package/dist/sdd/index-generator.js +118 -0
  82. package/dist/sdd/index-generator.js.map +1 -0
  83. package/dist/types/constraint.d.ts +1 -1
  84. package/dist/types/constraint.d.ts.map +1 -1
  85. package/package.json +1 -1
  86. package/src/__tests__/checker.test.ts +4 -4
  87. package/src/cli/commands/__tests__/doc-freshness-check.test.ts +168 -0
  88. package/src/cli/commands/__tests__/knowledge.test.ts +70 -2
  89. package/src/cli/commands/__tests__/spec-baseline-check.test.ts +235 -0
  90. package/src/cli/commands/doc-freshness-check.ts +397 -0
  91. package/src/cli/commands/index.ts +4 -1
  92. package/src/cli/commands/knowledge.ts +151 -1
  93. package/src/cli/commands/release.ts +86 -12
  94. package/src/cli/commands/sdd.ts +44 -0
  95. package/src/cli/commands/spec-baseline-check.ts +384 -0
  96. package/src/context/__tests__/knowledge-injector.test.ts +1 -1
  97. package/src/core/constraints/checker.ts +1 -1
  98. package/src/core/constraints/definitions.ts +31 -25
  99. package/src/knowledge/__tests__/audit.test.ts +57 -1
  100. package/src/knowledge/__tests__/doctor.test.ts +1 -1
  101. package/src/knowledge/__tests__/import.test.ts +1 -1
  102. package/src/knowledge/__tests__/index-generator.test.ts +335 -0
  103. package/src/knowledge/__tests__/ingest.test.ts +1 -1
  104. package/src/knowledge/__tests__/lifecycle-hooks.test.ts +1 -1
  105. package/src/knowledge/__tests__/lifecycle.test.ts +1 -1
  106. package/src/knowledge/__tests__/lint.test.ts +1 -1
  107. package/src/knowledge/__tests__/query.test.ts +1 -1
  108. package/src/knowledge/__tests__/reference-tracker.test.ts +1 -1
  109. package/src/knowledge/__tests__/store.test.ts +1 -1
  110. package/src/knowledge/audit.ts +67 -10
  111. package/src/knowledge/doctor.ts +1 -1
  112. package/src/knowledge/import.ts +1 -1
  113. package/src/knowledge/index-generator.ts +233 -0
  114. package/src/knowledge/index.ts +4 -1
  115. package/src/knowledge/ingest.ts +3 -3
  116. package/src/knowledge/lifecycle-hooks.ts +1 -1
  117. package/src/knowledge/lifecycle.ts +72 -1
  118. package/src/knowledge/lint.ts +5 -5
  119. package/src/knowledge/primitives/__tests__/code-structure.test.ts +120 -0
  120. package/src/knowledge/primitives/code-structure.ts +161 -0
  121. package/src/knowledge/query.ts +1 -1
  122. package/src/knowledge/reference-tracker.ts +1 -1
  123. package/src/knowledge/store.ts +27 -4
  124. package/src/knowledge/types.ts +21 -1
  125. package/src/monitoring/knowledge-evolver.ts +1 -1
  126. package/src/sdd/__tests__/index-generator.test.ts +150 -0
  127. package/src/sdd/index-generator.ts +109 -0
  128. package/src/types/constraint.ts +1 -1
  129. package/dist/cli/commands/diagnose.d.ts +0 -16
  130. package/dist/cli/commands/diagnose.d.ts.map +0 -1
  131. package/dist/cli/commands/diagnose.js +0 -195
  132. package/dist/cli/commands/diagnose.js.map +0 -1
  133. package/dist/cli/commands/propose.d.ts +0 -18
  134. package/dist/cli/commands/propose.d.ts.map +0 -1
  135. package/dist/cli/commands/propose.js +0 -331
  136. package/dist/cli/commands/propose.js.map +0 -1
  137. package/dist/cli/commands/traces.d.ts +0 -15
  138. package/dist/cli/commands/traces.d.ts.map +0 -1
  139. package/dist/cli/commands/traces.js +0 -167
  140. package/dist/cli/commands/traces.js.map +0 -1
  141. package/dist/constraints/definitions.d.ts +0 -39
  142. package/dist/constraints/definitions.d.ts.map +0 -1
  143. package/dist/constraints/definitions.js +0 -71
  144. package/dist/constraints/definitions.js.map +0 -1
  145. package/dist/constraints/quality.d.ts +0 -11
  146. package/dist/constraints/quality.d.ts.map +0 -1
  147. package/dist/constraints/quality.js +0 -257
  148. package/dist/constraints/quality.js.map +0 -1
  149. package/dist/constraints/safety.d.ts +0 -13
  150. package/dist/constraints/safety.d.ts.map +0 -1
  151. package/dist/constraints/safety.js +0 -103
  152. package/dist/constraints/safety.js.map +0 -1
  153. package/dist/extensions/long-running/constraints.d.ts +0 -38
  154. package/dist/extensions/long-running/constraints.d.ts.map +0 -1
  155. package/dist/extensions/long-running/constraints.js +0 -153
  156. package/dist/extensions/long-running/constraints.js.map +0 -1
  157. package/dist/extensions/long-running/index.d.ts +0 -30
  158. package/dist/extensions/long-running/index.d.ts.map +0 -1
  159. package/dist/extensions/long-running/index.js +0 -50
  160. package/dist/extensions/long-running/index.js.map +0 -1
  161. package/dist/extensions/long-running/types.d.ts +0 -154
  162. package/dist/extensions/long-running/types.d.ts.map +0 -1
  163. package/dist/extensions/long-running/types.js +0 -9
  164. package/dist/extensions/long-running/types.js.map +0 -1
  165. package/dist/presets/long-running.d.ts +0 -33
  166. package/dist/presets/long-running.d.ts.map +0 -1
  167. package/dist/presets/long-running.js +0 -52
  168. package/dist/presets/long-running.js.map +0 -1
package/CHANGELOG.md CHANGED
@@ -4,6 +4,17 @@ All notable changes to this project will be documented in this file.
4
4
 
5
5
  The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/).
6
6
 
7
+ ## [0.16.0] - 2026-06-10
8
+
9
+ ### Changed
10
+ - **prefer_worktree demoted to guideline**: `prefer_worktree` moved from iron_law to guideline severity — worktree usage is now recommended, not enforced
11
+ - **KnowledgeStore interface extracted**: `FileKnowledgeStore` implements `KnowledgeStore` interface, enabling mock/testing and future alternative implementations
12
+
13
+ ## [0.15.0] - 2026-06-07
14
+
15
+ ### Changed
16
+ - Internal release (constraint tier adjustment prep)
17
+
7
18
  ## [0.14.0] - 2026-06-04
8
19
 
9
20
  ### Added
package/bin/harness.js CHANGED
@@ -42,6 +42,8 @@ const {
42
42
  knowledgeAudit,
43
43
  knowledgeSnapshot,
44
44
  knowledgeMigrate,
45
+ knowledgeHealth,
46
+ knowledgeIndex,
45
47
  failureList,
46
48
  failureStats,
47
49
  failureClear,
@@ -50,6 +52,9 @@ const {
50
52
  updateUserModel,
51
53
  release,
52
54
  constraints,
55
+ docFreshnessCheck,
56
+ specBaselineCheck,
57
+ sddIndex,
53
58
  } = require('../dist/cli/commands/index');
54
59
 
55
60
  const program = new Command();
@@ -431,6 +436,14 @@ program
431
436
  case 'migrate':
432
437
  knowledgeMigrate({ ...opts, dir: options.dir });
433
438
  break;
439
+ case 'index':
440
+ case 'idx':
441
+ knowledgeIndex({ ...opts, dir: options.dir });
442
+ break;
443
+ case 'health':
444
+ case 'h':
445
+ await knowledgeHealth({ ...opts, dir: options.dir });
446
+ break;
434
447
  default:
435
448
  // 无子命令时显示帮助
436
449
  if (!subcommand) {
@@ -442,6 +455,32 @@ program
442
455
  }
443
456
  });
444
457
 
458
+ // ========================================
459
+ // harness sdd
460
+ // ========================================
461
+ program
462
+ .command('sdd [subcommand]')
463
+ .description('SDD 管理(index)')
464
+ .option('-p, --project-path <path>', '项目路径')
465
+ .option('--dir <dir>', '指定基础目录')
466
+ .option('--json', 'JSON 输出')
467
+ .action(async (subcommand, options) => {
468
+ const opts = { projectPath: options.projectPath, json: options.json };
469
+ switch (subcommand) {
470
+ case 'index':
471
+ case 'idx':
472
+ sddIndex({ ...opts, dir: options.dir });
473
+ break;
474
+ default:
475
+ if (!subcommand) {
476
+ program.commands.find(c => c.name() === 'sdd').help();
477
+ } else {
478
+ console.error(`未知子命令: ${subcommand}`);
479
+ process.exit(1);
480
+ }
481
+ }
482
+ });
483
+
445
484
  // ========================================
446
485
  // harness failure
447
486
  // ========================================
@@ -539,5 +578,37 @@ program
539
578
  await constraints(options);
540
579
  });
541
580
 
581
+ // ========================================
582
+ // harness doc-freshness-check
583
+ // ========================================
584
+ program
585
+ .command('doc-freshness-check <docPath>')
586
+ .description('检查文档声明的新鲜度:提取可验证声明,与代码对照')
587
+ .option('--changed-files <list>', '变更文件列表(逗号分隔)')
588
+ .option('--format <format>', '输出格式 (table/json)', 'table')
589
+ .option('-p, --project-path <path>', '项目路径')
590
+ .action(async (docPath, options) => {
591
+ await docFreshnessCheck(docPath, {
592
+ changedFiles: options.changedFiles,
593
+ format: options.format,
594
+ projectPath: options.projectPath,
595
+ });
596
+ });
597
+
598
+ // ========================================
599
+ // harness spec-baseline-check
600
+ // ========================================
601
+ program
602
+ .command('spec-baseline-check <specPath>')
603
+ .description('验证 spec 文件的前置条件是否满足')
604
+ .option('-p, --project-path <path>', '项目路径')
605
+ .option('--json', '输出 JSON 格式', false)
606
+ .action(async (specPath, options) => {
607
+ await specBaselineCheck(specPath, {
608
+ projectPath: options.projectPath,
609
+ json: options.json,
610
+ });
611
+ });
612
+
542
613
  // 解析命令行参数
543
614
  program.parse();
@@ -0,0 +1,53 @@
1
+ /**
2
+ * harness doc-freshness-check 命令
3
+ *
4
+ * 从文档中提取可验证的声明(claims),与代码/文件系统对照,输出差异。
5
+ * 纯代码操作,零 LLM 调用。
6
+ */
7
+ export interface DocFreshnessCheckOptions {
8
+ /** 输出 JSON 格式 */
9
+ format?: 'json' | 'table';
10
+ /** 变更文件列表(逗号分隔),用于聚焦检查 */
11
+ changedFiles?: string;
12
+ /** 项目路径 */
13
+ projectPath?: string;
14
+ }
15
+ /** 声明类型 */
16
+ export type ClaimType = 'numeric' | 'list' | 'status' | 'narrative';
17
+ /** 单条声明 */
18
+ export interface Claim {
19
+ /** 原始文本片段 */
20
+ text: string;
21
+ /** 声明类型 */
22
+ type: ClaimType;
23
+ /** 行号 */
24
+ line: number;
25
+ }
26
+ /** 验证结果 */
27
+ export interface ClaimResult {
28
+ /** 原始声明 */
29
+ claim: string;
30
+ /** 声明类型 */
31
+ type: ClaimType;
32
+ /** 文档中的期望值 */
33
+ expected: string;
34
+ /** 实际值 */
35
+ actual: string;
36
+ /** 来源文件 */
37
+ file: string;
38
+ /** 是否匹配 */
39
+ match: boolean;
40
+ }
41
+ /**
42
+ * 从 markdown 内容提取 claims
43
+ */
44
+ export declare function extractClaims(content: string, filePath: string): ClaimResult[];
45
+ /**
46
+ * 验证所有 claims
47
+ */
48
+ export declare function verifyClaims(claims: ClaimResult[], projectPath: string): ClaimResult[];
49
+ /**
50
+ * doc-freshness-check CLI 命令
51
+ */
52
+ export declare function docFreshnessCheck(docPath: string, options?: DocFreshnessCheckOptions): Promise<void>;
53
+ //# sourceMappingURL=doc-freshness-check.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"doc-freshness-check.d.ts","sourceRoot":"","sources":["../../../src/cli/commands/doc-freshness-check.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAMH,MAAM,WAAW,wBAAwB;IACvC,iBAAiB;IACjB,MAAM,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC;IAC1B,0BAA0B;IAC1B,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,WAAW;IACX,WAAW,CAAC,EAAE,MAAM,CAAC;CACtB;AAED,WAAW;AACX,MAAM,MAAM,SAAS,GAAG,SAAS,GAAG,MAAM,GAAG,QAAQ,GAAG,WAAW,CAAC;AAEpE,WAAW;AACX,MAAM,WAAW,KAAK;IACpB,aAAa;IACb,IAAI,EAAE,MAAM,CAAC;IACb,WAAW;IACX,IAAI,EAAE,SAAS,CAAC;IAChB,SAAS;IACT,IAAI,EAAE,MAAM,CAAC;CACd;AAED,WAAW;AACX,MAAM,WAAW,WAAW;IAC1B,WAAW;IACX,KAAK,EAAE,MAAM,CAAC;IACd,WAAW;IACX,IAAI,EAAE,SAAS,CAAC;IAChB,cAAc;IACd,QAAQ,EAAE,MAAM,CAAC;IACjB,UAAU;IACV,MAAM,EAAE,MAAM,CAAC;IACf,WAAW;IACX,IAAI,EAAE,MAAM,CAAC;IACb,WAAW;IACX,KAAK,EAAE,OAAO,CAAC;CAChB;AA4BD;;GAEG;AACH,wBAAgB,aAAa,CAAC,OAAO,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,GAAG,WAAW,EAAE,CA6D9E;AAqID;;GAEG;AACH,wBAAgB,YAAY,CAC1B,MAAM,EAAE,WAAW,EAAE,EACrB,WAAW,EAAE,MAAM,GAClB,WAAW,EAAE,CAaf;AAuDD;;GAEG;AACH,wBAAsB,iBAAiB,CACrC,OAAO,EAAE,MAAM,EACf,OAAO,GAAE,wBAA6B,GACrC,OAAO,CAAC,IAAI,CAAC,CA4Cf"}
@@ -0,0 +1,366 @@
1
+ "use strict";
2
+ /**
3
+ * harness doc-freshness-check 命令
4
+ *
5
+ * 从文档中提取可验证的声明(claims),与代码/文件系统对照,输出差异。
6
+ * 纯代码操作,零 LLM 调用。
7
+ */
8
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
9
+ if (k2 === undefined) k2 = k;
10
+ var desc = Object.getOwnPropertyDescriptor(m, k);
11
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
12
+ desc = { enumerable: true, get: function() { return m[k]; } };
13
+ }
14
+ Object.defineProperty(o, k2, desc);
15
+ }) : (function(o, m, k, k2) {
16
+ if (k2 === undefined) k2 = k;
17
+ o[k2] = m[k];
18
+ }));
19
+ var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
20
+ Object.defineProperty(o, "default", { enumerable: true, value: v });
21
+ }) : function(o, v) {
22
+ o["default"] = v;
23
+ });
24
+ var __importStar = (this && this.__importStar) || (function () {
25
+ var ownKeys = function(o) {
26
+ ownKeys = Object.getOwnPropertyNames || function (o) {
27
+ var ar = [];
28
+ for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
29
+ return ar;
30
+ };
31
+ return ownKeys(o);
32
+ };
33
+ return function (mod) {
34
+ if (mod && mod.__esModule) return mod;
35
+ var result = {};
36
+ if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
37
+ __setModuleDefault(result, mod);
38
+ return result;
39
+ };
40
+ })();
41
+ var __importDefault = (this && this.__importDefault) || function (mod) {
42
+ return (mod && mod.__esModule) ? mod : { "default": mod };
43
+ };
44
+ Object.defineProperty(exports, "__esModule", { value: true });
45
+ exports.extractClaims = extractClaims;
46
+ exports.verifyClaims = verifyClaims;
47
+ exports.docFreshnessCheck = docFreshnessCheck;
48
+ const chalk_1 = __importDefault(require("chalk"));
49
+ const fs = __importStar(require("fs"));
50
+ const path = __importStar(require("path"));
51
+ // ============================================
52
+ // Claim 提取器
53
+ // ============================================
54
+ /** 数字声明:N 个/条/项 + 名词 */
55
+ const NUMERIC_PATTERNS = [
56
+ /(\d+)\s*个\s*(Agent|角色|能力|子系统|模块|端点|命令|组件|层级|阶段|步骤|断点|问题|维度|门|规则|约束)/g,
57
+ /(\d+)\s*条\s*(知识|规则|约束|命令|铁律|指南|提示|断点|问题|结果|记录)/g,
58
+ /(\d+)\s*项\s*(检查|任务|功能|变更|修复|优化|指标|配置)/g,
59
+ /(\d+)\s*(?:大|层)\s*(能力|约束|架构|层级)/g,
60
+ /(\d+)\s*个\s*(?:CLI\s*)?subcommand/gi,
61
+ ];
62
+ /** 列表声明:A, B, C, ... (至少 3 项) */
63
+ const LIST_PATTERN = /[A-Z][a-zA-Z]+(?:[,,、]\s*[A-Z][a-zA-Z]+){2,}/g;
64
+ /** 状态标记 */
65
+ const STATUS_PATTERNS = [
66
+ /✅\s*(已完成|已实现|已修复|已部署|已连通|已验证)/g,
67
+ /❌\s*(缺失|未实现|未完成|失败)/g,
68
+ /\bDEPRECATED\b/g,
69
+ /\bTODO\b/g,
70
+ /待(开发|实现|修复|完善|验证)/g,
71
+ /已(废弃|弃用|移除|删除)/g,
72
+ ];
73
+ /**
74
+ * 从 markdown 内容提取 claims
75
+ */
76
+ function extractClaims(content, filePath) {
77
+ const lines = content.split('\n');
78
+ const results = [];
79
+ for (let i = 0; i < lines.length; i++) {
80
+ const line = lines[i];
81
+ // 数字声明
82
+ for (const pattern of NUMERIC_PATTERNS) {
83
+ pattern.lastIndex = 0;
84
+ let match;
85
+ while ((match = pattern.exec(line)) !== null) {
86
+ const fullMatch = match[0];
87
+ const number = match[1];
88
+ results.push({
89
+ claim: fullMatch,
90
+ type: 'numeric',
91
+ expected: number,
92
+ actual: '', // 待验证
93
+ file: filePath,
94
+ match: false,
95
+ });
96
+ }
97
+ }
98
+ // 列表声明
99
+ const listMatches = line.match(LIST_PATTERN);
100
+ if (listMatches) {
101
+ for (const m of listMatches) {
102
+ const items = m.split(/[,,、]/).map(s => s.trim()).filter(Boolean);
103
+ if (items.length >= 3) {
104
+ results.push({
105
+ claim: m,
106
+ type: 'list',
107
+ expected: items.join(', '),
108
+ actual: '', // 待验证
109
+ file: filePath,
110
+ match: false,
111
+ });
112
+ }
113
+ }
114
+ }
115
+ // 状态标记
116
+ for (const pattern of STATUS_PATTERNS) {
117
+ pattern.lastIndex = 0;
118
+ let match;
119
+ while ((match = pattern.exec(line)) !== null) {
120
+ results.push({
121
+ claim: match[0],
122
+ type: 'status',
123
+ expected: match[0],
124
+ actual: '', // 待验证
125
+ file: filePath,
126
+ match: false,
127
+ });
128
+ }
129
+ }
130
+ }
131
+ return results;
132
+ }
133
+ // ============================================
134
+ // 验证器
135
+ // ============================================
136
+ /**
137
+ * 在项目目录中 grep 搜索匹配内容,返回匹配行数
138
+ */
139
+ function countGrepMatches(pattern, projectPath, fileGlob) {
140
+ const searchDir = projectPath || process.cwd();
141
+ let count = 0;
142
+ function walkDir(dir) {
143
+ let entries;
144
+ try {
145
+ entries = fs.readdirSync(dir, { withFileTypes: true });
146
+ }
147
+ catch {
148
+ return;
149
+ }
150
+ for (const entry of entries) {
151
+ if (entry.name.startsWith('.') || entry.name === 'node_modules' || entry.name === 'dist')
152
+ continue;
153
+ const fullPath = path.join(dir, entry.name);
154
+ if (entry.isDirectory()) {
155
+ walkDir(fullPath);
156
+ }
157
+ else if (entry.isFile()) {
158
+ if (fileGlob && !matchGlob(entry.name, fileGlob))
159
+ continue;
160
+ try {
161
+ const content = fs.readFileSync(fullPath, 'utf-8');
162
+ const regex = new RegExp(pattern, 'gi');
163
+ const matches = content.match(regex);
164
+ if (matches)
165
+ count += matches.length;
166
+ }
167
+ catch {
168
+ // skip unreadable files
169
+ }
170
+ }
171
+ }
172
+ }
173
+ walkDir(searchDir);
174
+ return count;
175
+ }
176
+ /**
177
+ * 简单 glob 匹配(支持 *.ext 和 *)
178
+ */
179
+ function matchGlob(filename, glob) {
180
+ if (glob === '*')
181
+ return true;
182
+ if (glob.startsWith('*.')) {
183
+ const ext = glob.slice(1);
184
+ return filename.endsWith(ext);
185
+ }
186
+ return filename === glob;
187
+ }
188
+ /**
189
+ * 验证数字声明:计数相关文件/代码模式
190
+ */
191
+ function verifyNumericClaim(claim, projectPath) {
192
+ const expected = parseInt(claim.expected, 10);
193
+ // 从声明文本推断搜索模式
194
+ let searchPattern = '';
195
+ let fileGlob = '*.ts';
196
+ if (claim.claim.includes('Agent')) {
197
+ searchPattern = 'export (class|interface|function) \\w*Agent';
198
+ }
199
+ else if (claim.claim.includes('命令') || claim.claim.includes('subcommand')) {
200
+ fileGlob = '*.ts';
201
+ searchPattern = "program\\.command\\(";
202
+ }
203
+ else if (claim.claim.includes('铁律') || claim.claim.includes('约束') || claim.claim.includes('规则')) {
204
+ searchPattern = "severity:\\s*['\"]?error";
205
+ fileGlob = '*.ts';
206
+ }
207
+ else if (claim.claim.includes('指南')) {
208
+ searchPattern = "severity:\\s*['\"]?warning";
209
+ fileGlob = '*.ts';
210
+ }
211
+ else if (claim.claim.includes('端点')) {
212
+ searchPattern = '(router|app)\\.(get|post|put|delete|patch)\\(';
213
+ fileGlob = '*.ts';
214
+ }
215
+ else {
216
+ // 无法自动验证的数字声明
217
+ return { ...claim, actual: 'N/A (cannot auto-verify)', match: true };
218
+ }
219
+ const actual = countGrepMatches(searchPattern, projectPath, fileGlob);
220
+ return {
221
+ ...claim,
222
+ actual: String(actual),
223
+ match: Math.abs(actual - expected) <= Math.max(1, Math.floor(expected * 0.1)), // 10% tolerance
224
+ };
225
+ }
226
+ /**
227
+ * 验证列表声明:检查列表中的每一项是否存在于代码中
228
+ */
229
+ function verifyListClaim(claim, projectPath) {
230
+ const items = claim.expected.split(',').map(s => s.trim());
231
+ const found = [];
232
+ const missing = [];
233
+ for (const item of items) {
234
+ const count = countGrepMatches(item, projectPath);
235
+ if (count > 0) {
236
+ found.push(item);
237
+ }
238
+ else {
239
+ missing.push(item);
240
+ }
241
+ }
242
+ return {
243
+ ...claim,
244
+ actual: missing.length === 0
245
+ ? `all ${items.length} found`
246
+ : `missing: ${missing.join(', ')}`,
247
+ match: missing.length === 0,
248
+ };
249
+ }
250
+ /**
251
+ * 验证状态声明:检查标记是否与代码/文件一致
252
+ */
253
+ function verifyStatusClaim(claim, projectPath) {
254
+ // 状态声明的验证较复杂,标记为需要人工确认
255
+ return {
256
+ ...claim,
257
+ actual: 'needs manual verification',
258
+ match: true, // 不阻断
259
+ };
260
+ }
261
+ /**
262
+ * 验证所有 claims
263
+ */
264
+ function verifyClaims(claims, projectPath) {
265
+ return claims.map(claim => {
266
+ switch (claim.type) {
267
+ case 'numeric':
268
+ return verifyNumericClaim(claim, projectPath);
269
+ case 'list':
270
+ return verifyListClaim(claim, projectPath);
271
+ case 'status':
272
+ return verifyStatusClaim(claim, projectPath);
273
+ default:
274
+ return { ...claim, actual: 'N/A', match: true };
275
+ }
276
+ });
277
+ }
278
+ // ============================================
279
+ // 输出格式化
280
+ // ============================================
281
+ function formatTable(results) {
282
+ if (results.length === 0)
283
+ return chalk_1.default.yellow('未发现可验证的声明');
284
+ const lines = [];
285
+ lines.push(chalk_1.default.blue(`文档新鲜度检查 (${results.length} 条声明)\n`));
286
+ // 统计
287
+ const mismatches = results.filter(r => !r.match);
288
+ lines.push(chalk_1.default.bold(` 匹配: ${results.length - mismatches.length}/${results.length}`));
289
+ if (mismatches.length > 0) {
290
+ lines.push(chalk_1.default.red(` 不匹配: ${mismatches.length}\n`));
291
+ }
292
+ else {
293
+ lines.push(chalk_1.default.green(' 全部匹配\n'));
294
+ }
295
+ // 按类型分组
296
+ const byType = {};
297
+ for (const r of results) {
298
+ if (!byType[r.type])
299
+ byType[r.type] = [];
300
+ byType[r.type].push(r);
301
+ }
302
+ const typeLabels = {
303
+ numeric: '数字声明',
304
+ list: '列表声明',
305
+ status: '状态标记',
306
+ narrative: '叙述声明',
307
+ };
308
+ for (const [type, items] of Object.entries(byType)) {
309
+ lines.push(chalk_1.default.bold(` ${typeLabels[type] || type} (${items.length}):`));
310
+ for (const item of items) {
311
+ const icon = item.match ? chalk_1.default.green('✓') : chalk_1.default.red('✗');
312
+ lines.push(` ${icon} ${item.claim}`);
313
+ if (!item.match) {
314
+ lines.push(` 期望: ${item.expected}`);
315
+ lines.push(` 实际: ${chalk_1.default.yellow(item.actual)}`);
316
+ }
317
+ }
318
+ lines.push('');
319
+ }
320
+ return lines.join('\n');
321
+ }
322
+ // ============================================
323
+ // 主入口
324
+ // ============================================
325
+ /**
326
+ * doc-freshness-check CLI 命令
327
+ */
328
+ async function docFreshnessCheck(docPath, options = {}) {
329
+ // 验证文件存在
330
+ const resolvedPath = path.resolve(docPath);
331
+ if (!fs.existsSync(resolvedPath)) {
332
+ console.error(chalk_1.default.red(`文件不存在: ${resolvedPath}`));
333
+ process.exitCode = 1;
334
+ return;
335
+ }
336
+ if (!resolvedPath.endsWith('.md')) {
337
+ console.error(chalk_1.default.yellow(`警告: 文件不是 .md 格式,可能无法正确解析`));
338
+ }
339
+ const projectPath = options.projectPath || path.dirname(resolvedPath);
340
+ // 读取文档
341
+ const content = fs.readFileSync(resolvedPath, 'utf-8');
342
+ // 提取声明
343
+ let claims = extractClaims(content, resolvedPath);
344
+ // 如果指定了变更文件,只验证与变更文件相关的声明
345
+ if (options.changedFiles) {
346
+ const changed = options.changedFiles.split(',').map(s => s.trim());
347
+ // 过滤:保留所有 claims,但只验证与变更文件相关的
348
+ // 实际实现中可以根据声明内容推断相关文件
349
+ void changed; // 预留
350
+ }
351
+ // 验证
352
+ const results = verifyClaims(claims, projectPath);
353
+ // 输出
354
+ if (options.format === 'json') {
355
+ console.log(JSON.stringify(results, null, 2));
356
+ }
357
+ else {
358
+ console.log(formatTable(results));
359
+ }
360
+ // 有不匹配时 exit 1
361
+ const mismatches = results.filter(r => !r.match);
362
+ if (mismatches.length > 0) {
363
+ process.exitCode = 1;
364
+ }
365
+ }
366
+ //# sourceMappingURL=doc-freshness-check.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"doc-freshness-check.js","sourceRoot":"","sources":["../../../src/cli/commands/doc-freshness-check.ts"],"names":[],"mappings":"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"}
@@ -16,11 +16,14 @@ export { contract, validateSchema, type ContractOptions } from './contract';
16
16
  export { review, reviewStatus, type ReviewOptions } from './review';
17
17
  export { executeCommand, type CommandCheckOptions } from './command';
18
18
  export { syncDocs, type SyncDocsOptions } from './sync-docs';
19
- export { knowledgeList, knowledgeSearch, knowledgeImport, knowledgeDecay, knowledgeStats, knowledgeUpsert, knowledgeSyncStatus, knowledgeSyncRag, knowledgeAudit, knowledgeSnapshot, knowledgeMigrate, type KnowledgeOptions, type KnowledgeUpsertOptions } from './knowledge';
19
+ export { knowledgeList, knowledgeSearch, knowledgeImport, knowledgeDecay, knowledgeStats, knowledgeUpsert, knowledgeSyncStatus, knowledgeSyncRag, knowledgeAudit, knowledgeSnapshot, knowledgeMigrate, knowledgeHealth, knowledgeIndex, type KnowledgeOptions, type KnowledgeUpsertOptions } from './knowledge';
20
20
  export { failureList, failureStats, failureClear, type FailureOptions } from './failure';
21
21
  export { postevalPlan, type PostEvalPlanOptions } from './posteval-plan';
22
22
  export { release, type ReleaseOptions } from './release';
23
23
  export { analyzeSessions, type AnalyzeSessionsOptions } from './analyze-sessions';
24
24
  export { updateUserModel, type UpdateUserModelOptions } from './update-user-model';
25
25
  export { constraints, getConstraintsMeta, type ConstraintsMeta } from './constraints';
26
+ export { docFreshnessCheck, extractClaims, verifyClaims, type DocFreshnessCheckOptions, type ClaimResult, type ClaimType } from './doc-freshness-check';
27
+ export { specBaselineCheck, extractBaselineSection, type SpecBaselineCheckOptions, type PrerequisiteResult } from './spec-baseline-check';
28
+ export { sddIndex, type SDDOptions } from './sdd';
26
29
  //# sourceMappingURL=index.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/cli/commands/index.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,EAAE,KAAK,EAAE,QAAQ,EAAE,KAAK,YAAY,EAAE,MAAM,SAAS,CAAC;AAC7D,OAAO,EAAE,QAAQ,EAAE,uBAAuB,EAAE,mBAAmB,EAAE,KAAK,eAAe,EAAE,MAAM,YAAY,CAAC;AAC1G,OAAO,EAAE,aAAa,EAAE,aAAa,EAAE,KAAK,iBAAiB,EAAE,MAAM,eAAe,CAAC;AACrF,OAAO,EAAE,IAAI,EAAE,KAAK,WAAW,EAAE,MAAM,QAAQ,CAAC;AAChD,OAAO,EAAE,MAAM,EAAE,KAAK,aAAa,EAAE,MAAM,UAAU,CAAC;AACtD,OAAO,EAAE,MAAM,EAAE,KAAK,aAAa,EAAE,MAAM,UAAU,CAAC;AACtD,OAAO,EAAE,IAAI,EAAE,KAAK,WAAW,EAAE,MAAM,QAAQ,CAAC;AAChD,OAAO,EAAE,YAAY,EAAE,aAAa,EAAE,KAAK,mBAAmB,EAAE,MAAM,QAAQ,CAAC;AAC/E,OAAO,EAAE,UAAU,EAAE,sBAAsB,EAAE,KAAK,iBAAiB,EAAE,MAAM,cAAc,CAAC;AAC1F,OAAO,EAAE,WAAW,EAAE,KAAK,kBAAkB,EAAE,MAAM,eAAe,CAAC;AACrE,OAAO,EAAE,QAAQ,EAAE,YAAY,EAAE,KAAK,eAAe,EAAE,MAAM,YAAY,CAAC;AAC1E,OAAO,EAAE,QAAQ,EAAE,cAAc,EAAE,KAAK,eAAe,EAAE,MAAM,YAAY,CAAC;AAC5E,OAAO,EAAE,MAAM,EAAE,YAAY,EAAE,KAAK,aAAa,EAAE,MAAM,UAAU,CAAC;AACpE,OAAO,EAAE,cAAc,EAAE,KAAK,mBAAmB,EAAE,MAAM,WAAW,CAAC;AACrE,OAAO,EAAE,QAAQ,EAAE,KAAK,eAAe,EAAE,MAAM,aAAa,CAAC;AAC7D,OAAO,EAAE,aAAa,EAAE,eAAe,EAAE,eAAe,EAAE,cAAc,EAAE,cAAc,EAAE,eAAe,EAAE,mBAAmB,EAAE,gBAAgB,EAAE,cAAc,EAAE,iBAAiB,EAAE,gBAAgB,EAAE,KAAK,gBAAgB,EAAE,KAAK,sBAAsB,EAAE,MAAM,aAAa,CAAC;AAC/Q,OAAO,EAAE,WAAW,EAAE,YAAY,EAAE,YAAY,EAAE,KAAK,cAAc,EAAE,MAAM,WAAW,CAAC;AACzF,OAAO,EAAE,YAAY,EAAE,KAAK,mBAAmB,EAAE,MAAM,iBAAiB,CAAC;AACzE,OAAO,EAAE,OAAO,EAAE,KAAK,cAAc,EAAE,MAAM,WAAW,CAAC;AACzD,OAAO,EAAE,eAAe,EAAE,KAAK,sBAAsB,EAAE,MAAM,oBAAoB,CAAC;AAClF,OAAO,EAAE,eAAe,EAAE,KAAK,sBAAsB,EAAE,MAAM,qBAAqB,CAAC;AACnF,OAAO,EAAE,WAAW,EAAE,kBAAkB,EAAE,KAAK,eAAe,EAAE,MAAM,eAAe,CAAC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/cli/commands/index.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,EAAE,KAAK,EAAE,QAAQ,EAAE,KAAK,YAAY,EAAE,MAAM,SAAS,CAAC;AAC7D,OAAO,EAAE,QAAQ,EAAE,uBAAuB,EAAE,mBAAmB,EAAE,KAAK,eAAe,EAAE,MAAM,YAAY,CAAC;AAC1G,OAAO,EAAE,aAAa,EAAE,aAAa,EAAE,KAAK,iBAAiB,EAAE,MAAM,eAAe,CAAC;AACrF,OAAO,EAAE,IAAI,EAAE,KAAK,WAAW,EAAE,MAAM,QAAQ,CAAC;AAChD,OAAO,EAAE,MAAM,EAAE,KAAK,aAAa,EAAE,MAAM,UAAU,CAAC;AACtD,OAAO,EAAE,MAAM,EAAE,KAAK,aAAa,EAAE,MAAM,UAAU,CAAC;AACtD,OAAO,EAAE,IAAI,EAAE,KAAK,WAAW,EAAE,MAAM,QAAQ,CAAC;AAChD,OAAO,EAAE,YAAY,EAAE,aAAa,EAAE,KAAK,mBAAmB,EAAE,MAAM,QAAQ,CAAC;AAC/E,OAAO,EAAE,UAAU,EAAE,sBAAsB,EAAE,KAAK,iBAAiB,EAAE,MAAM,cAAc,CAAC;AAC1F,OAAO,EAAE,WAAW,EAAE,KAAK,kBAAkB,EAAE,MAAM,eAAe,CAAC;AACrE,OAAO,EAAE,QAAQ,EAAE,YAAY,EAAE,KAAK,eAAe,EAAE,MAAM,YAAY,CAAC;AAC1E,OAAO,EAAE,QAAQ,EAAE,cAAc,EAAE,KAAK,eAAe,EAAE,MAAM,YAAY,CAAC;AAC5E,OAAO,EAAE,MAAM,EAAE,YAAY,EAAE,KAAK,aAAa,EAAE,MAAM,UAAU,CAAC;AACpE,OAAO,EAAE,cAAc,EAAE,KAAK,mBAAmB,EAAE,MAAM,WAAW,CAAC;AACrE,OAAO,EAAE,QAAQ,EAAE,KAAK,eAAe,EAAE,MAAM,aAAa,CAAC;AAC7D,OAAO,EAAE,aAAa,EAAE,eAAe,EAAE,eAAe,EAAE,cAAc,EAAE,cAAc,EAAE,eAAe,EAAE,mBAAmB,EAAE,gBAAgB,EAAE,cAAc,EAAE,iBAAiB,EAAE,gBAAgB,EAAE,eAAe,EAAE,cAAc,EAAE,KAAK,gBAAgB,EAAE,KAAK,sBAAsB,EAAE,MAAM,aAAa,CAAC;AAChT,OAAO,EAAE,WAAW,EAAE,YAAY,EAAE,YAAY,EAAE,KAAK,cAAc,EAAE,MAAM,WAAW,CAAC;AACzF,OAAO,EAAE,YAAY,EAAE,KAAK,mBAAmB,EAAE,MAAM,iBAAiB,CAAC;AACzE,OAAO,EAAE,OAAO,EAAE,KAAK,cAAc,EAAE,MAAM,WAAW,CAAC;AACzD,OAAO,EAAE,eAAe,EAAE,KAAK,sBAAsB,EAAE,MAAM,oBAAoB,CAAC;AAClF,OAAO,EAAE,eAAe,EAAE,KAAK,sBAAsB,EAAE,MAAM,qBAAqB,CAAC;AACnF,OAAO,EAAE,WAAW,EAAE,kBAAkB,EAAE,KAAK,eAAe,EAAE,MAAM,eAAe,CAAC;AACtF,OAAO,EAAE,iBAAiB,EAAE,aAAa,EAAE,YAAY,EAAE,KAAK,wBAAwB,EAAE,KAAK,WAAW,EAAE,KAAK,SAAS,EAAE,MAAM,uBAAuB,CAAC;AACxJ,OAAO,EAAE,iBAAiB,EAAE,sBAAsB,EAAE,KAAK,wBAAwB,EAAE,KAAK,kBAAkB,EAAE,MAAM,uBAAuB,CAAC;AAC1I,OAAO,EAAE,QAAQ,EAAE,KAAK,UAAU,EAAE,MAAM,OAAO,CAAC"}
@@ -3,7 +3,8 @@
3
3
  * CLI 命令导出
4
4
  */
5
5
  Object.defineProperty(exports, "__esModule", { value: true });
6
- exports.getConstraintsMeta = exports.constraints = exports.updateUserModel = exports.analyzeSessions = exports.release = exports.postevalPlan = exports.failureClear = exports.failureStats = exports.failureList = exports.knowledgeMigrate = exports.knowledgeSnapshot = exports.knowledgeAudit = exports.knowledgeSyncRag = exports.knowledgeSyncStatus = exports.knowledgeUpsert = exports.knowledgeStats = exports.knowledgeDecay = exports.knowledgeImport = exports.knowledgeSearch = exports.knowledgeList = exports.syncDocs = exports.executeCommand = exports.reviewStatus = exports.review = exports.validateSchema = exports.contract = exports.auditDetails = exports.security = exports.performance = exports.listAcceptanceCriteria = exports.acceptance = exports.listSpecTypes = exports.specValidate = exports.flow = exports.status = exports.report = exports.init = exports.checkCoverage = exports.runPassesGate = exports.DEFAULT_CHECKPOINTS = exports.createExampleCheckpoint = exports.validate = exports.listLaws = exports.check = void 0;
6
+ exports.specBaselineCheck = exports.verifyClaims = exports.extractClaims = exports.docFreshnessCheck = exports.getConstraintsMeta = exports.constraints = exports.updateUserModel = exports.analyzeSessions = exports.release = exports.postevalPlan = exports.failureClear = exports.failureStats = exports.failureList = exports.knowledgeIndex = exports.knowledgeHealth = exports.knowledgeMigrate = exports.knowledgeSnapshot = exports.knowledgeAudit = exports.knowledgeSyncRag = exports.knowledgeSyncStatus = exports.knowledgeUpsert = exports.knowledgeStats = exports.knowledgeDecay = exports.knowledgeImport = exports.knowledgeSearch = exports.knowledgeList = exports.syncDocs = exports.executeCommand = exports.reviewStatus = exports.review = exports.validateSchema = exports.contract = exports.auditDetails = exports.security = exports.performance = exports.listAcceptanceCriteria = exports.acceptance = exports.listSpecTypes = exports.specValidate = exports.flow = exports.status = exports.report = exports.init = exports.checkCoverage = exports.runPassesGate = exports.DEFAULT_CHECKPOINTS = exports.createExampleCheckpoint = exports.validate = exports.listLaws = exports.check = void 0;
7
+ exports.sddIndex = exports.extractBaselineSection = void 0;
7
8
  var check_1 = require("./check");
8
9
  Object.defineProperty(exports, "check", { enumerable: true, get: function () { return check_1.check; } });
9
10
  Object.defineProperty(exports, "listLaws", { enumerable: true, get: function () { return check_1.listLaws; } });
@@ -55,6 +56,8 @@ Object.defineProperty(exports, "knowledgeSyncRag", { enumerable: true, get: func
55
56
  Object.defineProperty(exports, "knowledgeAudit", { enumerable: true, get: function () { return knowledge_1.knowledgeAudit; } });
56
57
  Object.defineProperty(exports, "knowledgeSnapshot", { enumerable: true, get: function () { return knowledge_1.knowledgeSnapshot; } });
57
58
  Object.defineProperty(exports, "knowledgeMigrate", { enumerable: true, get: function () { return knowledge_1.knowledgeMigrate; } });
59
+ Object.defineProperty(exports, "knowledgeHealth", { enumerable: true, get: function () { return knowledge_1.knowledgeHealth; } });
60
+ Object.defineProperty(exports, "knowledgeIndex", { enumerable: true, get: function () { return knowledge_1.knowledgeIndex; } });
58
61
  var failure_1 = require("./failure");
59
62
  Object.defineProperty(exports, "failureList", { enumerable: true, get: function () { return failure_1.failureList; } });
60
63
  Object.defineProperty(exports, "failureStats", { enumerable: true, get: function () { return failure_1.failureStats; } });
@@ -70,4 +73,13 @@ Object.defineProperty(exports, "updateUserModel", { enumerable: true, get: funct
70
73
  var constraints_1 = require("./constraints");
71
74
  Object.defineProperty(exports, "constraints", { enumerable: true, get: function () { return constraints_1.constraints; } });
72
75
  Object.defineProperty(exports, "getConstraintsMeta", { enumerable: true, get: function () { return constraints_1.getConstraintsMeta; } });
76
+ var doc_freshness_check_1 = require("./doc-freshness-check");
77
+ Object.defineProperty(exports, "docFreshnessCheck", { enumerable: true, get: function () { return doc_freshness_check_1.docFreshnessCheck; } });
78
+ Object.defineProperty(exports, "extractClaims", { enumerable: true, get: function () { return doc_freshness_check_1.extractClaims; } });
79
+ Object.defineProperty(exports, "verifyClaims", { enumerable: true, get: function () { return doc_freshness_check_1.verifyClaims; } });
80
+ var spec_baseline_check_1 = require("./spec-baseline-check");
81
+ Object.defineProperty(exports, "specBaselineCheck", { enumerable: true, get: function () { return spec_baseline_check_1.specBaselineCheck; } });
82
+ Object.defineProperty(exports, "extractBaselineSection", { enumerable: true, get: function () { return spec_baseline_check_1.extractBaselineSection; } });
83
+ var sdd_1 = require("./sdd");
84
+ Object.defineProperty(exports, "sddIndex", { enumerable: true, get: function () { return sdd_1.sddIndex; } });
73
85
  //# sourceMappingURL=index.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/cli/commands/index.ts"],"names":[],"mappings":";AAAA;;GAEG;;;AAEH,iCAA6D;AAApD,8FAAA,KAAK,OAAA;AAAE,iGAAA,QAAQ,OAAA;AACxB,uCAA0G;AAAjG,oGAAA,QAAQ,OAAA;AAAE,mHAAA,uBAAuB,OAAA;AAAE,+GAAA,mBAAmB,OAAA;AAC/D,6CAAqF;AAA5E,4GAAA,aAAa,OAAA;AAAE,4GAAA,aAAa,OAAA;AACrC,+BAAgD;AAAvC,4FAAA,IAAI,OAAA;AACb,mCAAsD;AAA7C,gGAAA,MAAM,OAAA;AACf,mCAAsD;AAA7C,gGAAA,MAAM,OAAA;AACf,+BAAgD;AAAvC,4FAAA,IAAI,OAAA;AACb,+BAA+E;AAAtE,oGAAA,YAAY,OAAA;AAAE,qGAAA,aAAa,OAAA;AACpC,2CAA0F;AAAjF,wGAAA,UAAU,OAAA;AAAE,oHAAA,sBAAsB,OAAA;AAC3C,6CAAqE;AAA5D,0GAAA,WAAW,OAAA;AACpB,uCAA0E;AAAjE,oGAAA,QAAQ,OAAA;AAAE,wGAAA,YAAY,OAAA;AAC/B,uCAA4E;AAAnE,oGAAA,QAAQ,OAAA;AAAE,0GAAA,cAAc,OAAA;AACjC,mCAAoE;AAA3D,gGAAA,MAAM,OAAA;AAAE,sGAAA,YAAY,OAAA;AAC7B,qCAAqE;AAA5D,yGAAA,cAAc,OAAA;AACvB,yCAA6D;AAApD,qGAAA,QAAQ,OAAA;AACjB,yCAA+Q;AAAtQ,0GAAA,aAAa,OAAA;AAAE,4GAAA,eAAe,OAAA;AAAE,4GAAA,eAAe,OAAA;AAAE,2GAAA,cAAc,OAAA;AAAE,2GAAA,cAAc,OAAA;AAAE,4GAAA,eAAe,OAAA;AAAE,gHAAA,mBAAmB,OAAA;AAAE,6GAAA,gBAAgB,OAAA;AAAE,2GAAA,cAAc,OAAA;AAAE,8GAAA,iBAAiB,OAAA;AAAE,6GAAA,gBAAgB,OAAA;AACrM,qCAAyF;AAAhF,sGAAA,WAAW,OAAA;AAAE,uGAAA,YAAY,OAAA;AAAE,uGAAA,YAAY,OAAA;AAChD,iDAAyE;AAAhE,6GAAA,YAAY,OAAA;AACrB,qCAAyD;AAAhD,kGAAA,OAAO,OAAA;AAChB,uDAAkF;AAAzE,mHAAA,eAAe,OAAA;AACxB,yDAAmF;AAA1E,oHAAA,eAAe,OAAA;AACxB,6CAAsF;AAA7E,0GAAA,WAAW,OAAA;AAAE,iHAAA,kBAAkB,OAAA"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/cli/commands/index.ts"],"names":[],"mappings":";AAAA;;GAEG;;;;AAEH,iCAA6D;AAApD,8FAAA,KAAK,OAAA;AAAE,iGAAA,QAAQ,OAAA;AACxB,uCAA0G;AAAjG,oGAAA,QAAQ,OAAA;AAAE,mHAAA,uBAAuB,OAAA;AAAE,+GAAA,mBAAmB,OAAA;AAC/D,6CAAqF;AAA5E,4GAAA,aAAa,OAAA;AAAE,4GAAA,aAAa,OAAA;AACrC,+BAAgD;AAAvC,4FAAA,IAAI,OAAA;AACb,mCAAsD;AAA7C,gGAAA,MAAM,OAAA;AACf,mCAAsD;AAA7C,gGAAA,MAAM,OAAA;AACf,+BAAgD;AAAvC,4FAAA,IAAI,OAAA;AACb,+BAA+E;AAAtE,oGAAA,YAAY,OAAA;AAAE,qGAAA,aAAa,OAAA;AACpC,2CAA0F;AAAjF,wGAAA,UAAU,OAAA;AAAE,oHAAA,sBAAsB,OAAA;AAC3C,6CAAqE;AAA5D,0GAAA,WAAW,OAAA;AACpB,uCAA0E;AAAjE,oGAAA,QAAQ,OAAA;AAAE,wGAAA,YAAY,OAAA;AAC/B,uCAA4E;AAAnE,oGAAA,QAAQ,OAAA;AAAE,0GAAA,cAAc,OAAA;AACjC,mCAAoE;AAA3D,gGAAA,MAAM,OAAA;AAAE,sGAAA,YAAY,OAAA;AAC7B,qCAAqE;AAA5D,yGAAA,cAAc,OAAA;AACvB,yCAA6D;AAApD,qGAAA,QAAQ,OAAA;AACjB,yCAAgT;AAAvS,0GAAA,aAAa,OAAA;AAAE,4GAAA,eAAe,OAAA;AAAE,4GAAA,eAAe,OAAA;AAAE,2GAAA,cAAc,OAAA;AAAE,2GAAA,cAAc,OAAA;AAAE,4GAAA,eAAe,OAAA;AAAE,gHAAA,mBAAmB,OAAA;AAAE,6GAAA,gBAAgB,OAAA;AAAE,2GAAA,cAAc,OAAA;AAAE,8GAAA,iBAAiB,OAAA;AAAE,6GAAA,gBAAgB,OAAA;AAAE,4GAAA,eAAe,OAAA;AAAE,2GAAA,cAAc,OAAA;AACtO,qCAAyF;AAAhF,sGAAA,WAAW,OAAA;AAAE,uGAAA,YAAY,OAAA;AAAE,uGAAA,YAAY,OAAA;AAChD,iDAAyE;AAAhE,6GAAA,YAAY,OAAA;AACrB,qCAAyD;AAAhD,kGAAA,OAAO,OAAA;AAChB,uDAAkF;AAAzE,mHAAA,eAAe,OAAA;AACxB,yDAAmF;AAA1E,oHAAA,eAAe,OAAA;AACxB,6CAAsF;AAA7E,0GAAA,WAAW,OAAA;AAAE,iHAAA,kBAAkB,OAAA;AACxC,6DAAwJ;AAA/I,wHAAA,iBAAiB,OAAA;AAAE,oHAAA,aAAa,OAAA;AAAE,mHAAA,YAAY,OAAA;AACvD,6DAA0I;AAAjI,wHAAA,iBAAiB,OAAA;AAAE,6HAAA,sBAAsB,OAAA;AAClD,6BAAkD;AAAzC,+FAAA,QAAQ,OAAA"}
@@ -61,6 +61,12 @@ export declare function knowledgeSyncRag(options: KnowledgeOptions): Promise<voi
61
61
  * 知识同步状态:检测所有 tracked scope 的新鲜度
62
62
  */
63
63
  export declare function knowledgeSyncStatus(options: KnowledgeOptions): Promise<void>;
64
+ /**
65
+ * 飞轮健康检查 — 零 token 检测知识飞轮数据流状态
66
+ */
67
+ export declare function knowledgeHealth(options: KnowledgeOptions & {
68
+ dir?: string;
69
+ }): Promise<void>;
64
70
  /**
65
71
  * 知识库质量审计
66
72
  */
@@ -82,4 +88,10 @@ export declare function knowledgeSnapshot(options: KnowledgeOptions & {
82
88
  export declare function knowledgeMigrate(options: KnowledgeOptions & {
83
89
  dir?: string;
84
90
  }): void;
91
+ /**
92
+ * 知识库索引重建 — 生成 _index.md 供 Agent grep 使用,同时同步 index.json
93
+ */
94
+ export declare function knowledgeIndex(options: KnowledgeOptions & {
95
+ dir?: string;
96
+ }): void;
85
97
  //# sourceMappingURL=knowledge.d.ts.map