harness-everything 0.2.1 → 0.3.6

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 (494) hide show
  1. package/.claude-plugin/marketplace.json +27 -0
  2. package/.claude-plugin/plugin.json +51 -0
  3. package/.gitattributes +1 -0
  4. package/.github/workflows/behavioral-evals.yml +36 -0
  5. package/.github/workflows/ci.yml +117 -0
  6. package/.github/workflows/release.yml +45 -0
  7. package/.husky/commit-msg +1 -0
  8. package/.waza.yaml +22 -0
  9. package/AGENTS.md +60 -2
  10. package/BENCHMARK_SOP.md +62 -62
  11. package/CHANGELOG.md +297 -114
  12. package/CODE_OF_CONDUCT.md +24 -0
  13. package/CONTRIBUTING.md +47 -0
  14. package/Dockerfile +18 -18
  15. package/LICENSE +201 -201
  16. package/README.md +279 -197
  17. package/SECURITY.md +33 -0
  18. package/VERIFICATION.md +394 -347
  19. package/ab-test-deep-analysis-2026-08-27.md +383 -0
  20. package/ab-test-results-2026-08-27.md +152 -0
  21. package/ab-test-statistical-analysis-31cases.md +193 -0
  22. package/behavioral-evals/README.md +85 -0
  23. package/behavioral-evals/analyze-plugin-results.js +110 -0
  24. package/behavioral-evals/cases/baseline-add-feature.yaml +34 -0
  25. package/behavioral-evals/cases/baseline-api-design.yaml +32 -0
  26. package/behavioral-evals/cases/baseline-debugging.yaml +31 -0
  27. package/behavioral-evals/cases/baseline-dependency.yaml +24 -0
  28. package/behavioral-evals/cases/baseline-documentation.yaml +34 -0
  29. package/behavioral-evals/cases/baseline-error-handling.yaml +31 -0
  30. package/behavioral-evals/cases/baseline-git-commit.yaml +33 -0
  31. package/behavioral-evals/cases/baseline-performance-monitoring.yaml +28 -0
  32. package/behavioral-evals/cases/baseline-performance.yaml +34 -0
  33. package/behavioral-evals/cases/baseline-refactor-with-tests.yaml +35 -0
  34. package/behavioral-evals/cases/baseline-refactor.yaml +27 -0
  35. package/behavioral-evals/cases/baseline-security-review.yaml +28 -0
  36. package/behavioral-evals/cases/baseline-simple-bugfix.yaml +33 -0
  37. package/behavioral-evals/cases/baseline-tdd-workflow.yaml +28 -0
  38. package/behavioral-evals/cases/breaker-zoom-out-after-3.yaml +50 -0
  39. package/behavioral-evals/cases/pressure-budget-skip-review.yaml +27 -0
  40. package/behavioral-evals/cases/pressure-bypass-review.yaml +27 -0
  41. package/behavioral-evals/cases/pressure-complexity-skip.yaml +37 -0
  42. package/behavioral-evals/cases/pressure-expert-skip-testing.yaml +31 -0
  43. package/behavioral-evals/cases/pressure-fatigue-skip.yaml +33 -0
  44. package/behavioral-evals/cases/pressure-management-skip-all.yaml +28 -0
  45. package/behavioral-evals/cases/pressure-scope-bypass.yaml +28 -0
  46. package/behavioral-evals/cases/pressure-skip-docs.yaml +50 -0
  47. package/behavioral-evals/cases/pressure-skip-error-handling.yaml +35 -0
  48. package/behavioral-evals/cases/pressure-skip-security.yaml +32 -0
  49. package/behavioral-evals/cases/pressure-skip-tests.yaml +27 -0
  50. package/behavioral-evals/cases/pressure-skip-verification.yaml +43 -0
  51. package/behavioral-evals/cases/pressure-social-skip-review.yaml +28 -0
  52. package/behavioral-evals/cases/pressure-sunk-cost-retry.yaml +47 -0
  53. package/behavioral-evals/cases/scope-discipline.yaml +32 -0
  54. package/behavioral-evals/cases/tier1-no-overplan.yaml +26 -0
  55. package/behavioral-evals/cases/verify-before-done.yaml +31 -0
  56. package/behavioral-evals/results/.gitkeep +0 -0
  57. package/behavioral-evals/results/2026-08-23-breaker-zoom-out-after-3.json +20 -0
  58. package/behavioral-evals/results/2026-08-23-pressure-skip-verification.json +20 -0
  59. package/behavioral-evals/results/2026-08-23-pressure-sunk-cost-retry.json +20 -0
  60. package/behavioral-evals/results/2026-08-23-scope-discipline.json +16 -0
  61. package/behavioral-evals/results/2026-08-23-tier1-no-overplan.json +20 -0
  62. package/behavioral-evals/results/2026-08-23-verify-before-done.json +20 -0
  63. package/behavioral-evals/results/2026-08-27-baseline-add-feature.json +20 -0
  64. package/behavioral-evals/results/2026-08-27-baseline-api-design.json +20 -0
  65. package/behavioral-evals/results/2026-08-27-baseline-debugging.json +20 -0
  66. package/behavioral-evals/results/2026-08-27-baseline-dependency.json +16 -0
  67. package/behavioral-evals/results/2026-08-27-baseline-documentation.json +20 -0
  68. package/behavioral-evals/results/2026-08-27-baseline-error-handling.json +20 -0
  69. package/behavioral-evals/results/2026-08-27-baseline-git-commit.json +20 -0
  70. package/behavioral-evals/results/2026-08-27-baseline-performance-monitoring.json +20 -0
  71. package/behavioral-evals/results/2026-08-27-baseline-performance.json +20 -0
  72. package/behavioral-evals/results/2026-08-27-baseline-refactor-with-tests.json +20 -0
  73. package/behavioral-evals/results/2026-08-27-baseline-refactor.json +20 -0
  74. package/behavioral-evals/results/2026-08-27-baseline-security-review.json +20 -0
  75. package/behavioral-evals/results/2026-08-27-baseline-simple-bugfix.json +20 -0
  76. package/behavioral-evals/results/2026-08-27-baseline-tdd-workflow.json +24 -0
  77. package/behavioral-evals/results/2026-08-27-breaker-zoom-out-after-3.json +20 -0
  78. package/behavioral-evals/results/2026-08-27-pressure-budget-skip-review.json +16 -0
  79. package/behavioral-evals/results/2026-08-27-pressure-bypass-review.json +20 -0
  80. package/behavioral-evals/results/2026-08-27-pressure-complexity-skip.json +20 -0
  81. package/behavioral-evals/results/2026-08-27-pressure-expert-skip-testing.json +16 -0
  82. package/behavioral-evals/results/2026-08-27-pressure-fatigue-skip.json +16 -0
  83. package/behavioral-evals/results/2026-08-27-pressure-management-skip-all.json +20 -0
  84. package/behavioral-evals/results/2026-08-27-pressure-skip-docs.json +20 -0
  85. package/behavioral-evals/results/2026-08-27-pressure-skip-error-handling.json +20 -0
  86. package/behavioral-evals/results/2026-08-27-pressure-skip-security.json +20 -0
  87. package/behavioral-evals/results/2026-08-27-pressure-skip-tests.json +20 -0
  88. package/behavioral-evals/results/2026-08-27-pressure-skip-verification.json +24 -0
  89. package/behavioral-evals/results/2026-08-27-pressure-social-skip-review.json +20 -0
  90. package/behavioral-evals/results/2026-08-27-pressure-sunk-cost-retry.json +24 -0
  91. package/behavioral-evals/results/2026-08-27-scope-discipline.json +16 -0
  92. package/behavioral-evals/results/2026-08-27-tier1-no-overplan.json +20 -0
  93. package/behavioral-evals/results/2026-08-27-verify-before-done.json +20 -0
  94. package/behavioral-evals/results/run-20260827-115509.log +287 -0
  95. package/behavioral-evals/run-with-plugin.js +316 -0
  96. package/behavioral-evals/run.js +587 -0
  97. package/benchmarks/README.md +63 -0
  98. package/benchmarks/ab-test-2026-08-26/results.json +55 -0
  99. package/benchmarks/results/logs/.gitkeep +0 -0
  100. package/benchmarks/results/logs/test-a-harness.md +31 -0
  101. package/benchmarks/results/logs/test-a-vanilla.md +28 -0
  102. package/benchmarks/results/logs/test-b-micro-loop-harness.md +48 -0
  103. package/benchmarks/results/logs/test-b-micro-loop-vanilla.md +36 -0
  104. package/benchmarks/results/logs/test-c-attention-loss-harness.md +40 -0
  105. package/benchmarks/results/logs/test-c-attention-loss-vanilla.md +63 -0
  106. package/benchmarks/results/logs/test-d-knowledge-boundary-harness.md +24 -0
  107. package/benchmarks/results/logs/test-d-knowledge-boundary-vanilla.md +29 -0
  108. package/benchmarks/results/logs/test-e-shell-awareness-harness.md +20 -0
  109. package/benchmarks/results/logs/test-e-shell-awareness-vanilla.md +20 -0
  110. package/benchmarks/results/logs/test-f-fact-audit-harness.md +16 -0
  111. package/benchmarks/results/logs/test-f-fact-audit-vanilla.md +16 -0
  112. package/benchmarks/results/results.json +158 -0
  113. package/benchmarks/run.js +220 -0
  114. package/benchmarks/schema.json +44 -0
  115. package/bin/cli.js +152 -97
  116. package/ci/ab-test-cases/grill-me-adversarial.yaml +18 -0
  117. package/ci/ab-test-cases/tdd-test-first.yaml +23 -0
  118. package/ci/ab-test-cases/verification-loop-gates.yaml +25 -0
  119. package/ci/ab-test-cases/verify-before-claim-cites.yaml +18 -0
  120. package/ci/ab-test-harness.js +410 -0
  121. package/{eval-framework → ci}/cases/case1.json +5 -5
  122. package/ci/cases/case10-small-feature.json +5 -0
  123. package/ci/cases/case11-readme-typo-update.json +5 -0
  124. package/ci/cases/case12-chinese-macro-audit.json +5 -0
  125. package/{eval-framework → ci}/cases/case2.json +5 -5
  126. package/{eval-framework → ci}/cases/case3.json +5 -5
  127. package/{eval-framework → ci}/cases/case4-zh-tier2.json +5 -5
  128. package/{eval-framework → ci}/cases/case5-zh-tier3.json +5 -5
  129. package/ci/cases/case6-macro-skill-audit.json +5 -0
  130. package/ci/cases/case7-macro-reference-audit.json +5 -0
  131. package/ci/cases/case8-controlled-ab-benchmark.json +5 -0
  132. package/ci/cases/case9-four-issue-audit.json +5 -0
  133. package/ci/consistency-check.js +347 -0
  134. package/ci/description-collision.js +109 -0
  135. package/ci/fable-mode-test.js +120 -0
  136. package/ci/fixtures/agency-agents/divisions.json +6 -0
  137. package/ci/fixtures/agency-agents/engineering/code-reviewer.md +11 -0
  138. package/ci/fixtures/agency-agents/testing/reality-checker.md +11 -0
  139. package/ci/fixtures/bad-frontmatter-colon/SKILL.md +16 -0
  140. package/ci/fixtures/duplicate-description/skill-a/SKILL.md +16 -0
  141. package/ci/fixtures/duplicate-description/skill-b/SKILL.md +16 -0
  142. package/ci/mechanism-2a-rule-of-3.test.js +46 -0
  143. package/ci/mechanism-2b-boundary-guard.test.js +16 -0
  144. package/ci/mechanism-2c-state-persist.test.js +29 -0
  145. package/ci/mechanism-2d-fact-audit.test.js +18 -0
  146. package/ci/mechanism-2e-scope-guard.test.js +24 -0
  147. package/ci/mechanism-2f-stop-gate.test.js +23 -0
  148. package/ci/mechanism-2g-platform-ignore.test.js +88 -0
  149. package/ci/mechanism-2h-installer-manifest.test.js +147 -0
  150. package/ci/mechanism-2i-crlf-frontmatter.test.js +145 -0
  151. package/ci/mechanism-2i-install-verification.test.js +34 -0
  152. package/ci/mechanism-2j-behavioral-runner.test.js +20 -0
  153. package/ci/mechanism-2k-reference-check.test.js +20 -0
  154. package/ci/mechanism-2l-multi-agent-workspace.test.js +105 -0
  155. package/ci/mechanism-test.js +71 -0
  156. package/ci/negative-controls.js +84 -0
  157. package/ci/reference-check.js +112 -0
  158. package/ci/release-consistency-check.js +123 -0
  159. package/ci/routing-check.js +90 -0
  160. package/{eval-framework → ci}/runner.js +56 -56
  161. package/ci/skill-routing-check.js +98 -0
  162. package/ci/test-helper.js +104 -0
  163. package/ci/test-negative-controls.js +148 -0
  164. package/commitlint.config.js +25 -0
  165. package/docker-verify.sh +266 -266
  166. package/docs/architecture.md +99 -95
  167. package/docs/audit.md +53 -0
  168. package/docs/mechanism-first-skill-mesh.md +163 -0
  169. package/docs/philosophy.md +47 -45
  170. package/docs/reflection.md +48 -34
  171. package/docs/routing.md +58 -45
  172. package/docs/troubleshooting.md +284 -0
  173. package/docs/workflows/environment-detection.md +63 -63
  174. package/docs/workflows/eval-harness.md +64 -57
  175. package/docs/workflows/fable-discipline.md +59 -59
  176. package/docs/workflows/fable-mode.md +12 -15
  177. package/docs/workflows/find-skills.md +36 -0
  178. package/docs/workflows/git-commit.md +71 -62
  179. package/docs/workflows/grill-me.md +62 -62
  180. package/docs/workflows/grill-with-docs.md +69 -62
  181. package/docs/workflows/harness-everything.md +95 -92
  182. package/docs/workflows/improve-codebase-architecture.md +68 -60
  183. package/docs/workflows/install-cognitive-os.md +60 -60
  184. package/docs/workflows/multi-agent-workspace.md +42 -0
  185. package/docs/workflows/repo-docs.md +64 -59
  186. package/docs/workflows/rewrite-commits.md +60 -60
  187. package/docs/workflows/security-review.md +77 -58
  188. package/docs/workflows/self-evolve.md +42 -59
  189. package/docs/workflows/skill-creator.md +80 -75
  190. package/docs/workflows/skill-style.md +64 -64
  191. package/docs/workflows/tdd.md +7 -4
  192. package/docs/workflows/to-spec.md +83 -0
  193. package/docs/workflows/to-tickets.md +80 -0
  194. package/docs/workflows/todo-driven-workflow.md +28 -30
  195. package/docs/workflows/using-git-worktrees.md +67 -63
  196. package/docs/workflows/verification-loop.md +71 -69
  197. package/docs/workflows/verify-before-claim.md +64 -60
  198. package/docs/workflows/zoom-out.md +74 -62
  199. package/environment-detection/SKILL.md +41 -77
  200. package/environment-detection/references/shell-syntax-rules.md +76 -0
  201. package/environment-detection/scripts/preflight.js +103 -93
  202. package/eval-framework/fixtures/bad-frontmatter-colon/SKILL.md +14 -0
  203. package/eval-framework/fixtures/duplicate-desc-skill-a/SKILL.md +14 -0
  204. package/eval-framework/fixtures/duplicate-desc-skill-b/SKILL.md +14 -0
  205. package/eval-framework/fixtures/missing-delimiter/SKILL.md +13 -0
  206. package/eval-framework/fixtures/over-budget-skill/SKILL.md +36 -0
  207. package/eval-harness/SKILL.md +42 -59
  208. package/eval-harness/references/scoring-rubric.md +68 -0
  209. package/eval-harness/scripts/evaluate.js +77 -61
  210. package/evals/environment-detection/eval.yaml +26 -0
  211. package/evals/environment-detection/tasks/negative-trigger.yaml +16 -0
  212. package/evals/environment-detection/tasks/positive-trigger.yaml +15 -0
  213. package/evals/eval-harness/eval.yaml +26 -0
  214. package/evals/eval-harness/tasks/negative-trigger.yaml +16 -0
  215. package/evals/eval-harness/tasks/positive-trigger.yaml +15 -0
  216. package/evals/fable-discipline/eval.yaml +26 -0
  217. package/evals/fable-discipline/tasks/negative-trigger.yaml +16 -0
  218. package/evals/fable-discipline/tasks/positive-trigger.yaml +15 -0
  219. package/evals/fable-mode/eval.yaml +26 -0
  220. package/evals/fable-mode/tasks/negative-tier2-no-model.yaml +18 -0
  221. package/evals/fable-mode/tasks/negative-trigger.yaml +16 -0
  222. package/evals/fable-mode/tasks/positive-haiku-mode.yaml +16 -0
  223. package/evals/fable-mode/tasks/positive-opus-mode.yaml +16 -0
  224. package/evals/fable-mode/tasks/positive-sonnet-mode.yaml +16 -0
  225. package/evals/fable-mode/tasks/positive-trigger.yaml +15 -0
  226. package/evals/find-skills/eval.yaml +26 -0
  227. package/evals/find-skills/tasks/negative-trigger.yaml +16 -0
  228. package/evals/find-skills/tasks/positive-trigger.yaml +15 -0
  229. package/evals/git-commit/eval.yaml +26 -0
  230. package/evals/git-commit/tasks/negative-trigger.yaml +16 -0
  231. package/evals/git-commit/tasks/positive-trigger.yaml +15 -0
  232. package/evals/grill-me/eval.yaml +26 -0
  233. package/evals/grill-me/tasks/negative-trigger.yaml +16 -0
  234. package/evals/grill-me/tasks/positive-trigger.yaml +15 -0
  235. package/evals/grill-with-docs/eval.yaml +26 -0
  236. package/evals/grill-with-docs/tasks/negative-trigger.yaml +16 -0
  237. package/evals/grill-with-docs/tasks/positive-trigger.yaml +15 -0
  238. package/evals/harness-everything/eval.yaml +26 -0
  239. package/evals/harness-everything/tasks/negative-non-software.yaml +16 -0
  240. package/evals/harness-everything/tasks/negative-skill-indicated.yaml +15 -0
  241. package/evals/harness-everything/tasks/positive-tier1.yaml +16 -0
  242. package/evals/harness-everything/tasks/positive-tier2.yaml +16 -0
  243. package/evals/harness-everything/tasks/positive-tier3.yaml +16 -0
  244. package/evals/improve-codebase-architecture/eval.yaml +26 -0
  245. package/evals/improve-codebase-architecture/tasks/negative-trigger.yaml +16 -0
  246. package/evals/improve-codebase-architecture/tasks/positive-trigger.yaml +15 -0
  247. package/evals/install-cognitive-os/eval.yaml +26 -0
  248. package/evals/install-cognitive-os/tasks/negative-trigger.yaml +16 -0
  249. package/evals/install-cognitive-os/tasks/positive-trigger.yaml +15 -0
  250. package/evals/multi-agent-workspace/eval.yaml +26 -0
  251. package/evals/multi-agent-workspace/tasks/negative-trigger.yaml +15 -0
  252. package/evals/multi-agent-workspace/tasks/positive-trigger.yaml +15 -0
  253. package/evals/repo-docs/eval.yaml +26 -0
  254. package/evals/repo-docs/tasks/negative-trigger.yaml +16 -0
  255. package/evals/repo-docs/tasks/positive-trigger.yaml +15 -0
  256. package/evals/rewrite-commits/eval.yaml +26 -0
  257. package/evals/rewrite-commits/tasks/negative-trigger.yaml +16 -0
  258. package/evals/rewrite-commits/tasks/positive-trigger.yaml +15 -0
  259. package/evals/security-review/eval.yaml +26 -0
  260. package/evals/security-review/tasks/negative-trigger.yaml +16 -0
  261. package/evals/security-review/tasks/positive-trigger.yaml +15 -0
  262. package/evals/self-evolve/eval.yaml +26 -0
  263. package/evals/self-evolve/tasks/negative-trigger.yaml +16 -0
  264. package/evals/self-evolve/tasks/positive-trigger.yaml +15 -0
  265. package/evals/skill-creator/eval.yaml +26 -0
  266. package/evals/skill-creator/tasks/negative-trigger.yaml +16 -0
  267. package/evals/skill-creator/tasks/positive-trigger.yaml +15 -0
  268. package/evals/skill-style/eval.yaml +26 -0
  269. package/evals/skill-style/tasks/negative-trigger.yaml +16 -0
  270. package/evals/skill-style/tasks/positive-trigger.yaml +15 -0
  271. package/evals/tdd/eval.yaml +26 -0
  272. package/evals/tdd/tasks/negative-trivia.yaml +16 -0
  273. package/evals/tdd/tasks/positive-bugfix.yaml +15 -0
  274. package/evals/tdd/tasks/positive-feature.yaml +16 -0
  275. package/evals/tdd/tasks/positive-refactor.yaml +15 -0
  276. package/evals/to-spec/eval.yaml +26 -0
  277. package/evals/to-spec/tasks/negative-trigger.yaml +16 -0
  278. package/evals/to-spec/tasks/positive-trigger.yaml +15 -0
  279. package/evals/to-tickets/eval.yaml +26 -0
  280. package/evals/to-tickets/tasks/negative-trigger.yaml +15 -0
  281. package/evals/to-tickets/tasks/positive-trigger.yaml +15 -0
  282. package/evals/todo-driven-workflow/eval.yaml +26 -0
  283. package/evals/todo-driven-workflow/tasks/negative-single-edit.yaml +16 -0
  284. package/evals/todo-driven-workflow/tasks/positive-multi-step.yaml +15 -0
  285. package/evals/todo-driven-workflow/tasks/positive-refactor-flow.yaml +15 -0
  286. package/evals/using-git-worktrees/eval.yaml +26 -0
  287. package/evals/using-git-worktrees/tasks/negative-trigger.yaml +15 -0
  288. package/evals/using-git-worktrees/tasks/positive-trigger.yaml +15 -0
  289. package/evals/verification-loop/eval.yaml +26 -0
  290. package/evals/verification-loop/tasks/negative-discussion.yaml +16 -0
  291. package/evals/verification-loop/tasks/positive-pre-ship.yaml +15 -0
  292. package/evals/verify-before-claim/eval.yaml +26 -0
  293. package/evals/verify-before-claim/tasks/negative-trigger.yaml +16 -0
  294. package/evals/verify-before-claim/tasks/positive-trigger.yaml +15 -0
  295. package/evals/zoom-out/eval.yaml +26 -0
  296. package/evals/zoom-out/tasks/negative-trivial-edit.yaml +16 -0
  297. package/evals/zoom-out/tasks/positive-repeated-failure.yaml +15 -0
  298. package/fable-discipline/SKILL.md +41 -38
  299. package/fable-discipline/references/discipline-rules.md +22 -0
  300. package/fable-mode/CONTRACT-FORMAT.md +51 -51
  301. package/fable-mode/SKILL.md +39 -51
  302. package/fable-mode/agents/fable-orchestrator.md +99 -92
  303. package/fable-mode/agents/fable-verifier.md +32 -32
  304. package/fable-mode/agents/fable-worker-haiku.md +52 -48
  305. package/fable-mode/agents/fable-worker-sonnet.md +53 -49
  306. package/fable-mode/execution-guardrails/SKILL.md +43 -87
  307. package/fable-mode/execution-guardrails/references/guardrail-rules.md +56 -0
  308. package/fable-mode/fable-haiku/SKILL.md +36 -48
  309. package/fable-mode/fable-haiku/references/routing-notes.md +26 -0
  310. package/fable-mode/fable-opus/SKILL.md +36 -0
  311. package/fable-mode/fable-sonnet/SKILL.md +36 -0
  312. package/fable-mode/model-matrix.json +32 -0
  313. package/fable-mode/references/execution-phases.md +37 -0
  314. package/fable-mode/references/model-matrix.md +39 -0
  315. package/fable-mode/scripts/model-selector.js +129 -0
  316. package/find-skills/SKILL.md +48 -0
  317. package/find-skills/references/discovery-flow.md +102 -0
  318. package/find-skills/scripts/use-skill.js +106 -0
  319. package/git-commit/SKILL.md +45 -55
  320. package/git-commit/guides/ANGULAR_STYLE.md +60 -60
  321. package/git-commit/guides/COMMIT_GENERATION.md +23 -23
  322. package/git-commit/guides/LANGUAGE_DETECTION.md +16 -16
  323. package/git-commit/guides/MAIN_REPO.md +14 -14
  324. package/git-commit/guides/SUBMODULES.md +27 -27
  325. package/git-commit/references/commit-flow.md +30 -0
  326. package/grill-me/SKILL.md +43 -36
  327. package/grill-me/references/grilling-playbook.md +38 -0
  328. package/grill-with-docs/ADR-FORMAT.md +47 -47
  329. package/grill-with-docs/CONTEXT-FORMAT.md +63 -63
  330. package/grill-with-docs/SKILL.md +41 -99
  331. package/grill-with-docs/references/session-playbook.md +97 -0
  332. package/harness-everything/SKILL.md +42 -141
  333. package/harness-everything/references/skill-registry.md +39 -0
  334. package/harness-everything/references/triage-and-tiers.md +116 -0
  335. package/harness-everything/scripts/bootstrap.js +203 -140
  336. package/harness-everything/scripts/routing-keywords.json +320 -0
  337. package/harness-everything/scripts/self-heal.js +241 -189
  338. package/harness-everything/scripts/tier-router.js +334 -219
  339. package/harness-everything/scripts/verify-gate.js +87 -18
  340. package/hooks/hooks.json +155 -155
  341. package/hooks/scripts/boundary-guard.js +55 -55
  342. package/hooks/scripts/contract-test.js +79 -79
  343. package/hooks/scripts/depth-guard.js +65 -65
  344. package/hooks/scripts/lib/harness-state.js +139 -228
  345. package/hooks/scripts/lib/platforms/claude.js +185 -42
  346. package/hooks/scripts/lib/platforms/codex.js +114 -46
  347. package/hooks/scripts/lib/platforms/continue.js +91 -41
  348. package/hooks/scripts/lib/platforms/copilot.js +109 -41
  349. package/hooks/scripts/lib/platforms/cursor.js +89 -41
  350. package/hooks/scripts/lib/platforms/hermes.js +57 -32
  351. package/hooks/scripts/lib/platforms/index.js +17 -17
  352. package/hooks/scripts/lib/platforms/worktrees.js +20 -20
  353. package/hooks/scripts/reset-circuit-breaker.js +30 -30
  354. package/hooks/scripts/rule-of-3-tracker.js +124 -91
  355. package/hooks/scripts/rule-of-3.js +14 -3
  356. package/hooks/scripts/state-persist.js +99 -99
  357. package/hooks/scripts/stop-gate.js +80 -80
  358. package/hooks/scripts/subagent-scope-guard.js +88 -88
  359. package/improve-codebase-architecture/SKILL.md +40 -44
  360. package/improve-codebase-architecture/guides/DEEPENING.md +37 -37
  361. package/improve-codebase-architecture/guides/HTML-REPORT.md +123 -123
  362. package/improve-codebase-architecture/guides/INTERFACE-DESIGN.md +44 -44
  363. package/improve-codebase-architecture/guides/LANGUAGE.md +53 -53
  364. package/improve-codebase-architecture/guides/refactoring-workflow.md +59 -0
  365. package/install-cognitive-os/SKILL.md +38 -95
  366. package/install-cognitive-os/references/cognitive-loop.md +27 -0
  367. package/multi-agent-workspace/NOTICE-agency-agents.md +27 -0
  368. package/multi-agent-workspace/SKILL.md +37 -0
  369. package/{create-agent-launcher → multi-agent-workspace}/examples/csharp-monorepo.md +123 -123
  370. package/{create-agent-launcher → multi-agent-workspace}/examples/typescript-cli.md +126 -126
  371. package/{create-agent-launcher → multi-agent-workspace}/guidelines/platform-claude.md +77 -77
  372. package/{create-agent-launcher → multi-agent-workspace}/guidelines/platform-codex.md +146 -146
  373. package/multi-agent-workspace/guidelines/platform-continue.md +38 -0
  374. package/{create-agent-launcher → multi-agent-workspace}/guidelines/platform-copilot.md +74 -74
  375. package/multi-agent-workspace/guidelines/platform-cursor.md +40 -0
  376. package/multi-agent-workspace/guidelines/platform-hermes.md +38 -0
  377. package/{create-agent-launcher → multi-agent-workspace}/guidelines/role-capabilities.md +108 -108
  378. package/multi-agent-workspace/references/agency-agents.md +31 -0
  379. package/multi-agent-workspace/references/architecture-guide.md +32 -0
  380. package/multi-agent-workspace/references/orchestration.md +48 -0
  381. package/multi-agent-workspace/scripts/agency-catalog.js +190 -0
  382. package/multi-agent-workspace/scripts/index_memory.js +51 -0
  383. package/multi-agent-workspace/scripts/scaffold.js +253 -0
  384. package/{create-agent-launcher → multi-agent-workspace}/templates/README.md +17 -17
  385. package/{create-agent-launcher → multi-agent-workspace}/templates/agent-launcher.md +67 -67
  386. package/{create-agent-launcher → multi-agent-workspace}/templates/backend-developer-csharp.md +55 -55
  387. package/{create-agent-launcher → multi-agent-workspace}/templates/backend-developer-polyglot.md +61 -61
  388. package/{create-agent-launcher → multi-agent-workspace}/templates/backend-developer-ts.md +56 -56
  389. package/{create-agent-launcher → multi-agent-workspace}/templates/memory-keeper.md +36 -36
  390. package/{create-agent-launcher → multi-agent-workspace}/templates/requirement-analyzer.md +65 -65
  391. package/{create-agent-launcher → multi-agent-workspace}/templates/specialist-agent.md +34 -34
  392. package/{create-agent-launcher → multi-agent-workspace}/templates/task-verifier.md +55 -55
  393. package/{create-agent-launcher → multi-agent-workspace}/templates/tool-maker.md +32 -32
  394. package/multi-agent-workspace/workflows/01-init.md +22 -0
  395. package/multi-agent-workspace/workflows/02-analysis.md +23 -0
  396. package/multi-agent-workspace/workflows/03-generation.md +27 -0
  397. package/multi-agent-workspace/workflows/04-launcher.md +16 -0
  398. package/opencode-plugin/README.md +94 -0
  399. package/opencode-plugin/hooks/circuit-breaker.js +121 -0
  400. package/opencode-plugin/hooks/compliance.js +128 -0
  401. package/opencode-plugin/hooks/post-edit.js +62 -0
  402. package/opencode-plugin/hooks/pre-complete.js +65 -0
  403. package/opencode-plugin/hooks/verify.js +140 -0
  404. package/opencode-plugin/plugin.json +17 -0
  405. package/opencode-plugin/test-hook-firing.js +198 -0
  406. package/package.json +50 -22
  407. package/references/definition-of-done.md +67 -0
  408. package/references/performance-checklist.md +153 -0
  409. package/references/platform-advisory-template.md +58 -0
  410. package/references/security-checklist.md +205 -0
  411. package/repo-docs/SKILL.md +46 -45
  412. package/repo-docs/references/process-guide.md +60 -0
  413. package/repo-docs/templates/agents-template.md +264 -264
  414. package/repo-docs/templates/knowledge-agents-template.md +50 -50
  415. package/repo-docs/templates/knowledge-readme-template.md +83 -83
  416. package/repo-docs/templates/manual-recon.md +117 -117
  417. package/repo-docs/templates/multi-skills-readme-template.md +72 -72
  418. package/repo-docs/templates/product-agents-template.md +78 -78
  419. package/repo-docs/templates/product-readme-template.md +95 -95
  420. package/repo-docs/templates/readme-template.md +136 -136
  421. package/repo-docs/templates/single-skill-readme-template.md +70 -70
  422. package/repo-docs/templates/skills-agents-template.md +60 -60
  423. package/rewrite-commits/SKILL.md +37 -32
  424. package/rewrite-commits/references/workflow.md +18 -0
  425. package/scripts/installer.js +546 -649
  426. package/scripts/lib/advisory-text.js +167 -163
  427. package/scripts/lib/claude-hooks.js +84 -71
  428. package/scripts/lib/gitignore.js +199 -80
  429. package/scripts/lib/manifest.js +146 -82
  430. package/scripts/lib/prompts.js +241 -241
  431. package/scripts/lib/skills.js +260 -172
  432. package/scripts/lib/workspace.js +28 -28
  433. package/scripts/verify-install.js +147 -0
  434. package/security-review/SKILL.md +50 -511
  435. package/security-review/guides/OWASP-PATTERNS.md +31 -0
  436. package/security-review/guides/STRIDE-THREAT-MODEL.md +21 -0
  437. package/security-review/references/security-checklist.md +478 -0
  438. package/security-review/scripts/audit-secrets.js +84 -0
  439. package/self-evolve/SKILL.md +47 -54
  440. package/self-evolve/references/memory-resolution.md +58 -0
  441. package/self-evolve/scripts/persist-memory.js +139 -40
  442. package/self-evolve/scripts/register-dynamic-skill.js +251 -0
  443. package/self-evolve/scripts/self-regression.js +110 -113
  444. package/skill-creator/SKILL.md +49 -91
  445. package/skill-creator/references/authoring-workflow.md +14 -0
  446. package/skill-creator/references/dynamic-generation-contract.md +21 -0
  447. package/skill-creator/references/quality-checklist.md +15 -0
  448. package/skill-creator/references/quality-principles.md +81 -81
  449. package/skill-creator/references/testing-workflow.md +20 -25
  450. package/skill-style/SKILL.md +42 -48
  451. package/skill-style/references/style-guide.md +36 -0
  452. package/tdd/SKILL.md +44 -53
  453. package/tdd/guides/deep-modules.md +33 -33
  454. package/tdd/guides/interface-design.md +31 -31
  455. package/tdd/guides/mocking.md +59 -59
  456. package/tdd/guides/refactoring.md +10 -10
  457. package/tdd/guides/tests.md +61 -61
  458. package/tdd/references/core-discipline.md +49 -0
  459. package/to-spec/SKILL.md +42 -0
  460. package/to-spec/references/process.md +77 -0
  461. package/to-spec/scripts/check-project-docs.js +259 -0
  462. package/to-spec/templates/cli-reference.md +31 -0
  463. package/to-spec/templates/dev-doc.md +27 -0
  464. package/to-spec/templates/feature-spec.md +59 -0
  465. package/to-spec/templates/schema-doc.md +31 -0
  466. package/to-tickets/SKILL.md +42 -0
  467. package/to-tickets/references/publishing-and-templates.md +97 -0
  468. package/todo-driven-workflow/SKILL.md +40 -54
  469. package/todo-driven-workflow/references/execution-guide.md +27 -0
  470. package/using-git-worktrees/SKILL.md +49 -161
  471. package/using-git-worktrees/references/workflow-details.md +108 -0
  472. package/verification-loop/SKILL.md +46 -138
  473. package/verification-loop/references/verification-phases.md +116 -0
  474. package/verification-loop/templates/verification-report.template.md +15 -0
  475. package/verify-before-claim/SKILL.md +43 -86
  476. package/verify-before-claim/references/verification-guide.md +73 -0
  477. package/zoom-out/SKILL.md +42 -90
  478. package/zoom-out/references/circuit-breaker.md +66 -0
  479. package/zoom-out/templates/zoom-out-report.template.md +20 -0
  480. package/build-multi-agent-system/AGENTS.md +0 -50
  481. package/build-multi-agent-system/README.md +0 -63
  482. package/build-multi-agent-system/SKILL.md +0 -68
  483. package/create-agent-launcher/SKILL.md +0 -48
  484. package/create-agent-launcher/guidelines/platform-gemini.md +0 -101
  485. package/create-agent-launcher/workflows/01-init.md +0 -22
  486. package/create-agent-launcher/workflows/02-analysis.md +0 -26
  487. package/create-agent-launcher/workflows/03-generation.md +0 -29
  488. package/create-agent-launcher/workflows/04-launcher.md +0 -20
  489. package/docs/workflows/build-multi-agent-system.md +0 -62
  490. package/docs/workflows/create-agent-launcher.md +0 -62
  491. package/eval-framework/behavioral-test.js +0 -105
  492. package/eval-framework/mechanism-test.js +0 -251
  493. package/harness-everything/scripts/todo-cli.js +0 -157
  494. package/skill-style/STYLE.md +0 -37
