@lannguyensi/harness 0.64.0 → 1.0.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +64 -0
- package/README.md +46 -42
- package/dist/cli/add/index.js +17 -21
- package/dist/cli/add/index.js.map +1 -1
- package/dist/cli/adopt/derive.d.ts +2 -2
- package/dist/cli/adopt/derive.js +2 -19
- package/dist/cli/adopt/derive.js.map +1 -1
- package/dist/cli/adopt/index.d.ts +1 -1
- package/dist/cli/adopt/index.js +1 -12
- package/dist/cli/adopt/index.js.map +1 -1
- package/dist/cli/apply/apply.d.ts +20 -35
- package/dist/cli/apply/apply.js +61 -136
- package/dist/cli/apply/apply.js.map +1 -1
- package/dist/cli/apply/generate-codex-config.js +10 -58
- package/dist/cli/apply/generate-codex-config.js.map +1 -1
- package/dist/cli/apply/generate-memory-index.js +1 -2
- package/dist/cli/apply/generate-memory-index.js.map +1 -1
- package/dist/cli/apply/generate-opencode-config.d.ts +2 -10
- package/dist/cli/apply/generate-opencode-config.js +74 -113
- package/dist/cli/apply/generate-opencode-config.js.map +1 -1
- package/dist/cli/apply/generate-settings.d.ts +11 -64
- package/dist/cli/apply/generate-settings.js +27 -132
- package/dist/cli/apply/generate-settings.js.map +1 -1
- package/dist/cli/apply/index.d.ts +1 -1
- package/dist/cli/apply/index.js +1 -1
- package/dist/cli/apply/index.js.map +1 -1
- package/dist/cli/apply/install-codex-config.d.ts +153 -1
- package/dist/cli/apply/install-codex-config.js +445 -70
- package/dist/cli/apply/install-codex-config.js.map +1 -1
- package/dist/cli/apply/next-steps.d.ts +7 -0
- package/dist/cli/apply/next-steps.js +13 -1
- package/dist/cli/apply/next-steps.js.map +1 -1
- package/dist/cli/bounded-stdin.d.ts +0 -23
- package/dist/cli/bounded-stdin.js +2 -49
- package/dist/cli/bounded-stdin.js.map +1 -1
- package/dist/cli/describe.d.ts +1 -1
- package/dist/cli/describe.js +0 -3
- package/dist/cli/describe.js.map +1 -1
- package/dist/cli/diff/engine.d.ts +0 -11
- package/dist/cli/diff/engine.js +1 -17
- package/dist/cli/diff/engine.js.map +1 -1
- package/dist/cli/diff/index.js +14 -25
- package/dist/cli/diff/index.js.map +1 -1
- package/dist/cli/doctor/claude-mcp.d.ts +4 -19
- package/dist/cli/doctor/claude-mcp.js +11 -22
- package/dist/cli/doctor/claude-mcp.js.map +1 -1
- package/dist/cli/doctor/codex.d.ts +12 -14
- package/dist/cli/doctor/codex.js +31 -144
- package/dist/cli/doctor/codex.js.map +1 -1
- package/dist/cli/doctor/format.js +23 -345
- package/dist/cli/doctor/format.js.map +1 -1
- package/dist/cli/doctor/hook-liveness.d.ts +56 -0
- package/dist/cli/doctor/hook-liveness.js +455 -0
- package/dist/cli/doctor/hook-liveness.js.map +1 -0
- package/dist/cli/doctor/index.d.ts +13 -87
- package/dist/cli/doctor/index.js +57 -713
- package/dist/cli/doctor/index.js.map +1 -1
- package/dist/cli/doctor/opencode.d.ts +2 -1
- package/dist/cli/doctor/opencode.js.map +1 -1
- package/dist/cli/doctor/types.d.ts +21 -387
- package/dist/cli/doctor/types.js.map +1 -1
- package/dist/cli/drain-stdio.d.ts +31 -0
- package/dist/cli/drain-stdio.js +76 -0
- package/dist/cli/drain-stdio.js.map +1 -0
- package/dist/cli/export.d.ts +3 -1
- package/dist/cli/export.js +7 -16
- package/dist/cli/export.js.map +1 -1
- package/dist/cli/gate/codex-disable.d.ts +29 -0
- package/dist/cli/gate/codex-disable.js +195 -0
- package/dist/cli/gate/codex-disable.js.map +1 -0
- package/dist/cli/gate/codex-enable.d.ts +41 -0
- package/dist/cli/gate/codex-enable.js +127 -0
- package/dist/cli/gate/codex-enable.js.map +1 -0
- package/dist/cli/gate/codex-snapshot.d.ts +208 -0
- package/dist/cli/gate/codex-snapshot.js +402 -0
- package/dist/cli/gate/codex-snapshot.js.map +1 -0
- package/dist/cli/gate/disable.d.ts +9 -0
- package/dist/cli/gate/disable.js +263 -28
- package/dist/cli/gate/disable.js.map +1 -1
- package/dist/cli/gate/enable.d.ts +26 -6
- package/dist/cli/gate/enable.js +152 -80
- package/dist/cli/gate/enable.js.map +1 -1
- package/dist/cli/gate/link-chain.d.ts +53 -0
- package/dist/cli/gate/link-chain.js +122 -0
- package/dist/cli/gate/link-chain.js.map +1 -0
- package/dist/cli/gate/snapshot.d.ts +289 -12
- package/dist/cli/gate/snapshot.js +481 -22
- package/dist/cli/gate/snapshot.js.map +1 -1
- package/dist/cli/index.d.ts +0 -9
- package/dist/cli/index.js +9 -2131
- package/dist/cli/index.js.map +1 -1
- package/dist/cli/init/composer.d.ts +3 -6
- package/dist/cli/init/composer.js +6 -370
- package/dist/cli/init/composer.js.map +1 -1
- package/dist/cli/init/dependencies.d.ts +1 -2
- package/dist/cli/init/dependencies.js +4 -80
- package/dist/cli/init/dependencies.js.map +1 -1
- package/dist/cli/init/detect.js +5 -4
- package/dist/cli/init/detect.js.map +1 -1
- package/dist/cli/init/interactive.d.ts +1 -23
- package/dist/cli/init/interactive.js +33 -247
- package/dist/cli/init/interactive.js.map +1 -1
- package/dist/cli/init/profiles.d.ts +2 -2
- package/dist/cli/init/profiles.js +51 -245
- package/dist/cli/init/profiles.js.map +1 -1
- package/dist/cli/init/templates.d.ts +2 -37
- package/dist/cli/init/templates.js +25 -1237
- package/dist/cli/init/templates.js.map +1 -1
- package/dist/cli/list.d.ts +1 -1
- package/dist/cli/list.js +1 -38
- package/dist/cli/list.js.map +1 -1
- package/dist/cli/loader.d.ts +15 -1
- package/dist/cli/loader.js +56 -39
- package/dist/cli/loader.js.map +1 -1
- package/dist/cli/main.js +7 -2
- package/dist/cli/main.js.map +1 -1
- package/dist/cli/migrate-home/index.js +2 -2
- package/dist/cli/migrate-home/index.js.map +1 -1
- package/dist/cli/pack/add.js +1 -1
- package/dist/cli/pack/add.js.map +1 -1
- package/dist/cli/pack/hook-bootstrap.d.ts +5 -164
- package/dist/cli/pack/hook-bootstrap.js +15 -291
- package/dist/cli/pack/hook-bootstrap.js.map +1 -1
- package/dist/cli/pack/hook-branch-protection.d.ts +28 -21
- package/dist/cli/pack/hook-branch-protection.js +365 -340
- package/dist/cli/pack/hook-branch-protection.js.map +1 -1
- package/dist/cli/pack/index.d.ts +0 -1
- package/dist/cli/pack/index.js +0 -1
- package/dist/cli/pack/index.js.map +1 -1
- package/dist/cli/pack/list.js +1 -6
- package/dist/cli/pack/list.js.map +1 -1
- package/dist/cli/pack/mutate.d.ts +7 -9
- package/dist/cli/pack/mutate.js +6 -9
- package/dist/cli/pack/mutate.js.map +1 -1
- package/dist/cli/pack/reseed.d.ts +2 -2
- package/dist/cli/pack/reseed.js +16 -22
- package/dist/cli/pack/reseed.js.map +1 -1
- package/dist/cli/{delegate/register.d.ts → register-gate-group.d.ts} +1 -1
- package/dist/cli/register-gate-group.js +348 -0
- package/dist/cli/register-gate-group.js.map +1 -0
- package/dist/cli/register-inspect-group.d.ts +6 -0
- package/dist/cli/register-inspect-group.js +189 -0
- package/dist/cli/register-inspect-group.js.map +1 -0
- package/dist/cli/register-operator-lifecycle.d.ts +1 -1
- package/dist/cli/register-operator-lifecycle.js +3 -100
- package/dist/cli/register-operator-lifecycle.js.map +1 -1
- package/dist/cli/register-pack-group.d.ts +5 -0
- package/dist/cli/register-pack-group.js +134 -0
- package/dist/cli/register-pack-group.js.map +1 -0
- package/dist/cli/{register-audit-group.d.ts → register-setup-group.d.ts} +1 -1
- package/dist/cli/register-setup-group.js +495 -0
- package/dist/cli/register-setup-group.js.map +1 -0
- package/dist/cli/remove/index.d.ts +0 -14
- package/dist/cli/remove/index.js +2 -115
- package/dist/cli/remove/index.js.map +1 -1
- package/dist/cli/remove/mutate.d.ts +0 -2
- package/dist/cli/remove/mutate.js +1 -19
- package/dist/cli/remove/mutate.js.map +1 -1
- package/dist/cli/remove/register.js +2 -19
- package/dist/cli/remove/register.js.map +1 -1
- package/dist/cli/shell-quote.d.ts +7 -0
- package/dist/cli/shell-quote.js +17 -0
- package/dist/cli/shell-quote.js.map +1 -0
- package/dist/cli/uninstall/index.d.ts +4 -2
- package/dist/cli/uninstall/index.js +15 -7
- package/dist/cli/uninstall/index.js.map +1 -1
- package/dist/cli/uninstall/register.js +6 -4
- package/dist/cli/uninstall/register.js.map +1 -1
- package/dist/cli/uninstall/snapshot.d.ts +15 -0
- package/dist/cli/uninstall/snapshot.js +38 -0
- package/dist/cli/uninstall/snapshot.js.map +1 -1
- package/dist/cli/validate/checks.d.ts +0 -77
- package/dist/cli/validate/checks.js +3 -1049
- package/dist/cli/validate/checks.js.map +1 -1
- package/dist/cli/validate/index.js +19 -15
- package/dist/cli/validate/index.js.map +1 -1
- package/dist/index.d.ts +0 -3
- package/dist/index.js +0 -3
- package/dist/index.js.map +1 -1
- package/dist/io/claude-mcp.d.ts +1 -1
- package/dist/io/claude-mcp.js +27 -14
- package/dist/io/claude-mcp.js.map +1 -1
- package/dist/io/harness-lock.js +2 -2
- package/dist/io/harness-lock.js.map +1 -1
- package/dist/io/lock.d.ts +0 -26
- package/dist/io/lock.js +10 -27
- package/dist/io/lock.js.map +1 -1
- package/dist/io/merge-settings.js +6 -4
- package/dist/io/merge-settings.js.map +1 -1
- package/dist/io/project-name.d.ts +22 -39
- package/dist/io/project-name.js +25 -42
- package/dist/io/project-name.js.map +1 -1
- package/dist/io/read-regular-file.d.ts +103 -40
- package/dist/io/read-regular-file.js +196 -35
- package/dist/io/read-regular-file.js.map +1 -1
- package/dist/io/restart-hints.js +3 -6
- package/dist/io/restart-hints.js.map +1 -1
- package/dist/io/version-compare.d.ts +1 -3
- package/dist/io/version-compare.js +1 -3
- package/dist/io/version-compare.js.map +1 -1
- package/dist/io/write-regular-file.d.ts +30 -0
- package/dist/io/write-regular-file.js +85 -0
- package/dist/io/write-regular-file.js.map +1 -0
- package/dist/overrides/index.d.ts +1 -0
- package/dist/overrides/index.js +1 -0
- package/dist/overrides/index.js.map +1 -1
- package/dist/overrides/merge-layers.d.ts +43 -0
- package/dist/overrides/merge-layers.js +76 -0
- package/dist/overrides/merge-layers.js.map +1 -0
- package/dist/overrides/merge.d.ts +16 -0
- package/dist/overrides/merge.js +21 -8
- package/dist/overrides/merge.js.map +1 -1
- package/dist/policy-packs/builtin/branch-protection-runtime.d.ts +4 -69
- package/dist/policy-packs/builtin/branch-protection-runtime.js +12 -84
- package/dist/policy-packs/builtin/branch-protection-runtime.js.map +1 -1
- package/dist/policy-packs/builtin/branch-protection.d.ts +7 -30
- package/dist/policy-packs/builtin/branch-protection.js +56 -89
- package/dist/policy-packs/builtin/branch-protection.js.map +1 -1
- package/dist/policy-packs/config-check.d.ts +7 -5
- package/dist/policy-packs/config-check.js +2 -2
- package/dist/policy-packs/config-check.js.map +1 -1
- package/dist/policy-packs/expand.d.ts +1 -3
- package/dist/policy-packs/expand.js +5 -42
- package/dist/policy-packs/expand.js.map +1 -1
- package/dist/policy-packs/index.d.ts +3 -3
- package/dist/policy-packs/index.js +2 -2
- package/dist/policy-packs/index.js.map +1 -1
- package/dist/policy-packs/registry.d.ts +9 -38
- package/dist/policy-packs/registry.js +5 -65
- package/dist/policy-packs/registry.js.map +1 -1
- package/dist/policy-packs/runtime.d.ts +0 -4
- package/dist/policy-packs/runtime.js +9 -22
- package/dist/policy-packs/runtime.js.map +1 -1
- package/dist/policy-packs/types.d.ts +0 -19
- package/dist/policy-packs/ux-compare.d.ts +1 -11
- package/dist/policy-packs/ux-compare.js +6 -42
- package/dist/policy-packs/ux-compare.js.map +1 -1
- package/dist/policy-packs/ux-drift-check.d.ts +5 -5
- package/dist/policy-packs/ux-drift-check.js +17 -22
- package/dist/policy-packs/ux-drift-check.js.map +1 -1
- package/dist/policy-packs/version-check.d.ts +5 -26
- package/dist/policy-packs/version-check.js +19 -74
- package/dist/policy-packs/version-check.js.map +1 -1
- package/dist/probes/memory.d.ts +1 -1
- package/dist/probes/memory.js +1 -1
- package/dist/probes/memory.js.map +1 -1
- package/dist/runtime/agent-facing.d.ts +9 -0
- package/dist/runtime/agent-facing.js +28 -14
- package/dist/runtime/agent-facing.js.map +1 -1
- package/dist/runtime/bounded-text.d.ts +15 -0
- package/dist/runtime/bounded-text.js +27 -0
- package/dist/runtime/bounded-text.js.map +1 -0
- package/dist/runtime/git-branch.d.ts +125 -0
- package/dist/runtime/git-branch.js +381 -0
- package/dist/runtime/git-branch.js.map +1 -0
- package/dist/runtime/hermetic-spawn-guard.d.ts +2 -2
- package/dist/runtime/hermetic-spawn-guard.js +24 -34
- package/dist/runtime/hermetic-spawn-guard.js.map +1 -1
- package/dist/runtime/home-dir.js +3 -2
- package/dist/runtime/home-dir.js.map +1 -1
- package/dist/runtime/tool-name-aliases.d.ts +0 -6
- package/dist/runtime/tool-name-aliases.js +5 -18
- package/dist/runtime/tool-name-aliases.js.map +1 -1
- package/dist/schema/grounding.d.ts +7 -54
- package/dist/schema/grounding.js +10 -12
- package/dist/schema/grounding.js.map +1 -1
- package/dist/schema/hooks.d.ts +39 -136
- package/dist/schema/hooks.js +3 -6
- package/dist/schema/hooks.js.map +1 -1
- package/dist/schema/index.d.ts +114 -3828
- package/dist/schema/index.js +41 -80
- package/dist/schema/index.js.map +1 -1
- package/dist/schema/memory.d.ts +54 -131
- package/dist/schema/memory.js +2 -2
- package/dist/schema/memory.js.map +1 -1
- package/dist/schema/policy-packs.d.ts +3 -45
- package/dist/schema/policy-packs.js +7 -13
- package/dist/schema/policy-packs.js.map +1 -1
- package/dist/schema/policy-ux.d.ts +7 -0
- package/dist/schema/policy-ux.js +18 -0
- package/dist/schema/policy-ux.js.map +1 -0
- package/dist/schema/removed-keys.d.ts +185 -0
- package/dist/schema/removed-keys.js +531 -0
- package/dist/schema/removed-keys.js.map +1 -0
- package/dist/schema/tools.d.ts +30 -268
- package/dist/schema/tools.js +4 -4
- package/dist/schema/tools.js.map +1 -1
- package/package.json +5 -16
- package/dist/cli/approve/branch-protection.d.ts +0 -69
- package/dist/cli/approve/branch-protection.js +0 -144
- package/dist/cli/approve/branch-protection.js.map +0 -1
- package/dist/cli/approve/risk.d.ts +0 -112
- package/dist/cli/approve/risk.js +0 -197
- package/dist/cli/approve/risk.js.map +0 -1
- package/dist/cli/approve/stdin-report.d.ts +0 -57
- package/dist/cli/approve/stdin-report.js +0 -145
- package/dist/cli/approve/stdin-report.js.map +0 -1
- package/dist/cli/approve/understanding.d.ts +0 -410
- package/dist/cli/approve/understanding.js +0 -996
- package/dist/cli/approve/understanding.js.map +0 -1
- package/dist/cli/audit.d.ts +0 -80
- package/dist/cli/audit.js +0 -252
- package/dist/cli/audit.js.map +0 -1
- package/dist/cli/delegate/index.d.ts +0 -76
- package/dist/cli/delegate/index.js +0 -444
- package/dist/cli/delegate/index.js.map +0 -1
- package/dist/cli/delegate/register.js +0 -90
- package/dist/cli/delegate/register.js.map +0 -1
- package/dist/cli/doctor/auto-approve-mode.d.ts +0 -37
- package/dist/cli/doctor/auto-approve-mode.js +0 -80
- package/dist/cli/doctor/auto-approve-mode.js.map +0 -1
- package/dist/cli/doctor/bypass-without-auto-approve.d.ts +0 -38
- package/dist/cli/doctor/bypass-without-auto-approve.js +0 -95
- package/dist/cli/doctor/bypass-without-auto-approve.js.map +0 -1
- package/dist/cli/doctor/codex-config-drift.d.ts +0 -28
- package/dist/cli/doctor/codex-config-drift.js +0 -240
- package/dist/cli/doctor/codex-config-drift.js.map +0 -1
- package/dist/cli/doctor/expire-on-tool-match.d.ts +0 -15
- package/dist/cli/doctor/expire-on-tool-match.js +0 -58
- package/dist/cli/doctor/expire-on-tool-match.js.map +0 -1
- package/dist/cli/doctor/rogue-ledger.d.ts +0 -53
- package/dist/cli/doctor/rogue-ledger.js +0 -153
- package/dist/cli/doctor/rogue-ledger.js.map +0 -1
- package/dist/cli/doctor/session-start-preflight-setup-version.d.ts +0 -83
- package/dist/cli/doctor/session-start-preflight-setup-version.js +0 -114
- package/dist/cli/doctor/session-start-preflight-setup-version.js.map +0 -1
- package/dist/cli/doctor/settings-drift.d.ts +0 -25
- package/dist/cli/doctor/settings-drift.js +0 -213
- package/dist/cli/doctor/settings-drift.js.map +0 -1
- package/dist/cli/doctor/toolchain-parity.d.ts +0 -63
- package/dist/cli/doctor/toolchain-parity.js +0 -154
- package/dist/cli/doctor/toolchain-parity.js.map +0 -1
- package/dist/cli/doctor/ug-auto-approvals.d.ts +0 -40
- package/dist/cli/doctor/ug-auto-approvals.js +0 -91
- package/dist/cli/doctor/ug-auto-approvals.js.map +0 -1
- package/dist/cli/doctor/ug-delegations.d.ts +0 -26
- package/dist/cli/doctor/ug-delegations.js +0 -121
- package/dist/cli/doctor/ug-delegations.js.map +0 -1
- package/dist/cli/doctor/ug-inflight.d.ts +0 -35
- package/dist/cli/doctor/ug-inflight.js +0 -57
- package/dist/cli/doctor/ug-inflight.js.map +0 -1
- package/dist/cli/doctor/understanding-mode-env.d.ts +0 -51
- package/dist/cli/doctor/understanding-mode-env.js +0 -98
- package/dist/cli/doctor/understanding-mode-env.js.map +0 -1
- package/dist/cli/dry-run.d.ts +0 -58
- package/dist/cli/dry-run.js +0 -283
- package/dist/cli/dry-run.js.map +0 -1
- package/dist/cli/enriched-event.d.ts +0 -35
- package/dist/cli/enriched-event.js +0 -60
- package/dist/cli/enriched-event.js.map +0 -1
- package/dist/cli/event-input.d.ts +0 -28
- package/dist/cli/event-input.js +0 -73
- package/dist/cli/event-input.js.map +0 -1
- package/dist/cli/explain-action.d.ts +0 -25
- package/dist/cli/explain-action.js +0 -57
- package/dist/cli/explain-action.js.map +0 -1
- package/dist/cli/explain-policy.d.ts +0 -147
- package/dist/cli/explain-policy.js +0 -248
- package/dist/cli/explain-policy.js.map +0 -1
- package/dist/cli/explain.d.ts +0 -31
- package/dist/cli/explain.js +0 -159
- package/dist/cli/explain.js.map +0 -1
- package/dist/cli/gc/index.d.ts +0 -63
- package/dist/cli/gc/index.js +0 -566
- package/dist/cli/gc/index.js.map +0 -1
- package/dist/cli/pack/approve-escape.d.ts +0 -19
- package/dist/cli/pack/approve-escape.js +0 -190
- package/dist/cli/pack/approve-escape.js.map +0 -1
- package/dist/cli/pack/auto-approve-path.d.ts +0 -146
- package/dist/cli/pack/auto-approve-path.js +0 -462
- package/dist/cli/pack/auto-approve-path.js.map +0 -1
- package/dist/cli/pack/hook-codex-post-tool-use.d.ts +0 -25
- package/dist/cli/pack/hook-codex-post-tool-use.js +0 -160
- package/dist/cli/pack/hook-codex-post-tool-use.js.map +0 -1
- package/dist/cli/pack/hook-codex-pre-tool-use.d.ts +0 -48
- package/dist/cli/pack/hook-codex-pre-tool-use.js +0 -474
- package/dist/cli/pack/hook-codex-pre-tool-use.js.map +0 -1
- package/dist/cli/pack/hook-codex-stop.d.ts +0 -35
- package/dist/cli/pack/hook-codex-stop.js +0 -329
- package/dist/cli/pack/hook-codex-stop.js.map +0 -1
- package/dist/cli/pack/hook-codex-user-prompt-submit.d.ts +0 -24
- package/dist/cli/pack/hook-codex-user-prompt-submit.js +0 -93
- package/dist/cli/pack/hook-codex-user-prompt-submit.js.map +0 -1
- package/dist/cli/pack/hook-post-merge-gate-record.d.ts +0 -37
- package/dist/cli/pack/hook-post-merge-gate-record.js +0 -190
- package/dist/cli/pack/hook-post-merge-gate-record.js.map +0 -1
- package/dist/cli/pack/hook-post-merge-gate.d.ts +0 -34
- package/dist/cli/pack/hook-post-merge-gate.js +0 -277
- package/dist/cli/pack/hook-post-merge-gate.js.map +0 -1
- package/dist/cli/pack/hook-post-tool-use.d.ts +0 -45
- package/dist/cli/pack/hook-post-tool-use.js +0 -137
- package/dist/cli/pack/hook-post-tool-use.js.map +0 -1
- package/dist/cli/pack/hook-pre-tool-use.d.ts +0 -92
- package/dist/cli/pack/hook-pre-tool-use.js +0 -1328
- package/dist/cli/pack/hook-pre-tool-use.js.map +0 -1
- package/dist/cli/pack/hook-runtime-reality.d.ts +0 -63
- package/dist/cli/pack/hook-runtime-reality.js +0 -210
- package/dist/cli/pack/hook-runtime-reality.js.map +0 -1
- package/dist/cli/pack/hook-solution-acceptance-writeguard.d.ts +0 -32
- package/dist/cli/pack/hook-solution-acceptance-writeguard.js +0 -438
- package/dist/cli/pack/hook-solution-acceptance-writeguard.js.map +0 -1
- package/dist/cli/pack/hook-solution-acceptance.d.ts +0 -157
- package/dist/cli/pack/hook-solution-acceptance.js +0 -530
- package/dist/cli/pack/hook-solution-acceptance.js.map +0 -1
- package/dist/cli/pack/hook-stay-in-scope.d.ts +0 -37
- package/dist/cli/pack/hook-stay-in-scope.js +0 -128
- package/dist/cli/pack/hook-stay-in-scope.js.map +0 -1
- package/dist/cli/pack/hook-subagent-start.d.ts +0 -23
- package/dist/cli/pack/hook-subagent-start.js +0 -88
- package/dist/cli/pack/hook-subagent-start.js.map +0 -1
- package/dist/cli/pack/hook-subagent-stop.d.ts +0 -19
- package/dist/cli/pack/hook-subagent-stop.js +0 -41
- package/dist/cli/pack/hook-subagent-stop.js.map +0 -1
- package/dist/cli/pack/hook-track-active-claim.d.ts +0 -27
- package/dist/cli/pack/hook-track-active-claim.js +0 -275
- package/dist/cli/pack/hook-track-active-claim.js.map +0 -1
- package/dist/cli/pack/transcript-report-scan.d.ts +0 -71
- package/dist/cli/pack/transcript-report-scan.js +0 -359
- package/dist/cli/pack/transcript-report-scan.js.map +0 -1
- package/dist/cli/pack/understanding-report-schema-hint.d.ts +0 -26
- package/dist/cli/pack/understanding-report-schema-hint.js +0 -120
- package/dist/cli/pack/understanding-report-schema-hint.js.map +0 -1
- package/dist/cli/pack/upgrade.d.ts +0 -32
- package/dist/cli/pack/upgrade.js +0 -273
- package/dist/cli/pack/upgrade.js.map +0 -1
- package/dist/cli/pause/index.d.ts +0 -113
- package/dist/cli/pause/index.js +0 -251
- package/dist/cli/pause/index.js.map +0 -1
- package/dist/cli/pause-check.d.ts +0 -22
- package/dist/cli/pause-check.js +0 -54
- package/dist/cli/pause-check.js.map +0 -1
- package/dist/cli/policy/intercept.d.ts +0 -233
- package/dist/cli/policy/intercept.js +0 -1022
- package/dist/cli/policy/intercept.js.map +0 -1
- package/dist/cli/policy/risk-envelope-enrichment.d.ts +0 -40
- package/dist/cli/policy/risk-envelope-enrichment.js +0 -110
- package/dist/cli/policy/risk-envelope-enrichment.js.map +0 -1
- package/dist/cli/record/index.d.ts +0 -81
- package/dist/cli/record/index.js +0 -348
- package/dist/cli/record/index.js.map +0 -1
- package/dist/cli/register-audit-group.js +0 -91
- package/dist/cli/register-audit-group.js.map +0 -1
- package/dist/cli/resolve-env.d.ts +0 -32
- package/dist/cli/resolve-env.js +0 -46
- package/dist/cli/resolve-env.js.map +0 -1
- package/dist/cli/session-export/index.d.ts +0 -46
- package/dist/cli/session-export/index.js +0 -169
- package/dist/cli/session-export/index.js.map +0 -1
- package/dist/cli/session-export/redact.d.ts +0 -22
- package/dist/cli/session-export/redact.js +0 -47
- package/dist/cli/session-export/redact.js.map +0 -1
- package/dist/cli/session-export/transcript.d.ts +0 -24
- package/dist/cli/session-export/transcript.js +0 -164
- package/dist/cli/session-export/transcript.js.map +0 -1
- package/dist/cli/session-start/branch-check.d.ts +0 -18
- package/dist/cli/session-start/branch-check.js +0 -140
- package/dist/cli/session-start/branch-check.js.map +0 -1
- package/dist/cli/session-start/index.d.ts +0 -121
- package/dist/cli/session-start/index.js +0 -591
- package/dist/cli/session-start/index.js.map +0 -1
- package/dist/cli/session-start/shared-options.d.ts +0 -103
- package/dist/cli/session-start/shared-options.js +0 -107
- package/dist/cli/session-start/shared-options.js.map +0 -1
- package/dist/cli/session-start/stale-base-check.d.ts +0 -46
- package/dist/cli/session-start/stale-base-check.js +0 -352
- package/dist/cli/session-start/stale-base-check.js.map +0 -1
- package/dist/cli/session-start/toolchain-parity.d.ts +0 -267
- package/dist/cli/session-start/toolchain-parity.js +0 -797
- package/dist/cli/session-start/toolchain-parity.js.map +0 -1
- package/dist/cli/smoke/assertions.d.ts +0 -46
- package/dist/cli/smoke/assertions.js +0 -170
- package/dist/cli/smoke/assertions.js.map +0 -1
- package/dist/cli/smoke/index.d.ts +0 -76
- package/dist/cli/smoke/index.js +0 -245
- package/dist/cli/smoke/index.js.map +0 -1
- package/dist/cli/smoke/runner.d.ts +0 -55
- package/dist/cli/smoke/runner.js +0 -134
- package/dist/cli/smoke/runner.js.map +0 -1
- package/dist/cli/smoke/stream-parser.d.ts +0 -65
- package/dist/cli/smoke/stream-parser.js +0 -115
- package/dist/cli/smoke/stream-parser.js.map +0 -1
- package/dist/cli/test-risk.d.ts +0 -27
- package/dist/cli/test-risk.js +0 -38
- package/dist/cli/test-risk.js.map +0 -1
- package/dist/io/display-path.d.ts +0 -11
- package/dist/io/display-path.js +0 -29
- package/dist/io/display-path.js.map +0 -1
- package/dist/io/duration.d.ts +0 -5
- package/dist/io/duration.js +0 -50
- package/dist/io/duration.js.map +0 -1
- package/dist/io/extract.d.ts +0 -79
- package/dist/io/extract.js +0 -226
- package/dist/io/extract.js.map +0 -1
- package/dist/io/ledger-record.d.ts +0 -83
- package/dist/io/ledger-record.js +0 -301
- package/dist/io/ledger-record.js.map +0 -1
- package/dist/io/read-json-dir-entries.d.ts +0 -36
- package/dist/io/read-json-dir-entries.js +0 -48
- package/dist/io/read-json-dir-entries.js.map +0 -1
- package/dist/io/safe-json-parse.d.ts +0 -5
- package/dist/io/safe-json-parse.js +0 -21
- package/dist/io/safe-json-parse.js.map +0 -1
- package/dist/policies/index.d.ts +0 -5
- package/dist/policies/index.js +0 -6
- package/dist/policies/index.js.map +0 -1
- package/dist/policies/ledger-client.d.ts +0 -113
- package/dist/policies/ledger-client.js +0 -500
- package/dist/policies/ledger-client.js.map +0 -1
- package/dist/policies/producers.d.ts +0 -12
- package/dist/policies/producers.js +0 -61
- package/dist/policies/producers.js.map +0 -1
- package/dist/policies/requires.d.ts +0 -75
- package/dist/policies/requires.js +0 -240
- package/dist/policies/requires.js.map +0 -1
- package/dist/policies/timestamp.d.ts +0 -14
- package/dist/policies/timestamp.js +0 -36
- package/dist/policies/timestamp.js.map +0 -1
- package/dist/policy-packs/builtin/permission-profiles.d.ts +0 -11
- package/dist/policy-packs/builtin/permission-profiles.js +0 -74
- package/dist/policy-packs/builtin/permission-profiles.js.map +0 -1
- package/dist/policy-packs/builtin/post-merge-gate-runtime.d.ts +0 -286
- package/dist/policy-packs/builtin/post-merge-gate-runtime.js +0 -397
- package/dist/policy-packs/builtin/post-merge-gate-runtime.js.map +0 -1
- package/dist/policy-packs/builtin/post-merge-gate.d.ts +0 -56
- package/dist/policy-packs/builtin/post-merge-gate.js +0 -347
- package/dist/policy-packs/builtin/post-merge-gate.js.map +0 -1
- package/dist/policy-packs/builtin/solution-acceptance-reconnect.d.ts +0 -50
- package/dist/policy-packs/builtin/solution-acceptance-reconnect.js +0 -151
- package/dist/policy-packs/builtin/solution-acceptance-reconnect.js.map +0 -1
- package/dist/policy-packs/builtin/solution-acceptance-runtime.d.ts +0 -323
- package/dist/policy-packs/builtin/solution-acceptance-runtime.js +0 -672
- package/dist/policy-packs/builtin/solution-acceptance-runtime.js.map +0 -1
- package/dist/policy-packs/builtin/solution-acceptance.d.ts +0 -45
- package/dist/policy-packs/builtin/solution-acceptance.js +0 -226
- package/dist/policy-packs/builtin/solution-acceptance.js.map +0 -1
- package/dist/policy-packs/builtin/understanding-before-execution/active-claim.d.ts +0 -25
- package/dist/policy-packs/builtin/understanding-before-execution/active-claim.js +0 -94
- package/dist/policy-packs/builtin/understanding-before-execution/active-claim.js.map +0 -1
- package/dist/policy-packs/builtin/understanding-before-execution/auto-approve-default.d.ts +0 -35
- package/dist/policy-packs/builtin/understanding-before-execution/auto-approve-default.js +0 -86
- package/dist/policy-packs/builtin/understanding-before-execution/auto-approve-default.js.map +0 -1
- package/dist/policy-packs/builtin/understanding-before-execution/auto-approve.d.ts +0 -210
- package/dist/policy-packs/builtin/understanding-before-execution/auto-approve.js +0 -361
- package/dist/policy-packs/builtin/understanding-before-execution/auto-approve.js.map +0 -1
- package/dist/policy-packs/builtin/understanding-before-execution/delegation-markers.d.ts +0 -304
- package/dist/policy-packs/builtin/understanding-before-execution/delegation-markers.js +0 -734
- package/dist/policy-packs/builtin/understanding-before-execution/delegation-markers.js.map +0 -1
- package/dist/policy-packs/builtin/understanding-before-execution/expiry-reason.d.ts +0 -36
- package/dist/policy-packs/builtin/understanding-before-execution/expiry-reason.js +0 -73
- package/dist/policy-packs/builtin/understanding-before-execution/expiry-reason.js.map +0 -1
- package/dist/policy-packs/builtin/understanding-before-execution/index.d.ts +0 -19
- package/dist/policy-packs/builtin/understanding-before-execution/index.js +0 -83
- package/dist/policy-packs/builtin/understanding-before-execution/index.js.map +0 -1
- package/dist/policy-packs/builtin/understanding-before-execution/inflight-records.d.ts +0 -135
- package/dist/policy-packs/builtin/understanding-before-execution/inflight-records.js +0 -643
- package/dist/policy-packs/builtin/understanding-before-execution/inflight-records.js.map +0 -1
- package/dist/policy-packs/builtin/understanding-before-execution/ledger.d.ts +0 -25
- package/dist/policy-packs/builtin/understanding-before-execution/ledger.js +0 -56
- package/dist/policy-packs/builtin/understanding-before-execution/ledger.js.map +0 -1
- package/dist/policy-packs/builtin/understanding-before-execution/lifecycle.d.ts +0 -20
- package/dist/policy-packs/builtin/understanding-before-execution/lifecycle.js +0 -106
- package/dist/policy-packs/builtin/understanding-before-execution/lifecycle.js.map +0 -1
- package/dist/policy-packs/builtin/understanding-before-execution/markers.d.ts +0 -126
- package/dist/policy-packs/builtin/understanding-before-execution/markers.js +0 -245
- package/dist/policy-packs/builtin/understanding-before-execution/markers.js.map +0 -1
- package/dist/policy-packs/builtin/understanding-before-execution/measured-permission-modes.d.ts +0 -29
- package/dist/policy-packs/builtin/understanding-before-execution/measured-permission-modes.js +0 -82
- package/dist/policy-packs/builtin/understanding-before-execution/measured-permission-modes.js.map +0 -1
- package/dist/policy-packs/builtin/understanding-before-execution/permission-mode-observations.d.ts +0 -71
- package/dist/policy-packs/builtin/understanding-before-execution/permission-mode-observations.js +0 -175
- package/dist/policy-packs/builtin/understanding-before-execution/permission-mode-observations.js.map +0 -1
- package/dist/policy-packs/builtin/understanding-before-execution/persisted-reports.d.ts +0 -625
- package/dist/policy-packs/builtin/understanding-before-execution/persisted-reports.js +0 -1076
- package/dist/policy-packs/builtin/understanding-before-execution/persisted-reports.js.map +0 -1
- package/dist/policy-packs/builtin/understanding-before-execution/post-tool-use-boundary.d.ts +0 -128
- package/dist/policy-packs/builtin/understanding-before-execution/post-tool-use-boundary.js +0 -213
- package/dist/policy-packs/builtin/understanding-before-execution/post-tool-use-boundary.js.map +0 -1
- package/dist/policy-packs/builtin/understanding-before-execution/stay-in-scope-config.d.ts +0 -129
- package/dist/policy-packs/builtin/understanding-before-execution/stay-in-scope-config.js +0 -166
- package/dist/policy-packs/builtin/understanding-before-execution/stay-in-scope-config.js.map +0 -1
- package/dist/policy-packs/builtin/understanding-before-execution/task-markers.d.ts +0 -164
- package/dist/policy-packs/builtin/understanding-before-execution/task-markers.js +0 -275
- package/dist/policy-packs/builtin/understanding-before-execution/task-markers.js.map +0 -1
- package/dist/policy-packs/builtin/understanding-before-execution-runtime.d.ts +0 -1
- package/dist/policy-packs/builtin/understanding-before-execution-runtime.js +0 -10
- package/dist/policy-packs/builtin/understanding-before-execution-runtime.js.map +0 -1
- package/dist/policy-packs/builtin/understanding-before-execution.d.ts +0 -526
- package/dist/policy-packs/builtin/understanding-before-execution.js +0 -1078
- package/dist/policy-packs/builtin/understanding-before-execution.js.map +0 -1
- package/dist/policy-packs/permission-translator.d.ts +0 -9
- package/dist/policy-packs/permission-translator.js +0 -76
- package/dist/policy-packs/permission-translator.js.map +0 -1
- package/dist/runtime/action-envelope.d.ts +0 -64
- package/dist/runtime/action-envelope.js +0 -46
- package/dist/runtime/action-envelope.js.map +0 -1
- package/dist/runtime/approval-signing.d.ts +0 -111
- package/dist/runtime/approval-signing.js +0 -384
- package/dist/runtime/approval-signing.js.map +0 -1
- package/dist/runtime/bash-match-facts.d.ts +0 -60
- package/dist/runtime/bash-match-facts.js +0 -196
- package/dist/runtime/bash-match-facts.js.map +0 -1
- package/dist/runtime/bash-match-registry.d.ts +0 -112
- package/dist/runtime/bash-match-registry.js +0 -406
- package/dist/runtime/bash-match-registry.js.map +0 -1
- package/dist/runtime/bash-prefix-parse.d.ts +0 -31
- package/dist/runtime/bash-prefix-parse.js +0 -576
- package/dist/runtime/bash-prefix-parse.js.map +0 -1
- package/dist/runtime/command-normalize.d.ts +0 -658
- package/dist/runtime/command-normalize.js +0 -2410
- package/dist/runtime/command-normalize.js.map +0 -1
- package/dist/runtime/deletion-target-resolve.d.ts +0 -28
- package/dist/runtime/deletion-target-resolve.js +0 -1078
- package/dist/runtime/deletion-target-resolve.js.map +0 -1
- package/dist/runtime/destructive-shell-floor.d.ts +0 -19
- package/dist/runtime/destructive-shell-floor.js +0 -611
- package/dist/runtime/destructive-shell-floor.js.map +0 -1
- package/dist/runtime/environment-resolver.d.ts +0 -36
- package/dist/runtime/environment-resolver.js +0 -138
- package/dist/runtime/environment-resolver.js.map +0 -1
- package/dist/runtime/git-context.d.ts +0 -201
- package/dist/runtime/git-context.js +0 -422
- package/dist/runtime/git-context.js.map +0 -1
- package/dist/runtime/index.d.ts +0 -12
- package/dist/runtime/index.js +0 -13
- package/dist/runtime/index.js.map +0 -1
- package/dist/runtime/intercept.d.ts +0 -623
- package/dist/runtime/intercept.js +0 -1384
- package/dist/runtime/intercept.js.map +0 -1
- package/dist/runtime/kube-context.d.ts +0 -16
- package/dist/runtime/kube-context.js +0 -63
- package/dist/runtime/kube-context.js.map +0 -1
- package/dist/runtime/kubectl-target-parse.d.ts +0 -31
- package/dist/runtime/kubectl-target-parse.js +0 -249
- package/dist/runtime/kubectl-target-parse.js.map +0 -1
- package/dist/runtime/ledger-add.d.ts +0 -16
- package/dist/runtime/ledger-add.js +0 -150
- package/dist/runtime/ledger-add.js.map +0 -1
- package/dist/runtime/ledger-writer.d.ts +0 -27
- package/dist/runtime/ledger-writer.js +0 -46
- package/dist/runtime/ledger-writer.js.map +0 -1
- package/dist/runtime/pause-sentinel.d.ts +0 -60
- package/dist/runtime/pause-sentinel.js +0 -156
- package/dist/runtime/pause-sentinel.js.map +0 -1
- package/dist/runtime/pending-approval.d.ts +0 -23
- package/dist/runtime/pending-approval.js +0 -67
- package/dist/runtime/pending-approval.js.map +0 -1
- package/dist/runtime/read-only-bash.d.ts +0 -141
- package/dist/runtime/read-only-bash.js +0 -2204
- package/dist/runtime/read-only-bash.js.map +0 -1
- package/dist/runtime/recovery-git-commit.d.ts +0 -22
- package/dist/runtime/recovery-git-commit.js +0 -284
- package/dist/runtime/recovery-git-commit.js.map +0 -1
- package/dist/runtime/reject-malformed-session-id.d.ts +0 -8
- package/dist/runtime/reject-malformed-session-id.js +0 -16
- package/dist/runtime/reject-malformed-session-id.js.map +0 -1
- package/dist/runtime/risk-classifier.d.ts +0 -38
- package/dist/runtime/risk-classifier.js +0 -311
- package/dist/runtime/risk-classifier.js.map +0 -1
- package/dist/runtime/session-id.d.ts +0 -113
- package/dist/runtime/session-id.js +0 -193
- package/dist/runtime/session-id.js.map +0 -1
- package/dist/runtime/shell-word.d.ts +0 -62
- package/dist/runtime/shell-word.js +0 -410
- package/dist/runtime/shell-word.js.map +0 -1
- package/dist/runtime/task-providers/agent-tasks.d.ts +0 -105
- package/dist/runtime/task-providers/agent-tasks.js +0 -247
- package/dist/runtime/task-providers/agent-tasks.js.map +0 -1
- package/dist/runtime/when-eval.d.ts +0 -62
- package/dist/runtime/when-eval.js +0 -212
- package/dist/runtime/when-eval.js.map +0 -1
- package/dist/runtime/workflow-policies.d.ts +0 -207
- package/dist/runtime/workflow-policies.js +0 -596
- package/dist/runtime/workflow-policies.js.map +0 -1
- package/dist/schema/audit.d.ts +0 -71
- package/dist/schema/audit.js +0 -32
- package/dist/schema/audit.js.map +0 -1
- package/dist/schema/doctor.d.ts +0 -25
- package/dist/schema/doctor.js +0 -23
- package/dist/schema/doctor.js.map +0 -1
- package/dist/schema/environments.d.ts +0 -215
- package/dist/schema/environments.js +0 -101
- package/dist/schema/environments.js.map +0 -1
- package/dist/schema/extract.d.ts +0 -9
- package/dist/schema/extract.js +0 -86
- package/dist/schema/extract.js.map +0 -1
- package/dist/schema/permission-profiles.d.ts +0 -2292
- package/dist/schema/permission-profiles.js +0 -60
- package/dist/schema/permission-profiles.js.map +0 -1
- package/dist/schema/policies.d.ts +0 -974
- package/dist/schema/policies.js +0 -298
- package/dist/schema/policies.js.map +0 -1
- package/dist/schema/requires.d.ts +0 -131
- package/dist/schema/requires.js +0 -88
- package/dist/schema/requires.js.map +0 -1
- package/dist/schema/risk.d.ts +0 -144
- package/dist/schema/risk.js +0 -194
- package/dist/schema/risk.js.map +0 -1
- package/dist/schema/session-start-preflight.d.ts +0 -10
- package/dist/schema/session-start-preflight.js +0 -106
- package/dist/schema/session-start-preflight.js.map +0 -1
- package/dist/schema/stale-base-check.d.ts +0 -18
- package/dist/schema/stale-base-check.js +0 -37
- package/dist/schema/stale-base-check.js.map +0 -1
- package/dist/schema/toolchain-parity.d.ts +0 -21
- package/dist/schema/toolchain-parity.js +0 -48
- package/dist/schema/toolchain-parity.js.map +0 -1
- package/dist/schema/workflows.d.ts +0 -519
- package/dist/schema/workflows.js +0 -81
- package/dist/schema/workflows.js.map +0 -1
- package/scripts/runtime-reality-docker-probe.mjs +0 -71
package/CHANGELOG.md
CHANGED
|
@@ -7,6 +7,70 @@ and this project adheres to [Semantic Versioning](https://semver.org/).
|
|
|
7
7
|
|
|
8
8
|
## [Unreleased]
|
|
9
9
|
|
|
10
|
+
## [1.0.0] - 2026-10-25
|
|
11
|
+
|
|
12
|
+
1.0.0 is the removal release. harness is cut back to what it was always meant to be: one YAML manifest that wires MCP servers, skills, memory and hooks into Claude Code, Codex and (slimly) opencode, plus the `branch-protection` gate and its `harness gate disable` / `harness gate enable` kill switch. Everything else (the understanding gate, solution-acceptance, post-merge-gate, the Risk Gate, the policy engine, pause and approvals, the evidence-ledger client, smoke, session-start producers) is gone. A manifest or hook that still carries removed configuration keeps loading: removed keys, packs and commands warn and are ignored (`harness validate --strict` fails on them), so the branch-protection hook keeps deciding.
|
|
13
|
+
|
|
14
|
+
### Upgrade notes
|
|
15
|
+
|
|
16
|
+
- Install and re-generate right away, because hooks generated by an older release may call removed commands such as `harness session-start`: `npm i -g @lannguyensi/harness@1.0.0`, then re-run apply once for each runtime you use: `harness apply --target ~/.claude/settings.json --merge` for Claude Code (or your usual apply; `--merge` replaces the `hooks` key, drops `mcpServers` entries an earlier apply wrote and keeps every other key) and `harness apply --runtime codex --install` for Codex. A plain `harness apply` reuses the runtime of the last apply, so run the Claude Code apply last if that is the runtime your plain applies should target. Restart running agent sessions afterwards.
|
|
17
|
+
- Run `harness pack reseed branch-protection` to pick up the current deny wording, and make sure `git` is on the PATH the hooks run with: the branch-protection hook asks git for the branch and refuses when git cannot answer.
|
|
18
|
+
- Run `harness validate` and `harness doctor` (and `harness validate --project <name>` for each project override layer, which plain `validate` does not read): they print every removed manifest key, pack and hook command still in your manifest, and `harness validate --strict` fails on them. Delete them by hand, then re-run apply for each runtime you use; the full list and the way forward for each are in `docs/CLI.md` ("Removed keys, packs and commands").
|
|
19
|
+
- Scripts and CI that call a removed verb (`harness smoke`, `harness audit`, `harness pause`, `harness record`, `harness policy intercept`, and the others listed under Removed) must drop the call; there is no replacement except where the entry below names one. The operator off switch is `harness gate disable` / `harness gate enable`, for Codex with `--runtime codex`.
|
|
20
|
+
- The library entry (`src/index.ts`) stays exported and is the remaining API: the manifest schema, the loader, `validate`, `doctor`, `list`, `diff`, `describe`, the override engine and the MCP and memory probes. The exports of removed components are gone (named under Removed), and `ManifestParseError.issues` has a new type (see Changed, zod 4).
|
|
21
|
+
- A `.understanding-gate/` directory of an old install is leftover state that nothing reads: delete it by hand (`rm -rf ~/.harness/.understanding-gate`); `harness uninstall` also removes it as part of a full teardown.
|
|
22
|
+
|
|
23
|
+
### Added
|
|
24
|
+
|
|
25
|
+
- `harness doctor` checks that the hooks `harness apply` generates are present in the live runtime config, so a gate that exists only in the generated artefact no longer goes unnoticed (task 305ef207, #721). For the runtime a plain apply selects (`claude-code`: `settings.json`, under `CLAUDE_CONFIG_DIR` when set; `codex`: `~/.codex/config.toml`) every generated hook is compared by event, matcher and command. A missing hook or one with another command is an error naming all three; a hook taken out by `harness gate disable` is a warning naming the command that puts it back, with `--force` and a short reason exactly when `harness gate enable` would refuse without it, and the refusing snapshot named when an older snapshot removed the hook (tasks f4e9a6d6, 85c9296c; #726, #728); a live hook harness did not generate is an info line; an unreadable live file or gate snapshot is one error finding. The report carries it as `hookLiveness` in `--json`.
|
|
26
|
+
- New package-root exports for the removed-surface warnings: `findRemovedCommandUses`, `invokesRemovedCommand`, `REMOVED_COMMANDS`, `RemovedCommand`, `REMOVED_HOOK_FIELDS`, `REMOVED_LIST_CATEGORIES`, `REMOVED_DESCRIBE_PILLARS`, `removedInspectNameMessage`, `mergeLayersStrippingRemovedPaths`, `stripRemovedManifestPaths`, `stripRemovedHookFields` and `remapDiagnosticPath`, so a library consumer that runs `runAssetChecks` on a manifest from `parseManifestWithWarnings` maps a diagnostic path back to the index as written, using the result's `indexMaps` (tasks 3cddd42e, 785c555e; #688, #714).
|
|
27
|
+
- `tests/cli/apply/apply-codex-toml-parser-pins.test.ts` pins two smol-toml 1.9.0 behaviours through `planCodexConfigInstall`: a malformed `[[hooks.Stop]` header is refused with the parser's line, column and reason, and a leading byte order mark is accepted (task f73524e0, #648).
|
|
28
|
+
|
|
29
|
+
### Removed
|
|
30
|
+
|
|
31
|
+
- Understanding gate (tasks 95826160, e2d5e87e, 7890cd34, 9fce2cdc, 9389707f, c7e604fc, eb7e9c5c, 68dca91f; #663 to #666, #668 to #670, #748): the `understanding-before-execution` pack, its hook verbs (`harness pack hook pre-tool-use`, `post-tool-use`, `track-active-claim`, `stay-in-scope`, `subagent-start`, `subagent-stop` and the four `codex-*` verbs), `harness delegate`, `harness approve understanding`, `harness gc`, `harness pack upgrade`, the `permission_profiles` manifest key, the doctor and audit readers of gate state (with the `--recent-sessions` option and the doctor report fields `ug*`, `settingsDrift`, `codexConfigDrift`), the pack machinery only it used (`harness pack add --mode`, the `mode` column of `harness pack list`, `policyPackHookVersions` in `doctor --json`, floor probes for a pack `min_version`), the install offers (the `solo`, `team` and `full` templates, the wizard composer and the dependency installer no longer offer it; the wizard also no longer offers orchestrator-workflow setup, which served solution-acceptance, or shows the disabled `opencode` entry, so `RunInteractiveOptions` drops `repoDir` and `owInitSpawn`), its documentation, dogfood material and fixtures, and the runtime dependency `@lannguyensi/understanding-gate`. Do instead: delete the pack entry and `permission_profiles` from the manifest, re-run apply per runtime, run `harness pack remove --force understanding-before-execution` to drop the generated instructions file, and delete by hand any `permissions` block that an `apply --target` file received while a `permission_profile` was selected. Understanding-gate fixes made earlier in this cycle (tasks 6e001bfc, f1bacdd8; #650, #651) went with it.
|
|
32
|
+
- `solution-acceptance` pack and its verbs (`harness pack hook solution-acceptance`, `solution-acceptance-writeguard`; task cc5a4152, #662), with the checks that only served it (validate's producer and knob diagnostics, doctor's `policyPacks.solutionAcceptance` field, `DoctorOptions.gitIgnoreProbe`, the `SOLUTION_VERDICT_DIR` projection) and the fixes made earlier in this cycle around it (tasks b56d95d3, 9dba07a4, 1497d501; #638, #644, #653). Do instead: `harness pack remove solution-acceptance --force`.
|
|
33
|
+
- `post-merge-gate` pack and its verbs (`harness pack hook post-merge-gate`, `post-merge-gate-record`; task 2ce6933f, #660). Do instead: `harness pack remove post-merge-gate --force`.
|
|
34
|
+
- Risk Gate (tasks 65807a1b, 3a655f4e, 6e52c044, 39c112e0, 2bf09e41; #678 to #682): the debug verbs `harness explain-action`, `test-risk`, `resolve-env` and `explain-policy`, the risk and environment evaluation, the `risk` and `environments` manifest keys, `policies[].when`, `harness approve risk` (and with it the whole `harness approve` group), the shipped policies and doctor and validate sections, and `docs/risk-gate.md`. A policy that carried `when:` is dropped whole with a warning, never reduced to its trigger, because a trigger-only copy of a scoped gate would match every call. The Risk Gate schema exports (`RiskSchema`, `EnvironmentsSchema`, `PolicyWhenSchema`, `DEFAULT_SAFE_DELETION_ROOTS` and their types) left the package root. Do instead: run `harness validate`, delete the listed keys and policies from the manifest and its override layers.
|
|
35
|
+
- Policy engine, shell command model and the `policies`, `workflows`, `review_templates` and `doctor` manifest keys (tasks bfe5efb4, e62f03ea, af5c3d60, bcdcde36, 10e2ff0a; #692 to #696): `harness policy intercept` and the `policy` group, `harness record`, `harness dry-run`, `harness explain`, the `workflows[]` policy derivation, the action envelope, the producer runner, the shell model and read-only Bash classifier, the policy checks of validate, doctor and apply, `harness list policies|workflows`, `harness describe --pillar policies|workflows|review_templates` (each now exits 64), `harness remove --force`, the hook fields `bash_match` and `path_match` (stripped per hook with a warning, the hook stays), the policies and intercept hooks of every init template and of `docs/examples/full-manifest.yaml`, the kill-switch deny policies, and the `measure:*` scripts. A non-empty removed key warns, an empty value is stripped silently, and removed keys are stripped from the base and from every override layer before the layers merge. The package root no longer exports `intercept`, `evaluateRequires`, the extract grammar, the policy, requires, workflow and doctor schemas and their types. A manifest that relied on `workflows:` to enforce review before merge no longer has that gate. The shell-model hardening of this cycle (tasks 9238cc27, e927e903, cfb6b390, 7d4abf84, 25c56a0f, b647da7f, 699aafd8; #642, #645 to #647, #649, #654, #656) and the invisible-character sanitiser (task d9ab2d36, #637) left with their code.
|
|
36
|
+
- Pause, approvals and signing (tasks 973163a4, 21a2c508, 2ef35911; #705 to #707): `harness pause` and `harness resume`, the pause sentinel and hook-side pause check, the approval-signing key projection (`SOLUTION_VERDICT_SIGNING_KEY` is no longer projected onto the `grounding-mcp` entry; an operator-declared `env` value still passes through), pending-approval staging, and the operator-state-isolation integration suite with its CI step. The runbook is now `docs/okf/gate-kill-switch.md`. A leftover `harness.generated/.harness-paused` file is ignored. A `grounding-mcp` registration made by an earlier release still carries the signing variable; that is harmless for the default harness home, and `claude mcp remove --scope user grounding-mcp` followed by the `claude mcp add-json` line `harness doctor` prints clears it.
|
|
37
|
+
- Ledger client, git-context, audit and session-export (tasks b5321c53, 8ad81de7, 0231f90f, 82169840, 804007ef; #736 to #740): `harness audit`, `harness session-export`, the `audit` manifest key, the ledger client and `src/runtime/git-context.ts`, and the doctor scan for rogue evidence-ledger directories with `--rm-rogue-ledgers`, `--yes` and `rogueLedgerDbs` (the grounding ledger path is expanded to an absolute path and `harness apply` warns on a literal-tilde env value; remove a leftover `<dir>/~` by hand with `rm -rf`). harness only projects the ledger path onto the `grounding-mcp` entry and reads no ledger rows; read old `policy_decision:` rows with the evidence-ledger CLI or the grounding-mcp `ledger_summary` tool. Package-root exports removed: `encodeLedgerContent`, `decodeLedgerContent`, `PolicyDecisionPayload`, `parseDurationSeconds`, `InvalidDurationError`, `queryLedgerByTag`, the ledger types, `AuditSchema`, `RedactRuleSchema` and their types. The git-context fixes made earlier in this cycle (tasks 51bfba5a, b56d95d3, 323bd5b9; #641, #653, #655) went with the module, except the bounded reads that stay (see Security).
|
|
38
|
+
- `harness smoke` (task 488b108d, #700), with `--claude-bin` and the `CLAUDE_BIN` variable; there is no replacement.
|
|
39
|
+
- Session-start producers and branch-protection producers (tasks f3f15290, a4d8adc5; #658, #661): the `harness session-start` group (`preflight`, `toolchain-parity`, `stale-base-check`, `branch-check`), the top-level `harness preflight`, `harness approve branch-protection`, the manifest keys `session_start_preflight`, `toolchain_parity`, `stale_base_check`, `grounding.evidence_ledger.retention_days` and `grounding.policies_source`, the generated `git-preflight` and `require-preflight-*` hooks, the doctor toolchain-parity comparison, the `branch:non-protected` ledger tag, the branch-protection override marker and the hook's session-id requirement. `ToolchainParitySchema` and its type left the package root. Do instead: delete those hooks, policies and blocks from your manifest and run `harness pack reseed branch-protection`.
|
|
40
|
+
- The runtime-reality hook (`harness pack hook runtime-reality`; task d30564d2, #747), its dependency `@lannguyensi/runtime-reality-checker`, `scripts/runtime-reality-docker-probe.mjs` and the unused `chalk` and `execa` dependencies. A manifest hook that still calls it loads; `harness validate` warns only for the plain `KEY=value ... harness pack hook runtime-reality` form, and any other form (quoted values, a binary path, `npx`, a chain) loads without a warning and fails at run time with "unknown command" (exit 64, non-blocking). Delete such hooks by hand and re-run apply.
|
|
41
|
+
- Dead code and orphan modules (tasks 6f91e68e, 3b5f6992; #746, #750): unused Codex and opencode adapter helpers (`extractShellCommand`, `SHELL_ALIASES`, the ignored `cwd` option of `RunCodexCheckOptions`, which narrows `DoctorOptions.codexCheckOptions`), the re-exports of `CODEX_MANAGED_SOURCE_PREFIX` and `validateCodexManagedConfig` from `dist/cli/apply/index.js` (their definitions stay in `install-codex-config.ts`), and the modules `src/io/display-path.ts`, `src/io/invisible-characters.ts` and `src/runtime/index.ts`. The package has no `exports` map, so the `dist/` paths `dist/io/display-path.js`, `dist/io/invisible-characters.js` and `dist/runtime/index.js` are gone; the package root never re-exported them. Generated output is byte-identical.
|
|
42
|
+
|
|
43
|
+
### Changed
|
|
44
|
+
|
|
45
|
+
- The kill switch covers both runtimes (tasks 1f6ec6c9, d8e55ad8, d7606c82, 7ae7e49f, 9bbd9ed8, 0b4ef8ca, c580d289, d88fa968, e2089759; #704, #710, #712, #715, #719, #723, #724, #727, #730). `harness gate disable` and `harness gate enable` take `--runtime claude|codex` (default `claude`) and `--config <path>`. With `--runtime codex`, `disable --matcher <pattern>` neutralises in place the harness-owned hook units of the managed block in `~/.codex/config.toml` whose `matcher` contains the pattern (the `hooks = [...]` line becomes `hooks = []`, so Codex keeps every other hook at the position its trust was recorded for), after a backup and a snapshot `harness.gate-disable-codex.<ISO>.json` beside the config. `enable --runtime codex` restores the units byte-identically (sha-checked), exits non-zero while a unit stays disabled or missing, and retires a spent snapshot (`*.restored.json`, or `*.superseded.json` once a later install re-rendered the block). There is one live snapshot per config: a second disable merges into it, a config edited since needs `--force` unless skipping the units that are back rebuilds the pre-disable bytes, and a snapshot that cannot be restored refuses with the ways out. `harness apply --runtime codex --install` retires every live snapshot of the config it rewrites and writes a `# harness block generation: <sha256>` comment under the BEGIN fence, which `gate enable`, `gate disable` and `harness doctor` use to supersede a snapshot taken before a re-render, whatever link it sits beside. Snapshot ownership is by directory entry (a case variant of the config on a case-folding volume is the same entry, a hard link or second name is foreign and named with its restore command); `..` after a directory link in a config path or link text resolves the way the kernel resolves it (`--config`, `--codex-config` and symlinked configs, also with `~` spellings); and every command a Codex message prints is shell-quoted and repeats the `--config` or `--codex-config` the call named. The Codex escape hatch in the branch-protection pack text names `harness gate disable --runtime codex`.
|
|
46
|
+
- branch-protection asks git for the branch (task a4d8adc5, #658). Every target (`Write`, `Edit`, `MultiEdit`, `NotebookEdit`, and the paths of a Codex `apply_patch` header; the event cwd otherwise) is judged twice, as written and as the operating system resolves it (symlinks followed), and the hook refuses when either judgment refuses or cannot answer. For the nearest existing directory it runs `git -C <dir> symbolic-ref -q HEAD` (no shell, `GIT_*` variables removed, 2000 ms per call, 3000 ms overall) and refuses when git names a protected branch (compared case-insensitively) or cannot answer, naming git's first stderr line; outside every repository and on a detached HEAD it allows. The generated Codex command carries `--runtime codex` and a Codex refusal exits 2 with the reason on stderr. The hook no longer yields to a pause, refuses a malformed event, and its hook budget drops from 15000 to 5000 ms.
|
|
47
|
+
- A manifest that still carries a removed key or pack name loads with a warning instead of failing (task a4d8adc5, #658): `harness validate`, `harness doctor`, `harness apply` and `harness export` print the warnings (the last on stderr, one `warning:` line each, YAML or JSON on stdout unchanged; task f45dd0a0, #684), `harness validate --strict` fails on them, and a key that was never valid still fails the load. The `policy_packs` error of `harness apply` and the asset errors of `harness add` name the index as written after a removed pack was dropped (task 4ee45b99, #689).
|
|
48
|
+
- Init templates and wizard: the `solo` and `team` templates now ship the `branch-protection` pack, so every profile except `minimal` carries it, and no template writes policies, `harness policy intercept` hooks or `harness record` remedies (tasks e2d5e87e, bcdcde36; #664, #695). The custom composer no longer wires grounding-mcp for policies. Docs lead with the `minimal` manifest plus branch-protection (#659).
|
|
49
|
+
- `harness apply --runtime opencode` words its hook warning around the consequence: it names the hooks that are not projected (the first three, then a count), says they do not run under opencode, and says edits on protected branches are NOT blocked when the branch-protection hook is among them; the `memory.router` warning is gone (task 1297978a, #749).
|
|
50
|
+
- Generated text and docs no longer name removed gates (tasks acb0698d, 666f9cda, 7adc3fd7, 2ef35911, 852cbdc5; #690, #707, #745, #751, #752, #753): the `minimal` template header, the generated `opencode.json` header, the `docs/examples/full-manifest.yaml` comments and the help of `harness init --probe`, `harness apply --merge` and `harness uninstall` describe what the code does, and `harness uninstall` and `harness migrate-home` call `.understanding-gate/` leftover state. `harness init --interactive` no longer prints a wrong multi-runtime note about `harness.lock`.
|
|
51
|
+
- Loader wording (tasks 33fe3b24, 8026fe0b; #725, #733): an override layer whose value is `null` is skipped with a warning that it "has no value to merge", the removed hook-field warning says the field is ignored, and an override layer whose root is a scalar or a list fails through a new `OverrideLayerShapeError` (a subclass of `OverrideMergeError`, mapped by the CLI to the same exit 66 and message), so `harness diff --since <ref>` names the layer file on the git-ref side. A symlink chain whose link text ends in `/` no longer walks a same-named file as the target.
|
|
52
|
+
- Internal: one shell-quoting helper (`src/cli/shell-quote.ts`), one Claude settings `hooks`-shape parser (`parseSettingsHooks`) and one `goldenEnvelope` test helper (task 507c58e0, #731); the project-name helpers are imported from `src/io/project-name.ts` (task 2f4fbd61, #735); the command groups moved out of `src/cli/index.ts` into per-group registration files, completing the split begun in task 32d84940 (task 87b419dc, #652), with help output byte-identical; and the claude-mcp doctor tests are hermetic (task e345db80, #703).
|
|
53
|
+
- `zod` moves from 3.25.76 to 4.6.7 (`^4.6.7`, the dependency itself; #744). The manifest accept-set is unchanged and `parseManifest` output is byte-identical, but `ManifestParseError.issues` is now `ManifestIssue[]`, a new exported type (`path: (string | number)[]`, `message: string`, `code: string`) that replaces `z.ZodIssue` for library consumers, `PolicyPackConfigIssue.code` is now `z.core.$ZodIssue["code"]`, zod-default issue codes and texts change where zod 4 renamed them (for example `invalid_enum_value` becomes `invalid_value` and "Required" becomes "Invalid input: expected <type>, received undefined"), and `hooks[].budget_ms`, `tools.mcp[].health.timeout_ms` and `memory.retention.staleness_days` reject values past `Number.MAX_SAFE_INTEGER`. `harness validate` diagnostics, `--json` reports and exit codes are unchanged.
|
|
54
|
+
|
|
55
|
+
### Fixed
|
|
56
|
+
|
|
57
|
+
- `harness gate enable` and `harness gate disable` (Claude): one live `harness.gate-disable.*.json` snapshot per settings file, so a repeated disable merges into it, one enable restores everything and no longer answers "already matches the pre-disable state" with exit 0 while a group is still missing, and `--force` never splices a group in twice (task 0a4debd1, #711). A symlinked `settings.json` is followed to its file hop by hop the way the kernel does and written through, with the backup and snapshot beside the file (task 289c6c69, #717).
|
|
58
|
+
- An empty or comment-only override layer file is skipped with a warning instead of erasing the manifest and making every hook refuse every edit (task 1692a14d, #699), and removed hook fields are stripped from the base and from each layer before the override merge, so a list-shaped `bash_match` in one source no longer fails the load (task 785c555e, #714).
|
|
59
|
+
- branch-protection delivers its refusal whole: a large manifest load error no longer cuts the Claude Code deny envelope at the pipe buffer (every block detail is cut at 4096 UTF-8 bytes with a `[truncated N bytes]` marker and the entry point waits at most 500 ms for stdout and stderr to drain; task 9f70909d, #701), a closed stderr or stdout reader no longer turns a block into exit 1 (task 3ea8f02e, #702), and a Claude Code block exits 2 with the reason on stderr when its envelope cannot be written (task 32f0f5ae, #718).
|
|
60
|
+
- `harness uninstall --restore-from` refuses an `harness.uninstall.<TS>.json` snapshot record and any hand-edited or partial copy of one, while a settings backup restores as before (tasks 852cbdc5, bb7f4c07; #690, #713).
|
|
61
|
+
- `harness doctor --target codex` warns on a hook command that calls a removed verb (counted once when a manifest warning already counts it; task 8159fc94, #675); the hint under a `policy_packs[].min_version` warning says a builtin pack's floor cannot be enforced (task c09c8c38, #673); and the "not registered with the claude CLI" hint leads with the exact `claude mcp add-json --scope user <name> '<json>'` line (task 114961db, #708).
|
|
62
|
+
|
|
63
|
+
### Security
|
|
64
|
+
|
|
65
|
+
- `vite` (dev) 8.0.16 to 8.3.5 with `rolldown`, lockfile only, closing GHSA-587h-7wmj-h5pm, GHSA-r825-w8mm-5pxw and GHSA-698v-4r3x-3vcv (#734).
|
|
66
|
+
- `vitest` (dev) and its `@vitest/*` packages 4.1.11 to 4.1.12, lockfile only, closing GHSA-qxg6-89mg-rqv8 and GHSA-xp26-3454-mjgp (#741).
|
|
67
|
+
- `smol-toml` 1.8.0 to 1.9.0 (pin `~1.9.0`) closes GHSA-r4xh-jqrq-34v2 (quadratic-time `parse()`), and `source-map-js` (dev) 1.2.1 to 1.2.2 closes GHSA-68fv-2mgg-jv7q; the new parser refuses a malformed `[[table]` header that 1.8.0 read and accepts a leading BOM (#643).
|
|
68
|
+
- `zod` 3.25.76 to 4.6.7 closes GHSA-mrhx-c7xc-m3w5 (memory exhaustion validating oversized constrained collections), see Changed (#744).
|
|
69
|
+
- Every by-path read on a hook path is one bounded, non-blocking descriptor read (`O_NONBLOCK`, type and size from `fstat`, 1 MiB cap for a manifest or layer, 32 MiB for `~/.claude.json`), so a FIFO, device, directory or oversized file planted where a hook reads no longer holds the hook past its budget, which the runtime reads as an allow (tasks 46434fbf, 323bd5b9; #639, #641).
|
|
70
|
+
- Hook-path writes open non-blocking and check the descriptor (`src/io/write-regular-file.ts`), so a FIFO with no reader no longer holds a write past the hook budget, and the create-only lock target no longer writes through a dangling symlink (task b56d95d3, #653).
|
|
71
|
+
|
|
72
|
+
PRs with fix or feature commits in this release: #637, #639, #641, #642, #643, #644, #645, #646, #647, #649, #650, #651, #653, #654, #655, #656, #658, #660, #661, #662, #663, #664, #665, #666, #668, #669, #673, #675, #678, #679, #680, #681, #684, #688, #689, #690, #691, #692, #693, #694, #695, #696, #699, #700, #701, #702, #704, #705, #706, #708, #711, #712, #713, #714, #715, #717, #718, #719, #721, #723, #724, #725, #726, #727, #728, #730, #734, #741, #744, #749, #752.
|
|
73
|
+
|
|
10
74
|
## [0.64.0] - 2026-10-05
|
|
11
75
|
|
|
12
76
|
### Upgrade notes
|
package/README.md
CHANGED
|
@@ -10,78 +10,84 @@ hook scripts, per-project overrides. No single file answers "what can
|
|
|
10
10
|
this agent do right now, and why is it set up that way?" `harness`
|
|
11
11
|
puts all of it in one zod-validated YAML manifest you read, validate,
|
|
12
12
|
and diff; generates the config the agent runtime loads from it; and at
|
|
13
|
-
runtime blocks tool calls
|
|
14
|
-
|
|
15
|
-
describe what an agent is configured to use; `harness` decides what
|
|
16
|
-
is allowed to do, under the exact context
|
|
13
|
+
runtime blocks tool calls through one enforcing gate, branch-protection.
|
|
14
|
+
The branch-protection gate asks git and records nothing. Most config
|
|
15
|
+
tools describe what an agent is configured to use; `harness` decides what
|
|
16
|
+
it is allowed to do, under the exact context.
|
|
17
17
|
|
|
18
18
|
## Key concepts
|
|
19
19
|
|
|
20
20
|
| Term | What it is |
|
|
21
21
|
|------|-----------|
|
|
22
|
-
| **manifest** | The one YAML file (`harness.yaml`) where you declare everything: tools,
|
|
22
|
+
| **manifest** | The one YAML file (`harness.yaml`) where you declare everything: grounding, tools, memory, hooks, policy packs. |
|
|
23
23
|
| **apply** | `harness apply` renders the manifest into the config files the agent runtime actually reads. |
|
|
24
|
-
| **
|
|
25
|
-
| **
|
|
26
|
-
| **
|
|
27
|
-
| **policy pack** | A reusable bundle of policies, hooks, and templates shipped under one name and enabled with a single manifest key. |
|
|
24
|
+
| **gate switch** | `harness gate disable` / `harness gate enable`: the operator kill switch. Disable removes the hook groups whose `matcher` substring-matches `--matcher <substring>` from `~/.claude/settings.json` (with `--runtime codex`, neutralises the matching units of the managed block in `~/.codex/config.toml`) and keeps a snapshot; enable restores them. |
|
|
25
|
+
| **hook** | A script the agent runtime runs at a lifecycle event (session start, before every tool call, ...). How gates get wired in. |
|
|
26
|
+
| **policy pack** | A bundle of hooks and instructions shipped under one name and enabled with a single manifest key (`policy_packs[]`, via `harness pack add <name>`). |
|
|
28
27
|
|
|
29
28
|
## Quick start
|
|
30
29
|
|
|
31
30
|
```bash
|
|
32
|
-
npm i -g @lannguyensi/harness
|
|
33
|
-
harness init
|
|
31
|
+
npm i -g @lannguyensi/harness # Node 20 or newer
|
|
32
|
+
harness init # minimal manifest, no policies
|
|
33
|
+
harness pack add branch-protection # the one recommended pack
|
|
34
|
+
harness validate
|
|
35
|
+
harness apply --target ~/.claude/settings.json --merge # Claude Code; then restart it
|
|
36
|
+
harness apply --runtime codex --install # Codex, if you use it; then restart it
|
|
34
37
|
```
|
|
35
38
|
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
39
|
+
From then on, while an agent works in a repository on `master`, `main`
|
|
40
|
+
or `develop`, its edits there through the file-editing tools (`Write`
|
|
41
|
+
and `Edit` under Claude Code, `apply_patch` under Codex) are refused
|
|
42
|
+
until it cuts a feature branch (`git checkout -b <feature>`). Codex runs
|
|
43
|
+
the new hooks only once you trust them in its startup hook review. The
|
|
44
|
+
step-by-step version, with what each command writes:
|
|
45
|
+
[`docs/quickstart.md`](docs/quickstart.md). Full operator walkthrough:
|
|
46
|
+
[`docs/for-humans.md`](docs/for-humans.md) (it starts from the wizard
|
|
47
|
+
and the `solo` template).
|
|
48
|
+
|
|
49
|
+
Upgrading? A manifest that still names a pack or key removed in 1.0.0
|
|
50
|
+
loads with a warning and the entry is ignored; see
|
|
51
|
+
[`docs/CLI.md#removed-keys-packs-and-commands`](docs/CLI.md#removed-keys-packs-and-commands).
|
|
42
52
|
|
|
43
53
|
## Usage
|
|
44
54
|
|
|
45
|
-
|
|
46
|
-
|
|
55
|
+
See the gate decide without starting an agent: from inside a
|
|
56
|
+
repository, pipe a sample `Write` event into the hook Claude Code runs
|
|
57
|
+
before every `Write` or `Edit`.
|
|
47
58
|
|
|
48
59
|
```bash
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
--tool-args '{"prNumber":42}'
|
|
60
|
+
echo '{"session_id":"demo","tool_name":"Write","tool_input":{"file_path":"README.md"}}' \
|
|
61
|
+
| harness pack hook branch-protection
|
|
52
62
|
```
|
|
53
63
|
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
64
|
+
On a protected branch it prints a deny decision naming the branch and
|
|
65
|
+
the protected list; on a feature branch it allows the edit and says why
|
|
66
|
+
on stderr. The protected-branch list, the agent-facing message and the
|
|
67
|
+
operator controls are documented in
|
|
68
|
+
[`docs/policy-packs/branch-protection.md`](docs/policy-packs/branch-protection.md).
|
|
59
69
|
|
|
60
70
|
## Documentation
|
|
61
71
|
|
|
62
|
-
- [`docs/for-humans.md`](docs/for-humans.md): operator path, install through first
|
|
72
|
+
- [`docs/for-humans.md`](docs/for-humans.md): operator path, install through the first refusing gate, diagnostics cheat sheet.
|
|
63
73
|
- [`docs/for-agents.md`](docs/for-agents.md): agent integration contract, workflow lifecycle, CLI cheat sheet by side-effect class.
|
|
64
|
-
- [`docs/quickstart.md`](docs/quickstart.md): five-minute bare-command path
|
|
74
|
+
- [`docs/quickstart.md`](docs/quickstart.md): five-minute bare-command path to the `branch-protection` gate.
|
|
65
75
|
- [`docs/init-interactive.md`](docs/init-interactive.md): the `harness init --interactive` wizard, walkthrough and limitations.
|
|
66
76
|
- [`docs/CLI.md`](docs/CLI.md): every CLI verb, grouped by purpose.
|
|
67
|
-
- [`docs/
|
|
68
|
-
- [`docs/writing-custom-policies.md`](docs/writing-custom-policies.md): tripwires, worked recipes, and the policy field reference.
|
|
69
|
-
- [`docs/runtime-reality-hook.md`](docs/runtime-reality-hook.md): blocking destructive runtime commands when live process state has drifted from what the docs expect.
|
|
70
|
-
- [`docs/policy-packs/README.md`](docs/policy-packs/README.md): the built-in policy packs (`understanding-before-execution`, `branch-protection`, `solution-acceptance`, `post-merge-gate`).
|
|
77
|
+
- [`docs/policy-packs/README.md`](docs/policy-packs/README.md): the built-in policy pack (`branch-protection`).
|
|
71
78
|
- [`docs/uninstall.md`](docs/uninstall.md): the single-command teardown, dry-run by default.
|
|
72
79
|
- [`docs/examples/full-manifest.yaml`](docs/examples/full-manifest.yaml): a schema-coverage reference (not a runnable config; its header explains why).
|
|
73
|
-
- [`docs/ARCHITECTURE.md`](docs/ARCHITECTURE.md): manifest schema, file layout, CLI surface
|
|
80
|
+
- [`docs/ARCHITECTURE.md`](docs/ARCHITECTURE.md): the architecture reference: manifest schema, file layout, CLI surface.
|
|
74
81
|
- [`docs/VISION.md`](docs/VISION.md): why a declarative control plane, not more individual tools.
|
|
75
|
-
- [`docs/ROADMAP.md`](docs/ROADMAP.md): the phase-by-phase plan and the acceptance criteria each phase shipped against.
|
|
76
82
|
- [`CHANGELOG.md`](CHANGELOG.md): what shipped in each version.
|
|
77
83
|
|
|
78
84
|
### Related projects
|
|
79
85
|
|
|
80
|
-
- [`agent-grounding`](https://github.com/LanNguyenSi/agent-grounding): evidence-ledger
|
|
86
|
+
- [`agent-grounding`](https://github.com/LanNguyenSi/agent-grounding): evidence-ledger and claim surfaces outside harness; `grounding-mcp` is the MCP server harness can register and point at the ledger path (`EVIDENCE_LEDGER_DB`), and harness itself queries nothing there.
|
|
81
87
|
- [`agent-memory`](https://github.com/LanNguyenSi/agent-memory): the memory surfaces the control plane inventories.
|
|
82
88
|
- [`agent-tasks`](https://github.com/LanNguyenSi/agent-tasks): MCP-registered task platform whose registration and health appear in `harness describe`.
|
|
83
|
-
- [`agent-preflight`](https://github.com/LanNguyenSi/agent-preflight): local preflight validator
|
|
84
|
-
- [`codebase-oracle`](https://github.com/LanNguyenSi/codebase-oracle): opt-in MCP for multi-repo RAG search;
|
|
89
|
+
- [`agent-preflight`](https://github.com/LanNguyenSi/agent-preflight): a standalone local preflight validator an operator can call directly or from a custom hook.
|
|
90
|
+
- [`codebase-oracle`](https://github.com/LanNguyenSi/codebase-oracle): opt-in MCP for multi-repo RAG search; declare it with `harness add mcp codebase-oracle --command codebase-oracle,mcp`, then register it with Claude Code using the `claude mcp add-json` command `harness doctor` prints.
|
|
85
91
|
- [`agent-dx`](https://github.com/LanNguyenSi/agent-dx): ships `git-batch-cli`, a day-to-day tool whose inventory appears in `harness describe`.
|
|
86
92
|
|
|
87
93
|
## Development and contributing
|
|
@@ -98,10 +104,8 @@ steps).
|
|
|
98
104
|
|
|
99
105
|
## Status
|
|
100
106
|
|
|
101
|
-
The current release is `
|
|
102
|
-
|
|
103
|
-
[`docs/ROADMAP.md`](docs/ROADMAP.md), and what shipped in each version
|
|
104
|
-
is in [`CHANGELOG.md`](CHANGELOG.md).
|
|
107
|
+
The current release is `v1.0.0`. What shipped in each version is in
|
|
108
|
+
[`CHANGELOG.md`](CHANGELOG.md).
|
|
105
109
|
|
|
106
110
|
## License
|
|
107
111
|
|
package/dist/cli/add/index.js
CHANGED
|
@@ -6,8 +6,8 @@ import { resolveHomeDir } from "../../runtime/home-dir.js";
|
|
|
6
6
|
import { withFileLock } from "../../io/lock.js";
|
|
7
7
|
import { unifiedDiff } from "../../io/patch.js";
|
|
8
8
|
import { formatValidationErrors, validateBeforeWrite, } from "../../io/validate-before-write.js";
|
|
9
|
-
import {
|
|
10
|
-
import {
|
|
9
|
+
import { parseManifestWithWarnings } from "../../schema/index.js";
|
|
10
|
+
import { remapDiagnosticPath } from "../../schema/removed-keys.js";
|
|
11
11
|
import { runAssetChecks } from "../validate/checks.js";
|
|
12
12
|
import { fmtDiagnostic } from "../validate/types.js";
|
|
13
13
|
import { EX_FAIL, EX_NOINPUT, HarnessExitError } from "../exit-codes.js";
|
|
@@ -44,35 +44,31 @@ export async function add(action, opts = {}) {
|
|
|
44
44
|
// Asset gate — surfaces hook +x failures, missing required CLIs, etc.
|
|
45
45
|
// We use parseManifest (not the result of validateBeforeWrite) so we have a
|
|
46
46
|
// typed Manifest for runAssetChecks. defaults flow through. Both this and
|
|
47
|
-
// the baseline below take the
|
|
48
|
-
//
|
|
49
|
-
//
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
//
|
|
53
|
-
//
|
|
54
|
-
// parseManifest alone would pass and withDerivedPolicies would fail is
|
|
55
|
-
// known to exist right now (review round 3, F2). The derived view is
|
|
56
|
-
// kept as a parity pin against validate, and to stay correct the moment
|
|
57
|
-
// a future check does read manifest.policies at error severity.
|
|
58
|
-
const manifest = withDerivedPolicies(parseManifest(parseYaml(proposed)));
|
|
59
|
-
// gitIgnoreProbe stays null: the knob-ignored check is warning-only and
|
|
60
|
-
// this gate consumes errors, so the git spawn would be wasted work.
|
|
47
|
+
// the baseline below take the manifest exactly as the operator wrote it,
|
|
48
|
+
// the same view `harness validate` checks, so the gate here and validate
|
|
49
|
+
// cannot disagree about what "declared" means.
|
|
50
|
+
const proposedParsed = parseManifestWithWarnings(parseYaml(proposed));
|
|
51
|
+
const manifest = proposedParsed.manifest;
|
|
52
|
+
// Diagnostics index the parsed manifest, where a dropped pack no
|
|
53
|
+
// longer holds its slot: name the index as written, like `harness validate`.
|
|
61
54
|
const proposedErrors = runAssetChecks(manifest, {
|
|
62
55
|
homeDir: opts.homeDir,
|
|
63
|
-
|
|
64
|
-
|
|
56
|
+
})
|
|
57
|
+
.filter((d) => d.severity === "error")
|
|
58
|
+
.map((d) => ({ ...d, path: remapDiagnosticPath(d.path, proposedParsed.indexMaps) }));
|
|
65
59
|
// Compute a baseline error set from the original manifest so that
|
|
66
60
|
// pre-existing asset problems unrelated to this add do not block it.
|
|
67
61
|
// If the original manifest cannot be parsed (broken base), fall back to
|
|
68
62
|
// blocking on all proposed errors so the gate never weakens on a broken base.
|
|
69
63
|
let baselineKeys = new Set();
|
|
70
64
|
try {
|
|
71
|
-
const
|
|
65
|
+
const baselineParsed = parseManifestWithWarnings(parseYaml(original));
|
|
66
|
+
const baselineManifest = baselineParsed.manifest;
|
|
72
67
|
const baselineErrors = runAssetChecks(baselineManifest, {
|
|
73
68
|
homeDir: opts.homeDir,
|
|
74
|
-
|
|
75
|
-
|
|
69
|
+
})
|
|
70
|
+
.filter((d) => d.severity === "error")
|
|
71
|
+
.map((d) => ({ ...d, path: remapDiagnosticPath(d.path, baselineParsed.indexMaps) }));
|
|
76
72
|
baselineKeys = new Set(baselineErrors.map((d) => `${d.severity}|${d.path}|${d.message}`));
|
|
77
73
|
}
|
|
78
74
|
catch {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/cli/add/index.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,MAAM,SAAS,CAAC;AAC9B,OAAO,KAAK,IAAI,MAAM,WAAW,CAAC;AAClC,OAAO,EAAE,KAAK,IAAI,SAAS,EAAE,MAAM,MAAM,CAAC;AAC1C,OAAO,EAAE,eAAe,EAAE,MAAM,0BAA0B,CAAC;AAC3D,OAAO,EAAE,cAAc,EAAE,MAAM,2BAA2B,CAAC;AAC3D,OAAO,EAAE,YAAY,EAAE,MAAM,kBAAkB,CAAC;AAChD,OAAO,EAAE,WAAW,EAAE,MAAM,mBAAmB,CAAC;AAChD,OAAO,EACL,sBAAsB,EACtB,mBAAmB,GACpB,MAAM,mCAAmC,CAAC;AAC3C,OAAO,EAAE,
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/cli/add/index.ts"],"names":[],"mappings":"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"}
|
|
@@ -9,7 +9,7 @@ export interface DerivedHook {
|
|
|
9
9
|
* settings.json `timeout` is documented in seconds, NOT milliseconds
|
|
10
10
|
* like the manifest's `budget_ms`). apply's `hookTimeoutSeconds`
|
|
11
11
|
* (generate-settings.ts) converts `budget_ms` -> seconds via
|
|
12
|
-
* `Math.ceil(budget_ms / 1000)` (with a
|
|
12
|
+
* `Math.ceil(budget_ms / 1000)` (with a 1s floor); the
|
|
13
13
|
* consumer of this field (`buildHookEntry` in ./index.ts) applies the
|
|
14
14
|
* inverse `* 1000` when writing it back into `budget_ms`, so the
|
|
15
15
|
* adopt→apply round-trip stays drift-free by construction for any
|
|
@@ -84,7 +84,7 @@ export declare function parseSettingsMcpServers(raw: unknown): DerivedMcp[];
|
|
|
84
84
|
* dead at runtime and is surfaced only as a warning, never as drift.
|
|
85
85
|
*/
|
|
86
86
|
export declare function projectRegistryMcpServers(servers: Record<string, unknown>): DerivedMcp[];
|
|
87
|
-
export declare function manifestMcpProjection(manifest: Manifest, homeDir?: string
|
|
87
|
+
export declare function manifestMcpProjection(manifest: Manifest, homeDir?: string): DerivedMcp[];
|
|
88
88
|
export type McpDriftReason = "new" | "modified";
|
|
89
89
|
export interface McpDriftEntry {
|
|
90
90
|
entry: DerivedMcp;
|
package/dist/cli/adopt/derive.js
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { EVIDENCE_LEDGER_DB_ENV, GROUNDING_MCP_SERVER_NAME,
|
|
1
|
+
import { EVIDENCE_LEDGER_DB_ENV, GROUNDING_MCP_SERVER_NAME, groundingLedgerEnvValue, } from "../apply/generate-settings.js";
|
|
2
2
|
const KNOWN_EVENTS = new Set([
|
|
3
3
|
"SessionStart",
|
|
4
4
|
"UserPromptSubmit",
|
|
@@ -158,7 +158,7 @@ export function parseSettingsMcpServers(raw) {
|
|
|
158
158
|
export function projectRegistryMcpServers(servers) {
|
|
159
159
|
return projectMcpServersRecord(servers);
|
|
160
160
|
}
|
|
161
|
-
export function manifestMcpProjection(manifest, homeDir
|
|
161
|
+
export function manifestMcpProjection(manifest, homeDir) {
|
|
162
162
|
const out = manifest.tools.mcp.map(toDerivedMcp);
|
|
163
163
|
// Mirror apply's grounding projection (generate-settings.ts,
|
|
164
164
|
// projectGroundingEnv): apply synthesizes EVIDENCE_LEDGER_DB onto the
|
|
@@ -177,23 +177,6 @@ export function manifestMcpProjection(manifest, homeDir, generatedDir) {
|
|
|
177
177
|
[EVIDENCE_LEDGER_DB_ENV]: groundingLedgerEnvValue(manifest, homeDir),
|
|
178
178
|
};
|
|
179
179
|
}
|
|
180
|
-
// Exact same mirror for apply's SOLUTION_VERDICT_SIGNING_KEY projection
|
|
181
|
-
// (generate-settings.ts, projectSigningKeyEnv; task 03a917fd/H1b) so an
|
|
182
|
-
// adopt after an apply does not report phantom drift on grounding-mcp
|
|
183
|
-
// for this key either. Same operator-override semantics as the
|
|
184
|
-
// EVIDENCE_LEDGER_DB mirror above (only fill in when absent), plus
|
|
185
|
-
// `projectSigningKeyEnv`'s own extra rule: no `generatedDir` passed in
|
|
186
|
-
// -> no projection, since there is nothing correct to derive without
|
|
187
|
-
// it (see GenerateSettingsExtras.generatedDir's doc comment).
|
|
188
|
-
if (grounding !== undefined &&
|
|
189
|
-
groundingManifestEntry?.enabled !== false &&
|
|
190
|
-
generatedDir !== undefined &&
|
|
191
|
-
!grounding.env?.[SOLUTION_VERDICT_SIGNING_KEY_ENV]) {
|
|
192
|
-
grounding.env = {
|
|
193
|
-
...(grounding.env ?? {}),
|
|
194
|
-
[SOLUTION_VERDICT_SIGNING_KEY_ENV]: signingKeyEnvValue(generatedDir),
|
|
195
|
-
};
|
|
196
|
-
}
|
|
197
180
|
return out;
|
|
198
181
|
}
|
|
199
182
|
function toDerivedMcp(m) {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"derive.js","sourceRoot":"","sources":["../../../src/cli/adopt/derive.ts"],"names":[],"mappings":"AACA,OAAO,EACL,sBAAsB,EACtB,yBAAyB,EACzB,
|
|
1
|
+
{"version":3,"file":"derive.js","sourceRoot":"","sources":["../../../src/cli/adopt/derive.ts"],"names":[],"mappings":"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"}
|
|
@@ -5,7 +5,7 @@ export interface AdoptOptions {
|
|
|
5
5
|
/** Optional injection point for tests; defaults to readline against stdin. */
|
|
6
6
|
prompt?: (message: string) => Promise<string>;
|
|
7
7
|
/**
|
|
8
|
-
* Test seam
|
|
8
|
+
* Test seam: overrides the
|
|
9
9
|
* `process.stdin.isTTY` read that decides whether the default
|
|
10
10
|
* confirmation prompt may run, so the non-TTY refusal can be
|
|
11
11
|
* exercised hermetically.
|
package/dist/cli/adopt/index.js
CHANGED
|
@@ -11,7 +11,6 @@ import { parseManifest } from "../../schema/index.js";
|
|
|
11
11
|
import { applyAdd } from "../add/mutate.js";
|
|
12
12
|
import { EX_FAIL, EX_NOINPUT, HarnessExitError } from "../exit-codes.js";
|
|
13
13
|
import { readTopLevelMcpServers, resolveClaudeUserRegistryPath } from "../../io/claude-mcp.js";
|
|
14
|
-
import { resolveGeneratedDir } from "../../io/generated-dir.js";
|
|
15
14
|
import { computeDrift, computeMcpDrift, manifestMcpProjection, manifestProjection, parseSettingsHooks, parseSettingsMcpServers, projectRegistryMcpServers, synthesizeName, } from "./derive.js";
|
|
16
15
|
const DEFAULT_BASENAME = "harness.yaml";
|
|
17
16
|
const LOCK_BASENAME = ".harness.lock";
|
|
@@ -66,17 +65,7 @@ export async function adopt(settingsPath, opts = {}) {
|
|
|
66
65
|
const registryPath = opts.registryPath ?? resolveClaudeUserRegistryPath({ env: opts.env });
|
|
67
66
|
const { servers: registryServers, error: registryReadError } = readTopLevelMcpServers(registryPath);
|
|
68
67
|
const registryMcp = projectRegistryMcpServers(registryServers);
|
|
69
|
-
|
|
70
|
-
// interactive.ts resolve it, so manifestMcpProjection's
|
|
71
|
-
// SOLUTION_VERDICT_SIGNING_KEY mirror (derive.ts) compares against the
|
|
72
|
-
// real key path. homeDir is left as-is (not previously threaded through
|
|
73
|
-
// here for the EVIDENCE_LEDGER_DB mirror either -- out of this task's
|
|
74
|
-
// scope to change).
|
|
75
|
-
const generatedDir = resolveGeneratedDir({
|
|
76
|
-
...(opts.homeDir !== undefined ? { homeDir: opts.homeDir } : {}),
|
|
77
|
-
manifestPath,
|
|
78
|
-
});
|
|
79
|
-
const mcpProjection = manifestMcpProjection(manifest, undefined, generatedDir);
|
|
68
|
+
const mcpProjection = manifestMcpProjection(manifest);
|
|
80
69
|
const mcpDrift = computeMcpDrift(registryMcp, mcpProjection);
|
|
81
70
|
if (drift.length === 0 && mcpDrift.length === 0) {
|
|
82
71
|
return {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/cli/adopt/index.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,MAAM,SAAS,CAAC;AAC9B,OAAO,KAAK,IAAI,MAAM,WAAW,CAAC;AAClC,OAAO,KAAK,QAAQ,MAAM,wBAAwB,CAAC;AACnD,OAAO,EAAE,KAAK,IAAI,SAAS,EAAE,MAAM,MAAM,CAAC;AAC1C,OAAO,EAAE,eAAe,EAAE,MAAM,0BAA0B,CAAC;AAC3D,OAAO,EAAE,cAAc,EAAE,MAAM,2BAA2B,CAAC;AAC3D,OAAO,EAAE,YAAY,EAAE,MAAM,kBAAkB,CAAC;AAChD,OAAO,EAAE,WAAW,EAAE,MAAM,mBAAmB,CAAC;AAChD,OAAO,EACL,sBAAsB,EACtB,mBAAmB,GACpB,MAAM,mCAAmC,CAAC;AAC3C,OAAO,EAAE,aAAa,EAAkB,MAAM,uBAAuB,CAAC;AACtE,OAAO,EAAE,QAAQ,EAAgC,MAAM,kBAAkB,CAAC;AAC1E,OAAO,EAAE,OAAO,EAAE,UAAU,EAAE,gBAAgB,EAAE,MAAM,kBAAkB,CAAC;AACzE,OAAO,EAAE,sBAAsB,EAAE,6BAA6B,EAAE,MAAM,wBAAwB,CAAC;AAC/F,OAAO,
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/cli/adopt/index.ts"],"names":[],"mappings":"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"}
|