@dommaker/harness 0.13.0 → 0.13.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (420) hide show
  1. package/CHANGELOG.md +169 -0
  2. package/bin/harness-knowledge-capture.js +99 -0
  3. package/bin/harness-knowledge-check.js +149 -0
  4. package/bin/harness-knowledge-track.js +92 -0
  5. package/bin/harness-knowledge-track.sh +47 -0
  6. package/bin/harness-sensitive-check.sh +67 -0
  7. package/dist/cli/commands/init.js +34 -2
  8. package/dist/cli/commands/init.js.map +1 -1
  9. package/package.json +6 -3
  10. package/src/CONTEXT.md +34 -0
  11. package/src/__tests__/acceptance-gate.test.ts +364 -0
  12. package/src/__tests__/annotation-checker.test.ts +183 -0
  13. package/src/__tests__/architecture-engine.test.ts +619 -0
  14. package/src/__tests__/checker-extra.test.ts +1627 -0
  15. package/src/__tests__/checker.test.ts +1268 -0
  16. package/src/__tests__/checkpoint.test.ts +697 -0
  17. package/src/__tests__/clean-state-extra.test.ts +301 -0
  18. package/src/__tests__/clean-state.test.ts +169 -0
  19. package/src/__tests__/constraint-doctor.test.ts +410 -0
  20. package/src/__tests__/constraint-evolver.test.ts +404 -0
  21. package/src/__tests__/constraint-handler.test.ts +136 -0
  22. package/src/__tests__/context/progressive-loader.test.ts +131 -0
  23. package/src/__tests__/contract-gate.test.ts +321 -0
  24. package/src/__tests__/cross-project-checker.test.ts +318 -0
  25. package/src/__tests__/cso-validator.test.ts +205 -0
  26. package/src/__tests__/detect-source-roots.test.ts +98 -0
  27. package/src/__tests__/doctor-evolver.test.ts +381 -0
  28. package/src/__tests__/error-classifier.test.ts +304 -0
  29. package/src/__tests__/exec.test.ts +83 -0
  30. package/src/__tests__/extend-exceptions.test.ts +149 -0
  31. package/src/__tests__/failure-recorder.test.ts +335 -0
  32. package/src/__tests__/hooks-pipeline.test.ts +214 -0
  33. package/src/__tests__/interceptor.test.ts +89 -0
  34. package/src/__tests__/iron-laws.test.ts +246 -0
  35. package/src/__tests__/long-running.test.ts +17 -0
  36. package/src/__tests__/passes-gate-check.test.ts +138 -0
  37. package/src/__tests__/passes-gate-extension.test.ts +151 -0
  38. package/src/__tests__/passes-gate-extra.test.ts +238 -0
  39. package/src/__tests__/passes-gate.test.ts +231 -0
  40. package/src/__tests__/performance-analyzer.test.ts +501 -0
  41. package/src/__tests__/performance-collector.test.ts +276 -0
  42. package/src/__tests__/performance-gate.test.ts +74 -0
  43. package/src/__tests__/presets.test.ts +104 -0
  44. package/src/__tests__/project-config-loader-extra.test.ts +269 -0
  45. package/src/__tests__/project-config-loader.test.ts +127 -0
  46. package/src/__tests__/review-gate.test.ts +92 -0
  47. package/src/__tests__/security-gate.test.ts +100 -0
  48. package/src/__tests__/session-startup.test.ts +334 -0
  49. package/src/__tests__/spec-validator.test.ts +57 -0
  50. package/src/__tests__/token-budget.test.ts +252 -0
  51. package/src/__tests__/trace-analyzer-extra.test.ts +307 -0
  52. package/src/__tests__/trace-analyzer.test.ts +131 -0
  53. package/src/__tests__/trace-collector.test.ts +258 -0
  54. package/src/__tests__/traces.test.ts +347 -0
  55. package/src/agents/CONTEXT.md +21 -0
  56. package/src/agents/__tests__/lifecycle.test.ts +248 -0
  57. package/src/agents/index.ts +2 -0
  58. package/src/agents/lifecycle.ts +201 -0
  59. package/src/agents/types.ts +46 -0
  60. package/src/architecture/CONTEXT.md +22 -0
  61. package/src/architecture/constraint-engine.ts +356 -0
  62. package/src/architecture/cross-project-checker.ts +563 -0
  63. package/src/cli/commands/CONTEXT.md +24 -0
  64. package/src/cli/commands/__tests__/acceptance.test.ts +180 -0
  65. package/src/cli/commands/__tests__/check.test.ts +598 -0
  66. package/src/cli/commands/__tests__/command.test.ts +149 -0
  67. package/src/cli/commands/__tests__/contract.test.ts +151 -0
  68. package/src/cli/commands/__tests__/failure.test.ts +199 -0
  69. package/src/cli/commands/__tests__/flow.test.ts +343 -0
  70. package/src/cli/commands/__tests__/init.test.ts +306 -0
  71. package/src/cli/commands/__tests__/passes-gate.test.ts +256 -0
  72. package/src/cli/commands/__tests__/performance.test.ts +116 -0
  73. package/src/cli/commands/__tests__/posteval-plan.test.ts +201 -0
  74. package/src/cli/commands/__tests__/report-extra.test.ts +98 -0
  75. package/src/cli/commands/__tests__/report.test.ts +109 -0
  76. package/src/cli/commands/__tests__/review.test.ts +153 -0
  77. package/src/cli/commands/__tests__/security.test.ts +147 -0
  78. package/src/cli/commands/__tests__/spec.test.ts +193 -0
  79. package/src/cli/commands/__tests__/status-extra.test.ts +223 -0
  80. package/src/cli/commands/__tests__/status.test.ts +306 -0
  81. package/src/cli/commands/__tests__/sync-docs.test.ts +335 -0
  82. package/src/cli/commands/__tests__/validate.test.ts +139 -0
  83. package/src/cli/commands/acceptance.ts +111 -0
  84. package/src/cli/commands/analyze-sessions.ts +488 -0
  85. package/src/cli/commands/check.ts +441 -0
  86. package/src/cli/commands/command.ts +90 -0
  87. package/src/cli/commands/constraints.ts +86 -0
  88. package/src/cli/commands/contract.ts +168 -0
  89. package/src/cli/commands/failure.ts +117 -0
  90. package/src/cli/commands/flow.ts +275 -0
  91. package/src/cli/commands/index.ts +26 -0
  92. package/src/cli/commands/init.ts +832 -0
  93. package/src/cli/commands/knowledge.ts +391 -0
  94. package/src/cli/commands/passes-gate.ts +158 -0
  95. package/src/cli/commands/performance.ts +108 -0
  96. package/src/cli/commands/posteval-plan.ts +85 -0
  97. package/src/cli/commands/release.ts +159 -0
  98. package/src/cli/commands/report.ts +198 -0
  99. package/src/cli/commands/review.ts +118 -0
  100. package/src/cli/commands/security.ts +122 -0
  101. package/src/cli/commands/spec.ts +158 -0
  102. package/src/cli/commands/status.ts +169 -0
  103. package/src/cli/commands/sync-docs.ts +743 -0
  104. package/src/cli/commands/update-user-model.ts +527 -0
  105. package/src/cli/commands/validate.ts +222 -0
  106. package/src/constraints/__tests__/lifecycle-runner.test.ts +246 -0
  107. package/src/constraints/__tests__/registry.test.ts +196 -0
  108. package/src/constraints/index.ts +3 -0
  109. package/src/constraints/lifecycle-runner.ts +184 -0
  110. package/src/constraints/registry.ts +134 -0
  111. package/src/constraints/types.ts +59 -0
  112. package/src/context/CONTEXT.md +28 -0
  113. package/src/context/__tests__/compaction.test.ts +169 -0
  114. package/src/context/__tests__/file-budget.test.ts +142 -0
  115. package/src/context/__tests__/knowledge-injector.test.ts +148 -0
  116. package/src/context/__tests__/progressive-loader.test.ts +264 -0
  117. package/src/context/__tests__/session-manager.test.ts +300 -0
  118. package/src/context/__tests__/token-budget.test.ts +338 -0
  119. package/src/context/__tests__/token-pipeline.test.ts +178 -0
  120. package/src/context/__tests__/tool-output-budget.test.ts +95 -0
  121. package/src/context/compaction.ts +202 -0
  122. package/src/context/file-budget.ts +142 -0
  123. package/src/context/index.ts +15 -0
  124. package/src/context/knowledge-injector.ts +168 -0
  125. package/src/context/progressive-loader.ts +260 -0
  126. package/src/context/session-manager.ts +343 -0
  127. package/src/context/token-budget.ts +295 -0
  128. package/src/context/token-pipeline.ts +265 -0
  129. package/src/context/tool-output-budget.ts +178 -0
  130. package/src/context/types.ts +160 -0
  131. package/src/core/CONTEXT.md +26 -0
  132. package/src/core/constraints/__tests__/default-executors.test.ts +57 -0
  133. package/src/core/constraints/__tests__/interceptor.test.ts +251 -0
  134. package/src/core/constraints/__tests__/prompt-injection.test.ts +89 -0
  135. package/src/core/constraints/check-cache.ts +96 -0
  136. package/src/core/constraints/checker.ts +1169 -0
  137. package/src/core/constraints/default-executors.ts +92 -0
  138. package/src/core/constraints/definitions.ts +1119 -0
  139. package/src/core/constraints/doc-freshness/__tests__/runner.test.ts +551 -0
  140. package/src/core/constraints/doc-freshness/auto-fix.ts +69 -0
  141. package/src/core/constraints/doc-freshness/runner.ts +486 -0
  142. package/src/core/constraints/index.ts +78 -0
  143. package/src/core/constraints/interceptor.ts +220 -0
  144. package/src/core/constraints/prompt-injection.ts +73 -0
  145. package/src/core/index.ts +23 -0
  146. package/src/core/project-config-loader.ts +252 -0
  147. package/src/core/session/__tests__/startup.test.ts +281 -0
  148. package/src/core/session/clean-state.ts +178 -0
  149. package/src/core/session/index.ts +15 -0
  150. package/src/core/session/startup.ts +253 -0
  151. package/src/core/spec/__tests__/validator.test.ts +379 -0
  152. package/src/core/spec/index.ts +7 -0
  153. package/src/core/spec/validator.ts +383 -0
  154. package/src/core/validators/__tests__/passes-gate.test.ts +131 -0
  155. package/src/core/validators/checkpoint.ts +547 -0
  156. package/src/core/validators/cso.ts +124 -0
  157. package/src/core/validators/index.ts +25 -0
  158. package/src/core/validators/passes-gate.ts +613 -0
  159. package/src/dashboard/CONTEXT.md +21 -0
  160. package/src/dashboard/__tests__/data.test.ts +115 -0
  161. package/src/dashboard/__tests__/stats.test.ts +156 -0
  162. package/src/dashboard/data.ts +113 -0
  163. package/src/dashboard/index.ts +3 -0
  164. package/src/dashboard/stats.ts +127 -0
  165. package/src/dashboard/types.ts +113 -0
  166. package/src/evolution/CONTEXT.md +22 -0
  167. package/src/evolution/__tests__/auto-evolve.test.ts +320 -0
  168. package/src/evolution/auto-evolve.ts +98 -0
  169. package/src/evolution/index.ts +1 -0
  170. package/src/failure/CONTEXT.md +24 -0
  171. package/src/failure/classifier.ts +156 -0
  172. package/src/failure/constraint-handler.ts +173 -0
  173. package/src/failure/index.ts +35 -0
  174. package/src/failure/recorder.ts +201 -0
  175. package/src/failure/types.ts +165 -0
  176. package/src/gates/CONTEXT.md +27 -0
  177. package/src/gates/__tests__/acceptance.test.ts +608 -0
  178. package/src/gates/__tests__/command.test.ts +206 -0
  179. package/src/gates/__tests__/performance.test.ts +381 -0
  180. package/src/gates/__tests__/review.test.ts +302 -0
  181. package/src/gates/__tests__/security.test.ts +332 -0
  182. package/src/gates/acceptance.ts +493 -0
  183. package/src/gates/command.ts +444 -0
  184. package/src/gates/contract.ts +260 -0
  185. package/src/gates/index.ts +67 -0
  186. package/src/gates/performance.ts +359 -0
  187. package/src/gates/review.ts +169 -0
  188. package/src/gates/security.ts +244 -0
  189. package/src/gates/types.ts +159 -0
  190. package/src/governance/CONTEXT.md +22 -0
  191. package/src/governance/__tests__/executor.test.ts +249 -0
  192. package/src/governance/executor.ts +229 -0
  193. package/src/governance/index.ts +13 -0
  194. package/src/governance/types.ts +53 -0
  195. package/src/hooks/CONTEXT.md +23 -0
  196. package/src/hooks/__tests__/bootstrap.test.ts +184 -0
  197. package/src/hooks/bootstrap.ts +144 -0
  198. package/src/hooks/index.ts +15 -0
  199. package/src/hooks/pipeline.ts +157 -0
  200. package/src/hooks/registry.ts +88 -0
  201. package/src/hooks/types.ts +80 -0
  202. package/src/index.ts +198 -0
  203. package/src/knowledge/CONTEXT.md +29 -0
  204. package/src/knowledge/__tests__/doctor.test.ts +272 -0
  205. package/src/knowledge/__tests__/import.test.ts +376 -0
  206. package/src/knowledge/__tests__/ingest.test.ts +125 -0
  207. package/src/knowledge/__tests__/lifecycle-hooks.test.ts +137 -0
  208. package/src/knowledge/__tests__/lifecycle.test.ts +248 -0
  209. package/src/knowledge/__tests__/lint.test.ts +401 -0
  210. package/src/knowledge/__tests__/query.test.ts +185 -0
  211. package/src/knowledge/__tests__/reference-tracker.test.ts +129 -0
  212. package/src/knowledge/__tests__/store.test.ts +238 -0
  213. package/src/knowledge/doctor.ts +104 -0
  214. package/src/knowledge/import.ts +505 -0
  215. package/src/knowledge/index.ts +16 -0
  216. package/src/knowledge/ingest.ts +126 -0
  217. package/src/knowledge/lifecycle-hooks.ts +199 -0
  218. package/src/knowledge/lifecycle.ts +175 -0
  219. package/src/knowledge/lint.ts +360 -0
  220. package/src/knowledge/query.ts +150 -0
  221. package/src/knowledge/reference-tracker.ts +99 -0
  222. package/src/knowledge/store.ts +264 -0
  223. package/src/knowledge/types.ts +139 -0
  224. package/src/llm/CONTEXT.md +21 -0
  225. package/src/llm/__tests__/adapter.test.ts +172 -0
  226. package/src/llm/adapter.ts +149 -0
  227. package/src/llm/index.ts +2 -0
  228. package/src/llm/types.ts +81 -0
  229. package/src/monitoring/CONTEXT.md +29 -0
  230. package/src/monitoring/__tests__/context-tracker.test.ts +172 -0
  231. package/src/monitoring/__tests__/knowledge-doctor.test.ts +276 -0
  232. package/src/monitoring/__tests__/knowledge-evolver.test.ts +365 -0
  233. package/src/monitoring/__tests__/performance-analyzer.test.ts +137 -0
  234. package/src/monitoring/__tests__/performance-collector.test.ts +332 -0
  235. package/src/monitoring/__tests__/traces.test.ts +190 -0
  236. package/src/monitoring/constraint-doctor.ts +499 -0
  237. package/src/monitoring/constraint-evolver.ts +573 -0
  238. package/src/monitoring/context-tracker.ts +148 -0
  239. package/src/monitoring/index.ts +23 -0
  240. package/src/monitoring/knowledge-doctor.ts +323 -0
  241. package/src/monitoring/knowledge-evolver.ts +289 -0
  242. package/src/monitoring/performance-analyzer.ts +450 -0
  243. package/src/monitoring/performance-collector.ts +348 -0
  244. package/src/monitoring/trace-analyzer.ts +470 -0
  245. package/src/monitoring/traces.ts +339 -0
  246. package/src/presets/__tests__/standard.test.ts +104 -0
  247. package/src/presets/index.ts +16 -0
  248. package/src/presets/standard.ts +163 -0
  249. package/src/safety/CONTEXT.md +23 -0
  250. package/src/safety/__tests__/input-guardrail.test.ts +105 -0
  251. package/src/safety/__tests__/output-guardrail.test.ts +108 -0
  252. package/src/safety/__tests__/sandbox.test.ts +158 -0
  253. package/src/safety/__tests__/tool-guardrail.test.ts +127 -0
  254. package/src/safety/index.ts +5 -0
  255. package/src/safety/input-guardrail.ts +133 -0
  256. package/src/safety/output-guardrail.ts +174 -0
  257. package/src/safety/sandbox.ts +148 -0
  258. package/src/safety/tool-guardrail.ts +176 -0
  259. package/src/safety/types.ts +124 -0
  260. package/src/spec/CONTEXT.md +19 -0
  261. package/src/spec/__tests__/annotation-checker.test.ts +289 -0
  262. package/src/spec/annotation-checker.ts +342 -0
  263. package/src/tools/CONTEXT.md +25 -0
  264. package/src/tools/__tests__/loader.test.ts +252 -0
  265. package/src/tools/__tests__/registry.test.ts +157 -0
  266. package/src/tools/core/__tests__/core.test.ts +122 -0
  267. package/src/tools/core/index.ts +201 -0
  268. package/src/tools/core/package.json +7 -0
  269. package/src/tools/core/pnpm-lock.yaml +232 -0
  270. package/src/tools/definitions/core/code/fingerprint.sh +273 -0
  271. package/src/tools/definitions/core/code/fingerprint.yml +72 -0
  272. package/src/tools/definitions/core/code/parse.yml +68 -0
  273. package/src/tools/definitions/core/code/register-language.sh +475 -0
  274. package/src/tools/definitions/core/code/register-language.yml +74 -0
  275. package/src/tools/definitions/core/docker/build.yml +73 -0
  276. package/src/tools/definitions/core/docker/run.yml +81 -0
  277. package/src/tools/definitions/core/file/copy.yml +88 -0
  278. package/src/tools/definitions/core/file/read.yml +69 -0
  279. package/src/tools/definitions/core/file/write.yml +75 -0
  280. package/src/tools/definitions/core/git/branch.yml +61 -0
  281. package/src/tools/definitions/core/git/cleanup-worktree.yml +50 -0
  282. package/src/tools/definitions/core/git/clone.yml +69 -0
  283. package/src/tools/definitions/core/git/commit.yml +65 -0
  284. package/src/tools/definitions/core/git/push.yml +79 -0
  285. package/src/tools/definitions/core/git/worktree.yml +96 -0
  286. package/src/tools/definitions/core/notification/notify.sh +152 -0
  287. package/src/tools/definitions/core/notification/notify.yml +60 -0
  288. package/src/tools/definitions/core/npm/build.yml +75 -0
  289. package/src/tools/definitions/core/npm/install.yml +58 -0
  290. package/src/tools/definitions/core/npm/test.yml +75 -0
  291. package/src/tools/definitions/core/validation/check-reuse.yml +170 -0
  292. package/src/tools/definitions/core/validation/validate-handlers.yml +118 -0
  293. package/src/tools/definitions/core/validation/validate-readme-stats.yml +155 -0
  294. package/src/tools/definitions/core/validation/validate-yaml-syntax.yml +134 -0
  295. package/src/tools/definitions/ext/browser/browser-automate.sh +255 -0
  296. package/src/tools/definitions/ext/browser/browser-automate.yml +166 -0
  297. package/src/tools/definitions/ext/browser/browser-close.sh +104 -0
  298. package/src/tools/definitions/ext/browser/browser-close.yml +55 -0
  299. package/src/tools/definitions/ext/browser/browser-mcp-debug.sh +682 -0
  300. package/src/tools/definitions/ext/browser/browser-mcp-debug.yml +167 -0
  301. package/src/tools/definitions/ext/browser/browser-start.sh +101 -0
  302. package/src/tools/definitions/ext/browser/browser-start.yml +62 -0
  303. package/src/tools/definitions/registry.json +795 -0
  304. package/src/tools/definitions/std/README.md +350 -0
  305. package/src/tools/definitions/std/analysis/analyze-codebase.yml +72 -0
  306. package/src/tools/definitions/std/analysis/analyze-diff.yml +182 -0
  307. package/src/tools/definitions/std/analysis/analyze-git-diff.yml +70 -0
  308. package/src/tools/definitions/std/analysis/analyze-impact.yml +78 -0
  309. package/src/tools/definitions/std/analysis/analyze-requirements.yml +105 -0
  310. package/src/tools/definitions/std/analysis/brainstorm-options.yml +106 -0
  311. package/src/tools/definitions/std/analysis/build-graph.yml +154 -0
  312. package/src/tools/definitions/std/analysis/clarify-requirements.yml +90 -0
  313. package/src/tools/definitions/std/analysis/detect-context.yml +109 -0
  314. package/src/tools/definitions/std/analysis/detect-layers.yml +125 -0
  315. package/src/tools/definitions/std/analysis/generate-tour.yml +102 -0
  316. package/src/tools/definitions/std/analysis/search-enhance.yml +105 -0
  317. package/src/tools/definitions/std/backlog/add.yml +51 -0
  318. package/src/tools/definitions/std/backlog/decide.yml +39 -0
  319. package/src/tools/definitions/std/backlog/github-sync.yml +161 -0
  320. package/src/tools/definitions/std/backlog/list.yml +53 -0
  321. package/src/tools/definitions/std/backlog/load.yml +46 -0
  322. package/src/tools/definitions/std/backlog/resolve.yml +37 -0
  323. package/src/tools/definitions/std/backlog/update.yml +42 -0
  324. package/src/tools/definitions/std/bugfix/diagnose.yml +68 -0
  325. package/src/tools/definitions/std/bugfix/fix.yml +66 -0
  326. package/src/tools/definitions/std/bugfix/verify.yml +69 -0
  327. package/src/tools/definitions/std/constraint/check-decomposition.yml +103 -0
  328. package/src/tools/definitions/std/constraint/check-feature-list.yml +77 -0
  329. package/src/tools/definitions/std/constraint/check-progress.yml +97 -0
  330. package/src/tools/definitions/std/constraint/generate-report.yml +147 -0
  331. package/src/tools/definitions/std/deploy/commit-push.yml +33 -0
  332. package/src/tools/definitions/std/deploy/deploy-backend.yml +37 -0
  333. package/src/tools/definitions/std/deploy/deploy-frontend.yml +37 -0
  334. package/src/tools/definitions/std/deploy/rollback.yml +148 -0
  335. package/src/tools/definitions/std/design/analyze-architecture-impact.yml +113 -0
  336. package/src/tools/definitions/std/design/design-api.yml +55 -0
  337. package/src/tools/definitions/std/design/design-architecture.yml +97 -0
  338. package/src/tools/definitions/std/design/design-db.yml +81 -0
  339. package/src/tools/definitions/std/design/generate-spec.yml +182 -0
  340. package/src/tools/definitions/std/development/develop-api.yml +85 -0
  341. package/src/tools/definitions/std/development/develop-backend.yml +88 -0
  342. package/src/tools/definitions/std/development/develop-frontend.yml +87 -0
  343. package/src/tools/definitions/std/development/develop-shared-types.yml +74 -0
  344. package/src/tools/definitions/std/development/develop-task.yml +122 -0
  345. package/src/tools/definitions/std/development/develop-tests.yml +76 -0
  346. package/src/tools/definitions/std/development/execute-batch.yml +152 -0
  347. package/src/tools/definitions/std/development/fix-issues.yml +100 -0
  348. package/src/tools/definitions/std/development/implement-task.yml +124 -0
  349. package/src/tools/definitions/std/development/review-fix-cycle.yml +232 -0
  350. package/src/tools/definitions/std/evolution/implement.yml +125 -0
  351. package/src/tools/definitions/std/evolution/prioritize.yml +112 -0
  352. package/src/tools/definitions/std/evolution/report-gap.yml +166 -0
  353. package/src/tools/definitions/std/file/read.yml +21 -0
  354. package/src/tools/definitions/std/governance/aggregate-opinions.sh +201 -0
  355. package/src/tools/definitions/std/governance/aggregate-opinions.yml +79 -0
  356. package/src/tools/definitions/std/governance/audit-task.yml +178 -0
  357. package/src/tools/definitions/std/governance/cast-vote.yml +129 -0
  358. package/src/tools/definitions/std/governance/collect-issues.yml +16 -0
  359. package/src/tools/definitions/std/governance/create-signed-document.yml +23 -0
  360. package/src/tools/definitions/std/governance/create-voting-session.yml +101 -0
  361. package/src/tools/definitions/std/governance/define-stance.sh +243 -0
  362. package/src/tools/definitions/std/governance/define-stance.yml +82 -0
  363. package/src/tools/definitions/std/governance/generate-review-report.yml +23 -0
  364. package/src/tools/definitions/std/governance/impeach.yml +179 -0
  365. package/src/tools/definitions/std/governance/multi-stance-review.yml +154 -0
  366. package/src/tools/definitions/std/governance/prepare-artifact.yml +20 -0
  367. package/src/tools/definitions/std/governance/review-spec-approval.yml +262 -0
  368. package/src/tools/definitions/std/governance/rollback.yml +186 -0
  369. package/src/tools/definitions/std/governance/stance-review.yml +149 -0
  370. package/src/tools/definitions/std/governance/track-effect.yml +199 -0
  371. package/src/tools/definitions/std/governance/vote-tally.yml +144 -0
  372. package/src/tools/definitions/std/patch/execute.yml +51 -0
  373. package/src/tools/definitions/std/planning/generate-tasks.yml +36 -0
  374. package/src/tools/definitions/std/planning/load-tasks.yml +44 -0
  375. package/src/tools/definitions/std/planning/split-batch.yml +481 -0
  376. package/src/tools/definitions/std/planning/split-tasks.yml +359 -0
  377. package/src/tools/definitions/std/planning/update-tasks.yml +51 -0
  378. package/src/tools/definitions/std/planning/validate-tasks.yml +46 -0
  379. package/src/tools/definitions/std/project/decide-next-workflow.yml +38 -0
  380. package/src/tools/definitions/std/project/load-state.yml +31 -0
  381. package/src/tools/definitions/std/project/save-state.yml +32 -0
  382. package/src/tools/definitions/std/quality/check-quality.yml +241 -0
  383. package/src/tools/definitions/std/quality/debug-systematic.yml +163 -0
  384. package/src/tools/definitions/std/quality/handle-feedback.yml +108 -0
  385. package/src/tools/definitions/std/quality/review-code.yml +128 -0
  386. package/src/tools/definitions/std/quality/review-spec.yml +140 -0
  387. package/src/tools/definitions/std/quality/review-task.yml +190 -0
  388. package/src/tools/definitions/std/quality/run-tests.yml +80 -0
  389. package/src/tools/definitions/std/quick/analyze.yml +56 -0
  390. package/src/tools/definitions/std/quick/implement.yml +67 -0
  391. package/src/tools/definitions/std/quick/verify.yml +71 -0
  392. package/src/tools/definitions/std/verification/verify_completion.yml +113 -0
  393. package/src/tools/definitions/std/verification/wait-condition.yml +107 -0
  394. package/src/tools/index.ts +5 -0
  395. package/src/tools/loader.ts +216 -0
  396. package/src/tools/paths.ts +15 -0
  397. package/src/tools/registry.ts +128 -0
  398. package/src/tools/types.ts +46 -0
  399. package/src/types/__tests__/types.test.ts +86 -0
  400. package/src/types/checkpoint.ts +174 -0
  401. package/src/types/constraint.ts +335 -0
  402. package/src/types/cso.ts +37 -0
  403. package/src/types/enforcement.ts +48 -0
  404. package/src/types/index.ts +59 -0
  405. package/src/types/iron-law.ts +50 -0
  406. package/src/types/passes-gate.ts +185 -0
  407. package/src/types/performance.ts +295 -0
  408. package/src/types/project-config.ts +251 -0
  409. package/src/types/session.ts +132 -0
  410. package/src/types/spec.ts +91 -0
  411. package/src/types/trace.ts +228 -0
  412. package/src/utils/detect-source-roots.ts +114 -0
  413. package/src/utils/exec.ts +61 -0
  414. package/src/verification/CONTEXT.md +23 -0
  415. package/src/verification/__tests__/loop.test.ts +303 -0
  416. package/src/verification/__tests__/rules-based.test.ts +240 -0
  417. package/src/verification/index.ts +3 -0
  418. package/src/verification/loop.ts +137 -0
  419. package/src/verification/rules-based.ts +153 -0
  420. package/src/verification/types.ts +81 -0
