@dommaker/harness 0.8.1 → 0.9.0

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 (339) hide show
  1. package/README.md +126 -183
  2. package/bin/harness.js +29 -12
  3. package/dist/agents/index.d.ts +3 -0
  4. package/dist/agents/index.d.ts.map +1 -0
  5. package/dist/agents/index.js +19 -0
  6. package/dist/agents/index.js.map +1 -0
  7. package/dist/agents/lifecycle.d.ts +68 -0
  8. package/dist/agents/lifecycle.d.ts.map +1 -0
  9. package/dist/agents/lifecycle.js +181 -0
  10. package/dist/agents/lifecycle.js.map +1 -0
  11. package/dist/agents/types.d.ts +42 -0
  12. package/dist/agents/types.d.ts.map +1 -0
  13. package/dist/agents/types.js +6 -0
  14. package/dist/agents/types.js.map +1 -0
  15. package/dist/architecture/cross-project-checker.d.ts +19 -1
  16. package/dist/architecture/cross-project-checker.d.ts.map +1 -1
  17. package/dist/architecture/cross-project-checker.js +72 -60
  18. package/dist/architecture/cross-project-checker.js.map +1 -1
  19. package/dist/cli/commands/acceptance.d.ts.map +1 -1
  20. package/dist/cli/commands/acceptance.js +1 -0
  21. package/dist/cli/commands/acceptance.js.map +1 -1
  22. package/dist/cli/commands/check.d.ts.map +1 -1
  23. package/dist/cli/commands/check.js +2 -4
  24. package/dist/cli/commands/check.js.map +1 -1
  25. package/dist/cli/commands/command.d.ts +19 -0
  26. package/dist/cli/commands/command.d.ts.map +1 -0
  27. package/dist/cli/commands/command.js +81 -0
  28. package/dist/cli/commands/command.js.map +1 -0
  29. package/dist/cli/commands/index.d.ts +1 -0
  30. package/dist/cli/commands/index.d.ts.map +1 -1
  31. package/dist/cli/commands/index.js +3 -1
  32. package/dist/cli/commands/index.js.map +1 -1
  33. package/dist/cli/commands/passes-gate.d.ts.map +1 -1
  34. package/dist/cli/commands/passes-gate.js +2 -4
  35. package/dist/cli/commands/passes-gate.js.map +1 -1
  36. package/dist/cli/commands/review.d.ts.map +1 -1
  37. package/dist/cli/commands/review.js +27 -63
  38. package/dist/cli/commands/review.js.map +1 -1
  39. package/dist/cli/commands/security.d.ts +1 -1
  40. package/dist/cli/commands/security.d.ts.map +1 -1
  41. package/dist/cli/commands/security.js +40 -94
  42. package/dist/cli/commands/security.js.map +1 -1
  43. package/dist/cli/commands/status.d.ts.map +1 -1
  44. package/dist/cli/commands/status.js +2 -2
  45. package/dist/cli/commands/status.js.map +1 -1
  46. package/dist/constraints/definitions.d.ts +39 -0
  47. package/dist/constraints/definitions.d.ts.map +1 -0
  48. package/dist/constraints/definitions.js +71 -0
  49. package/dist/constraints/definitions.js.map +1 -0
  50. package/dist/constraints/index.d.ts +5 -0
  51. package/dist/constraints/index.d.ts.map +1 -0
  52. package/dist/constraints/index.js +21 -0
  53. package/dist/constraints/index.js.map +1 -0
  54. package/dist/constraints/quality.d.ts +11 -0
  55. package/dist/constraints/quality.d.ts.map +1 -0
  56. package/dist/constraints/quality.js +257 -0
  57. package/dist/constraints/quality.js.map +1 -0
  58. package/dist/constraints/registry.d.ts +64 -0
  59. package/dist/constraints/registry.d.ts.map +1 -0
  60. package/dist/constraints/registry.js +167 -0
  61. package/dist/constraints/registry.js.map +1 -0
  62. package/dist/constraints/safety.d.ts +13 -0
  63. package/dist/constraints/safety.d.ts.map +1 -0
  64. package/dist/constraints/safety.js +103 -0
  65. package/dist/constraints/safety.js.map +1 -0
  66. package/dist/constraints/types.d.ts +53 -0
  67. package/dist/constraints/types.d.ts.map +1 -0
  68. package/dist/constraints/types.js +8 -0
  69. package/dist/constraints/types.js.map +1 -0
  70. package/dist/context/compaction.d.ts +57 -0
  71. package/dist/context/compaction.d.ts.map +1 -0
  72. package/dist/context/compaction.js +166 -0
  73. package/dist/context/compaction.js.map +1 -0
  74. package/dist/context/file-budget.d.ts +40 -0
  75. package/dist/context/file-budget.d.ts.map +1 -0
  76. package/dist/context/file-budget.js +147 -0
  77. package/dist/context/file-budget.js.map +1 -0
  78. package/dist/context/index.d.ts +15 -0
  79. package/dist/context/index.d.ts.map +1 -0
  80. package/dist/context/index.js +31 -0
  81. package/dist/context/index.js.map +1 -0
  82. package/dist/context/knowledge-injector.d.ts +49 -0
  83. package/dist/context/knowledge-injector.d.ts.map +1 -0
  84. package/dist/context/knowledge-injector.js +122 -0
  85. package/dist/context/knowledge-injector.js.map +1 -0
  86. package/dist/context/progressive-loader.d.ts +0 -1
  87. package/dist/context/progressive-loader.d.ts.map +1 -1
  88. package/dist/context/progressive-loader.js +15 -32
  89. package/dist/context/progressive-loader.js.map +1 -1
  90. package/dist/context/session-manager.d.ts +67 -0
  91. package/dist/context/session-manager.d.ts.map +1 -0
  92. package/dist/context/session-manager.js +275 -0
  93. package/dist/context/session-manager.js.map +1 -0
  94. package/dist/context/token-pipeline.d.ts +55 -0
  95. package/dist/context/token-pipeline.d.ts.map +1 -0
  96. package/dist/context/token-pipeline.js +220 -0
  97. package/dist/context/token-pipeline.js.map +1 -0
  98. package/dist/context/tool-output-budget.d.ts +59 -0
  99. package/dist/context/tool-output-budget.d.ts.map +1 -0
  100. package/dist/context/tool-output-budget.js +177 -0
  101. package/dist/context/tool-output-budget.js.map +1 -0
  102. package/dist/context/types.d.ts +113 -0
  103. package/dist/context/types.d.ts.map +1 -0
  104. package/dist/context/types.js +30 -0
  105. package/dist/context/types.js.map +1 -0
  106. package/dist/core/constraints/checker.d.ts +9 -1
  107. package/dist/core/constraints/checker.d.ts.map +1 -1
  108. package/dist/core/constraints/checker.js +72 -155
  109. package/dist/core/constraints/checker.js.map +1 -1
  110. package/dist/core/constraints/definitions.d.ts.map +1 -1
  111. package/dist/core/constraints/definitions.js +8 -10
  112. package/dist/core/constraints/definitions.js.map +1 -1
  113. package/dist/core/constraints/interceptor.d.ts.map +1 -1
  114. package/dist/core/constraints/interceptor.js +2 -6
  115. package/dist/core/constraints/interceptor.js.map +1 -1
  116. package/dist/core/project-config-loader.d.ts.map +1 -1
  117. package/dist/core/project-config-loader.js +12 -30
  118. package/dist/core/project-config-loader.js.map +1 -1
  119. package/dist/core/session/clean-state.d.ts.map +1 -1
  120. package/dist/core/session/clean-state.js +6 -8
  121. package/dist/core/session/clean-state.js.map +1 -1
  122. package/dist/core/session/startup.d.ts.map +1 -1
  123. package/dist/core/session/startup.js +3 -5
  124. package/dist/core/session/startup.js.map +1 -1
  125. package/dist/core/spec/validator.d.ts.map +1 -1
  126. package/dist/core/spec/validator.js +2 -4
  127. package/dist/core/spec/validator.js.map +1 -1
  128. package/dist/core/validators/checkpoint.d.ts.map +1 -1
  129. package/dist/core/validators/checkpoint.js +3 -5
  130. package/dist/core/validators/checkpoint.js.map +1 -1
  131. package/dist/core/validators/passes-gate.d.ts +0 -4
  132. package/dist/core/validators/passes-gate.d.ts.map +1 -1
  133. package/dist/core/validators/passes-gate.js +5 -13
  134. package/dist/core/validators/passes-gate.js.map +1 -1
  135. package/dist/dashboard/data.d.ts +39 -0
  136. package/dist/dashboard/data.d.ts.map +1 -0
  137. package/dist/dashboard/data.js +89 -0
  138. package/dist/dashboard/data.js.map +1 -0
  139. package/dist/dashboard/index.d.ts +4 -0
  140. package/dist/dashboard/index.d.ts.map +1 -0
  141. package/dist/dashboard/index.js +20 -0
  142. package/dist/dashboard/index.js.map +1 -0
  143. package/dist/dashboard/stats.d.ts +20 -0
  144. package/dist/dashboard/stats.d.ts.map +1 -0
  145. package/dist/dashboard/stats.js +115 -0
  146. package/dist/dashboard/stats.js.map +1 -0
  147. package/dist/dashboard/types.d.ts +98 -0
  148. package/dist/dashboard/types.d.ts.map +1 -0
  149. package/dist/dashboard/types.js +8 -0
  150. package/dist/dashboard/types.js.map +1 -0
  151. package/dist/failure/recorder.d.ts +4 -0
  152. package/dist/failure/recorder.d.ts.map +1 -1
  153. package/dist/failure/recorder.js +9 -11
  154. package/dist/failure/recorder.js.map +1 -1
  155. package/dist/gates/acceptance.d.ts.map +1 -1
  156. package/dist/gates/acceptance.js +2 -4
  157. package/dist/gates/acceptance.js.map +1 -1
  158. package/dist/gates/contract.d.ts.map +1 -1
  159. package/dist/gates/contract.js +0 -3
  160. package/dist/gates/contract.js.map +1 -1
  161. package/dist/gates/performance.d.ts.map +1 -1
  162. package/dist/gates/performance.js +3 -5
  163. package/dist/gates/performance.js.map +1 -1
  164. package/dist/gates/review.d.ts.map +1 -1
  165. package/dist/gates/review.js +4 -6
  166. package/dist/gates/review.js.map +1 -1
  167. package/dist/gates/security.d.ts.map +1 -1
  168. package/dist/gates/security.js +2 -4
  169. package/dist/gates/security.js.map +1 -1
  170. package/dist/index.d.ts +9 -2
  171. package/dist/index.d.ts.map +1 -1
  172. package/dist/index.js +34 -3
  173. package/dist/index.js.map +1 -1
  174. package/dist/knowledge/import.d.ts +95 -0
  175. package/dist/knowledge/import.d.ts.map +1 -0
  176. package/dist/knowledge/import.js +429 -0
  177. package/dist/knowledge/import.js.map +1 -0
  178. package/dist/knowledge/index.d.ts +15 -0
  179. package/dist/knowledge/index.d.ts.map +1 -0
  180. package/dist/knowledge/index.js +40 -0
  181. package/dist/knowledge/index.js.map +1 -0
  182. package/dist/knowledge/ingest.d.ts +30 -0
  183. package/dist/knowledge/ingest.d.ts.map +1 -0
  184. package/dist/knowledge/ingest.js +94 -0
  185. package/dist/knowledge/ingest.js.map +1 -0
  186. package/dist/knowledge/lifecycle-hooks.d.ts +62 -0
  187. package/dist/knowledge/lifecycle-hooks.d.ts.map +1 -0
  188. package/dist/knowledge/lifecycle-hooks.js +140 -0
  189. package/dist/knowledge/lifecycle-hooks.js.map +1 -0
  190. package/dist/knowledge/lifecycle.d.ts +43 -0
  191. package/dist/knowledge/lifecycle.d.ts.map +1 -0
  192. package/dist/knowledge/lifecycle.js +141 -0
  193. package/dist/knowledge/lifecycle.js.map +1 -0
  194. package/dist/knowledge/lint.d.ts +57 -0
  195. package/dist/knowledge/lint.d.ts.map +1 -0
  196. package/dist/knowledge/lint.js +235 -0
  197. package/dist/knowledge/lint.js.map +1 -0
  198. package/dist/knowledge/query.d.ts +33 -0
  199. package/dist/knowledge/query.d.ts.map +1 -0
  200. package/dist/knowledge/query.js +107 -0
  201. package/dist/knowledge/query.js.map +1 -0
  202. package/dist/knowledge/reference-tracker.d.ts +31 -0
  203. package/dist/knowledge/reference-tracker.d.ts.map +1 -0
  204. package/dist/knowledge/reference-tracker.js +124 -0
  205. package/dist/knowledge/reference-tracker.js.map +1 -0
  206. package/dist/knowledge/store.d.ts +42 -0
  207. package/dist/knowledge/store.d.ts.map +1 -0
  208. package/dist/knowledge/store.js +278 -0
  209. package/dist/knowledge/store.js.map +1 -0
  210. package/dist/knowledge/types.d.ts +103 -0
  211. package/dist/knowledge/types.d.ts.map +1 -0
  212. package/dist/knowledge/types.js +17 -0
  213. package/dist/knowledge/types.js.map +1 -0
  214. package/dist/llm/adapter.d.ts +36 -0
  215. package/dist/llm/adapter.d.ts.map +1 -0
  216. package/dist/llm/adapter.js +118 -0
  217. package/dist/llm/adapter.js.map +1 -0
  218. package/dist/llm/index.d.ts +3 -0
  219. package/dist/llm/index.d.ts.map +1 -0
  220. package/dist/llm/index.js +19 -0
  221. package/dist/llm/index.js.map +1 -0
  222. package/dist/llm/types.d.ts +62 -0
  223. package/dist/llm/types.d.ts.map +1 -0
  224. package/dist/llm/types.js +8 -0
  225. package/dist/llm/types.js.map +1 -0
  226. package/dist/monitoring/context-tracker.d.ts +38 -0
  227. package/dist/monitoring/context-tracker.d.ts.map +1 -0
  228. package/dist/monitoring/context-tracker.js +162 -0
  229. package/dist/monitoring/context-tracker.js.map +1 -0
  230. package/dist/monitoring/index.d.ts +3 -0
  231. package/dist/monitoring/index.d.ts.map +1 -1
  232. package/dist/monitoring/index.js +6 -0
  233. package/dist/monitoring/index.js.map +1 -1
  234. package/dist/monitoring/knowledge-doctor.d.ts +78 -0
  235. package/dist/monitoring/knowledge-doctor.d.ts.map +1 -0
  236. package/dist/monitoring/knowledge-doctor.js +266 -0
  237. package/dist/monitoring/knowledge-doctor.js.map +1 -0
  238. package/dist/monitoring/knowledge-evolver.d.ts +72 -0
  239. package/dist/monitoring/knowledge-evolver.d.ts.map +1 -0
  240. package/dist/monitoring/knowledge-evolver.js +205 -0
  241. package/dist/monitoring/knowledge-evolver.js.map +1 -0
  242. package/dist/monitoring/performance-analyzer.d.ts.map +1 -1
  243. package/dist/monitoring/performance-analyzer.js +10 -4
  244. package/dist/monitoring/performance-analyzer.js.map +1 -1
  245. package/dist/monitoring/trace-analyzer.d.ts.map +1 -1
  246. package/dist/monitoring/trace-analyzer.js +12 -5
  247. package/dist/monitoring/trace-analyzer.js.map +1 -1
  248. package/dist/safety/index.d.ts +6 -0
  249. package/dist/safety/index.d.ts.map +1 -0
  250. package/dist/safety/index.js +22 -0
  251. package/dist/safety/index.js.map +1 -0
  252. package/dist/safety/input-guardrail.d.ts +36 -0
  253. package/dist/safety/input-guardrail.d.ts.map +1 -0
  254. package/dist/safety/input-guardrail.js +118 -0
  255. package/dist/safety/input-guardrail.js.map +1 -0
  256. package/dist/safety/output-guardrail.d.ts +40 -0
  257. package/dist/safety/output-guardrail.d.ts.map +1 -0
  258. package/dist/safety/output-guardrail.js +150 -0
  259. package/dist/safety/output-guardrail.js.map +1 -0
  260. package/dist/safety/sandbox.d.ts +45 -0
  261. package/dist/safety/sandbox.d.ts.map +1 -0
  262. package/dist/safety/sandbox.js +134 -0
  263. package/dist/safety/sandbox.js.map +1 -0
  264. package/dist/safety/tool-guardrail.d.ts +51 -0
  265. package/dist/safety/tool-guardrail.d.ts.map +1 -0
  266. package/dist/safety/tool-guardrail.js +147 -0
  267. package/dist/safety/tool-guardrail.js.map +1 -0
  268. package/dist/safety/types.d.ts +104 -0
  269. package/dist/safety/types.d.ts.map +1 -0
  270. package/dist/safety/types.js +6 -0
  271. package/dist/safety/types.js.map +1 -0
  272. package/dist/tools/core/index.d.ts +13 -0
  273. package/dist/tools/core/index.d.ts.map +1 -0
  274. package/dist/tools/core/index.js +198 -0
  275. package/dist/tools/core/index.js.map +1 -0
  276. package/dist/tools/index.d.ts +4 -0
  277. package/dist/tools/index.d.ts.map +1 -0
  278. package/dist/tools/index.js +20 -0
  279. package/dist/tools/index.js.map +1 -0
  280. package/dist/tools/registry.d.ts +59 -0
  281. package/dist/tools/registry.d.ts.map +1 -0
  282. package/dist/tools/registry.js +115 -0
  283. package/dist/tools/registry.js.map +1 -0
  284. package/dist/tools/types.d.ts +38 -0
  285. package/dist/tools/types.d.ts.map +1 -0
  286. package/dist/tools/types.js +6 -0
  287. package/dist/tools/types.js.map +1 -0
  288. package/dist/types/constraint.d.ts +4 -0
  289. package/dist/types/constraint.d.ts.map +1 -1
  290. package/dist/types/constraint.js.map +1 -1
  291. package/dist/utils/exec.d.ts +11 -1
  292. package/dist/utils/exec.d.ts.map +1 -1
  293. package/dist/utils/exec.js +19 -1
  294. package/dist/utils/exec.js.map +1 -1
  295. package/dist/verification/index.d.ts +4 -0
  296. package/dist/verification/index.d.ts.map +1 -0
  297. package/dist/verification/index.js +20 -0
  298. package/dist/verification/index.js.map +1 -0
  299. package/dist/verification/loop.d.ts +30 -0
  300. package/dist/verification/loop.d.ts.map +1 -0
  301. package/dist/verification/loop.js +114 -0
  302. package/dist/verification/loop.js.map +1 -0
  303. package/dist/verification/rules-based.d.ts +40 -0
  304. package/dist/verification/rules-based.d.ts.map +1 -0
  305. package/dist/verification/rules-based.js +130 -0
  306. package/dist/verification/rules-based.js.map +1 -0
  307. package/dist/verification/types.d.ts +69 -0
  308. package/dist/verification/types.d.ts.map +1 -0
  309. package/dist/verification/types.js +6 -0
  310. package/dist/verification/types.js.map +1 -0
  311. package/package.json +1 -1
  312. package/dist/cli/commands/diagnose.d.ts +0 -16
  313. package/dist/cli/commands/diagnose.d.ts.map +0 -1
  314. package/dist/cli/commands/diagnose.js +0 -195
  315. package/dist/cli/commands/diagnose.js.map +0 -1
  316. package/dist/cli/commands/propose.d.ts +0 -18
  317. package/dist/cli/commands/propose.d.ts.map +0 -1
  318. package/dist/cli/commands/propose.js +0 -331
  319. package/dist/cli/commands/propose.js.map +0 -1
  320. package/dist/cli/commands/traces.d.ts +0 -15
  321. package/dist/cli/commands/traces.d.ts.map +0 -1
  322. package/dist/cli/commands/traces.js +0 -167
  323. package/dist/cli/commands/traces.js.map +0 -1
  324. package/dist/extensions/long-running/constraints.d.ts +0 -38
  325. package/dist/extensions/long-running/constraints.d.ts.map +0 -1
  326. package/dist/extensions/long-running/constraints.js +0 -153
  327. package/dist/extensions/long-running/constraints.js.map +0 -1
  328. package/dist/extensions/long-running/index.d.ts +0 -30
  329. package/dist/extensions/long-running/index.d.ts.map +0 -1
  330. package/dist/extensions/long-running/index.js +0 -50
  331. package/dist/extensions/long-running/index.js.map +0 -1
  332. package/dist/extensions/long-running/types.d.ts +0 -154
  333. package/dist/extensions/long-running/types.d.ts.map +0 -1
  334. package/dist/extensions/long-running/types.js +0 -9
  335. package/dist/extensions/long-running/types.js.map +0 -1
  336. package/dist/presets/long-running.d.ts +0 -33
  337. package/dist/presets/long-running.d.ts.map +0 -1
  338. package/dist/presets/long-running.js +0 -52
  339. package/dist/presets/long-running.js.map +0 -1
