approval-md 0.0.1 → 0.1.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/LICENSE +176 -0
- package/NOTICE +5 -0
- package/README.md +909 -4
- package/SPEC.md +445 -32
- package/cli.js +29 -3
- package/dist/src/adapters/agentmail.js +1200 -0
- package/dist/src/adapters/agentmail.js.map +1 -0
- package/dist/src/adapters/conformance.js +461 -0
- package/dist/src/adapters/conformance.js.map +1 -0
- package/dist/src/adapters/contract.js +941 -0
- package/dist/src/adapters/contract.js.map +1 -0
- package/dist/src/adapters/email.js +749 -0
- package/dist/src/adapters/email.js.map +1 -0
- package/dist/src/adapters/env-passphrase.js +132 -0
- package/dist/src/adapters/env-passphrase.js.map +1 -0
- package/dist/src/adapters/registry.js +76 -0
- package/dist/src/adapters/registry.js.map +1 -0
- package/dist/src/adapters/smtp.js +499 -0
- package/dist/src/adapters/smtp.js.map +1 -0
- package/dist/src/adapters/vault-provider.js +161 -0
- package/dist/src/adapters/vault-provider.js.map +1 -0
- package/dist/src/channels/batch.js +121 -0
- package/dist/src/channels/batch.js.map +1 -0
- package/dist/src/channels/cli.js +468 -0
- package/dist/src/channels/cli.js.map +1 -0
- package/dist/src/channels/conformance.js +445 -0
- package/dist/src/channels/conformance.js.map +1 -0
- package/dist/src/channels/contract.js +494 -0
- package/dist/src/channels/contract.js.map +1 -0
- package/dist/src/channels/payload-view.js +43 -0
- package/dist/src/channels/payload-view.js.map +1 -0
- package/dist/src/channels/render-queue.js +564 -0
- package/dist/src/channels/render-queue.js.map +1 -0
- package/dist/src/channels/tagging.js +723 -0
- package/dist/src/channels/tagging.js.map +1 -0
- package/dist/src/channels/telegram.js +3190 -0
- package/dist/src/channels/telegram.js.map +1 -0
- package/dist/src/channels/web.js +903 -0
- package/dist/src/channels/web.js.map +1 -0
- package/dist/src/cli/adapter.js +278 -0
- package/dist/src/cli/adapter.js.map +1 -0
- package/dist/src/cli/amend.js +2171 -0
- package/dist/src/cli/amend.js.map +1 -0
- package/dist/src/cli/args.js +86 -0
- package/dist/src/cli/args.js.map +1 -0
- package/dist/src/cli/attest.js +307 -0
- package/dist/src/cli/attest.js.map +1 -0
- package/dist/src/cli/audit-card.js +201 -0
- package/dist/src/cli/audit-card.js.map +1 -0
- package/dist/src/cli/audit.js +460 -0
- package/dist/src/cli/audit.js.map +1 -0
- package/dist/src/cli/channel-telegram.js +2063 -0
- package/dist/src/cli/channel-telegram.js.map +1 -0
- package/dist/src/cli/channel-web.js +357 -0
- package/dist/src/cli/channel-web.js.map +1 -0
- package/dist/src/cli/channel.js +438 -0
- package/dist/src/cli/channel.js.map +1 -0
- package/dist/src/cli/checkpoint-tap.js +238 -0
- package/dist/src/cli/checkpoint-tap.js.map +1 -0
- package/dist/src/cli/coverage.js +343 -0
- package/dist/src/cli/coverage.js.map +1 -0
- package/dist/src/cli/daemon.js +631 -0
- package/dist/src/cli/daemon.js.map +1 -0
- package/dist/src/cli/doctor.js +2648 -0
- package/dist/src/cli/doctor.js.map +1 -0
- package/dist/src/cli/env.js +302 -0
- package/dist/src/cli/env.js.map +1 -0
- package/dist/src/cli/execute.js +1682 -0
- package/dist/src/cli/execute.js.map +1 -0
- package/dist/src/cli/exit-codes.js +82 -0
- package/dist/src/cli/exit-codes.js.map +1 -0
- package/dist/src/cli/feedback.js +205 -0
- package/dist/src/cli/feedback.js.map +1 -0
- package/dist/src/cli/gate-window.js +294 -0
- package/dist/src/cli/gate-window.js.map +1 -0
- package/dist/src/cli/gate.js +557 -0
- package/dist/src/cli/gate.js.map +1 -0
- package/dist/src/cli/git-scope.js +295 -0
- package/dist/src/cli/git-scope.js.map +1 -0
- package/dist/src/cli/gloss-attach.js +107 -0
- package/dist/src/cli/gloss-attach.js.map +1 -0
- package/dist/src/cli/gloss-codex-child.js +149 -0
- package/dist/src/cli/gloss-codex-child.js.map +1 -0
- package/dist/src/cli/gloss-codex.js +255 -0
- package/dist/src/cli/gloss-codex.js.map +1 -0
- package/dist/src/cli/gloss-options.js +79 -0
- package/dist/src/cli/gloss-options.js.map +1 -0
- package/dist/src/cli/gloss.js +362 -0
- package/dist/src/cli/gloss.js.map +1 -0
- package/dist/src/cli/help.js +2217 -0
- package/dist/src/cli/help.js.map +1 -0
- package/dist/src/cli/hook.js +2743 -0
- package/dist/src/cli/hook.js.map +1 -0
- package/dist/src/cli/import.js +175 -0
- package/dist/src/cli/import.js.map +1 -0
- package/dist/src/cli/init.js +336 -0
- package/dist/src/cli/init.js.map +1 -0
- package/dist/src/cli/instructions.js +262 -0
- package/dist/src/cli/instructions.js.map +1 -0
- package/dist/src/cli/journal.js +238 -0
- package/dist/src/cli/journal.js.map +1 -0
- package/dist/src/cli/log-advance.js +749 -0
- package/dist/src/cli/log-advance.js.map +1 -0
- package/dist/src/cli/log-anchor.js +387 -0
- package/dist/src/cli/log-anchor.js.map +1 -0
- package/dist/src/cli/log-checkpoint.js +128 -0
- package/dist/src/cli/log-checkpoint.js.map +1 -0
- package/dist/src/cli/log-sync.js +849 -0
- package/dist/src/cli/log-sync.js.map +1 -0
- package/dist/src/cli/log-verbs.js +354 -0
- package/dist/src/cli/log-verbs.js.map +1 -0
- package/dist/src/cli/long-help.js +148 -0
- package/dist/src/cli/long-help.js.map +1 -0
- package/dist/src/cli/main.js +1056 -0
- package/dist/src/cli/main.js.map +1 -0
- package/dist/src/cli/mcp.js +306 -0
- package/dist/src/cli/mcp.js.map +1 -0
- package/dist/src/cli/paths.js +79 -0
- package/dist/src/cli/paths.js.map +1 -0
- package/dist/src/cli/payload.js +253 -0
- package/dist/src/cli/payload.js.map +1 -0
- package/dist/src/cli/policy.js +229 -0
- package/dist/src/cli/policy.js.map +1 -0
- package/dist/src/cli/preflight.js +888 -0
- package/dist/src/cli/preflight.js.map +1 -0
- package/dist/src/cli/progress.js +112 -0
- package/dist/src/cli/progress.js.map +1 -0
- package/dist/src/cli/prompt.js +312 -0
- package/dist/src/cli/prompt.js.map +1 -0
- package/dist/src/cli/records.js +66 -0
- package/dist/src/cli/records.js.map +1 -0
- package/dist/src/cli/render.js +132 -0
- package/dist/src/cli/render.js.map +1 -0
- package/dist/src/cli/sandbox.js +150 -0
- package/dist/src/cli/sandbox.js.map +1 -0
- package/dist/src/cli/scaffold.js +137 -0
- package/dist/src/cli/scaffold.js.map +1 -0
- package/dist/src/cli/setup-adapter.js +475 -0
- package/dist/src/cli/setup-adapter.js.map +1 -0
- package/dist/src/cli/setup-channel.js +635 -0
- package/dist/src/cli/setup-channel.js.map +1 -0
- package/dist/src/cli/setup-checkpoint.js +196 -0
- package/dist/src/cli/setup-checkpoint.js.map +1 -0
- package/dist/src/cli/setup-common.js +376 -0
- package/dist/src/cli/setup-common.js.map +1 -0
- package/dist/src/cli/setup-flow.js +476 -0
- package/dist/src/cli/setup-flow.js.map +1 -0
- package/dist/src/cli/setup-service.js +308 -0
- package/dist/src/cli/setup-service.js.map +1 -0
- package/dist/src/cli/setup.js +473 -0
- package/dist/src/cli/setup.js.map +1 -0
- package/dist/src/cli/style.js +469 -0
- package/dist/src/cli/style.js.map +1 -0
- package/dist/src/cli/token.js +274 -0
- package/dist/src/cli/token.js.map +1 -0
- package/dist/src/cli/up.js +847 -0
- package/dist/src/cli/up.js.map +1 -0
- package/dist/src/cli/usage.js +91 -0
- package/dist/src/cli/usage.js.map +1 -0
- package/dist/src/cli/values.js +189 -0
- package/dist/src/cli/values.js.map +1 -0
- package/dist/src/cli/vault.js +362 -0
- package/dist/src/cli/vault.js.map +1 -0
- package/dist/src/cli/verb-registry.js +2173 -0
- package/dist/src/cli/verb-registry.js.map +1 -0
- package/dist/src/cli/wordmark.js +52 -0
- package/dist/src/cli/wordmark.js.map +1 -0
- package/dist/src/core/advance-cycle.js +200 -0
- package/dist/src/core/advance-cycle.js.map +1 -0
- package/dist/src/core/agents-md.js +747 -0
- package/dist/src/core/agents-md.js.map +1 -0
- package/dist/src/core/attest.js +577 -0
- package/dist/src/core/attest.js.map +1 -0
- package/dist/src/core/audit.js +882 -0
- package/dist/src/core/audit.js.map +1 -0
- package/dist/src/core/budgets.js +449 -0
- package/dist/src/core/budgets.js.map +1 -0
- package/dist/src/core/checkpoint.js +738 -0
- package/dist/src/core/checkpoint.js.map +1 -0
- package/dist/src/core/child-env.js +86 -0
- package/dist/src/core/child-env.js.map +1 -0
- package/dist/src/core/clock.js +43 -0
- package/dist/src/core/clock.js.map +1 -0
- package/dist/src/core/command-class.js +2321 -0
- package/dist/src/core/command-class.js.map +1 -0
- package/dist/src/core/coverage-sources/adapter.js +71 -0
- package/dist/src/core/coverage-sources/adapter.js.map +1 -0
- package/dist/src/core/coverage-sources/gh.js +136 -0
- package/dist/src/core/coverage-sources/gh.js.map +1 -0
- package/dist/src/core/coverage-sources/git.js +269 -0
- package/dist/src/core/coverage-sources/git.js.map +1 -0
- package/dist/src/core/coverage.js +337 -0
- package/dist/src/core/coverage.js.map +1 -0
- package/dist/src/core/credential-spec.js +23 -0
- package/dist/src/core/credential-spec.js.map +1 -0
- package/dist/src/core/dark-session.js +714 -0
- package/dist/src/core/dark-session.js.map +1 -0
- package/dist/src/core/decision-refusal.js +265 -0
- package/dist/src/core/decision-refusal.js.map +1 -0
- package/dist/src/core/env-file.js +837 -0
- package/dist/src/core/env-file.js.map +1 -0
- package/dist/src/core/execute.js +1233 -0
- package/dist/src/core/execute.js.map +1 -0
- package/dist/src/core/frontmatter.js +100 -0
- package/dist/src/core/frontmatter.js.map +1 -0
- package/dist/src/core/gate-window.js +506 -0
- package/dist/src/core/gate-window.js.map +1 -0
- package/dist/src/core/gate.js +2947 -0
- package/dist/src/core/gate.js.map +1 -0
- package/dist/src/core/git-run.js +93 -0
- package/dist/src/core/git-run.js.map +1 -0
- package/dist/src/core/harness-version.js +210 -0
- package/dist/src/core/harness-version.js.map +1 -0
- package/dist/src/core/harness-wait.js +58 -0
- package/dist/src/core/harness-wait.js.map +1 -0
- package/dist/src/core/head-retry.js +121 -0
- package/dist/src/core/head-retry.js.map +1 -0
- package/dist/src/core/instance.js +319 -0
- package/dist/src/core/instance.js.map +1 -0
- package/dist/src/core/intake-limits.js +350 -0
- package/dist/src/core/intake-limits.js.map +1 -0
- package/dist/src/core/jcs.js +132 -0
- package/dist/src/core/jcs.js.map +1 -0
- package/dist/src/core/journal.js +200 -0
- package/dist/src/core/journal.js.map +1 -0
- package/dist/src/core/live-draw.js +703 -0
- package/dist/src/core/live-draw.js.map +1 -0
- package/dist/src/core/log-reconcile.js +136 -0
- package/dist/src/core/log-reconcile.js.map +1 -0
- package/dist/src/core/log.js +546 -0
- package/dist/src/core/log.js.map +1 -0
- package/dist/src/core/loop.js +476 -0
- package/dist/src/core/loop.js.map +1 -0
- package/dist/src/core/md-fence.js +74 -0
- package/dist/src/core/md-fence.js.map +1 -0
- package/dist/src/core/money.js +195 -0
- package/dist/src/core/money.js.map +1 -0
- package/dist/src/core/payload-census.js +146 -0
- package/dist/src/core/payload-census.js.map +1 -0
- package/dist/src/core/payload-store.js +340 -0
- package/dist/src/core/payload-store.js.map +1 -0
- package/dist/src/core/payload.js +80 -0
- package/dist/src/core/payload.js.map +1 -0
- package/dist/src/core/policy-diff.js +565 -0
- package/dist/src/core/policy-diff.js.map +1 -0
- package/dist/src/core/policy-expectations.js +394 -0
- package/dist/src/core/policy-expectations.js.map +1 -0
- package/dist/src/core/policy-explain.js +230 -0
- package/dist/src/core/policy-explain.js.map +1 -0
- package/dist/src/core/policy-load.js +524 -0
- package/dist/src/core/policy-load.js.map +1 -0
- package/dist/src/core/policy-match.js +467 -0
- package/dist/src/core/policy-match.js.map +1 -0
- package/dist/src/core/policy-proposal.js +458 -0
- package/dist/src/core/policy-proposal.js.map +1 -0
- package/dist/src/core/prompt-layout.js +422 -0
- package/dist/src/core/prompt-layout.js.map +1 -0
- package/dist/src/core/protected-path-guard.js +1087 -0
- package/dist/src/core/protected-path-guard.js.map +1 -0
- package/dist/src/core/registration.js +39 -0
- package/dist/src/core/registration.js.map +1 -0
- package/dist/src/core/reindex.js +336 -0
- package/dist/src/core/reindex.js.map +1 -0
- package/dist/src/core/sampler.js +388 -0
- package/dist/src/core/sampler.js.map +1 -0
- package/dist/src/core/sandbox.js +424 -0
- package/dist/src/core/sandbox.js.map +1 -0
- package/dist/src/core/seal.js +290 -0
- package/dist/src/core/seal.js.map +1 -0
- package/dist/src/core/state.js +1009 -0
- package/dist/src/core/state.js.map +1 -0
- package/dist/src/core/task-file.js +464 -0
- package/dist/src/core/task-file.js.map +1 -0
- package/dist/src/core/telegram-config.js +114 -0
- package/dist/src/core/telegram-config.js.map +1 -0
- package/dist/src/core/token.js +578 -0
- package/dist/src/core/token.js.map +1 -0
- package/dist/src/core/validate.js +0 -0
- package/dist/src/core/validate.js.map +1 -0
- package/dist/src/core/values.js +153 -0
- package/dist/src/core/values.js.map +1 -0
- package/dist/src/core/vault.js +612 -0
- package/dist/src/core/vault.js.map +1 -0
- package/dist/src/core/verified-snapshot.js +506 -0
- package/dist/src/core/verified-snapshot.js.map +1 -0
- package/dist/src/core/verify.js +549 -0
- package/dist/src/core/verify.js.map +1 -0
- package/dist/src/core/version.js +9 -0
- package/dist/src/core/version.js.map +1 -0
- package/dist/src/core/wysiwys.js +728 -0
- package/dist/src/core/wysiwys.js.map +1 -0
- package/dist/src/daemon/advance-child.js +78 -0
- package/dist/src/daemon/advance-child.js.map +1 -0
- package/dist/src/daemon/advance.js +849 -0
- package/dist/src/daemon/advance.js.map +1 -0
- package/dist/src/daemon/audit.js +90 -0
- package/dist/src/daemon/audit.js.map +1 -0
- package/dist/src/daemon/daemon.js +1988 -0
- package/dist/src/daemon/daemon.js.map +1 -0
- package/dist/src/daemon/dark-session.js +119 -0
- package/dist/src/daemon/dark-session.js.map +1 -0
- package/dist/src/daemon/draw-child.js +132 -0
- package/dist/src/daemon/draw-child.js.map +1 -0
- package/dist/src/daemon/draw.js +458 -0
- package/dist/src/daemon/draw.js.map +1 -0
- package/dist/src/daemon/git-evidence.js +345 -0
- package/dist/src/daemon/git-evidence.js.map +1 -0
- package/dist/src/daemon/projection.js +233 -0
- package/dist/src/daemon/projection.js.map +1 -0
- package/dist/src/daemon/prune.js +376 -0
- package/dist/src/daemon/prune.js.map +1 -0
- package/dist/src/mcp/http.js +343 -0
- package/dist/src/mcp/http.js.map +1 -0
- package/dist/src/mcp/server.js +594 -0
- package/dist/src/mcp/server.js.map +1 -0
- package/docs/cli-reference.md +5363 -0
- package/package.json +43 -4
- package/schema/.gitkeep +0 -0
- package/schema/LICENSE +117 -0
- package/schema/envelope.schema.json +137 -0
- package/schema/event.schema.json +1810 -0
- package/schema/fixtures/envelope/invalid/action-missing-idempotency-key.json +15 -0
- package/schema/fixtures/envelope/invalid/action-unknown-class-format.json +14 -0
- package/schema/fixtures/envelope/invalid/confidence-out-of-range.json +11 -0
- package/schema/fixtures/envelope/invalid/est-cost-bare-number.json +14 -0
- package/schema/fixtures/envelope/invalid/est-cost-noncanonical-string.json +14 -0
- package/schema/fixtures/envelope/invalid/malformed-assignee.json +10 -0
- package/schema/fixtures/envelope/invalid/malformed-created-by.json +7 -0
- package/schema/fixtures/envelope/invalid/malformed-max-latency.json +11 -0
- package/schema/fixtures/envelope/invalid/malformed-payload-hash.json +14 -0
- package/schema/fixtures/envelope/invalid/max-cost-bare-number.json +11 -0
- package/schema/fixtures/envelope/invalid/missing-origin.json +3 -0
- package/schema/fixtures/envelope/invalid/negative-est-cost.json +14 -0
- package/schema/fixtures/envelope/invalid/unknown-state.json +7 -0
- package/schema/fixtures/envelope/invalid/unknown-top-level-field.json +8 -0
- package/schema/fixtures/envelope/valid/action-payload-hash.json +17 -0
- package/schema/fixtures/envelope/valid/actions-without-budget.json +18 -0
- package/schema/fixtures/envelope/valid/canonical.json +25 -0
- package/schema/fixtures/envelope/valid/minimal.json +7 -0
- package/schema/fixtures/envelope/valid/multi-action-executed.json +30 -0
- package/schema/fixtures/envelope/valid/record-write-stage.json +22 -0
- package/schema/fixtures/event/invalid/approval-granted-agent-actor.json +15 -0
- package/schema/fixtures/event/invalid/approval-granted-empty-batch-delivery-id.json +17 -0
- package/schema/fixtures/event/invalid/approval-granted-fifth-reaction.json +16 -0
- package/schema/fixtures/event/invalid/approval-granted-missing-actor.json +14 -0
- package/schema/fixtures/event/invalid/approval-requested-missing-action-key.json +14 -0
- package/schema/fixtures/event/invalid/approval-withdrawn-agent-policy-drift.json +15 -0
- package/schema/fixtures/event/invalid/approval-withdrawn-missing-reason.json +15 -0
- package/schema/fixtures/event/invalid/approval-withdrawn-system-actor.json +15 -0
- package/schema/fixtures/event/invalid/audit-decision-refused-human-actor.json +17 -0
- package/schema/fixtures/event/invalid/audit-decision-refused-missing-code.json +16 -0
- package/schema/fixtures/event/invalid/audit-reviewed-agent-actor.json +15 -0
- package/schema/fixtures/event/invalid/audit-reviewed-loved-no-note.json +16 -0
- package/schema/fixtures/event/invalid/audit-reviewed-system-actor.json +15 -0
- package/schema/fixtures/event/invalid/bad-actor-prefix.json +15 -0
- package/schema/fixtures/event/invalid/est-cost-bare-number.json +17 -0
- package/schema/fixtures/event/invalid/execution-completed-fabricated-exit-code.json +16 -0
- package/schema/fixtures/event/invalid/execution-completed-provider-ref-empty-id.json +18 -0
- package/schema/fixtures/event/invalid/execution-completed-provider-ref-extra-field.json +19 -0
- package/schema/fixtures/event/invalid/execution-completed-provider-ref-id-not-string.json +18 -0
- package/schema/fixtures/event/invalid/execution-completed-provider-ref-missing-adapter.json +17 -0
- package/schema/fixtures/event/invalid/execution-failed-open-reported-by.json +16 -0
- package/schema/fixtures/event/invalid/execution-indeterminate-open-reason.json +14 -0
- package/schema/fixtures/event/invalid/execution-reconciled-agent-actor.json +17 -0
- package/schema/fixtures/event/invalid/execution-started-negative-env-stripped.json +16 -0
- package/schema/fixtures/event/invalid/gate-bypassed-missing-opened-seq.json +15 -0
- package/schema/fixtures/event/invalid/gate-closed-non-integer-opened-seq.json +13 -0
- package/schema/fixtures/event/invalid/gate-opened-agent-actor.json +16 -0
- package/schema/fixtures/event/invalid/gate-organ-attested-absolute-path.json +14 -0
- package/schema/fixtures/event/invalid/gate-organ-attested-agent-actor.json +14 -0
- package/schema/fixtures/event/invalid/gate-organ-attested-missing-organ-path.json +13 -0
- package/schema/fixtures/event/invalid/harness-unknown-kind.json +18 -0
- package/schema/fixtures/event/invalid/harness-version-multiline.json +16 -0
- package/schema/fixtures/event/invalid/log-checkpoint-agent-actor.json +17 -0
- package/schema/fixtures/event/invalid/log-checkpoint-missing-signature.json +16 -0
- package/schema/fixtures/event/invalid/log-checkpoint-short-signed-hash.json +17 -0
- package/schema/fixtures/event/invalid/log-checkpoint-unknown-signature-alg.json +17 -0
- package/schema/fixtures/event/invalid/malformed-ts.json +15 -0
- package/schema/fixtures/event/invalid/missing-alg.json +14 -0
- package/schema/fixtures/event/invalid/missing-hash.json +14 -0
- package/schema/fixtures/event/invalid/non-integer-seq.json +15 -0
- package/schema/fixtures/event/invalid/payload-pruned-human-actor.json +14 -0
- package/schema/fixtures/event/invalid/payload-pruned-missing-hash.json +14 -0
- package/schema/fixtures/event/invalid/policy-declined-agent-actor.json +15 -0
- package/schema/fixtures/event/invalid/policy-proposed-missing-diff.json +19 -0
- package/schema/fixtures/event/invalid/policy-proposed-system-actor.json +26 -0
- package/schema/fixtures/event/invalid/short-hash.json +15 -0
- package/schema/fixtures/event/invalid/unknown-alg.json +15 -0
- package/schema/fixtures/event/invalid/unknown-event-type.json +15 -0
- package/schema/fixtures/event/invalid/unknown-top-level-field.json +16 -0
- package/schema/fixtures/event/valid/approval-expired.json +15 -0
- package/schema/fixtures/event/valid/approval-granted-batch.json +19 -0
- package/schema/fixtures/event/valid/approval-granted-reaction.json +16 -0
- package/schema/fixtures/event/valid/approval-granted.json +15 -0
- package/schema/fixtures/event/valid/approval-rejected.json +15 -0
- package/schema/fixtures/event/valid/approval-requested.json +19 -0
- package/schema/fixtures/event/valid/approval-revoked.json +15 -0
- package/schema/fixtures/event/valid/approval-withdrawn-policy-drift.json +17 -0
- package/schema/fixtures/event/valid/approval-withdrawn.json +16 -0
- package/schema/fixtures/event/valid/audit-decision-refused.json +20 -0
- package/schema/fixtures/event/valid/audit-reviewed-reaction.json +17 -0
- package/schema/fixtures/event/valid/audit-reviewed.json +15 -0
- package/schema/fixtures/event/valid/audit-sampled.json +14 -0
- package/schema/fixtures/event/valid/budget-exceeded.json +21 -0
- package/schema/fixtures/event/valid/envelope-drift.json +16 -0
- package/schema/fixtures/event/valid/execution-completed-harness-report.json +16 -0
- package/schema/fixtures/event/valid/execution-completed-provider-ref.json +18 -0
- package/schema/fixtures/event/valid/execution-completed.json +15 -0
- package/schema/fixtures/event/valid/execution-failed-harness-report.json +16 -0
- package/schema/fixtures/event/valid/execution-failed.json +15 -0
- package/schema/fixtures/event/valid/execution-indeterminate.json +15 -0
- package/schema/fixtures/event/valid/execution-reconciled.json +17 -0
- package/schema/fixtures/event/valid/execution-started-env-stripped.json +17 -0
- package/schema/fixtures/event/valid/execution-started.json +14 -0
- package/schema/fixtures/event/valid/gate-bypassed-harness-version.json +18 -0
- package/schema/fixtures/event/valid/gate-bypassed.json +19 -0
- package/schema/fixtures/event/valid/gate-closed.json +14 -0
- package/schema/fixtures/event/valid/gate-opened.json +16 -0
- package/schema/fixtures/event/valid/gate-organ-attested.json +14 -0
- package/schema/fixtures/event/valid/genesis-null-prev.json +14 -0
- package/schema/fixtures/event/valid/log-checkpoint.json +17 -0
- package/schema/fixtures/event/valid/payload-pruned-orphan.json +13 -0
- package/schema/fixtures/event/valid/payload-pruned.json +17 -0
- package/schema/fixtures/event/valid/policy-declined.json +16 -0
- package/schema/fixtures/event/valid/policy-proposed.json +35 -0
- package/schema/fixtures/event/valid/policy-updated.json +14 -0
- package/schema/fixtures/event/valid/reconciliation-required.json +18 -0
- package/schema/fixtures/event/valid/reconciliation-satisfied.json +17 -0
- package/schema/fixtures/event/valid/route-accepted.json +15 -0
- package/schema/fixtures/event/valid/route-proposed.json +16 -0
- package/schema/fixtures/event/valid/spec-example.json +15 -0
- package/schema/fixtures/event/valid/task-registered-harness-version.json +23 -0
- package/schema/fixtures/event/valid/task-registered.json +14 -0
- package/schema/fixtures/hash/known-answer-pre-121.json +74 -0
- package/schema/fixtures/hash/known-answer.json +74 -0
- package/schema/fixtures/policy/invalid/bad-approval-ttl.json +7 -0
- package/schema/fixtures/policy/invalid/bad-web-port.json +4 -0
- package/schema/fixtures/policy/invalid/checkpoint-key-not-base64.json +6 -0
- package/schema/fixtures/policy/invalid/class-rule-missing-autonomy.json +9 -0
- package/schema/fixtures/policy/invalid/empty-class-key.json +6 -0
- package/schema/fixtures/policy/invalid/live-rate-on-human-only.json +7 -0
- package/schema/fixtures/policy/invalid/malformed-class-key.json +6 -0
- package/schema/fixtures/policy/invalid/missing-version.json +8 -0
- package/schema/fixtures/policy/invalid/negative-limit.json +9 -0
- package/schema/fixtures/policy/invalid/non-numeric-limit.json +9 -0
- package/schema/fixtures/policy/invalid/non-positive-max-pending.json +9 -0
- package/schema/fixtures/policy/invalid/on-expiry-grant.json +8 -0
- package/schema/fixtures/policy/invalid/payload-retention-bare-number.json +4 -0
- package/schema/fixtures/policy/invalid/payload-retention-compound.json +4 -0
- package/schema/fixtures/policy/invalid/payload-retention-fractional.json +4 -0
- package/schema/fixtures/policy/invalid/payload-retention-zero.json +4 -0
- package/schema/fixtures/policy/invalid/protected-paths-escape.json +4 -0
- package/schema/fixtures/policy/invalid/protected-paths-glob.json +4 -0
- package/schema/fixtures/policy/invalid/retro-rate-on-human-only.json +7 -0
- package/schema/fixtures/policy/invalid/retro-rate-on-manual.json +7 -0
- package/schema/fixtures/policy/invalid/retro-rate-zero.json +7 -0
- package/schema/fixtures/policy/invalid/sample-rate-too-high.json +5 -0
- package/schema/fixtures/policy/invalid/sampling-secret-env-empty.json +7 -0
- package/schema/fixtures/policy/invalid/sampling-secret-env-not-string.json +6 -0
- package/schema/fixtures/policy/invalid/skew-tolerance-compound.json +6 -0
- package/schema/fixtures/policy/invalid/unknown-autonomy.json +7 -0
- package/schema/fixtures/policy/invalid/unknown-class-rule-key.json +6 -0
- package/schema/fixtures/policy/invalid/unknown-top-level-key.json +7 -0
- package/schema/fixtures/policy/invalid/vault-passphrase-env-empty.json +6 -0
- package/schema/fixtures/policy/invalid/vault-passphrase-literal.json +6 -0
- package/schema/fixtures/policy/invalid/version-not-string.json +4 -0
- package/schema/fixtures/policy/valid/canonical.json +47 -0
- package/schema/fixtures/policy/valid/checkpoint-keys.json +18 -0
- package/schema/fixtures/policy/valid/class-approvers-limits.json +25 -0
- package/schema/fixtures/policy/valid/class-retro-rate.json +17 -0
- package/schema/fixtures/policy/valid/global-budgets.json +19 -0
- package/schema/fixtures/policy/valid/human-only.json +9 -0
- package/schema/fixtures/policy/valid/minimal.json +6 -0
- package/schema/fixtures/policy/valid/protected-paths.json +10 -0
- package/schema/fixtures/policy/valid/record-namespace.json +13 -0
- package/schema/fixtures/policy/valid/request-volume-limits.json +26 -0
- package/schema/fixtures/policy/valid/retention-and-sampling-secret.json +16 -0
- package/schema/fixtures/policy/valid/skew-tolerance.json +15 -0
- package/schema/fixtures/policy/valid/vault-passphrase-env.json +14 -0
- package/schema/fixtures/policy/valid/wildcards.json +15 -0
- package/schema/fixtures/policy-md/invalid/alias-bomb.md +15 -0
- package/schema/fixtures/policy-md/invalid/no-fence.md +7 -0
- package/schema/fixtures/policy-md/invalid/protected-route-not-a-subclass.md +16 -0
- package/schema/fixtures/policy-md/invalid/schema-invalid-autonomy.md +16 -0
- package/schema/fixtures/policy-md/invalid/schema-invalid-read-proof.md +17 -0
- package/schema/fixtures/policy-md/invalid/two-fences.md +19 -0
- package/schema/fixtures/policy-md/invalid/unclosed-fence.md +11 -0
- package/schema/fixtures/policy-md/invalid/wrong-info-string.md +11 -0
- package/schema/fixtures/policy-md/invalid/yaml-syntax-error.md +13 -0
- package/schema/fixtures/policy-md/precedence/both/APPROVAL.md +7 -0
- package/schema/fixtures/policy-md/precedence/both/APPROVALS.md +7 -0
- package/schema/fixtures/policy-md/precedence/fallback-only/APPROVALS.md +7 -0
- package/schema/fixtures/policy-md/valid/canonical.md +50 -0
- package/schema/fixtures/policy-md/valid/daemon-read-proof.md +18 -0
- package/schema/fixtures/policy-md/valid/minimal.md +3 -0
- package/schema/fixtures/policy-md/valid/prose-lookalikes.md +54 -0
- package/schema/fixtures/policy-md/valid/routed-protected-paths.md +49 -0
- package/schema/fixtures/policy-md/valid/with-values.md +79 -0
- package/schema/fixtures/sample-record/invalid/bad-date-time.json +4 -0
- package/schema/fixtures/sample-record/invalid/missing-required-field.json +3 -0
- package/schema/fixtures/sample-record/invalid/unknown-top-level-field.json +5 -0
- package/schema/fixtures/sample-record/invalid/wrong-type.json +4 -0
- package/schema/fixtures/sample-record/valid/minimal.json +4 -0
- package/schema/fixtures/sample-record/valid/with-note.json +5 -0
- package/schema/fixtures/values/invalid/class-shaped.json +9 -0
- package/schema/fixtures/values/invalid/duplicate-entry.json +4 -0
- package/schema/fixtures/values/invalid/non-string-item.json +4 -0
- package/schema/fixtures/values/invalid/over-cap.json +26 -0
- package/schema/fixtures/values/invalid/unknown-key.json +5 -0
- package/schema/fixtures/values/invalid/version-string.json +1 -0
- package/schema/fixtures/values/valid/empty-lists.json +7 -0
- package/schema/fixtures/values/valid/full.json +20 -0
- package/schema/fixtures/values/valid/minimal.json +1 -0
- package/schema/fixtures/values-md/invalid/schema-invalid.md +62 -0
- package/schema/fixtures/values-md/invalid/two-blocks.md +69 -0
- package/schema/fixtures/values-md/invalid/unterminated.md +61 -0
- package/schema/fixtures/values-md/invalid/yaml-error.md +63 -0
- package/schema/fixtures/values-md/valid/absent.md +50 -0
- package/schema/fixtures/values-md/valid/with-values.md +79 -0
- package/schema/policy.schema.json +481 -0
- package/schema/sample-record.schema.json +26 -0
- package/schema/values.schema.json +55 -0
|
@@ -0,0 +1,557 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* The gate verbs of SPEC.md §10.1: `approval register`, `approval request`,
|
|
3
|
+
* `approval grant|reject|revoke`, and `approval expire`.
|
|
4
|
+
*
|
|
5
|
+
* As everywhere else in this CLI, **no logic lives here.** State derivation,
|
|
6
|
+
* transition legality, TTL arithmetic, attestation, and budgets are all
|
|
7
|
+
* `core/gate.ts`; frontmatter reading is `core/frontmatter.ts`; the append is
|
|
8
|
+
* `core/log.ts`. This file resolves paths and identity, chooses an exit code,
|
|
9
|
+
* and formats output.
|
|
10
|
+
*
|
|
11
|
+
* Four choices are load-bearing enough to state plainly.
|
|
12
|
+
*
|
|
13
|
+
* **A gate refusal is exit 1, not exit 2.** "You may not do that" is not a
|
|
14
|
+
* usage error — the command was well-formed, the runtime understood it, and the
|
|
15
|
+
* answer is no. Grouping refusals with typos would train agents to retry with
|
|
16
|
+
* different flags when the correct response is to ask a human. Exit 2 stays what
|
|
17
|
+
* it has always been: an unknown flag, a missing argument, an unresolvable
|
|
18
|
+
* identity. The frozen `error.code` inside `--json` is what a caller branches on
|
|
19
|
+
* to tell *which* refusal it was.
|
|
20
|
+
*
|
|
21
|
+
* **The log supplies the action's declaration, not flags.** `approval request
|
|
22
|
+
* <task> --action <key>` reads the action's class, cost, reversibility and
|
|
23
|
+
* summary from the `task.registered` record in the log — the same record
|
|
24
|
+
* `approval register` wrote from the envelope. There are no `--class` /
|
|
25
|
+
* `--cost` flags, deliberately: an agent that could name its own class at
|
|
26
|
+
* request time could declare `read.web` for an action registered as
|
|
27
|
+
* `financial.spend`, and SPEC.md §7's "class MUST be declared before a token can
|
|
28
|
+
* be requested" would mean nothing. Register once from the file; request against
|
|
29
|
+
* what was registered. A task file edited after registration is `envelope.drift`
|
|
30
|
+
* (M5), not a silent re-declaration.
|
|
31
|
+
*
|
|
32
|
+
* **`register` reads task files but never writes them.** Unknown frontmatter
|
|
33
|
+
* keys are preserved trivially here because nothing is rewritten at all;
|
|
34
|
+
* round-trip rewriting is M6.
|
|
35
|
+
*
|
|
36
|
+
* **grant / reject / revoke are human-only**, via `resolveHumanActor` — `--as
|
|
37
|
+
* human:<id>` or `APPROVAL_HUMAN`, refused at exit 2 when absent or when it
|
|
38
|
+
* names an agent. `expire` takes no identity at all: it is the system verb, and
|
|
39
|
+
* `core/gate.ts` stamps `system:gate`.
|
|
40
|
+
*
|
|
41
|
+
* **This layer no longer reads the clock.** It used to pass `new Date()` into
|
|
42
|
+
* every gate call; under amended SPEC.md §8 (A2) a gate-typed event's `ts` is
|
|
43
|
+
* assigned inside core at the write boundary, and there is no parameter here to
|
|
44
|
+
* pass one through. Nothing about determinism is lost — core reads an injected
|
|
45
|
+
* clock — and one caller-supplied-timestamp seam is gone.
|
|
46
|
+
*/
|
|
47
|
+
import { readFileSync } from "node:fs";
|
|
48
|
+
import { isAbsolute, resolve as resolvePathSegments } from "node:path";
|
|
49
|
+
import { HUMAN_ACTOR_ENV, resolveHumanActor } from "../core/attest.js";
|
|
50
|
+
// The graded reaction a grant may carry (APRV-239). Defined in `core/audit.ts`
|
|
51
|
+
// beside the projection that reads it back, so there is one vocabulary and one
|
|
52
|
+
// spelling of it across both surfaces that write it.
|
|
53
|
+
import { isReaction, REACTIONS } from "../core/audit.js";
|
|
54
|
+
import { decide, expire, register, registeredAction, request, readGateRecords, withdraw, } from "../core/gate.js";
|
|
55
|
+
import { recordRefusedDecision } from "../core/decision-refusal.js";
|
|
56
|
+
import { isWithdrawReason, WITHDRAW_REASONS } from "../core/state.js";
|
|
57
|
+
import { boolFlag, parseFlags, stringFlag } from "./args.js";
|
|
58
|
+
import { EXIT_INTEGRITY, EXIT_IO, EXIT_OK, EXIT_TORN_TAIL, EXIT_USAGE, } from "./exit-codes.js";
|
|
59
|
+
import { EXPIRE_HELP, GRANT_HELP, REGISTER_HELP, REJECT_HELP, REQUEST_HELP, REVOKE_HELP, WITHDRAW_HELP, } from "./help.js";
|
|
60
|
+
import { DEFAULT_LOG_PATH, resolvePath } from "./paths.js";
|
|
61
|
+
import { refusal as renderRefusal, style, tokenPanel } from "./style.js";
|
|
62
|
+
import { usageErrorText } from "./usage.js";
|
|
63
|
+
/** Identity accepted by the proposing verbs: a person or an agent. */
|
|
64
|
+
const PRINCIPAL_ACTOR = /^(human|agent):.+/u;
|
|
65
|
+
const COMMON_FLAGS = {
|
|
66
|
+
"--log": "string",
|
|
67
|
+
"--json": "boolean",
|
|
68
|
+
"--help": "boolean",
|
|
69
|
+
"-h": "boolean",
|
|
70
|
+
};
|
|
71
|
+
const POLICY_FLAGS = {
|
|
72
|
+
"--policy": "string",
|
|
73
|
+
"--dir": "string",
|
|
74
|
+
};
|
|
75
|
+
function wantsJson(argv) {
|
|
76
|
+
return argv.includes("--json");
|
|
77
|
+
}
|
|
78
|
+
function absolute(value, cwd) {
|
|
79
|
+
return isAbsolute(value) ? value : resolvePathSegments(cwd, value);
|
|
80
|
+
}
|
|
81
|
+
function usageError(streams, json, message, helpText) {
|
|
82
|
+
if (json)
|
|
83
|
+
streams.err(`${JSON.stringify({ error: { code: "usage", message } })}\n`);
|
|
84
|
+
else
|
|
85
|
+
streams.err(usageErrorText(message, helpText));
|
|
86
|
+
return EXIT_USAGE;
|
|
87
|
+
}
|
|
88
|
+
/** A filesystem fact, reported as one: exit 4, never a gate refusal code. */
|
|
89
|
+
function ioError(streams, json, message) {
|
|
90
|
+
if (json)
|
|
91
|
+
streams.err(`${JSON.stringify({ error: { code: "io", message } })}\n`);
|
|
92
|
+
else
|
|
93
|
+
streams.err(`approval: ${message}\n`);
|
|
94
|
+
return EXIT_IO;
|
|
95
|
+
}
|
|
96
|
+
/**
|
|
97
|
+
* Map a core refusal onto the frozen exit table.
|
|
98
|
+
*
|
|
99
|
+
* Everything the gate itself decided is {@link EXIT_INTEGRITY}. Only facts about
|
|
100
|
+
* the filesystem are {@link EXIT_IO}, and only a crashed write is
|
|
101
|
+
* {@link EXIT_TORN_TAIL} — the same split the log commands already draw.
|
|
102
|
+
*/
|
|
103
|
+
function refusalExitCode(refusal) {
|
|
104
|
+
switch (refusal.code) {
|
|
105
|
+
case "log-unreadable":
|
|
106
|
+
case "task-file-unreadable":
|
|
107
|
+
// The store could not be written: a filesystem fact, like the two above,
|
|
108
|
+
// and not a statement about what the gate decided. `payload-mismatch` is
|
|
109
|
+
// the opposite and stays at EXIT_INTEGRITY — the gate looked at the bytes
|
|
110
|
+
// and said no.
|
|
111
|
+
case "payload-store-failed":
|
|
112
|
+
return EXIT_IO;
|
|
113
|
+
case "log-torn-tail":
|
|
114
|
+
return EXIT_TORN_TAIL;
|
|
115
|
+
case "append-failed":
|
|
116
|
+
switch (refusal.append?.code) {
|
|
117
|
+
case "corrupt-tail":
|
|
118
|
+
return EXIT_TORN_TAIL;
|
|
119
|
+
case "io":
|
|
120
|
+
case "lock-timeout":
|
|
121
|
+
return EXIT_IO;
|
|
122
|
+
default:
|
|
123
|
+
return EXIT_INTEGRITY;
|
|
124
|
+
}
|
|
125
|
+
default:
|
|
126
|
+
return EXIT_INTEGRITY;
|
|
127
|
+
}
|
|
128
|
+
}
|
|
129
|
+
/** Emit a refusal in the frozen shape and return its exit code. */
|
|
130
|
+
function emitRefusal(streams, json, refusal) {
|
|
131
|
+
if (json) {
|
|
132
|
+
const error = { code: refusal.code, message: refusal.message };
|
|
133
|
+
if (refusal.detail !== undefined)
|
|
134
|
+
error["detail"] = refusal.detail;
|
|
135
|
+
if (refusal.state !== undefined)
|
|
136
|
+
error["state"] = refusal.state;
|
|
137
|
+
if (refusal.verdicts !== undefined)
|
|
138
|
+
error["verdicts"] = refusal.verdicts;
|
|
139
|
+
// APRV-173: the request-volume verdicts behind `queue-full` / `rate-limited`.
|
|
140
|
+
// Their own key rather than `verdicts`, because a caller reading money out
|
|
141
|
+
// of a budget refusal must not find queue counts under the same name.
|
|
142
|
+
if (refusal.limits !== undefined)
|
|
143
|
+
error["limits"] = refusal.limits;
|
|
144
|
+
if (refusal.errors !== undefined)
|
|
145
|
+
error["errors"] = refusal.errors;
|
|
146
|
+
if (refusal.record !== undefined)
|
|
147
|
+
error["seq"] = refusal.record.seq;
|
|
148
|
+
streams.err(`${JSON.stringify({ ok: false, error })}\n`);
|
|
149
|
+
}
|
|
150
|
+
else {
|
|
151
|
+
// APRV-91 #8/#13: glyph, machine-readable code, message. No help page
|
|
152
|
+
// follows a refusal, and no `fix:` line is invented here — the gate's
|
|
153
|
+
// refusals name a state (`not-granted`, `already-decided`) rather than a
|
|
154
|
+
// single command that repairs it, and a wrong fix is worse than none.
|
|
155
|
+
streams.err(`${renderRefusal(style({ json }), refusal.code, refusal.message)}\n`);
|
|
156
|
+
}
|
|
157
|
+
return refusalExitCode(refusal);
|
|
158
|
+
}
|
|
159
|
+
function emitJson(streams, value) {
|
|
160
|
+
streams.out(`${JSON.stringify(value)}\n`);
|
|
161
|
+
}
|
|
162
|
+
/** Where policy lives, from `--policy` / `--dir`, with the CLI's cwd default. */
|
|
163
|
+
function gateOptions(flags, cwd) {
|
|
164
|
+
const policyFlag = stringFlag(flags, "--policy");
|
|
165
|
+
const dirFlag = stringFlag(flags, "--dir");
|
|
166
|
+
if (policyFlag !== null)
|
|
167
|
+
return { policy: { file: absolute(policyFlag, cwd) } };
|
|
168
|
+
return { policy: { dir: dirFlag === null ? cwd : absolute(dirFlag, cwd) } };
|
|
169
|
+
}
|
|
170
|
+
function front(argv, spec, helpText, streams, cwd) {
|
|
171
|
+
const json = wantsJson(argv);
|
|
172
|
+
const parsed = parseFlags(argv, spec);
|
|
173
|
+
if (!parsed.ok) {
|
|
174
|
+
return { kind: "handled", code: usageError(streams, json, parsed.message, helpText) };
|
|
175
|
+
}
|
|
176
|
+
if (boolFlag(parsed.flags, "--help") || boolFlag(parsed.flags, "-h")) {
|
|
177
|
+
streams.out(`${helpText}\n`);
|
|
178
|
+
return { kind: "handled", code: EXIT_OK };
|
|
179
|
+
}
|
|
180
|
+
return {
|
|
181
|
+
kind: "run",
|
|
182
|
+
flags: parsed.flags,
|
|
183
|
+
positionals: parsed.positionals,
|
|
184
|
+
json,
|
|
185
|
+
logPath: resolvePath(stringFlag(parsed.flags, "--log"), DEFAULT_LOG_PATH, cwd),
|
|
186
|
+
};
|
|
187
|
+
}
|
|
188
|
+
/**
|
|
189
|
+
* Identity for the proposing verbs (`register`, `request`).
|
|
190
|
+
*
|
|
191
|
+
* `--as` accepts `human:<id>` or `agent:<id>` — an agent proposing an action is
|
|
192
|
+
* the normal case, and the whole point of the gate is that proposing is not
|
|
193
|
+
* deciding. `APPROVAL_HUMAN` is the fallback and, being a *human* variable,
|
|
194
|
+
* supplies only a human identity. There is no default: an unattributed request
|
|
195
|
+
* is a request nobody can be asked about.
|
|
196
|
+
*/
|
|
197
|
+
function resolvePrincipalActor(asFlag) {
|
|
198
|
+
if (asFlag !== null)
|
|
199
|
+
return PRINCIPAL_ACTOR.test(asFlag) ? asFlag : null;
|
|
200
|
+
return resolveHumanActor();
|
|
201
|
+
}
|
|
202
|
+
// ---------------------------------------------------------------------------
|
|
203
|
+
// register
|
|
204
|
+
// ---------------------------------------------------------------------------
|
|
205
|
+
export function commandRegister(argv, streams, cwd) {
|
|
206
|
+
const outcome = front(argv, { ...COMMON_FLAGS, "--as": "string" }, REGISTER_HELP, streams, cwd);
|
|
207
|
+
if (outcome.kind === "handled")
|
|
208
|
+
return outcome.code;
|
|
209
|
+
const { flags, positionals, json, logPath } = outcome;
|
|
210
|
+
const file = positionals[0];
|
|
211
|
+
if (file === undefined)
|
|
212
|
+
return usageError(streams, json, "missing <task-file> argument", REGISTER_HELP);
|
|
213
|
+
const extra = positionals[1];
|
|
214
|
+
if (extra !== undefined) {
|
|
215
|
+
return usageError(streams, json, `unexpected argument ${JSON.stringify(extra)}`, REGISTER_HELP);
|
|
216
|
+
}
|
|
217
|
+
const asFlag = stringFlag(flags, "--as");
|
|
218
|
+
const actor = resolvePrincipalActor(asFlag);
|
|
219
|
+
if (actor === null)
|
|
220
|
+
return identityUsageError(streams, json, asFlag, REGISTER_HELP);
|
|
221
|
+
const result = register(logPath, { file: absolute(file, cwd) }, actor);
|
|
222
|
+
if (!result.ok)
|
|
223
|
+
return emitRefusal(streams, json, result);
|
|
224
|
+
if (json) {
|
|
225
|
+
emitJson(streams, {
|
|
226
|
+
ok: true,
|
|
227
|
+
seq: result.record.seq,
|
|
228
|
+
task: result.task,
|
|
229
|
+
actions: result.actions.length,
|
|
230
|
+
});
|
|
231
|
+
}
|
|
232
|
+
else {
|
|
233
|
+
streams.out(`registered ${result.task} at seq ${result.record.seq}: ${result.actions.length} action(s)\n`);
|
|
234
|
+
}
|
|
235
|
+
return EXIT_OK;
|
|
236
|
+
}
|
|
237
|
+
function identityUsageError(streams, json, asFlag, helpText) {
|
|
238
|
+
if (asFlag !== null) {
|
|
239
|
+
return usageError(streams, json, `--as expects human:<id> or agent:<id>, got ${JSON.stringify(asFlag)}`, helpText);
|
|
240
|
+
}
|
|
241
|
+
return usageError(streams, json, `no identity: set ${HUMAN_ACTOR_ENV}=human:<id> or pass --as human:<id> | agent:<id>`, helpText);
|
|
242
|
+
}
|
|
243
|
+
/**
|
|
244
|
+
* `--payload <file>` or `--payload -` (stdin), as a JSON value.
|
|
245
|
+
*
|
|
246
|
+
* Two failures, two exit codes, on purpose: a file that cannot be read is an I/O
|
|
247
|
+
* fact (exit 4) and bytes that are not JSON are a usage error (exit 2). Neither
|
|
248
|
+
* is a gate refusal — the gate was never asked — and neither writes anything.
|
|
249
|
+
*
|
|
250
|
+
* The value is handed to `core/gate.ts` as a value, not as a path: the store is
|
|
251
|
+
* addressed by the RFC 8785 hash of the *material*, so a file's own formatting,
|
|
252
|
+
* key order and whitespace are irrelevant by construction.
|
|
253
|
+
*/
|
|
254
|
+
function readPayloadFlag(flag, cwd) {
|
|
255
|
+
const source = flag === "-" ? 0 : absolute(flag, cwd);
|
|
256
|
+
const where = flag === "-" ? "stdin" : String(source);
|
|
257
|
+
let raw;
|
|
258
|
+
try {
|
|
259
|
+
raw = readFileSync(source, "utf8");
|
|
260
|
+
}
|
|
261
|
+
catch (cause) {
|
|
262
|
+
return {
|
|
263
|
+
ok: false,
|
|
264
|
+
code: EXIT_IO,
|
|
265
|
+
message: `--payload ${where} could not be read: ${cause instanceof Error ? cause.message : String(cause)}`,
|
|
266
|
+
};
|
|
267
|
+
}
|
|
268
|
+
try {
|
|
269
|
+
return { ok: true, value: JSON.parse(raw) };
|
|
270
|
+
}
|
|
271
|
+
catch (cause) {
|
|
272
|
+
return {
|
|
273
|
+
ok: false,
|
|
274
|
+
code: EXIT_USAGE,
|
|
275
|
+
message: `--payload ${where} is not valid JSON: ${cause instanceof Error ? cause.message : String(cause)}; the payload store holds the exact material the binding names, so it must parse before it can be hashed`,
|
|
276
|
+
};
|
|
277
|
+
}
|
|
278
|
+
}
|
|
279
|
+
export function commandRequest(argv, streams, cwd) {
|
|
280
|
+
const outcome = front(argv, {
|
|
281
|
+
...COMMON_FLAGS,
|
|
282
|
+
...POLICY_FLAGS,
|
|
283
|
+
"--as": "string",
|
|
284
|
+
"--action": "string",
|
|
285
|
+
"--payload": "string",
|
|
286
|
+
}, REQUEST_HELP, streams, cwd);
|
|
287
|
+
if (outcome.kind === "handled")
|
|
288
|
+
return outcome.code;
|
|
289
|
+
const { flags, positionals, json, logPath } = outcome;
|
|
290
|
+
const task = positionals[0];
|
|
291
|
+
if (task === undefined)
|
|
292
|
+
return usageError(streams, json, "missing <task> argument", REQUEST_HELP);
|
|
293
|
+
const extra = positionals[1];
|
|
294
|
+
if (extra !== undefined) {
|
|
295
|
+
return usageError(streams, json, `unexpected argument ${JSON.stringify(extra)}`, REQUEST_HELP);
|
|
296
|
+
}
|
|
297
|
+
const actionKey = stringFlag(flags, "--action");
|
|
298
|
+
if (actionKey === null) {
|
|
299
|
+
return usageError(streams, json, "missing --action <key>", REQUEST_HELP);
|
|
300
|
+
}
|
|
301
|
+
const asFlag = stringFlag(flags, "--as");
|
|
302
|
+
const actor = resolvePrincipalActor(asFlag);
|
|
303
|
+
if (actor === null)
|
|
304
|
+
return identityUsageError(streams, json, asFlag, REQUEST_HELP);
|
|
305
|
+
// APRV-28: the bytes, read at the edge and handed to core as a value. Read
|
|
306
|
+
// before anything is appended so an unreadable file costs nothing.
|
|
307
|
+
const payloadFlag = stringFlag(flags, "--payload");
|
|
308
|
+
const material = payloadFlag === null ? null : readPayloadFlag(payloadFlag, cwd);
|
|
309
|
+
if (material !== null && !material.ok) {
|
|
310
|
+
return material.code === EXIT_IO
|
|
311
|
+
? ioError(streams, json, material.message)
|
|
312
|
+
: usageError(streams, json, material.message, REQUEST_HELP);
|
|
313
|
+
}
|
|
314
|
+
// The action's declaration comes from the log's task.registered record, never
|
|
315
|
+
// from flags — see the module header.
|
|
316
|
+
const read = readGateRecords(logPath);
|
|
317
|
+
if (!read.ok)
|
|
318
|
+
return emitRefusal(streams, json, read);
|
|
319
|
+
const declared = registeredAction(read.records, task, actionKey);
|
|
320
|
+
if (!declared.ok)
|
|
321
|
+
return emitRefusal(streams, json, declared);
|
|
322
|
+
const options = gateOptions(flags, cwd);
|
|
323
|
+
const result = request(logPath, {
|
|
324
|
+
task,
|
|
325
|
+
actionKey,
|
|
326
|
+
cls: declared.action.class,
|
|
327
|
+
...(declared.action.est_cost_usd === undefined
|
|
328
|
+
? {}
|
|
329
|
+
: { est_cost_usd: declared.action.est_cost_usd }),
|
|
330
|
+
...(declared.action.reversible === undefined
|
|
331
|
+
? {}
|
|
332
|
+
: { reversible: declared.action.reversible }),
|
|
333
|
+
...(declared.action.summary === undefined ? {} : { summary: declared.action.summary }),
|
|
334
|
+
...(material === null || !material.ok ? {} : { payload: { value: material.value } }),
|
|
335
|
+
}, actor, options);
|
|
336
|
+
if (!result.ok)
|
|
337
|
+
return emitRefusal(streams, json, result);
|
|
338
|
+
if (json) {
|
|
339
|
+
emitJson(streams, {
|
|
340
|
+
ok: true,
|
|
341
|
+
task,
|
|
342
|
+
action_key: actionKey,
|
|
343
|
+
class: declared.action.class,
|
|
344
|
+
autonomy: result.autonomy,
|
|
345
|
+
proceed: result.proceed,
|
|
346
|
+
requested: result.record !== null,
|
|
347
|
+
seq: result.record === null ? null : result.record.seq,
|
|
348
|
+
});
|
|
349
|
+
}
|
|
350
|
+
else if (result.record === null) {
|
|
351
|
+
streams.out(`${actionKey}: ${result.autonomy} — no approval required, proceed to execution (no approval.* event is appended on this path)\n`);
|
|
352
|
+
}
|
|
353
|
+
else {
|
|
354
|
+
streams.out(`requested ${task} ${actionKey} at seq ${result.record.seq} (manual)\n`);
|
|
355
|
+
}
|
|
356
|
+
return EXIT_OK;
|
|
357
|
+
}
|
|
358
|
+
// ---------------------------------------------------------------------------
|
|
359
|
+
// grant / reject / revoke
|
|
360
|
+
// ---------------------------------------------------------------------------
|
|
361
|
+
const DECISION_HELP = {
|
|
362
|
+
grant: GRANT_HELP,
|
|
363
|
+
reject: REJECT_HELP,
|
|
364
|
+
revoke: REVOKE_HELP,
|
|
365
|
+
};
|
|
366
|
+
export function commandDecide(decision, argv, streams, cwd) {
|
|
367
|
+
const helpText = DECISION_HELP[decision];
|
|
368
|
+
const outcome = front(argv, { ...COMMON_FLAGS, ...POLICY_FLAGS, "--as": "string", "--note": "string", "--reaction": "string" }, helpText, streams, cwd);
|
|
369
|
+
if (outcome.kind === "handled")
|
|
370
|
+
return outcome.code;
|
|
371
|
+
const { flags, positionals, json, logPath } = outcome;
|
|
372
|
+
const actionKey = positionals[0];
|
|
373
|
+
if (actionKey === undefined) {
|
|
374
|
+
return usageError(streams, json, "missing <action-key> argument", helpText);
|
|
375
|
+
}
|
|
376
|
+
const extra = positionals[1];
|
|
377
|
+
if (extra !== undefined) {
|
|
378
|
+
return usageError(streams, json, `unexpected argument ${JSON.stringify(extra)}`, helpText);
|
|
379
|
+
}
|
|
380
|
+
const asFlag = stringFlag(flags, "--as");
|
|
381
|
+
const actor = resolveHumanActor(asFlag === null ? {} : { actor: asFlag });
|
|
382
|
+
if (actor === null) {
|
|
383
|
+
if (asFlag !== null) {
|
|
384
|
+
return usageError(streams, json, `--as expects a human identity matching human:<id>, got ${JSON.stringify(asFlag)}; ${decision} is human-only and an agent: or system: actor cannot perform it`, helpText);
|
|
385
|
+
}
|
|
386
|
+
return usageError(streams, json, `no human identity: set ${HUMAN_ACTOR_ENV}=human:<id> or pass --as human:<id>`, helpText);
|
|
387
|
+
}
|
|
388
|
+
const note = stringFlag(flags, "--note");
|
|
389
|
+
// APRV-239. `--reaction` is a GRANT flag. A rejection or a revocation already
|
|
390
|
+
// has one field for the human's reason and that field is `--note`; a grade
|
|
391
|
+
// beside a refusal would be a second answer to a question that has one, and
|
|
392
|
+
// SPEC.md §5.2 says those two decisions carry no reaction at all. Refused at
|
|
393
|
+
// exit 2 rather than ignored, so a caller that meant something by it finds out.
|
|
394
|
+
const reactionFlag = stringFlag(flags, "--reaction");
|
|
395
|
+
if (reactionFlag !== null && decision !== "grant") {
|
|
396
|
+
return usageError(streams, json, `--reaction is a grant flag; ${decision} carries no reaction. Its reason IS its note, so put what you want to say in --note "<text>"`, helpText);
|
|
397
|
+
}
|
|
398
|
+
if (reactionFlag !== null && !isReaction(reactionFlag)) {
|
|
399
|
+
return usageError(streams, json, `--reaction expects one of ${REACTIONS.join(" | ")}, got ${JSON.stringify(reactionFlag)}`, helpText);
|
|
400
|
+
}
|
|
401
|
+
const decideOptions = {
|
|
402
|
+
...gateOptions(flags, cwd),
|
|
403
|
+
...(note === null ? {} : { note }),
|
|
404
|
+
...(reactionFlag === null ? {} : { reaction: reactionFlag }),
|
|
405
|
+
};
|
|
406
|
+
const result = decide(logPath, actionKey, decision, actor, decideOptions);
|
|
407
|
+
if (!result.ok) {
|
|
408
|
+
// APRV-235, and the same append the channels make through
|
|
409
|
+
// `recordChannelDecision`: a person ran this verb, the gate would not take
|
|
410
|
+
// their answer, and the log used to say nothing about it at all. `decide`
|
|
411
|
+
// appends nothing on a refusal by design; the surface that collected the
|
|
412
|
+
// gesture is what knows a HUMAN produced it. On `policy-drift` this also
|
|
413
|
+
// withdraws the request the gate has just declared void, so it stops being
|
|
414
|
+
// offered on every other surface. Best effort: the refusal below is printed
|
|
415
|
+
// and the exit code is unchanged whatever this write does.
|
|
416
|
+
recordRefusedDecision(logPath, { actionKey, decision, actor, channel: "cli" }, {
|
|
417
|
+
code: result.code,
|
|
418
|
+
message: result.message,
|
|
419
|
+
...(result.drift === undefined ? {} : { drift: result.drift }),
|
|
420
|
+
}, decideOptions);
|
|
421
|
+
return emitRefusal(streams, json, result);
|
|
422
|
+
}
|
|
423
|
+
// APRV-17: a grant mints the single-use token and this is the ONLY place it is
|
|
424
|
+
// ever printed. The log holds sha256(token) alone, so once this output is gone
|
|
425
|
+
// the value is unrecoverable — hence the warning beside it.
|
|
426
|
+
if (json) {
|
|
427
|
+
emitJson(streams, {
|
|
428
|
+
ok: true,
|
|
429
|
+
decision,
|
|
430
|
+
state: result.state,
|
|
431
|
+
action_key: actionKey,
|
|
432
|
+
seq: result.record.seq,
|
|
433
|
+
...(result.token === undefined ? {} : { token: result.token }),
|
|
434
|
+
});
|
|
435
|
+
}
|
|
436
|
+
else {
|
|
437
|
+
streams.out(`${result.state} ${actionKey} at seq ${result.record.seq} by ${actor}\n`);
|
|
438
|
+
if (result.token !== undefined) {
|
|
439
|
+
// APRV-102: the rule-boxed panel of APRV-91's brief. The prose that used
|
|
440
|
+
// to follow the token said what the notice says in one line; what it also
|
|
441
|
+
// did was put the one unrecoverable value in this CLI on a line with a
|
|
442
|
+
// label in front of it, where a triple-click takes the label too.
|
|
443
|
+
streams.out(`${tokenPanel(style({ json }), actionKey, result.token)}\n`);
|
|
444
|
+
}
|
|
445
|
+
}
|
|
446
|
+
return EXIT_OK;
|
|
447
|
+
}
|
|
448
|
+
// ---------------------------------------------------------------------------
|
|
449
|
+
// withdraw
|
|
450
|
+
// ---------------------------------------------------------------------------
|
|
451
|
+
/**
|
|
452
|
+
* `approval withdraw <task> --action <key>` — the requester takes its own
|
|
453
|
+
* pending request back (APRV-106).
|
|
454
|
+
*
|
|
455
|
+
* Agent-facing, unlike every other terminal verb here: the whole point is that
|
|
456
|
+
* the party who asked can stop asking, and the party who asks is usually an
|
|
457
|
+
* agent. Identity resolves through {@link resolvePrincipalActor}, and the gate
|
|
458
|
+
* then checks it against the actor on the `approval.requested` record — so
|
|
459
|
+
* passing `--as` does not let a caller withdraw someone else's request, it only
|
|
460
|
+
* lets the caller say who it is.
|
|
461
|
+
*
|
|
462
|
+
* The task id is positional and the action key is a flag, matching
|
|
463
|
+
* `approval request` exactly: the two verbs are the open and the close of one
|
|
464
|
+
* gesture, and an agent that can spell one can spell the other.
|
|
465
|
+
*/
|
|
466
|
+
export function commandWithdraw(argv, streams, cwd) {
|
|
467
|
+
const outcome = front(argv, {
|
|
468
|
+
...COMMON_FLAGS,
|
|
469
|
+
...POLICY_FLAGS,
|
|
470
|
+
"--as": "string",
|
|
471
|
+
"--action": "string",
|
|
472
|
+
"--reason": "string",
|
|
473
|
+
"--note": "string",
|
|
474
|
+
}, WITHDRAW_HELP, streams, cwd);
|
|
475
|
+
if (outcome.kind === "handled")
|
|
476
|
+
return outcome.code;
|
|
477
|
+
const { flags, positionals, json, logPath } = outcome;
|
|
478
|
+
const task = positionals[0];
|
|
479
|
+
if (task === undefined) {
|
|
480
|
+
return usageError(streams, json, "missing <task> argument", WITHDRAW_HELP);
|
|
481
|
+
}
|
|
482
|
+
const extra = positionals[1];
|
|
483
|
+
if (extra !== undefined) {
|
|
484
|
+
return usageError(streams, json, `unexpected argument ${JSON.stringify(extra)}`, WITHDRAW_HELP);
|
|
485
|
+
}
|
|
486
|
+
const actionKey = stringFlag(flags, "--action");
|
|
487
|
+
if (actionKey === null) {
|
|
488
|
+
return usageError(streams, json, "missing --action <key>", WITHDRAW_HELP);
|
|
489
|
+
}
|
|
490
|
+
const asFlag = stringFlag(flags, "--as");
|
|
491
|
+
const actor = resolvePrincipalActor(asFlag);
|
|
492
|
+
if (actor === null)
|
|
493
|
+
return identityUsageError(streams, json, asFlag, WITHDRAW_HELP);
|
|
494
|
+
// Closed vocabulary, refused at exit 2 rather than defaulted. An unrecognized
|
|
495
|
+
// reason silently becoming `cancelled` would put a word in the requester's
|
|
496
|
+
// mouth in an append-only log.
|
|
497
|
+
const reasonFlag = stringFlag(flags, "--reason");
|
|
498
|
+
if (reasonFlag !== null && !isWithdrawReason(reasonFlag)) {
|
|
499
|
+
return usageError(streams, json, `--reason expects one of ${WITHDRAW_REASONS.join(" | ")}, got ${JSON.stringify(reasonFlag)}`, WITHDRAW_HELP);
|
|
500
|
+
}
|
|
501
|
+
const note = stringFlag(flags, "--note");
|
|
502
|
+
const result = withdraw(logPath, actionKey, actor, {
|
|
503
|
+
...gateOptions(flags, cwd),
|
|
504
|
+
...(reasonFlag === null ? {} : { reason: reasonFlag }),
|
|
505
|
+
...(note === null ? {} : { note }),
|
|
506
|
+
});
|
|
507
|
+
if (!result.ok)
|
|
508
|
+
return emitRefusal(streams, json, result);
|
|
509
|
+
const reason = reasonFlag ?? "cancelled";
|
|
510
|
+
if (json) {
|
|
511
|
+
emitJson(streams, {
|
|
512
|
+
ok: true,
|
|
513
|
+
task,
|
|
514
|
+
action_key: actionKey,
|
|
515
|
+
state: result.state,
|
|
516
|
+
reason,
|
|
517
|
+
seq: result.record.seq,
|
|
518
|
+
});
|
|
519
|
+
}
|
|
520
|
+
else {
|
|
521
|
+
streams.out(`withdrawn ${actionKey} at seq ${result.record.seq} by ${actor} (${reason})\n`);
|
|
522
|
+
}
|
|
523
|
+
return EXIT_OK;
|
|
524
|
+
}
|
|
525
|
+
// ---------------------------------------------------------------------------
|
|
526
|
+
// expire
|
|
527
|
+
// ---------------------------------------------------------------------------
|
|
528
|
+
export function commandExpire(argv, streams, cwd) {
|
|
529
|
+
const outcome = front(argv, { ...COMMON_FLAGS, ...POLICY_FLAGS }, EXPIRE_HELP, streams, cwd);
|
|
530
|
+
if (outcome.kind === "handled")
|
|
531
|
+
return outcome.code;
|
|
532
|
+
const { flags, positionals, json, logPath } = outcome;
|
|
533
|
+
const actionKey = positionals[0];
|
|
534
|
+
if (actionKey === undefined) {
|
|
535
|
+
return usageError(streams, json, "missing <action-key> argument", EXPIRE_HELP);
|
|
536
|
+
}
|
|
537
|
+
const extra = positionals[1];
|
|
538
|
+
if (extra !== undefined) {
|
|
539
|
+
return usageError(streams, json, `unexpected argument ${JSON.stringify(extra)}`, EXPIRE_HELP);
|
|
540
|
+
}
|
|
541
|
+
const result = expire(logPath, actionKey, gateOptions(flags, cwd));
|
|
542
|
+
if (!result.ok)
|
|
543
|
+
return emitRefusal(streams, json, result);
|
|
544
|
+
if (json) {
|
|
545
|
+
emitJson(streams, {
|
|
546
|
+
ok: true,
|
|
547
|
+
action_key: actionKey,
|
|
548
|
+
actor: result.record.actor,
|
|
549
|
+
seq: result.record.seq,
|
|
550
|
+
});
|
|
551
|
+
}
|
|
552
|
+
else {
|
|
553
|
+
streams.out(`expired ${actionKey} at seq ${result.record.seq} by ${result.record.actor}\n`);
|
|
554
|
+
}
|
|
555
|
+
return EXIT_OK;
|
|
556
|
+
}
|
|
557
|
+
//# sourceMappingURL=gate.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"gate.js","sourceRoot":"","sources":["../../../src/cli/gate.ts"],"names":[],"mappings":"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"}
|