@dommaker/harness 1.0.0 → 1.1.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 (89) hide show
  1. package/CHANGELOG.md +19 -13
  2. package/dist/cli/commands/status.d.ts.map +1 -1
  3. package/dist/cli/commands/status.js +0 -9
  4. package/dist/cli/commands/status.js.map +1 -1
  5. package/dist/cli/commands/sync-docs/agents-syncer.d.ts.map +1 -1
  6. package/dist/cli/commands/sync-docs/agents-syncer.js +25 -4
  7. package/dist/cli/commands/sync-docs/agents-syncer.js.map +1 -1
  8. package/dist/completion-checkers/classify.d.ts +23 -0
  9. package/dist/completion-checkers/classify.d.ts.map +1 -0
  10. package/dist/completion-checkers/classify.js +37 -0
  11. package/dist/completion-checkers/classify.js.map +1 -0
  12. package/dist/completion-checkers/contract-presence.d.ts +12 -0
  13. package/dist/completion-checkers/contract-presence.d.ts.map +1 -0
  14. package/dist/completion-checkers/contract-presence.js +36 -0
  15. package/dist/completion-checkers/contract-presence.js.map +1 -0
  16. package/dist/completion-checkers/glob-match.d.ts +13 -0
  17. package/dist/completion-checkers/glob-match.d.ts.map +1 -0
  18. package/dist/completion-checkers/glob-match.js +58 -0
  19. package/dist/completion-checkers/glob-match.js.map +1 -0
  20. package/dist/completion-checkers/index.d.ts +19 -0
  21. package/dist/completion-checkers/index.d.ts.map +1 -0
  22. package/dist/completion-checkers/index.js +47 -0
  23. package/dist/completion-checkers/index.js.map +1 -0
  24. package/dist/completion-checkers/phase-format.d.ts +15 -0
  25. package/dist/completion-checkers/phase-format.d.ts.map +1 -0
  26. package/dist/completion-checkers/phase-format.js +42 -0
  27. package/dist/completion-checkers/phase-format.js.map +1 -0
  28. package/dist/completion-checkers/tdd-chain.d.ts +16 -0
  29. package/dist/completion-checkers/tdd-chain.d.ts.map +1 -0
  30. package/dist/completion-checkers/tdd-chain.js +57 -0
  31. package/dist/completion-checkers/tdd-chain.js.map +1 -0
  32. package/dist/completion-checkers/types.d.ts +77 -0
  33. package/dist/completion-checkers/types.d.ts.map +1 -0
  34. package/dist/completion-checkers/types.js +10 -0
  35. package/dist/completion-checkers/types.js.map +1 -0
  36. package/dist/core/constraints/checker.d.ts +3 -1
  37. package/dist/core/constraints/checker.d.ts.map +1 -1
  38. package/dist/core/constraints/checker.js +4 -2
  39. package/dist/core/constraints/checker.js.map +1 -1
  40. package/dist/core/constraints/interceptor.d.ts +3 -2
  41. package/dist/core/constraints/interceptor.d.ts.map +1 -1
  42. package/dist/core/constraints/interceptor.js +4 -4
  43. package/dist/core/constraints/interceptor.js.map +1 -1
  44. package/dist/index.d.ts +10 -2
  45. package/dist/index.d.ts.map +1 -1
  46. package/dist/index.js +16 -5
  47. package/dist/index.js.map +1 -1
  48. package/dist/monitoring/constraint-doctor.d.ts +2 -8
  49. package/dist/monitoring/constraint-doctor.d.ts.map +1 -1
  50. package/dist/monitoring/constraint-doctor.js +2 -4
  51. package/dist/monitoring/constraint-doctor.js.map +1 -1
  52. package/dist/monitoring/traces.d.ts +3 -3
  53. package/dist/monitoring/traces.d.ts.map +1 -1
  54. package/dist/monitoring/traces.js.map +1 -1
  55. package/dist/pretool-use-hook.d.ts +16 -0
  56. package/dist/pretool-use-hook.d.ts.map +1 -0
  57. package/dist/pretool-use-hook.js +68 -0
  58. package/dist/pretool-use-hook.js.map +1 -0
  59. package/dist/types/trace.d.ts +4 -4
  60. package/dist/types/trace.d.ts.map +1 -1
  61. package/package.json +1 -1
  62. package/src/CONTEXT.md +2 -2
  63. package/src/__tests__/checker-extra.test.ts +47 -0
  64. package/src/__tests__/pretool-use-hook.test.ts +82 -0
  65. package/src/cli/commands/__tests__/status-extra.test.ts +0 -22
  66. package/src/cli/commands/__tests__/status.test.ts +0 -15
  67. package/src/cli/commands/__tests__/sync-docs-agents.test.ts +55 -0
  68. package/src/cli/commands/status.ts +0 -10
  69. package/src/cli/commands/sync-docs/agents-syncer.ts +26 -6
  70. package/src/completion-checkers/CONTEXT.md +25 -0
  71. package/src/completion-checkers/__tests__/contract-presence.test.ts +44 -0
  72. package/src/completion-checkers/__tests__/phase-format.test.ts +60 -0
  73. package/src/completion-checkers/__tests__/tdd-chain.test.ts +99 -0
  74. package/src/completion-checkers/classify.ts +47 -0
  75. package/src/completion-checkers/contract-presence.ts +40 -0
  76. package/src/completion-checkers/glob-match.ts +54 -0
  77. package/src/completion-checkers/index.ts +19 -0
  78. package/src/completion-checkers/phase-format.ts +48 -0
  79. package/src/completion-checkers/tdd-chain.ts +63 -0
  80. package/src/completion-checkers/types.ts +84 -0
  81. package/src/core/CONTEXT.md +1 -1
  82. package/src/core/constraints/__tests__/interceptor.test.ts +14 -0
  83. package/src/core/constraints/checker.ts +5 -2
  84. package/src/core/constraints/interceptor.ts +7 -4
  85. package/src/index.ts +24 -6
  86. package/src/monitoring/constraint-doctor.ts +4 -15
  87. package/src/monitoring/traces.ts +3 -3
  88. package/src/pretool-use-hook.ts +68 -0
  89. package/src/types/trace.ts +4 -4
