approval-md 0.0.1 → 0.2.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 +940 -4
- package/SPEC.md +476 -34
- package/cli.js +29 -3
- package/dist/src/adapters/agentmail.d.ts +426 -0
- package/dist/src/adapters/agentmail.js +1200 -0
- package/dist/src/adapters/agentmail.js.map +1 -0
- package/dist/src/adapters/conformance.d.ts +149 -0
- package/dist/src/adapters/conformance.js +461 -0
- package/dist/src/adapters/conformance.js.map +1 -0
- package/dist/src/adapters/contract.d.ts +628 -0
- package/dist/src/adapters/contract.js +1035 -0
- package/dist/src/adapters/contract.js.map +1 -0
- package/dist/src/adapters/email.d.ts +324 -0
- package/dist/src/adapters/email.js +749 -0
- package/dist/src/adapters/email.js.map +1 -0
- package/dist/src/adapters/env-passphrase.d.ts +93 -0
- package/dist/src/adapters/env-passphrase.js +132 -0
- package/dist/src/adapters/env-passphrase.js.map +1 -0
- package/dist/src/adapters/public.d.ts +11 -0
- package/dist/src/adapters/public.js +11 -0
- package/dist/src/adapters/public.js.map +1 -0
- package/dist/src/adapters/registry.d.ts +59 -0
- package/dist/src/adapters/registry.js +77 -0
- package/dist/src/adapters/registry.js.map +1 -0
- package/dist/src/adapters/smtp.d.ts +213 -0
- package/dist/src/adapters/smtp.js +499 -0
- package/dist/src/adapters/smtp.js.map +1 -0
- package/dist/src/adapters/vault-provider.d.ts +114 -0
- package/dist/src/adapters/vault-provider.js +161 -0
- package/dist/src/adapters/vault-provider.js.map +1 -0
- package/dist/src/adapters/zzz.d.ts +66 -0
- package/dist/src/adapters/zzz.js +299 -0
- package/dist/src/adapters/zzz.js.map +1 -0
- package/dist/src/channels/batch.d.ts +109 -0
- package/dist/src/channels/batch.js +121 -0
- package/dist/src/channels/batch.js.map +1 -0
- package/dist/src/channels/cli.d.ts +193 -0
- package/dist/src/channels/cli.js +468 -0
- package/dist/src/channels/cli.js.map +1 -0
- package/dist/src/channels/conformance.d.ts +92 -0
- package/dist/src/channels/conformance.js +445 -0
- package/dist/src/channels/conformance.js.map +1 -0
- package/dist/src/channels/contract.d.ts +623 -0
- package/dist/src/channels/contract.js +494 -0
- package/dist/src/channels/contract.js.map +1 -0
- package/dist/src/channels/payload-view.d.ts +35 -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.d.ts +149 -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.d.ts +196 -0
- package/dist/src/channels/tagging.js +723 -0
- package/dist/src/channels/tagging.js.map +1 -0
- package/dist/src/channels/telegram.d.ts +1832 -0
- package/dist/src/channels/telegram.js +3190 -0
- package/dist/src/channels/telegram.js.map +1 -0
- package/dist/src/channels/web.d.ts +341 -0
- package/dist/src/channels/web.js +903 -0
- package/dist/src/channels/web.js.map +1 -0
- package/dist/src/cli/adapter.d.ts +90 -0
- package/dist/src/cli/adapter.js +288 -0
- package/dist/src/cli/adapter.js.map +1 -0
- package/dist/src/cli/amend.d.ts +59 -0
- package/dist/src/cli/amend.js +2171 -0
- package/dist/src/cli/amend.js.map +1 -0
- package/dist/src/cli/args.d.ts +43 -0
- package/dist/src/cli/args.js +86 -0
- package/dist/src/cli/args.js.map +1 -0
- package/dist/src/cli/attest.d.ts +41 -0
- package/dist/src/cli/attest.js +307 -0
- package/dist/src/cli/attest.js.map +1 -0
- package/dist/src/cli/audit-card.d.ts +62 -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.d.ts +59 -0
- package/dist/src/cli/audit.js +460 -0
- package/dist/src/cli/audit.js.map +1 -0
- package/dist/src/cli/channel-telegram.d.ts +806 -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.d.ts +131 -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.d.ts +71 -0
- package/dist/src/cli/channel.js +438 -0
- package/dist/src/cli/channel.js.map +1 -0
- package/dist/src/cli/checkpoint-tap.d.ts +169 -0
- package/dist/src/cli/checkpoint-tap.js +238 -0
- package/dist/src/cli/checkpoint-tap.js.map +1 -0
- package/dist/src/cli/codex.d.ts +2 -0
- package/dist/src/cli/codex.js +172 -0
- package/dist/src/cli/codex.js.map +1 -0
- package/dist/src/cli/coverage.d.ts +61 -0
- package/dist/src/cli/coverage.js +343 -0
- package/dist/src/cli/coverage.js.map +1 -0
- package/dist/src/cli/daemon.d.ts +120 -0
- package/dist/src/cli/daemon.js +631 -0
- package/dist/src/cli/daemon.js.map +1 -0
- package/dist/src/cli/doctor.d.ts +129 -0
- package/dist/src/cli/doctor.js +2762 -0
- package/dist/src/cli/doctor.js.map +1 -0
- package/dist/src/cli/env.d.ts +65 -0
- package/dist/src/cli/env.js +302 -0
- package/dist/src/cli/env.js.map +1 -0
- package/dist/src/cli/execute.d.ts +202 -0
- package/dist/src/cli/execute.js +1682 -0
- package/dist/src/cli/execute.js.map +1 -0
- package/dist/src/cli/exit-codes.d.ts +73 -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.d.ts +60 -0
- package/dist/src/cli/feedback.js +205 -0
- package/dist/src/cli/feedback.js.map +1 -0
- package/dist/src/cli/gate-window.d.ts +40 -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.d.ts +68 -0
- package/dist/src/cli/gate.js +557 -0
- package/dist/src/cli/gate.js.map +1 -0
- package/dist/src/cli/git-scope.d.ts +190 -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.d.ts +85 -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.d.ts +9 -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.d.ts +24 -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.d.ts +42 -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.d.ts +265 -0
- package/dist/src/cli/gloss.js +362 -0
- package/dist/src/cli/gloss.js.map +1 -0
- package/dist/src/cli/help.d.ts +103 -0
- package/dist/src/cli/help.js +2339 -0
- package/dist/src/cli/help.js.map +1 -0
- package/dist/src/cli/hook-codex.d.ts +78 -0
- package/dist/src/cli/hook-codex.js +167 -0
- package/dist/src/cli/hook-codex.js.map +1 -0
- package/dist/src/cli/hook.d.ts +331 -0
- package/dist/src/cli/hook.js +2849 -0
- package/dist/src/cli/hook.js.map +1 -0
- package/dist/src/cli/import.d.ts +35 -0
- package/dist/src/cli/import.js +175 -0
- package/dist/src/cli/import.js.map +1 -0
- package/dist/src/cli/init.d.ts +84 -0
- package/dist/src/cli/init.js +336 -0
- package/dist/src/cli/init.js.map +1 -0
- package/dist/src/cli/instructions.d.ts +23 -0
- package/dist/src/cli/instructions.js +262 -0
- package/dist/src/cli/instructions.js.map +1 -0
- package/dist/src/cli/journal.d.ts +41 -0
- package/dist/src/cli/journal.js +238 -0
- package/dist/src/cli/journal.js.map +1 -0
- package/dist/src/cli/log-advance.d.ts +287 -0
- package/dist/src/cli/log-advance.js +840 -0
- package/dist/src/cli/log-advance.js.map +1 -0
- package/dist/src/cli/log-anchor.d.ts +176 -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.d.ts +22 -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.d.ts +243 -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.d.ts +16 -0
- package/dist/src/cli/log-verbs.js +360 -0
- package/dist/src/cli/log-verbs.js.map +1 -0
- package/dist/src/cli/long-help.d.ts +70 -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.d.ts +77 -0
- package/dist/src/cli/main.js +1206 -0
- package/dist/src/cli/main.js.map +1 -0
- package/dist/src/cli/mcp.d.ts +52 -0
- package/dist/src/cli/mcp.js +306 -0
- package/dist/src/cli/mcp.js.map +1 -0
- package/dist/src/cli/paths.d.ts +56 -0
- package/dist/src/cli/paths.js +79 -0
- package/dist/src/cli/paths.js.map +1 -0
- package/dist/src/cli/payload.d.ts +58 -0
- package/dist/src/cli/payload.js +253 -0
- package/dist/src/cli/payload.js.map +1 -0
- package/dist/src/cli/policy.d.ts +43 -0
- package/dist/src/cli/policy.js +229 -0
- package/dist/src/cli/policy.js.map +1 -0
- package/dist/src/cli/preflight.d.ts +363 -0
- package/dist/src/cli/preflight.js +1175 -0
- package/dist/src/cli/preflight.js.map +1 -0
- package/dist/src/cli/progress.d.ts +78 -0
- package/dist/src/cli/progress.js +112 -0
- package/dist/src/cli/progress.js.map +1 -0
- package/dist/src/cli/prompt.d.ts +209 -0
- package/dist/src/cli/prompt.js +312 -0
- package/dist/src/cli/prompt.js.map +1 -0
- package/dist/src/cli/quickstart.d.ts +46 -0
- package/dist/src/cli/quickstart.js +297 -0
- package/dist/src/cli/quickstart.js.map +1 -0
- package/dist/src/cli/records.d.ts +34 -0
- package/dist/src/cli/records.js +66 -0
- package/dist/src/cli/records.js.map +1 -0
- package/dist/src/cli/render.d.ts +22 -0
- package/dist/src/cli/render.js +132 -0
- package/dist/src/cli/render.js.map +1 -0
- package/dist/src/cli/sandbox.d.ts +51 -0
- package/dist/src/cli/sandbox.js +150 -0
- package/dist/src/cli/sandbox.js.map +1 -0
- package/dist/src/cli/scaffold.d.ts +79 -0
- package/dist/src/cli/scaffold.js +137 -0
- package/dist/src/cli/scaffold.js.map +1 -0
- package/dist/src/cli/setup-adapter.d.ts +137 -0
- package/dist/src/cli/setup-adapter.js +509 -0
- package/dist/src/cli/setup-adapter.js.map +1 -0
- package/dist/src/cli/setup-channel.d.ts +117 -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.d.ts +57 -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.d.ts +275 -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.d.ts +287 -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.d.ts +96 -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.d.ts +202 -0
- package/dist/src/cli/setup.js +473 -0
- package/dist/src/cli/setup.js.map +1 -0
- package/dist/src/cli/style.d.ts +320 -0
- package/dist/src/cli/style.js +469 -0
- package/dist/src/cli/style.js.map +1 -0
- package/dist/src/cli/token.d.ts +39 -0
- package/dist/src/cli/token.js +274 -0
- package/dist/src/cli/token.js.map +1 -0
- package/dist/src/cli/up.d.ts +155 -0
- package/dist/src/cli/up.js +849 -0
- package/dist/src/cli/up.js.map +1 -0
- package/dist/src/cli/usage.d.ts +37 -0
- package/dist/src/cli/usage.js +91 -0
- package/dist/src/cli/usage.js.map +1 -0
- package/dist/src/cli/values.d.ts +40 -0
- package/dist/src/cli/values.js +189 -0
- package/dist/src/cli/values.js.map +1 -0
- package/dist/src/cli/vault.d.ts +59 -0
- package/dist/src/cli/vault.js +362 -0
- package/dist/src/cli/vault.js.map +1 -0
- package/dist/src/cli/verb-registry.d.ts +76 -0
- package/dist/src/cli/verb-registry.js +2341 -0
- package/dist/src/cli/verb-registry.js.map +1 -0
- package/dist/src/cli/wordmark.d.ts +31 -0
- package/dist/src/cli/wordmark.js +52 -0
- package/dist/src/cli/wordmark.js.map +1 -0
- package/dist/src/codex/doctor.d.ts +13 -0
- package/dist/src/codex/doctor.js +41 -0
- package/dist/src/codex/doctor.js.map +1 -0
- package/dist/src/codex/manifest.d.ts +49 -0
- package/dist/src/codex/manifest.js +103 -0
- package/dist/src/codex/manifest.js.map +1 -0
- package/dist/src/codex/templates.d.ts +41 -0
- package/dist/src/codex/templates.js +319 -0
- package/dist/src/codex/templates.js.map +1 -0
- package/dist/src/codex/trust.d.ts +19 -0
- package/dist/src/codex/trust.js +183 -0
- package/dist/src/codex/trust.js.map +1 -0
- package/dist/src/codex/workspace-plan.d.ts +131 -0
- package/dist/src/codex/workspace-plan.js +561 -0
- package/dist/src/codex/workspace-plan.js.map +1 -0
- package/dist/src/core/actor.d.ts +2 -0
- package/dist/src/core/actor.js +5 -0
- package/dist/src/core/actor.js.map +1 -0
- package/dist/src/core/advance-cycle.d.ts +170 -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.d.ts +276 -0
- package/dist/src/core/agents-md.js +747 -0
- package/dist/src/core/agents-md.js.map +1 -0
- package/dist/src/core/apply-patch.d.ts +49 -0
- package/dist/src/core/apply-patch.js +266 -0
- package/dist/src/core/apply-patch.js.map +1 -0
- package/dist/src/core/attest.d.ts +420 -0
- package/dist/src/core/attest.js +589 -0
- package/dist/src/core/attest.js.map +1 -0
- package/dist/src/core/audit.d.ts +492 -0
- package/dist/src/core/audit.js +882 -0
- package/dist/src/core/audit.js.map +1 -0
- package/dist/src/core/budgets.d.ts +238 -0
- package/dist/src/core/budgets.js +449 -0
- package/dist/src/core/budgets.js.map +1 -0
- package/dist/src/core/checkpoint.d.ts +500 -0
- package/dist/src/core/checkpoint.js +738 -0
- package/dist/src/core/checkpoint.js.map +1 -0
- package/dist/src/core/child-env.d.ts +88 -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.d.ts +52 -0
- package/dist/src/core/clock.js +43 -0
- package/dist/src/core/clock.js.map +1 -0
- package/dist/src/core/command-class.d.ts +543 -0
- package/dist/src/core/command-class.js +2356 -0
- package/dist/src/core/command-class.js.map +1 -0
- package/dist/src/core/coverage-sources/adapter.d.ts +40 -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.d.ts +48 -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.d.ts +101 -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.d.ts +217 -0
- package/dist/src/core/coverage.js +337 -0
- package/dist/src/core/coverage.js.map +1 -0
- package/dist/src/core/credential-spec.d.ts +72 -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.d.ts +331 -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.d.ts +185 -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.d.ts +450 -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.d.ts +858 -0
- package/dist/src/core/execute.js +1271 -0
- package/dist/src/core/execute.js.map +1 -0
- package/dist/src/core/frontmatter.d.ts +78 -0
- package/dist/src/core/frontmatter.js +100 -0
- package/dist/src/core/frontmatter.js.map +1 -0
- package/dist/src/core/gate-window.d.ts +312 -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.d.ts +1364 -0
- package/dist/src/core/gate.js +3002 -0
- package/dist/src/core/gate.js.map +1 -0
- package/dist/src/core/git-run.d.ts +73 -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.d.ts +157 -0
- package/dist/src/core/harness-version.js +211 -0
- package/dist/src/core/harness-version.js.map +1 -0
- package/dist/src/core/harness-wait.d.ts +55 -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.d.ts +107 -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.d.ts +253 -0
- package/dist/src/core/instance.js +319 -0
- package/dist/src/core/instance.js.map +1 -0
- package/dist/src/core/intake-limits.d.ts +247 -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.d.ts +52 -0
- package/dist/src/core/jcs.js +132 -0
- package/dist/src/core/jcs.js.map +1 -0
- package/dist/src/core/journal.d.ts +144 -0
- package/dist/src/core/journal.js +200 -0
- package/dist/src/core/journal.js.map +1 -0
- package/dist/src/core/live-draw.d.ts +436 -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.d.ts +89 -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-subscribe.d.ts +36 -0
- package/dist/src/core/log-subscribe.js +162 -0
- package/dist/src/core/log-subscribe.js.map +1 -0
- package/dist/src/core/log.d.ts +278 -0
- package/dist/src/core/log.js +546 -0
- package/dist/src/core/log.js.map +1 -0
- package/dist/src/core/loop.d.ts +274 -0
- package/dist/src/core/loop.js +487 -0
- package/dist/src/core/loop.js.map +1 -0
- package/dist/src/core/md-fence.d.ts +41 -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.d.ts +147 -0
- package/dist/src/core/money.js +195 -0
- package/dist/src/core/money.js.map +1 -0
- package/dist/src/core/payload-census.d.ts +74 -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.d.ts +175 -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.d.ts +71 -0
- package/dist/src/core/payload.js +80 -0
- package/dist/src/core/payload.js.map +1 -0
- package/dist/src/core/policy-diff.d.ts +292 -0
- package/dist/src/core/policy-diff.js +588 -0
- package/dist/src/core/policy-diff.js.map +1 -0
- package/dist/src/core/policy-expectations.d.ts +199 -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.d.ts +150 -0
- package/dist/src/core/policy-explain.js +258 -0
- package/dist/src/core/policy-explain.js.map +1 -0
- package/dist/src/core/policy-load.d.ts +527 -0
- package/dist/src/core/policy-load.js +536 -0
- package/dist/src/core/policy-load.js.map +1 -0
- package/dist/src/core/policy-match.d.ts +281 -0
- package/dist/src/core/policy-match.js +478 -0
- package/dist/src/core/policy-match.js.map +1 -0
- package/dist/src/core/policy-proposal.d.ts +265 -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.d.ts +221 -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.d.ts +453 -0
- package/dist/src/core/protected-path-guard.js +1566 -0
- package/dist/src/core/protected-path-guard.js.map +1 -0
- package/dist/src/core/registration.d.ts +25 -0
- package/dist/src/core/registration.js +39 -0
- package/dist/src/core/registration.js.map +1 -0
- package/dist/src/core/reindex.d.ts +99 -0
- package/dist/src/core/reindex.js +336 -0
- package/dist/src/core/reindex.js.map +1 -0
- package/dist/src/core/sampler.d.ts +313 -0
- package/dist/src/core/sampler.js +388 -0
- package/dist/src/core/sampler.js.map +1 -0
- package/dist/src/core/sandbox.d.ts +290 -0
- package/dist/src/core/sandbox.js +424 -0
- package/dist/src/core/sandbox.js.map +1 -0
- package/dist/src/core/seal.d.ts +165 -0
- package/dist/src/core/seal.js +290 -0
- package/dist/src/core/seal.js.map +1 -0
- package/dist/src/core/state.d.ts +505 -0
- package/dist/src/core/state.js +1009 -0
- package/dist/src/core/state.js.map +1 -0
- package/dist/src/core/task-file.d.ts +185 -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.d.ts +93 -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.d.ts +409 -0
- package/dist/src/core/token.js +561 -0
- package/dist/src/core/token.js.map +1 -0
- package/dist/src/core/validate.d.ts +138 -0
- package/dist/src/core/validate.js +0 -0
- package/dist/src/core/validate.js.map +1 -0
- package/dist/src/core/values.d.ts +137 -0
- package/dist/src/core/values.js +153 -0
- package/dist/src/core/values.js.map +1 -0
- package/dist/src/core/vault.d.ts +291 -0
- package/dist/src/core/vault.js +612 -0
- package/dist/src/core/vault.js.map +1 -0
- package/dist/src/core/verified-snapshot.d.ts +204 -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.d.ts +336 -0
- package/dist/src/core/verify.js +549 -0
- package/dist/src/core/verify.js.map +1 -0
- package/dist/src/core/version.d.ts +8 -0
- package/dist/src/core/version.js +9 -0
- package/dist/src/core/version.js.map +1 -0
- package/dist/src/core/wysiwys.d.ts +370 -0
- package/dist/src/core/wysiwys.js +728 -0
- package/dist/src/core/wysiwys.js.map +1 -0
- package/dist/src/daemon/advance-child.d.ts +39 -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.d.ts +466 -0
- package/dist/src/daemon/advance.js +849 -0
- package/dist/src/daemon/advance.js.map +1 -0
- package/dist/src/daemon/audit.d.ts +87 -0
- package/dist/src/daemon/audit.js +90 -0
- package/dist/src/daemon/audit.js.map +1 -0
- package/dist/src/daemon/daemon.d.ts +1180 -0
- package/dist/src/daemon/daemon.js +1988 -0
- package/dist/src/daemon/daemon.js.map +1 -0
- package/dist/src/daemon/dark-session.d.ts +64 -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.d.ts +36 -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.d.ts +154 -0
- package/dist/src/daemon/draw.js +458 -0
- package/dist/src/daemon/draw.js.map +1 -0
- package/dist/src/daemon/git-evidence.d.ts +173 -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.d.ts +180 -0
- package/dist/src/daemon/projection.js +233 -0
- package/dist/src/daemon/projection.js.map +1 -0
- package/dist/src/daemon/prune.d.ts +207 -0
- package/dist/src/daemon/prune.js +376 -0
- package/dist/src/daemon/prune.js.map +1 -0
- package/dist/src/mcp/http.d.ts +113 -0
- package/dist/src/mcp/http.js +343 -0
- package/dist/src/mcp/http.js.map +1 -0
- package/dist/src/mcp/server.d.ts +265 -0
- package/dist/src/mcp/server.js +602 -0
- package/dist/src/mcp/server.js.map +1 -0
- package/docs/adapter-api.md +106 -0
- package/docs/cli-reference.md +5716 -0
- package/docs/codex-enforced-session.md +30 -0
- package/package.json +53 -4
- package/schema/.gitkeep +0 -0
- package/schema/LICENSE +117 -0
- package/schema/codex-instance.schema.json +82 -0
- package/schema/envelope.schema.json +137 -0
- package/schema/event.schema.json +1811 -0
- package/schema/fixtures/codex-instance/invalid/unpinned-codex-version.json +40 -0
- package/schema/fixtures/codex-instance/valid/canonical.json +40 -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 +501 -0
- package/schema/sample-record.schema.json +26 -0
- package/schema/values.schema.json +55 -0
- package/templates/codex/README.md +9 -0
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"setup-channel.js","sourceRoot":"","sources":["../../../src/cli/setup-channel.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,57 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* `approval setup checkpoint` — mint the key a human signs the log with
|
|
3
|
+
* (APRV-257, the ceremony half of APRV-220).
|
|
4
|
+
*
|
|
5
|
+
* APRV-220 built the record, the signature and the verify rule, and left the
|
|
6
|
+
* key to an operator with a Node REPL. This is the ceremony that replaces the
|
|
7
|
+
* REPL, and it is shaped like every other `approval setup` subcommand for the
|
|
8
|
+
* reason that family exists: establishing a secret is an act of the human at
|
|
9
|
+
* the machine, so the verb refuses a non-terminal stdin and prints the scripted
|
|
10
|
+
* alternative instead of accepting a pipe.
|
|
11
|
+
*
|
|
12
|
+
* ## The two halves go to two different places, and that is the whole design
|
|
13
|
+
*
|
|
14
|
+
* The PRIVATE half goes into the vault, under the reserved name
|
|
15
|
+
* `approval.checkpoint.key`. Encrypted at rest under the passphrase
|
|
16
|
+
* `vault.passphrase_env` names, which `core/child-env.ts` strips from every
|
|
17
|
+
* child this runtime spawns (APRV-205), behind a file whose reading classifies
|
|
18
|
+
* `account.credential`. `core/vault.ts`'s header records why it belongs there
|
|
19
|
+
* and not in the OS keystore.
|
|
20
|
+
*
|
|
21
|
+
* The PUBLIC half is PRINTED, with the exact `audit.checkpoint_keys` line to
|
|
22
|
+
* paste, and this verb goes no further. **Nothing an agent runs writes that
|
|
23
|
+
* line**, and nothing this verb runs writes it either: `APPROVAL.md` is
|
|
24
|
+
* attested, an edit de-attests it until a human re-attests, and a setup wizard
|
|
25
|
+
* that silently edited an attested policy would be forging the sign-off. The
|
|
26
|
+
* same rule `setup sampling` already keeps for `audit.sampling_secret_env`.
|
|
27
|
+
*
|
|
28
|
+
* So the key is INERT when this verb finishes, and the verb says so: a
|
|
29
|
+
* checkpoint signed by a key the policy does not list is
|
|
30
|
+
* `checkpoint-key-unknown`, which is a refusal. The ceremony is two steps and
|
|
31
|
+
* the second one is the human's.
|
|
32
|
+
*
|
|
33
|
+
* ## Rotation appends; it never drops
|
|
34
|
+
*
|
|
35
|
+
* `--rotate` mints a second key and prints the list with BOTH in it. Retiring
|
|
36
|
+
* is a separate, deliberate act (`--retire <fingerprint>`), and it is REFUSED
|
|
37
|
+
* for any key that signed a checkpoint in the log, naming the seqs that would
|
|
38
|
+
* stop verifying. That is not caution: removing such a key turns every
|
|
39
|
+
* checkpoint it signed into `checkpoint-key-unknown` for the life of the log,
|
|
40
|
+
* which is the cost APRV-220 accepted knowingly when it made an unlisted key a
|
|
41
|
+
* refusal rather than a shrug. A key that has signed nothing may be dropped,
|
|
42
|
+
* and this verb prints the line that does it.
|
|
43
|
+
*
|
|
44
|
+
* ## Human-only, three times over
|
|
45
|
+
*
|
|
46
|
+
* The terminal check (this family's own rule), the `--as human:<id>` gate
|
|
47
|
+
* (`requireHuman`), and — since APRV-257 — the classification: `approval setup
|
|
48
|
+
* checkpoint` classifies `policy.core` in `core/command-class.ts`, which the
|
|
49
|
+
* reference policy holds human-only, so the Claude Code hook denies an agent
|
|
50
|
+
* running it with `hook-class-human-only` before a process starts. It mints no
|
|
51
|
+
* new class (SPEC.md §11.1 invariant 9): `policy.core` already exists and
|
|
52
|
+
* already covers `gate open`, `gate close` and `log checkpoint`.
|
|
53
|
+
*/
|
|
54
|
+
import type { Streams } from "./main.js";
|
|
55
|
+
import { type SetupDeps } from "./setup-common.js";
|
|
56
|
+
/** `approval setup checkpoint` — mint the checkpoint keypair. HUMAN-ONLY. */
|
|
57
|
+
export declare function commandSetupCheckpoint(argv: string[], streams: Streams, cwd: string, deps?: SetupDeps): number;
|
|
@@ -0,0 +1,196 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* `approval setup checkpoint` — mint the key a human signs the log with
|
|
3
|
+
* (APRV-257, the ceremony half of APRV-220).
|
|
4
|
+
*
|
|
5
|
+
* APRV-220 built the record, the signature and the verify rule, and left the
|
|
6
|
+
* key to an operator with a Node REPL. This is the ceremony that replaces the
|
|
7
|
+
* REPL, and it is shaped like every other `approval setup` subcommand for the
|
|
8
|
+
* reason that family exists: establishing a secret is an act of the human at
|
|
9
|
+
* the machine, so the verb refuses a non-terminal stdin and prints the scripted
|
|
10
|
+
* alternative instead of accepting a pipe.
|
|
11
|
+
*
|
|
12
|
+
* ## The two halves go to two different places, and that is the whole design
|
|
13
|
+
*
|
|
14
|
+
* The PRIVATE half goes into the vault, under the reserved name
|
|
15
|
+
* `approval.checkpoint.key`. Encrypted at rest under the passphrase
|
|
16
|
+
* `vault.passphrase_env` names, which `core/child-env.ts` strips from every
|
|
17
|
+
* child this runtime spawns (APRV-205), behind a file whose reading classifies
|
|
18
|
+
* `account.credential`. `core/vault.ts`'s header records why it belongs there
|
|
19
|
+
* and not in the OS keystore.
|
|
20
|
+
*
|
|
21
|
+
* The PUBLIC half is PRINTED, with the exact `audit.checkpoint_keys` line to
|
|
22
|
+
* paste, and this verb goes no further. **Nothing an agent runs writes that
|
|
23
|
+
* line**, and nothing this verb runs writes it either: `APPROVAL.md` is
|
|
24
|
+
* attested, an edit de-attests it until a human re-attests, and a setup wizard
|
|
25
|
+
* that silently edited an attested policy would be forging the sign-off. The
|
|
26
|
+
* same rule `setup sampling` already keeps for `audit.sampling_secret_env`.
|
|
27
|
+
*
|
|
28
|
+
* So the key is INERT when this verb finishes, and the verb says so: a
|
|
29
|
+
* checkpoint signed by a key the policy does not list is
|
|
30
|
+
* `checkpoint-key-unknown`, which is a refusal. The ceremony is two steps and
|
|
31
|
+
* the second one is the human's.
|
|
32
|
+
*
|
|
33
|
+
* ## Rotation appends; it never drops
|
|
34
|
+
*
|
|
35
|
+
* `--rotate` mints a second key and prints the list with BOTH in it. Retiring
|
|
36
|
+
* is a separate, deliberate act (`--retire <fingerprint>`), and it is REFUSED
|
|
37
|
+
* for any key that signed a checkpoint in the log, naming the seqs that would
|
|
38
|
+
* stop verifying. That is not caution: removing such a key turns every
|
|
39
|
+
* checkpoint it signed into `checkpoint-key-unknown` for the life of the log,
|
|
40
|
+
* which is the cost APRV-220 accepted knowingly when it made an unlisted key a
|
|
41
|
+
* refusal rather than a shrug. A key that has signed nothing may be dropped,
|
|
42
|
+
* and this verb prints the line that does it.
|
|
43
|
+
*
|
|
44
|
+
* ## Human-only, three times over
|
|
45
|
+
*
|
|
46
|
+
* The terminal check (this family's own rule), the `--as human:<id>` gate
|
|
47
|
+
* (`requireHuman`), and — since APRV-257 — the classification: `approval setup
|
|
48
|
+
* checkpoint` classifies `policy.core` in `core/command-class.ts`, which the
|
|
49
|
+
* reference policy holds human-only, so the Claude Code hook denies an agent
|
|
50
|
+
* running it with `hook-class-human-only` before a process starts. It mints no
|
|
51
|
+
* new class (SPEC.md §11.1 invariant 9): `policy.core` already exists and
|
|
52
|
+
* already covers `gate open`, `gate close` and `log checkpoint`.
|
|
53
|
+
*/
|
|
54
|
+
import { checkpointKeyFingerprint, checkpointPolicyOf, CHECKPOINT_KEY_CREDENTIAL, checkpointSignersIn, mintCheckpointKeypair, } from "../core/checkpoint.js";
|
|
55
|
+
import { envFilePathFor, readEnvFile } from "../core/env-file.js";
|
|
56
|
+
import { readVerifiedRecords } from "../core/state.js";
|
|
57
|
+
import { passphraseEnvFor, passphraseFrom, setCredential, vaultExists, vaultPathFor, } from "../core/vault.js";
|
|
58
|
+
import { boolFlag, stringFlag } from "./args.js";
|
|
59
|
+
import { EXIT_INTEGRITY, EXIT_IO, EXIT_OK } from "./exit-codes.js";
|
|
60
|
+
import { SETUP_CHECKPOINT_HELP } from "./help.js";
|
|
61
|
+
import { absolute, front, requireHuman, usageError, } from "./setup-common.js";
|
|
62
|
+
import { refusal as renderRefusal, style } from "./style.js";
|
|
63
|
+
/** Flags this subcommand adds to the family's shared table. */
|
|
64
|
+
const EXTRA_FLAGS = {
|
|
65
|
+
"--rotate": "boolean",
|
|
66
|
+
"--retire": "string",
|
|
67
|
+
};
|
|
68
|
+
const CHECKPOINT_HINT = (where) => ` # there is no non-interactive form of this ceremony, and that is the point:\n # a checkpoint key exists to be a key no agent-launched process can mint.\n # What a script CAN do is establish the passphrase and then leave the key to\n # a human at a terminal:\n\n approval setup vault --as human:<id>\n eval "$(approval env)" # puts ${where.passphraseEnv} in this shell\n approval setup checkpoint --as human:<id>\n\n # then paste the printed public key into APPROVAL.md and attest it:\n approval policy amend`;
|
|
69
|
+
/** The `audit.checkpoint_keys` block to paste, with every key that must stay. */
|
|
70
|
+
function policyBlock(keys) {
|
|
71
|
+
return [" audit:", " checkpoint_keys:", ...keys.map((key) => ` - ${key}`)].join("\n");
|
|
72
|
+
}
|
|
73
|
+
/** Short form of a fingerprint, for prose. The full value is always printed too. */
|
|
74
|
+
function short(fingerprint) {
|
|
75
|
+
return fingerprint.slice(0, 12);
|
|
76
|
+
}
|
|
77
|
+
/**
|
|
78
|
+
* The refusal for an unset passphrase, in `setup adapter`'s two shapes.
|
|
79
|
+
*
|
|
80
|
+
* Same diagnosis and the same two repairs, because it is the same fact: the
|
|
81
|
+
* vault passphrase is read from the environment under the policy's name and
|
|
82
|
+
* from nowhere else, and an operator meeting this on a second verb should meet
|
|
83
|
+
* the sentence they already know.
|
|
84
|
+
*/
|
|
85
|
+
function passphraseHint(variable, logPath) {
|
|
86
|
+
const envPath = envFilePathFor(logPath);
|
|
87
|
+
const file = readEnvFile(envPath);
|
|
88
|
+
const hasLine = file.ok && file.entries.some((entry) => entry.key === variable);
|
|
89
|
+
return hasLine || vaultExists(vaultPathFor(logPath))
|
|
90
|
+
? `The passphrase is recorded but not in this shell. Establish it with:\n\n eval "$(approval env)"`
|
|
91
|
+
: `Nobody has established a vault passphrase here. Do that first, then evaluate it:\n\n approval setup vault --as human:<id>\n eval "$(approval env)"`;
|
|
92
|
+
}
|
|
93
|
+
/**
|
|
94
|
+
* `--retire <fingerprint>`: print the line that drops a key, or refuse.
|
|
95
|
+
*
|
|
96
|
+
* Answered from the LOG and never from a memory of what was rotated when: the
|
|
97
|
+
* question is "would removing this name change a verdict", and only the records
|
|
98
|
+
* can answer it. A log that does not verify refuses the retirement too — a
|
|
99
|
+
* chain nobody can walk cannot be asked which keys signed inside it, and
|
|
100
|
+
* guessing here would be guessing about the one thing this whole mechanism
|
|
101
|
+
* exists to make unguessable.
|
|
102
|
+
*/
|
|
103
|
+
function retireKey(streams, fingerprint, configured, logPath, schemaDir) {
|
|
104
|
+
const wanted = fingerprint.trim().toLowerCase();
|
|
105
|
+
const matches = configured.filter((key) => {
|
|
106
|
+
const seen = checkpointKeyFingerprint(key);
|
|
107
|
+
return seen !== null && (seen === wanted || seen.startsWith(wanted));
|
|
108
|
+
});
|
|
109
|
+
if (matches.length === 0) {
|
|
110
|
+
return usageError(streams, false, `no configured checkpoint key hashes to ${JSON.stringify(fingerprint)}. audit.checkpoint_keys lists ${String(configured.length)} key(s); \`approval doctor\` names their fingerprints. Nothing was changed`, SETUP_CHECKPOINT_HELP);
|
|
111
|
+
}
|
|
112
|
+
if (matches.length > 1) {
|
|
113
|
+
return usageError(streams, false, `${JSON.stringify(fingerprint)} is a prefix of ${String(matches.length)} configured keys; give more of the fingerprint. Nothing was changed`, SETUP_CHECKPOINT_HELP);
|
|
114
|
+
}
|
|
115
|
+
const read = readVerifiedRecords(logPath, schemaDir === undefined ? {} : { schemaDir });
|
|
116
|
+
if (!read.ok) {
|
|
117
|
+
streams.err(`${renderRefusal(style(), read.code, `${read.message}. A log that does not verify cannot be asked which keys signed inside it, and retiring a key on a guess is how a checkpoint range stops verifying. Nothing was changed`)}\n`);
|
|
118
|
+
return EXIT_INTEGRITY;
|
|
119
|
+
}
|
|
120
|
+
const target = matches[0];
|
|
121
|
+
const targetFingerprint = checkpointKeyFingerprint(target);
|
|
122
|
+
const signed = checkpointSignersIn(read.records).get(targetFingerprint) ?? [];
|
|
123
|
+
if (signed.length > 0) {
|
|
124
|
+
streams.err(`${renderRefusal(style(), "checkpoint-key-in-use", `key ${targetFingerprint} signed ${String(signed.length)} checkpoint(s) in ${logPath}, at seq ${signed.join(", ")}. Removing it from audit.checkpoint_keys would turn every one of them into checkpoint-key-unknown, which is a REFUSAL and not a warning: \`approval log verify --checkpoints\` would stop passing on a log nobody has touched. Retired keys stay listed forever, which is why the field is a list. Nothing was changed`)}\n`);
|
|
125
|
+
return EXIT_INTEGRITY;
|
|
126
|
+
}
|
|
127
|
+
streams.out(`key ${targetFingerprint} has signed no checkpoint in ${logPath}, so removing it changes no\nverdict. This verb does not edit an attested policy; here is the block to leave\nbehind, through the ceremony that attests it:\n\n${policyBlock(configured.filter((key) => key !== target))}\n\n approval policy amend\n`);
|
|
128
|
+
return EXIT_OK;
|
|
129
|
+
}
|
|
130
|
+
/** `approval setup checkpoint` — mint the checkpoint keypair. HUMAN-ONLY. */
|
|
131
|
+
export function commandSetupCheckpoint(argv, streams, cwd, deps = {}) {
|
|
132
|
+
const outcome = front("checkpoint", argv, streams, cwd, deps, SETUP_CHECKPOINT_HELP, CHECKPOINT_HINT, EXTRA_FLAGS);
|
|
133
|
+
if (outcome.kind === "handled")
|
|
134
|
+
return outcome.code;
|
|
135
|
+
const context = outcome;
|
|
136
|
+
const extra = context.positionals[0];
|
|
137
|
+
if (extra !== undefined) {
|
|
138
|
+
return usageError(streams, false, `unexpected argument ${JSON.stringify(extra)}`, SETUP_CHECKPOINT_HELP);
|
|
139
|
+
}
|
|
140
|
+
const human = requireHuman(context.flags, streams, SETUP_CHECKPOINT_HELP, "checkpoint");
|
|
141
|
+
if (!human.ok)
|
|
142
|
+
return human.code;
|
|
143
|
+
const policyFlag = stringFlag(context.flags, "--policy");
|
|
144
|
+
const dirFlag = stringFlag(context.flags, "--dir");
|
|
145
|
+
// Resolved against the verb's `cwd` and not the process's, the way every
|
|
146
|
+
// other path in this family is: a relative `--policy` that landed on a
|
|
147
|
+
// different file than `front()` loaded would answer questions about a policy
|
|
148
|
+
// nobody chose.
|
|
149
|
+
const policyWhere = policyFlag !== null
|
|
150
|
+
? { file: absolute(policyFlag, cwd) }
|
|
151
|
+
: { dir: dirFlag === null ? cwd : absolute(dirFlag, cwd) };
|
|
152
|
+
const configured = checkpointPolicyOf(policyWhere);
|
|
153
|
+
const retire = stringFlag(context.flags, "--retire");
|
|
154
|
+
if (retire !== null) {
|
|
155
|
+
return retireKey(streams, retire, configured.publicKeys, context.logPath, undefined);
|
|
156
|
+
}
|
|
157
|
+
streams.out(`approval setup checkpoint — mints the Ed25519 key you sign the log's head with.\n\nA checkpoint is the one witness an agent process is not supposed to be able to\nproduce: it says a key nobody's runtime holds saw this chain at this head. The\nPRIVATE half goes into ${vaultPathFor(context.logPath)}\nunder ${CHECKPOINT_KEY_CREDENTIAL} and is never printed. The PUBLIC half is\nprinted below for you to put in APPROVAL.md yourself.\n\n`);
|
|
158
|
+
const rotating = boolFlag(context.flags, "--rotate");
|
|
159
|
+
if (configured.publicKeys.length > 0 && !rotating) {
|
|
160
|
+
streams.out(`Your policy already lists ${String(configured.publicKeys.length)} checkpoint key(s). Minting a second one and\nstoring it under ${CHECKPOINT_KEY_CREDENTIAL} REPLACES the private half in the\nvault: checkpoints already signed keep verifying (their key stays listed), but\nthe old private half is gone and nothing in this runtime can print it back.\n\nRe-run with --rotate if that is what you mean.\n`);
|
|
161
|
+
return EXIT_OK;
|
|
162
|
+
}
|
|
163
|
+
if (rotating) {
|
|
164
|
+
streams.out(`ROTATING. The new key is ADDED to audit.checkpoint_keys and no key is removed:\nretiring one that has signed a checkpoint would de-verify the range it signed,\nwhich is why this verb refuses it (--retire tells you which seqs). The private\nhalf under ${CHECKPOINT_KEY_CREDENTIAL} is replaced, so signatures from here on\nuse the new key.\n\n`);
|
|
165
|
+
if (!context.prompter.confirm("mint a new checkpoint key and replace the stored private half?")) {
|
|
166
|
+
streams.out("aborted: nothing was minted, stored, or printed\n");
|
|
167
|
+
return EXIT_OK;
|
|
168
|
+
}
|
|
169
|
+
}
|
|
170
|
+
// The passphrase, from the SHELL environment under the policy's name. Never
|
|
171
|
+
// from `.approval/env` directly: SPEC.md §11.1 invariant 7.
|
|
172
|
+
const variable = passphraseEnvFor(context.load);
|
|
173
|
+
const passphrase = passphraseFrom(variable, deps.env ?? process.env);
|
|
174
|
+
if (passphrase === null) {
|
|
175
|
+
return usageError(streams, false, `${variable} is unset or empty: the vault passphrase is read from that environment variable and from nowhere else, and this verb mints nothing without it. No key was generated and no vault was created.\n\n${passphraseHint(variable, context.logPath)}`, SETUP_CHECKPOINT_HELP);
|
|
176
|
+
}
|
|
177
|
+
const pair = mintCheckpointKeypair();
|
|
178
|
+
const vaultPath = vaultPathFor(context.logPath);
|
|
179
|
+
const stored = setCredential(vaultPath, passphrase, CHECKPOINT_KEY_CREDENTIAL, pair.privateKey);
|
|
180
|
+
if (!stored.ok) {
|
|
181
|
+
streams.err(`${renderRefusal(style(), stored.code, stored.message)}\n`);
|
|
182
|
+
return stored.code === "vault-io" || stored.code === "vault-write-failed"
|
|
183
|
+
? EXIT_IO
|
|
184
|
+
: EXIT_INTEGRITY;
|
|
185
|
+
}
|
|
186
|
+
const keys = [...configured.publicKeys, pair.publicKey];
|
|
187
|
+
streams.out(`stored the private half in ${vaultPath} under ${CHECKPOINT_KEY_CREDENTIAL}\n fingerprint ${pair.fingerprint}\n it was not printed, and there is no verb in this CLI that prints it\n\n`);
|
|
188
|
+
streams.out(`THE KEY IS INERT UNTIL THE POLICY LISTS IT. A checkpoint signed by a key\naudit.checkpoint_keys does not carry is checkpoint-key-unknown, which is a\nrefusal. This verb does not edit an attested policy — an edited policy is\ninoperative until it is re-attested, and a wizard that edited one would be\nforging the sign-off. Add this block yourself, through the ceremony that\nattests it:\n\n${policyBlock(keys)}\n\n approval policy amend\n\n`);
|
|
189
|
+
streams.out(`Then set the cadence, if you want to be asked rather than to remember:\n\n audit:\n checkpoint_every: 24h\n\nWith a cadence set, the listener puts one \`CHECKPOINT DUE\` prompt in front of\nyou when one is owed — at most one outstanding, never a nag — and \`approval\ndoctor\`'s checkpoint row says how old the newest one is. A checkpoint that is\ndue is a warning at every layer and never a refusal.\n\n`);
|
|
190
|
+
streams.out(`IF YOU LOSE THIS KEY: mint another one with --rotate and add it to the list.\nLEAVE THE OLD PUBLIC KEY WHERE IT IS — every checkpoint it signed verifies\nagainst it and only against it, and removing it would refuse a range of a log\nnobody has touched. A lost key costs you future signatures, never past ones.\n`);
|
|
191
|
+
if (rotating) {
|
|
192
|
+
streams.out(`\nRotated: key ${short(pair.fingerprint)}… is new, and the ${String(configured.publicKeys.length)} key(s) already listed stay.\n`);
|
|
193
|
+
}
|
|
194
|
+
return EXIT_OK;
|
|
195
|
+
}
|
|
196
|
+
//# sourceMappingURL=setup-checkpoint.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"setup-checkpoint.js","sourceRoot":"","sources":["../../../src/cli/setup-checkpoint.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,275 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* What every `approval setup` subcommand shares (SPEC.md §5.2, §10.1; APRV-79).
|
|
3
|
+
*
|
|
4
|
+
* `setup` began as one file with four subcommands in it. APRV-78 added
|
|
5
|
+
* `setup adapter <name>` in a file of its own, and it had to reach back into
|
|
6
|
+
* `cli/setup.ts` for the front matter — which made a cycle: `setup.ts` imports
|
|
7
|
+
* the adapter verb to dispatch it, and the adapter verb imports `front`,
|
|
8
|
+
* `requireHuman` and `SetupDeps` back. ESM tolerates that until the day an
|
|
9
|
+
* initialisation order changes and a `const` at module scope is `undefined` in
|
|
10
|
+
* one direction only. APRV-79 adds a THIRD such file (`setup-channel.ts`), so
|
|
11
|
+
* the cycle is broken by extraction rather than tolerated a second time.
|
|
12
|
+
*
|
|
13
|
+
* The rule this file exists to enforce, asserted in `tests/layering.test.ts`:
|
|
14
|
+
*
|
|
15
|
+
* ```
|
|
16
|
+
* setup.ts ──┬─> setup-adapter.ts ──┐
|
|
17
|
+
* └─> setup-channel.ts ──┴─> setup-common.ts (and no arrow back)
|
|
18
|
+
* ```
|
|
19
|
+
*
|
|
20
|
+
* What lives here is what more than one of those three needs: the dependency
|
|
21
|
+
* bag, the keystore seam, the flag table, the front matter (`--help`, the paths,
|
|
22
|
+
* the policy, the terminal check), the human-only gate, the `.approval/env`
|
|
23
|
+
* refusal mapping, the service names, and the plaintext-literal offer. What does
|
|
24
|
+
* NOT live here is anything one subcommand alone uses: the chat picker is
|
|
25
|
+
* `setup-channel.ts`'s, the manifest hint generator is `setup-adapter.ts`'s, and
|
|
26
|
+
* the generated-secret path (`storeGeneratedSecret`) stays with `vault` and
|
|
27
|
+
* `sampling` in `setup.ts`.
|
|
28
|
+
*
|
|
29
|
+
* The reasoning for each decision this file encodes — why the token is never
|
|
30
|
+
* handled by this process, why a generated value may reach an argv and an
|
|
31
|
+
* operator's own may not, why every subcommand refuses a non-terminal stdin —
|
|
32
|
+
* is in `cli/setup.ts`'s module doc, which is the family's front page. It is not
|
|
33
|
+
* repeated here; this file is the mechanism.
|
|
34
|
+
*/
|
|
35
|
+
import { type EnvFileRefusal } from "../core/env-file.js";
|
|
36
|
+
import { type PolicyLoadResult } from "../core/policy-load.js";
|
|
37
|
+
import type { CredentialProvider } from "../adapters/contract.js";
|
|
38
|
+
import type { probeSmtp } from "../adapters/smtp.js";
|
|
39
|
+
import { type TelegramFetch } from "../channels/telegram.js";
|
|
40
|
+
import { type FlagKind } from "./args.js";
|
|
41
|
+
import type { Streams } from "./main.js";
|
|
42
|
+
import { type Prompter } from "./prompt.js";
|
|
43
|
+
/**
|
|
44
|
+
* The keystore item names, one per secret, SCOPED TO THIS INSTANCE (APRV-178).
|
|
45
|
+
*
|
|
46
|
+
* They were three fixed strings until a demo gate in another directory stored
|
|
47
|
+
* its bot token over the production gate's item, read the production token
|
|
48
|
+
* back, and had a human's approval tap consumed by the wrong listener. A
|
|
49
|
+
* keystore is machine-global and the filesystem scoping every other part of an
|
|
50
|
+
* instance has was simply missing here; `core/instance.ts` carries the whole
|
|
51
|
+
* reasoning and the shape of the suffix.
|
|
52
|
+
*
|
|
53
|
+
* Still not a flag. An operator reading `.approval/env` sees the service name
|
|
54
|
+
* in the file itself (`keychain:approval-tg-token-3f2a9c11`), so the name is
|
|
55
|
+
* discoverable, and a `--service-prefix` would add a way for two checkouts to
|
|
56
|
+
* disagree about which item is which — which is the bug, not the fix.
|
|
57
|
+
*/
|
|
58
|
+
export interface ServiceNames {
|
|
59
|
+
telegramToken: string;
|
|
60
|
+
vaultPassphrase: string;
|
|
61
|
+
samplingSecret: string;
|
|
62
|
+
}
|
|
63
|
+
/** The three item names the instance owning `logPath` reads and writes. */
|
|
64
|
+
export declare function servicesFor(logPath: string): ServiceNames;
|
|
65
|
+
/**
|
|
66
|
+
* The variable a sampling secret goes into when the policy names none. The
|
|
67
|
+
* value is stored either way; what the operator is then told to do is add the
|
|
68
|
+
* `audit.sampling_secret_env` line, because until the POLICY names a variable
|
|
69
|
+
* the sampler stays off (SPEC.md §5.2) and no amount of environment fixes that.
|
|
70
|
+
*/
|
|
71
|
+
export declare const DEFAULT_SAMPLING_ENV = "APPROVAL_SAMPLING_SECRET";
|
|
72
|
+
/** The long-poll `getUpdates` asks for, in seconds. */
|
|
73
|
+
export declare const POLL_TIMEOUT_SECONDS = 10;
|
|
74
|
+
/** doctor's probe timeout, for the calls that answer immediately. */
|
|
75
|
+
export declare const PROBE_TIMEOUT_MS = 10000;
|
|
76
|
+
/** The flags every subcommand accepts. One table, so none of them drifts. */
|
|
77
|
+
export declare const FLAGS: Record<string, FlagKind>;
|
|
78
|
+
/** Which credential store this machine has, as a closed set. */
|
|
79
|
+
export type KeystoreKind = "keychain" | "secret-service" | "none";
|
|
80
|
+
/** What a store attempt did. `viaArgv` is reported, never hidden. */
|
|
81
|
+
export type StoreOutcome = {
|
|
82
|
+
ok: true;
|
|
83
|
+
/**
|
|
84
|
+
* The value passed through the helper's argv rather than its stdin. True
|
|
85
|
+
* only on the generated-secret fallback path; see `cli/setup.ts`.
|
|
86
|
+
*/
|
|
87
|
+
viaArgv: boolean;
|
|
88
|
+
} | {
|
|
89
|
+
ok: false;
|
|
90
|
+
message: string;
|
|
91
|
+
};
|
|
92
|
+
/**
|
|
93
|
+
* The keystore operations `setup` needs, injectable for exactly the reason
|
|
94
|
+
* {@link defaultSourceRunner}'s seam exists: no test in this repository may
|
|
95
|
+
* touch a real Keychain or a real secret service, and the way to guarantee that
|
|
96
|
+
* is for the tests to hand over a fake rather than for the runtime to grow a
|
|
97
|
+
* test-only flag.
|
|
98
|
+
*/
|
|
99
|
+
export interface KeystoreRunner {
|
|
100
|
+
/** What is available here. Consulted once per run. */
|
|
101
|
+
kind(): KeystoreKind;
|
|
102
|
+
/**
|
|
103
|
+
* Store a value THIS PROCESS GENERATED. Prefers the helper's stdin; may fall
|
|
104
|
+
* back to its argv, and says which it did.
|
|
105
|
+
*/
|
|
106
|
+
storeGenerated(service: string, value: string): StoreOutcome;
|
|
107
|
+
/**
|
|
108
|
+
* Have the HELPER'S OWN no-echo prompt collect the value from the terminal.
|
|
109
|
+
* The value never enters this process. macOS and `secret-tool` both support
|
|
110
|
+
* this; there is no such thing on a machine with neither.
|
|
111
|
+
*/
|
|
112
|
+
storePrompted(service: string): StoreOutcome;
|
|
113
|
+
/** Read a stored value back. The value arrives on stdout, never in an argv. */
|
|
114
|
+
read(service: string): {
|
|
115
|
+
ok: true;
|
|
116
|
+
value: string;
|
|
117
|
+
} | {
|
|
118
|
+
ok: false;
|
|
119
|
+
message: string;
|
|
120
|
+
};
|
|
121
|
+
}
|
|
122
|
+
/** A thrown thing, as a sentence. */
|
|
123
|
+
export declare function detail(cause: unknown): string;
|
|
124
|
+
/** The real one. Nothing in the test suite constructs it. */
|
|
125
|
+
export declare const defaultKeystoreRunner: KeystoreRunner;
|
|
126
|
+
/** The `.approval/env` scheme a backend writes. */
|
|
127
|
+
export declare function schemeFor(kind: KeystoreKind, service: string): string | null;
|
|
128
|
+
/** The command an operator runs by hand to see that the item is really there. */
|
|
129
|
+
export declare function retrievalCommand(kind: KeystoreKind, service: string): string;
|
|
130
|
+
/** The command an operator runs by hand to STORE the item, with no value in it. */
|
|
131
|
+
export declare function storageCommand(kind: KeystoreKind, service: string): string;
|
|
132
|
+
/** Everything this verb reaches the world through. Defaults are the real ones. */
|
|
133
|
+
export interface SetupDeps {
|
|
134
|
+
prompter?: Prompter | null;
|
|
135
|
+
keystore?: KeystoreRunner;
|
|
136
|
+
fetch?: TelegramFetch;
|
|
137
|
+
apiBase?: string;
|
|
138
|
+
/** Overridable so a test can assert on a value it chose. */
|
|
139
|
+
generate?: () => string;
|
|
140
|
+
/**
|
|
141
|
+
* The `getUpdates` long poll, in seconds. Overridable for one reason: the
|
|
142
|
+
* "nobody messaged the bot" path polls three times, and a suite that spent
|
|
143
|
+
* thirty seconds proving a refusal is a suite people stop running. Not a
|
|
144
|
+
* flag — no operator has a reason to change it.
|
|
145
|
+
*/
|
|
146
|
+
pollTimeoutSeconds?: number;
|
|
147
|
+
/**
|
|
148
|
+
* The environment the passphrase is read from. `process.env` by default.
|
|
149
|
+
*
|
|
150
|
+
* A seam and not a back door: it is read through `passphraseFrom`, which is
|
|
151
|
+
* the same function `approval vault set` uses, and it never resolves
|
|
152
|
+
* `.approval/env` (§11.1 invariant 7). Injectable so a test can prove both
|
|
153
|
+
* the unset refusal and the happy path without mutating the suite's own
|
|
154
|
+
* environment, which is shared by every other test in the process.
|
|
155
|
+
*/
|
|
156
|
+
env?: NodeJS.ProcessEnv;
|
|
157
|
+
/**
|
|
158
|
+
* The SMTP probe `setup adapter email` verifies with. The real one by
|
|
159
|
+
* default; a test injects a wrapper so that the only TLS relaxation in this
|
|
160
|
+
* repository stays inside the test that needs it (`tests/smtp-mock.ts`'s
|
|
161
|
+
* self-signed fixture on 127.0.0.1).
|
|
162
|
+
*/
|
|
163
|
+
probe?: typeof probeSmtp;
|
|
164
|
+
/**
|
|
165
|
+
* The vault read `setup adapter email` probes a partial re-run through
|
|
166
|
+
* (APRV-99). The real {@link vaultCredentialProvider} by default — the same
|
|
167
|
+
* provider `approval adapter email` hands to `act` — and injectable for one
|
|
168
|
+
* reason: the fallback for a vault that will not open is unreachable
|
|
169
|
+
* otherwise, because the flow proved the passphrase at its preflight and the
|
|
170
|
+
* writes have already landed by the time verification runs.
|
|
171
|
+
*/
|
|
172
|
+
credentials?: CredentialProvider;
|
|
173
|
+
}
|
|
174
|
+
export declare function usageError(streams: Streams, json: boolean, message: string, helpText: string): number;
|
|
175
|
+
/**
|
|
176
|
+
* A refused PROMPT, as one line and no help page (APRV-90).
|
|
177
|
+
*
|
|
178
|
+
* The distinction this function exists to draw: {@link usageError} answers a
|
|
179
|
+
* mangled command line, so it names the shape that line should have had, which
|
|
180
|
+
* is the thing the operator got wrong. A prompt that was aborted or answered
|
|
181
|
+
* wrongly five times is not a command line at all — the operator was in a
|
|
182
|
+
* conversation, the question was on screen, and a usage block under it teaches
|
|
183
|
+
* nothing. Same exit code (the frozen table is unchanged), one line of output,
|
|
184
|
+
* and not even the `--help` pointer a usage error carries.
|
|
185
|
+
*/
|
|
186
|
+
export declare function promptRefusal(streams: Streams, message: string): number;
|
|
187
|
+
export declare function absolute(value: string, cwd: string): string;
|
|
188
|
+
export declare function refusalExitCode(refusal: EnvFileRefusal): number;
|
|
189
|
+
export declare function emitRefusal(streams: Streams, refusal: EnvFileRefusal): number;
|
|
190
|
+
export interface Context {
|
|
191
|
+
flags: Record<string, string | boolean>;
|
|
192
|
+
positionals: string[];
|
|
193
|
+
prompter: Prompter;
|
|
194
|
+
keystore: KeystoreRunner;
|
|
195
|
+
/**
|
|
196
|
+
* Which keystore this machine has. Named `backend` rather than `kind` because
|
|
197
|
+
* the outcome union around this context already discriminates on `kind`.
|
|
198
|
+
*/
|
|
199
|
+
backend: KeystoreKind;
|
|
200
|
+
load: PolicyLoadResult;
|
|
201
|
+
logPath: string;
|
|
202
|
+
envPath: string;
|
|
203
|
+
/** This instance's keystore item names (APRV-178). */
|
|
204
|
+
services: ServiceNames;
|
|
205
|
+
apiBase: string;
|
|
206
|
+
generate: () => string;
|
|
207
|
+
pollTimeoutSeconds: number;
|
|
208
|
+
}
|
|
209
|
+
export type FrontOutcome = {
|
|
210
|
+
kind: "handled";
|
|
211
|
+
code: number;
|
|
212
|
+
} | ({
|
|
213
|
+
kind: "run";
|
|
214
|
+
} & Context);
|
|
215
|
+
/**
|
|
216
|
+
* What a non-interactive hint needs: where the map lives, which keystore is
|
|
217
|
+
* present, and the variable NAMES the loaded policy resolves to. The hints
|
|
218
|
+
* must print the names the interactive path would write, or an operator on a
|
|
219
|
+
* renamed policy copies a line the runtime never reads.
|
|
220
|
+
*/
|
|
221
|
+
export interface HintContext {
|
|
222
|
+
envPath: string;
|
|
223
|
+
kind: KeystoreKind;
|
|
224
|
+
/**
|
|
225
|
+
* The instance's item names. A hint that printed the unscoped legacy name
|
|
226
|
+
* would teach the operator to create by hand exactly the shared item
|
|
227
|
+
* APRV-178 exists to stop.
|
|
228
|
+
*/
|
|
229
|
+
services: ServiceNames;
|
|
230
|
+
passphraseEnv: string;
|
|
231
|
+
samplingEnv: string;
|
|
232
|
+
tokenEnv: string;
|
|
233
|
+
chatEnv: string;
|
|
234
|
+
}
|
|
235
|
+
/** The policy's `audit.sampling_secret_env`, or `null`. */
|
|
236
|
+
export declare function samplingEnvName(load: PolicyLoadResult): string | null;
|
|
237
|
+
export declare function hintContextFor(load: PolicyLoadResult, envPath: string, kind: KeystoreKind, services: ServiceNames): HintContext;
|
|
238
|
+
/**
|
|
239
|
+
* `--help`, the paths, the policy, the terminal check.
|
|
240
|
+
*
|
|
241
|
+
* The terminal check has no `process.stdin.isTTY` in it, deliberately: the real
|
|
242
|
+
* prompter refuses to construct without one ({@link createPrompter}), so "there
|
|
243
|
+
* is no prompter" IS "there is no terminal", and a test that injects one has
|
|
244
|
+
* not bypassed a check that a CI job could also bypass — it has supplied the
|
|
245
|
+
* human's side of the conversation, which is the only thing a test can honestly
|
|
246
|
+
* do here.
|
|
247
|
+
*/
|
|
248
|
+
export declare function front(subcommand: string, argv: string[], streams: Streams, cwd: string, deps: SetupDeps, helpText: string, nonInteractiveHint: (context: HintContext) => string,
|
|
249
|
+
/**
|
|
250
|
+
* Flags this subcommand accepts on top of the shared table (APRV-110).
|
|
251
|
+
*
|
|
252
|
+
* `setup service` is the first subcommand whose subject is not a credential,
|
|
253
|
+
* so it needs words the other four have no use for (a platform, a unit label,
|
|
254
|
+
* a log directory). They are passed in rather than added to {@link FLAGS},
|
|
255
|
+
* because a flag every subcommand silently accepts is a flag an operator will
|
|
256
|
+
* eventually pass to the one that ignores it.
|
|
257
|
+
*/
|
|
258
|
+
extraFlags?: Record<string, FlagKind>): FrontOutcome;
|
|
259
|
+
/** The human-only rule, spelled exactly as `vault set` spells it. */
|
|
260
|
+
export declare function requireHuman(flags: Record<string, string | boolean>, streams: Streams, helpText: string, verb: string): {
|
|
261
|
+
ok: true;
|
|
262
|
+
actor: string;
|
|
263
|
+
} | {
|
|
264
|
+
ok: false;
|
|
265
|
+
code: number;
|
|
266
|
+
};
|
|
267
|
+
/**
|
|
268
|
+
* The plaintext-literal offer, for a machine with no keystore.
|
|
269
|
+
*
|
|
270
|
+
* An explicit typed `yes` — not `y`, not Enter — because the whole content of
|
|
271
|
+
* this question is that the operator understood it. The warning is worded to
|
|
272
|
+
* match what `approval env --check` will print at them on every run afterwards,
|
|
273
|
+
* so the two never read as different claims about the same file.
|
|
274
|
+
*/
|
|
275
|
+
export declare function offerLiteral(streams: Streams, prompter: Prompter, envPath: string, what: string): boolean;
|