@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
|
@@ -1,63 +0,0 @@
|
|
|
1
|
-
import type { Manifest } from "../../schema/index.js";
|
|
2
|
-
import { type CollectNodeVersionResult, type CollectNpmGlobalsResult, type DriftItem } from "../session-start/toolchain-parity.js";
|
|
3
|
-
/** One peer comparison, ready to render. Mirrors `PeerComparison` (session-start) plus a `status` roll-up for `countDiagnostics`. */
|
|
4
|
-
export interface ToolchainParityPeerReport {
|
|
5
|
-
peerProfile: string;
|
|
6
|
-
/** `"drift"` is the only status that rolls into `warningCount` (see `countDiagnostics` in index.ts). */
|
|
7
|
-
status: "ok" | "drift";
|
|
8
|
-
driftCount: number;
|
|
9
|
-
ageMs: number;
|
|
10
|
-
/** `formatSnapshotAge(ageMs)` — human-scannable ("just now" / "3h" / "2d"). */
|
|
11
|
-
ageLabel: string;
|
|
12
|
-
drift: DriftItem[];
|
|
13
|
-
}
|
|
14
|
-
export interface ToolchainParitySection {
|
|
15
|
-
/**
|
|
16
|
-
* `"skipped"`: `--shallow` suppressed the live collection (no spawn).
|
|
17
|
-
* `"no-peers"`: configured, but no comparable peer snapshot exists yet
|
|
18
|
-
* (none present, or every present peer file was unreadable/corrupt).
|
|
19
|
-
* `"ok"` / `"drift"`: at least one peer was compared.
|
|
20
|
-
* All four are advisory — only `"drift"` peers roll into warningCount;
|
|
21
|
-
* none of the four ever roll into errorCount.
|
|
22
|
-
*/
|
|
23
|
-
status: "skipped" | "no-peers" | "ok" | "drift";
|
|
24
|
-
message: string;
|
|
25
|
-
/** This machine's resolved `toolchain_parity.profile` (post-sanitization). */
|
|
26
|
-
profile: string;
|
|
27
|
-
/** Empty for `"skipped"` / `"no-peers"`. */
|
|
28
|
-
peers: ToolchainParityPeerReport[];
|
|
29
|
-
/** Sum of `peers[].driftCount`. */
|
|
30
|
-
driftTotal: number;
|
|
31
|
-
/**
|
|
32
|
-
* Peer files present in the machine-state directory that failed to
|
|
33
|
-
* parse as a valid snapshot (informational only — never rolls into
|
|
34
|
-
* `driftTotal` or any diagnostic counter, mirroring the producer's own
|
|
35
|
-
* `unparseablePeerCount` treatment).
|
|
36
|
-
*/
|
|
37
|
-
unparseablePeers: string[];
|
|
38
|
-
}
|
|
39
|
-
export interface RunDoctorToolchainParityOptions {
|
|
40
|
-
/** Skips the live collection (no `node`/`npm` spawn) — mirrors `npmGlobalBin` / `claudeMcp`'s shallow behaviour. */
|
|
41
|
-
shallow?: boolean;
|
|
42
|
-
/** Overrides `toolchain_parity.workspace_root`'s fallback. Defaults to `process.cwd()`. */
|
|
43
|
-
cwd?: string;
|
|
44
|
-
/** Overrides "now" for deterministic snapshot-age tests. */
|
|
45
|
-
now?: Date;
|
|
46
|
-
nodeTimeoutMs?: number;
|
|
47
|
-
npmTimeoutMs?: number;
|
|
48
|
-
/** Inject the `node --version` collector (tests) — see `realNodeVersionSpawn`'s doc in the session-start module. */
|
|
49
|
-
runNodeVersion?: (timeoutMs: number) => Promise<CollectNodeVersionResult>;
|
|
50
|
-
/** Inject the `npm ls -g` collector (tests) — see `realNpmGlobalsSpawn`'s doc in the session-start module. */
|
|
51
|
-
runNpmGlobals?: (timeoutMs: number) => Promise<CollectNpmGlobalsResult>;
|
|
52
|
-
/** Inject the OW-Kit-version file reader (tests). */
|
|
53
|
-
readOwKitVersion?: (workspaceRoot: string) => {
|
|
54
|
-
version?: string;
|
|
55
|
-
error?: string;
|
|
56
|
-
};
|
|
57
|
-
/** Inject the MCP-server-names file reader (tests). */
|
|
58
|
-
readMcpServerNames?: () => {
|
|
59
|
-
names: string[];
|
|
60
|
-
error?: string;
|
|
61
|
-
};
|
|
62
|
-
}
|
|
63
|
-
export declare function runDoctorToolchainParity(manifest: Manifest, opts?: RunDoctorToolchainParityOptions): Promise<ToolchainParitySection>;
|
|
@@ -1,154 +0,0 @@
|
|
|
1
|
-
// Toolchain-parity doctor section (task 13919613, doctor companion to
|
|
2
|
-
// `harness session-start toolchain-parity`). Reuses the Collector +
|
|
3
|
-
// Comparator core straight from src/cli/session-start/toolchain-parity.ts
|
|
4
|
-
// (`collectLocalSnapshot`, `compareToPeer`, `parseSnapshotJson`,
|
|
5
|
-
// `formatSnapshotAge`, the real collectors, `sanitizeProfileName`,
|
|
6
|
-
// `defaultMachineStateDir`) — see that module's header for the full
|
|
7
|
-
// rationale of what each collected field means and how a peer comparison
|
|
8
|
-
// is computed. No comparison logic is re-implemented here.
|
|
9
|
-
//
|
|
10
|
-
// Unlike the SessionStart producer, this check is READ-ONLY: it never
|
|
11
|
-
// writes a snapshot file (that stays the producer's job — the thing that
|
|
12
|
-
// actually keeps the machine-state directory populated for every OTHER
|
|
13
|
-
// machine to compare against) and never touches the ledger. It only
|
|
14
|
-
// answers "if I compared my current live toolchain against whatever peer
|
|
15
|
-
// snapshots already exist, right now, what would I see?" — an on-demand
|
|
16
|
-
// read of the same comparison SessionStart runs automatically.
|
|
17
|
-
//
|
|
18
|
-
// Advisory only: drift is always a warning, never an error, and this is
|
|
19
|
-
// not any kind of gate (constraint carried over verbatim from the
|
|
20
|
-
// producer's own contract).
|
|
21
|
-
import * as fs from "node:fs";
|
|
22
|
-
import * as os from "node:os";
|
|
23
|
-
import * as path from "node:path";
|
|
24
|
-
import { collectLocalSnapshot, compareToPeer, defaultMachineStateDir, formatSnapshotAge, parseSnapshotJson, realNodeVersionSpawn, realNpmGlobalsSpawn, realReadMcpServerNames, realReadOwKitVersion, sanitizeProfileName, } from "../session-start/toolchain-parity.js";
|
|
25
|
-
// Same ceilings as the producer's own defaults (see that module's
|
|
26
|
-
// timeout-constants comment for the full budget derivation) — doctor
|
|
27
|
-
// pays the same worst-case spawn cost when it actually collects.
|
|
28
|
-
const DEFAULT_NODE_TIMEOUT_MS = 2_000;
|
|
29
|
-
const DEFAULT_NPM_GLOBALS_TIMEOUT_MS = 4_000;
|
|
30
|
-
/**
|
|
31
|
-
* A peer JSON filename (minus its `.json` suffix) is untrusted,
|
|
32
|
-
* cross-machine-synced content (agent-memory-sync populates this
|
|
33
|
-
* directory from other machines) — the same class of content the
|
|
34
|
-
* producer's `note()` choke point CR/LF-strips before ever reaching a
|
|
35
|
-
* stderr line (task c1b5ade5 R2b). This module hands its section back as
|
|
36
|
-
* STRUCTURED data (profile strings, drift `message` strings assembled by
|
|
37
|
-
* the reused `compareToPeer`), so the equivalent choke point lives at the
|
|
38
|
-
* doctor FORMAT layer (`formatToolchainParitySection` in format.ts) —
|
|
39
|
-
* every string this section produces that could carry a peer-controlled
|
|
40
|
-
* value gets CR/LF-stripped there, at the point it actually becomes
|
|
41
|
-
* terminal output, not here.
|
|
42
|
-
*/
|
|
43
|
-
function peerLabelFromFileName(fileName) {
|
|
44
|
-
return fileName.replace(/\.json$/, "") || fileName;
|
|
45
|
-
}
|
|
46
|
-
export async function runDoctorToolchainParity(manifest, opts = {}) {
|
|
47
|
-
const config = manifest.toolchain_parity;
|
|
48
|
-
const now = opts.now ?? new Date();
|
|
49
|
-
const cwd = opts.cwd ?? process.cwd();
|
|
50
|
-
const machineStateDir = config.machine_state_dir ?? defaultMachineStateDir();
|
|
51
|
-
const profile = config.profile ?? sanitizeProfileName(os.hostname());
|
|
52
|
-
const sanitizedProfile = sanitizeProfileName(profile);
|
|
53
|
-
const ownFileName = `${sanitizedProfile}.json`;
|
|
54
|
-
const workspaceRoot = config.workspace_root ?? cwd;
|
|
55
|
-
const noPeers = (message) => ({
|
|
56
|
-
status: "no-peers",
|
|
57
|
-
message,
|
|
58
|
-
profile,
|
|
59
|
-
peers: [],
|
|
60
|
-
driftTotal: 0,
|
|
61
|
-
unparseablePeers: [],
|
|
62
|
-
});
|
|
63
|
-
// Peer-existence check runs BEFORE any collection: there is nothing to
|
|
64
|
-
// compare the local live snapshot against without at least one peer
|
|
65
|
-
// file, so this order avoids paying the node/npm spawn cost (and, in
|
|
66
|
-
// `--shallow` mode, avoids the spawn-skip branch entirely having to be
|
|
67
|
-
// reached) in the common "first machine, no peer has run session-start
|
|
68
|
-
// toolchain-parity yet" case.
|
|
69
|
-
let entries;
|
|
70
|
-
try {
|
|
71
|
-
entries = fs.readdirSync(machineStateDir);
|
|
72
|
-
}
|
|
73
|
-
catch {
|
|
74
|
-
return noPeers(`no peer snapshots found (machine-state dir ${machineStateDir} does not exist yet); ` +
|
|
75
|
-
"normal for the first machine, or before any peer has run `harness session-start toolchain-parity`");
|
|
76
|
-
}
|
|
77
|
-
const peerFiles = entries.filter((name) => name.endsWith(".json") && name !== ownFileName).sort();
|
|
78
|
-
if (peerFiles.length === 0) {
|
|
79
|
-
return noPeers(`no peer snapshots found in ${machineStateDir}; nothing to compare (normal for the first ` +
|
|
80
|
-
"machine, or before any peer has run `harness session-start toolchain-parity`)");
|
|
81
|
-
}
|
|
82
|
-
if (opts.shallow) {
|
|
83
|
-
return {
|
|
84
|
-
status: "skipped",
|
|
85
|
-
message: "harness doctor --shallow does not collect a live toolchain snapshot to compare",
|
|
86
|
-
profile,
|
|
87
|
-
peers: [],
|
|
88
|
-
driftTotal: 0,
|
|
89
|
-
unparseablePeers: [],
|
|
90
|
-
};
|
|
91
|
-
}
|
|
92
|
-
const runNodeVersion = opts.runNodeVersion ?? realNodeVersionSpawn;
|
|
93
|
-
const runNpmGlobals = opts.runNpmGlobals ?? realNpmGlobalsSpawn;
|
|
94
|
-
const readOwKitVersion = opts.readOwKitVersion ?? realReadOwKitVersion;
|
|
95
|
-
const readMcpServerNames = opts.readMcpServerNames ?? realReadMcpServerNames;
|
|
96
|
-
const { snapshot: localSnapshot } = await collectLocalSnapshot({
|
|
97
|
-
profile,
|
|
98
|
-
now,
|
|
99
|
-
workspaceRoot,
|
|
100
|
-
nodeTimeoutMs: opts.nodeTimeoutMs ?? DEFAULT_NODE_TIMEOUT_MS,
|
|
101
|
-
npmTimeoutMs: opts.npmTimeoutMs ?? DEFAULT_NPM_GLOBALS_TIMEOUT_MS,
|
|
102
|
-
runNodeVersion,
|
|
103
|
-
runNpmGlobals,
|
|
104
|
-
readOwKitVersion,
|
|
105
|
-
readMcpServerNames,
|
|
106
|
-
});
|
|
107
|
-
const peers = [];
|
|
108
|
-
const unparseablePeers = [];
|
|
109
|
-
let driftTotal = 0;
|
|
110
|
-
for (const fileName of peerFiles) {
|
|
111
|
-
const filePath = path.join(machineStateDir, fileName);
|
|
112
|
-
let raw;
|
|
113
|
-
try {
|
|
114
|
-
raw = fs.readFileSync(filePath, "utf8");
|
|
115
|
-
}
|
|
116
|
-
catch {
|
|
117
|
-
unparseablePeers.push(peerLabelFromFileName(fileName));
|
|
118
|
-
continue;
|
|
119
|
-
}
|
|
120
|
-
const parsed = parseSnapshotJson(raw);
|
|
121
|
-
if (!parsed.ok) {
|
|
122
|
-
unparseablePeers.push(peerLabelFromFileName(fileName));
|
|
123
|
-
continue;
|
|
124
|
-
}
|
|
125
|
-
const comparison = compareToPeer(localSnapshot, parsed.snapshot, now);
|
|
126
|
-
driftTotal += comparison.drift.length;
|
|
127
|
-
peers.push({
|
|
128
|
-
peerProfile: comparison.peerProfile,
|
|
129
|
-
status: comparison.drift.length === 0 ? "ok" : "drift",
|
|
130
|
-
driftCount: comparison.drift.length,
|
|
131
|
-
ageMs: comparison.ageMs,
|
|
132
|
-
ageLabel: formatSnapshotAge(comparison.ageMs),
|
|
133
|
-
drift: comparison.drift,
|
|
134
|
-
});
|
|
135
|
-
}
|
|
136
|
-
if (peers.length === 0) {
|
|
137
|
-
return {
|
|
138
|
-
...noPeers(`no comparable peer snapshots (all ${peerFiles.length} peer file(s) in ${machineStateDir} ` +
|
|
139
|
-
"were unreadable/corrupt)"),
|
|
140
|
-
unparseablePeers,
|
|
141
|
-
};
|
|
142
|
-
}
|
|
143
|
-
return {
|
|
144
|
-
status: driftTotal === 0 ? "ok" : "drift",
|
|
145
|
-
message: driftTotal === 0
|
|
146
|
-
? `toolchain parity ok against ${peers.length} peer(s)`
|
|
147
|
-
: `${driftTotal} drift item(s) found across ${peers.length} peer(s)`,
|
|
148
|
-
profile,
|
|
149
|
-
peers,
|
|
150
|
-
driftTotal,
|
|
151
|
-
unparseablePeers,
|
|
152
|
-
};
|
|
153
|
-
}
|
|
154
|
-
//# sourceMappingURL=toolchain-parity.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"toolchain-parity.js","sourceRoot":"","sources":["../../../src/cli/doctor/toolchain-parity.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,40 +0,0 @@
|
|
|
1
|
-
/** Default doctor window when `--recent-sessions` is not passed. */
|
|
2
|
-
export declare const DEFAULT_RECENT_SESSIONS = 20;
|
|
3
|
-
export interface AutoApprovalListingEntry {
|
|
4
|
-
sessionId: string;
|
|
5
|
-
mode: string;
|
|
6
|
-
harness: string;
|
|
7
|
-
approvedAt: string;
|
|
8
|
-
}
|
|
9
|
-
export interface UgAutoApprovalsSection {
|
|
10
|
-
/** Whether `<generatedDir>/.approvals/` exists at all. */
|
|
11
|
-
approvalsDirPresent: boolean;
|
|
12
|
-
/** The `recentSessions` window that was applied. */
|
|
13
|
-
windowSize: number;
|
|
14
|
-
/** Auto approvals among the newest `windowSize` session markers. */
|
|
15
|
-
autoApprovedCount: number;
|
|
16
|
-
/** Per-mode breakdown of `autoApprovedCount` (e.g. `{bypassPermissions: 3}`). */
|
|
17
|
-
byMode: Record<string, number>;
|
|
18
|
-
/** Per-harness breakdown of `autoApprovedCount` (e.g. `{"claude-code": 3}`). */
|
|
19
|
-
byHarness: Record<string, number>;
|
|
20
|
-
/** `(sessionId, mode, approvedAt)` for each auto approval in the window, newest first. */
|
|
21
|
-
entries: AutoApprovalListingEntry[];
|
|
22
|
-
/**
|
|
23
|
-
* Session markers whose body could not be read as JSON with a
|
|
24
|
-
* parseable `approvedAt` (corrupt file, non-JSON content, missing
|
|
25
|
-
* `approvedAt`). Excluded from the window (there is no timestamp to
|
|
26
|
-
* sort them by) and never counted as auto approvals; surfaced as a
|
|
27
|
-
* single summary count instead of per-file noise.
|
|
28
|
-
*/
|
|
29
|
-
unreadableCount: number;
|
|
30
|
-
}
|
|
31
|
-
/**
|
|
32
|
-
* Build the auto-approval listing + last-N metric. Pure filesystem read;
|
|
33
|
-
* never throws for ordinary "nothing to see" states (missing
|
|
34
|
-
* `.approvals/`, empty directory, every marker unreadable) — those all
|
|
35
|
-
* resolve to an empty-ish section rather than an exception, mirroring
|
|
36
|
-
* the rest of doctor's read-only checks.
|
|
37
|
-
*/
|
|
38
|
-
export declare function buildUgAutoApprovals(generatedDir: string, opts: {
|
|
39
|
-
recentSessions: number;
|
|
40
|
-
}): UgAutoApprovalsSection;
|
|
@@ -1,91 +0,0 @@
|
|
|
1
|
-
// Doctor visibility half of ADR docs/decisions/2026-08-27-ug-auto-mode-approval.md
|
|
2
|
-
// slice 1 (agent-tasks 74b4b17d): the "auto approvals in the last N
|
|
3
|
-
// sessions" listing named in the ADR's "Audit and doctor" section and
|
|
4
|
-
// slice 1 acceptance criterion 7.
|
|
5
|
-
//
|
|
6
|
-
// Scans `<generatedDir>/.approvals/` for SESSION markers (skips the
|
|
7
|
-
// per-task markers named `task-<id>` and the branch-protection markers
|
|
8
|
-
// named `branch-protection-<sid>`, neither of which is a session
|
|
9
|
-
// approval), sorts the readable ones newest-first by `approvedAt`,
|
|
10
|
-
// takes the newest `recentSessions` of them, and reports how many of
|
|
11
|
-
// THOSE were minted by the auto path (`approvedBy` starting with
|
|
12
|
-
// `auto-mode:`, see auto-approve.ts's `parseAutoApprovedBy`).
|
|
13
|
-
//
|
|
14
|
-
// This is an AUDIT SURFACE, not a security check: it never verifies a
|
|
15
|
-
// marker's HMAC signature (that is `checkApprovalMarker`'s job at gate
|
|
16
|
-
// time; a forged marker still gets rejected there regardless of what
|
|
17
|
-
// this listing shows) and it never blocks or writes anything.
|
|
18
|
-
import * as path from "node:path";
|
|
19
|
-
import { readJsonDirEntriesRejectingSymlinks } from "../../io/read-json-dir-entries.js";
|
|
20
|
-
import { BRANCH_PROTECTION_MARKER_PREFIX } from "../../policy-packs/builtin/branch-protection-runtime.js";
|
|
21
|
-
import { APPROVAL_MARKER_DIRNAME, APPROVAL_MARKER_TASK_PREFIX, parseAutoApprovedBy, } from "../../policy-packs/builtin/understanding-before-execution/index.js";
|
|
22
|
-
/** Default doctor window when `--recent-sessions` is not passed. */
|
|
23
|
-
export const DEFAULT_RECENT_SESSIONS = 20;
|
|
24
|
-
function emptySection(windowSize) {
|
|
25
|
-
return {
|
|
26
|
-
approvalsDirPresent: false,
|
|
27
|
-
windowSize,
|
|
28
|
-
autoApprovedCount: 0,
|
|
29
|
-
byMode: {},
|
|
30
|
-
byHarness: {},
|
|
31
|
-
entries: [],
|
|
32
|
-
unreadableCount: 0,
|
|
33
|
-
};
|
|
34
|
-
}
|
|
35
|
-
/**
|
|
36
|
-
* Build the auto-approval listing + last-N metric. Pure filesystem read;
|
|
37
|
-
* never throws for ordinary "nothing to see" states (missing
|
|
38
|
-
* `.approvals/`, empty directory, every marker unreadable) — those all
|
|
39
|
-
* resolve to an empty-ish section rather than an exception, mirroring
|
|
40
|
-
* the rest of doctor's read-only checks.
|
|
41
|
-
*/
|
|
42
|
-
export function buildUgAutoApprovals(generatedDir, opts) {
|
|
43
|
-
const windowSize = opts.recentSessions;
|
|
44
|
-
const dir = path.join(generatedDir, APPROVAL_MARKER_DIRNAME);
|
|
45
|
-
// A symlink / non-regular / raced-away entry is not a session marker this
|
|
46
|
-
// listing owns an opinion about; the shared reader skips it silently
|
|
47
|
-
// rather than counting it as "unreadable" (that count is for a FILE we
|
|
48
|
-
// expected to be a marker but could not parse).
|
|
49
|
-
const { dirPresent, entries: readable, unreadableCount } = readJsonDirEntriesRejectingSymlinks(dir, {
|
|
50
|
-
skip: (name) => name.startsWith(APPROVAL_MARKER_TASK_PREFIX) || name.startsWith(BRANCH_PROTECTION_MARKER_PREFIX),
|
|
51
|
-
parse: (raw, name) => {
|
|
52
|
-
if (raw === null || typeof raw !== "object" || Array.isArray(raw))
|
|
53
|
-
return null;
|
|
54
|
-
const obj = raw;
|
|
55
|
-
const approvedAt = obj["approvedAt"];
|
|
56
|
-
if (typeof approvedAt !== "string" || Number.isNaN(Date.parse(approvedAt)))
|
|
57
|
-
return null;
|
|
58
|
-
return { sessionId: name, approvedAt, approvedBy: obj["approvedBy"] };
|
|
59
|
-
},
|
|
60
|
-
});
|
|
61
|
-
if (!dirPresent)
|
|
62
|
-
return emptySection(windowSize);
|
|
63
|
-
readable.sort((a, b) => Date.parse(b.approvedAt) - Date.parse(a.approvedAt));
|
|
64
|
-
const windowed = readable.slice(0, windowSize);
|
|
65
|
-
const byMode = {};
|
|
66
|
-
const byHarness = {};
|
|
67
|
-
const entries = [];
|
|
68
|
-
for (const m of windowed) {
|
|
69
|
-
const parsedAuto = parseAutoApprovedBy(m.approvedBy);
|
|
70
|
-
if (parsedAuto === null)
|
|
71
|
-
continue;
|
|
72
|
-
byMode[parsedAuto.mode] = (byMode[parsedAuto.mode] ?? 0) + 1;
|
|
73
|
-
byHarness[parsedAuto.harness] = (byHarness[parsedAuto.harness] ?? 0) + 1;
|
|
74
|
-
entries.push({
|
|
75
|
-
sessionId: m.sessionId,
|
|
76
|
-
mode: parsedAuto.mode,
|
|
77
|
-
harness: parsedAuto.harness,
|
|
78
|
-
approvedAt: m.approvedAt,
|
|
79
|
-
});
|
|
80
|
-
}
|
|
81
|
-
return {
|
|
82
|
-
approvalsDirPresent: true,
|
|
83
|
-
windowSize,
|
|
84
|
-
autoApprovedCount: entries.length,
|
|
85
|
-
byMode,
|
|
86
|
-
byHarness,
|
|
87
|
-
entries,
|
|
88
|
-
unreadableCount,
|
|
89
|
-
};
|
|
90
|
-
}
|
|
91
|
-
//# sourceMappingURL=ug-auto-approvals.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"ug-auto-approvals.js","sourceRoot":"","sources":["../../../src/cli/doctor/ug-auto-approvals.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,26 +0,0 @@
|
|
|
1
|
-
export interface UgDelegationsSection {
|
|
2
|
-
/** Whether `<generatedDir>/.delegations/` exists at all. */
|
|
3
|
-
delegationsDirPresent: boolean;
|
|
4
|
-
/** Delegation files found in `.delegations/`, readable or not. */
|
|
5
|
-
total: number;
|
|
6
|
-
/** Of `total`, how many parsed with an `expires` segment in the past. */
|
|
7
|
-
expired: number;
|
|
8
|
-
/** Of `total`, how many were not valid JSON, or failed `parseDelegationApprovedBy`. */
|
|
9
|
-
unreadable: number;
|
|
10
|
-
}
|
|
11
|
-
/**
|
|
12
|
-
* Build the delegations-on-disk doctor metric. Pure filesystem read;
|
|
13
|
-
* never throws for "nothing to see" states (missing `.delegations/`,
|
|
14
|
-
* empty directory, every file unreadable), those all resolve to a
|
|
15
|
-
* zero-ish section, mirroring `buildUgAutoApprovals`. `total`/`expired`/
|
|
16
|
-
* `unreadable` read `0` for both an EMPTY and a MISSING directory; only
|
|
17
|
-
* `delegationsDirPresent` tells them apart, the same way
|
|
18
|
-
* `approvalsDirPresent` does for `buildUgAutoApprovals`, doctor's
|
|
19
|
-
* render layer uses it to stay silent when there is truly nothing on
|
|
20
|
-
* disk (`format.ts`'s own "no line for a check that found nothing"
|
|
21
|
-
* convention) while still rendering the zero-count line for a
|
|
22
|
-
* `harness delegate`-touched, now-empty directory.
|
|
23
|
-
*/
|
|
24
|
-
export declare function buildUgDelegations(generatedDir: string, opts?: {
|
|
25
|
-
now?: Date;
|
|
26
|
-
}): UgDelegationsSection;
|
|
@@ -1,121 +0,0 @@
|
|
|
1
|
-
// Doctor visibility for slice 3 delegations (ADR
|
|
2
|
-
// docs/decisions/2026-08-27-ug-auto-mode-approval.md, "Audit and
|
|
3
|
-
// doctor", agent-tasks 37ad0b05): "delegations on disk: <count>
|
|
4
|
-
// (<count> expired)" from `<generatedDir>/.delegations/`, distinct from
|
|
5
|
-
// the `.approvals/` auto-approval listing in `ug-auto-approvals.ts`.
|
|
6
|
-
//
|
|
7
|
-
// SEPARATE DIRECTORY, DELIBERATELY: a delegation never lands in
|
|
8
|
-
// `.approvals/` (delegation-markers.ts's module header), so this scan
|
|
9
|
-
// reads `DELEGATION_MARKER_DIRNAME` (".delegations") only and never
|
|
10
|
-
// touches the approvals directory `ug-auto-approvals.ts` owns. Mirrors
|
|
11
|
-
// that module's read-only-audit shape (no signature verification here
|
|
12
|
-
// either; a forged delegation still gets rejected by the dedicated
|
|
13
|
-
// verifier at gate time, `delegation-markers.ts`'s `verifyDelegation`)
|
|
14
|
-
// but does not share its code: the two scans read different
|
|
15
|
-
// directories, filter differently (no task-marker / branch-protection
|
|
16
|
-
// prefix skip here), and count differently (an approval count vs. an
|
|
17
|
-
// expiry count), so a shared helper would mostly be parameters threading
|
|
18
|
-
// through an otherwise-empty shell. `npm run check:duplication` is the
|
|
19
|
-
// backstop if that stops being true.
|
|
20
|
-
import * as fs from "node:fs";
|
|
21
|
-
import * as path from "node:path";
|
|
22
|
-
import { readRegularFileRejectingSymlink } from "../../io/read-regular-file.js";
|
|
23
|
-
import { safeJsonParse } from "../../io/safe-json-parse.js";
|
|
24
|
-
import { DELEGATION_MARKER_DIRNAME, parseDelegationApprovedBy, } from "../../policy-packs/builtin/understanding-before-execution/index.js";
|
|
25
|
-
function emptySection() {
|
|
26
|
-
return { delegationsDirPresent: false, total: 0, expired: 0, unreadable: 0 };
|
|
27
|
-
}
|
|
28
|
-
/**
|
|
29
|
-
* A delegation filename is always a session id: a UUID handed out by
|
|
30
|
-
* Claude Code or Codex, or (in this repo's own test fixtures) a short
|
|
31
|
-
* alnum/hyphen placeholder. Neither ever contains a literal `.` or
|
|
32
|
-
* starts with one. Filtering on that BEFORE the read is what keeps
|
|
33
|
-
* filesystem debris that happens to sit next to `.delegations/` files
|
|
34
|
-
* (macOS's `.DS_Store`, a stray `foo.txt`) from counting toward `total`
|
|
35
|
-
* at all: without it, such a file reads as valid-but-not-JSON and rolls
|
|
36
|
-
* into `unreadable`, which flips this metric's doctor line from
|
|
37
|
-
* informational (ℹ) straight to a WARNING (⚠) for debris that was never
|
|
38
|
-
* a delegation to begin with. Mirrors the same non-empty/no-traversal
|
|
39
|
-
* shape family `rejectMalformedSessionId` pins for a delegation's own
|
|
40
|
-
* filename on the write side (`delegationMarkerPathFor`), tightened to
|
|
41
|
-
* additionally exclude a dot, which is the part that actually
|
|
42
|
-
* discriminates a stray dotfile from a real session id.
|
|
43
|
-
*/
|
|
44
|
-
const SESSION_ID_BASENAME_RE = /^[A-Za-z0-9][A-Za-z0-9_-]*$/;
|
|
45
|
-
/**
|
|
46
|
-
* Build the delegations-on-disk doctor metric. Pure filesystem read;
|
|
47
|
-
* never throws for "nothing to see" states (missing `.delegations/`,
|
|
48
|
-
* empty directory, every file unreadable), those all resolve to a
|
|
49
|
-
* zero-ish section, mirroring `buildUgAutoApprovals`. `total`/`expired`/
|
|
50
|
-
* `unreadable` read `0` for both an EMPTY and a MISSING directory; only
|
|
51
|
-
* `delegationsDirPresent` tells them apart, the same way
|
|
52
|
-
* `approvalsDirPresent` does for `buildUgAutoApprovals`, doctor's
|
|
53
|
-
* render layer uses it to stay silent when there is truly nothing on
|
|
54
|
-
* disk (`format.ts`'s own "no line for a check that found nothing"
|
|
55
|
-
* convention) while still rendering the zero-count line for a
|
|
56
|
-
* `harness delegate`-touched, now-empty directory.
|
|
57
|
-
*/
|
|
58
|
-
export function buildUgDelegations(generatedDir, opts = {}) {
|
|
59
|
-
const now = opts.now ?? new Date();
|
|
60
|
-
const dir = path.join(generatedDir, DELEGATION_MARKER_DIRNAME);
|
|
61
|
-
let dirStat;
|
|
62
|
-
try {
|
|
63
|
-
dirStat = fs.lstatSync(dir);
|
|
64
|
-
}
|
|
65
|
-
catch {
|
|
66
|
-
return emptySection();
|
|
67
|
-
}
|
|
68
|
-
if (!dirStat.isDirectory())
|
|
69
|
-
return emptySection();
|
|
70
|
-
let dirents;
|
|
71
|
-
try {
|
|
72
|
-
dirents = fs.readdirSync(dir, { withFileTypes: true });
|
|
73
|
-
}
|
|
74
|
-
catch {
|
|
75
|
-
return emptySection();
|
|
76
|
-
}
|
|
77
|
-
let total = 0;
|
|
78
|
-
let expired = 0;
|
|
79
|
-
let unreadable = 0;
|
|
80
|
-
for (const d of dirents) {
|
|
81
|
-
// Not a session-id-shaped basename: never a delegation file (a
|
|
82
|
-
// stray dotfile, an extensioned file, a directory, ...), skip
|
|
83
|
-
// before even reading it. The once-per-session adoption ledger is
|
|
84
|
-
// never nested under here: `.delegation-adoptions/` is a SIBLING of
|
|
85
|
-
// `.delegations/` (see delegation-markers.ts's module header), so
|
|
86
|
-
// this filter has no ledger-shaped entry to reason about; an
|
|
87
|
-
// ordinary session-id-named directory would still fall through to
|
|
88
|
-
// the `not-regular` skip below, same as any other directory would.
|
|
89
|
-
if (!SESSION_ID_BASENAME_RE.test(d.name))
|
|
90
|
-
continue;
|
|
91
|
-
const full = path.join(dir, d.name);
|
|
92
|
-
const read = readRegularFileRejectingSymlink(full);
|
|
93
|
-
// A symlink / non-regular / raced-away entry is not a delegation
|
|
94
|
-
// file this metric owns an opinion about; skip silently, same
|
|
95
|
-
// reasoning as `buildUgAutoApprovals`.
|
|
96
|
-
if (read.kind === "symlink" || read.kind === "not-regular" || read.kind === "missing") {
|
|
97
|
-
continue;
|
|
98
|
-
}
|
|
99
|
-
total++;
|
|
100
|
-
if (read.kind === "unreadable") {
|
|
101
|
-
unreadable++;
|
|
102
|
-
continue;
|
|
103
|
-
}
|
|
104
|
-
const parsed = safeJsonParse(read.content);
|
|
105
|
-
if (parsed === null || typeof parsed !== "object" || Array.isArray(parsed)) {
|
|
106
|
-
unreadable++;
|
|
107
|
-
continue;
|
|
108
|
-
}
|
|
109
|
-
const obj = parsed;
|
|
110
|
-
const segments = parseDelegationApprovedBy(obj["approvedBy"]);
|
|
111
|
-
if (!segments.ok) {
|
|
112
|
-
unreadable++;
|
|
113
|
-
continue;
|
|
114
|
-
}
|
|
115
|
-
if (Date.parse(segments.value.expiresAt) <= now.getTime()) {
|
|
116
|
-
expired++;
|
|
117
|
-
}
|
|
118
|
-
}
|
|
119
|
-
return { delegationsDirPresent: true, total, expired, unreadable };
|
|
120
|
-
}
|
|
121
|
-
//# sourceMappingURL=ug-delegations.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"ug-delegations.js","sourceRoot":"","sources":["../../../src/cli/doctor/ug-delegations.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,35 +0,0 @@
|
|
|
1
|
-
export interface UgInflightSection {
|
|
2
|
-
/** Whether `<generatedDir>/.inflight/` exists at all. */
|
|
3
|
-
inflightDirPresent: boolean;
|
|
4
|
-
/** Records found and readable, across every session directory. */
|
|
5
|
-
total: number;
|
|
6
|
-
/**
|
|
7
|
-
* Of `total`, how many have an `approvedAt` older than the staleness
|
|
8
|
-
* window, or dated implausibly far in the future (clock skew or
|
|
9
|
-
* tampering — this is an audit listing, not a trust decision, so
|
|
10
|
-
* either counts as stale, mirroring `listInflightRecords`'s own doc).
|
|
11
|
-
*/
|
|
12
|
-
stale: number;
|
|
13
|
-
/** Entries gc/doctor could not make sense of (debris, unreadable, missing/bad approvedAt). */
|
|
14
|
-
skipped: number;
|
|
15
|
-
}
|
|
16
|
-
/**
|
|
17
|
-
* Build the in-flight-records-on-disk doctor metric. Pure filesystem
|
|
18
|
-
* read, never throws: a missing or empty `.inflight/` resolves to a
|
|
19
|
-
* zero-ish section, mirroring `buildUgDelegations`. `inflightDirPresent`
|
|
20
|
-
* is the only field that tells "missing" and "present but empty" apart,
|
|
21
|
-
* same convention `delegationsDirPresent` follows — doctor's render
|
|
22
|
-
* layer uses it to stay silent when there is truly nothing on disk.
|
|
23
|
-
*
|
|
24
|
-
* lstat, not `existsSync` (which follows a symlink to whatever it
|
|
25
|
-
* points at): a symlinked `.inflight/` reads as absent here, the same
|
|
26
|
-
* way a symlinked record file already reads as absent one level down.
|
|
27
|
-
* Still needed even though `listInflightRecords` now applies the same
|
|
28
|
-
* lstat guard internally: this function's own check is what decides
|
|
29
|
-
* `inflightDirPresent`, a flag `listInflightRecords`'s return shape has
|
|
30
|
-
* no room for, and that doctor's render layer needs to tell "absent"
|
|
31
|
-
* apart from "present but empty".
|
|
32
|
-
*/
|
|
33
|
-
export declare function buildUgInflight(generatedDir: string, opts?: {
|
|
34
|
-
now?: Date;
|
|
35
|
-
}): UgInflightSection;
|
|
@@ -1,57 +0,0 @@
|
|
|
1
|
-
// Doctor visibility for in-flight subagent records (subagent-gate
|
|
2
|
-
// slice 1, docs/decisions/2026-08-27-ug-auto-mode-approval.md
|
|
3
|
-
// "Invariants", "Threat model", "Delegation marker shape"): "in-flight
|
|
4
|
-
// subagent records on disk: <count> (<count> stale)" from
|
|
5
|
-
// `<generatedDir>/.inflight/`, distinct from the `.delegations/`
|
|
6
|
-
// listing in `ug-delegations.ts` and the `.approvals/` one in
|
|
7
|
-
// `ug-auto-approvals.ts`.
|
|
8
|
-
//
|
|
9
|
-
// Thin wrapper around `listInflightRecords`, which already owns the
|
|
10
|
-
// filesystem walk, the staleness computation and the tolerant-of-
|
|
11
|
-
// debris posture; this file only shapes that result into the section
|
|
12
|
-
// `harness doctor`'s report type expects, mirroring how
|
|
13
|
-
// `ug-delegations.ts` sits beside `delegation-markers.ts`'s own reader.
|
|
14
|
-
import * as fs from "node:fs";
|
|
15
|
-
import * as path from "node:path";
|
|
16
|
-
import { INFLIGHT_RECORD_DIRNAME, listInflightRecords, } from "../../policy-packs/builtin/understanding-before-execution/index.js";
|
|
17
|
-
function emptySection() {
|
|
18
|
-
return { inflightDirPresent: false, total: 0, stale: 0, skipped: 0 };
|
|
19
|
-
}
|
|
20
|
-
/**
|
|
21
|
-
* Build the in-flight-records-on-disk doctor metric. Pure filesystem
|
|
22
|
-
* read, never throws: a missing or empty `.inflight/` resolves to a
|
|
23
|
-
* zero-ish section, mirroring `buildUgDelegations`. `inflightDirPresent`
|
|
24
|
-
* is the only field that tells "missing" and "present but empty" apart,
|
|
25
|
-
* same convention `delegationsDirPresent` follows — doctor's render
|
|
26
|
-
* layer uses it to stay silent when there is truly nothing on disk.
|
|
27
|
-
*
|
|
28
|
-
* lstat, not `existsSync` (which follows a symlink to whatever it
|
|
29
|
-
* points at): a symlinked `.inflight/` reads as absent here, the same
|
|
30
|
-
* way a symlinked record file already reads as absent one level down.
|
|
31
|
-
* Still needed even though `listInflightRecords` now applies the same
|
|
32
|
-
* lstat guard internally: this function's own check is what decides
|
|
33
|
-
* `inflightDirPresent`, a flag `listInflightRecords`'s return shape has
|
|
34
|
-
* no room for, and that doctor's render layer needs to tell "absent"
|
|
35
|
-
* apart from "present but empty".
|
|
36
|
-
*/
|
|
37
|
-
export function buildUgInflight(generatedDir, opts = {}) {
|
|
38
|
-
const dir = path.join(generatedDir, INFLIGHT_RECORD_DIRNAME);
|
|
39
|
-
let stat;
|
|
40
|
-
try {
|
|
41
|
-
stat = fs.lstatSync(dir);
|
|
42
|
-
}
|
|
43
|
-
catch {
|
|
44
|
-
return emptySection();
|
|
45
|
-
}
|
|
46
|
-
if (!stat.isDirectory()) {
|
|
47
|
-
return emptySection();
|
|
48
|
-
}
|
|
49
|
-
const result = listInflightRecords(generatedDir, opts.now);
|
|
50
|
-
return {
|
|
51
|
-
inflightDirPresent: true,
|
|
52
|
-
total: result.total,
|
|
53
|
-
stale: result.stale,
|
|
54
|
-
skipped: result.skipped.length,
|
|
55
|
-
};
|
|
56
|
-
}
|
|
57
|
-
//# sourceMappingURL=ug-inflight.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"ug-inflight.js","sourceRoot":"","sources":["../../../src/cli/doctor/ug-inflight.ts"],"names":[],"mappings":"AAAA,kEAAkE;AAClE,8DAA8D;AAC9D,uEAAuE;AACvE,0DAA0D;AAC1D,iEAAiE;AACjE,8DAA8D;AAC9D,0BAA0B;AAC1B,EAAE;AACF,oEAAoE;AACpE,kEAAkE;AAClE,qEAAqE;AACrE,wDAAwD;AACxD,wEAAwE;AAExE,OAAO,KAAK,EAAE,MAAM,SAAS,CAAC;AAC9B,OAAO,KAAK,IAAI,MAAM,WAAW,CAAC;AAClC,OAAO,EACL,uBAAuB,EACvB,mBAAmB,GACpB,MAAM,oEAAoE,CAAC;AAkB5E,SAAS,YAAY;IACnB,OAAO,EAAE,kBAAkB,EAAE,KAAK,EAAE,KAAK,EAAE,CAAC,EAAE,KAAK,EAAE,CAAC,EAAE,OAAO,EAAE,CAAC,EAAE,CAAC;AACvE,CAAC;AAED;;;;;;;;;;;;;;;;GAgBG;AACH,MAAM,UAAU,eAAe,CAAC,YAAoB,EAAE,OAAuB,EAAE;IAC7E,MAAM,GAAG,GAAG,IAAI,CAAC,IAAI,CAAC,YAAY,EAAE,uBAAuB,CAAC,CAAC;IAC7D,IAAI,IAAc,CAAC;IACnB,IAAI,CAAC;QACH,IAAI,GAAG,EAAE,CAAC,SAAS,CAAC,GAAG,CAAC,CAAC;IAC3B,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,YAAY,EAAE,CAAC;IACxB,CAAC;IACD,IAAI,CAAC,IAAI,CAAC,WAAW,EAAE,EAAE,CAAC;QACxB,OAAO,YAAY,EAAE,CAAC;IACxB,CAAC;IACD,MAAM,MAAM,GAAG,mBAAmB,CAAC,YAAY,EAAE,IAAI,CAAC,GAAG,CAAC,CAAC;IAC3D,OAAO;QACL,kBAAkB,EAAE,IAAI;QACxB,KAAK,EAAE,MAAM,CAAC,KAAK;QACnB,KAAK,EAAE,MAAM,CAAC,KAAK;QACnB,OAAO,EAAE,MAAM,CAAC,OAAO,CAAC,MAAM;KAC/B,CAAC;AACJ,CAAC"}
|