package/CHANGELOG.md CHANGED
@@ -4,6 +4,25 @@ 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
+ ## [Unreleased]
8
+
9
+ ## [1.1.1] - 2026-08-17
10
+
11
+ ### Changes
12
+ - docs: 评审收尾——ADR-0002 版本线 1.0.0 + 文档漂移对齐
13
+ - fix(core,cli,monitoring,types): D5/D8 收尾——tip 层级整链摘除 + constraint-doctor 死配置清理
14
+ - fix(core): O4 收尾——便捷 API 补 per-request customConfig(checkConstraint/checkBeforeExecution/checkConstraints/interceptOperation)
15
+
16
+ ## [1.1.0] - 2026-08-16
17
+
18
+ ### Changes
19
+ - docs(changelog): 清空 [Unreleased] 条目段,待 release 脚本生成 [1.1.0](避免自动生成后残留重复条目)
20
+ - feat(sync-docs): AGENTS.md 知识入口行识别 .studio/CONTEXT.md 正本模型 (studio #188)
21
+ - docs(research): 恢复 wayfinder #27/#28 研究正本——harness 现状盘点 + studio→harness 边界盘点(原仅存于游离提交 e3ab6ac/d2874fc,未随 O11 纳入版本控制)
22
+ - feat(gates): command-gate PreToolUse hook 固化进包(studio #153)
23
+ - feat(completion-checkers): T7-E1 三纯判定函数 tdd-chain/phase-format/contract-presence + CompletionCheckersConfig(#160)
24
+ - docs: CLAUDE.md Key Subsystems 清除已删子系统行 + 修正 context/tools 描述(#40 收尾)
25
+
7
26
  ## [1.0.0] - 2026-08-16
8
27
 
9
28
  ### Changes
@@ -36,19 +55,6 @@ The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/).
36
55
  - feat: custom 约束退役落点迁至 custom-constraints.yml(#82 D6 一处真相)
37
56
  - fix: mergeConstraints 生效 config.yml 对 custom 约束的禁用
38
57
 
39
- ## [Unreleased]
40
-
41
- ### Changes
42
- - feat(pkg): exports 增加 `./gates` 子路径公开 CommandGate 等门禁导出(H3,#42)——studio `provider-hooks.ts` 可改正规 import `@dommaker/harness/gates` 而非 require.resolve dist 深路径(studio 侧随动 #150 B3);O7 files 去 src 因 studio `rule-scanner.ts:223` 仍硬编码 `@dommaker/harness/src/` 源路径而保留(待 studio #150 B2 先行)
43
- - feat(hooks): hook 注册表闭环 + 配置归一(G2/G7,#44)——`assertHookRegistryClosed` 声明(HookConfig)↔ 实现(HookDefinition)双向校验(引用未注册/注册无定义/重复 → 抛错,复制 checker 闭环模式,断言限构建/测试期);`HookConfig{name,enabled,errorStrategy}` 为 per-hook 配置唯一真相,`toErrorStrategy` 承载 studio `blocking`→errorStrategy(block/warn) 无损映射(studio #150 A4 随动);pipeline block/warn 语义补测试固化
44
- - feat(cli): 命令注册表驱动 + per-command 懒加载(O2/R6,#44)——`COMMAND_DEFINITIONS`(definitions.ts,纯数据模块)为命令形状单一来源,bin/harness.js 由注册表遍历生成、不再手写 commander 命令块,删 commands/index.ts barrel(消灭两处手工同步);实现引用 module+export,action 执行时才 require 对应命令模块,任一命令执行不再加载全部命令实现;门禁 CLI 元数据 action/subcommands 同步改为实现引用;`--help`/`--version` 零命令实现加载(模块数 10→11,仅多一个纯数据模块),单命令只加载自身模块(registry.test.ts 端到端断言)
45
- - feat(gates): H4 门禁统一——Gate 三态(deny | abstain | ask)+ gateRegistry 构建期闭环 + 声明式 order/enabled + runGates 单调语义 + bin 注册表驱动生成(#43)。统一 `Gate{id, order, evaluate(ctx)}` → `GateDecision`(GateResult 保留为报告结构);注册表「定义即注册 + 双向闭环」复制 checker 模式(定义无实现/实现无定义/重复 id → 加载期抛错,getGate 引用未注册抛错);`getEffectiveGates` 对齐 getEffectiveConstraints 裁剪(config.yml `gates.order` 重排 + `gates.<id>.enabled:false` 移除,引用未注册抛错);`runGates` deny 单调(下游不得改回 allow,决策浅冻结)+ ask 枚举预留 fail-closed = deny;6 门禁 CLI 命令由 `GATE_DEFINITIONS` 元数据驱动生成(命令名/别名/选项兼容,bin 不再手写 6 块);checker-as-guard 接线点 `createCheckerGate`(studio #129 随动)
46
- - fix(lint): `npm run lint` 恒失败——仓库自初始提交起无任何 ESLint 配置,命令不可用却一直挂在文档里(#35)。新增 `eslint.config.mjs` flat config(eslint 8.57 自动识别,无需升级/环境变量):eslint:recommended + @typescript-eslint/recommended 收敛版;`no-explicit-any`/`no-non-null-assertion`/`no-var-requires`/`require-yield` 显式关闭(存量 335/252/39/1 处,any/non-null 属风格化改型、var-requires 为刻意 CJS 懒加载、require-yield 为故意抛错 stub,专项治理另开票),`no-empty` 保留 `catch {}` 吞异常既有约定(allowEmptyCatch),unused-vars 支持 `_` 前缀参数约定;一次性清理 74 处机械违规(unused-vars/prefer-const/useless-escape/case-declarations,均不改运行时行为;唯一例外 init.ts:模板字面量 `\.` 运行期退化,生成 `grep -E 'plans/.*.md$'` 点通配,与同文件落盘版 preCommitContent 副本 drift,改 `\\.` 使两副本一致)。lint script 去掉 `--ext .ts`(flat config 按文件模式选型)。coverage-gate.yml 新增 lint job——CI 从未跑 lint 正是问题长期未暴露的根因,从此防再退化
47
- - fix(cli): 模板/提示裸名 `npx harness` 全部改为 `npx @dommaker/harness`(#36)——裸名经 npx 必然走 npm 注册表,命中同名陌生包(rsdoiel/harness@0.0.6,2013 年与本项目无关);init 三段模板(pre-commit/harness-check.yml/harness-governance.yml)、validate resolutions、constraints-report、injection-drift 修复提示、README 示例全部 scoped 化。harness 仓自身 dogfood 改用 `node bin/harness.js`(`.github/workflows/harness-governance.yml` 直改;pre-commit 钩子生成源落盘为 `bin/install-precommit-hook.sh`,`npm run hooks:install` 一条命令装回,本地确定、离线可用、dogfood 当前 HEAD)。消费项目已有落盘钩子需重跑 `npx @dommaker/harness init` 刷新
48
- - fix(sync-docs): CAPABILITIES.md 中真实存在的 .tsx 模块行不再被误判为「已删除」并误删(#33)——源码扫描扩入 .tsx(findTsSourceFiles 新增 includeTsx 选项,sync-docs 链路开启,scanSourceModules 顶层分支同步),removed 判定前对含路径登记条目做全路径存在性过滤,兜住 .js/.jsx 等其它扫描盲区
49
- - fix(constraints): 内置 `no_completion_without_verification` 文案弱化(#25)——去掉「完整」字样与写死的命令示例(npm test/npm run build),验证口径改为项目声明的测试 + type check,全量验证归 CI;强制力保留在「新鲜输出为证、禁止凭记忆声称完成」。大仓项目需自定义口径时仍可用 custom-constraints.yml shadow override
50
- - fix(constraints): `retire <id>` 直达路径补人确认闸门(#24)——无 `--yes` 报错 + 非零退出码且不落盘,提示改用 `--yes` 或交互模式;`--yes` 直达保留原行为,iron 仍打印警示。ADR-0001 决策 2「执行层保留一次人确认」对所有入口成立。
51
-
52
58
  ## [0.17.1] - 2026-08-09
53
59
 
54
60
  ### Changes
@@ -1 +1 @@
1
- {"version":3,"file":"status.d.ts","sourceRoot":"","sources":["../../../src/cli/commands/status.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAUH,MAAM,WAAW,aAAa;IAC5B,WAAW;IACX,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,WAAW;IACX,MAAM,CAAC,EAAE,OAAO,CAAC;IACjB,YAAY;IACZ,SAAS,CAAC,EAAE,OAAO,CAAC;IACpB,eAAe;IACf,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB;AAED;;GAEG;AACH,wBAAsB,MAAM,CAAC,OAAO,EAAE,aAAa,GAAG,OAAO,CAAC,IAAI,CAAC,CA2IlE"}
1
+ {"version":3,"file":"status.d.ts","sourceRoot":"","sources":["../../../src/cli/commands/status.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAUH,MAAM,WAAW,aAAa;IAC5B,WAAW;IACX,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,WAAW;IACX,MAAM,CAAC,EAAE,OAAO,CAAC;IACjB,YAAY;IACZ,SAAS,CAAC,EAAE,OAAO,CAAC;IACpB,eAAe;IACf,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB;AAED;;GAEG;AACH,wBAAsB,MAAM,CAAC,OAAO,EAAE,aAAa,GAAG,OAAO,CAAC,IAAI,CAAC,CAiIlE"}
@@ -142,15 +142,6 @@ async function status(options) {
142
142
  });
143
143
  console.log();
144
144
  }
145
- // Tips
146
- const tipSummaries = summaries.filter((s) => s.level === 'tip');
147
- if (tipSummaries.length > 0) {
148
- console.log(chalk_1.default.blue('🔵 Tips:'));
149
- tipSummaries.forEach((s) => {
150
- console.log(` 💡 ${s.constraintId}`);
151
- });
152
- console.log();
153
- }
154
145
  // 异常检测
155
146
  if (anomalies.length > 0) {
156
147
  console.log(chalk_1.default.yellow(`⚠️ 发现 ${anomalies.length} 个异常`));
@@ -1 +1 @@
1
- {"version":3,"file":"status.js","sourceRoot":"","sources":["../../../src/cli/commands/status.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"status.js","sourceRoot":"","sources":["../../../src/cli/commands/status.ts"],"names":[],"mappings":";AAAA;;;;GAIG;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAwBH,wBAiIC;AAvJD,kDAA0B;AAC1B,uCAAyB;AACzB,2CAA6B;AAC7B,oDAAyD;AACzD,oEAAgE;AAChE,6CAAuD;AAcvD;;GAEG;AACI,KAAK,UAAU,MAAM,CAAC,OAAsB;IACjD,MAAM,WAAW,GAAG,OAAO,CAAC,WAAW,IAAI,OAAO,CAAC,GAAG,EAAE,CAAC;IACzD,MAAM,UAAU,GAAG,IAAI,CAAC,IAAI,CAAC,WAAW,EAAE,UAAU,CAAC,CAAC;IACtD,MAAM,UAAU,GAAG,IAAI,CAAC,IAAI,CAAC,WAAW,EAAE,0BAAkB,CAAC,CAAC;IAC9D,MAAM,SAAS,GAAG,IAAI,CAAC,IAAI,CAAC,UAAU,EAAE,aAAa,CAAC,CAAC;IAEvD,OAAO,CAAC,GAAG,CAAC,eAAK,CAAC,IAAI,CAAC,eAAe,CAAC,CAAC,CAAC;IACzC,OAAO,CAAC,GAAG,EAAE,CAAC;IAEd,UAAU;IACV,IAAI,CAAC,EAAE,CAAC,UAAU,CAAC,UAAU,CAAC,EAAE,CAAC;QAC/B,OAAO,CAAC,GAAG,CAAC,eAAK,CAAC,MAAM,CAAC,UAAU,CAAC,CAAC,CAAC;QACtC,OAAO,CAAC,GAAG,CAAC,eAAK,CAAC,IAAI,CAAC,0BAA0B,CAAC,CAAC,CAAC;QACpD,OAAO;IACT,CAAC;IAED,cAAc;IACd,IAAI,CAAC,EAAE,CAAC,UAAU,CAAC,UAAU,CAAC,EAAE,CAAC;QAC/B,OAAO,CAAC,GAAG,CAAC,eAAK,CAAC,MAAM,CAAC,iBAAiB,CAAC,CAAC,CAAC;QAC7C,OAAO,CAAC,GAAG,CAAC,eAAK,CAAC,IAAI,CAAC,0BAA0B,CAAC,CAAC,CAAC;QACpD,OAAO;IACT,CAAC;IAED,cAAc;IACd,MAAM,aAAa,GAAG,EAAE,CAAC,YAAY,CAAC,UAAU,EAAE,OAAO,CAAC,CAAC;IAC3D,MAAM,KAAK,GAAG,aAAa,CAAC,IAAI,EAAE,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC;IAC/D,MAAM,UAAU,GAAG,KAAK,CAAC,MAAM,CAAC;IAEhC,YAAY;IACZ,MAAM,MAAM,GAAG,KAAK,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE;QAC9B,IAAI,CAAC;YACH,OAAO,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;QAC1B,CAAC;QAAC,MAAM,CAAC;YACP,OAAO,IAAI,CAAC;QACd,CAAC;IACH,CAAC,CAAC,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC;IAEnB,YAAY;IACZ,MAAM,SAAS,GAAG,IAAI,uBAAc,CAAC,EAAE,SAAS,EAAE,UAAU,EAAE,CAAC,CAAC;IAChE,MAAM,QAAQ,GAAG,IAAI,8BAAa,CAAC,SAAS,CAAC,CAAC;IAE9C,OAAO;IACP,MAAM,SAAS,GAAG,QAAQ,CAAC,SAAS,CAAC,MAAM,CAAC,CAAC;IAC7C,MAAM,SAAS,GAAG,QAAQ,CAAC,eAAe,CAAC,SAAS,CAAC,CAAC;IAEtD,OAAO;IACP,OAAO,CAAC,GAAG,CAAC,eAAK,CAAC,IAAI,CAAC,QAAQ,UAAU,IAAI,CAAC,CAAC,CAAC;IAChD,OAAO,CAAC,GAAG,EAAE,CAAC;IAEd,IAAI,OAAO,CAAC,SAAS,EAAE,CAAC;QACtB,QAAQ;QACR,IAAI,SAAS,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;YAC3B,OAAO,CAAC,GAAG,CAAC,eAAK,CAAC,KAAK,CAAC,SAAS,CAAC,CAAC,CAAC;QACtC,CAAC;aAAM,CAAC;YACN,OAAO,CAAC,GAAG,CAAC,eAAK,CAAC,MAAM,CAAC,UAAU,SAAS,CAAC,MAAM,OAAO,CAAC,CAAC,CAAC;YAC7D,OAAO,CAAC,GAAG,EAAE,CAAC;YACd,SAAS,CAAC,OAAO,CAAC,CAAC,CAAe,EAAE,EAAE;gBACpC,OAAO,CAAC,GAAG,CAAC,eAAK,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,YAAY,EAAE,CAAC,CAAC,CAAC;gBACjD,OAAO,CAAC,GAAG,CAAC,eAAK,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC;gBAC7C,OAAO,CAAC,GAAG,CAAC,eAAK,CAAC,IAAI,CAAC,YAAY,CAAC,CAAC,IAAI,EAAE,WAAW,IAAK,CAAS,CAAC,OAAO,IAAI,KAAK,EAAE,CAAC,CAAC,CAAC;gBAC1F,OAAO,CAAC,GAAG,CAAC,eAAK,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC,IAAI,EAAE,SAAS,IAAK,CAAS,CAAC,SAAS,IAAI,KAAK,EAAE,CAAC,CAAC,CAAC;gBACzF,OAAO,CAAC,GAAG,EAAE,CAAC;YAChB,CAAC,CAAC,CAAC;YAEH,QAAQ;YACR,OAAO,CAAC,GAAG,CAAC,eAAK,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC,CAAC;YACrC,OAAO,CAAC,GAAG,CAAC,eAAK,CAAC,IAAI,CAAC,mCAAmC,CAAC,CAAC,CAAC;QAC/D,CAAC;QACD,OAAO;IACT,CAAC;IAED,SAAS;IACT,OAAO,CAAC,GAAG,CAAC,eAAK,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC,CAAC;IACpC,OAAO,CAAC,GAAG,EAAE,CAAC;IAEd,YAAY;IACZ,MAAM,gBAAgB,GAAG,SAAS,CAAC,MAAM,CAAC,CAAC,CAAe,EAAE,EAAE,CAAC,CAAC,CAAC,KAAK,KAAK,UAAU,CAAC,CAAC;IACvF,IAAI,gBAAgB,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QAChC,OAAO,CAAC,GAAG,CAAC,eAAK,CAAC,GAAG,CAAC,eAAe,CAAC,CAAC,CAAC;QACxC,gBAAgB,CAAC,OAAO,CAAC,CAAC,CAAe,EAAE,EAAE;YAC3C,MAAM,MAAM,GAAG,CAAC,CAAC,QAAQ,IAAI,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC;YAC3C,OAAO,CAAC,GAAG,CAAC,KAAK,MAAM,IAAI,CAAC,CAAC,YAAY,EAAE,CAAC,CAAC;YAC7C,IAAI,OAAO,CAAC,MAAM,EAAE,CAAC;gBACnB,OAAO,CAAC,GAAG,CAAC,eAAK,CAAC,IAAI,CAAC,YAAY,CAAC,CAAC,WAAW,UAAU,CAAC,CAAC,CAAC,QAAQ,GAAG,GAAG,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,WAAW,CAAC,CAAC,CAAC,UAAU,GAAG,GAAG,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC;YACzI,CAAC;QACH,CAAC,CAAC,CAAC;QACH,OAAO,CAAC,GAAG,EAAE,CAAC;IAChB,CAAC;IAED,aAAa;IACb,MAAM,kBAAkB,GAAG,SAAS,CAAC,MAAM,CAAC,CAAC,CAAe,EAAE,EAAE,CAAC,CAAC,CAAC,KAAK,KAAK,WAAW,CAAC,CAAC;IAC1F,IAAI,kBAAkB,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QAClC,OAAO,CAAC,GAAG,CAAC,eAAK,CAAC,MAAM,CAAC,gBAAgB,CAAC,CAAC,CAAC;QAC5C,kBAAkB,CAAC,OAAO,CAAC,CAAC,CAAe,EAAE,EAAE;YAC7C,MAAM,MAAM,GAAG,CAAC,CAAC,QAAQ,IAAI,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,QAAQ,IAAI,GAAG,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,GAAG,CAAC;YACxE,OAAO,CAAC,GAAG,CAAC,KAAK,MAAM,IAAI,CAAC,CAAC,YAAY,EAAE,CAAC,CAAC;YAC7C,IAAI,OAAO,CAAC,MAAM,EAAE,CAAC;gBACnB,OAAO,CAAC,GAAG,CAAC,eAAK,CAAC,IAAI,CAAC,YAAY,CAAC,CAAC,WAAW,UAAU,CAAC,CAAC,CAAC,QAAQ,GAAG,GAAG,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,WAAW,CAAC,CAAC,CAAC,UAAU,GAAG,GAAG,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC;YACzI,CAAC;QACH,CAAC,CAAC,CAAC;QACH,OAAO,CAAC,GAAG,EAAE,CAAC;IAChB,CAAC;IAED,OAAO;IACP,IAAI,SAAS,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QACzB,OAAO,CAAC,GAAG,CAAC,eAAK,CAAC,MAAM,CAAC,UAAU,SAAS,CAAC,MAAM,MAAM,CAAC,CAAC,CAAC;QAC5D,OAAO,CAAC,GAAG,EAAE,CAAC;QACd,SAAS,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAe,EAAE,EAAE;YAChD,OAAO,CAAC,GAAG,CAAC,eAAK,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,YAAY,KAAK,CAAC,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC;QAChE,CAAC,CAAC,CAAC;QACH,OAAO,CAAC,GAAG,EAAE,CAAC;IAChB,CAAC;IAED,SAAS;IACT,MAAM,KAAK,GAAG;QACZ,aAAa,EAAE,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE;KACxC,CAAC;IACF,EAAE,CAAC,SAAS,CAAC,IAAI,CAAC,OAAO,CAAC,SAAS,CAAC,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;IAC3D,EAAE,CAAC,aAAa,CAAC,SAAS,EAAE,IAAI,CAAC,SAAS,CAAC,KAAK,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC,CAAC;IAE5D,QAAQ;IACR,OAAO,CAAC,GAAG,CAAC,eAAK,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC,CAAC;IACrC,IAAI,SAAS,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QACzB,OAAO,CAAC,GAAG,CAAC,eAAK,CAAC,IAAI,CAAC,oCAAoC,CAAC,CAAC,CAAC;IAChE,CAAC;SAAM,IAAI,UAAU,IAAI,GAAG,EAAE,CAAC;QAC7B,OAAO,CAAC,GAAG,CAAC,eAAK,CAAC,IAAI,CAAC,gBAAgB,CAAC,CAAC,CAAC;IAC5C,CAAC;SAAM,CAAC;QACN,OAAO,CAAC,GAAG,CAAC,eAAK,CAAC,IAAI,CAAC,sBAAsB,CAAC,CAAC,CAAC;IAClD,CAAC;AACH,CAAC"}
@@ -1 +1 @@
1
- {"version":3,"file":"agents-syncer.d.ts","sourceRoot":"","sources":["../../../../src/cli/commands/sync-docs/agents-syncer.ts"],"names":[],"mappings":"AAAA;;GAEG;AA2CH,MAAM,WAAW,cAAc;IAC7B,SAAS,EAAE,OAAO,CAAC;IACnB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,mBAAmB,EAAE,OAAO,CAAC;IAC7B,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,UAAU,CAAC,EAAE,MAAM,CAAC;CACrB;AAED;;;;;;GAMG;AACH,wBAAsB,aAAa,CAAC,WAAW,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,EAAE,GAAG,OAAO,CAAC,MAAM,CAAC,CA6E3F"}
1
+ {"version":3,"file":"agents-syncer.d.ts","sourceRoot":"","sources":["../../../../src/cli/commands/sync-docs/agents-syncer.ts"],"names":[],"mappings":"AAAA;;GAEG;AA2CH,MAAM,WAAW,cAAc;IAC7B,SAAS,EAAE,OAAO,CAAC;IACnB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,mBAAmB,EAAE,OAAO,CAAC;IAC7B,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,UAAU,CAAC,EAAE,MAAM,CAAC;CACrB;AAED;;;;;;GAMG;AACH,wBAAsB,aAAa,CAAC,WAAW,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,EAAE,GAAG,OAAO,CAAC,MAAM,CAAC,CAoF3F"}
@@ -78,10 +78,11 @@ const AGENTS_MD_COMMANDS = [
78
78
  */
79
79
  async function buildAgentsMd(projectPath, srcDirs) {
80
80
  const pkg = await (0, project_reader_1.readPackageJsonLite)(projectPath);
81
- const [dirs, governance, hasKnowledge, contextDocCount] = await Promise.all([
81
+ const [dirs, governance, hasKnowledge, hasStudioContext, contextDocCount] = await Promise.all([
82
82
  getTopLevelDirEntries(projectPath, srcDirs),
83
83
  getGovernanceInfo(projectPath),
84
84
  hasKnowledgeDir(projectPath),
85
+ hasStudioContextDoc(projectPath),
85
86
  countContextDocs(projectPath, srcDirs),
86
87
  ]);
87
88
  const name = pkg?.name || path.basename(projectPath);
@@ -141,9 +142,16 @@ async function buildAgentsMd(projectPath, srcDirs) {
141
142
  // 写进受 --check 漂移比对的文档会制造「必然过期」竞态(任何知识写入都使已提交文档过期)
142
143
  lines.push('- `.harness/knowledge/`:项目知识库,用 `harness knowledge` 查询');
143
144
  }
144
- lines.push(contextDocCount > 0
145
- ? `- 各源码目录的 \`CONTEXT.md\` 是权威模块文档(现有 ${contextDocCount} 个),改动代码时同步更新`
146
- : '- 各源码目录的 `CONTEXT.md` 是权威模块文档,缺失目录可由 `harness sync-docs` 生成模板');
145
+ if (hasStudioContext) {
146
+ // 正本模型(studio #152/T12):模块上下文沉淀归并到业务仓 .studio/CONTEXT.md
147
+ // 散置 CONTEXT.md 指引与该裁决矛盾,正本在场时整行替代
148
+ lines.push('- 模块上下文正本:`.studio/CONTEXT.md`(模块锚点组织),改动代码时同步更新');
149
+ }
150
+ else {
151
+ lines.push(contextDocCount > 0
152
+ ? `- 各源码目录的 \`CONTEXT.md\` 是权威模块文档(现有 ${contextDocCount} 个),改动代码时同步更新`
153
+ : '- 各源码目录的 `CONTEXT.md` 是权威模块文档,缺失目录可由 `harness sync-docs` 生成模板');
154
+ }
147
155
  lines.push('');
148
156
  return lines.join('\n');
149
157
  }
@@ -253,6 +261,19 @@ async function hasKnowledgeDir(projectPath) {
253
261
  return false;
254
262
  }
255
263
  }
264
+ /**
265
+ * 判断 .studio/CONTEXT.md 是否存在(正本模型标记,studio #152/T12):
266
+ * 模块上下文沉淀归并到业务仓单一正本(模块锚点组织)时,知识入口行改指正本,
267
+ * 不再输出散置 CONTEXT.md 指引。只判存在性,不解析内容。
268
+ */
269
+ async function hasStudioContextDoc(projectPath) {
270
+ try {
271
+ return (await fs.stat(path.join(projectPath, '.studio', 'CONTEXT.md'))).isFile();
272
+ }
273
+ catch {
274
+ return false;
275
+ }
276
+ }
256
277
  /** 统计源码根内的 CONTEXT.md 数量(含源码根本身,跨根去重) */
257
278
  async function countContextDocs(projectPath, srcDirs) {
258
279
  const found = new Set();
@@ -1 +1 @@
1
- {"version":3,"file":"agents-syncer.js","sourceRoot":"","sources":["../../../../src/cli/commands/sync-docs/agents-syncer.ts"],"names":[],"mappings":";AAAA;;GAEG;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AA0DH,sCA6EC;AArID,gDAAkC;AAClC,2BAAgC;AAChC,2CAA6B;AAC7B,+EAA2E;AAC3E,qDAK0B;AAE1B,4CAA4C;AAC5C,MAAM,mBAAmB,GAAG,IAAI,GAAG,CAAC;IAClC,cAAc,EAAE,MAAM,EAAE,OAAO,EAAE,KAAK,EAAE,UAAU;IAClD,mBAAmB,EAAE,cAAc,EAAE,MAAM,EAAE,OAAO,EAAE,QAAQ;CAC/D,CAAC,CAAC;AAEH,mBAAmB;AACnB,MAAM,mBAAmB,GAA2B;IAClD,IAAI,EAAE,MAAM;IACZ,OAAO,EAAE,MAAM;IACf,KAAK,EAAE,IAAI;IACX,IAAI,EAAE,IAAI;IACV,GAAG,EAAE,UAAU;IACf,SAAS,EAAE,MAAM;IACjB,SAAS,EAAE,UAAU;IACrB,UAAU,EAAE,kBAAkB;CAC/B,CAAC;AAEF,8CAA8C;AAC9C,MAAM,kBAAkB,GAA4B;IAClD,CAAC,KAAK,EAAE,QAAQ,CAAC;IACjB,CAAC,OAAO,EAAE,IAAI,CAAC;IACf,CAAC,MAAM,EAAE,MAAM,CAAC;IAChB,CAAC,UAAU,EAAE,OAAO,CAAC;IACrB,CAAC,WAAW,EAAE,MAAM,CAAC;IACrB,CAAC,WAAW,EAAE,MAAM,CAAC;IACrB,CAAC,MAAM,EAAE,MAAM,CAAC;IAChB,CAAC,OAAO,EAAE,QAAQ,CAAC;CACpB,CAAC;AAUF;;;;;;GAMG;AACI,KAAK,UAAU,aAAa,CAAC,WAAmB,EAAE,OAAiB;IACxE,MAAM,GAAG,GAAG,MAAM,IAAA,oCAAmB,EAAC,WAAW,CAAC,CAAC;IACnD,MAAM,CAAC,IAAI,EAAE,UAAU,EAAE,YAAY,EAAE,eAAe,CAAC,GAAG,MAAM,OAAO,CAAC,GAAG,CAAC;QAC1E,qBAAqB,CAAC,WAAW,EAAE,OAAO,CAAC;QAC3C,iBAAiB,CAAC,WAAW,CAAC;QAC9B,eAAe,CAAC,WAAW,CAAC;QAC5B,gBAAgB,CAAC,WAAW,EAAE,OAAO,CAAC;KACvC,CAAC,CAAC;IAEH,MAAM,IAAI,GAAG,GAAG,EAAE,IAAI,IAAI,IAAI,CAAC,QAAQ,CAAC,WAAW,CAAC,CAAC;IACrD,MAAM,WAAW,GAAG,GAAG,EAAE,WAAW,IAAI,MAAM,IAAA,qCAAoB,EAAC,WAAW,CAAC,CAAC;IAEhF,MAAM,KAAK,GAAa;QACtB,aAAa;QACb,EAAE;QACF,gIAAgI;QAChI,EAAE;QACF,SAAS;QACT,EAAE;QACF,WAAW,CAAC,CAAC,CAAC,KAAK,IAAI,QAAQ,WAAW,EAAE,CAAC,CAAC,CAAC,KAAK,IAAI,IAAI;QAC5D,EAAE;QACF,SAAS;QACT,EAAE;KACH,CAAC;IAEF,IAAI,IAAI,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QACpB,KAAK,CAAC,IAAI,CAAC,aAAa,EAAE,iBAAiB,CAAC,CAAC;QAC7C,KAAK,MAAM,CAAC,IAAI,IAAI,EAAE,CAAC;YACrB,KAAK,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC,GAAG,SAAS,CAAC,CAAC,IAAI,IAAI,CAAC,CAAC;QAC9C,CAAC;IACH,CAAC;SAAM,CAAC;QACN,KAAK,CAAC,IAAI,CAAC,YAAY,CAAC,CAAC;IAC3B,CAAC;IAED,KAAK,CAAC,IAAI,CAAC,EAAE,EAAE,SAAS,EAAE,EAAE,CAAC,CAAC;IAC9B,MAAM,EAAE,GAAG,IAAA,qCAAoB,EAAC,WAAW,CAAC,CAAC;IAC7C,MAAM,OAAO,GAAG,GAAG,EAAE,OAAO,IAAI,EAAE,CAAC;IACnC,MAAM,QAAQ,GAAG,kBAAkB,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,CAAC;IAChE,IAAI,QAAQ,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QACxB,KAAK,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC;QACtB,KAAK,MAAM,CAAC,CAAC,EAAE,OAAO,CAAC,IAAI,QAAQ,EAAE,CAAC;YACpC,KAAK,CAAC,IAAI,CAAC,GAAG,IAAA,oCAAmB,EAAC,EAAE,EAAE,CAAC,CAAC,OAAO,OAAO,EAAE,CAAC,CAAC;QAC5D,CAAC;QACD,KAAK,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;IACpB,CAAC;SAAM,CAAC;QACN,KAAK,CAAC,IAAI,CAAC,0BAA0B,CAAC,CAAC;IACzC,CAAC;IAED,KAAK,CAAC,IAAI,CAAC,EAAE,EAAE,UAAU,EAAE,EAAE,CAAC,CAAC;IAC/B,IAAI,UAAU,CAAC,SAAS,EAAE,CAAC;QACzB,KAAK,CAAC,IAAI,CAAC,iCAAiC,UAAU,CAAC,MAAM,CAAC,CAAC,CAAC,YAAY,UAAU,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC;IAC3G,CAAC;IACD,IAAI,UAAU,CAAC,mBAAmB,EAAE,CAAC;QACnC,MAAM,MAAM,GAAG;YACb,UAAU,CAAC,QAAQ,KAAK,SAAS,CAAC,CAAC,CAAC,aAAa,UAAU,CAAC,QAAQ,IAAI,CAAC,CAAC,CAAC,IAAI;YAC/E,UAAU,CAAC,UAAU,KAAK,SAAS,CAAC,CAAC,CAAC,cAAc,UAAU,CAAC,UAAU,IAAI,CAAC,CAAC,CAAC,IAAI;SACrF,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;QAC5B,KAAK,CAAC,IAAI,CAAC,0CAA0C,MAAM,CAAC,CAAC,CAAC,IAAI,MAAM,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC;IACtF,CAAC;IACD,IAAI,CAAC,UAAU,CAAC,SAAS,IAAI,CAAC,UAAU,CAAC,mBAAmB,EAAE,CAAC;QAC7D,KAAK,CAAC,IAAI,CAAC,4CAA4C,CAAC,CAAC;IAC3D,CAAC;IAED,KAAK,CAAC,IAAI,CAAC,EAAE,EAAE,SAAS,EAAE,EAAE,CAAC,CAAC;IAC9B,IAAI,YAAY,EAAE,CAAC;QACjB,6CAA6C;QAC7C,kDAAkD;QAClD,KAAK,CAAC,IAAI,CAAC,wDAAwD,CAAC,CAAC;IACvE,CAAC;IACD,KAAK,CAAC,IAAI,CACR,eAAe,GAAG,CAAC;QACjB,CAAC,CAAC,sCAAsC,eAAe,eAAe;QACtE,CAAC,CAAC,+DAA+D,CACpE,CAAC;IACF,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;IAEf,OAAO,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;AAC1B,CAAC;AAED,6BAA6B;AAC7B,KAAK,UAAU,qBAAqB,CAClC,WAAmB,EACnB,OAAiB;IAEjB,IAAI,OAA8B,CAAC;IACnC,IAAI,CAAC;QACH,OAAO,GAAG,MAAM,EAAE,CAAC,OAAO,CAAC,WAAW,EAAE,EAAE,aAAa,EAAE,IAAI,EAAE,CAAC,CAAC;IACnE,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,EAAE,CAAC;IACZ,CAAC;IAED,MAAM,OAAO,GAAyC,EAAE,CAAC;IACzD,KAAK,MAAM,CAAC,IAAI,OAAO,EAAE,CAAC;QACxB,IAAI,CAAC,CAAC,CAAC,WAAW,EAAE;YAAE,SAAS;QAC/B,IAAI,mBAAmB,CAAC,GAAG,CAAC,CAAC,CAAC,IAAI,CAAC;YAAE,SAAS;QAC9C,6BAA6B;QAC7B,IAAI,CAAC,CAAC,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC,IAAI,KAAK,UAAU,IAAI,CAAC,CAAC,IAAI,KAAK,SAAS;YAAE,SAAS;QACtF,OAAO,CAAC,IAAI,CAAC,EAAE,GAAG,EAAE,CAAC,CAAC,IAAI,EAAE,IAAI,EAAE,MAAM,mBAAmB,CAAC,WAAW,EAAE,CAAC,CAAC,IAAI,EAAE,OAAO,CAAC,EAAE,CAAC,CAAC;IAC/F,CAAC;IACD,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,GAAG,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;IACrE,OAAO,OAAO,CAAC;AACjB,CAAC;AAED,gEAAgE;AAChE,KAAK,UAAU,mBAAmB,CAAC,WAAmB,EAAE,GAAW,EAAE,OAAiB;IACpF,MAAM,KAAK,GAAG,mBAAmB,CAAC,GAAG,CAAC,CAAC;IACvC,IAAI,KAAK;QAAE,OAAO,KAAK,CAAC;IAExB,IAAI,GAAG,KAAK,MAAM,IAAI,GAAG,KAAK,UAAU,EAAE,CAAC;QACzC,MAAM,OAAO,GAAG,MAAM,oBAAoB,CAAC,IAAI,CAAC,IAAI,CAAC,WAAW,EAAE,GAAG,CAAC,CAAC,CAAC;QACxE,IAAI,OAAO,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;YACvB,OAAO,YAAY,GAAG,KAAK,MAAM,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,KAAK,IAAI,OAAO,CAAC,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC;QAC1E,CAAC;QACD,OAAO,cAAc,CAAC;IACxB,CAAC;IAED,IAAI,OAAO,CAAC,QAAQ,CAAC,GAAG,CAAC;QAAE,OAAO,MAAM,CAAC;IAEzC,MAAM,MAAM,GAAG,MAAM,IAAA,oCAAmB,EAAC,IAAI,CAAC,IAAI,CAAC,WAAW,EAAE,GAAG,CAAC,CAAC,CAAC;IACtE,IAAI,MAAM,EAAE,WAAW;QAAE,OAAO,MAAM,CAAC,WAAW,CAAC;IAEnD,OAAO,GAAG,CAAC;AACb,CAAC;AAED,iDAAiD;AACjD,KAAK,UAAU,oBAAoB,CAAC,GAAW;IAC7C,IAAI,CAAC;QACH,MAAM,OAAO,GAAG,MAAM,EAAE,CAAC,OAAO,CAAC,GAAG,EAAE,EAAE,aAAa,EAAE,IAAI,EAAE,CAAC,CAAC;QAC/D,MAAM,OAAO,GAAa,EAAE,CAAC;QAC7B,KAAK,MAAM,CAAC,IAAI,OAAO,EAAE,CAAC;YACxB,IAAI,CAAC,CAAC,CAAC,WAAW,EAAE,IAAI,CAAC,CAAC,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC;gBAAE,SAAS;YACzD,IAAI,IAAA,eAAU,EAAC,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,CAAC,CAAC,IAAI,EAAE,cAAc,CAAC,CAAC,EAAE,CAAC;gBACvD,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC;YACvB,CAAC;QACH,CAAC;QACD,OAAO,OAAO,CAAC,IAAI,EAAE,CAAC;IACxB,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,EAAE,CAAC;IACZ,CAAC;AACH,CAAC;AAED,2DAA2D;AAC3D,KAAK,UAAU,iBAAiB,CAAC,WAAmB;IAClD,MAAM,IAAI,GAAmB,EAAE,SAAS,EAAE,KAAK,EAAE,mBAAmB,EAAE,KAAK,EAAE,CAAC;IAE9E,IAAI,CAAC;QACH,MAAM,MAAM,GAAG,IAAA,4CAAoB,EAAC,WAAW,CAAC,CAAC;QACjD,IAAI,CAAC,SAAS,GAAG,MAAM,KAAK,SAAS,CAAC;QACtC,IAAI,MAAM,IAAI,OAAO,MAAM,CAAC,MAAM,KAAK,QAAQ,EAAE,CAAC;YAChD,IAAI,CAAC,MAAM,GAAG,MAAM,CAAC,MAAM,CAAC;QAC9B,CAAC;IACH,CAAC;IAAC,MAAM,CAAC;QACP,QAAQ;IACV,CAAC;IAED,IAAI,CAAC;QACH,MAAM,MAAM,GAAG,MAAM,EAAE,CAAC,QAAQ,CAAC,IAAI,CAAC,IAAI,CAAC,WAAW,EAAE,WAAW,CAAC,EAAE,OAAO,CAAC,CAAC;QAC/E,IAAI,yBAAyB,CAAC,IAAI,CAAC,MAAM,CAAC,IAAI,MAAM,CAAC,QAAQ,CAAC,2BAA2B,CAAC,EAAE,CAAC;YAC3F,IAAI,CAAC,mBAAmB,GAAG,IAAI,CAAC;YAChC,IAAI,CAAC,QAAQ,GAAG,sBAAsB,CAAC,MAAM,EAAE,WAAW,CAAC,CAAC;YAC5D,IAAI,CAAC,UAAU,GAAG,sBAAsB,CAAC,MAAM,EAAE,YAAY,CAAC,CAAC;QACjE,CAAC;IACH,CAAC;IAAC,MAAM,CAAC;QACP,gBAAgB;IAClB,CAAC;IAED,OAAO,IAAI,CAAC;AACd,CAAC;AAED,kEAAkE;AAClE,SAAS,sBAAsB,CAAC,OAAe,EAAE,OAAe;IAC9D,MAAM,OAAO,GAAG,IAAI,MAAM,CAAC,WAAW,OAAO,UAAU,EAAE,GAAG,CAAC,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;IAC5E,IAAI,CAAC,OAAO;QAAE,OAAO,SAAS,CAAC;IAC/B,MAAM,IAAI,GAAG,OAAO,CAAC,KAAK,CAAC,OAAO,CAAC,KAAK,GAAG,OAAO,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC;IAC9D,MAAM,GAAG,GAAG,IAAI,CAAC,MAAM,CAAC,4CAA4C,CAAC,CAAC;IACtE,MAAM,KAAK,GAAG,GAAG,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC;IACrD,MAAM,KAAK,GAAG,KAAK,CAAC,KAAK,CAAC,8BAA8B,CAAC,CAAC;IAC1D,OAAO,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC;AAClC,CAAC;AAED,yEAAyE;AACzE,KAAK,UAAU,eAAe,CAAC,WAAmB;IAChD,IAAI,CAAC;QACH,OAAO,CAAC,MAAM,EAAE,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,WAAW,EAAE,UAAU,EAAE,WAAW,CAAC,CAAC,CAAC,CAAC,WAAW,EAAE,CAAC;IACxF,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,KAAK,CAAC;IACf,CAAC;AACH,CAAC;AAED,yCAAyC;AACzC,KAAK,UAAU,gBAAgB,CAAC,WAAmB,EAAE,OAAiB;IACpE,MAAM,KAAK,GAAG,IAAI,GAAG,EAAU,CAAC;IAEhC,KAAK,UAAU,IAAI,CAAC,GAAW;QAC7B,IAAI,OAA8B,CAAC;QACnC,IAAI,CAAC;YACH,OAAO,GAAG,MAAM,EAAE,CAAC,OAAO,CAAC,GAAG,EAAE,EAAE,aAAa,EAAE,IAAI,EAAE,CAAC,CAAC;QAC3D,CAAC;QAAC,MAAM,CAAC;YACP,OAAO;QACT,CAAC;QACD,KAAK,MAAM,KAAK,IAAI,OAAO,EAAE,CAAC;YAC5B,IAAI,CAAC,KAAK,CAAC,WAAW,EAAE;gBAAE,SAAS;YACnC,IAAI,KAAK,CAAC,IAAI,KAAK,cAAc,IAAI,KAAK,CAAC,IAAI,KAAK,WAAW,IAAI,KAAK,CAAC,IAAI,KAAK,MAAM;gBAAE,SAAS;YACnG,MAAM,SAAS,GAAG,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,KAAK,CAAC,IAAI,CAAC,CAAC;YAC7C,IAAI,IAAA,eAAU,EAAC,IAAI,CAAC,IAAI,CAAC,SAAS,EAAE,YAAY,CAAC,CAAC,EAAE,CAAC;gBACnD,KAAK,CAAC,GAAG,CAAC,SAAS,CAAC,CAAC;YACvB,CAAC;YACD,MAAM,IAAI,CAAC,SAAS,CAAC,CAAC;QACxB,CAAC;IACH,CAAC;IAED,KAAK,MAAM,IAAI,IAAI,OAAO,EAAE,CAAC;QAC3B,MAAM,QAAQ,GAAG,IAAI,CAAC,IAAI,CAAC,WAAW,EAAE,IAAI,CAAC,CAAC;QAC9C,IAAI,IAAA,eAAU,EAAC,IAAI,CAAC,IAAI,CAAC,QAAQ,EAAE,YAAY,CAAC,CAAC,EAAE,CAAC;YAClD,KAAK,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC;QACtB,CAAC;QACD,MAAM,IAAI,CAAC,QAAQ,CAAC,CAAC;IACvB,CAAC;IACD,OAAO,KAAK,CAAC,IAAI,CAAC;AACpB,CAAC"}
1
+ {"version":3,"file":"agents-syncer.js","sourceRoot":"","sources":["../../../../src/cli/commands/sync-docs/agents-syncer.ts"],"names":[],"mappings":";AAAA;;GAEG;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AA0DH,sCAoFC;AA5ID,gDAAkC;AAClC,2BAAgC;AAChC,2CAA6B;AAC7B,+EAA2E;AAC3E,qDAK0B;AAE1B,4CAA4C;AAC5C,MAAM,mBAAmB,GAAG,IAAI,GAAG,CAAC;IAClC,cAAc,EAAE,MAAM,EAAE,OAAO,EAAE,KAAK,EAAE,UAAU;IAClD,mBAAmB,EAAE,cAAc,EAAE,MAAM,EAAE,OAAO,EAAE,QAAQ;CAC/D,CAAC,CAAC;AAEH,mBAAmB;AACnB,MAAM,mBAAmB,GAA2B;IAClD,IAAI,EAAE,MAAM;IACZ,OAAO,EAAE,MAAM;IACf,KAAK,EAAE,IAAI;IACX,IAAI,EAAE,IAAI;IACV,GAAG,EAAE,UAAU;IACf,SAAS,EAAE,MAAM;IACjB,SAAS,EAAE,UAAU;IACrB,UAAU,EAAE,kBAAkB;CAC/B,CAAC;AAEF,8CAA8C;AAC9C,MAAM,kBAAkB,GAA4B;IAClD,CAAC,KAAK,EAAE,QAAQ,CAAC;IACjB,CAAC,OAAO,EAAE,IAAI,CAAC;IACf,CAAC,MAAM,EAAE,MAAM,CAAC;IAChB,CAAC,UAAU,EAAE,OAAO,CAAC;IACrB,CAAC,WAAW,EAAE,MAAM,CAAC;IACrB,CAAC,WAAW,EAAE,MAAM,CAAC;IACrB,CAAC,MAAM,EAAE,MAAM,CAAC;IAChB,CAAC,OAAO,EAAE,QAAQ,CAAC;CACpB,CAAC;AAUF;;;;;;GAMG;AACI,KAAK,UAAU,aAAa,CAAC,WAAmB,EAAE,OAAiB;IACxE,MAAM,GAAG,GAAG,MAAM,IAAA,oCAAmB,EAAC,WAAW,CAAC,CAAC;IACnD,MAAM,CAAC,IAAI,EAAE,UAAU,EAAE,YAAY,EAAE,gBAAgB,EAAE,eAAe,CAAC,GAAG,MAAM,OAAO,CAAC,GAAG,CAAC;QAC5F,qBAAqB,CAAC,WAAW,EAAE,OAAO,CAAC;QAC3C,iBAAiB,CAAC,WAAW,CAAC;QAC9B,eAAe,CAAC,WAAW,CAAC;QAC5B,mBAAmB,CAAC,WAAW,CAAC;QAChC,gBAAgB,CAAC,WAAW,EAAE,OAAO,CAAC;KACvC,CAAC,CAAC;IAEH,MAAM,IAAI,GAAG,GAAG,EAAE,IAAI,IAAI,IAAI,CAAC,QAAQ,CAAC,WAAW,CAAC,CAAC;IACrD,MAAM,WAAW,GAAG,GAAG,EAAE,WAAW,IAAI,MAAM,IAAA,qCAAoB,EAAC,WAAW,CAAC,CAAC;IAEhF,MAAM,KAAK,GAAa;QACtB,aAAa;QACb,EAAE;QACF,gIAAgI;QAChI,EAAE;QACF,SAAS;QACT,EAAE;QACF,WAAW,CAAC,CAAC,CAAC,KAAK,IAAI,QAAQ,WAAW,EAAE,CAAC,CAAC,CAAC,KAAK,IAAI,IAAI;QAC5D,EAAE;QACF,SAAS;QACT,EAAE;KACH,CAAC;IAEF,IAAI,IAAI,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QACpB,KAAK,CAAC,IAAI,CAAC,aAAa,EAAE,iBAAiB,CAAC,CAAC;QAC7C,KAAK,MAAM,CAAC,IAAI,IAAI,EAAE,CAAC;YACrB,KAAK,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC,GAAG,SAAS,CAAC,CAAC,IAAI,IAAI,CAAC,CAAC;QAC9C,CAAC;IACH,CAAC;SAAM,CAAC;QACN,KAAK,CAAC,IAAI,CAAC,YAAY,CAAC,CAAC;IAC3B,CAAC;IAED,KAAK,CAAC,IAAI,CAAC,EAAE,EAAE,SAAS,EAAE,EAAE,CAAC,CAAC;IAC9B,MAAM,EAAE,GAAG,IAAA,qCAAoB,EAAC,WAAW,CAAC,CAAC;IAC7C,MAAM,OAAO,GAAG,GAAG,EAAE,OAAO,IAAI,EAAE,CAAC;IACnC,MAAM,QAAQ,GAAG,kBAAkB,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,CAAC;IAChE,IAAI,QAAQ,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QACxB,KAAK,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC;QACtB,KAAK,MAAM,CAAC,CAAC,EAAE,OAAO,CAAC,IAAI,QAAQ,EAAE,CAAC;YACpC,KAAK,CAAC,IAAI,CAAC,GAAG,IAAA,oCAAmB,EAAC,EAAE,EAAE,CAAC,CAAC,OAAO,OAAO,EAAE,CAAC,CAAC;QAC5D,CAAC;QACD,KAAK,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;IACpB,CAAC;SAAM,CAAC;QACN,KAAK,CAAC,IAAI,CAAC,0BAA0B,CAAC,CAAC;IACzC,CAAC;IAED,KAAK,CAAC,IAAI,CAAC,EAAE,EAAE,UAAU,EAAE,EAAE,CAAC,CAAC;IAC/B,IAAI,UAAU,CAAC,SAAS,EAAE,CAAC;QACzB,KAAK,CAAC,IAAI,CAAC,iCAAiC,UAAU,CAAC,MAAM,CAAC,CAAC,CAAC,YAAY,UAAU,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC;IAC3G,CAAC;IACD,IAAI,UAAU,CAAC,mBAAmB,EAAE,CAAC;QACnC,MAAM,MAAM,GAAG;YACb,UAAU,CAAC,QAAQ,KAAK,SAAS,CAAC,CAAC,CAAC,aAAa,UAAU,CAAC,QAAQ,IAAI,CAAC,CAAC,CAAC,IAAI;YAC/E,UAAU,CAAC,UAAU,KAAK,SAAS,CAAC,CAAC,CAAC,cAAc,UAAU,CAAC,UAAU,IAAI,CAAC,CAAC,CAAC,IAAI;SACrF,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;QAC5B,KAAK,CAAC,IAAI,CAAC,0CAA0C,MAAM,CAAC,CAAC,CAAC,IAAI,MAAM,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC;IACtF,CAAC;IACD,IAAI,CAAC,UAAU,CAAC,SAAS,IAAI,CAAC,UAAU,CAAC,mBAAmB,EAAE,CAAC;QAC7D,KAAK,CAAC,IAAI,CAAC,4CAA4C,CAAC,CAAC;IAC3D,CAAC;IAED,KAAK,CAAC,IAAI,CAAC,EAAE,EAAE,SAAS,EAAE,EAAE,CAAC,CAAC;IAC9B,IAAI,YAAY,EAAE,CAAC;QACjB,6CAA6C;QAC7C,kDAAkD;QAClD,KAAK,CAAC,IAAI,CAAC,wDAAwD,CAAC,CAAC;IACvE,CAAC;IACD,IAAI,gBAAgB,EAAE,CAAC;QACrB,0DAA0D;QAC1D,mCAAmC;QACnC,KAAK,CAAC,IAAI,CAAC,kDAAkD,CAAC,CAAC;IACjE,CAAC;SAAM,CAAC;QACN,KAAK,CAAC,IAAI,CACR,eAAe,GAAG,CAAC;YACjB,CAAC,CAAC,sCAAsC,eAAe,eAAe;YACtE,CAAC,CAAC,+DAA+D,CACpE,CAAC;IACJ,CAAC;IACD,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;IAEf,OAAO,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;AAC1B,CAAC;AAED,6BAA6B;AAC7B,KAAK,UAAU,qBAAqB,CAClC,WAAmB,EACnB,OAAiB;IAEjB,IAAI,OAA8B,CAAC;IACnC,IAAI,CAAC;QACH,OAAO,GAAG,MAAM,EAAE,CAAC,OAAO,CAAC,WAAW,EAAE,EAAE,aAAa,EAAE,IAAI,EAAE,CAAC,CAAC;IACnE,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,EAAE,CAAC;IACZ,CAAC;IAED,MAAM,OAAO,GAAyC,EAAE,CAAC;IACzD,KAAK,MAAM,CAAC,IAAI,OAAO,EAAE,CAAC;QACxB,IAAI,CAAC,CAAC,CAAC,WAAW,EAAE;YAAE,SAAS;QAC/B,IAAI,mBAAmB,CAAC,GAAG,CAAC,CAAC,CAAC,IAAI,CAAC;YAAE,SAAS;QAC9C,6BAA6B;QAC7B,IAAI,CAAC,CAAC,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC,IAAI,KAAK,UAAU,IAAI,CAAC,CAAC,IAAI,KAAK,SAAS;YAAE,SAAS;QACtF,OAAO,CAAC,IAAI,CAAC,EAAE,GAAG,EAAE,CAAC,CAAC,IAAI,EAAE,IAAI,EAAE,MAAM,mBAAmB,CAAC,WAAW,EAAE,CAAC,CAAC,IAAI,EAAE,OAAO,CAAC,EAAE,CAAC,CAAC;IAC/F,CAAC;IACD,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,GAAG,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;IACrE,OAAO,OAAO,CAAC;AACjB,CAAC;AAED,gEAAgE;AAChE,KAAK,UAAU,mBAAmB,CAAC,WAAmB,EAAE,GAAW,EAAE,OAAiB;IACpF,MAAM,KAAK,GAAG,mBAAmB,CAAC,GAAG,CAAC,CAAC;IACvC,IAAI,KAAK;QAAE,OAAO,KAAK,CAAC;IAExB,IAAI,GAAG,KAAK,MAAM,IAAI,GAAG,KAAK,UAAU,EAAE,CAAC;QACzC,MAAM,OAAO,GAAG,MAAM,oBAAoB,CAAC,IAAI,CAAC,IAAI,CAAC,WAAW,EAAE,GAAG,CAAC,CAAC,CAAC;QACxE,IAAI,OAAO,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;YACvB,OAAO,YAAY,GAAG,KAAK,MAAM,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,KAAK,IAAI,OAAO,CAAC,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC;QAC1E,CAAC;QACD,OAAO,cAAc,CAAC;IACxB,CAAC;IAED,IAAI,OAAO,CAAC,QAAQ,CAAC,GAAG,CAAC;QAAE,OAAO,MAAM,CAAC;IAEzC,MAAM,MAAM,GAAG,MAAM,IAAA,oCAAmB,EAAC,IAAI,CAAC,IAAI,CAAC,WAAW,EAAE,GAAG,CAAC,CAAC,CAAC;IACtE,IAAI,MAAM,EAAE,WAAW;QAAE,OAAO,MAAM,CAAC,WAAW,CAAC;IAEnD,OAAO,GAAG,CAAC;AACb,CAAC;AAED,iDAAiD;AACjD,KAAK,UAAU,oBAAoB,CAAC,GAAW;IAC7C,IAAI,CAAC;QACH,MAAM,OAAO,GAAG,MAAM,EAAE,CAAC,OAAO,CAAC,GAAG,EAAE,EAAE,aAAa,EAAE,IAAI,EAAE,CAAC,CAAC;QAC/D,MAAM,OAAO,GAAa,EAAE,CAAC;QAC7B,KAAK,MAAM,CAAC,IAAI,OAAO,EAAE,CAAC;YACxB,IAAI,CAAC,CAAC,CAAC,WAAW,EAAE,IAAI,CAAC,CAAC,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC;gBAAE,SAAS;YACzD,IAAI,IAAA,eAAU,EAAC,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,CAAC,CAAC,IAAI,EAAE,cAAc,CAAC,CAAC,EAAE,CAAC;gBACvD,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC;YACvB,CAAC;QACH,CAAC;QACD,OAAO,OAAO,CAAC,IAAI,EAAE,CAAC;IACxB,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,EAAE,CAAC;IACZ,CAAC;AACH,CAAC;AAED,2DAA2D;AAC3D,KAAK,UAAU,iBAAiB,CAAC,WAAmB;IAClD,MAAM,IAAI,GAAmB,EAAE,SAAS,EAAE,KAAK,EAAE,mBAAmB,EAAE,KAAK,EAAE,CAAC;IAE9E,IAAI,CAAC;QACH,MAAM,MAAM,GAAG,IAAA,4CAAoB,EAAC,WAAW,CAAC,CAAC;QACjD,IAAI,CAAC,SAAS,GAAG,MAAM,KAAK,SAAS,CAAC;QACtC,IAAI,MAAM,IAAI,OAAO,MAAM,CAAC,MAAM,KAAK,QAAQ,EAAE,CAAC;YAChD,IAAI,CAAC,MAAM,GAAG,MAAM,CAAC,MAAM,CAAC;QAC9B,CAAC;IACH,CAAC;IAAC,MAAM,CAAC;QACP,QAAQ;IACV,CAAC;IAED,IAAI,CAAC;QACH,MAAM,MAAM,GAAG,MAAM,EAAE,CAAC,QAAQ,CAAC,IAAI,CAAC,IAAI,CAAC,WAAW,EAAE,WAAW,CAAC,EAAE,OAAO,CAAC,CAAC;QAC/E,IAAI,yBAAyB,CAAC,IAAI,CAAC,MAAM,CAAC,IAAI,MAAM,CAAC,QAAQ,CAAC,2BAA2B,CAAC,EAAE,CAAC;YAC3F,IAAI,CAAC,mBAAmB,GAAG,IAAI,CAAC;YAChC,IAAI,CAAC,QAAQ,GAAG,sBAAsB,CAAC,MAAM,EAAE,WAAW,CAAC,CAAC;YAC5D,IAAI,CAAC,UAAU,GAAG,sBAAsB,CAAC,MAAM,EAAE,YAAY,CAAC,CAAC;QACjE,CAAC;IACH,CAAC;IAAC,MAAM,CAAC;QACP,gBAAgB;IAClB,CAAC;IAED,OAAO,IAAI,CAAC;AACd,CAAC;AAED,kEAAkE;AAClE,SAAS,sBAAsB,CAAC,OAAe,EAAE,OAAe;IAC9D,MAAM,OAAO,GAAG,IAAI,MAAM,CAAC,WAAW,OAAO,UAAU,EAAE,GAAG,CAAC,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;IAC5E,IAAI,CAAC,OAAO;QAAE,OAAO,SAAS,CAAC;IAC/B,MAAM,IAAI,GAAG,OAAO,CAAC,KAAK,CAAC,OAAO,CAAC,KAAK,GAAG,OAAO,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC;IAC9D,MAAM,GAAG,GAAG,IAAI,CAAC,MAAM,CAAC,4CAA4C,CAAC,CAAC;IACtE,MAAM,KAAK,GAAG,GAAG,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC;IACrD,MAAM,KAAK,GAAG,KAAK,CAAC,KAAK,CAAC,8BAA8B,CAAC,CAAC;IAC1D,OAAO,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC;AAClC,CAAC;AAED,yEAAyE;AACzE,KAAK,UAAU,eAAe,CAAC,WAAmB;IAChD,IAAI,CAAC;QACH,OAAO,CAAC,MAAM,EAAE,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,WAAW,EAAE,UAAU,EAAE,WAAW,CAAC,CAAC,CAAC,CAAC,WAAW,EAAE,CAAC;IACxF,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,KAAK,CAAC;IACf,CAAC;AACH,CAAC;AAED;;;;GAIG;AACH,KAAK,UAAU,mBAAmB,CAAC,WAAmB;IACpD,IAAI,CAAC;QACH,OAAO,CAAC,MAAM,EAAE,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,WAAW,EAAE,SAAS,EAAE,YAAY,CAAC,CAAC,CAAC,CAAC,MAAM,EAAE,CAAC;IACnF,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,KAAK,CAAC;IACf,CAAC;AACH,CAAC;AAED,yCAAyC;AACzC,KAAK,UAAU,gBAAgB,CAAC,WAAmB,EAAE,OAAiB;IACpE,MAAM,KAAK,GAAG,IAAI,GAAG,EAAU,CAAC;IAEhC,KAAK,UAAU,IAAI,CAAC,GAAW;QAC7B,IAAI,OAA8B,CAAC;QACnC,IAAI,CAAC;YACH,OAAO,GAAG,MAAM,EAAE,CAAC,OAAO,CAAC,GAAG,EAAE,EAAE,aAAa,EAAE,IAAI,EAAE,CAAC,CAAC;QAC3D,CAAC;QAAC,MAAM,CAAC;YACP,OAAO;QACT,CAAC;QACD,KAAK,MAAM,KAAK,IAAI,OAAO,EAAE,CAAC;YAC5B,IAAI,CAAC,KAAK,CAAC,WAAW,EAAE;gBAAE,SAAS;YACnC,IAAI,KAAK,CAAC,IAAI,KAAK,cAAc,IAAI,KAAK,CAAC,IAAI,KAAK,WAAW,IAAI,KAAK,CAAC,IAAI,KAAK,MAAM;gBAAE,SAAS;YACnG,MAAM,SAAS,GAAG,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,KAAK,CAAC,IAAI,CAAC,CAAC;YAC7C,IAAI,IAAA,eAAU,EAAC,IAAI,CAAC,IAAI,CAAC,SAAS,EAAE,YAAY,CAAC,CAAC,EAAE,CAAC;gBACnD,KAAK,CAAC,GAAG,CAAC,SAAS,CAAC,CAAC;YACvB,CAAC;YACD,MAAM,IAAI,CAAC,SAAS,CAAC,CAAC;QACxB,CAAC;IACH,CAAC;IAED,KAAK,MAAM,IAAI,IAAI,OAAO,EAAE,CAAC;QAC3B,MAAM,QAAQ,GAAG,IAAI,CAAC,IAAI,CAAC,WAAW,EAAE,IAAI,CAAC,CAAC;QAC9C,IAAI,IAAA,eAAU,EAAC,IAAI,CAAC,IAAI,CAAC,QAAQ,EAAE,YAAY,CAAC,CAAC,EAAE,CAAC;YAClD,KAAK,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC;QACtB,CAAC;QACD,MAAM,IAAI,CAAC,QAAQ,CAAC,CAAC;IACvB,CAAC;IACD,OAAO,KAAK,CAAC,IAAI,CAAC;AACpB,CAAC"}
@@ -0,0 +1,23 @@
1
+ /**
2
+ * commit 文件分类(tdd-chain 与 phase-format 共享同一份分类结果,Q4 定稿)
3
+ *
4
+ * - 纯非代码(全部命中 noncode_globs)与纯测试(全部命中 test_globs)commit 天然免检
5
+ * - 混合 commit 只要触到代码文件即需走引用链
6
+ * - 空文件清单按免检处理
7
+ */
8
+ import type { CommitInput, CompletionCheckersConfig } from './types';
9
+ /** 单 commit 文件分类结果 */
10
+ export interface CommitFileClassification {
11
+ /** 无代码文件(纯测试 / 纯非代码 / 空清单)→ 天然免检 */
12
+ exempt: boolean;
13
+ /** 文件清单命中 test_globs(被引 commit 须满足) */
14
+ hasTests: boolean;
15
+ }
16
+ /** 从配置取 glob(缺省落默认) */
17
+ export declare function resolveGlobs(config: CompletionCheckersConfig): {
18
+ testGlobs: string[];
19
+ noncodeGlobs: string[];
20
+ };
21
+ /** 分类单 commit 的文件清单 */
22
+ export declare function classifyCommitFiles(commit: CommitInput, testGlobs: string[], noncodeGlobs: string[]): CommitFileClassification;
23
+ //# sourceMappingURL=classify.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"classify.d.ts","sourceRoot":"","sources":["../../src/completion-checkers/classify.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAEH,OAAO,KAAK,EAAE,WAAW,EAAE,wBAAwB,EAAE,MAAM,SAAS,CAAC;AAGrE,sBAAsB;AACtB,MAAM,WAAW,wBAAwB;IACvC,oCAAoC;IACpC,MAAM,EAAE,OAAO,CAAC;IAChB,uCAAuC;IACvC,QAAQ,EAAE,OAAO,CAAC;CACnB;AAED,uBAAuB;AACvB,wBAAgB,YAAY,CAAC,MAAM,EAAE,wBAAwB,GAAG;IAAE,SAAS,EAAE,MAAM,EAAE,CAAC;IAAC,YAAY,EAAE,MAAM,EAAE,CAAA;CAAE,CAK9G;AAED,uBAAuB;AACvB,wBAAgB,mBAAmB,CACjC,MAAM,EAAE,WAAW,EACnB,SAAS,EAAE,MAAM,EAAE,EACnB,YAAY,EAAE,MAAM,EAAE,GACrB,wBAAwB,CAc1B"}
@@ -0,0 +1,37 @@
1
+ "use strict";
2
+ /**
3
+ * commit 文件分类(tdd-chain 与 phase-format 共享同一份分类结果,Q4 定稿)
4
+ *
5
+ * - 纯非代码(全部命中 noncode_globs)与纯测试(全部命中 test_globs)commit 天然免检
6
+ * - 混合 commit 只要触到代码文件即需走引用链
7
+ * - 空文件清单按免检处理
8
+ */
9
+ Object.defineProperty(exports, "__esModule", { value: true });
10
+ exports.resolveGlobs = resolveGlobs;
11
+ exports.classifyCommitFiles = classifyCommitFiles;
12
+ const glob_match_1 = require("./glob-match");
13
+ /** 从配置取 glob(缺省落默认) */
14
+ function resolveGlobs(config) {
15
+ return {
16
+ testGlobs: config.testGlobs ?? glob_match_1.DEFAULT_TEST_GLOBS,
17
+ noncodeGlobs: config.noncodeGlobs ?? glob_match_1.DEFAULT_NONCODE_GLOBS,
18
+ };
19
+ }
20
+ /** 分类单 commit 的文件清单 */
21
+ function classifyCommitFiles(commit, testGlobs, noncodeGlobs) {
22
+ if (commit.files.length === 0) {
23
+ return { exempt: true, hasTests: false };
24
+ }
25
+ let hasTests = false;
26
+ let hasCode = false;
27
+ for (const file of commit.files) {
28
+ if ((0, glob_match_1.matchAnyGlob)(file, testGlobs)) {
29
+ hasTests = true;
30
+ }
31
+ else if (!(0, glob_match_1.matchAnyGlob)(file, noncodeGlobs)) {
32
+ hasCode = true;
33
+ }
34
+ }
35
+ return { exempt: !hasCode, hasTests };
36
+ }
37
+ //# sourceMappingURL=classify.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"classify.js","sourceRoot":"","sources":["../../src/completion-checkers/classify.ts"],"names":[],"mappings":";AAAA;;;;;;GAMG;;AAcH,oCAKC;AAGD,kDAkBC;AArCD,6CAAuF;AAUvF,uBAAuB;AACvB,SAAgB,YAAY,CAAC,MAAgC;IAC3D,OAAO;QACL,SAAS,EAAE,MAAM,CAAC,SAAS,IAAI,+BAAkB;QACjD,YAAY,EAAE,MAAM,CAAC,YAAY,IAAI,kCAAqB;KAC3D,CAAC;AACJ,CAAC;AAED,uBAAuB;AACvB,SAAgB,mBAAmB,CACjC,MAAmB,EACnB,SAAmB,EACnB,YAAsB;IAEtB,IAAI,MAAM,CAAC,KAAK,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QAC9B,OAAO,EAAE,MAAM,EAAE,IAAI,EAAE,QAAQ,EAAE,KAAK,EAAE,CAAC;IAC3C,CAAC;IACD,IAAI,QAAQ,GAAG,KAAK,CAAC;IACrB,IAAI,OAAO,GAAG,KAAK,CAAC;IACpB,KAAK,MAAM,IAAI,IAAI,MAAM,CAAC,KAAK,EAAE,CAAC;QAChC,IAAI,IAAA,yBAAY,EAAC,IAAI,EAAE,SAAS,CAAC,EAAE,CAAC;YAClC,QAAQ,GAAG,IAAI,CAAC;QAClB,CAAC;aAAM,IAAI,CAAC,IAAA,yBAAY,EAAC,IAAI,EAAE,YAAY,CAAC,EAAE,CAAC;YAC7C,OAAO,GAAG,IAAI,CAAC;QACjB,CAAC;IACH,CAAC;IACD,OAAO,EAAE,MAAM,EAAE,CAAC,OAAO,EAAE,QAAQ,EAAE,CAAC;AACxC,CAAC"}
@@ -0,0 +1,12 @@
1
+ /**
2
+ * contract-presence:通用契约在场引擎(Q5 定稿)
3
+ *
4
+ * - 按 yml contracts 类型清单查表:类型不在清单内 = skip(不算违规)
5
+ * - 类型 → 判定方法的映射是代码不是配置(CONTRACT_JUDGMENTS);
6
+ * 首个活跃条目 review → context.reviewReport 在场(studio agent-loop 已解析字段,不重复解析)
7
+ * - 类型在清单内但无判定方法注册 = violation(暴露配置与代码失配)
8
+ */
9
+ import type { CompletionCheckersConfig, ContractPresenceContext, ContractPresenceResult } from './types';
10
+ /** 契约在场判定 */
11
+ export declare function verifyContractPresence(type: string, context: ContractPresenceContext, config?: CompletionCheckersConfig): ContractPresenceResult;
12
+ //# sourceMappingURL=contract-presence.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"contract-presence.d.ts","sourceRoot":"","sources":["../../src/completion-checkers/contract-presence.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAEH,OAAO,KAAK,EAAE,wBAAwB,EAAE,uBAAuB,EAAE,sBAAsB,EAAE,MAAM,SAAS,CAAC;AAOzG,aAAa;AACb,wBAAgB,sBAAsB,CACpC,IAAI,EAAE,MAAM,EACZ,OAAO,EAAE,uBAAuB,EAChC,MAAM,GAAE,wBAA6B,GACpC,sBAAsB,CAkBxB"}
@@ -0,0 +1,36 @@
1
+ "use strict";
2
+ /**
3
+ * contract-presence:通用契约在场引擎(Q5 定稿)
4
+ *
5
+ * - 按 yml contracts 类型清单查表:类型不在清单内 = skip(不算违规)
6
+ * - 类型 → 判定方法的映射是代码不是配置(CONTRACT_JUDGMENTS);
7
+ * 首个活跃条目 review → context.reviewReport 在场(studio agent-loop 已解析字段,不重复解析)
8
+ * - 类型在清单内但无判定方法注册 = violation(暴露配置与代码失配)
9
+ */
10
+ Object.defineProperty(exports, "__esModule", { value: true });
11
+ exports.verifyContractPresence = verifyContractPresence;
12
+ /** 类型 → 判定方法映射(代码,不是配置)。新增契约类型 = 在此加一条 + 测试 */
13
+ const CONTRACT_JUDGMENTS = {
14
+ review: (context) => context.reviewReport != null,
15
+ };
16
+ /** 契约在场判定 */
17
+ function verifyContractPresence(type, context, config = {}) {
18
+ if (config.enabled === false || config.checkers?.contractPresence === false) {
19
+ return { checker: 'contract-presence', verdict: 'skip', detail: 'checker 已禁用' };
20
+ }
21
+ if (!(config.contracts ?? []).includes(type)) {
22
+ return { checker: 'contract-presence', verdict: 'skip', detail: `类型 ${type} 无 contracts 表项` };
23
+ }
24
+ const judge = CONTRACT_JUDGMENTS[type];
25
+ if (!judge) {
26
+ return {
27
+ checker: 'contract-presence',
28
+ verdict: 'violation',
29
+ detail: `类型 ${type} 已在 contracts 声明但无判定方法注册(配置与代码失配)`,
30
+ };
31
+ }
32
+ return judge(context)
33
+ ? { checker: 'contract-presence', verdict: 'pass' }
34
+ : { checker: 'contract-presence', verdict: 'violation', detail: `类型 ${type} 契约标记缺失` };
35
+ }
36
+ //# sourceMappingURL=contract-presence.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"contract-presence.js","sourceRoot":"","sources":["../../src/completion-checkers/contract-presence.ts"],"names":[],"mappings":";AAAA;;;;;;;GAOG;;AAUH,wDAsBC;AA5BD,+CAA+C;AAC/C,MAAM,kBAAkB,GAAkE;IACxF,MAAM,EAAE,CAAC,OAAO,EAAE,EAAE,CAAC,OAAO,CAAC,YAAY,IAAI,IAAI;CAClD,CAAC;AAEF,aAAa;AACb,SAAgB,sBAAsB,CACpC,IAAY,EACZ,OAAgC,EAChC,SAAmC,EAAE;IAErC,IAAI,MAAM,CAAC,OAAO,KAAK,KAAK,IAAI,MAAM,CAAC,QAAQ,EAAE,gBAAgB,KAAK,KAAK,EAAE,CAAC;QAC5E,OAAO,EAAE,OAAO,EAAE,mBAAmB,EAAE,OAAO,EAAE,MAAM,EAAE,MAAM,EAAE,aAAa,EAAE,CAAC;IAClF,CAAC;IACD,IAAI,CAAC,CAAC,MAAM,CAAC,SAAS,IAAI,EAAE,CAAC,CAAC,QAAQ,CAAC,IAAI,CAAC,EAAE,CAAC;QAC7C,OAAO,EAAE,OAAO,EAAE,mBAAmB,EAAE,OAAO,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,IAAI,iBAAiB,EAAE,CAAC;IAChG,CAAC;IACD,MAAM,KAAK,GAAG,kBAAkB,CAAC,IAAI,CAAC,CAAC;IACvC,IAAI,CAAC,KAAK,EAAE,CAAC;QACX,OAAO;YACL,OAAO,EAAE,mBAAmB;YAC5B,OAAO,EAAE,WAAW;YACpB,MAAM,EAAE,MAAM,IAAI,mCAAmC;SACtD,CAAC;IACJ,CAAC;IACD,OAAO,KAAK,CAAC,OAAO,CAAC;QACnB,CAAC,CAAC,EAAE,OAAO,EAAE,mBAAmB,EAAE,OAAO,EAAE,MAAM,EAAE;QACnD,CAAC,CAAC,EAAE,OAAO,EAAE,mBAAmB,EAAE,OAAO,EAAE,WAAW,EAAE,MAAM,EAAE,MAAM,IAAI,SAAS,EAAE,CAAC;AAC1F,CAAC"}
@@ -0,0 +1,13 @@
1
+ /**
2
+ * 轻量 glob 匹配(支持 `**`、`*`、`?`),用于 commits 文件清单分类。
3
+ * 不匹配文件系统,纯字符串判定。
4
+ */
5
+ /** 默认测试文件 glob(Q2 定稿) */
6
+ export declare const DEFAULT_TEST_GLOBS: string[];
7
+ /** 默认非代码文件 glob(兜底;权威清单由 yml noncode_globs 供给) */
8
+ export declare const DEFAULT_NONCODE_GLOBS: string[];
9
+ /** 单 glob 匹配 */
10
+ export declare function matchGlob(file: string, glob: string): boolean;
11
+ /** 命中任一 glob */
12
+ export declare function matchAnyGlob(file: string, globs: string[]): boolean;
13
+ //# sourceMappingURL=glob-match.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"glob-match.d.ts","sourceRoot":"","sources":["../../src/completion-checkers/glob-match.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,yBAAyB;AACzB,eAAO,MAAM,kBAAkB,UAAsD,CAAC;AAEtF,kDAAkD;AAClD,eAAO,MAAM,qBAAqB,UAAiD,CAAC;AAoCpF,gBAAgB;AAChB,wBAAgB,SAAS,CAAC,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,GAAG,OAAO,CAE7D;AAED,gBAAgB;AAChB,wBAAgB,YAAY,CAAC,IAAI,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE,GAAG,OAAO,CAEnE"}
@@ -0,0 +1,58 @@
1
+ "use strict";
2
+ /**
3
+ * 轻量 glob 匹配(支持 `**`、`*`、`?`),用于 commits 文件清单分类。
4
+ * 不匹配文件系统,纯字符串判定。
5
+ */
6
+ Object.defineProperty(exports, "__esModule", { value: true });
7
+ exports.DEFAULT_NONCODE_GLOBS = exports.DEFAULT_TEST_GLOBS = void 0;
8
+ exports.matchGlob = matchGlob;
9
+ exports.matchAnyGlob = matchAnyGlob;
10
+ /** 默认测试文件 glob(Q2 定稿) */
11
+ exports.DEFAULT_TEST_GLOBS = ['**/*.test.ts', '**/*.spec.ts', '**/__tests__/**'];
12
+ /** 默认非代码文件 glob(兜底;权威清单由 yml noncode_globs 供给) */
13
+ exports.DEFAULT_NONCODE_GLOBS = ['**/*.md', '**/*.mdx', '**/*.txt', 'docs/**'];
14
+ function escapeRegExp(s) {
15
+ return s.replace(/[.+^${}()|[\]\\]/g, '\\$&');
16
+ }
17
+ /** glob → 锚定正则。前缀 `**` + `/` 匹配零或多段路径;`*` 不跨 `/`;`?` 匹配单个非 `/` 字符 */
18
+ function globToRegExp(glob) {
19
+ let re = '';
20
+ let i = 0;
21
+ while (i < glob.length) {
22
+ const c = glob[i];
23
+ if (c === '*') {
24
+ if (glob[i + 1] === '*') {
25
+ if (glob[i + 2] === '/') {
26
+ re += '(?:[^/]+/)*';
27
+ i += 3;
28
+ }
29
+ else {
30
+ re += '.*';
31
+ i += 2;
32
+ }
33
+ }
34
+ else {
35
+ re += '[^/]*';
36
+ i += 1;
37
+ }
38
+ }
39
+ else if (c === '?') {
40
+ re += '[^/]';
41
+ i += 1;
42
+ }
43
+ else {
44
+ re += escapeRegExp(c);
45
+ i += 1;
46
+ }
47
+ }
48
+ return new RegExp('^' + re + '$');
49
+ }
50
+ /** 单 glob 匹配 */
51
+ function matchGlob(file, glob) {
52
+ return globToRegExp(glob).test(file);
53
+ }
54
+ /** 命中任一 glob */
55
+ function matchAnyGlob(file, globs) {
56
+ return globs.some((g) => matchGlob(file, g));
57
+ }
58
+ //# sourceMappingURL=glob-match.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"glob-match.js","sourceRoot":"","sources":["../../src/completion-checkers/glob-match.ts"],"names":[],"mappings":";AAAA;;;GAGG;;;AA2CH,8BAEC;AAGD,oCAEC;AAhDD,yBAAyB;AACZ,QAAA,kBAAkB,GAAG,CAAC,cAAc,EAAE,cAAc,EAAE,iBAAiB,CAAC,CAAC;AAEtF,kDAAkD;AACrC,QAAA,qBAAqB,GAAG,CAAC,SAAS,EAAE,UAAU,EAAE,UAAU,EAAE,SAAS,CAAC,CAAC;AAEpF,SAAS,YAAY,CAAC,CAAS;IAC7B,OAAO,CAAC,CAAC,OAAO,CAAC,mBAAmB,EAAE,MAAM,CAAC,CAAC;AAChD,CAAC;AAED,qEAAqE;AACrE,SAAS,YAAY,CAAC,IAAY;IAChC,IAAI,EAAE,GAAG,EAAE,CAAC;IACZ,IAAI,CAAC,GAAG,CAAC,CAAC;IACV,OAAO,CAAC,GAAG,IAAI,CAAC,MAAM,EAAE,CAAC;QACvB,MAAM,CAAC,GAAG,IAAI,CAAC,CAAC,CAAC,CAAC;QAClB,IAAI,CAAC,KAAK,GAAG,EAAE,CAAC;YACd,IAAI,IAAI,CAAC,CAAC,GAAG,CAAC,CAAC,KAAK,GAAG,EAAE,CAAC;gBACxB,IAAI,IAAI,CAAC,CAAC,GAAG,CAAC,CAAC,KAAK,GAAG,EAAE,CAAC;oBACxB,EAAE,IAAI,aAAa,CAAC;oBACpB,CAAC,IAAI,CAAC,CAAC;gBACT,CAAC;qBAAM,CAAC;oBACN,EAAE,IAAI,IAAI,CAAC;oBACX,CAAC,IAAI,CAAC,CAAC;gBACT,CAAC;YACH,CAAC;iBAAM,CAAC;gBACN,EAAE,IAAI,OAAO,CAAC;gBACd,CAAC,IAAI,CAAC,CAAC;YACT,CAAC;QACH,CAAC;aAAM,IAAI,CAAC,KAAK,GAAG,EAAE,CAAC;YACrB,EAAE,IAAI,MAAM,CAAC;YACb,CAAC,IAAI,CAAC,CAAC;QACT,CAAC;aAAM,CAAC;YACN,EAAE,IAAI,YAAY,CAAC,CAAC,CAAC,CAAC;YACtB,CAAC,IAAI,CAAC,CAAC;QACT,CAAC;IACH,CAAC;IACD,OAAO,IAAI,MAAM,CAAC,GAAG,GAAG,EAAE,GAAG,GAAG,CAAC,CAAC;AACpC,CAAC;AAED,gBAAgB;AAChB,SAAgB,SAAS,CAAC,IAAY,EAAE,IAAY;IAClD,OAAO,YAAY,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;AACvC,CAAC;AAED,gBAAgB;AAChB,SAAgB,YAAY,CAAC,IAAY,EAAE,KAAe;IACxD,OAAO,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,SAAS,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC,CAAC;AAC/C,CAAC"}
@@ -0,0 +1,19 @@
1
+ /**
2
+ * Completion Checkers(T7-E1,studio#160)
3
+ *
4
+ * WU 收尾软观测三件套——纯判定函数库:
5
+ * - verifyTddChain:实现 commit 的 Tested-By 引用链验证
6
+ * - verifyPhaseFormat:phase(...) subject 结构验证
7
+ * - verifyContractPresence:通用契约在场引擎
8
+ *
9
+ * 与 ConstraintCheck 闭环注册表无关:直接 export,不注册、不碰 checkers/index.ts。
10
+ * 函数不碰文件系统与 git;commits 由调用方(studio 第四段守卫,T7-E2)供给。
11
+ */
12
+ export * from './types';
13
+ export { DEFAULT_TEST_GLOBS, DEFAULT_NONCODE_GLOBS, matchGlob, matchAnyGlob } from './glob-match';
14
+ export { classifyCommitFiles, resolveGlobs } from './classify';
15
+ export type { CommitFileClassification } from './classify';
16
+ export { verifyTddChain, TESTED_BY_RE, TESTS_NONE_RE } from './tdd-chain';
17
+ export { verifyPhaseFormat, PHASE_SUBJECT_RE } from './phase-format';
18
+ export { verifyContractPresence } from './contract-presence';
19
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/completion-checkers/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG;AAEH,cAAc,SAAS,CAAC;AACxB,OAAO,EAAE,kBAAkB,EAAE,qBAAqB,EAAE,SAAS,EAAE,YAAY,EAAE,MAAM,cAAc,CAAC;AAClG,OAAO,EAAE,mBAAmB,EAAE,YAAY,EAAE,MAAM,YAAY,CAAC;AAC/D,YAAY,EAAE,wBAAwB,EAAE,MAAM,YAAY,CAAC;AAC3D,OAAO,EAAE,cAAc,EAAE,YAAY,EAAE,aAAa,EAAE,MAAM,aAAa,CAAC;AAC1E,OAAO,EAAE,iBAAiB,EAAE,gBAAgB,EAAE,MAAM,gBAAgB,CAAC;AACrE,OAAO,EAAE,sBAAsB,EAAE,MAAM,qBAAqB,CAAC"}
@@ -0,0 +1,47 @@
1
+ "use strict";
2
+ /**
3
+ * Completion Checkers(T7-E1,studio#160)
4
+ *
5
+ * WU 收尾软观测三件套——纯判定函数库:
6
+ * - verifyTddChain:实现 commit 的 Tested-By 引用链验证
7
+ * - verifyPhaseFormat:phase(...) subject 结构验证
8
+ * - verifyContractPresence:通用契约在场引擎
9
+ *
10
+ * 与 ConstraintCheck 闭环注册表无关:直接 export,不注册、不碰 checkers/index.ts。
11
+ * 函数不碰文件系统与 git;commits 由调用方(studio 第四段守卫,T7-E2)供给。
12
+ */
13
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
14
+ if (k2 === undefined) k2 = k;
15
+ var desc = Object.getOwnPropertyDescriptor(m, k);
16
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
17
+ desc = { enumerable: true, get: function() { return m[k]; } };
18
+ }
19
+ Object.defineProperty(o, k2, desc);
20
+ }) : (function(o, m, k, k2) {
21
+ if (k2 === undefined) k2 = k;
22
+ o[k2] = m[k];
23
+ }));
24
+ var __exportStar = (this && this.__exportStar) || function(m, exports) {
25
+ for (var p in m) if (p !== "default" && !Object.prototype.hasOwnProperty.call(exports, p)) __createBinding(exports, m, p);
26
+ };
27
+ Object.defineProperty(exports, "__esModule", { value: true });
28
+ exports.verifyContractPresence = exports.PHASE_SUBJECT_RE = exports.verifyPhaseFormat = exports.TESTS_NONE_RE = exports.TESTED_BY_RE = exports.verifyTddChain = exports.resolveGlobs = exports.classifyCommitFiles = exports.matchAnyGlob = exports.matchGlob = exports.DEFAULT_NONCODE_GLOBS = exports.DEFAULT_TEST_GLOBS = void 0;
29
+ __exportStar(require("./types"), exports);
30
+ var glob_match_1 = require("./glob-match");
31
+ Object.defineProperty(exports, "DEFAULT_TEST_GLOBS", { enumerable: true, get: function () { return glob_match_1.DEFAULT_TEST_GLOBS; } });
32
+ Object.defineProperty(exports, "DEFAULT_NONCODE_GLOBS", { enumerable: true, get: function () { return glob_match_1.DEFAULT_NONCODE_GLOBS; } });
33
+ Object.defineProperty(exports, "matchGlob", { enumerable: true, get: function () { return glob_match_1.matchGlob; } });
34
+ Object.defineProperty(exports, "matchAnyGlob", { enumerable: true, get: function () { return glob_match_1.matchAnyGlob; } });
35
+ var classify_1 = require("./classify");
36
+ Object.defineProperty(exports, "classifyCommitFiles", { enumerable: true, get: function () { return classify_1.classifyCommitFiles; } });
37
+ Object.defineProperty(exports, "resolveGlobs", { enumerable: true, get: function () { return classify_1.resolveGlobs; } });
38
+ var tdd_chain_1 = require("./tdd-chain");
39
+ Object.defineProperty(exports, "verifyTddChain", { enumerable: true, get: function () { return tdd_chain_1.verifyTddChain; } });
40
+ Object.defineProperty(exports, "TESTED_BY_RE", { enumerable: true, get: function () { return tdd_chain_1.TESTED_BY_RE; } });
41
+ Object.defineProperty(exports, "TESTS_NONE_RE", { enumerable: true, get: function () { return tdd_chain_1.TESTS_NONE_RE; } });
42
+ var phase_format_1 = require("./phase-format");
43
+ Object.defineProperty(exports, "verifyPhaseFormat", { enumerable: true, get: function () { return phase_format_1.verifyPhaseFormat; } });
44
+ Object.defineProperty(exports, "PHASE_SUBJECT_RE", { enumerable: true, get: function () { return phase_format_1.PHASE_SUBJECT_RE; } });
45
+ var contract_presence_1 = require("./contract-presence");
46
+ Object.defineProperty(exports, "verifyContractPresence", { enumerable: true, get: function () { return contract_presence_1.verifyContractPresence; } });
47
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/completion-checkers/index.ts"],"names":[],"mappings":";AAAA;;;;;;;;;;GAUG;;;;;;;;;;;;;;;;;AAEH,0CAAwB;AACxB,2CAAkG;AAAzF,gHAAA,kBAAkB,OAAA;AAAE,mHAAA,qBAAqB,OAAA;AAAE,uGAAA,SAAS,OAAA;AAAE,0GAAA,YAAY,OAAA;AAC3E,uCAA+D;AAAtD,+GAAA,mBAAmB,OAAA;AAAE,wGAAA,YAAY,OAAA;AAE1C,yCAA0E;AAAjE,2GAAA,cAAc,OAAA;AAAE,yGAAA,YAAY,OAAA;AAAE,0GAAA,aAAa,OAAA;AACpD,+CAAqE;AAA5D,iHAAA,iBAAiB,OAAA;AAAE,gHAAA,gBAAgB,OAAA;AAC5C,yDAA6D;AAApD,2HAAA,sBAAsB,OAAA"}
@@ -0,0 +1,15 @@
1
+ /**
2
+ * phase-format:WU 提交 subject 的 phase 结构验证(Q4 定稿)
3
+ *
4
+ * 协议(正则写死在函数里,不进配置):
5
+ * - 全部非 merge commit 的 subject 命中 `^phase\([a-z0-9-]+\):\s+\S`
6
+ * - merge commit 出现即记违规
7
+ * - 阶段名不维护词表不查
8
+ * - 文件分类口径与 tdd-chain 共享(classify.ts),本 checker 不做免检——subject 结构要求覆盖全部非 merge commit
9
+ */
10
+ import type { CommitInput, CompletionCheckersConfig, PhaseFormatResult } from './types';
11
+ /** phase subject 结构(写死) */
12
+ export declare const PHASE_SUBJECT_RE: RegExp;
13
+ /** phase 格式验证 */
14
+ export declare function verifyPhaseFormat(commits: CommitInput[], config?: CompletionCheckersConfig): PhaseFormatResult;
15
+ //# sourceMappingURL=phase-format.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"phase-format.d.ts","sourceRoot":"","sources":["../../src/completion-checkers/phase-format.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAEH,OAAO,KAAK,EAAE,WAAW,EAAiB,wBAAwB,EAAE,iBAAiB,EAAE,MAAM,SAAS,CAAC;AAEvG,2BAA2B;AAC3B,eAAO,MAAM,gBAAgB,QAA+B,CAAC;AAU7D,iBAAiB;AACjB,wBAAgB,iBAAiB,CAC/B,OAAO,EAAE,WAAW,EAAE,EACtB,MAAM,GAAE,wBAA6B,GACpC,iBAAiB,CAoBnB"}
@@ -0,0 +1,42 @@
1
+ "use strict";
2
+ /**
3
+ * phase-format:WU 提交 subject 的 phase 结构验证(Q4 定稿)
4
+ *
5
+ * 协议(正则写死在函数里,不进配置):
6
+ * - 全部非 merge commit 的 subject 命中 `^phase\([a-z0-9-]+\):\s+\S`
7
+ * - merge commit 出现即记违规
8
+ * - 阶段名不维护词表不查
9
+ * - 文件分类口径与 tdd-chain 共享(classify.ts),本 checker 不做免检——subject 结构要求覆盖全部非 merge commit
10
+ */
11
+ Object.defineProperty(exports, "__esModule", { value: true });
12
+ exports.PHASE_SUBJECT_RE = void 0;
13
+ exports.verifyPhaseFormat = verifyPhaseFormat;
14
+ /** phase subject 结构(写死) */
15
+ exports.PHASE_SUBJECT_RE = /^phase\([a-z0-9-]+\):\s+\S/;
16
+ /** merge commit 的 subject 启发式(调用方未显式给 isMerge 时兜底) */
17
+ const MERGE_SUBJECT_RE = /^Merge\s/;
18
+ /** 判定 merge commit:优先 isMerge 显式字段,缺省按 subject 启发式 */
19
+ function isMergeCommit(commit) {
20
+ return commit.isMerge ?? MERGE_SUBJECT_RE.test(commit.subject);
21
+ }
22
+ /** phase 格式验证 */
23
+ function verifyPhaseFormat(commits, config = {}) {
24
+ if (config.enabled === false || config.checkers?.phaseFormat === false) {
25
+ return { checker: 'phase-format', verdict: 'skip', commits: [] };
26
+ }
27
+ const verdicts = commits.map((commit) => {
28
+ if (isMergeCommit(commit)) {
29
+ return { sha: commit.sha, verdict: 'violation', reason: 'WU 提交集内出现 merge commit' };
30
+ }
31
+ if (!exports.PHASE_SUBJECT_RE.test(commit.subject)) {
32
+ return { sha: commit.sha, verdict: 'violation', reason: `subject 不合规:${commit.subject}` };
33
+ }
34
+ return { sha: commit.sha, verdict: 'pass' };
35
+ });
36
+ return {
37
+ checker: 'phase-format',
38
+ verdict: verdicts.some((v) => v.verdict === 'violation') ? 'violation' : 'pass',
39
+ commits: verdicts,
40
+ };
41
+ }
42
+ //# sourceMappingURL=phase-format.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"phase-format.js","sourceRoot":"","sources":["../../src/completion-checkers/phase-format.ts"],"names":[],"mappings":";AAAA;;;;;;;;GAQG;;;AAgBH,8CAuBC;AAnCD,2BAA2B;AACd,QAAA,gBAAgB,GAAG,4BAA4B,CAAC;AAE7D,sDAAsD;AACtD,MAAM,gBAAgB,GAAG,UAAU,CAAC;AAEpC,sDAAsD;AACtD,SAAS,aAAa,CAAC,MAAmB;IACxC,OAAO,MAAM,CAAC,OAAO,IAAI,gBAAgB,CAAC,IAAI,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC;AACjE,CAAC;AAED,iBAAiB;AACjB,SAAgB,iBAAiB,CAC/B,OAAsB,EACtB,SAAmC,EAAE;IAErC,IAAI,MAAM,CAAC,OAAO,KAAK,KAAK,IAAI,MAAM,CAAC,QAAQ,EAAE,WAAW,KAAK,KAAK,EAAE,CAAC;QACvE,OAAO,EAAE,OAAO,EAAE,cAAc,EAAE,OAAO,EAAE,MAAM,EAAE,OAAO,EAAE,EAAE,EAAE,CAAC;IACnE,CAAC;IAED,MAAM,QAAQ,GAAoB,OAAO,CAAC,GAAG,CAAC,CAAC,MAAM,EAAE,EAAE;QACvD,IAAI,aAAa,CAAC,MAAM,CAAC,EAAE,CAAC;YAC1B,OAAO,EAAE,GAAG,EAAE,MAAM,CAAC,GAAG,EAAE,OAAO,EAAE,WAAW,EAAE,MAAM,EAAE,wBAAwB,EAAE,CAAC;QACrF,CAAC;QACD,IAAI,CAAC,wBAAgB,CAAC,IAAI,CAAC,MAAM,CAAC,OAAO,CAAC,EAAE,CAAC;YAC3C,OAAO,EAAE,GAAG,EAAE,MAAM,CAAC,GAAG,EAAE,OAAO,EAAE,WAAW,EAAE,MAAM,EAAE,eAAe,MAAM,CAAC,OAAO,EAAE,EAAE,CAAC;QAC5F,CAAC;QACD,OAAO,EAAE,GAAG,EAAE,MAAM,CAAC,GAAG,EAAE,OAAO,EAAE,MAAM,EAAE,CAAC;IAC9C,CAAC,CAAC,CAAC;IAEH,OAAO;QACL,OAAO,EAAE,cAAc;QACvB,OAAO,EAAE,QAAQ,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,OAAO,KAAK,WAAW,CAAC,CAAC,CAAC,CAAC,WAAW,CAAC,CAAC,CAAC,MAAM;QAC/E,OAAO,EAAE,QAAQ;KAClB,CAAC;AACJ,CAAC"}
@@ -0,0 +1,16 @@
1
+ /**
2
+ * tdd-chain:实现 commit 的测试引用链验证(Q2/Q3 定稿)
3
+ *
4
+ * 协议(写死为机制本体,不进配置):
5
+ * - 实现 commit 必须带 trailer `Tested-By: <sha>`
6
+ * - 被引 sha 须 a) 在本 WU 提交集内 b) 序列位置在本 commit 之前(比位置不比时间戳)c) 其文件清单命中 test_globs
7
+ * - 豁免:trailer `Tests: none` → waiver(放行记台账);纯非代码/纯测试 commit 天然免检
8
+ */
9
+ import type { CommitInput, CompletionCheckersConfig, TddChainResult } from './types';
10
+ /** Tested-By 引用协议(写死) */
11
+ export declare const TESTED_BY_RE: RegExp;
12
+ /** Tests: none 豁免协议(写死) */
13
+ export declare const TESTS_NONE_RE: RegExp;
14
+ /** 引用链验证:伪造引用(不存在 / 位置在后 / 不含测试文件)一律记 violation */
15
+ export declare function verifyTddChain(commits: CommitInput[], config?: CompletionCheckersConfig): TddChainResult;
16
+ //# sourceMappingURL=tdd-chain.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"tdd-chain.d.ts","sourceRoot":"","sources":["../../src/completion-checkers/tdd-chain.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAEH,OAAO,KAAK,EAAE,WAAW,EAAiB,wBAAwB,EAAE,cAAc,EAAE,MAAM,SAAS,CAAC;AAGpG,yBAAyB;AACzB,eAAO,MAAM,YAAY,QAA0C,CAAC;AAEpE,2BAA2B;AAC3B,eAAO,MAAM,aAAa,QAAyB,CAAC;AAEpD,mDAAmD;AACnD,wBAAgB,cAAc,CAC5B,OAAO,EAAE,WAAW,EAAE,EACtB,MAAM,GAAE,wBAA6B,GACpC,cAAc,CAwChB"}