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,313 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* The audit sampler (SPEC.md §5.2 `supervised_sample_rate`, §11 invariant 4).
|
|
3
|
+
*
|
|
4
|
+
* > "Sample selection MUST be reproducible by the operator and unpredictable to
|
|
5
|
+
* > agents. Implementations derive the selection value as HMAC-SHA-256 over the
|
|
6
|
+
* > event hash using an operator-held secret stored outside the repository and
|
|
7
|
+
* > outside any agent-readable path. Seeding from event content alone is
|
|
8
|
+
* > forbidden: the authoring agent controls that content and could search it
|
|
9
|
+
* > until its action falls outside the sample."
|
|
10
|
+
*
|
|
11
|
+
* This module is that derivation and nothing else. It reads no log, writes no
|
|
12
|
+
* log, and appends nothing; `core/audit.ts` decides *what* is eligible and
|
|
13
|
+
* `daemon/audit.ts` decides *when* to look.
|
|
14
|
+
*
|
|
15
|
+
* ## Why a keyed function rather than a hash of the record
|
|
16
|
+
*
|
|
17
|
+
* The event hash alone is a perfectly good uniform value, and using it would be
|
|
18
|
+
* a complete failure of the control. The party whose action is being sampled
|
|
19
|
+
* authors the content the hash covers: a summary, a cost estimate, an
|
|
20
|
+
* idempotency key. An agent that knows the mapping can grind its own payload
|
|
21
|
+
* until the resulting value lands outside the rate, and every action it cares
|
|
22
|
+
* about escapes review while the log still shows a sampler running at 10%. The
|
|
23
|
+
* secret is what makes the mapping unpredictable to the authoring party, and the
|
|
24
|
+
* hash is what makes it reproducible for the operator who holds the secret. Both
|
|
25
|
+
* properties are required; neither is optional.
|
|
26
|
+
*
|
|
27
|
+
* ## The secret never appears anywhere
|
|
28
|
+
*
|
|
29
|
+
* {@link resolveSampler} returns a closure over the secret, never the secret.
|
|
30
|
+
* Nothing in this module puts it in a message, a return value, an error, or a
|
|
31
|
+
* fixture, and {@link EnabledSampler.toJSON} pins that: a caller who serializes
|
|
32
|
+
* a sampler gets the rate and the *name* of the environment variable, which is
|
|
33
|
+
* exactly what the policy file already carries in the open.
|
|
34
|
+
*
|
|
35
|
+
* Determinism: given a secret, a rate, and a record hash the verdict is a pure
|
|
36
|
+
* function. No clock, no network, no cross-call state.
|
|
37
|
+
*/
|
|
38
|
+
import type { DeclaredAutonomy, PolicyLoadResult } from "./policy-load.js";
|
|
39
|
+
/**
|
|
40
|
+
* Why sampling is not running. Machine-readable and distinct (SPEC.md §11.1
|
|
41
|
+
* invariant 6), and a closed union because an operator's diagnostic branches on
|
|
42
|
+
* it: "you never configured this" and "your secret is missing from this
|
|
43
|
+
* process's environment" call for different actions.
|
|
44
|
+
*/
|
|
45
|
+
export declare const SAMPLER_DISABLED_REASONS: readonly [
|
|
46
|
+
/** The policy could not be loaded, so it declares no audit configuration. */
|
|
47
|
+
"policy-unreadable",
|
|
48
|
+
/** The policy carries no `audit.supervised_sample_rate`. */
|
|
49
|
+
"rate-absent",
|
|
50
|
+
/** The rate is exactly 0: the operator asked for no sampling. */
|
|
51
|
+
"rate-zero",
|
|
52
|
+
/** The rate is present but not a usable proportion (negative, NaN, ∞). */
|
|
53
|
+
"rate-invalid",
|
|
54
|
+
/** The policy carries no `audit.sampling_secret_env`, so no secret is named. */
|
|
55
|
+
"secret-env-unnamed",
|
|
56
|
+
/** The named environment variable is unset or empty in this process. */
|
|
57
|
+
"secret-unset"];
|
|
58
|
+
export type SamplerDisabledReason = (typeof SAMPLER_DISABLED_REASONS)[number];
|
|
59
|
+
/**
|
|
60
|
+
* The rate in force for one action class, and where it came from (APRV-183).
|
|
61
|
+
*
|
|
62
|
+
* `source` is the honest part. `"class"` means the winning rule declared a
|
|
63
|
+
* `retro_rate`; `"global"` means it did not and `audit.supervised_sample_rate`
|
|
64
|
+
* applies; `"none"` means neither exists, so nothing in this class is sampled
|
|
65
|
+
* and `rate` is `null`. A reader that prints a rate without its source cannot
|
|
66
|
+
* tell an operator whether editing the class rule or the global key is what
|
|
67
|
+
* changes the number.
|
|
68
|
+
*/
|
|
69
|
+
export interface EffectiveRetroRate {
|
|
70
|
+
rate: number | null;
|
|
71
|
+
source: "class" | "global" | "none";
|
|
72
|
+
/** The winning rule's pattern, when a rule matched. */
|
|
73
|
+
pattern: string | null;
|
|
74
|
+
}
|
|
75
|
+
/** A sampler that will select. The secret is closed over and never exposed. */
|
|
76
|
+
export interface EnabledSampler {
|
|
77
|
+
enabled: true;
|
|
78
|
+
/**
|
|
79
|
+
* `audit.supervised_sample_rate`, clamped to (0, 1] — the FALLBACK rate
|
|
80
|
+
* (amended, APRV-183).
|
|
81
|
+
*
|
|
82
|
+
* `null` when the policy declares no usable global rate and at least one class
|
|
83
|
+
* declares a `retro_rate` of its own: the sampler is running, and it is
|
|
84
|
+
* running for those classes only. {@link EnabledSampler.fallbackReason} says
|
|
85
|
+
* why there is no fallback.
|
|
86
|
+
*/
|
|
87
|
+
rate: number | null;
|
|
88
|
+
/**
|
|
89
|
+
* Why there is no global fallback rate, or `null` when there is one. The same
|
|
90
|
+
* machine-readable vocabulary a disabled sampler uses, because it is the same
|
|
91
|
+
* fact about the same key.
|
|
92
|
+
*/
|
|
93
|
+
fallbackReason: SamplerDisabledReason | null;
|
|
94
|
+
/** The NAME of the environment variable the secret was read from. */
|
|
95
|
+
secretEnv: string;
|
|
96
|
+
/**
|
|
97
|
+
* Does the event with this record hash fall in the sample at the GLOBAL rate?
|
|
98
|
+
*
|
|
99
|
+
* `eventHash` is the subject record's `hash` field: the 64-hex digest the
|
|
100
|
+
* chain already carries, which is stable, unique per record, and the one
|
|
101
|
+
* identifier a reproducing operator can name without re-deriving anything.
|
|
102
|
+
*
|
|
103
|
+
* Prefer {@link EnabledSampler.selectsFor} wherever the action's class is
|
|
104
|
+
* known: a class declaring its own `retro_rate` is not sampled at this rate.
|
|
105
|
+
*/
|
|
106
|
+
selects(eventHash: string): boolean;
|
|
107
|
+
/** The rate governing this action class, and where it came from (APRV-183). */
|
|
108
|
+
rateFor(actionClass: string): EffectiveRetroRate;
|
|
109
|
+
/**
|
|
110
|
+
* Does the event with this record hash fall in the sample for its class?
|
|
111
|
+
*
|
|
112
|
+
* The same HMAC over the same event hash under the same secret; only the rate
|
|
113
|
+
* it is compared against differs. There is one mechanism here, and a class
|
|
114
|
+
* rate moves the threshold rather than introducing a second draw.
|
|
115
|
+
*/
|
|
116
|
+
selectsFor(actionClass: string, eventHash: string): boolean;
|
|
117
|
+
/**
|
|
118
|
+
* Serializes to the rates and the variable NAME. Never to the secret.
|
|
119
|
+
*
|
|
120
|
+
* `class_rates` maps a class pattern to the `retro_rate` it declared. Both
|
|
121
|
+
* halves are bytes the policy file already carries in the open.
|
|
122
|
+
*/
|
|
123
|
+
toJSON(): {
|
|
124
|
+
enabled: true;
|
|
125
|
+
rate: number | null;
|
|
126
|
+
secret_env: string;
|
|
127
|
+
class_rates: Record<string, number>;
|
|
128
|
+
};
|
|
129
|
+
}
|
|
130
|
+
/** A sampler that will not select, and the reason it will not. */
|
|
131
|
+
export interface DisabledSampler {
|
|
132
|
+
enabled: false;
|
|
133
|
+
reason: SamplerDisabledReason;
|
|
134
|
+
message: string;
|
|
135
|
+
/** The variable name the policy declared, when it declared one. */
|
|
136
|
+
secretEnv: string | null;
|
|
137
|
+
/** The rate the policy declared, when it declared a usable one. */
|
|
138
|
+
rate: number | null;
|
|
139
|
+
}
|
|
140
|
+
export type Sampler = EnabledSampler | DisabledSampler;
|
|
141
|
+
/**
|
|
142
|
+
* The uniform selection value for one record hash under one secret, in [0, 1).
|
|
143
|
+
*
|
|
144
|
+
* HMAC-SHA-256(secret, eventHash) is taken as the PRF output; the top 53 bits of
|
|
145
|
+
* its first eight bytes (big-endian) are divided by 2^53. Two properties are
|
|
146
|
+
* being bought:
|
|
147
|
+
*
|
|
148
|
+
* - **Exactness.** A 53-bit integer is representable in an IEEE-754 double
|
|
149
|
+
* without rounding, and 2^53 is a power of two, so the division is exact.
|
|
150
|
+
* Every one of the 2^53 possible outputs is a distinct double, uniformly
|
|
151
|
+
* spaced, and no two distinct MAC prefixes collide through rounding into a
|
|
152
|
+
* value that a comparison against the rate would treat differently than the
|
|
153
|
+
* arithmetic says. Using all 64 bits would round, quietly biasing the extremes.
|
|
154
|
+
* - **Uniformity.** HMAC-SHA-256 is a PRF, so its output bits are
|
|
155
|
+
* indistinguishable from uniform without the key; taking a fixed 53-bit slice
|
|
156
|
+
* preserves that. The result is < 1 always, which is what makes rate 1 select
|
|
157
|
+
* everything and rate 0 select nothing without either being a special case.
|
|
158
|
+
*
|
|
159
|
+
* Pure. The secret is a parameter and is never stored, logged, or returned.
|
|
160
|
+
*/
|
|
161
|
+
export declare function selectionValue(secret: string, eventHash: string): number;
|
|
162
|
+
/**
|
|
163
|
+
* Is this record in the sample at this rate?
|
|
164
|
+
*
|
|
165
|
+
* Selected iff `selectionValue < rate`. Rate 0 selects nothing (no value is
|
|
166
|
+
* below 0) and rate 1 selects everything (every value is below 1); both fall out
|
|
167
|
+
* of the arithmetic rather than being branches that could be got wrong.
|
|
168
|
+
*/
|
|
169
|
+
export declare function isSampled(secret: string, eventHash: string, rate: number): boolean;
|
|
170
|
+
/**
|
|
171
|
+
* Build the sampler in force for a policy and an environment.
|
|
172
|
+
*
|
|
173
|
+
* ## Why a missing secret disables sampling instead of failing closed
|
|
174
|
+
*
|
|
175
|
+
* Everything else in this runtime fails closed: an unparseable policy means
|
|
176
|
+
* `manual`, an unknown class takes `defaults.autonomy`, ambiguity resolves to
|
|
177
|
+
* the stricter path. Sampling is the one place where the strict-by-default
|
|
178
|
+
* reading is unavailable, and the reason is structural rather than a matter of
|
|
179
|
+
* taste.
|
|
180
|
+
*
|
|
181
|
+
* The strict reading of "no secret" would be "sample everything", and that
|
|
182
|
+
* requires a selection function. There is exactly one thing available to seed it
|
|
183
|
+
* with — the event content — and SPEC.md §5.2 forbids that seed by name, because
|
|
184
|
+
* a content-seeded sample is one the authoring agent can steer. So the strict
|
|
185
|
+
* option is not "sample everything with an invented seed"; it is a control that
|
|
186
|
+
* *looks* like it is running while being steerable by the party under oversight,
|
|
187
|
+
* which is worse than no control at all. Global invariant 4 (self-reported
|
|
188
|
+
* fields never reduce scrutiny) is the property that would be broken, and it is
|
|
189
|
+
* broken silently.
|
|
190
|
+
*
|
|
191
|
+
* What makes this acceptable, and what bounds it:
|
|
192
|
+
*
|
|
193
|
+
* - sampling is **retrospective**. It escalates an action that already executed
|
|
194
|
+
* for after-the-fact human review. Nothing is authorized by the sampler, no
|
|
195
|
+
* budget is spent by it, and no gate consults it. An unconfigured sampler
|
|
196
|
+
* costs review coverage, never authorization;
|
|
197
|
+
* - the disablement is **stated, not silent**. The reason is machine-readable
|
|
198
|
+
* (`secret-unset`, `secret-env-unnamed`), the daemon reports it, and
|
|
199
|
+
* `approval status` can surface it. An operator is told the control is off;
|
|
200
|
+
* - the alternative is **worse and undetectable**. A steerable sample reads
|
|
201
|
+
* identically to an honest one in the log.
|
|
202
|
+
*
|
|
203
|
+
* HUMAN REVIEW: this is the one deliberate fail-open in the runtime. It is
|
|
204
|
+
* written down here rather than assumed, and if the human's judgment is that an
|
|
205
|
+
* unconfigured sampler should instead stop the daemon (fail loud rather than
|
|
206
|
+
* fail open), that is a one-line change here and a SPEC.md §5.2 amendment.
|
|
207
|
+
*/
|
|
208
|
+
export declare function resolveSampler(load: PolicyLoadResult, env?: NodeJS.ProcessEnv): Sampler;
|
|
209
|
+
/**
|
|
210
|
+
* Every class rule that declares a usable `retro_rate`, keyed by pattern
|
|
211
|
+
* (APRV-183).
|
|
212
|
+
*
|
|
213
|
+
* Pure, and deliberately ignorant of matching: this answers "what did the policy
|
|
214
|
+
* write" for reporting and for the enabled/disabled decision above. Which rule
|
|
215
|
+
* governs a given action is {@link resolve}'s question, and
|
|
216
|
+
* {@link EnabledSampler.rateFor} asks it there so that specificity, strictness
|
|
217
|
+
* and the irreversibility floor are honoured by one implementation rather than
|
|
218
|
+
* two.
|
|
219
|
+
*/
|
|
220
|
+
export declare function classRetroRates(load: PolicyLoadResult): Map<string, number>;
|
|
221
|
+
/** One line of the per-class sampling report (APRV-183). */
|
|
222
|
+
export interface ClassSamplingEntry {
|
|
223
|
+
/** The class rule's pattern, as the policy wrote it. */
|
|
224
|
+
pattern: string;
|
|
225
|
+
/** The level the rule declared, so a reader can see why it is in this list. */
|
|
226
|
+
autonomy: DeclaredAutonomy;
|
|
227
|
+
/** The rate in force for the class, or `null` when nothing samples it. */
|
|
228
|
+
rate: number | null;
|
|
229
|
+
source: "class" | "global" | "none";
|
|
230
|
+
enabled: boolean;
|
|
231
|
+
/** Why this class is not sampled, or `null` when it is. */
|
|
232
|
+
reason: SamplerDisabledReason | null;
|
|
233
|
+
}
|
|
234
|
+
/**
|
|
235
|
+
* What each supervised class rule is sampled at, and which are not sampled at
|
|
236
|
+
* all (APRV-183).
|
|
237
|
+
*
|
|
238
|
+
* The disabled-sampler honesty rule of SPEC.md §5.2 is per class once the rate
|
|
239
|
+
* is per class: an operator told "sampling: on, rate 0.1" while three of their
|
|
240
|
+
* four supervised classes declare nothing and the global key is absent has been
|
|
241
|
+
* told something true about the sampler and nothing true about their coverage.
|
|
242
|
+
* Every entry carries the same machine-readable reason vocabulary the sampler
|
|
243
|
+
* itself uses, so a diagnostic branches on one union.
|
|
244
|
+
*
|
|
245
|
+
* Pure. Reports on the rules a policy WROTE, in pattern order, so the output is
|
|
246
|
+
* byte-stable across runs and independent of YAML key order.
|
|
247
|
+
*/
|
|
248
|
+
export declare function classSampling(load: PolicyLoadResult, sampler: Sampler): ClassSamplingEntry[];
|
|
249
|
+
/**
|
|
250
|
+
* The selection algorithm recorded for a live decision, so a reproducing
|
|
251
|
+
* operator knows what to recompute and over which input.
|
|
252
|
+
*
|
|
253
|
+
* Distinct from the retrospective sampler's `hmac-sha256/event-hash` because the
|
|
254
|
+
* INPUT is different, and deliberately so. Retrospective sampling happens after
|
|
255
|
+
* an execution exists, so it can key on that record's chain hash. A live
|
|
256
|
+
* decision happens at intake, before any record exists, so it keys on the one
|
|
257
|
+
* identifier that already binds the action to its bytes: the `payload_hash` the
|
|
258
|
+
* registration declared.
|
|
259
|
+
*
|
|
260
|
+
* That choice is what buys the no-re-roll property. The payload hash is a pure
|
|
261
|
+
* function of the payload, so an action retried with the same bytes gets the
|
|
262
|
+
* same verdict every time, on every machine, forever. An agent that dislikes its
|
|
263
|
+
* luck cannot retry until the verdict changes; it can only change the bytes,
|
|
264
|
+
* which changes the action.
|
|
265
|
+
*/
|
|
266
|
+
export declare const LIVE_SELECTION = "hmac-sha256/payload-hash";
|
|
267
|
+
/** Why live selection could not be derived from a secret. */
|
|
268
|
+
export declare const LIVE_SELECTOR_UNAVAILABLE_REASONS: readonly [
|
|
269
|
+
/** The policy could not be loaded, so it names no sampling secret. */
|
|
270
|
+
"policy-unreadable",
|
|
271
|
+
/** The policy carries no `audit.sampling_secret_env`. */
|
|
272
|
+
"secret-env-unnamed",
|
|
273
|
+
/** The named environment variable is unset or empty in this process. */
|
|
274
|
+
"secret-unset"];
|
|
275
|
+
export type LiveSelectorUnavailableReason = (typeof LIVE_SELECTOR_UNAVAILABLE_REASONS)[number];
|
|
276
|
+
/** A live selector that can answer, or one that cannot and says why. */
|
|
277
|
+
export type LiveSelector = {
|
|
278
|
+
available: true;
|
|
279
|
+
/** The NAME of the environment variable the secret was read from. */
|
|
280
|
+
secretEnv: string;
|
|
281
|
+
/** Is this payload hash in the live fraction at this rate? */
|
|
282
|
+
selects(payloadHash: string, rate: number): boolean;
|
|
283
|
+
} | {
|
|
284
|
+
available: false;
|
|
285
|
+
reason: LiveSelectorUnavailableReason;
|
|
286
|
+
message: string;
|
|
287
|
+
secretEnv: string | null;
|
|
288
|
+
};
|
|
289
|
+
/**
|
|
290
|
+
* Build the live selector for a policy and an environment.
|
|
291
|
+
*
|
|
292
|
+
* ## Why this one FAILS CLOSED where the retrospective sampler fails open
|
|
293
|
+
*
|
|
294
|
+
* {@link resolveSampler} above documents the runtime's single deliberate
|
|
295
|
+
* fail-open: with no secret, retrospective sampling stops rather than sampling
|
|
296
|
+
* everything, because "sample everything" would need a selection function and
|
|
297
|
+
* the only available seed — event content — is one the authoring agent controls.
|
|
298
|
+
* A control that looks like it is running while the party under oversight steers
|
|
299
|
+
* it is worse than no control.
|
|
300
|
+
*
|
|
301
|
+
* None of that reasoning transfers here, because the strict reading of a live
|
|
302
|
+
* class needs no selection function at all. "Gate every action in this class" is
|
|
303
|
+
* fully specified, needs no seed, and is exactly `manual`. So an unavailable
|
|
304
|
+
* secret makes every live action gated: the caller ({@link
|
|
305
|
+
* import("./gate.js").request}) reads `available: false` as "selected", and a
|
|
306
|
+
* class an operator asked to sample at 1% is gated at 100% until the secret is
|
|
307
|
+
* exported. That is loud, safe, self-repairing, and the same direction every
|
|
308
|
+
* other refusal in this runtime takes.
|
|
309
|
+
*
|
|
310
|
+
* The secret is closed over and never returned, logged, or serialized, exactly
|
|
311
|
+
* as in {@link resolveSampler}.
|
|
312
|
+
*/
|
|
313
|
+
export declare function resolveLiveSelector(load: PolicyLoadResult, env?: NodeJS.ProcessEnv): LiveSelector;
|