@@ -0,0 +1,246 @@
1
+ /**
2
+ * 约束系统测试
3
+ */
4
+
5
+ import { describe, it, expect } from '@jest/globals';
6
+ import {
7
+ IRON_LAWS,
8
+ GUIDELINES,
9
+ TIPS,
10
+ getAllConstraints,
11
+ findConstraintsByTrigger,
12
+ getConstraint
13
+ } from '../core/constraints/definitions';
14
+ import { constraintChecker } from '../core/constraints/checker';
15
+ import type { ConstraintContext } from '../types/constraint';
16
+
17
+ describe('Constraint System', () => {
18
+ describe('Iron Laws', () => {
19
+ it('should have 12 iron laws defined', () => {
20
+ expect(Object.keys(IRON_LAWS).length).toBeGreaterThan(0); // 数量随版本变动
21
+ });
22
+
23
+ it('should have no exceptions for iron laws', () => {
24
+ Object.values(IRON_LAWS).forEach(law => {
25
+ expect(law.exceptions).toBeUndefined();
26
+ });
27
+ });
28
+ });
29
+
30
+ describe('Guidelines', () => {
31
+ it('should have guidelines defined', () => {
32
+ expect(Object.keys(GUIDELINES).length).toBeGreaterThan(0);
33
+ });
34
+
35
+ it('should have exceptions for some guidelines', () => {
36
+ const withExceptions = Object.values(GUIDELINES).filter(g => g.exceptions && g.exceptions.length > 0);
37
+ expect(withExceptions.length).toBeGreaterThan(0);
38
+ });
39
+ });
40
+
41
+ describe('Tips', () => {
42
+ it('should have 2 tips defined', () => {
43
+ expect(Object.keys(TIPS)).toHaveLength(2);
44
+ });
45
+ });
46
+
47
+ describe('Helper Functions', () => {
48
+ it('should get all constraints', () => {
49
+ const all = getAllConstraints();
50
+ expect(all.length).toBeGreaterThan(0); // 约束数量随版本变动
51
+ });
52
+
53
+ it('should find constraints by trigger', () => {
54
+ const constraints = findConstraintsByTrigger('code_implementation');
55
+ expect(constraints.length).toBeGreaterThan(0);
56
+ });
57
+
58
+ it('should get single constraint by id', () => {
59
+ const constraint = getConstraint('no_fix_without_root_cause');
60
+ expect(constraint).toBeDefined();
61
+ expect(constraint?.level).toBe('guideline');
62
+ });
63
+
64
+ it('should return undefined for unknown constraint', () => {
65
+ const constraint = getConstraint('unknown_constraint');
66
+ expect(constraint).toBeUndefined();
67
+ });
68
+ });
69
+ });
70
+
71
+ describe('Constraint Checker', () => {
72
+ it('should return singleton instance', () => {
73
+ const instance1 = constraintChecker;
74
+ expect(instance1).toBeDefined();
75
+ });
76
+
77
+ it('should find applicable constraints for context', () => {
78
+ const context: ConstraintContext = {
79
+ operation: 'code_implementation',
80
+ };
81
+
82
+ const result = constraintChecker.findApplicableConstraints(context);
83
+ expect(result.ironLaws.length + result.guidelines.length + result.tips.length).toBeGreaterThan(0);
84
+ });
85
+
86
+ it('should check constraint', async () => {
87
+ const context: ConstraintContext = {
88
+ operation: 'code_implementation',
89
+ hasRootCauseInvestigation: false,
90
+ };
91
+
92
+ const result = await constraintChecker.check(GUIDELINES['no_fix_without_root_cause'], context);
93
+ expect(result.satisfied).toBe(false);
94
+ });
95
+
96
+ it('should check constraint with satisfied precondition', async () => {
97
+ const context: ConstraintContext = {
98
+ operation: 'code_implementation',
99
+ hasRootCauseInvestigation: true,
100
+ };
101
+
102
+ const result = await constraintChecker.check(GUIDELINES['no_fix_without_root_cause'], context);
103
+ expect(result.satisfied).toBe(true);
104
+ });
105
+
106
+ it('should check all constraints', async () => {
107
+ const context: ConstraintContext = {
108
+ operation: 'code_implementation',
109
+ hasRequirement: true,
110
+ hasWorktree: true,
111
+ hasTest: true,
112
+ hasVerificationEvidence: true,
113
+ taskDescription: 'Test task',
114
+ hasSingleTask: true,
115
+ hasRequirementReview: true,
116
+ hasTwoStageReview: true,
117
+ completionClaimText: '142 tests passed, coverage 87%',
118
+ };
119
+
120
+ const result = await constraintChecker.checkConstraints(context);
121
+ expect(result.ironLaws.length + result.guidelines.length + result.tips.length).toBeGreaterThan(0);
122
+ });
123
+
124
+ it('should fail incremental_progress when hasSingleTask is undefined', async () => {
125
+ const context: ConstraintContext = {
126
+ operation: 'code_implementation',
127
+ };
128
+
129
+ const result = await constraintChecker.check(IRON_LAWS['incremental_progress'], context);
130
+ expect(result.satisfied).toBe(false);
131
+ });
132
+
133
+ it('should pass incremental_progress when hasSingleTask is true', async () => {
134
+ const context: ConstraintContext = {
135
+ operation: 'code_implementation',
136
+ hasSingleTask: true,
137
+ };
138
+
139
+ const result = await constraintChecker.check(IRON_LAWS['incremental_progress'], context);
140
+ expect(result.satisfied).toBe(true);
141
+ });
142
+
143
+ it('should fail verify_external_capability when hasExternalCapabilityVerification is undefined', async () => {
144
+ const context: ConstraintContext = {
145
+ operation: 'api_change',
146
+ };
147
+
148
+ const result = await constraintChecker.check(IRON_LAWS['verify_external_capability'], context);
149
+ expect(result.satisfied).toBe(false);
150
+ });
151
+
152
+ it('should pass verify_external_capability when hasExternalCapabilityVerification is true', async () => {
153
+ const context: ConstraintContext = {
154
+ operation: 'api_change',
155
+ hasExternalCapabilityVerification: true,
156
+ };
157
+
158
+ const result = await constraintChecker.check(IRON_LAWS['verify_external_capability'], context);
159
+ expect(result.satisfied).toBe(true);
160
+ });
161
+
162
+ it('should fail no_implementation_without_requirement_review when hasRequirementReview is undefined', async () => {
163
+ const context: ConstraintContext = {
164
+ operation: 'code_implementation',
165
+ };
166
+
167
+ const result = await constraintChecker.check(IRON_LAWS['no_implementation_without_requirement_review'], context);
168
+ expect(result.satisfied).toBe(false);
169
+ });
170
+
171
+ it('should pass no_implementation_without_requirement_review when hasRequirementReview is true', async () => {
172
+ const context: ConstraintContext = {
173
+ operation: 'code_implementation',
174
+ hasRequirementReview: true,
175
+ };
176
+
177
+ const result = await constraintChecker.check(IRON_LAWS['no_implementation_without_requirement_review'], context);
178
+ expect(result.satisfied).toBe(true);
179
+ });
180
+
181
+ it('should fail no_implementation_without_requirement when hasRequirement is undefined', async () => {
182
+ const context: ConstraintContext = {
183
+ operation: 'code_implementation',
184
+ };
185
+
186
+ const result = await constraintChecker.check(IRON_LAWS['no_implementation_without_requirement'], context);
187
+ expect(result.satisfied).toBe(false);
188
+ });
189
+
190
+ it('should pass no_implementation_without_requirement when hasRequirement is true', async () => {
191
+ const context: ConstraintContext = {
192
+ operation: 'code_implementation',
193
+ hasRequirement: true,
194
+ };
195
+
196
+ const result = await constraintChecker.check(IRON_LAWS['no_implementation_without_requirement'], context);
197
+ expect(result.satisfied).toBe(true);
198
+ });
199
+ });
200
+
201
+ describe('Constraint Levels', () => {
202
+ it('should have correct level for iron laws', () => {
203
+ Object.values(IRON_LAWS).forEach(law => {
204
+ expect(law.level).toBe('iron_law');
205
+ });
206
+ });
207
+
208
+ it('should have correct level for guidelines', () => {
209
+ Object.values(GUIDELINES).forEach(guideline => {
210
+ expect(guideline.level).toBe('guideline');
211
+ });
212
+ });
213
+
214
+ it('should have correct level for tips', () => {
215
+ Object.values(TIPS).forEach(tip => {
216
+ expect(tip.level).toBe('tip');
217
+ });
218
+ });
219
+ });
220
+
221
+ describe('IronLawViolationError (deprecated)', () => {
222
+ it('should be instanceof ConstraintViolationError', () => {
223
+ const { IronLawViolationError, ConstraintViolationError } = require('../types/constraint');
224
+
225
+ const result = {
226
+ id: 'test',
227
+ level: 'iron_law',
228
+ satisfied: false,
229
+ constraint: {
230
+ id: 'test',
231
+ level: 'iron_law',
232
+ rule: 'TEST',
233
+ message: 'test',
234
+ trigger: 'code_implementation',
235
+ enforcement: 'test',
236
+ },
237
+ message: 'Test error',
238
+ checkedAt: new Date(),
239
+ };
240
+
241
+ const error = new IronLawViolationError(result);
242
+ expect(error).toBeInstanceOf(ConstraintViolationError);
243
+ expect(error.name).toBe('IronLawViolationError');
244
+ expect(error.result).toBe(result);
245
+ });
246
+ });
@@ -0,0 +1,17 @@
1
+ /**
2
+ * Long-Running Agents 扩展测试
3
+ *
4
+ * ⚠️ 待修复:long-running extension 未创建
5
+ * 暂时跳过测试,不影响主功能
6
+ *
7
+ * TODO: 创建 extensions/long-running.ts 后恢复测试
8
+ */
9
+
10
+ import { describe, it, expect } from '@jest/globals';
11
+
12
+ describe('Long-Running Agents Extension (placeholder)', () => {
13
+ it('placeholder - extension not yet created', () => {
14
+ // 待创建 extensions/long-running.ts
15
+ expect(true).toBe(true);
16
+ });
17
+ });
@@ -0,0 +1,138 @@
1
+ /**
2
+ * AS-006 PassesGate.check() 测试
3
+ *
4
+ * 验证纯约束接口:harness 只负责验证结果,不负责运行测试
5
+ */
6
+
7
+ import { PassesGate } from '../core/validators/passes-gate';
8
+ import type { TestResult, PassesGateCheckResult } from '../types/passes-gate';
9
+
10
+ describe('PassesGate.check()', () => {
11
+ /**
12
+ * AC-001:PassesGate.check() 接口存在
13
+ */
14
+ it('AC-001: should have check() method', () => {
15
+ const gate = new PassesGate();
16
+ expect(gate.check).toBeDefined();
17
+ expect(typeof gate.check).toBe('function');
18
+ });
19
+
20
+ /**
21
+ * AC-002:测试未通过返回 Iron Law #2 违规
22
+ */
23
+ it('AC-002: should return no_self_approval violation when test failed', () => {
24
+ const gate = new PassesGate({ requireEvidence: false }); // 只检查测试通过
25
+ const testResult: TestResult = { passed: false };
26
+
27
+ const result = gate.check(testResult);
28
+
29
+ expect(result.allowed).toBe(false);
30
+ expect(result.violations).toBeDefined();
31
+ expect(result.violations?.length).toBe(1);
32
+ expect(result.violations?.[0]?.id).toBe('no_self_approval');
33
+ expect(result.violations?.[0]?.level).toBe('iron_law');
34
+ expect(result.testResult).toEqual(testResult);
35
+ });
36
+
37
+ /**
38
+ * AC-003:缺少证据返回 Iron Law #3 违规
39
+ */
40
+ it('AC-003: should return no_completion_without_verification violation when missing evidence', () => {
41
+ const gate = new PassesGate({ requireEvidence: true });
42
+ const testResult: TestResult = { passed: true };
43
+
44
+ const result = gate.check(testResult);
45
+
46
+ expect(result.allowed).toBe(false);
47
+ expect(result.violations).toBeDefined();
48
+ expect(result.violations?.length).toBe(1);
49
+ expect(result.violations?.[0]?.id).toBe('no_completion_without_verification');
50
+ expect(result.violations?.[0]?.level).toBe('iron_law');
51
+ expect(result.testResult).toEqual(testResult);
52
+ });
53
+
54
+ /**
55
+ * AC-004:测试通过且有证据返回 allowed=true
56
+ */
57
+ it('AC-004: should return allowed=true when test passed with evidence', () => {
58
+ const gate = new PassesGate({ requireEvidence: true });
59
+ const testResult: TestResult = {
60
+ passed: true,
61
+ evidence: '/tmp/test-2026-04-27.log',
62
+ };
63
+
64
+ const result = gate.check(testResult);
65
+
66
+ expect(result.allowed).toBe(true);
67
+ expect(result.violations).toBeUndefined();
68
+ expect(result.testResult).toEqual(testResult);
69
+ });
70
+
71
+ /**
72
+ * AC-005:requireEvidence=false 时允许无证据
73
+ */
74
+ it('AC-005: should allow without evidence when requireEvidence=false', () => {
75
+ const gate = new PassesGate({ requireEvidence: false });
76
+ const testResult: TestResult = { passed: true };
77
+
78
+ const result = gate.check(testResult);
79
+
80
+ expect(result.allowed).toBe(true);
81
+ expect(result.violations).toBeUndefined();
82
+ });
83
+
84
+ /**
85
+ * AC-006:TestResult 类型导出
86
+ */
87
+ it('AC-006: should export TestResult and PassesGateCheckResult types', () => {
88
+ // TypeScript 类型检查,运行时验证
89
+ const testResult: TestResult = { passed: true };
90
+ const gate = new PassesGate();
91
+ const checkResult: PassesGateCheckResult = gate.check(testResult);
92
+
93
+ expect(checkResult.allowed).toBeDefined();
94
+ expect(typeof checkResult.allowed).toBe('boolean');
95
+ });
96
+
97
+ /**
98
+ * AC-007:保留原有 setPasses() 方法(向后兼容)
99
+ */
100
+ it('AC-007: should keep setPasses() method for backward compatibility', () => {
101
+ const gate = new PassesGate();
102
+ expect(gate.setPasses).toBeDefined();
103
+ expect(typeof gate.setPasses).toBe('function');
104
+ });
105
+
106
+ /**
107
+ * 边界测试:同时存在多个违规
108
+ */
109
+ it('should return both violations when test failed and missing evidence', () => {
110
+ const gate = new PassesGate({ requireEvidence: true });
111
+ const testResult: TestResult = { passed: false };
112
+
113
+ const result = gate.check(testResult);
114
+
115
+ // 测试未通过是主要违规,证据检查次之
116
+ expect(result.allowed).toBe(false);
117
+ expect(result.violations?.length).toBeGreaterThanOrEqual(1);
118
+ expect(result.violations?.[0]?.id).toBe('no_self_approval');
119
+ });
120
+
121
+ /**
122
+ * 边界测试:覆盖率可选字段
123
+ */
124
+ it('should accept optional coverage field', () => {
125
+ const gate = new PassesGate({ requireEvidence: false });
126
+ const testResult: TestResult = {
127
+ passed: true,
128
+ coverage: 85.5,
129
+ command: 'npm test',
130
+ failures: [],
131
+ };
132
+
133
+ const result = gate.check(testResult);
134
+
135
+ expect(result.allowed).toBe(true);
136
+ expect(result.testResult?.coverage).toBe(85.5);
137
+ });
138
+ });
@@ -0,0 +1,151 @@
1
+ /**
2
+ * PassesGate 扩展点测试
3
+ *
4
+ * 注意:不调用真实的 runAllTests(),只测试扩展注册/注销逻辑
5
+ */
6
+
7
+ import { describe, it, expect, beforeEach } from '@jest/globals';
8
+ import { PassesGate, createPassesGate } from '../core/validators/passes-gate';
9
+ import type { PassesGateExtension, TaskTestResult } from '../types/passes-gate';
10
+
11
+ describe('PassesGate Extension', () => {
12
+ let passesGate: PassesGate;
13
+
14
+ beforeEach(() => {
15
+ passesGate = createPassesGate({ enabled: true });
16
+ });
17
+
18
+ describe('registerExtension', () => {
19
+
20
+ it('应能注册扩展', () => {
21
+ const mockExtension: PassesGateExtension = {
22
+ name: 'mock',
23
+ run: async () => ({
24
+ passed: true,
25
+ command: 'mock-test',
26
+ }),
27
+ };
28
+
29
+ passesGate.registerExtension('mock', mockExtension);
30
+
31
+ const names = passesGate.getExtensionNames();
32
+ expect(names).toContain('mock');
33
+ });
34
+
35
+ it('应能注册多个扩展', () => {
36
+ const ext1: PassesGateExtension = {
37
+ name: 'puppeteer',
38
+ run: async () => ({ passed: true, command: 'puppeteer' }),
39
+ };
40
+ const ext2: PassesGateExtension = {
41
+ name: 'playwright',
42
+ run: async () => ({ passed: true, command: 'playwright' }),
43
+ };
44
+
45
+ passesGate.registerExtension('puppeteer', ext1);
46
+ passesGate.registerExtension('playwright', ext2);
47
+
48
+ const names = passesGate.getExtensionNames();
49
+ expect(names).toContain('puppeteer');
50
+ expect(names).toContain('playwright');
51
+ expect(names.length).toBe(2);
52
+ });
53
+
54
+ it('应能注销扩展', () => {
55
+ const mockExtension: PassesGateExtension = {
56
+ name: 'mock',
57
+ run: async () => ({
58
+ passed: true,
59
+ command: 'mock-test',
60
+ }),
61
+ };
62
+
63
+ passesGate.registerExtension('mock', mockExtension);
64
+ expect(passesGate.getExtensionNames()).toContain('mock');
65
+
66
+ const result = passesGate.unregisterExtension('mock');
67
+ expect(result).toBe(true);
68
+ expect(passesGate.getExtensionNames()).not.toContain('mock');
69
+ });
70
+
71
+ it('注销不存在的扩展应返回 false', () => {
72
+ const result = passesGate.unregisterExtension('nonexistent');
73
+ expect(result).toBe(false);
74
+ });
75
+ });
76
+
77
+ describe('getExtensionNames', () => {
78
+
79
+ it('初始应返回空数组', () => {
80
+ const names = passesGate.getExtensionNames();
81
+ expect(names).toEqual([]);
82
+ });
83
+
84
+ it('注册后应返回扩展名称列表', () => {
85
+ const ext: PassesGateExtension = {
86
+ name: 'test',
87
+ run: async () => ({ passed: true, command: 'test' }),
88
+ };
89
+
90
+ passesGate.registerExtension('test', ext);
91
+
92
+ const names = passesGate.getExtensionNames();
93
+ expect(names).toEqual(['test']);
94
+ });
95
+ });
96
+
97
+ describe('PassesGateExtension 接口', () => {
98
+
99
+ it('扩展应包含必要的字段', () => {
100
+ const extension: PassesGateExtension = {
101
+ name: 'puppeteer',
102
+ description: 'Puppeteer E2E tests',
103
+ run: async (workDir) => ({
104
+ passed: true,
105
+ command: 'puppeteer',
106
+ output: 'E2E passed',
107
+ timestamp: new Date(),
108
+ }),
109
+ };
110
+
111
+ expect(extension.name).toBe('puppeteer');
112
+ expect(extension.description).toBe('Puppeteer E2E tests');
113
+ expect(typeof extension.run).toBe('function');
114
+ });
115
+
116
+ it('扩展 run 方法应返回 TaskTestResult', async () => {
117
+ const extension: PassesGateExtension = {
118
+ name: 'mock',
119
+ run: async (workDir, task) => {
120
+ // 模拟测试运行
121
+ return {
122
+ passed: true,
123
+ command: 'mock-command',
124
+ output: 'Test output',
125
+ duration: 100,
126
+ timestamp: new Date(),
127
+ };
128
+ },
129
+ };
130
+
131
+ const result = await extension.run('/tmp', undefined);
132
+
133
+ expect(result.passed).toBe(true);
134
+ expect(result.command).toBe('mock-command');
135
+ expect(result.output).toBe('Test output');
136
+ });
137
+ });
138
+
139
+ describe('扩展类型检查', () => {
140
+
141
+ it('ExtensionTestResult 应包含 type 字段', () => {
142
+ const result: any = {
143
+ passed: true,
144
+ command: 'test',
145
+ type: 'puppeteer',
146
+ };
147
+
148
+ expect(result.type).toBe('puppeteer');
149
+ });
150
+ });
151
+ });