@@ -0,0 +1,235 @@
1
+ "use strict";
2
+ /**
3
+ * 知识库 Lint(健康检查)
4
+ *
5
+ * 检查项:
6
+ * - 索引不一致(自动修复)
7
+ * - 孤儿条目(无引用、无验证)
8
+ * - 矛盾检测(同主题相反结论)
9
+ * - 过时检测(6 月未引用的 draft)
10
+ * - 重复/相似条目
11
+ * - 成熟度衰减
12
+ */
13
+ Object.defineProperty(exports, "__esModule", { value: true });
14
+ exports.KnowledgeLinter = void 0;
15
+ class KnowledgeLinter {
16
+ store;
17
+ tracker;
18
+ constructor(store, tracker) {
19
+ this.store = store;
20
+ this.tracker = tracker;
21
+ }
22
+ /**
23
+ * 执行完整 Lint 检查
24
+ */
25
+ run(autoFix = false) {
26
+ const entries = this.store.list({ excludeArchived: false });
27
+ const issues = [];
28
+ // 各项检查
29
+ issues.push(...this.checkIndexConsistency(entries));
30
+ issues.push(...this.checkOrphans(entries));
31
+ issues.push(...this.checkOutdated(entries));
32
+ issues.push(...this.checkDuplicates(entries));
33
+ issues.push(...this.checkContradictions(entries));
34
+ // 自动修复
35
+ let fixed = 0;
36
+ if (autoFix) {
37
+ fixed = this.autoFix(issues);
38
+ }
39
+ // 统计
40
+ const summary = {
41
+ orphan: 0,
42
+ contradiction: 0,
43
+ outdated: 0,
44
+ duplicate: 0,
45
+ index_inconsistent: 0,
46
+ };
47
+ for (const issue of issues) {
48
+ summary[issue.type]++;
49
+ }
50
+ return {
51
+ timestamp: new Date().toISOString(),
52
+ totalEntries: entries.length,
53
+ issues,
54
+ fixed,
55
+ summary,
56
+ };
57
+ }
58
+ /**
59
+ * 检查索引一致性
60
+ */
61
+ checkIndexConsistency(entries) {
62
+ const issues = [];
63
+ const index = this.store['readIndex']();
64
+ // 检查索引中的条目是否都有对应文件
65
+ for (const indexEntry of index) {
66
+ const fileEntry = this.store.get(indexEntry.id);
67
+ if (!fileEntry) {
68
+ issues.push({
69
+ type: 'index_inconsistent',
70
+ entryId: indexEntry.id,
71
+ severity: 'medium',
72
+ description: `索引条目 ${indexEntry.id} 无对应文件`,
73
+ suggestion: '从索引中移除或重建索引',
74
+ });
75
+ }
76
+ }
77
+ // 检查磁盘上的文件是否都在索引中
78
+ const indexIds = new Set(index.map(e => e.id));
79
+ const diskEntries = this.store['readEntriesFromDisk']();
80
+ for (const entry of diskEntries) {
81
+ if (!indexIds.has(entry.id)) {
82
+ issues.push({
83
+ type: 'index_inconsistent',
84
+ entryId: entry.id,
85
+ severity: 'medium',
86
+ description: `条目 ${entry.id} 不在索引中`,
87
+ suggestion: '重建索引',
88
+ });
89
+ }
90
+ }
91
+ return issues;
92
+ }
93
+ /**
94
+ * 检查孤儿条目(无引用、无验证)
95
+ */
96
+ checkOrphans(entries) {
97
+ const issues = [];
98
+ for (const entry of entries) {
99
+ if (entry.maturity === 'archived')
100
+ continue;
101
+ const refs = this.tracker.getReferencesForEntry(entry.id);
102
+ const hasReferences = refs.length > 0;
103
+ const hasContributors = entry.contributors.length > 0;
104
+ const hasProjects = entry.projects.length > 0;
105
+ if (!hasReferences && !hasContributors && !hasProjects && entry.maturity === 'draft') {
106
+ issues.push({
107
+ type: 'orphan',
108
+ entryId: entry.id,
109
+ severity: 'low',
110
+ description: `条目 ${entry.id} (${entry.title}) 无引用、无贡献者、无项目验证`,
111
+ suggestion: '考虑归档或标记为需要验证',
112
+ });
113
+ }
114
+ }
115
+ return issues;
116
+ }
117
+ /**
118
+ * 检查过时条目(6 月未引用的 draft)
119
+ */
120
+ checkOutdated(entries) {
121
+ const issues = [];
122
+ const sixMonthsAgo = new Date();
123
+ sixMonthsAgo.setMonth(sixMonthsAgo.getMonth() - 6);
124
+ for (const entry of entries) {
125
+ if (entry.maturity === 'archived')
126
+ continue;
127
+ const lastRef = entry.lastReferenced ? new Date(entry.lastReferenced) : null;
128
+ const created = new Date(entry.created);
129
+ const relevantDate = lastRef || created;
130
+ if (relevantDate < sixMonthsAgo && entry.maturity === 'draft') {
131
+ issues.push({
132
+ type: 'outdated',
133
+ entryId: entry.id,
134
+ severity: 'medium',
135
+ description: `条目 ${entry.id} (${entry.title}) 超过 6 个月未引用且为 draft`,
136
+ suggestion: '考虑归档或提升成熟度',
137
+ });
138
+ }
139
+ }
140
+ return issues;
141
+ }
142
+ /**
143
+ * 检查重复/相似条目
144
+ */
145
+ checkDuplicates(entries) {
146
+ const issues = [];
147
+ const seen = new Map();
148
+ for (const entry of entries) {
149
+ if (entry.maturity === 'archived')
150
+ continue;
151
+ // 基于 title + type 去重(大小写不敏感)
152
+ const key = `${entry.type}:${entry.title.toLowerCase().trim()}`;
153
+ const existing = seen.get(key) || [];
154
+ existing.push(entry);
155
+ seen.set(key, existing);
156
+ }
157
+ for (const [key, group] of seen) {
158
+ if (group.length > 1) {
159
+ for (const entry of group) {
160
+ issues.push({
161
+ type: 'duplicate',
162
+ entryId: entry.id,
163
+ severity: 'low',
164
+ description: `条目 ${entry.id} (${entry.title}) 与同类型同标题的其他条目重复`,
165
+ suggestion: `考虑合并: ${group.map(e => e.id).join(', ')}`,
166
+ });
167
+ }
168
+ }
169
+ }
170
+ return issues;
171
+ }
172
+ /**
173
+ * 检查矛盾(同主题相反结论)
174
+ *
175
+ * 简单实现:同 tag 组合下成熟度冲突
176
+ */
177
+ checkContradictions(entries) {
178
+ const issues = [];
179
+ const byTagGroup = new Map();
180
+ // 按 tag 组合分组
181
+ for (const entry of entries) {
182
+ if (entry.maturity === 'archived')
183
+ continue;
184
+ if (entry.tags.length === 0)
185
+ continue;
186
+ const tagKey = entry.tags.sort().join(',');
187
+ const existing = byTagGroup.get(tagKey) || [];
188
+ existing.push(entry);
189
+ byTagGroup.set(tagKey, existing);
190
+ }
191
+ // 检查同 tag 组合内是否有成熟度差异大的条目
192
+ for (const [tagKey, group] of byTagGroup) {
193
+ if (group.length < 2)
194
+ continue;
195
+ const maturityOrder = ['draft', 'verified', 'proven'];
196
+ const levels = group.map(e => maturityOrder.indexOf(e.maturity));
197
+ const maxLevel = Math.max(...levels);
198
+ const minLevel = Math.min(...levels);
199
+ // 成熟度差异 >= 2 级(如 proven vs draft)
200
+ if (maxLevel - minLevel >= 2) {
201
+ const lowEntries = group.filter((_, i) => levels[i] === minLevel);
202
+ for (const entry of lowEntries) {
203
+ issues.push({
204
+ type: 'contradiction',
205
+ entryId: entry.id,
206
+ severity: 'high',
207
+ description: `条目 ${entry.id} (${entry.title}) 与同标签的高成熟度条目存在潜在矛盾`,
208
+ suggestion: `审查标签 [${tagKey}] 下的所有条目,确认或更新`,
209
+ });
210
+ }
211
+ }
212
+ }
213
+ return issues;
214
+ }
215
+ /**
216
+ * 自动修复可修复的问题
217
+ */
218
+ autoFix(issues) {
219
+ let fixed = 0;
220
+ for (const issue of issues) {
221
+ if (issue.type === 'index_inconsistent') {
222
+ this.store.rebuildIndex();
223
+ fixed++;
224
+ break; // rebuildIndex 修复所有索引问题
225
+ }
226
+ if (issue.type === 'outdated' && issue.entryId) {
227
+ this.store.update(issue.entryId, { maturity: 'archived' });
228
+ fixed++;
229
+ }
230
+ }
231
+ return fixed;
232
+ }
233
+ }
234
+ exports.KnowledgeLinter = KnowledgeLinter;
235
+ //# sourceMappingURL=lint.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"lint.js","sourceRoot":"","sources":["../../src/knowledge/lint.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,33 @@
1
+ /**
2
+ * Knowledge Query Engine
3
+ *
4
+ * Budget-aware query layer over KnowledgeStore.
5
+ * Supports filtering, sorting by maturity, and result caching.
6
+ */
7
+ import type { QueryBudget, QueryResult, QueryFilter } from './types';
8
+ import { KnowledgeStore } from './store';
9
+ export declare class KnowledgeQuery {
10
+ private store;
11
+ private cache;
12
+ constructor(store: KnowledgeStore);
13
+ /**
14
+ * Query knowledge entries within a token budget.
15
+ *
16
+ * - Filters by budget.focusTypes (and optional extra filter)
17
+ * - Sorts: maturity desc → lastReferenced desc
18
+ * - Truncates to budget.maxEntries and budget.maxTokens
19
+ * - Caches results per phase+budget key (TTL 5 min)
20
+ */
21
+ query(budget: QueryBudget, filter?: QueryFilter): QueryResult;
22
+ /**
23
+ * Estimate token count for a piece of text.
24
+ * Rule of thumb: 1 CJK char ≈ 2 tokens, 1 ASCII char ≈ 0.25 tokens.
25
+ */
26
+ estimateTokens(text: string): number;
27
+ /** Clear the query cache. */
28
+ clearCache(): void;
29
+ private sortEntries;
30
+ private applyBudget;
31
+ private cacheKey;
32
+ }
33
+ //# sourceMappingURL=query.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"query.d.ts","sourceRoot":"","sources":["../../src/knowledge/query.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,KAAK,EAKV,WAAW,EACX,WAAW,EACX,WAAW,EAEZ,MAAM,SAAS,CAAC;AACjB,OAAO,EAAE,cAAc,EAAE,MAAM,SAAS,CAAC;AAqBzC,qBAAa,cAAc;IACzB,OAAO,CAAC,KAAK,CAAiB;IAC9B,OAAO,CAAC,KAAK,CAAiC;gBAElC,KAAK,EAAE,cAAc;IAIjC;;;;;;;OAOG;IACH,KAAK,CAAC,MAAM,EAAE,WAAW,EAAE,MAAM,CAAC,EAAE,WAAW,GAAG,WAAW;IAuB7D;;;OAGG;IACH,cAAc,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM;IAapC,6BAA6B;IAC7B,UAAU,IAAI,IAAI;IAMlB,OAAO,CAAC,WAAW;IAUnB,OAAO,CAAC,WAAW;IAwBnB,OAAO,CAAC,QAAQ;CAGjB"}
@@ -0,0 +1,107 @@
1
+ "use strict";
2
+ /**
3
+ * Knowledge Query Engine
4
+ *
5
+ * Budget-aware query layer over KnowledgeStore.
6
+ * Supports filtering, sorting by maturity, and result caching.
7
+ */
8
+ Object.defineProperty(exports, "__esModule", { value: true });
9
+ exports.KnowledgeQuery = void 0;
10
+ // ── Constants ──────────────────────────────────────────────
11
+ const CACHE_TTL_MS = 5 * 60 * 1000; // 5 minutes
12
+ const MATURITY_RANK = {
13
+ proven: 3,
14
+ verified: 2,
15
+ draft: 1,
16
+ archived: 0,
17
+ };
18
+ // ── Query Engine ───────────────────────────────────────────
19
+ class KnowledgeQuery {
20
+ store;
21
+ cache = new Map();
22
+ constructor(store) {
23
+ this.store = store;
24
+ }
25
+ /**
26
+ * Query knowledge entries within a token budget.
27
+ *
28
+ * - Filters by budget.focusTypes (and optional extra filter)
29
+ * - Sorts: maturity desc → lastReferenced desc
30
+ * - Truncates to budget.maxEntries and budget.maxTokens
31
+ * - Caches results per phase+budget key (TTL 5 min)
32
+ */
33
+ query(budget, filter) {
34
+ const cacheKey = this.cacheKey(budget, filter);
35
+ const cached = this.cache.get(cacheKey);
36
+ if (cached && Date.now() - cached.timestamp < CACHE_TTL_MS) {
37
+ return { ...cached.result, fromCache: true };
38
+ }
39
+ // Merge focusTypes from budget into filter
40
+ const mergedFilter = {
41
+ ...filter,
42
+ types: budget.focusTypes.length > 0 ? budget.focusTypes : filter?.types,
43
+ excludeArchived: filter?.excludeArchived ?? true,
44
+ };
45
+ const candidates = this.store.list(mergedFilter);
46
+ const sorted = this.sortEntries(candidates);
47
+ const { entries, tokensUsed, truncated } = this.applyBudget(sorted, budget);
48
+ const result = { entries, tokensUsed, truncated, fromCache: false };
49
+ this.cache.set(cacheKey, { result, timestamp: Date.now() });
50
+ return result;
51
+ }
52
+ /**
53
+ * Estimate token count for a piece of text.
54
+ * Rule of thumb: 1 CJK char ≈ 2 tokens, 1 ASCII char ≈ 0.25 tokens.
55
+ */
56
+ estimateTokens(text) {
57
+ let tokens = 0;
58
+ for (const ch of text) {
59
+ // CJK Unified Ideographs + common CJK ranges
60
+ if (/[一-鿿㐀-䶿豈-﫿]/.test(ch)) {
61
+ tokens += 2;
62
+ }
63
+ else {
64
+ tokens += 0.25;
65
+ }
66
+ }
67
+ return Math.ceil(tokens);
68
+ }
69
+ /** Clear the query cache. */
70
+ clearCache() {
71
+ this.cache.clear();
72
+ }
73
+ // ── Internal ───────────────────────────────────────────────
74
+ sortEntries(entries) {
75
+ return [...entries].sort((a, b) => {
76
+ // Primary: maturity descending
77
+ const maturityDiff = MATURITY_RANK[b.maturity] - MATURITY_RANK[a.maturity];
78
+ if (maturityDiff !== 0)
79
+ return maturityDiff;
80
+ // Secondary: lastReferenced descending (most recently used first)
81
+ return (b.lastReferenced || '').localeCompare(a.lastReferenced || '');
82
+ });
83
+ }
84
+ applyBudget(entries, budget) {
85
+ const result = [];
86
+ let tokensUsed = 0;
87
+ for (const entry of entries) {
88
+ if (result.length >= budget.maxEntries)
89
+ break;
90
+ const entryTokens = this.estimateTokens(entry.content) + this.estimateTokens(entry.title);
91
+ if (tokensUsed + entryTokens > budget.maxTokens)
92
+ break;
93
+ result.push(entry);
94
+ tokensUsed += entryTokens;
95
+ }
96
+ return {
97
+ entries: result,
98
+ tokensUsed,
99
+ truncated: result.length < entries.length,
100
+ };
101
+ }
102
+ cacheKey(budget, filter) {
103
+ return JSON.stringify({ budget, filter });
104
+ }
105
+ }
106
+ exports.KnowledgeQuery = KnowledgeQuery;
107
+ //# sourceMappingURL=query.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"query.js","sourceRoot":"","sources":["../../src/knowledge/query.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,31 @@
1
+ /**
2
+ * Reference Tracker
3
+ *
4
+ * Tracks which decisions reference which knowledge entries.
5
+ * Storage: append-only JSONL at .harness/knowledge/references.jsonl
6
+ */
7
+ import { KnowledgeStore } from './store';
8
+ export declare class ReferenceTracker {
9
+ private filePath;
10
+ private store;
11
+ constructor(store: KnowledgeStore, baseDir?: string);
12
+ /**
13
+ * Record that a decision referenced a set of knowledge entries.
14
+ */
15
+ record(decisionId: string, entryIds: string[]): void;
16
+ /**
17
+ * Get all decision IDs that referenced a given entry.
18
+ */
19
+ getReferencesForEntry(entryId: string): string[];
20
+ /**
21
+ * Get all entry IDs referenced by a given decision.
22
+ */
23
+ getReferencesForDecision(decisionId: string): string[];
24
+ /**
25
+ * Batch-update referencedBy fields on all knowledge entries.
26
+ * Scans all reference records and populates entry.referencedBy.
27
+ */
28
+ updateReferencedBy(): void;
29
+ private readAll;
30
+ }
31
+ //# sourceMappingURL=reference-tracker.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"reference-tracker.d.ts","sourceRoot":"","sources":["../../src/knowledge/reference-tracker.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAKH,OAAO,EAAE,cAAc,EAAE,MAAM,SAAS,CAAC;AAMzC,qBAAa,gBAAgB;IAC3B,OAAO,CAAC,QAAQ,CAAS;IACzB,OAAO,CAAC,KAAK,CAAiB;gBAElB,KAAK,EAAE,cAAc,EAAE,OAAO,CAAC,EAAE,MAAM;IAMnD;;OAEG;IACH,MAAM,CAAC,UAAU,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,EAAE,GAAG,IAAI;IASpD;;OAEG;IACH,qBAAqB,CAAC,OAAO,EAAE,MAAM,GAAG,MAAM,EAAE;IAOhD;;OAEG;IACH,wBAAwB,CAAC,UAAU,EAAE,MAAM,GAAG,MAAM,EAAE;IAMtD;;;OAGG;IACH,kBAAkB,IAAI,IAAI;IAyB1B,OAAO,CAAC,OAAO;CAYhB"}
@@ -0,0 +1,124 @@
1
+ "use strict";
2
+ /**
3
+ * Reference Tracker
4
+ *
5
+ * Tracks which decisions reference which knowledge entries.
6
+ * Storage: append-only JSONL at .harness/knowledge/references.jsonl
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
+ Object.defineProperty(exports, "__esModule", { value: true });
42
+ exports.ReferenceTracker = void 0;
43
+ const fs = __importStar(require("fs"));
44
+ const path = __importStar(require("path"));
45
+ const REFERENCES_FILE = 'references.jsonl';
46
+ // ── Reference Tracker ──────────────────────────────────────
47
+ class ReferenceTracker {
48
+ filePath;
49
+ store;
50
+ constructor(store, baseDir) {
51
+ const dir = baseDir || '.harness/knowledge';
52
+ this.filePath = path.join(dir, REFERENCES_FILE);
53
+ this.store = store;
54
+ }
55
+ /**
56
+ * Record that a decision referenced a set of knowledge entries.
57
+ */
58
+ record(decisionId, entryIds) {
59
+ const record = {
60
+ decisionId,
61
+ entryIds,
62
+ timestamp: new Date().toISOString(),
63
+ };
64
+ fs.appendFileSync(this.filePath, JSON.stringify(record) + '\n', 'utf-8');
65
+ }
66
+ /**
67
+ * Get all decision IDs that referenced a given entry.
68
+ */
69
+ getReferencesForEntry(entryId) {
70
+ const records = this.readAll();
71
+ return records
72
+ .filter(r => r.entryIds.includes(entryId))
73
+ .map(r => r.decisionId);
74
+ }
75
+ /**
76
+ * Get all entry IDs referenced by a given decision.
77
+ */
78
+ getReferencesForDecision(decisionId) {
79
+ const records = this.readAll();
80
+ const record = records.find(r => r.decisionId === decisionId);
81
+ return record ? record.entryIds : [];
82
+ }
83
+ /**
84
+ * Batch-update referencedBy fields on all knowledge entries.
85
+ * Scans all reference records and populates entry.referencedBy.
86
+ */
87
+ updateReferencedBy() {
88
+ const records = this.readAll();
89
+ const entryToDecisions = new Map();
90
+ for (const record of records) {
91
+ for (const entryId of record.entryIds) {
92
+ if (!entryToDecisions.has(entryId)) {
93
+ entryToDecisions.set(entryId, new Set());
94
+ }
95
+ entryToDecisions.get(entryId).add(record.decisionId);
96
+ }
97
+ }
98
+ for (const [entryId, decisions] of entryToDecisions) {
99
+ const entry = this.store.get(entryId);
100
+ if (entry) {
101
+ this.store.update(entryId, {
102
+ referencedBy: [...decisions],
103
+ });
104
+ }
105
+ }
106
+ }
107
+ // ── Internal ───────────────────────────────────────────────
108
+ readAll() {
109
+ if (!fs.existsSync(this.filePath))
110
+ return [];
111
+ try {
112
+ const raw = fs.readFileSync(this.filePath, 'utf-8');
113
+ return raw
114
+ .split('\n')
115
+ .filter(line => line.trim())
116
+ .map(line => JSON.parse(line));
117
+ }
118
+ catch {
119
+ return [];
120
+ }
121
+ }
122
+ }
123
+ exports.ReferenceTracker = ReferenceTracker;
124
+ //# sourceMappingURL=reference-tracker.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"reference-tracker.js","sourceRoot":"","sources":["../../src/knowledge/reference-tracker.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,42 @@
1
+ /**
2
+ * Knowledge Store
3
+ *
4
+ * File-based storage for knowledge entries.
5
+ * Each entry is a markdown file with YAML frontmatter.
6
+ * An index.json provides fast listing without reading all files.
7
+ */
8
+ import type { KnowledgeEntry, QueryFilter } from './types';
9
+ interface StoreConfig {
10
+ baseDir: string;
11
+ }
12
+ export declare class KnowledgeStore {
13
+ private baseDir;
14
+ constructor(config?: Partial<StoreConfig>);
15
+ get(id: string): KnowledgeEntry | undefined;
16
+ list(filter?: QueryFilter): KnowledgeEntry[];
17
+ save(entry: KnowledgeEntry): void;
18
+ delete(id: string): boolean;
19
+ update(id: string, partial: Partial<KnowledgeEntry>): KnowledgeEntry | undefined;
20
+ rebuildIndex(): void;
21
+ /**
22
+ * 从磁盘读取所有条目(不依赖索引)
23
+ * 用于 Lint 检查索引一致性
24
+ */
25
+ readEntriesFromDisk(): KnowledgeEntry[];
26
+ private ensureDirectory;
27
+ private entryPath;
28
+ private findFile;
29
+ private listFiles;
30
+ private readFile;
31
+ private parseFile;
32
+ private toFrontmatter;
33
+ private toIndexEntry;
34
+ private indexToEntry;
35
+ private matchesFilter;
36
+ private readIndex;
37
+ private writeIndex;
38
+ private updateIndexEntry;
39
+ private removeFromIndex;
40
+ }
41
+ export {};
42
+ //# sourceMappingURL=store.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"store.d.ts","sourceRoot":"","sources":["../../src/knowledge/store.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAKH,OAAO,KAAK,EAAE,cAAc,EAAc,WAAW,EAAgB,MAAM,SAAS,CAAC;AAKrF,UAAU,WAAW;IACnB,OAAO,EAAE,MAAM,CAAC;CACjB;AAMD,qBAAa,cAAc;IACzB,OAAO,CAAC,OAAO,CAAS;gBAEZ,MAAM,CAAC,EAAE,OAAO,CAAC,WAAW,CAAC;IAOzC,GAAG,CAAC,EAAE,EAAE,MAAM,GAAG,cAAc,GAAG,SAAS;IAM3C,IAAI,CAAC,MAAM,CAAC,EAAE,WAAW,GAAG,cAAc,EAAE;IAW5C,IAAI,CAAC,KAAK,EAAE,cAAc,GAAG,IAAI;IAQjC,MAAM,CAAC,EAAE,EAAE,MAAM,GAAG,OAAO;IAQ3B,MAAM,CAAC,EAAE,EAAE,MAAM,EAAE,OAAO,EAAE,OAAO,CAAC,cAAc,CAAC,GAAG,cAAc,GAAG,SAAS;IAUhF,YAAY,IAAI,IAAI;IAYpB;;;OAGG;IACH,mBAAmB,IAAI,cAAc,EAAE;IAcvC,OAAO,CAAC,eAAe;IAMvB,OAAO,CAAC,SAAS;IAIjB,OAAO,CAAC,QAAQ;IAKhB,OAAO,CAAC,SAAS;IAOjB,OAAO,CAAC,QAAQ;IAShB,OAAO,CAAC,SAAS;IA0BjB,OAAO,CAAC,aAAa;IAoBrB,OAAO,CAAC,YAAY;IAcpB,OAAO,CAAC,YAAY;IAmBpB,OAAO,CAAC,aAAa;IAYrB,OAAO,CAAC,SAAS;IAWjB,OAAO,CAAC,UAAU;IAKlB,OAAO,CAAC,gBAAgB;IAYxB,OAAO,CAAC,eAAe;CAIxB"}