@lannguyensi/harness 0.63.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 +90 -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 -338
- 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 -705
- 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 -378
- 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 +15 -2607
- 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 -243
- 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/register-gate-group.d.ts +5 -0
- 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 +5 -0
- package/dist/cli/register-operator-lifecycle.js +20 -0
- package/dist/cli/register-operator-lifecycle.js.map +1 -0
- 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-setup-group.d.ts +5 -0
- 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.d.ts +5 -0
- package/dist/cli/remove/register.js +25 -0
- package/dist/cli/remove/register.js.map +1 -0
- 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.d.ts +5 -0
- package/dist/cli/uninstall/register.js +171 -0
- package/dist/cli/uninstall/register.js.map +1 -0
- 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 -443
- package/dist/cli/delegate/index.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/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 -46
- package/dist/cli/dry-run.js +0 -250
- package/dist/cli/dry-run.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 -20
- package/dist/cli/explain-action.js +0 -27
- package/dist/cli/explain-action.js.map +0 -1
- package/dist/cli/explain-policy.d.ts +0 -135
- package/dist/cli/explain-policy.js +0 -266
- 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 -337
- 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 -1020
- 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 -108
- 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/resolve-env.d.ts +0 -32
- package/dist/cli/resolve-env.js +0 -47
- 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 -26
- package/dist/cli/test-risk.js +0 -34
- 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 -618
- 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 -93
- 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 -620
- package/dist/policy-packs/builtin/understanding-before-execution/persisted-reports.js +0 -1047
- 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 -1074
- 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 -494
- package/dist/runtime/intercept.js +0 -1313
- 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 -103
- package/dist/runtime/task-providers/agent-tasks.js +0 -245
- 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/dist/io/extract.js
DELETED
|
@@ -1,226 +0,0 @@
|
|
|
1
|
-
// Phase 4 #2 — trigger.extract evaluator
|
|
2
|
-
//
|
|
3
|
-
// TODO(Phase 4 #4): replace `src/schema/extract.ts` EXTRACT_ROOT_RE with
|
|
4
|
-
// a `parseExtractExpression`-backed `.refine`. The schema today rejects the
|
|
5
|
-
// bracket-quoted form this parser supports; #4 is when validate enhancements
|
|
6
|
-
// land and the two surfaces get unified.
|
|
7
|
-
//
|
|
8
|
-
// Implements the JSONPath-restricted DSL described in ARCHITECTURE.md §6
|
|
9
|
-
// "trigger.extract: generic variable extraction":
|
|
10
|
-
//
|
|
11
|
-
// <namespace>.<segment>(<segment>)*
|
|
12
|
-
//
|
|
13
|
-
// where namespace ∈ { toolArgs, event, session, git } and a segment is either
|
|
14
|
-
// `.identifier` or `["quoted key"]` (single or double quotes). The grammar
|
|
15
|
-
// deliberately rejects function calls, numeric/slice indices, and any other
|
|
16
|
-
// JSON-Path constructs so validate-time analysis stays statically decidable.
|
|
17
|
-
const NAMESPACES = ["toolArgs", "event", "session", "git"];
|
|
18
|
-
const NAMESPACE_RE = /^(toolArgs|event|session|git)\b/;
|
|
19
|
-
const IDENTIFIER_RE = /^[A-Za-z_][A-Za-z0-9_]*/;
|
|
20
|
-
const NUMERIC_INDEX_RE = /^-?\d/;
|
|
21
|
-
export class ExtractGrammarError extends Error {
|
|
22
|
-
expression;
|
|
23
|
-
constructor(message, expression) {
|
|
24
|
-
super(`extract expression "${expression}": ${message}`);
|
|
25
|
-
this.expression = expression;
|
|
26
|
-
this.name = "ExtractGrammarError";
|
|
27
|
-
}
|
|
28
|
-
}
|
|
29
|
-
export function parseExtractExpression(expr) {
|
|
30
|
-
if (typeof expr !== "string" || expr.length === 0) {
|
|
31
|
-
throw new ExtractGrammarError("expression must be a non-empty string", String(expr));
|
|
32
|
-
}
|
|
33
|
-
const rootMatch = NAMESPACE_RE.exec(expr);
|
|
34
|
-
if (!rootMatch) {
|
|
35
|
-
const ident = IDENTIFIER_RE.exec(expr);
|
|
36
|
-
if (ident) {
|
|
37
|
-
throw new ExtractGrammarError(`unknown namespace \`${ident[0]}\``, expr);
|
|
38
|
-
}
|
|
39
|
-
throw new ExtractGrammarError("expression must begin with one of toolArgs / event / session / git", expr);
|
|
40
|
-
}
|
|
41
|
-
const namespace = rootMatch[1];
|
|
42
|
-
let i = rootMatch[0].length;
|
|
43
|
-
const segments = [];
|
|
44
|
-
while (i < expr.length) {
|
|
45
|
-
const ch = expr[i];
|
|
46
|
-
if (ch === ".") {
|
|
47
|
-
i++;
|
|
48
|
-
const id = IDENTIFIER_RE.exec(expr.slice(i));
|
|
49
|
-
if (!id) {
|
|
50
|
-
throw new ExtractGrammarError(`expected identifier after '.'`, expr);
|
|
51
|
-
}
|
|
52
|
-
i += id[0].length;
|
|
53
|
-
if (expr[i] === "(") {
|
|
54
|
-
throw new ExtractGrammarError("function calls not allowed", expr);
|
|
55
|
-
}
|
|
56
|
-
segments.push({ kind: "identifier", key: id[0] });
|
|
57
|
-
}
|
|
58
|
-
else if (ch === "[") {
|
|
59
|
-
i++;
|
|
60
|
-
const next = expr[i];
|
|
61
|
-
if (next === undefined) {
|
|
62
|
-
throw new ExtractGrammarError("unterminated bracket accessor", expr);
|
|
63
|
-
}
|
|
64
|
-
if (NUMERIC_INDEX_RE.test(next)) {
|
|
65
|
-
throw new ExtractGrammarError("array indices not allowed", expr);
|
|
66
|
-
}
|
|
67
|
-
if (next !== '"' && next !== "'") {
|
|
68
|
-
throw new ExtractGrammarError("bracket accessor must be a quoted string key", expr);
|
|
69
|
-
}
|
|
70
|
-
const quote = next;
|
|
71
|
-
i++;
|
|
72
|
-
const end = expr.indexOf(quote, i);
|
|
73
|
-
if (end === -1) {
|
|
74
|
-
throw new ExtractGrammarError("unterminated quoted bracket key", expr);
|
|
75
|
-
}
|
|
76
|
-
const key = expr.slice(i, end);
|
|
77
|
-
if (key.length === 0) {
|
|
78
|
-
throw new ExtractGrammarError("empty bracket key", expr);
|
|
79
|
-
}
|
|
80
|
-
i = end + 1;
|
|
81
|
-
if (expr[i] !== "]") {
|
|
82
|
-
throw new ExtractGrammarError("expected ']' after bracket key", expr);
|
|
83
|
-
}
|
|
84
|
-
i++;
|
|
85
|
-
segments.push({ kind: "bracket", key });
|
|
86
|
-
}
|
|
87
|
-
else if (ch === "(") {
|
|
88
|
-
throw new ExtractGrammarError("function calls not allowed", expr);
|
|
89
|
-
}
|
|
90
|
-
else {
|
|
91
|
-
throw new ExtractGrammarError(`unexpected character '${ch}'`, expr);
|
|
92
|
-
}
|
|
93
|
-
}
|
|
94
|
-
if (segments.length === 0) {
|
|
95
|
-
throw new ExtractGrammarError("expression must include at least one segment after the namespace", expr);
|
|
96
|
-
}
|
|
97
|
-
return { namespace, segments };
|
|
98
|
-
}
|
|
99
|
-
export function validateExtractGrammar(expr) {
|
|
100
|
-
parseExtractExpression(expr);
|
|
101
|
-
}
|
|
102
|
-
function walkPath(path, ctx) {
|
|
103
|
-
let cursor = ctx[path.namespace];
|
|
104
|
-
for (const seg of path.segments) {
|
|
105
|
-
if (cursor === undefined || cursor === null)
|
|
106
|
-
return undefined;
|
|
107
|
-
if (typeof cursor !== "object" || Array.isArray(cursor))
|
|
108
|
-
return undefined;
|
|
109
|
-
cursor = cursor[seg.key];
|
|
110
|
-
}
|
|
111
|
-
return cursor;
|
|
112
|
-
}
|
|
113
|
-
/**
|
|
114
|
-
* Stringify a resolved extract value for substitution into a `${VAR}` template.
|
|
115
|
-
* Strings pass through; numbers/booleans/bigints get `String(...)`. Objects and
|
|
116
|
-
* arrays fall through to `JSON.stringify` — uncommon for v1 paths but stable
|
|
117
|
-
* enough that audit / `explain --trace` consumers can rely on the shape.
|
|
118
|
-
*/
|
|
119
|
-
function stringifyResolved(value) {
|
|
120
|
-
if (typeof value === "string")
|
|
121
|
-
return value;
|
|
122
|
-
if (typeof value === "number" || typeof value === "boolean")
|
|
123
|
-
return String(value);
|
|
124
|
-
if (typeof value === "bigint")
|
|
125
|
-
return value.toString();
|
|
126
|
-
return JSON.stringify(value);
|
|
127
|
-
}
|
|
128
|
-
const BUILTIN_NAMES = [
|
|
129
|
-
"SESSION_ID",
|
|
130
|
-
"REPO",
|
|
131
|
-
"BRANCH",
|
|
132
|
-
"TOOL_NAME",
|
|
133
|
-
"CWD",
|
|
134
|
-
];
|
|
135
|
-
export function evaluateExtract(extracts, ctx, builtins) {
|
|
136
|
-
const values = {};
|
|
137
|
-
const traceData = [];
|
|
138
|
-
// Builtins first; an extract entry with the same name overrides both the
|
|
139
|
-
// value and the trace row so the trace stays one-row-per-variable.
|
|
140
|
-
for (const name of BUILTIN_NAMES) {
|
|
141
|
-
if (Object.prototype.hasOwnProperty.call(extracts, name))
|
|
142
|
-
continue;
|
|
143
|
-
const v = builtins[name];
|
|
144
|
-
values[name] = v;
|
|
145
|
-
traceData.push({
|
|
146
|
-
var: name,
|
|
147
|
-
expression: `<builtin:${name}>`,
|
|
148
|
-
resolved: v,
|
|
149
|
-
source: "builtin",
|
|
150
|
-
});
|
|
151
|
-
}
|
|
152
|
-
for (const [varName, expr] of Object.entries(extracts)) {
|
|
153
|
-
const path = parseExtractExpression(expr);
|
|
154
|
-
const raw = walkPath(path, ctx);
|
|
155
|
-
if (raw === undefined || raw === null) {
|
|
156
|
-
const placeholder = `\${${varName}}`;
|
|
157
|
-
values[varName] = placeholder;
|
|
158
|
-
traceData.push({
|
|
159
|
-
var: varName,
|
|
160
|
-
expression: expr,
|
|
161
|
-
resolved: placeholder,
|
|
162
|
-
source: "missing",
|
|
163
|
-
});
|
|
164
|
-
continue;
|
|
165
|
-
}
|
|
166
|
-
const resolved = stringifyResolved(raw);
|
|
167
|
-
values[varName] = resolved;
|
|
168
|
-
traceData.push({
|
|
169
|
-
var: varName,
|
|
170
|
-
expression: expr,
|
|
171
|
-
resolved,
|
|
172
|
-
source: "extract",
|
|
173
|
-
});
|
|
174
|
-
}
|
|
175
|
-
return { values, traceData };
|
|
176
|
-
}
|
|
177
|
-
const TEMPLATE_VAR_RE = /\$\{([A-Z][A-Z0-9_]*)\}/g;
|
|
178
|
-
export function substituteTemplate(template, values) {
|
|
179
|
-
const missing = [];
|
|
180
|
-
const result = template.replace(TEMPLATE_VAR_RE, (whole, name) => {
|
|
181
|
-
if (Object.prototype.hasOwnProperty.call(values, name)) {
|
|
182
|
-
return values[name];
|
|
183
|
-
}
|
|
184
|
-
if (!missing.includes(name))
|
|
185
|
-
missing.push(name);
|
|
186
|
-
return whole;
|
|
187
|
-
});
|
|
188
|
-
return { result, missing };
|
|
189
|
-
}
|
|
190
|
-
/**
|
|
191
|
-
* Read the RAW (unstringified) value an extract expression points at.
|
|
192
|
-
* `evaluateExtract` above stringifies for `${VAR}` substitution; an
|
|
193
|
-
* equality predicate must not, or `true` and `"true"` would compare equal.
|
|
194
|
-
*/
|
|
195
|
-
export function resolveExtractPathValue(expr, ctx) {
|
|
196
|
-
return walkPath(parseExtractExpression(expr), ctx);
|
|
197
|
-
}
|
|
198
|
-
/**
|
|
199
|
-
* The FIRST entry of `inputMatch` that does not hold for this event, or
|
|
200
|
-
* `null` when every entry holds (the trigger's input predicate passes).
|
|
201
|
-
*
|
|
202
|
-
* Fail direction on an unparseable expression: the entry is treated as
|
|
203
|
-
* HOLDING, so a malformed `input_match` leaves the policy matching and
|
|
204
|
-
* its `requires:` gate armed, rather than silently excusing the tool call
|
|
205
|
-
* from a block gate. The schema rejects such an expression at parse time,
|
|
206
|
-
* so this only guards hand-built `Manifest` objects (tests, embedders).
|
|
207
|
-
*/
|
|
208
|
-
export function firstInputMatchMismatch(inputMatch, ctx) {
|
|
209
|
-
for (const [expression, expected] of Object.entries(inputMatch)) {
|
|
210
|
-
let actual;
|
|
211
|
-
try {
|
|
212
|
-
actual = resolveExtractPathValue(expression, ctx);
|
|
213
|
-
}
|
|
214
|
-
catch {
|
|
215
|
-
continue;
|
|
216
|
-
}
|
|
217
|
-
if (actual === undefined || actual === null) {
|
|
218
|
-
return { expression, expected, actual, missing: true };
|
|
219
|
-
}
|
|
220
|
-
if (actual !== expected) {
|
|
221
|
-
return { expression, expected, actual, missing: false };
|
|
222
|
-
}
|
|
223
|
-
}
|
|
224
|
-
return null;
|
|
225
|
-
}
|
|
226
|
-
//# sourceMappingURL=extract.js.map
|
package/dist/io/extract.js.map
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"extract.js","sourceRoot":"","sources":["../../src/io/extract.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,83 +0,0 @@
|
|
|
1
|
-
import type { LedgerSession } from "../policies/ledger-client.js";
|
|
2
|
-
import type { LedgerEntry } from "../policies/requires.js";
|
|
3
|
-
import type { PolicyDecision } from "../runtime/intercept.js";
|
|
4
|
-
export interface LedgerRecordOptions {
|
|
5
|
-
mcpCommand: string[];
|
|
6
|
-
mcpEnv?: Record<string, string>;
|
|
7
|
-
cwd?: string;
|
|
8
|
-
timeoutMs?: number;
|
|
9
|
-
}
|
|
10
|
-
/**
|
|
11
|
-
* Canonical ledger-entry `type` for harness-emitted policy decisions.
|
|
12
|
-
* Owned here because this module also owns the encode/decode prefix.
|
|
13
|
-
* Every site that filters or writes policy-decision rows MUST go through
|
|
14
|
-
* this constant, so a typo at any one site does not silently disable the
|
|
15
|
-
* substring-pollution guard. See PR #47 review for the failure mode.
|
|
16
|
-
*/
|
|
17
|
-
export declare const POLICY_DECISION_TYPE = "policy_decision";
|
|
18
|
-
export interface PolicyDecisionPayload {
|
|
19
|
-
name: string;
|
|
20
|
-
outcome: PolicyDecision["outcome"];
|
|
21
|
-
enforcement: PolicyDecision["enforcement"];
|
|
22
|
-
reason: string;
|
|
23
|
-
ledgerTag: string;
|
|
24
|
-
extractValues: Record<string, string>;
|
|
25
|
-
requiresEval?: {
|
|
26
|
-
matchedCount: number;
|
|
27
|
-
reason: string;
|
|
28
|
-
};
|
|
29
|
-
/**
|
|
30
|
-
* Risk Gate verdicts for the action (Phase 7 #5). Present only when
|
|
31
|
-
* the Risk Gate was active for the event; absent for a pure Phase-4
|
|
32
|
-
* manifest, and absent on any `policy_decision` row recorded before
|
|
33
|
-
* Phase 7 #5 — `harness explain --trace` renders them only when present.
|
|
34
|
-
*/
|
|
35
|
-
risk?: PolicyDecision["risk"];
|
|
36
|
-
environment?: PolicyDecision["environment"];
|
|
37
|
-
/**
|
|
38
|
-
* See `PolicyDecision.whenUnclassifiedFallback`. Present only when
|
|
39
|
-
* the match was a fail-closed unclassified hit (M7). Absent on rows
|
|
40
|
-
* recorded before M7 or on rows where the action was classified.
|
|
41
|
-
*/
|
|
42
|
-
whenUnclassifiedFallback?: boolean;
|
|
43
|
-
evaluatedAt: string;
|
|
44
|
-
}
|
|
45
|
-
export declare function payloadFromDecision(decision: PolicyDecision): PolicyDecisionPayload;
|
|
46
|
-
export declare function encodeLedgerContent(payload: PolicyDecisionPayload): string;
|
|
47
|
-
/**
|
|
48
|
-
* Phase 5 #9 — preferred sort key for policy_decision rows.
|
|
49
|
-
*
|
|
50
|
-
* `evidence-ledger` stores `createdAt` at 1-second precision (SQLite
|
|
51
|
-
* `datetime('now')`), so two decisions evaluated within the same wall-
|
|
52
|
-
* clock second tie at `bt - at === 0`, and a stable sort returns the
|
|
53
|
-
* earliest entry as "latest". The decoded payload's `evaluatedAt` is
|
|
54
|
-
* `Date.toISOString()` (millisecond precision), which actually
|
|
55
|
-
* distinguishes back-to-back fires. Use it as the primary key, with a
|
|
56
|
-
* `createdAt` fallback for any future encoding that lacks `evaluatedAt`.
|
|
57
|
-
*
|
|
58
|
-
* Returns `NaN` only when both fields are unparseable; callers should
|
|
59
|
-
* tolerate ties by treating equal results as preserve-order.
|
|
60
|
-
*/
|
|
61
|
-
export declare function decisionSortKey(entry: LedgerEntry, payload: PolicyDecisionPayload): number;
|
|
62
|
-
export declare function decodeLedgerContent(content: string): PolicyDecisionPayload | null;
|
|
63
|
-
/**
|
|
64
|
-
* Record a `policy_decision` row over an already-open {@link LedgerSession}
|
|
65
|
-
* instead of spawning a dedicated grounding-mcp subprocess per decision.
|
|
66
|
-
* This is the runtime intercept's hot path: K matching policies per tool
|
|
67
|
-
* event share ONE connection for all their audit writes (plus the summary
|
|
68
|
-
* query), instead of the 2K sequential spawns the 2026-07-01 review flagged
|
|
69
|
-
* as a fail-open-under-load risk against the 30s hook budget.
|
|
70
|
-
*
|
|
71
|
-
* Same retry contract as {@link recordPolicyDecision}: a server-side error
|
|
72
|
-
* on `type: "policy_decision"` (old grounding-mcp without that enum value)
|
|
73
|
-
* retries once with the legacy `type: "fact"` prefix-encoded row. A degraded
|
|
74
|
-
* transport is terminal — the session's process is gone, nothing to retry.
|
|
75
|
-
*/
|
|
76
|
-
export declare function recordPolicyDecisionOnSession(session: LedgerSession, decision: PolicyDecision, sessionId: string): Promise<{
|
|
77
|
-
ok: boolean;
|
|
78
|
-
reason?: string;
|
|
79
|
-
}>;
|
|
80
|
-
export declare function recordPolicyDecision(decision: PolicyDecision, sessionId: string, opts: LedgerRecordOptions): Promise<{
|
|
81
|
-
ok: boolean;
|
|
82
|
-
reason?: string;
|
|
83
|
-
}>;
|
package/dist/io/ledger-record.js
DELETED
|
@@ -1,301 +0,0 @@
|
|
|
1
|
-
// Phase 4 #5 — `policy_decision` audit-log writer.
|
|
2
|
-
//
|
|
3
|
-
// Writes one ledger entry per policy decision via grounding-mcp's
|
|
4
|
-
// `ledger_add` verb. The verb only accepts the four fact/hypothesis/rejected/
|
|
5
|
-
// unknown types, so we stash the structured payload as JSON inside `content`
|
|
6
|
-
// behind a `policy_decision:` prefix that `harness audit` and
|
|
7
|
-
// `harness explain --trace` (Phase 4 #6/#7) grep for.
|
|
8
|
-
import { spawn } from "node:child_process";
|
|
9
|
-
import { parseLedgerTimestamp } from "../policies/timestamp.js";
|
|
10
|
-
import { expandHome, expandHomeInEnv } from "./expand-home.js";
|
|
11
|
-
import { VERSION } from "../version.js";
|
|
12
|
-
const DEFAULT_TIMEOUT_MS = 5_000;
|
|
13
|
-
const SOURCE = "harness-policy-intercept";
|
|
14
|
-
/**
|
|
15
|
-
* Canonical ledger-entry `type` for harness-emitted policy decisions.
|
|
16
|
-
* Owned here because this module also owns the encode/decode prefix.
|
|
17
|
-
* Every site that filters or writes policy-decision rows MUST go through
|
|
18
|
-
* this constant, so a typo at any one site does not silently disable the
|
|
19
|
-
* substring-pollution guard. See PR #47 review for the failure mode.
|
|
20
|
-
*/
|
|
21
|
-
export const POLICY_DECISION_TYPE = "policy_decision";
|
|
22
|
-
const PREFIX = POLICY_DECISION_TYPE;
|
|
23
|
-
export function payloadFromDecision(decision) {
|
|
24
|
-
return {
|
|
25
|
-
name: decision.policyName,
|
|
26
|
-
outcome: decision.outcome,
|
|
27
|
-
enforcement: decision.enforcement,
|
|
28
|
-
reason: decision.reason,
|
|
29
|
-
ledgerTag: decision.ledgerTag,
|
|
30
|
-
extractValues: decision.extractValues,
|
|
31
|
-
...(decision.requiresEval && { requiresEval: decision.requiresEval }),
|
|
32
|
-
...(decision.risk && { risk: decision.risk }),
|
|
33
|
-
...(decision.environment && { environment: decision.environment }),
|
|
34
|
-
// M7: carry the fail-closed unclassified flag into the serialised
|
|
35
|
-
// audit row so `harness audit` / `explain --trace` can surface it.
|
|
36
|
-
// Absent (not `false`) when the action was classified or the policy
|
|
37
|
-
// had no `when:` block, keeping pre-M7 rows byte-identical.
|
|
38
|
-
...(decision.whenUnclassifiedFallback === true && {
|
|
39
|
-
whenUnclassifiedFallback: true,
|
|
40
|
-
}),
|
|
41
|
-
evaluatedAt: decision.evaluatedAt,
|
|
42
|
-
};
|
|
43
|
-
}
|
|
44
|
-
export function encodeLedgerContent(payload) {
|
|
45
|
-
return `${PREFIX}:${payload.name}:${payload.outcome} ${JSON.stringify(payload)}`;
|
|
46
|
-
}
|
|
47
|
-
/**
|
|
48
|
-
* Phase 5 #9 — preferred sort key for policy_decision rows.
|
|
49
|
-
*
|
|
50
|
-
* `evidence-ledger` stores `createdAt` at 1-second precision (SQLite
|
|
51
|
-
* `datetime('now')`), so two decisions evaluated within the same wall-
|
|
52
|
-
* clock second tie at `bt - at === 0`, and a stable sort returns the
|
|
53
|
-
* earliest entry as "latest". The decoded payload's `evaluatedAt` is
|
|
54
|
-
* `Date.toISOString()` (millisecond precision), which actually
|
|
55
|
-
* distinguishes back-to-back fires. Use it as the primary key, with a
|
|
56
|
-
* `createdAt` fallback for any future encoding that lacks `evaluatedAt`.
|
|
57
|
-
*
|
|
58
|
-
* Returns `NaN` only when both fields are unparseable; callers should
|
|
59
|
-
* tolerate ties by treating equal results as preserve-order.
|
|
60
|
-
*/
|
|
61
|
-
export function decisionSortKey(entry, payload) {
|
|
62
|
-
const evaluatedMs = parseLedgerTimestamp(payload.evaluatedAt);
|
|
63
|
-
if (!Number.isNaN(evaluatedMs))
|
|
64
|
-
return evaluatedMs;
|
|
65
|
-
if (entry.createdAt instanceof Date)
|
|
66
|
-
return entry.createdAt.getTime();
|
|
67
|
-
return parseLedgerTimestamp(entry.createdAt);
|
|
68
|
-
}
|
|
69
|
-
export function decodeLedgerContent(content) {
|
|
70
|
-
if (!content.startsWith(`${PREFIX}:`))
|
|
71
|
-
return null;
|
|
72
|
-
const space = content.indexOf(" ");
|
|
73
|
-
if (space === -1)
|
|
74
|
-
return null;
|
|
75
|
-
try {
|
|
76
|
-
const obj = JSON.parse(content.slice(space + 1));
|
|
77
|
-
return obj;
|
|
78
|
-
}
|
|
79
|
-
catch {
|
|
80
|
-
return null;
|
|
81
|
-
}
|
|
82
|
-
}
|
|
83
|
-
/**
|
|
84
|
-
* Record a `policy_decision` row over an already-open {@link LedgerSession}
|
|
85
|
-
* instead of spawning a dedicated grounding-mcp subprocess per decision.
|
|
86
|
-
* This is the runtime intercept's hot path: K matching policies per tool
|
|
87
|
-
* event share ONE connection for all their audit writes (plus the summary
|
|
88
|
-
* query), instead of the 2K sequential spawns the 2026-07-01 review flagged
|
|
89
|
-
* as a fail-open-under-load risk against the 30s hook budget.
|
|
90
|
-
*
|
|
91
|
-
* Same retry contract as {@link recordPolicyDecision}: a server-side error
|
|
92
|
-
* on `type: "policy_decision"` (old grounding-mcp without that enum value)
|
|
93
|
-
* retries once with the legacy `type: "fact"` prefix-encoded row. A degraded
|
|
94
|
-
* transport is terminal — the session's process is gone, nothing to retry.
|
|
95
|
-
*/
|
|
96
|
-
export async function recordPolicyDecisionOnSession(session, decision, sessionId) {
|
|
97
|
-
const payload = payloadFromDecision(decision);
|
|
98
|
-
const content = encodeLedgerContent(payload);
|
|
99
|
-
const first = await session.callTool("ledger_add", {
|
|
100
|
-
sessionId,
|
|
101
|
-
type: POLICY_DECISION_TYPE,
|
|
102
|
-
content,
|
|
103
|
-
source: SOURCE,
|
|
104
|
-
});
|
|
105
|
-
if (first.status === "ok")
|
|
106
|
-
return { ok: true };
|
|
107
|
-
if (first.status === "degraded")
|
|
108
|
-
return { ok: false, reason: first.reason };
|
|
109
|
-
// Likely an old grounding-mcp without the policy_decision enum value —
|
|
110
|
-
// retry once with the legacy fact-with-prefix encoding.
|
|
111
|
-
const fallback = await session.callTool("ledger_add", {
|
|
112
|
-
sessionId,
|
|
113
|
-
type: "fact",
|
|
114
|
-
content,
|
|
115
|
-
source: SOURCE,
|
|
116
|
-
});
|
|
117
|
-
if (fallback.status === "ok")
|
|
118
|
-
return { ok: true };
|
|
119
|
-
return {
|
|
120
|
-
ok: false,
|
|
121
|
-
reason: fallback.status === "error"
|
|
122
|
-
? `ledger_add error: ${fallback.errorMessage}`
|
|
123
|
-
: fallback.reason,
|
|
124
|
-
};
|
|
125
|
-
}
|
|
126
|
-
export async function recordPolicyDecision(decision, sessionId, opts) {
|
|
127
|
-
const list = opts.mcpCommand;
|
|
128
|
-
if (!list || list.length === 0) {
|
|
129
|
-
return { ok: false, reason: "grounding-mcp command is empty" };
|
|
130
|
-
}
|
|
131
|
-
const exe = expandHome(list[0]);
|
|
132
|
-
const args = list.slice(1).map((p) => expandHome(p));
|
|
133
|
-
const timeoutMs = opts.timeoutMs ?? DEFAULT_TIMEOUT_MS;
|
|
134
|
-
const payload = payloadFromDecision(decision);
|
|
135
|
-
const content = encodeLedgerContent(payload);
|
|
136
|
-
// Defense-in-depth (agent-tasks/973596d7): expand leading `~/` in
|
|
137
|
-
// every env value before merging into the spawned process env. The
|
|
138
|
-
// validate-time warning still fires for operators with the literal
|
|
139
|
-
// tilde in their manifest, but a manifest that bypassed validate
|
|
140
|
-
// (or the warning was ignored on) cannot now scatter a rogue
|
|
141
|
-
// cwd-relative `./~/…` path. See expandHome doc for scope.
|
|
142
|
-
const expandedEnv = expandHomeInEnv(opts.mcpEnv);
|
|
143
|
-
return new Promise((resolve) => {
|
|
144
|
-
let child;
|
|
145
|
-
try {
|
|
146
|
-
child = spawn(exe, args, {
|
|
147
|
-
cwd: opts.cwd,
|
|
148
|
-
env: { ...process.env, ...(expandedEnv ?? {}) },
|
|
149
|
-
stdio: ["pipe", "pipe", "pipe"],
|
|
150
|
-
});
|
|
151
|
-
}
|
|
152
|
-
catch (err) {
|
|
153
|
-
resolve({ ok: false, reason: `spawn failed: ${err.message}` });
|
|
154
|
-
return;
|
|
155
|
-
}
|
|
156
|
-
let settled = false;
|
|
157
|
-
const settle = (r) => {
|
|
158
|
-
if (settled)
|
|
159
|
-
return;
|
|
160
|
-
settled = true;
|
|
161
|
-
try {
|
|
162
|
-
child.kill("SIGTERM");
|
|
163
|
-
}
|
|
164
|
-
catch {
|
|
165
|
-
/* ignore */
|
|
166
|
-
}
|
|
167
|
-
resolve(r);
|
|
168
|
-
};
|
|
169
|
-
let stdoutBuf = "";
|
|
170
|
-
let stderrBuf = "";
|
|
171
|
-
let recordSent = false;
|
|
172
|
-
let fallbackSent = false;
|
|
173
|
-
/**
|
|
174
|
-
* Phase 5 #4 — write attempt with type='policy_decision'. When
|
|
175
|
-
* the connected grounding-mcp pre-dates that change, the call
|
|
176
|
-
* returns a zod / CHECK constraint error; we then retry with the
|
|
177
|
-
* legacy type='fact' + prefix-encoded content path.
|
|
178
|
-
*/
|
|
179
|
-
const sendInitialAdd = () => {
|
|
180
|
-
child.stdin.write(`${JSON.stringify({
|
|
181
|
-
jsonrpc: "2.0",
|
|
182
|
-
id: 2,
|
|
183
|
-
method: "tools/call",
|
|
184
|
-
params: {
|
|
185
|
-
name: "ledger_add",
|
|
186
|
-
arguments: {
|
|
187
|
-
sessionId,
|
|
188
|
-
type: POLICY_DECISION_TYPE,
|
|
189
|
-
content,
|
|
190
|
-
source: SOURCE,
|
|
191
|
-
},
|
|
192
|
-
},
|
|
193
|
-
})}\n`);
|
|
194
|
-
};
|
|
195
|
-
const sendFallbackAdd = () => {
|
|
196
|
-
fallbackSent = true;
|
|
197
|
-
child.stdin.write(`${JSON.stringify({
|
|
198
|
-
jsonrpc: "2.0",
|
|
199
|
-
id: 3,
|
|
200
|
-
method: "tools/call",
|
|
201
|
-
params: {
|
|
202
|
-
name: "ledger_add",
|
|
203
|
-
arguments: {
|
|
204
|
-
sessionId,
|
|
205
|
-
type: "fact",
|
|
206
|
-
content,
|
|
207
|
-
source: SOURCE,
|
|
208
|
-
},
|
|
209
|
-
},
|
|
210
|
-
})}\n`);
|
|
211
|
-
};
|
|
212
|
-
child.stdout.on("data", (chunk) => {
|
|
213
|
-
stdoutBuf += chunk.toString("utf8");
|
|
214
|
-
let nl = stdoutBuf.indexOf("\n");
|
|
215
|
-
while (nl !== -1) {
|
|
216
|
-
const line = stdoutBuf.slice(0, nl).trim();
|
|
217
|
-
stdoutBuf = stdoutBuf.slice(nl + 1);
|
|
218
|
-
if (line) {
|
|
219
|
-
try {
|
|
220
|
-
const msg = JSON.parse(line);
|
|
221
|
-
if (msg.id === 1 && !recordSent) {
|
|
222
|
-
child.stdin.write(`${JSON.stringify({
|
|
223
|
-
jsonrpc: "2.0",
|
|
224
|
-
method: "notifications/initialized",
|
|
225
|
-
})}\n`);
|
|
226
|
-
sendInitialAdd();
|
|
227
|
-
recordSent = true;
|
|
228
|
-
}
|
|
229
|
-
else if (msg.id === 2) {
|
|
230
|
-
if (msg.error) {
|
|
231
|
-
// Likely an old grounding-mcp without the
|
|
232
|
-
// policy_decision enum value — retry once with the
|
|
233
|
-
// legacy fact-with-prefix encoding.
|
|
234
|
-
if (!fallbackSent) {
|
|
235
|
-
sendFallbackAdd();
|
|
236
|
-
return;
|
|
237
|
-
}
|
|
238
|
-
settle({
|
|
239
|
-
ok: false,
|
|
240
|
-
reason: `ledger_add error: ${msg.error.message ?? "unknown"}`,
|
|
241
|
-
});
|
|
242
|
-
return;
|
|
243
|
-
}
|
|
244
|
-
settle({ ok: true });
|
|
245
|
-
return;
|
|
246
|
-
}
|
|
247
|
-
else if (msg.id === 3) {
|
|
248
|
-
if (msg.error) {
|
|
249
|
-
settle({
|
|
250
|
-
ok: false,
|
|
251
|
-
reason: `ledger_add error: ${msg.error.message ?? "unknown"}`,
|
|
252
|
-
});
|
|
253
|
-
return;
|
|
254
|
-
}
|
|
255
|
-
settle({ ok: true });
|
|
256
|
-
return;
|
|
257
|
-
}
|
|
258
|
-
}
|
|
259
|
-
catch {
|
|
260
|
-
/* ignore non-JSON */
|
|
261
|
-
}
|
|
262
|
-
}
|
|
263
|
-
nl = stdoutBuf.indexOf("\n");
|
|
264
|
-
}
|
|
265
|
-
});
|
|
266
|
-
child.stderr.on("data", (c) => {
|
|
267
|
-
stderrBuf += c.toString("utf8");
|
|
268
|
-
});
|
|
269
|
-
child.on("error", (err) => {
|
|
270
|
-
settle({ ok: false, reason: `spawn failed: ${err.message}` });
|
|
271
|
-
});
|
|
272
|
-
child.on("exit", () => {
|
|
273
|
-
const tail = stderrBuf.trim().split("\n").pop()?.trim() || "(no stderr)";
|
|
274
|
-
settle({ ok: false, reason: `grounding-mcp exited: ${tail}` });
|
|
275
|
-
});
|
|
276
|
-
child.stdin.on("error", () => {
|
|
277
|
-
/* EPIPE; exit listener handles */
|
|
278
|
-
});
|
|
279
|
-
try {
|
|
280
|
-
child.stdin.write(`${JSON.stringify({
|
|
281
|
-
jsonrpc: "2.0",
|
|
282
|
-
id: 1,
|
|
283
|
-
method: "initialize",
|
|
284
|
-
params: {
|
|
285
|
-
protocolVersion: "2024-11-05",
|
|
286
|
-
capabilities: {},
|
|
287
|
-
clientInfo: { name: "harness-policy-intercept", version: VERSION },
|
|
288
|
-
},
|
|
289
|
-
})}\n`);
|
|
290
|
-
}
|
|
291
|
-
catch (err) {
|
|
292
|
-
settle({ ok: false, reason: `init write failed: ${err.message}` });
|
|
293
|
-
return;
|
|
294
|
-
}
|
|
295
|
-
const t = setTimeout(() => {
|
|
296
|
-
settle({ ok: false, reason: `grounding-mcp timeout after ${timeoutMs}ms` });
|
|
297
|
-
}, timeoutMs);
|
|
298
|
-
t.unref();
|
|
299
|
-
});
|
|
300
|
-
}
|
|
301
|
-
//# sourceMappingURL=ledger-record.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"ledger-record.js","sourceRoot":"","sources":["../../src/io/ledger-record.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,36 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* Shared read-and-classify loop for a directory of small JSON marker/record
|
|
3
|
-
* files, used by every doctor/observation reader that scans one file per
|
|
4
|
-
* session and tolerates missing/corrupt entries rather than throwing
|
|
5
|
-
* (extracted from `ug-auto-approvals.ts` and `permission-mode-observations.ts`,
|
|
6
|
-
* which had the same 15-line loop verbatim: readdir, reject symlink /
|
|
7
|
-
* non-regular / raced-away entries silently, count a read failure as
|
|
8
|
-
* unreadable, `safeJsonParse` the body, hand it to the caller's own
|
|
9
|
-
* validator/transform).
|
|
10
|
-
*
|
|
11
|
-
* A missing directory resolves to `{ dirPresent: false, entries: [],
|
|
12
|
-
* unreadableCount: 0 }` rather than throwing: every caller here is a
|
|
13
|
-
* best-effort read for a doctor listing or an audit surface, never a gate
|
|
14
|
-
* decision.
|
|
15
|
-
*/
|
|
16
|
-
export interface ReadJsonDirEntriesResult<T> {
|
|
17
|
-
dirPresent: boolean;
|
|
18
|
-
entries: T[];
|
|
19
|
-
unreadableCount: number;
|
|
20
|
-
}
|
|
21
|
-
export interface ReadJsonDirEntriesOptions<T> {
|
|
22
|
-
/**
|
|
23
|
-
* Return true to silently skip an entry (not counted as unreadable) before
|
|
24
|
-
* it is even read. Used to exclude filenames that are not this reader's
|
|
25
|
-
* kind of marker at all (a differently-prefixed sibling marker in the
|
|
26
|
-
* same directory), as distinct from a marker that IS this reader's kind
|
|
27
|
-
* but fails to parse.
|
|
28
|
-
*/
|
|
29
|
-
skip?: (name: string) => boolean;
|
|
30
|
-
/**
|
|
31
|
-
* Parse and validate the file's already-`safeJsonParse`d body. Return the
|
|
32
|
-
* value to keep, or null to count the entry as unreadable.
|
|
33
|
-
*/
|
|
34
|
-
parse: (raw: unknown, name: string) => T | null;
|
|
35
|
-
}
|
|
36
|
-
export declare function readJsonDirEntriesRejectingSymlinks<T>(dir: string, opts: ReadJsonDirEntriesOptions<T>): ReadJsonDirEntriesResult<T>;
|