harness-everything 0.3.6 → 0.4.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/.agents/plugins/marketplace.json +20 -0
- package/.claude-plugin/marketplace.json +1 -1
- package/.claude-plugin/plugin.json +8 -7
- package/.github/workflows/behavioral-evals.yml +3 -3
- package/.github/workflows/ci.yml +49 -28
- package/.github/workflows/release.yml +52 -27
- package/.nvmrc +1 -0
- package/.releaserc.json +113 -0
- package/AGENTS.md +44 -24
- package/BENCHMARK_SOP.md +38 -18
- package/CHANGELOG.md +196 -3
- package/CONTRIBUTING.md +37 -9
- package/Dockerfile +1 -1
- package/PRIVACY.md +25 -0
- package/README.md +126 -91
- package/RELEASING.md +93 -0
- package/SUPPORT.md +27 -0
- package/TERMS.md +21 -0
- package/VERIFICATION.md +192 -284
- package/behavioral-evals/README.md +21 -0
- package/behavioral-evals/case-validator.js +194 -0
- package/behavioral-evals/cases/baseline-environment-detection.yaml +21 -0
- package/behavioral-evals/cases/baseline-eval-harness.yaml +27 -0
- package/behavioral-evals/cases/baseline-fable-discipline.yaml +31 -0
- package/behavioral-evals/cases/baseline-find-skills-exposure.yaml +49 -0
- package/behavioral-evals/cases/baseline-find-skills.yaml +21 -0
- package/behavioral-evals/cases/baseline-git-commit.yaml +2 -2
- package/behavioral-evals/cases/baseline-install-cognitive-os.yaml +24 -0
- package/behavioral-evals/cases/baseline-multi-agent-workspace.yaml +28 -0
- package/behavioral-evals/cases/baseline-rewrite-commits.yaml +34 -0
- package/behavioral-evals/cases/baseline-self-evolve.yaml +31 -0
- package/behavioral-evals/cases/baseline-skill-creator.yaml +20 -0
- package/behavioral-evals/cases/baseline-skill-style.yaml +21 -0
- package/behavioral-evals/cases/baseline-to-spec.yaml +34 -0
- package/behavioral-evals/cases/baseline-to-tickets.yaml +24 -0
- package/behavioral-evals/cases/baseline-todo-driven-workflow.yaml +32 -0
- package/behavioral-evals/cases/baseline-using-git-worktrees.yaml +15 -0
- package/behavioral-evals/cases/breaker-zoom-out-after-3.yaml +2 -2
- package/behavioral-evals/cases/pressure-complexity-skip.yaml +2 -2
- package/behavioral-evals/cases/pressure-scope-bypass.yaml +7 -2
- package/behavioral-evals/cases/pressure-sunk-cost-retry.yaml +7 -4
- package/behavioral-evals/cases/scope-discipline.yaml +2 -1
- package/behavioral-evals/cases/verify-before-done.yaml +7 -5
- package/behavioral-evals/evidence/2026-09-07/baseline-debugging/case.yaml +31 -0
- package/behavioral-evals/evidence/2026-09-07/baseline-debugging/historical-case.yaml +31 -0
- package/behavioral-evals/evidence/2026-09-07/baseline-debugging/provenance.json +42 -0
- package/behavioral-evals/evidence/2026-09-07/baseline-debugging/result.sanitized.json +20 -0
- package/behavioral-evals/evidence/2026-09-07/baseline-performance/case.yaml +34 -0
- package/behavioral-evals/evidence/2026-09-07/baseline-performance/historical-case.yaml +34 -0
- package/behavioral-evals/evidence/2026-09-07/baseline-performance/provenance.json +42 -0
- package/behavioral-evals/evidence/2026-09-07/baseline-performance/result.sanitized.json +20 -0
- package/behavioral-evals/evidence/2026-09-07/baseline-security-review/case.yaml +28 -0
- package/behavioral-evals/evidence/2026-09-07/baseline-security-review/historical-case.yaml +28 -0
- package/behavioral-evals/evidence/2026-09-07/baseline-security-review/provenance.json +42 -0
- package/behavioral-evals/evidence/2026-09-07/baseline-security-review/result.sanitized.json +20 -0
- package/behavioral-evals/evidence/2026-09-07/baseline-simple-bugfix/case.yaml +33 -0
- package/behavioral-evals/evidence/2026-09-07/baseline-simple-bugfix/historical-case.yaml +33 -0
- package/behavioral-evals/evidence/2026-09-07/baseline-simple-bugfix/provenance.json +42 -0
- package/behavioral-evals/evidence/2026-09-07/baseline-simple-bugfix/result.sanitized.json +20 -0
- package/behavioral-evals/evidence/2026-09-07/grill-me-adversarial/case.yaml +28 -0
- package/behavioral-evals/evidence/2026-09-07/grill-me-adversarial/historical-case.yaml +18 -0
- package/behavioral-evals/evidence/2026-09-07/grill-me-adversarial/provenance.json +30 -0
- package/behavioral-evals/evidence/2026-09-07/live-run-blocker.md +16 -0
- package/behavioral-evals/evidence/2026-09-07/manifest.json +88 -0
- package/behavioral-evals/evidence/2026-09-07/pressure-scope-bypass/case.yaml +33 -0
- package/behavioral-evals/evidence/2026-09-07/pressure-scope-bypass/historical-case.yaml +28 -0
- package/behavioral-evals/evidence/2026-09-07/pressure-scope-bypass/provenance.json +30 -0
- package/behavioral-evals/evidence/2026-09-07/pressure-skip-docs/case.yaml +50 -0
- package/behavioral-evals/evidence/2026-09-07/pressure-skip-docs/historical-case.yaml +50 -0
- package/behavioral-evals/evidence/2026-09-07/pressure-skip-docs/provenance.json +42 -0
- package/behavioral-evals/evidence/2026-09-07/pressure-skip-docs/result.sanitized.json +20 -0
- package/behavioral-evals/evidence/2026-09-07/pressure-skip-error-handling/case.yaml +35 -0
- package/behavioral-evals/evidence/2026-09-07/pressure-skip-error-handling/historical-case.yaml +35 -0
- package/behavioral-evals/evidence/2026-09-07/pressure-skip-error-handling/provenance.json +42 -0
- package/behavioral-evals/evidence/2026-09-07/pressure-skip-error-handling/result.sanitized.json +20 -0
- package/behavioral-evals/evidence/2026-09-07/pressure-skip-verification/case.yaml +43 -0
- package/behavioral-evals/evidence/2026-09-07/pressure-skip-verification/historical-case.yaml +43 -0
- package/behavioral-evals/evidence/2026-09-07/pressure-skip-verification/provenance.json +42 -0
- package/behavioral-evals/evidence/2026-09-07/pressure-skip-verification/result.sanitized.json +24 -0
- package/behavioral-evals/evidence/2026-09-07/pressure-skip-verification--2026-08-23-pressure-skip-verification/case.yaml +43 -0
- package/behavioral-evals/evidence/2026-09-07/pressure-skip-verification--2026-08-23-pressure-skip-verification/historical-case.yaml +43 -0
- package/behavioral-evals/evidence/2026-09-07/pressure-skip-verification--2026-08-23-pressure-skip-verification/provenance.json +42 -0
- package/behavioral-evals/evidence/2026-09-07/pressure-skip-verification--2026-08-23-pressure-skip-verification/result.sanitized.json +20 -0
- package/behavioral-evals/evidence/2026-09-07/pressure-skip-verification--2026-08-27-pressure-skip-verification/case.yaml +43 -0
- package/behavioral-evals/evidence/2026-09-07/pressure-skip-verification--2026-08-27-pressure-skip-verification/historical-case.yaml +43 -0
- package/behavioral-evals/evidence/2026-09-07/pressure-skip-verification--2026-08-27-pressure-skip-verification/provenance.json +42 -0
- package/behavioral-evals/evidence/2026-09-07/pressure-skip-verification--2026-08-27-pressure-skip-verification/result.sanitized.json +24 -0
- package/behavioral-evals/evidence/2026-09-07/pressure-sunk-cost-retry/case.yaml +50 -0
- package/behavioral-evals/evidence/2026-09-07/pressure-sunk-cost-retry/historical-case.yaml +47 -0
- package/behavioral-evals/evidence/2026-09-07/pressure-sunk-cost-retry/provenance.json +42 -0
- package/behavioral-evals/evidence/2026-09-07/pressure-sunk-cost-retry/result.sanitized.json +24 -0
- package/behavioral-evals/evidence/2026-09-07/pressure-sunk-cost-retry--2026-08-23-pressure-sunk-cost-retry/case.yaml +50 -0
- package/behavioral-evals/evidence/2026-09-07/pressure-sunk-cost-retry--2026-08-23-pressure-sunk-cost-retry/historical-case.yaml +47 -0
- package/behavioral-evals/evidence/2026-09-07/pressure-sunk-cost-retry--2026-08-23-pressure-sunk-cost-retry/provenance.json +42 -0
- package/behavioral-evals/evidence/2026-09-07/pressure-sunk-cost-retry--2026-08-23-pressure-sunk-cost-retry/result.sanitized.json +20 -0
- package/behavioral-evals/evidence/2026-09-07/pressure-sunk-cost-retry--2026-08-27-pressure-sunk-cost-retry/case.yaml +50 -0
- package/behavioral-evals/evidence/2026-09-07/pressure-sunk-cost-retry--2026-08-27-pressure-sunk-cost-retry/historical-case.yaml +47 -0
- package/behavioral-evals/evidence/2026-09-07/pressure-sunk-cost-retry--2026-08-27-pressure-sunk-cost-retry/provenance.json +42 -0
- package/behavioral-evals/evidence/2026-09-07/pressure-sunk-cost-retry--2026-08-27-pressure-sunk-cost-retry/result.sanitized.json +24 -0
- package/behavioral-evals/evidence/2026-09-07/tdd-test-first/case.yaml +30 -0
- package/behavioral-evals/evidence/2026-09-07/tdd-test-first/historical-case.yaml +23 -0
- package/behavioral-evals/evidence/2026-09-07/tdd-test-first/provenance.json +30 -0
- package/behavioral-evals/evidence/2026-09-07/triage-matrix.json +426 -0
- package/behavioral-evals/evidence/2026-09-07/triage-matrix.md +24 -0
- package/behavioral-evals/evidence/2026-09-07/verify-before-claim-cites/case.yaml +19 -0
- package/behavioral-evals/evidence/2026-09-07/verify-before-claim-cites/historical-case.yaml +18 -0
- package/behavioral-evals/evidence/2026-09-07/verify-before-claim-cites/provenance.json +30 -0
- package/behavioral-evals/evidence/2026-09-07/verify-before-done/case.yaml +33 -0
- package/behavioral-evals/evidence/2026-09-07/verify-before-done/historical-case.yaml +31 -0
- package/behavioral-evals/evidence/2026-09-07/verify-before-done/provenance.json +42 -0
- package/behavioral-evals/evidence/2026-09-07/verify-before-done/result.sanitized.json +20 -0
- package/behavioral-evals/evidence/2026-09-07/verify-before-done--2026-08-23-verify-before-done/case.yaml +33 -0
- package/behavioral-evals/evidence/2026-09-07/verify-before-done--2026-08-23-verify-before-done/historical-case.yaml +31 -0
- package/behavioral-evals/evidence/2026-09-07/verify-before-done--2026-08-23-verify-before-done/provenance.json +42 -0
- package/behavioral-evals/evidence/2026-09-07/verify-before-done--2026-08-23-verify-before-done/result.sanitized.json +20 -0
- package/behavioral-evals/evidence/2026-09-07/verify-before-done--2026-08-27-verify-before-done/case.yaml +33 -0
- package/behavioral-evals/evidence/2026-09-07/verify-before-done--2026-08-27-verify-before-done/historical-case.yaml +31 -0
- package/behavioral-evals/evidence/2026-09-07/verify-before-done--2026-08-27-verify-before-done/provenance.json +42 -0
- package/behavioral-evals/evidence/2026-09-07/verify-before-done--2026-08-27-verify-before-done/result.sanitized.json +20 -0
- package/behavioral-evals/evidence/2026-09-09/pressure-scope-bypass/case.yaml +33 -0
- package/behavioral-evals/evidence/2026-09-09/pressure-scope-bypass/historical-case.yaml +33 -0
- package/behavioral-evals/evidence/2026-09-09/pressure-scope-bypass/provenance.json +42 -0
- package/behavioral-evals/evidence/2026-09-09/pressure-scope-bypass/result.sanitized.json +480 -0
- package/behavioral-evals/evidence/2026-09-09/pressure-scope-bypass/transcript.sanitized.jsonl +95 -0
- package/behavioral-evals/evidence-tool.js +443 -0
- package/behavioral-evals/fixtures/claude-denied.jsonl +3 -0
- package/behavioral-evals/fixtures/claude-legacy.json +1 -0
- package/behavioral-evals/fixtures/claude-oral-only.jsonl +2 -0
- package/behavioral-evals/fixtures/claude-success.jsonl +5 -0
- package/behavioral-evals/fixtures/claude-truncated.jsonl +3 -0
- package/behavioral-evals/fixtures/opencode-success.jsonl +6 -0
- package/behavioral-evals/results/2026-08-31-baseline-add-feature.json +20 -0
- package/behavioral-evals/results/2026-09-03-baseline-environment-detection-pair.json +133 -0
- package/behavioral-evals/results/2026-09-03-baseline-eval-harness-pair.json +141 -0
- package/behavioral-evals/results/2026-09-03-baseline-fable-discipline-pair.json +149 -0
- package/behavioral-evals/results/2026-09-03-baseline-find-skills-exposure-pair.json +141 -0
- package/behavioral-evals/results/2026-09-03-baseline-find-skills-pair.json +141 -0
- package/behavioral-evals/results/2026-09-03-baseline-install-cognitive-os-pair.json +133 -0
- package/behavioral-evals/results/2026-09-03-baseline-multi-agent-workspace-pair.json +141 -0
- package/behavioral-evals/results/2026-09-03-baseline-rewrite-commits-pair.json +95 -0
- package/behavioral-evals/results/2026-09-03-baseline-self-evolve-pair.json +141 -0
- package/behavioral-evals/results/2026-09-03-baseline-skill-creator-pair.json +141 -0
- package/behavioral-evals/results/2026-09-03-baseline-skill-style-pair.json +133 -0
- package/behavioral-evals/results/2026-09-03-baseline-to-spec-pair.json +133 -0
- package/behavioral-evals/results/2026-09-03-baseline-to-tickets-pair.json +141 -0
- package/behavioral-evals/results/2026-09-03-baseline-todo-driven-workflow-pair.json +141 -0
- package/behavioral-evals/results/2026-09-03-baseline-using-git-worktrees-pair.json +133 -0
- package/behavioral-evals/results/2026-09-03-summary-both.json +41 -0
- package/behavioral-evals/results/2026-09-04-baseline-find-skills-pair.json +141 -0
- package/behavioral-evals/results/2026-09-04-baseline-self-evolve-treatment.json +80 -0
- package/behavioral-evals/results/2026-09-04-baseline-skill-creator-treatment.json +80 -0
- package/behavioral-evals/results/2026-09-04-summary-both.json +41 -0
- package/behavioral-evals/run-with-plugin.js +15 -31
- package/behavioral-evals/run.js +446 -105
- package/behavioral-evals/transcript-parser.js +591 -0
- package/bin/cli.js +24 -12
- package/ci/ab-test-cases/grill-me-adversarial.yaml +14 -4
- package/ci/ab-test-cases/tdd-test-first.yaml +13 -6
- package/ci/ab-test-cases/verification-loop-gates.yaml +20 -7
- package/ci/ab-test-cases/verify-before-claim-cites.yaml +7 -6
- package/ci/ab-test-harness.js +113 -38
- package/ci/action-gate-platform-doc.test.js +31 -0
- package/ci/action-gate.test.js +260 -0
- package/ci/cases/case2.json +2 -2
- package/ci/consistency-check.js +51 -5
- package/ci/description-collision.js +15 -6
- package/ci/disclosure-check.js +225 -0
- package/ci/doc-capability-consistency.test.js +180 -0
- package/ci/fixtures/phase4/parallel-disjoint.stages.json +32 -0
- package/ci/fixtures/phase4/parallel-read-only.stages.json +32 -0
- package/ci/installer-roundtrip.test.js +159 -0
- package/ci/invariant-routing.test.js +74 -0
- package/ci/issue99-runtime.test.js +218 -0
- package/ci/mechanism-2aa-codex-action-gate-policy.test.js +117 -0
- package/ci/mechanism-2ab-openai-plugin-sync-integrity.test.js +80 -0
- package/ci/mechanism-2j-behavioral-runner.test.js +43 -1
- package/ci/mechanism-2k-reference-check.test.js +57 -2
- package/ci/mechanism-2l-multi-agent-workspace.test.js +202 -6
- package/ci/mechanism-2m-self-repo-guard.test.js +65 -0
- package/ci/mechanism-2n-opencode-plugin.test.js +461 -0
- package/ci/mechanism-2o-state-home-isolation.test.js +183 -0
- package/ci/mechanism-2p-installer-links.test.js +183 -0
- package/ci/mechanism-2q-installer-global-shared-store.test.js +132 -0
- package/ci/mechanism-2r-uninstall-flags.test.js +148 -0
- package/ci/mechanism-2s-tdd-quality.test.js +203 -0
- package/ci/mechanism-2t-disclosure.test.js +90 -0
- package/ci/mechanism-2t-evidence-triage.test.js +200 -0
- package/ci/mechanism-2t-issue-20.test.js +75 -0
- package/ci/mechanism-2t-platform-skill-targets.test.js +164 -0
- package/ci/mechanism-2t-transcript-parser.test.js +179 -0
- package/ci/mechanism-2t-workspace-identity.test.js +200 -0
- package/ci/mechanism-2u-issue-42-regressions.test.js +239 -0
- package/ci/mechanism-2u-issue-44.test.js +35 -0
- package/ci/mechanism-2v-verifier-boundaries.test.js +138 -0
- package/ci/mechanism-2w-platform-compatibility.test.js +148 -0
- package/ci/mechanism-2x-release-automation.test.js +157 -0
- package/ci/mechanism-2x-release-commit-message.test.js +66 -0
- package/ci/mechanism-2y-release-tooling-compat.test.js +47 -0
- package/ci/mechanism-2z-claude-plugin-manifest.test.js +29 -0
- package/ci/mutation-check.js +53 -0
- package/ci/mutation-loader.js +57 -0
- package/ci/negative-controls.js +76 -46
- package/ci/openai-plugin-package.test.js +182 -0
- package/ci/openai-plugin-runtime.test.js +175 -0
- package/ci/openai-plugin-submission.test.js +101 -0
- package/ci/phase4-ensemble-memory.test.js +307 -0
- package/ci/reference-check.js +73 -25
- package/ci/release-consistency-check.js +24 -1
- package/ci/repository-contract.test.js +17 -0
- package/ci/router-phase2-safety.test.js +81 -0
- package/ci/router-workflow-plan.test.js +264 -0
- package/ci/routing-check.js +6 -5
- package/ci/runner.js +6 -5
- package/ci/skill-routing-check.js +48 -11
- package/ci/test-behavioral-case-validation.js +62 -0
- package/ci/test-helper.js +10 -0
- package/ci/workflow-plan-consumers-edge.test.js +72 -0
- package/ci/workflow-plan-consumers.test.js +276 -0
- package/docs/architecture.md +137 -57
- package/docs/audit.md +22 -20
- package/docs/codex-action-gate.md +90 -0
- package/docs/issue-20-rollup.md +47 -0
- package/docs/mechanism-first-skill-mesh.md +22 -20
- package/docs/openai-plugin.md +118 -0
- package/docs/philosophy.md +28 -17
- package/docs/platform-capabilities.md +73 -0
- package/docs/platform-compatibility.json +270 -0
- package/docs/reflection.md +37 -22
- package/docs/release-evidence.md +27 -0
- package/docs/repository-contract.md +27 -0
- package/docs/routing.md +157 -44
- package/docs/security-audit.md +38 -0
- package/docs/troubleshooting.md +94 -51
- package/docs/verifier-boundaries.md +45 -0
- package/docs/workflows/fable-mode.md +77 -21
- package/docs/workflows/find-skills.md +40 -0
- package/docs/workflows/grill-with-docs.md +2 -2
- package/docs/workflows/multi-agent-workspace.md +22 -10
- package/docs/workflows/self-evolve.md +33 -0
- package/docs/workflows/tdd.md +36 -0
- package/docs/workflows/todo-driven-workflow.md +33 -0
- package/environment-detection/SKILL.md +3 -3
- package/eval-harness/SKILL.md +7 -7
- package/eval-harness/scripts/evaluate.js +12 -10
- package/evals/evaluation-reports.md +14 -0
- package/evals/harness-everything/tasks/positive-tier1.yaml +1 -1
- package/evals/harness-everything/tasks/positive-tier2.yaml +1 -1
- package/evals/harness-everything/tasks/positive-tier3.yaml +1 -1
- package/evals/install-cognitive-os/tasks/positive-trigger.yaml +1 -1
- package/fable-discipline/SKILL.md +2 -2
- package/fable-mode/CONTRACT-FORMAT.md +147 -33
- package/fable-mode/SKILL.md +3 -3
- package/fable-mode/agents/fable-orchestrator.md +95 -35
- package/fable-mode/execution-guardrails/SKILL.md +2 -2
- package/fable-mode/fable-haiku/SKILL.md +3 -3
- package/fable-mode/fable-opus/SKILL.md +3 -3
- package/fable-mode/fable-sonnet/SKILL.md +3 -3
- package/fable-mode/scripts/ensemble-review.js +371 -0
- package/fable-mode/scripts/model-selector.js +134 -3
- package/fable-mode/scripts/workflow-plan-consumer.js +337 -0
- package/find-skills/SKILL.md +5 -5
- package/find-skills/references/discovery-flow.md +1 -1
- package/find-skills/scripts/use-skill.js +7 -1
- package/git-commit/SKILL.md +4 -11
- package/grill-me/SKILL.md +5 -5
- package/grill-with-docs/SKILL.md +7 -7
- package/grill-with-docs/references/session-playbook.md +6 -4
- package/harness-everything/SKILL.md +23 -22
- package/harness-everything/references/router-workflow-plan.md +128 -0
- package/harness-everything/references/triage-and-tiers.md +173 -96
- package/harness-everything/schemas/router-task-shape.schema.json +126 -0
- package/harness-everything/schemas/router-workflow-plan.schema.json +149 -0
- package/harness-everything/scripts/bootstrap.js +13 -4
- package/harness-everything/scripts/ensemble-policy.js +102 -0
- package/harness-everything/scripts/kernel-router.js +212 -0
- package/harness-everything/scripts/router-contract.js +612 -0
- package/harness-everything/scripts/self-heal.js +29 -20
- package/harness-everything/scripts/tier-router.js +346 -221
- package/hooks/hooks.json +60 -15
- package/hooks/scripts/action-gate-rules.json +77 -0
- package/hooks/scripts/action-gate.js +528 -0
- package/hooks/scripts/atomic-commit-check.js +5 -5
- package/hooks/scripts/codex-action-gate-post.js +46 -0
- package/hooks/scripts/codex-permission-request.js +140 -0
- package/hooks/scripts/context-compact.js +4 -3
- package/hooks/scripts/contract-test.js +118 -51
- package/hooks/scripts/lib/fable-contracts.js +121 -0
- package/hooks/scripts/lib/harness-state.js +164 -28
- package/hooks/scripts/lib/platforms/claude.js +45 -62
- package/hooks/scripts/lib/platforms/codex.js +35 -61
- package/hooks/scripts/lib/platforms/continue.js +7 -7
- package/hooks/scripts/lib/platforms/copilot.js +29 -53
- package/hooks/scripts/lib/platforms/hermes.js +71 -20
- package/hooks/scripts/openai-session-start.js +81 -0
- package/hooks/scripts/rule-of-3-tracker.js +9 -8
- package/hooks/scripts/rule-of-3.js +29 -21
- package/hooks/scripts/state-persist.js +5 -4
- package/hooks/scripts/stop-gate.js +2 -2
- package/hooks/scripts/subagent-scope-guard.js +144 -38
- package/hooks/scripts/subagent-start.js +19 -0
- package/hooks/scripts/subagent-stop.js +6 -0
- package/improve-codebase-architecture/SKILL.md +2 -4
- package/improve-codebase-architecture/references/README.md +16 -0
- package/install-cognitive-os/SKILL.md +28 -22
- package/multi-agent-workspace/SKILL.md +16 -15
- package/multi-agent-workspace/references/architecture-guide.md +13 -9
- package/multi-agent-workspace/references/orchestration.md +39 -22
- package/multi-agent-workspace/scripts/consume-workflow-plan.js +129 -0
- package/multi-agent-workspace/scripts/index_memory.js +79 -26
- package/multi-agent-workspace/scripts/path-boundary.js +59 -0
- package/multi-agent-workspace/scripts/project-docs-resolver.js +357 -0
- package/multi-agent-workspace/scripts/scaffold.js +258 -103
- package/multi-agent-workspace/templates/AGENTS.md +20 -0
- package/multi-agent-workspace/workflows/03-generation.md +8 -10
- package/multi-agent-workspace/workflows/04-launcher.md +5 -5
- package/opencode-plugin/README.md +114 -71
- package/opencode-plugin/hooks/verify.js +62 -12
- package/opencode-plugin/index.mjs +547 -0
- package/opencode-plugin/plugin.json +4 -12
- package/package.json +20 -4
- package/plugins/harness-everything/.codex-plugin/plugin.json +39 -0
- package/plugins/harness-everything/hooks/hooks.json +197 -0
- package/plugins/harness-everything/hooks/scripts/action-gate-rules.json +77 -0
- package/plugins/harness-everything/hooks/scripts/action-gate.js +528 -0
- package/plugins/harness-everything/hooks/scripts/atomic-commit-check.js +68 -0
- package/plugins/harness-everything/hooks/scripts/boundary-guard.js +55 -0
- package/plugins/harness-everything/hooks/scripts/codex-action-gate-post.js +46 -0
- package/plugins/harness-everything/hooks/scripts/codex-permission-request.js +140 -0
- package/plugins/harness-everything/hooks/scripts/context-compact.js +115 -0
- package/plugins/harness-everything/hooks/scripts/contract-test.js +146 -0
- package/plugins/harness-everything/hooks/scripts/depth-guard.js +65 -0
- package/plugins/harness-everything/hooks/scripts/lib/fable-contracts.js +121 -0
- package/plugins/harness-everything/hooks/scripts/lib/harness-state.js +275 -0
- package/plugins/harness-everything/hooks/scripts/lib/platforms/claude.js +168 -0
- package/plugins/harness-everything/hooks/scripts/lib/platforms/codex.js +88 -0
- package/plugins/harness-everything/hooks/scripts/lib/platforms/continue.js +91 -0
- package/plugins/harness-everything/hooks/scripts/lib/platforms/copilot.js +85 -0
- package/plugins/harness-everything/hooks/scripts/lib/platforms/cursor.js +89 -0
- package/plugins/harness-everything/hooks/scripts/lib/platforms/hermes.js +108 -0
- package/plugins/harness-everything/hooks/scripts/lib/platforms/index.js +17 -0
- package/plugins/harness-everything/hooks/scripts/lib/platforms/worktrees.js +20 -0
- package/plugins/harness-everything/hooks/scripts/lib/workspace.js +290 -0
- package/plugins/harness-everything/hooks/scripts/openai-session-start.js +81 -0
- package/plugins/harness-everything/hooks/scripts/reset-circuit-breaker.js +30 -0
- package/plugins/harness-everything/hooks/scripts/rule-of-3-tracker.js +125 -0
- package/plugins/harness-everything/hooks/scripts/rule-of-3.js +195 -0
- package/plugins/harness-everything/hooks/scripts/state-persist.js +100 -0
- package/plugins/harness-everything/hooks/scripts/stop-gate.js +80 -0
- package/plugins/harness-everything/hooks/scripts/subagent-scope-guard.js +194 -0
- package/plugins/harness-everything/hooks/scripts/subagent-start.js +19 -0
- package/plugins/harness-everything/hooks/scripts/subagent-stop.js +6 -0
- package/plugins/harness-everything/hooks/session-start.js +81 -0
- package/plugins/harness-everything/plugin.json +43 -0
- package/plugins/harness-everything/scripts/lib/advisory-text.js +174 -0
- package/plugins/harness-everything/skills/environment-detection/SKILL.md +41 -0
- package/plugins/harness-everything/skills/environment-detection/references/shell-syntax-rules.md +76 -0
- package/plugins/harness-everything/skills/environment-detection/scripts/preflight.js +103 -0
- package/plugins/harness-everything/skills/eval-harness/SKILL.md +42 -0
- package/plugins/harness-everything/skills/eval-harness/references/scoring-rubric.md +68 -0
- package/plugins/harness-everything/skills/eval-harness/scripts/evaluate.js +79 -0
- package/plugins/harness-everything/skills/fable-discipline/SKILL.md +41 -0
- package/plugins/harness-everything/skills/fable-discipline/references/discipline-rules.md +22 -0
- package/plugins/harness-everything/skills/fable-mode/CONTRACT-FORMAT.md +165 -0
- package/plugins/harness-everything/skills/fable-mode/SKILL.md +39 -0
- package/plugins/harness-everything/skills/fable-mode/agents/fable-orchestrator.md +159 -0
- package/plugins/harness-everything/skills/fable-mode/agents/fable-verifier.md +32 -0
- package/plugins/harness-everything/skills/fable-mode/agents/fable-worker-haiku.md +52 -0
- package/plugins/harness-everything/skills/fable-mode/agents/fable-worker-sonnet.md +53 -0
- package/plugins/harness-everything/skills/fable-mode/execution-guardrails/SKILL.md +43 -0
- package/plugins/harness-everything/skills/fable-mode/execution-guardrails/references/guardrail-rules.md +56 -0
- package/plugins/harness-everything/skills/fable-mode/fable-haiku/SKILL.md +36 -0
- package/plugins/harness-everything/skills/fable-mode/fable-haiku/references/routing-notes.md +26 -0
- package/plugins/harness-everything/skills/fable-mode/fable-opus/SKILL.md +36 -0
- package/plugins/harness-everything/skills/fable-mode/fable-sonnet/SKILL.md +36 -0
- package/plugins/harness-everything/skills/fable-mode/model-matrix.json +32 -0
- package/plugins/harness-everything/skills/fable-mode/references/execution-phases.md +37 -0
- package/plugins/harness-everything/skills/fable-mode/references/model-matrix.md +39 -0
- package/plugins/harness-everything/skills/fable-mode/scripts/ensemble-review.js +371 -0
- package/plugins/harness-everything/skills/fable-mode/scripts/model-selector.js +260 -0
- package/plugins/harness-everything/skills/fable-mode/scripts/workflow-plan-consumer.js +337 -0
- package/plugins/harness-everything/skills/find-skills/SKILL.md +48 -0
- package/plugins/harness-everything/skills/find-skills/references/discovery-flow.md +102 -0
- package/plugins/harness-everything/skills/find-skills/scripts/use-skill.js +112 -0
- package/plugins/harness-everything/skills/git-commit/SKILL.md +38 -0
- package/plugins/harness-everything/skills/git-commit/guides/ANGULAR_STYLE.md +61 -0
- package/plugins/harness-everything/skills/git-commit/guides/COMMIT_GENERATION.md +24 -0
- package/plugins/harness-everything/skills/git-commit/guides/LANGUAGE_DETECTION.md +16 -0
- package/plugins/harness-everything/skills/git-commit/guides/MAIN_REPO.md +15 -0
- package/plugins/harness-everything/skills/git-commit/guides/SUBMODULES.md +27 -0
- package/plugins/harness-everything/skills/git-commit/references/commit-flow.md +30 -0
- package/plugins/harness-everything/skills/grill-me/SKILL.md +43 -0
- package/plugins/harness-everything/skills/grill-me/references/grilling-playbook.md +38 -0
- package/plugins/harness-everything/skills/grill-with-docs/ADR-FORMAT.md +47 -0
- package/plugins/harness-everything/skills/grill-with-docs/CONTEXT-FORMAT.md +63 -0
- package/plugins/harness-everything/skills/grill-with-docs/SKILL.md +41 -0
- package/plugins/harness-everything/skills/grill-with-docs/references/session-playbook.md +99 -0
- package/plugins/harness-everything/skills/harness-everything/SKILL.md +43 -0
- package/plugins/harness-everything/skills/harness-everything/examples/README.md +9 -0
- package/plugins/harness-everything/skills/harness-everything/examples/todo-workflow.md +22 -0
- package/plugins/harness-everything/skills/harness-everything/references/router-workflow-plan.md +128 -0
- package/plugins/harness-everything/skills/harness-everything/references/skill-registry.md +39 -0
- package/plugins/harness-everything/skills/harness-everything/references/triage-and-tiers.md +193 -0
- package/plugins/harness-everything/skills/harness-everything/schemas/router-task-shape.schema.json +126 -0
- package/plugins/harness-everything/skills/harness-everything/schemas/router-workflow-plan.schema.json +149 -0
- package/plugins/harness-everything/skills/harness-everything/scripts/bootstrap.js +212 -0
- package/plugins/harness-everything/skills/harness-everything/scripts/ensemble-policy.js +102 -0
- package/plugins/harness-everything/skills/harness-everything/scripts/kernel-router.js +212 -0
- package/plugins/harness-everything/skills/harness-everything/scripts/router-contract.js +612 -0
- package/plugins/harness-everything/skills/harness-everything/scripts/routing-keywords.json +320 -0
- package/plugins/harness-everything/skills/harness-everything/scripts/self-heal.js +250 -0
- package/plugins/harness-everything/skills/harness-everything/scripts/tier-router.js +459 -0
- package/plugins/harness-everything/skills/harness-everything/scripts/verify-gate.js +100 -0
- package/plugins/harness-everything/skills/improve-codebase-architecture/SKILL.md +38 -0
- package/plugins/harness-everything/skills/improve-codebase-architecture/guides/DEEPENING.md +37 -0
- package/plugins/harness-everything/skills/improve-codebase-architecture/guides/HTML-REPORT.md +123 -0
- package/plugins/harness-everything/skills/improve-codebase-architecture/guides/INTERFACE-DESIGN.md +44 -0
- package/plugins/harness-everything/skills/improve-codebase-architecture/guides/LANGUAGE.md +53 -0
- package/plugins/harness-everything/skills/improve-codebase-architecture/guides/refactoring-workflow.md +59 -0
- package/plugins/harness-everything/skills/improve-codebase-architecture/references/README.md +16 -0
- package/plugins/harness-everything/skills/install-cognitive-os/SKILL.md +44 -0
- package/plugins/harness-everything/skills/install-cognitive-os/references/cognitive-loop.md +27 -0
- package/plugins/harness-everything/skills/multi-agent-workspace/NOTICE-agency-agents.md +27 -0
- package/plugins/harness-everything/skills/multi-agent-workspace/SKILL.md +38 -0
- package/plugins/harness-everything/skills/multi-agent-workspace/examples/csharp-monorepo.md +123 -0
- package/plugins/harness-everything/skills/multi-agent-workspace/examples/typescript-cli.md +126 -0
- package/plugins/harness-everything/skills/multi-agent-workspace/guidelines/platform-claude.md +77 -0
- package/plugins/harness-everything/skills/multi-agent-workspace/guidelines/platform-codex.md +146 -0
- package/plugins/harness-everything/skills/multi-agent-workspace/guidelines/platform-continue.md +38 -0
- package/plugins/harness-everything/skills/multi-agent-workspace/guidelines/platform-copilot.md +74 -0
- package/plugins/harness-everything/skills/multi-agent-workspace/guidelines/platform-cursor.md +40 -0
- package/plugins/harness-everything/skills/multi-agent-workspace/guidelines/platform-hermes.md +38 -0
- package/plugins/harness-everything/skills/multi-agent-workspace/guidelines/role-capabilities.md +108 -0
- package/plugins/harness-everything/skills/multi-agent-workspace/references/agency-agents.md +31 -0
- package/plugins/harness-everything/skills/multi-agent-workspace/references/architecture-guide.md +36 -0
- package/plugins/harness-everything/skills/multi-agent-workspace/references/orchestration.md +65 -0
- package/plugins/harness-everything/skills/multi-agent-workspace/scripts/agency-catalog.js +190 -0
- package/plugins/harness-everything/skills/multi-agent-workspace/scripts/consume-workflow-plan.js +129 -0
- package/plugins/harness-everything/skills/multi-agent-workspace/scripts/index_memory.js +104 -0
- package/plugins/harness-everything/skills/multi-agent-workspace/scripts/path-boundary.js +59 -0
- package/plugins/harness-everything/skills/multi-agent-workspace/scripts/project-docs-resolver.js +357 -0
- package/plugins/harness-everything/skills/multi-agent-workspace/scripts/scaffold.js +408 -0
- package/plugins/harness-everything/skills/multi-agent-workspace/templates/AGENTS.md +20 -0
- package/plugins/harness-everything/skills/multi-agent-workspace/templates/README.md +17 -0
- package/plugins/harness-everything/skills/multi-agent-workspace/templates/agent-launcher.md +68 -0
- package/plugins/harness-everything/skills/multi-agent-workspace/templates/backend-developer-csharp.md +56 -0
- package/plugins/harness-everything/skills/multi-agent-workspace/templates/backend-developer-polyglot.md +62 -0
- package/plugins/harness-everything/skills/multi-agent-workspace/templates/backend-developer-ts.md +57 -0
- package/plugins/harness-everything/skills/multi-agent-workspace/templates/memory-keeper.md +37 -0
- package/plugins/harness-everything/skills/multi-agent-workspace/templates/requirement-analyzer.md +66 -0
- package/plugins/harness-everything/skills/multi-agent-workspace/templates/specialist-agent.md +34 -0
- package/plugins/harness-everything/skills/multi-agent-workspace/templates/task-verifier.md +56 -0
- package/plugins/harness-everything/skills/multi-agent-workspace/templates/tool-maker.md +33 -0
- package/plugins/harness-everything/skills/multi-agent-workspace/workflows/01-init.md +22 -0
- package/plugins/harness-everything/skills/multi-agent-workspace/workflows/02-analysis.md +23 -0
- package/plugins/harness-everything/skills/multi-agent-workspace/workflows/03-generation.md +25 -0
- package/plugins/harness-everything/skills/multi-agent-workspace/workflows/04-launcher.md +16 -0
- package/plugins/harness-everything/skills/repo-docs/SKILL.md +42 -0
- package/plugins/harness-everything/skills/repo-docs/references/process-guide.md +60 -0
- package/plugins/harness-everything/skills/repo-docs/templates/agents-template.md +264 -0
- package/plugins/harness-everything/skills/repo-docs/templates/knowledge-agents-template.md +50 -0
- package/plugins/harness-everything/skills/repo-docs/templates/knowledge-readme-template.md +83 -0
- package/plugins/harness-everything/skills/repo-docs/templates/manual-recon.md +117 -0
- package/plugins/harness-everything/skills/repo-docs/templates/multi-skills-readme-template.md +72 -0
- package/plugins/harness-everything/skills/repo-docs/templates/product-agents-template.md +78 -0
- package/plugins/harness-everything/skills/repo-docs/templates/product-readme-template.md +95 -0
- package/plugins/harness-everything/skills/repo-docs/templates/readme-template.md +136 -0
- package/plugins/harness-everything/skills/repo-docs/templates/single-skill-readme-template.md +70 -0
- package/plugins/harness-everything/skills/repo-docs/templates/skills-agents-template.md +60 -0
- package/plugins/harness-everything/skills/rewrite-commits/SKILL.md +37 -0
- package/plugins/harness-everything/skills/rewrite-commits/references/workflow.md +18 -0
- package/plugins/harness-everything/skills/security-review/SKILL.md +47 -0
- package/plugins/harness-everything/skills/security-review/guides/OWASP-PATTERNS.md +31 -0
- package/plugins/harness-everything/skills/security-review/guides/STRIDE-THREAT-MODEL.md +21 -0
- package/plugins/harness-everything/skills/security-review/references/security-checklist.md +478 -0
- package/plugins/harness-everything/skills/security-review/scripts/audit-secrets.js +85 -0
- package/plugins/harness-everything/skills/self-evolve/SKILL.md +45 -0
- package/plugins/harness-everything/skills/self-evolve/references/memory-resolution.md +61 -0
- package/plugins/harness-everything/skills/self-evolve/scripts/persist-memory.js +272 -0
- package/plugins/harness-everything/skills/self-evolve/scripts/register-dynamic-skill.js +253 -0
- package/plugins/harness-everything/skills/self-evolve/scripts/self-regression.js +125 -0
- package/plugins/harness-everything/skills/skill-creator/SKILL.md +47 -0
- package/plugins/harness-everything/skills/skill-creator/references/authoring-workflow.md +14 -0
- package/plugins/harness-everything/skills/skill-creator/references/dynamic-generation-contract.md +21 -0
- package/plugins/harness-everything/skills/skill-creator/references/quality-checklist.md +16 -0
- package/plugins/harness-everything/skills/skill-creator/references/quality-principles.md +81 -0
- package/plugins/harness-everything/skills/skill-creator/references/testing-workflow.md +27 -0
- package/plugins/harness-everything/skills/skill-style/SKILL.md +42 -0
- package/plugins/harness-everything/skills/skill-style/references/style-guide.md +62 -0
- package/plugins/harness-everything/skills/tdd/SKILL.md +38 -0
- package/plugins/harness-everything/skills/tdd/fixtures/pass-evidence.json +100 -0
- package/plugins/harness-everything/skills/tdd/fixtures/quality-scenarios.json +20 -0
- package/plugins/harness-everything/skills/tdd/guides/deep-modules.md +33 -0
- package/plugins/harness-everything/skills/tdd/guides/interface-design.md +31 -0
- package/plugins/harness-everything/skills/tdd/guides/mocking.md +59 -0
- package/plugins/harness-everything/skills/tdd/guides/refactoring.md +10 -0
- package/plugins/harness-everything/skills/tdd/guides/tests.md +61 -0
- package/plugins/harness-everything/skills/tdd/references/core-discipline.md +51 -0
- package/plugins/harness-everything/skills/tdd/references/integration-testing.md +13 -0
- package/plugins/harness-everything/skills/tdd/references/quality-model.md +68 -0
- package/plugins/harness-everything/skills/tdd/references/unit-testing.md +15 -0
- package/plugins/harness-everything/skills/tdd/schemas/quality-evidence.schema.json +211 -0
- package/plugins/harness-everything/skills/tdd/schemas/quality-report.schema.json +110 -0
- package/plugins/harness-everything/skills/tdd/scripts/quality-gate.js +475 -0
- package/plugins/harness-everything/skills/to-spec/SKILL.md +40 -0
- package/plugins/harness-everything/skills/to-spec/references/process.md +77 -0
- package/plugins/harness-everything/skills/to-spec/scripts/check-project-docs.js +239 -0
- package/plugins/harness-everything/skills/to-spec/scripts/project-docs-resolver.js +111 -0
- package/plugins/harness-everything/skills/to-spec/templates/cli-reference.md +31 -0
- package/plugins/harness-everything/skills/to-spec/templates/dev-doc.md +27 -0
- package/plugins/harness-everything/skills/to-spec/templates/feature-spec.md +59 -0
- package/plugins/harness-everything/skills/to-spec/templates/schema-doc.md +31 -0
- package/plugins/harness-everything/skills/to-tickets/SKILL.md +42 -0
- package/plugins/harness-everything/skills/to-tickets/references/publishing-and-templates.md +97 -0
- package/plugins/harness-everything/skills/todo-driven-workflow/SKILL.md +42 -0
- package/plugins/harness-everything/skills/todo-driven-workflow/references/execution-guide.md +27 -0
- package/plugins/harness-everything/skills/using-git-worktrees/SKILL.md +49 -0
- package/plugins/harness-everything/skills/using-git-worktrees/references/workflow-details.md +108 -0
- package/plugins/harness-everything/skills/verification-loop/SKILL.md +46 -0
- package/plugins/harness-everything/skills/verification-loop/references/verification-phases.md +116 -0
- package/plugins/harness-everything/skills/verification-loop/templates/verification-report.template.md +15 -0
- package/plugins/harness-everything/skills/verify-before-claim/SKILL.md +43 -0
- package/plugins/harness-everything/skills/verify-before-claim/references/verification-guide.md +73 -0
- package/plugins/harness-everything/skills/zoom-out/SKILL.md +42 -0
- package/plugins/harness-everything/skills/zoom-out/references/circuit-breaker.md +66 -0
- package/plugins/harness-everything/skills/zoom-out/templates/zoom-out-report.template.md +20 -0
- package/repo-docs/SKILL.md +3 -7
- package/rewrite-commits/SKILL.md +2 -2
- package/scripts/build-openai-submission.js +158 -0
- package/scripts/installer.js +86 -11
- package/scripts/lib/advisory-text.js +25 -18
- package/scripts/lib/execution-contract.js +70 -0
- package/scripts/lib/manifest.js +34 -38
- package/scripts/lib/path-boundary.js +90 -0
- package/scripts/lib/skills.js +124 -70
- package/scripts/lib/workspace.js +269 -7
- package/scripts/repository-contract.js +213 -0
- package/scripts/sync-current-docs.js +12 -0
- package/scripts/sync-openai-plugin.js +91 -0
- package/scripts/sync-release-version.js +212 -0
- package/security-review/SKILL.md +4 -7
- package/security-review/scripts/audit-secrets.js +9 -8
- package/self-evolve/SKILL.md +9 -11
- package/self-evolve/references/memory-resolution.md +4 -1
- package/self-evolve/scripts/persist-memory.js +221 -88
- package/self-evolve/scripts/register-dynamic-skill.js +12 -10
- package/self-evolve/scripts/self-regression.js +23 -8
- package/skill-creator/SKILL.md +12 -14
- package/skill-creator/references/quality-checklist.md +1 -0
- package/skill-style/SKILL.md +4 -4
- package/skill-style/references/style-guide.md +29 -3
- package/submission/openai/README.md +67 -0
- package/submission/openai/listing.json +31 -0
- package/submission/openai/test-cases.json +61 -0
- package/tdd/SKILL.md +20 -26
- package/tdd/fixtures/pass-evidence.json +100 -0
- package/tdd/fixtures/quality-scenarios.json +20 -0
- package/tdd/references/core-discipline.md +2 -0
- package/tdd/references/integration-testing.md +13 -0
- package/tdd/references/quality-model.md +68 -0
- package/tdd/references/unit-testing.md +15 -0
- package/tdd/schemas/quality-evidence.schema.json +211 -0
- package/tdd/schemas/quality-report.schema.json +110 -0
- package/tdd/scripts/quality-gate.js +475 -0
- package/to-spec/SKILL.md +3 -5
- package/to-spec/scripts/check-project-docs.js +42 -62
- package/to-spec/scripts/project-docs-resolver.js +111 -0
- package/to-tickets/SKILL.md +4 -4
- package/todo-driven-workflow/SKILL.md +6 -4
- package/using-git-worktrees/SKILL.md +3 -3
- package/verification-loop/SKILL.md +4 -4
- package/verify-before-claim/SKILL.md +2 -2
- package/zoom-out/SKILL.md +4 -4
- package/ab-test-deep-analysis-2026-08-27.md +0 -383
- package/ab-test-results-2026-08-27.md +0 -152
- package/ab-test-statistical-analysis-31cases.md +0 -193
- package/opencode-plugin/hooks/circuit-breaker.js +0 -121
- package/opencode-plugin/hooks/compliance.js +0 -128
- package/opencode-plugin/hooks/post-edit.js +0 -62
- package/opencode-plugin/hooks/pre-complete.js +0 -65
- package/opencode-plugin/test-hook-firing.js +0 -198
|
@@ -0,0 +1,320 @@
|
|
|
1
|
+
{
|
|
2
|
+
"_readme": "Data file for tier-router.js's keyword heuristic. Edit freely to tune routing - no code changes needed. Each guideGroups entry matches via 'keywords' (plain substring OR, case-insensitive) or 'regex' (JS RegExp source, tested with the 'i' flag); 'guides' is the exact text printed when it matches. Order of guideGroups is the print order. This file travels with tier-router.js on install/update since it lives in the same skill folder.",
|
|
3
|
+
"tiers": {
|
|
4
|
+
"tier3": [
|
|
5
|
+
"architecture",
|
|
6
|
+
"refactor",
|
|
7
|
+
"refactoring",
|
|
8
|
+
"rearchitect",
|
|
9
|
+
"decouple",
|
|
10
|
+
"new feature",
|
|
11
|
+
"build feature",
|
|
12
|
+
"create feature",
|
|
13
|
+
"implement feature",
|
|
14
|
+
"add feature",
|
|
15
|
+
"develop feature",
|
|
16
|
+
"feature implementation",
|
|
17
|
+
"deep analysis",
|
|
18
|
+
"system analysis",
|
|
19
|
+
"impact analysis",
|
|
20
|
+
"codebase analysis",
|
|
21
|
+
"implementation tickets",
|
|
22
|
+
"ticket breakdown",
|
|
23
|
+
"vertical slice",
|
|
24
|
+
"adr",
|
|
25
|
+
"prd",
|
|
26
|
+
"architectural decision",
|
|
27
|
+
"system design",
|
|
28
|
+
"subagent",
|
|
29
|
+
"sub-agent",
|
|
30
|
+
"multi-agent",
|
|
31
|
+
"fable",
|
|
32
|
+
"fable-mode",
|
|
33
|
+
"stage discipline",
|
|
34
|
+
"multi-stage",
|
|
35
|
+
"named workers",
|
|
36
|
+
"per-stage verification",
|
|
37
|
+
"架構",
|
|
38
|
+
"重構",
|
|
39
|
+
"深度重構",
|
|
40
|
+
"重寫",
|
|
41
|
+
"實作新功能",
|
|
42
|
+
"開發新功能",
|
|
43
|
+
"建立新功能",
|
|
44
|
+
"新增功能",
|
|
45
|
+
"建構新功能",
|
|
46
|
+
"新功能實作",
|
|
47
|
+
"新功能開發",
|
|
48
|
+
"新功能",
|
|
49
|
+
"深度分析",
|
|
50
|
+
"系統分析",
|
|
51
|
+
"架構分析",
|
|
52
|
+
"全盤分析",
|
|
53
|
+
"影響評估",
|
|
54
|
+
"深度評估",
|
|
55
|
+
"分析架構",
|
|
56
|
+
"調整 adr",
|
|
57
|
+
"修改 adr",
|
|
58
|
+
"新增 adr",
|
|
59
|
+
"架構決策",
|
|
60
|
+
"系統設計",
|
|
61
|
+
"設計文件",
|
|
62
|
+
"代碼重構",
|
|
63
|
+
"程式碼重構",
|
|
64
|
+
"架構重構",
|
|
65
|
+
"結構調整",
|
|
66
|
+
"元件解耦",
|
|
67
|
+
"模組解耦",
|
|
68
|
+
"子代理",
|
|
69
|
+
"多 agent",
|
|
70
|
+
"多代理",
|
|
71
|
+
"角色分工",
|
|
72
|
+
"系統架構師",
|
|
73
|
+
"挑戰者",
|
|
74
|
+
"verifier",
|
|
75
|
+
"qa 驗證",
|
|
76
|
+
"prd 驗證",
|
|
77
|
+
"球員兼裁判"
|
|
78
|
+
],
|
|
79
|
+
"tier2": [
|
|
80
|
+
"test",
|
|
81
|
+
"api",
|
|
82
|
+
"integration",
|
|
83
|
+
"endpoint",
|
|
84
|
+
"bugfix",
|
|
85
|
+
"bug fix",
|
|
86
|
+
"unit test",
|
|
87
|
+
"測試",
|
|
88
|
+
"整合",
|
|
89
|
+
"端點",
|
|
90
|
+
"介面",
|
|
91
|
+
"單測",
|
|
92
|
+
"除錯",
|
|
93
|
+
"修復",
|
|
94
|
+
"fix bug",
|
|
95
|
+
"修復 bug",
|
|
96
|
+
"修正錯誤",
|
|
97
|
+
"解決問題",
|
|
98
|
+
"優化",
|
|
99
|
+
"optimize",
|
|
100
|
+
"improve",
|
|
101
|
+
"改善",
|
|
102
|
+
"升級",
|
|
103
|
+
"upgrade",
|
|
104
|
+
"更新",
|
|
105
|
+
"update",
|
|
106
|
+
"修改",
|
|
107
|
+
"modify",
|
|
108
|
+
"調整",
|
|
109
|
+
"adjust",
|
|
110
|
+
"feature"
|
|
111
|
+
]
|
|
112
|
+
},
|
|
113
|
+
"guideGroups": [
|
|
114
|
+
{
|
|
115
|
+
"id": "tdd-test",
|
|
116
|
+
"keywords": [
|
|
117
|
+
"tdd", "test", "mock", "stub", "api", "endpoint", "integration", "debugging", "bug", "error", "fix", "lsp", "實作 lsp",
|
|
118
|
+
"測試", "單測", "模組測試", "端點", "介面", "除錯", "錯誤", "修復", "實作", "測試用例"
|
|
119
|
+
],
|
|
120
|
+
"guides": [
|
|
121
|
+
"- tdd/SKILL.md (Test-Driven Development Red-Green-Refactor loop)",
|
|
122
|
+
"- tdd/guides/mocking.md (Mocking principles & isolation)",
|
|
123
|
+
"- tdd/guides/interface-design.md (Interface and contract design)",
|
|
124
|
+
"- tdd/guides/deep-modules.md (Testing deep nested modules)",
|
|
125
|
+
"- tdd/guides/tests.md (General test architecture)",
|
|
126
|
+
"- environment-detection/SKILL.md (Detect active shell/OS & preflight syntax before running commands)",
|
|
127
|
+
"- verify-before-claim/SKILL.md (Fact-audit discipline: verify external claims and unmeasured estimates before asserting them)",
|
|
128
|
+
"- verification-loop/SKILL.md (Pre-PR verification gate: build, types, lint, tests, security scan)"
|
|
129
|
+
]
|
|
130
|
+
},
|
|
131
|
+
{
|
|
132
|
+
"id": "git-commit",
|
|
133
|
+
"keywords": [
|
|
134
|
+
"commit", "git", "save", "submodule", "pr", "pull request", "release", "quality gate", "ready to ship",
|
|
135
|
+
"commit message", "commit lint", "commit-lint", "angular-style", "提交", "版控", "合併", "分支", "發行", "規範", "提交訊息"
|
|
136
|
+
],
|
|
137
|
+
"guides": [
|
|
138
|
+
"- git-commit/SKILL.md (Angular-style commit convention generation)",
|
|
139
|
+
"- git-commit/guides/ANGULAR_STYLE.md (Commit conventions reference)",
|
|
140
|
+
"- git-commit/guides/COMMIT_GENERATION.md (Commit generation patterns)",
|
|
141
|
+
"- git-commit/guides/LANGUAGE_DETECTION.md (Multi-language commits)",
|
|
142
|
+
"- git-commit/guides/MAIN_REPO.md (Commits in main repositories)",
|
|
143
|
+
"- git-commit/guides/SUBMODULES.md (Submodule commit handling)",
|
|
144
|
+
"- rewrite-commits/SKILL.md (Rewrite commit history safely to Angular style)",
|
|
145
|
+
"- using-git-worktrees/SKILL.md (Git Worktrees isolation for feature work, avoids workspace pollution)",
|
|
146
|
+
"- verification-loop/SKILL.md (Pre-PR verification gate: build, types, lint, tests, security scan)"
|
|
147
|
+
]
|
|
148
|
+
},
|
|
149
|
+
{
|
|
150
|
+
"id": "docs",
|
|
151
|
+
"keywords": ["doc", "readme", "agents.md", "claude.md", "說明文件", "說明書", "專案說明", "文件記錄", "文件"],
|
|
152
|
+
"guides": [
|
|
153
|
+
"- repo-docs/SKILL.md (Automated README & AGENTS.md generation from project scans)",
|
|
154
|
+
"- repo-docs/templates/readme-template.md (Standard README template)",
|
|
155
|
+
"- repo-docs/templates/product-readme-template.md (Product README template)",
|
|
156
|
+
"- repo-docs/templates/agents-template.md (Agent onboarding instructions template)"
|
|
157
|
+
]
|
|
158
|
+
},
|
|
159
|
+
{
|
|
160
|
+
"id": "agent",
|
|
161
|
+
"keywords": [
|
|
162
|
+
"agent", "multi-agent", "launcher", "subagent", "sub-agent", "subAgent", "delegate", "orchestrate", "specialist", "stage discipline", "context discipline", "per-stage", "named workers", "stage contract", "stage contracts",
|
|
163
|
+
"workspace scaffolding", "scaffold workspace", "division of labor", "fable", "fable mode", "fable-mode", "fable-discipline", "fable-haiku", "fable-sonnet", "fable-opus", "macro", "orchestrator",
|
|
164
|
+
"harness-everything", "harness system", "harness-skills", "using-superpowers",
|
|
165
|
+
"代理", "多代理", "啟動器", "子代理", "委派", "指派", "分工", "協調", "任務分配", "規劃", "智慧體", "角色"
|
|
166
|
+
],
|
|
167
|
+
"guides": [
|
|
168
|
+
"- fable-mode/SKILL.md (v3 staged execution, model selection, delegation, and verification)",
|
|
169
|
+
"- fable-discipline/SKILL.md (Shadow guard preventing context bloat and managing token limits)",
|
|
170
|
+
"- multi-agent-workspace/SKILL.md (Verified workspace scaffolding and bounded agency specialist selection)",
|
|
171
|
+
"- repo-docs/templates/agents-template.md (Agent onboarding instructions template)",
|
|
172
|
+
"- grill-with-docs/SKILL.md (Decision tracking, Glossary & ADR-driven design grilling)"
|
|
173
|
+
]
|
|
174
|
+
},
|
|
175
|
+
{
|
|
176
|
+
"id": "fable-model-mode",
|
|
177
|
+
"regex": "\\bfable(?:[- ]mode)?\\s+(?:on|with)\\s+(?:haiku|sonnet|sonnect|opus)\\b|\\bfable-(?:haiku|sonnet|opus)\\b",
|
|
178
|
+
"guides": [
|
|
179
|
+
"- fable-mode/model-matrix.json (Machine-readable Haiku/Sonnet/Opus roles and fallback policies)",
|
|
180
|
+
"- fable-mode/scripts/model-selector.js (Deterministic model selection and execution audit record)",
|
|
181
|
+
"- fable-mode/fable-haiku/SKILL.md (Haiku mode entrypoint)",
|
|
182
|
+
"- fable-mode/fable-sonnet/SKILL.md (Sonnet mode entrypoint)",
|
|
183
|
+
"- fable-mode/fable-opus/SKILL.md (Opus mode entrypoint)"
|
|
184
|
+
]
|
|
185
|
+
},
|
|
186
|
+
{
|
|
187
|
+
"id": "arch-refactor",
|
|
188
|
+
"keywords": [
|
|
189
|
+
"refactor", "architecture", "structure", "couple", "seam", "adr", "design plan", "decision", "grill", "deepening", "deep module", "decoupling",
|
|
190
|
+
"srp", "single responsibility", "split object", "split class", "split function", "extract class", "extract method", "god class", "monolithic file", "decouple component",
|
|
191
|
+
"grill-me", "grill-with-docs", "重構", "架構", "結構", "解耦", "設計", "決策", "辯論", "質疑", "深模組化", "深模組", "重寫", "解耦設計", "結構優化",
|
|
192
|
+
"單一職責", "拆分物件", "拆分類別", "拆分函數", "拆分功能", "提取物件", "提取介面", "職責分離", "物件拆分", "檔案過大", "函式拆分"
|
|
193
|
+
],
|
|
194
|
+
"guides": [
|
|
195
|
+
"- improve-codebase-architecture/SKILL.md (Codebase deepening, SRP object splitting & decoupling)",
|
|
196
|
+
"- improve-codebase-architecture/guides/DEEPENING.md (Deepening opportunities & depth rules)",
|
|
197
|
+
"- improve-codebase-architecture/guides/INTERFACE-DESIGN.md (Interface design principles)",
|
|
198
|
+
"- improve-codebase-architecture/guides/LANGUAGE.md (Language-specific patterns)",
|
|
199
|
+
"- improve-codebase-architecture/guides/HTML-REPORT.md (Mermaid dependency report generation)",
|
|
200
|
+
"- grill-with-docs/SKILL.md (Decision tracking, Glossary & ADR-driven design grilling)",
|
|
201
|
+
"- grill-me/SKILL.md (Challenger interview to stress-test your architecture plan)",
|
|
202
|
+
"- fable-mode/SKILL.md (v3 staged execution, model selection, delegation, and verification)"
|
|
203
|
+
]
|
|
204
|
+
},
|
|
205
|
+
{
|
|
206
|
+
"id": "spec",
|
|
207
|
+
"keywords": [
|
|
208
|
+
"spec", "prd", "product requirement", "user stories", "problem statement", "write up the requirements",
|
|
209
|
+
"turn this into a spec", "cli reference", "cli help", "api reference", "design doc", "dev doc",
|
|
210
|
+
"file format", "schema doc", "document this schema", "document the endpoint", "document the command",
|
|
211
|
+
"規格", "規格書", "需求文件", "產品需求", "用戶故事", "需求規格", "設計文件", "檔案格式", "命令列說明"
|
|
212
|
+
],
|
|
213
|
+
"guides": [
|
|
214
|
+
"- to-spec/SKILL.md (Synthesize the conversation into whichever doc shape fits - feature spec, CLI/API reference, schema doc, or dev doc - and publish it. Explicit-invoke, advisory only, never a gate; run grill-with-docs/grill-me first if decisions aren't settled yet)"
|
|
215
|
+
]
|
|
216
|
+
},
|
|
217
|
+
{
|
|
218
|
+
"id": "tickets",
|
|
219
|
+
"keywords": [
|
|
220
|
+
"break this into tickets", "break into tickets", "vertical slice", "tracer bullet", "blocking edges",
|
|
221
|
+
"cut tickets", "ticket breakdown", "split into tickets", "implementation tickets", "publish tickets", "approved spec",
|
|
222
|
+
"拆票", "拆解任務", "拆成票", "任務拆解", "垂直切分", "阻塞關係"
|
|
223
|
+
],
|
|
224
|
+
"guides": [
|
|
225
|
+
"- to-tickets/SKILL.md (Break a to-spec feature spec, plan, or conversation into tracer-bullet tickets with blocking edges. Explicit-invoke, reuses to-spec's own project-docs gate, never a second setup interview)"
|
|
226
|
+
]
|
|
227
|
+
},
|
|
228
|
+
{
|
|
229
|
+
"id": "env",
|
|
230
|
+
"keywords": [
|
|
231
|
+
"shell", "terminal", "powershell", "bash", "cmd", "git bash", "git-bash", "env", "preflight", "command", "run", "worktree", "git worktree",
|
|
232
|
+
"終端機", "命令", "環境", "指令", "執行", "環境偵測", "環境認知", "os", "作業系統", "工作區"
|
|
233
|
+
],
|
|
234
|
+
"guides": [
|
|
235
|
+
"- environment-detection/SKILL.md (Detect active shell/OS & preflight syntax before running commands)",
|
|
236
|
+
"- using-git-worktrees/SKILL.md (Git Worktrees isolation for feature work, avoids workspace pollution)"
|
|
237
|
+
]
|
|
238
|
+
},
|
|
239
|
+
{
|
|
240
|
+
"id": "verify",
|
|
241
|
+
"keywords": [
|
|
242
|
+
"verify", "fact", "audit", "estimate", "benchmark", "performance", "speed", "scale", "token", "security", "secret", "owasp", "stride", "leak", "vulnerability", "score", "scorecard", "session log", "execution log", "agent performance",
|
|
243
|
+
"驗證", "查證", "核對", "效能", "評測", "性能", "估計", "下一步建議", "測試", "正確度", "得分", "自我檢討", "token 消耗", "安全", "資安", "金鑰", "洩漏", "漏洞", "弱點", "安全審查"
|
|
244
|
+
],
|
|
245
|
+
"guides": [
|
|
246
|
+
"- security-review/SKILL.md (Security review, STRIDE threat modeling & secrets/SQLi audit)",
|
|
247
|
+
"- security-review/guides/STRIDE-THREAT-MODEL.md (STRIDE threat modeling & abuse case guidelines)",
|
|
248
|
+
"- security-review/guides/OWASP-PATTERNS.md (OWASP Top 10 hardening patterns)",
|
|
249
|
+
"- verify-before-claim/SKILL.md (Fact-audit discipline: verify external claims and unmeasured estimates before asserting them)",
|
|
250
|
+
"- verification-loop/SKILL.md (Pre-PR verification gate: build, types, lint, tests, security scan)",
|
|
251
|
+
"- eval-harness/SKILL.md (AI performance evaluation metrics & anti-loop metrics)"
|
|
252
|
+
]
|
|
253
|
+
},
|
|
254
|
+
{
|
|
255
|
+
"id": "cognitive-os",
|
|
256
|
+
"keywords": [
|
|
257
|
+
"cognitive os", "cognitive loop", "install cognitive", "evidence assertion", "state handoff"
|
|
258
|
+
],
|
|
259
|
+
"guides": [
|
|
260
|
+
"- install-cognitive-os/SKILL.md (Foundational Discover > Think > Try > Summarize > Record loop)"
|
|
261
|
+
]
|
|
262
|
+
},
|
|
263
|
+
{
|
|
264
|
+
"id": "skill-creator",
|
|
265
|
+
"keywords": [
|
|
266
|
+
"skill", "skill.md", "new skill", "write a skill", "self-evolve", "self-evolution", "generated", "manifest.json", "installer.js",
|
|
267
|
+
"自我進化", "自動產生", "動態索引", "註冊表", "進化"
|
|
268
|
+
],
|
|
269
|
+
"guides": [
|
|
270
|
+
"- skill-creator/SKILL.md (Authoring, auditing, and testing workflow for SKILL.md files, incl. dynamic skill generation)",
|
|
271
|
+
"- skill-style/SKILL.md (Terse Skill Contract format spec that skill-creator builds on)",
|
|
272
|
+
"- self-evolve/SKILL.md (Self-evolution & memory compression loop)"
|
|
273
|
+
]
|
|
274
|
+
},
|
|
275
|
+
{
|
|
276
|
+
"id": "find-skills",
|
|
277
|
+
"keywords": [
|
|
278
|
+
"find a skill", "is there a skill", "search for a skill", "install a skill", "find skills",
|
|
279
|
+
"skills.sh", "npx skills",
|
|
280
|
+
"找技能", "有沒有技能", "找找看有沒有", "安裝技能", "搜尋技能"
|
|
281
|
+
],
|
|
282
|
+
"guides": [
|
|
283
|
+
"- find-skills/SKILL.md (Check static/generated skill coverage and \"npx skills list\" for anything already fetched first, then search skills.sh/npx skills and, only with explicit approval, install via npx skills add)"
|
|
284
|
+
]
|
|
285
|
+
},
|
|
286
|
+
{
|
|
287
|
+
"id": "security",
|
|
288
|
+
"keywords": [
|
|
289
|
+
"security", "auth", "login", "vulnerability", "leak", "secrets", "password", "api key",
|
|
290
|
+
"安全性", "驗證", "登入", "漏洞", "洩漏", "機密", "金鑰", "防護"
|
|
291
|
+
],
|
|
292
|
+
"guides": [
|
|
293
|
+
"- security-review/SKILL.md (Comprehensive security and vulnerability checklist)"
|
|
294
|
+
]
|
|
295
|
+
},
|
|
296
|
+
{
|
|
297
|
+
"id": "stuck",
|
|
298
|
+
"keywords": [
|
|
299
|
+
"stuck", "fail", "loop", "error repeats", "infinite loop", "cease fire", "rule-of-3", "rule of 3",
|
|
300
|
+
"卡住", "失敗", "重複", "報錯", "死循環", "無限循環", "停下來", "退一步", "卡"
|
|
301
|
+
],
|
|
302
|
+
"guides": [
|
|
303
|
+
"- zoom-out/SKILL.md (Reflect-first circuit breaker to rebuild full picture when stuck)"
|
|
304
|
+
]
|
|
305
|
+
}
|
|
306
|
+
],
|
|
307
|
+
"factAudit": {
|
|
308
|
+
"externalClaim": [
|
|
309
|
+
"does it support", "does support", "how does", "what's the default", "what is the default",
|
|
310
|
+
"exit code", "schema", "sdk", " api", "hook", "payload", "pricing", "rate limit",
|
|
311
|
+
"latest version", "current version", "deprecated", "breaking change", "changelog",
|
|
312
|
+
"spec", "documentation", "according to", "endpoint", "config option", "flag"
|
|
313
|
+
],
|
|
314
|
+
"estimate": [
|
|
315
|
+
"benchmark", "performance", "how fast", "how long will", "how much memory",
|
|
316
|
+
"how many requests", "estimate", "roughly how", "big o", "complexity",
|
|
317
|
+
"will this scale", "throughput", "latency"
|
|
318
|
+
]
|
|
319
|
+
}
|
|
320
|
+
}
|
|
@@ -0,0 +1,250 @@
|
|
|
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
|
+
const { getWorkspaceRoot, isHarnessRepo } = require('../../scripts/lib/workspace');
|
|
27
|
+
|
|
28
|
+
const MARKER = 'Harness OS Guidance (Advisory)';
|
|
29
|
+
const HOOK_ID = 'harness:pre:bootstrap';
|
|
30
|
+
|
|
31
|
+
function fileContains(filePath, needle) {
|
|
32
|
+
try {
|
|
33
|
+
return fs.readFileSync(filePath, 'utf8').includes(needle);
|
|
34
|
+
} catch (err) {
|
|
35
|
+
return false;
|
|
36
|
+
}
|
|
37
|
+
}
|
|
38
|
+
|
|
39
|
+
// "Missing" and "present but not ours" are different states and lead to
|
|
40
|
+
// different user actions. Reporting a hand-written AGENTS.md as MISSING is
|
|
41
|
+
// what made this audit untrustworthy in its own repo (issue #40).
|
|
42
|
+
function auditMarkerFile(filePath) {
|
|
43
|
+
if (!fs.existsSync(filePath)) return { ok: false, detail: 'not created' };
|
|
44
|
+
if (fileContains(filePath, MARKER)) return { ok: true };
|
|
45
|
+
return { ok: false, detail: 'present, no Harness advisory block' };
|
|
46
|
+
}
|
|
47
|
+
|
|
48
|
+
// Presence of the hook id alone is not enough: the skills repo may have been
|
|
49
|
+
// MOVED since install (it already happened once - harness-everything to
|
|
50
|
+
// miya.daniel/skills), leaving settings.json full of absolute paths to dead
|
|
51
|
+
// scripts while still "containing" the id. Verify every harness hook command
|
|
52
|
+
// points at a script that actually exists on disk.
|
|
53
|
+
function auditClaudeHooks(workspaceRoot) {
|
|
54
|
+
const settingsPath = path.join(workspaceRoot, '.claude', 'settings.json');
|
|
55
|
+
let settings;
|
|
56
|
+
try {
|
|
57
|
+
settings = JSON.parse(fs.readFileSync(settingsPath, 'utf8'));
|
|
58
|
+
} catch (err) {
|
|
59
|
+
return { ok: false, detail: 'not installed' };
|
|
60
|
+
}
|
|
61
|
+
const commands = [];
|
|
62
|
+
for (const list of Object.values(settings.hooks || {})) {
|
|
63
|
+
for (const item of list) {
|
|
64
|
+
if (typeof item.id === 'string' && item.id.startsWith('harness:')) {
|
|
65
|
+
(item.hooks || []).forEach(h => {
|
|
66
|
+
if (h.type === 'command' && h.command) commands.push(h.command);
|
|
67
|
+
});
|
|
68
|
+
}
|
|
69
|
+
}
|
|
70
|
+
}
|
|
71
|
+
if (commands.length === 0) return { ok: false, detail: 'not installed' };
|
|
72
|
+
for (const cmd of commands) {
|
|
73
|
+
// Our hook commands are exactly `node <script>` with no extra args, in
|
|
74
|
+
// one of three historical quoting styles; stripping the prefix and all
|
|
75
|
+
// quotes yields the script path in every one of them.
|
|
76
|
+
const scriptPath = cmd.replace(/^node\s+/, '').replace(/"/g, '').trim();
|
|
77
|
+
if (!fs.existsSync(scriptPath)) {
|
|
78
|
+
return { ok: false, detail: `stale script path: ${scriptPath}` };
|
|
79
|
+
}
|
|
80
|
+
}
|
|
81
|
+
return { ok: true };
|
|
82
|
+
}
|
|
83
|
+
|
|
84
|
+
function auditWorkspace(workspaceRoot) {
|
|
85
|
+
// 1. 環境變數偵測 (Environment Detection)
|
|
86
|
+
// NOTE: TERM_PROGRAM=vscode / VSCODE_PID are deliberately NOT treated as
|
|
87
|
+
// Copilot signals - Claude Code's integrated terminal reports vscode too,
|
|
88
|
+
// and treating it as Copilot made self-heal backfill .github/ artifacts
|
|
89
|
+
// (and copy every global skill into the project) for Claude-driven repos.
|
|
90
|
+
// Only explicit Copilot runtime signals count here.
|
|
91
|
+
const isClaudeEnv = process.env.CLAUDECODE === '1' || process.env.CLAUDE_CODE === 'true' || process.env.CLAUDE === '1' || false;
|
|
92
|
+
const isCursorEnv = process.env.TERM_PROGRAM === 'cursor' || process.env.CURSOR_SANDBOX !== undefined || false;
|
|
93
|
+
const isCopilotEnv = process.env.GITHUB_COPILOT_CHAT === 'true' || process.env.COPILOT_AGENT === '1' || (process.env.AI_AGENT?.includes('copilot') ?? false);
|
|
94
|
+
|
|
95
|
+
// 2. 專案現存檔案偵測 (Workspace File Detection)
|
|
96
|
+
const hasClaudeFiles = fs.existsSync(path.join(workspaceRoot, '.claude'));
|
|
97
|
+
const hasCursorFiles = fs.existsSync(path.join(workspaceRoot, '.cursorrules')) || fs.existsSync(path.join(workspaceRoot, '.cursor'));
|
|
98
|
+
const hasCopilotFiles = fs.existsSync(path.join(workspaceRoot, '.github', 'copilot-instructions.md'));
|
|
99
|
+
const hasCodexFiles = fs.existsSync(path.join(workspaceRoot, 'AGENTS.md'));
|
|
100
|
+
const hasContinueFiles = fs.existsSync(path.join(workspaceRoot, '.continue'));
|
|
101
|
+
const hasHermesFiles = fs.existsSync(path.join(workspaceRoot, '.hermes.md'));
|
|
102
|
+
|
|
103
|
+
// 3. 決定哪些平台是「活躍」的(已初始化或目前正在使用該環境)
|
|
104
|
+
const activePlatforms = {
|
|
105
|
+
claude: isClaudeEnv || hasClaudeFiles,
|
|
106
|
+
cursor: isCursorEnv || hasCursorFiles,
|
|
107
|
+
copilot: (!isClaudeEnv && !isCursorEnv && isCopilotEnv) || hasCopilotFiles,
|
|
108
|
+
codex: hasCodexFiles,
|
|
109
|
+
continue: hasContinueFiles,
|
|
110
|
+
hermes: hasHermesFiles
|
|
111
|
+
};
|
|
112
|
+
|
|
113
|
+
// 如果偵測完,沒有任何活躍平台(全新專案第一次執行 self-heal),只在有明確
|
|
114
|
+
// 環境訊號時提供預設平台;否則不修復 - 寧可不做也不要猜測並汙染工作區。
|
|
115
|
+
const hasAnyActive = Object.values(activePlatforms).some(v => v);
|
|
116
|
+
if (!hasAnyActive) {
|
|
117
|
+
if (isClaudeEnv) {
|
|
118
|
+
activePlatforms.claude = true;
|
|
119
|
+
} else if (isCursorEnv) {
|
|
120
|
+
activePlatforms.cursor = true;
|
|
121
|
+
} else if (isCopilotEnv) {
|
|
122
|
+
activePlatforms.copilot = true;
|
|
123
|
+
}
|
|
124
|
+
}
|
|
125
|
+
|
|
126
|
+
const checks = [];
|
|
127
|
+
|
|
128
|
+
if (activePlatforms.claude) {
|
|
129
|
+
const claudeHooks = auditClaudeHooks(workspaceRoot);
|
|
130
|
+
checks.push({
|
|
131
|
+
label: 'Claude Code hooks (.claude/settings.json)' + (claudeHooks.detail ? ` - ${claudeHooks.detail}` : ''),
|
|
132
|
+
ok: claudeHooks.ok,
|
|
133
|
+
platform: 'claude'
|
|
134
|
+
});
|
|
135
|
+
}
|
|
136
|
+
|
|
137
|
+
if (activePlatforms.cursor) {
|
|
138
|
+
const audit = auditMarkerFile(path.join(workspaceRoot, '.cursorrules'));
|
|
139
|
+
checks.push({
|
|
140
|
+
label: 'Cursor rules (.cursorrules)' + (audit.detail ? ` - ${audit.detail}` : ''),
|
|
141
|
+
ok: audit.ok,
|
|
142
|
+
platform: 'cursor'
|
|
143
|
+
});
|
|
144
|
+
}
|
|
145
|
+
|
|
146
|
+
if (activePlatforms.copilot) {
|
|
147
|
+
const audit = auditMarkerFile(path.join(workspaceRoot, '.github', 'copilot-instructions.md'));
|
|
148
|
+
checks.push({
|
|
149
|
+
label: 'Copilot instructions (.github/copilot-instructions.md)' + (audit.detail ? ` - ${audit.detail}` : ''),
|
|
150
|
+
ok: audit.ok,
|
|
151
|
+
platform: 'copilot'
|
|
152
|
+
});
|
|
153
|
+
}
|
|
154
|
+
|
|
155
|
+
if (activePlatforms.codex) {
|
|
156
|
+
const audit = auditMarkerFile(path.join(workspaceRoot, 'AGENTS.md'));
|
|
157
|
+
checks.push({
|
|
158
|
+
label: 'Codex instructions (AGENTS.md)' + (audit.detail ? ` - ${audit.detail}` : ''),
|
|
159
|
+
ok: audit.ok,
|
|
160
|
+
platform: 'codex'
|
|
161
|
+
});
|
|
162
|
+
}
|
|
163
|
+
|
|
164
|
+
if (activePlatforms.continue) {
|
|
165
|
+
const audit = auditMarkerFile(path.join(workspaceRoot, '.continue', 'rules', 'harness.md'));
|
|
166
|
+
checks.push({
|
|
167
|
+
label: 'Continue.dev rules (.continue/rules/harness.md)' + (audit.detail ? ` - ${audit.detail}` : ''),
|
|
168
|
+
ok: audit.ok,
|
|
169
|
+
platform: 'continue'
|
|
170
|
+
});
|
|
171
|
+
}
|
|
172
|
+
|
|
173
|
+
if (activePlatforms.hermes) {
|
|
174
|
+
const audit = auditMarkerFile(path.join(workspaceRoot, '.hermes.md'));
|
|
175
|
+
checks.push({
|
|
176
|
+
label: 'Hermes Agent instructions (.hermes.md)' + (audit.detail ? ` - ${audit.detail}` : ''),
|
|
177
|
+
ok: audit.ok,
|
|
178
|
+
platform: 'hermes'
|
|
179
|
+
});
|
|
180
|
+
}
|
|
181
|
+
|
|
182
|
+
return checks;
|
|
183
|
+
}
|
|
184
|
+
|
|
185
|
+
function printAudit(checks) {
|
|
186
|
+
console.log('[Harness Self-Heal Audit]');
|
|
187
|
+
checks.forEach(c => {
|
|
188
|
+
console.log(` ${c.ok ? 'OK ' : 'MISSING'} ${c.label}`);
|
|
189
|
+
});
|
|
190
|
+
}
|
|
191
|
+
|
|
192
|
+
function main() {
|
|
193
|
+
const checkOnly = process.argv.includes('--check');
|
|
194
|
+
const forceSelf = process.argv.includes('--force-self');
|
|
195
|
+
|
|
196
|
+
const workspaceRoot = getWorkspaceRoot();
|
|
197
|
+
const harnessSourceDir = path.resolve(__dirname, '..', '..');
|
|
198
|
+
const installerPath = path.join(harnessSourceDir, 'scripts', 'installer.js');
|
|
199
|
+
|
|
200
|
+
console.log(`Workspace: ${workspaceRoot}`);
|
|
201
|
+
const checks = auditWorkspace(workspaceRoot);
|
|
202
|
+
printAudit(checks);
|
|
203
|
+
|
|
204
|
+
const missing = checks.filter(c => !c.ok);
|
|
205
|
+
if (missing.length === 0) {
|
|
206
|
+
console.log('\nAll active integration touchpoints present. Nothing to repair.');
|
|
207
|
+
return;
|
|
208
|
+
}
|
|
209
|
+
|
|
210
|
+
if (checkOnly) {
|
|
211
|
+
console.log(`\n${missing.length} active touchpoint(s) missing. Run without --check to repair:`);
|
|
212
|
+
console.log(` node "${path.join(__dirname, 'self-heal.js')}"`);
|
|
213
|
+
return;
|
|
214
|
+
}
|
|
215
|
+
|
|
216
|
+
// Identity first, path second: an npx/global install has a different
|
|
217
|
+
// harnessSourceDir than the checkout it is auditing (issue #40).
|
|
218
|
+
const isSelf = isHarnessRepo(workspaceRoot)
|
|
219
|
+
|| path.resolve(workspaceRoot) === path.resolve(harnessSourceDir);
|
|
220
|
+
if (isSelf && !forceSelf) {
|
|
221
|
+
console.log('\nWorkspace IS the harness-everything repo itself - skipping repair to avoid');
|
|
222
|
+
console.log('polluting it with generated config files. Pass --force-self to override.');
|
|
223
|
+
return;
|
|
224
|
+
}
|
|
225
|
+
|
|
226
|
+
if (!fs.existsSync(installerPath)) {
|
|
227
|
+
console.error(`\nCannot repair: installer not found at ${installerPath}`);
|
|
228
|
+
process.exit(1);
|
|
229
|
+
}
|
|
230
|
+
|
|
231
|
+
console.log(`\nRepairing ${missing.length} missing active touchpoint(s) via installer...\n`);
|
|
232
|
+
|
|
233
|
+
// 構造參數只針對當前環境缺少的平台調用安裝器。--no-skills 讓修復只回補
|
|
234
|
+
// 該平台的整合觸點(advisory 檔案 / hooks 設定),絕不把全域 skills 複製進
|
|
235
|
+
// 專案 - skills 的安裝與否是使用者明確的選擇,不是 self-heal 的職權。
|
|
236
|
+
const activeFlags = missing.map(c => `--${c.platform}`).join(' ');
|
|
237
|
+
execSync(`node "${installerPath}" ${activeFlags} --no-skills --yes`, { cwd: workspaceRoot, stdio: 'inherit' });
|
|
238
|
+
|
|
239
|
+
const after = auditWorkspace(workspaceRoot);
|
|
240
|
+
console.log('');
|
|
241
|
+
printAudit(after);
|
|
242
|
+
const stillMissing = after.filter(c => !c.ok);
|
|
243
|
+
if (stillMissing.length > 0) {
|
|
244
|
+
console.error(`\nSelf-heal incomplete: ${stillMissing.length} touchpoint(s) still missing.`);
|
|
245
|
+
process.exit(1);
|
|
246
|
+
}
|
|
247
|
+
console.log('\nSelf-heal complete. Active platforms are now covered.');
|
|
248
|
+
}
|
|
249
|
+
|
|
250
|
+
main();
|