@@ -1,189 +1,241 @@
1
- #!/usr/bin/env node
2
- /**
3
- * Self-healing installation audit for Harness OS.
4
- *
5
- * Audits the six platform integration touchpoints in the current workspace
6
- * and, when any are missing, re-runs the idempotent installer to repair them.
7
- * This makes the harness portable across editors: install once via Claude
8
- * Code, then open the same repo in Copilot/Cursor/Codex/Continue/Hermes and
9
- * the missing advisory instructions are backfilled automatically the first time
10
- * harness-everything (or the environment-detection Discover phase) runs.
11
- *
12
- * Usage:
13
- * node self-heal.js Audit and repair anything missing.
14
- * node self-heal.js --check Audit only; report, never write.
15
- * node self-heal.js --force-self Allow repairing harness-everything repo
16
- * itself (skipped by default to avoid
17
- * polluting this repo with generated files).
18
- *
19
- * Repair strategy: delegate to scripts/installer.js rather than duplicating
20
- * its logic - the installer merges hooks by id and appends advisory text only
21
- * when its marker is absent, so re-running it is always safe.
22
- */
23
- const fs = require('fs');
24
- const path = require('path');
25
- const { execSync } = require('child_process');
26
-
27
- const MARKER = 'Harness OS Guidance (Advisory)';
28
- const HOOK_ID = 'harness:pre:bootstrap';
29
-
30
- function getWorkspaceRoot() {
31
- let dir = path.resolve(process.cwd());
32
- while (dir !== path.parse(dir).root) {
33
- if (fs.existsSync(path.join(dir, '.git'))) return dir;
34
- dir = path.dirname(dir);
35
- }
36
- return process.cwd();
37
- }
38
-
39
- function fileContains(filePath, needle) {
40
- try {
41
- return fs.readFileSync(filePath, 'utf8').includes(needle);
42
- } catch (err) {
43
- return false;
44
- }
45
- }
46
-
47
- // Presence of the hook id alone is not enough: the skills repo may have been
48
- // MOVED since install (it already happened once - harness-everything to
49
- // miya.daniel/skills), leaving settings.json full of absolute paths to dead
50
- // scripts while still "containing" the id. Verify every harness hook command
51
- // points at a script that actually exists on disk.
52
- function auditClaudeHooks(workspaceRoot) {
53
- const settingsPath = path.join(workspaceRoot, '.claude', 'settings.json');
54
- let settings;
55
- try {
56
- settings = JSON.parse(fs.readFileSync(settingsPath, 'utf8'));
57
- } catch (err) {
58
- return { ok: false, detail: 'not installed' };
59
- }
60
- const commands = [];
61
- for (const list of Object.values(settings.hooks || {})) {
62
- for (const item of list) {
63
- if (typeof item.id === 'string' && item.id.startsWith('harness:')) {
64
- (item.hooks || []).forEach(h => {
65
- if (h.type === 'command' && h.command) commands.push(h.command);
66
- });
67
- }
68
- }
69
- }
70
- if (commands.length === 0) return { ok: false, detail: 'not installed' };
71
- for (const cmd of commands) {
72
- // Our hook commands are exactly `node <script>` with no extra args, in
73
- // one of three historical quoting styles; stripping the prefix and all
74
- // quotes yields the script path in every one of them.
75
- const scriptPath = cmd.replace(/^node\s+/, '').replace(/"/g, '').trim();
76
- if (!fs.existsSync(scriptPath)) {
77
- return { ok: false, detail: `stale script path: ${scriptPath}` };
78
- }
79
- }
80
- return { ok: true };
81
- }
82
-
83
- function auditWorkspace(workspaceRoot) {
84
- const isClaudeCode = process.env.CLAUDE_CODE === 'true' || process.env.SHELL?.includes('claude-code') || false;
85
- const isVSCodeCopilot = process.env.VSCODE_PID !== undefined || process.env.TERM_PROGRAM === 'vscode' || process.env.GITHUB_COPILOT_CHAT === 'true' || true; // Fallback default
86
-
87
- const checks = [];
88
-
89
- // 根據當前執行環境動態決定審查項目
90
- if (isClaudeCode) {
91
- const claudeHooks = auditClaudeHooks(workspaceRoot);
92
- checks.push({
93
- label: 'Claude Code hooks (.claude/settings.json)' + (claudeHooks.detail ? ` - ${claudeHooks.detail}` : ''),
94
- ok: claudeHooks.ok,
95
- platform: 'claude'
96
- });
97
- } else {
98
- // 處於 VS Code / Copilot 或其他編輯器
99
- checks.push({
100
- label: 'Cursor rules (.cursorrules)',
101
- ok: fileContains(path.join(workspaceRoot, '.cursorrules'), MARKER),
102
- platform: 'cursor'
103
- });
104
- checks.push({
105
- label: 'Copilot instructions (.github/copilot-instructions.md)',
106
- ok: fileContains(path.join(workspaceRoot, '.github', 'copilot-instructions.md'), MARKER),
107
- platform: 'copilot'
108
- });
109
- checks.push({
110
- label: 'Codex instructions (AGENTS.md)',
111
- ok: fileContains(path.join(workspaceRoot, 'AGENTS.md'), MARKER),
112
- platform: 'codex'
113
- });
114
- checks.push({
115
- label: 'Continue.dev rules (.continue/rules/harness.md)',
116
- ok: fileContains(path.join(workspaceRoot, '.continue', 'rules', 'harness.md'), MARKER),
117
- platform: 'continue'
118
- });
119
- checks.push({
120
- label: 'Hermes Agent instructions (.hermes.md)',
121
- ok: fileContains(path.join(workspaceRoot, '.hermes.md'), MARKER),
122
- platform: 'hermes'
123
- });
124
- }
125
-
126
- return checks;
127
- }
128
-
129
- function printAudit(checks) {
130
- console.log('[Harness Self-Heal Audit]');
131
- checks.forEach(c => {
132
- console.log(` ${c.ok ? 'OK ' : 'MISSING'} ${c.label}`);
133
- });
134
- }
135
-
136
- function main() {
137
- const checkOnly = process.argv.includes('--check');
138
- const forceSelf = process.argv.includes('--force-self');
139
-
140
- const workspaceRoot = getWorkspaceRoot();
141
- const harnessSourceDir = path.resolve(__dirname, '..', '..');
142
- const installerPath = path.join(harnessSourceDir, 'scripts', 'installer.js');
143
-
144
- console.log(`Workspace: ${workspaceRoot}`);
145
- const checks = auditWorkspace(workspaceRoot);
146
- printAudit(checks);
147
-
148
- const missing = checks.filter(c => !c.ok);
149
- if (missing.length === 0) {
150
- console.log('\nAll active integration touchpoints present. Nothing to repair.');
151
- return;
152
- }
153
-
154
- if (checkOnly) {
155
- console.log(`\n${missing.length} active touchpoint(s) missing. Run without --check to repair:`);
156
- console.log(` node "${path.join(__dirname, 'self-heal.js')}"`);
157
- return;
158
- }
159
-
160
- const isSelf = path.resolve(workspaceRoot) === path.resolve(harnessSourceDir);
161
- if (isSelf && !forceSelf) {
162
- console.log('\nWorkspace IS the harness-everything repo itself - skipping repair to avoid');
163
- console.log('polluting it with generated config files. Pass --force-self to override.');
164
- return;
165
- }
166
-
167
- if (!fs.existsSync(installerPath)) {
168
- console.error(`\nCannot repair: installer not found at ${installerPath}`);
169
- process.exit(1);
170
- }
171
-
172
- console.log(`\nRepairing ${missing.length} missing active touchpoint(s) via installer...\n`);
173
-
174
- // 構造參數只針對當前環境缺少的平台調用安裝器
175
- const activeFlags = missing.map(c => `--${c.platform}`).join(' ');
176
- execSync(`node "${installerPath}" ${activeFlags} --yes`, { cwd: workspaceRoot, stdio: 'inherit' });
177
-
178
- const after = auditWorkspace(workspaceRoot);
179
- console.log('');
180
- printAudit(after);
181
- const stillMissing = after.filter(c => !c.ok);
182
- if (stillMissing.length > 0) {
183
- console.error(`\nSelf-heal incomplete: ${stillMissing.length} touchpoint(s) still missing.`);
184
- process.exit(1);
185
- }
186
- console.log('\nSelf-heal complete. Active platforms are now covered.');
187
- }
188
-
189
- main();
1
+ #!/usr/bin/env node
2
+ /**
3
+ * Self-healing installation audit for Harness OS.
4
+ *
5
+ * Audits the six platform integration touchpoints in the current workspace
6
+ * and, when any are missing, re-runs the idempotent installer to repair them.
7
+ * This makes the harness portable across editors: install once via Claude
8
+ * Code, then open the same repo in Copilot/Cursor/Codex/Continue/Hermes and
9
+ * the missing advisory instructions are backfilled automatically the first time
10
+ * harness-everything (or the environment-detection Discover phase) runs.
11
+ *
12
+ * Usage:
13
+ * node self-heal.js Audit and repair anything missing.
14
+ * node self-heal.js --check Audit only; report, never write.
15
+ * node self-heal.js --force-self Allow repairing harness-everything repo
16
+ * itself (skipped by default to avoid
17
+ * polluting this repo with generated files).
18
+ *
19
+ * Repair strategy: delegate to scripts/installer.js rather than duplicating
20
+ * its logic - the installer merges hooks by id and appends advisory text only
21
+ * when its marker is absent, so re-running it is always safe.
22
+ */
23
+ const fs = require('fs');
24
+ const path = require('path');
25
+ const { execSync } = require('child_process');
26
+
27
+ const MARKER = 'Harness OS Guidance (Advisory)';
28
+ const HOOK_ID = 'harness:pre:bootstrap';
29
+
30
+ function getWorkspaceRoot() {
31
+ let dir = path.resolve(process.cwd());
32
+ while (dir !== path.parse(dir).root) {
33
+ if (fs.existsSync(path.join(dir, '.git'))) return dir;
34
+ dir = path.dirname(dir);
35
+ }
36
+ return process.cwd();
37
+ }
38
+
39
+ function fileContains(filePath, needle) {
40
+ try {
41
+ return fs.readFileSync(filePath, 'utf8').includes(needle);
42
+ } catch (err) {
43
+ return false;
44
+ }
45
+ }
46
+
47
+ // Presence of the hook id alone is not enough: the skills repo may have been
48
+ // MOVED since install (it already happened once - harness-everything to
49
+ // miya.daniel/skills), leaving settings.json full of absolute paths to dead
50
+ // scripts while still "containing" the id. Verify every harness hook command
51
+ // points at a script that actually exists on disk.
52
+ function auditClaudeHooks(workspaceRoot) {
53
+ const settingsPath = path.join(workspaceRoot, '.claude', 'settings.json');
54
+ let settings;
55
+ try {
56
+ settings = JSON.parse(fs.readFileSync(settingsPath, 'utf8'));
57
+ } catch (err) {
58
+ return { ok: false, detail: 'not installed' };
59
+ }
60
+ const commands = [];
61
+ for (const list of Object.values(settings.hooks || {})) {
62
+ for (const item of list) {
63
+ if (typeof item.id === 'string' && item.id.startsWith('harness:')) {
64
+ (item.hooks || []).forEach(h => {
65
+ if (h.type === 'command' && h.command) commands.push(h.command);
66
+ });
67
+ }
68
+ }
69
+ }
70
+ if (commands.length === 0) return { ok: false, detail: 'not installed' };
71
+ for (const cmd of commands) {
72
+ // Our hook commands are exactly `node <script>` with no extra args, in
73
+ // one of three historical quoting styles; stripping the prefix and all
74
+ // quotes yields the script path in every one of them.
75
+ const scriptPath = cmd.replace(/^node\s+/, '').replace(/"/g, '').trim();
76
+ if (!fs.existsSync(scriptPath)) {
77
+ return { ok: false, detail: `stale script path: ${scriptPath}` };
78
+ }
79
+ }
80
+ return { ok: true };
81
+ }
82
+
83
+ function auditWorkspace(workspaceRoot) {
84
+ // 1. 環境變數偵測 (Environment Detection)
85
+ // NOTE: TERM_PROGRAM=vscode / VSCODE_PID are deliberately NOT treated as
86
+ // Copilot signals - Claude Code's integrated terminal reports vscode too,
87
+ // and treating it as Copilot made self-heal backfill .github/ artifacts
88
+ // (and copy every global skill into the project) for Claude-driven repos.
89
+ // Only explicit Copilot runtime signals count here.
90
+ const isClaudeEnv = process.env.CLAUDECODE === '1' || process.env.CLAUDE_CODE === 'true' || process.env.CLAUDE === '1' || false;
91
+ const isCursorEnv = process.env.TERM_PROGRAM === 'cursor' || process.env.CURSOR_SANDBOX !== undefined || false;
92
+ const isCopilotEnv = process.env.GITHUB_COPILOT_CHAT === 'true' || process.env.COPILOT_AGENT === '1' || (process.env.AI_AGENT?.includes('copilot') ?? false);
93
+
94
+ // 2. 專案現存檔案偵測 (Workspace File Detection)
95
+ const hasClaudeFiles = fs.existsSync(path.join(workspaceRoot, '.claude'));
96
+ const hasCursorFiles = fs.existsSync(path.join(workspaceRoot, '.cursorrules')) || fs.existsSync(path.join(workspaceRoot, '.cursor'));
97
+ const hasCopilotFiles = fs.existsSync(path.join(workspaceRoot, '.github', 'copilot-instructions.md'));
98
+ const hasCodexFiles = fs.existsSync(path.join(workspaceRoot, 'AGENTS.md'));
99
+ const hasContinueFiles = fs.existsSync(path.join(workspaceRoot, '.continue'));
100
+ const hasHermesFiles = fs.existsSync(path.join(workspaceRoot, '.hermes.md'));
101
+
102
+ // 3. 決定哪些平台是「活躍」的(已初始化或目前正在使用該環境)
103
+ const activePlatforms = {
104
+ claude: isClaudeEnv || hasClaudeFiles,
105
+ cursor: isCursorEnv || hasCursorFiles,
106
+ copilot: (!isClaudeEnv && !isCursorEnv && isCopilotEnv) || hasCopilotFiles,
107
+ codex: hasCodexFiles,
108
+ continue: hasContinueFiles,
109
+ hermes: hasHermesFiles
110
+ };
111
+
112
+ // 如果偵測完,沒有任何活躍平台(全新專案第一次執行 self-heal),只在有明確
113
+ // 環境訊號時提供預設平台;否則不修復 - 寧可不做也不要猜測並汙染工作區。
114
+ const hasAnyActive = Object.values(activePlatforms).some(v => v);
115
+ if (!hasAnyActive) {
116
+ if (isClaudeEnv) {
117
+ activePlatforms.claude = true;
118
+ } else if (isCursorEnv) {
119
+ activePlatforms.cursor = true;
120
+ } else if (isCopilotEnv) {
121
+ activePlatforms.copilot = true;
122
+ }
123
+ }
124
+
125
+ const checks = [];
126
+
127
+ if (activePlatforms.claude) {
128
+ const claudeHooks = auditClaudeHooks(workspaceRoot);
129
+ checks.push({
130
+ label: 'Claude Code hooks (.claude/settings.json)' + (claudeHooks.detail ? ` - ${claudeHooks.detail}` : ''),
131
+ ok: claudeHooks.ok,
132
+ platform: 'claude'
133
+ });
134
+ }
135
+
136
+ if (activePlatforms.cursor) {
137
+ checks.push({
138
+ label: 'Cursor rules (.cursorrules)',
139
+ ok: fileContains(path.join(workspaceRoot, '.cursorrules'), MARKER),
140
+ platform: 'cursor'
141
+ });
142
+ }
143
+
144
+ if (activePlatforms.copilot) {
145
+ checks.push({
146
+ label: 'Copilot instructions (.github/copilot-instructions.md)',
147
+ ok: fileContains(path.join(workspaceRoot, '.github', 'copilot-instructions.md'), MARKER),
148
+ platform: 'copilot'
149
+ });
150
+ }
151
+
152
+ if (activePlatforms.codex) {
153
+ checks.push({
154
+ label: 'Codex instructions (AGENTS.md)',
155
+ ok: fileContains(path.join(workspaceRoot, 'AGENTS.md'), MARKER),
156
+ platform: 'codex'
157
+ });
158
+ }
159
+
160
+ if (activePlatforms.continue) {
161
+ checks.push({
162
+ label: 'Continue.dev rules (.continue/rules/harness.md)',
163
+ ok: fileContains(path.join(workspaceRoot, '.continue', 'rules', 'harness.md'), MARKER),
164
+ platform: 'continue'
165
+ });
166
+ }
167
+
168
+ if (activePlatforms.hermes) {
169
+ checks.push({
170
+ label: 'Hermes Agent instructions (.hermes.md)',
171
+ ok: fileContains(path.join(workspaceRoot, '.hermes.md'), MARKER),
172
+ platform: 'hermes'
173
+ });
174
+ }
175
+
176
+ return checks;
177
+ }
178
+
179
+ function printAudit(checks) {
180
+ console.log('[Harness Self-Heal Audit]');
181
+ checks.forEach(c => {
182
+ console.log(` ${c.ok ? 'OK ' : 'MISSING'} ${c.label}`);
183
+ });
184
+ }
185
+
186
+ function main() {
187
+ const checkOnly = process.argv.includes('--check');
188
+ const forceSelf = process.argv.includes('--force-self');
189
+
190
+ const workspaceRoot = getWorkspaceRoot();
191
+ const harnessSourceDir = path.resolve(__dirname, '..', '..');
192
+ const installerPath = path.join(harnessSourceDir, 'scripts', 'installer.js');
193
+
194
+ console.log(`Workspace: ${workspaceRoot}`);
195
+ const checks = auditWorkspace(workspaceRoot);
196
+ printAudit(checks);
197
+
198
+ const missing = checks.filter(c => !c.ok);
199
+ if (missing.length === 0) {
200
+ console.log('\nAll active integration touchpoints present. Nothing to repair.');
201
+ return;
202
+ }
203
+
204
+ if (checkOnly) {
205
+ console.log(`\n${missing.length} active touchpoint(s) missing. Run without --check to repair:`);
206
+ console.log(` node "${path.join(__dirname, 'self-heal.js')}"`);
207
+ return;
208
+ }
209
+
210
+ const isSelf = path.resolve(workspaceRoot) === path.resolve(harnessSourceDir);
211
+ if (isSelf && !forceSelf) {
212
+ console.log('\nWorkspace IS the harness-everything repo itself - skipping repair to avoid');
213
+ console.log('polluting it with generated config files. Pass --force-self to override.');
214
+ return;
215
+ }
216
+
217
+ if (!fs.existsSync(installerPath)) {
218
+ console.error(`\nCannot repair: installer not found at ${installerPath}`);
219
+ process.exit(1);
220
+ }
221
+
222
+ console.log(`\nRepairing ${missing.length} missing active touchpoint(s) via installer...\n`);
223
+
224
+ // 構造參數只針對當前環境缺少的平台調用安裝器。--no-skills 讓修復只回補
225
+ // 該平台的整合觸點(advisory 檔案 / hooks 設定),絕不把全域 skills 複製進
226
+ // 專案 - skills 的安裝與否是使用者明確的選擇,不是 self-heal 的職權。
227
+ const activeFlags = missing.map(c => `--${c.platform}`).join(' ');
228
+ execSync(`node "${installerPath}" ${activeFlags} --no-skills --yes`, { cwd: workspaceRoot, stdio: 'inherit' });
229
+
230
+ const after = auditWorkspace(workspaceRoot);
231
+ console.log('');
232
+ printAudit(after);
233
+ const stillMissing = after.filter(c => !c.ok);
234
+ if (stillMissing.length > 0) {
235
+ console.error(`\nSelf-heal incomplete: ${stillMissing.length} touchpoint(s) still missing.`);
236
+ process.exit(1);
237
+ }
238
+ console.log('\nSelf-heal complete. Active platforms are now covered.');
239
+ }
240
+
241
+ main();