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,468 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* The CLI channel (APRV-23) — the zero-config channel, written against the
|
|
3
|
+
* contract in `channels/contract.ts` and nothing else.
|
|
4
|
+
*
|
|
5
|
+
* It is the first implementation of {@link TestableChannel}, and it exists as
|
|
6
|
+
* much to prove the contract is implementable as to be useful: a terminal has no
|
|
7
|
+
* stylesheet, no buttons and no webhook, so everything the contract asks a
|
|
8
|
+
* channel to do has to be done in plain text. If SPEC.md §9's display rule
|
|
9
|
+
* cannot survive a channel this poor, it cannot survive a rich one either.
|
|
10
|
+
*
|
|
11
|
+
* ## The rendering convention (SPEC.md §9)
|
|
12
|
+
*
|
|
13
|
+
* Every line carries a marker in the first column, and the marker is the first
|
|
14
|
+
* thing a reader sees:
|
|
15
|
+
*
|
|
16
|
+
* ```
|
|
17
|
+
* [computed] class communicate.email.external (log)
|
|
18
|
+
* [claimed] summary chase invoice 41 (agent:drafter)
|
|
19
|
+
* ```
|
|
20
|
+
*
|
|
21
|
+
* `[computed]` means the runtime derived the value — from the verified log, the
|
|
22
|
+
* attested policy, the budget evaluator, the payload bytes, or arithmetic on the
|
|
23
|
+
* display instant — and the parenthetical names *which* derivation. `[claimed]`
|
|
24
|
+
* means the party under oversight wrote it, and the parenthetical names that
|
|
25
|
+
* party. The marker is not decoration: it is the difference between "the runtime
|
|
26
|
+
* says this is a manual action" and "an agent says this costs two cents", and a
|
|
27
|
+
* channel that gave them the same weight would be a conformance failure rather
|
|
28
|
+
* than a styling preference.
|
|
29
|
+
*
|
|
30
|
+
* Claimed lines are additionally indented under a `claimed by …` heading, so the
|
|
31
|
+
* split survives a terminal that eats no colour and a reader who skims. There is
|
|
32
|
+
* no bold, no colour and no unicode box drawing anywhere in this file — a marker
|
|
33
|
+
* a `less`, a pipe, a CI log or a screen reader can lose is a marker that was
|
|
34
|
+
* never there.
|
|
35
|
+
*
|
|
36
|
+
* ## The full payload (SPEC.md §10.4)
|
|
37
|
+
*
|
|
38
|
+
* For a manual action the payload is printed verbatim inside an explicitly
|
|
39
|
+
* delimited block:
|
|
40
|
+
*
|
|
41
|
+
* ```
|
|
42
|
+
* --- BEGIN FULL PAYLOAD (bound sha256 <hash>) ---
|
|
43
|
+
* { … }
|
|
44
|
+
* --- END FULL PAYLOAD ---
|
|
45
|
+
* ```
|
|
46
|
+
*
|
|
47
|
+
* The block is never mixed with the claimed summary, and the summary is never
|
|
48
|
+
* printed inside it. `channels/tagging.ts` has already checked those bytes
|
|
49
|
+
* against the recorded binding, so what is inside the delimiters is what the
|
|
50
|
+
* execution token will spend.
|
|
51
|
+
*
|
|
52
|
+
* ## What this file does NOT do
|
|
53
|
+
*
|
|
54
|
+
* It does not read the log, write the log, decide anything, or hold a token.
|
|
55
|
+
* The decision handler is registered by the runtime (`cli/channel.ts`) and its
|
|
56
|
+
* only job is to call {@link recordChannelDecision}. The prompt loop collects a
|
|
57
|
+
* gesture and hands it over; whether that gesture becomes an event is the gate's
|
|
58
|
+
* answer, not this file's.
|
|
59
|
+
*
|
|
60
|
+
* It also does not dispatch (APRV-55). This channel is **one-shot by design**:
|
|
61
|
+
* the runtime derives the queue once, renders it, collects decisions on the
|
|
62
|
+
* requests in front of the operator, and the process ends. There is no cycle in
|
|
63
|
+
* which a newly appended request could arrive, so there is nothing to push —
|
|
64
|
+
* the operator running the verb again is the refresh. Only the long-lived push
|
|
65
|
+
* channel (Telegram) needs a per-cycle send; the long-lived pull channel (web)
|
|
66
|
+
* re-derives per page view.
|
|
67
|
+
*/
|
|
68
|
+
import { createInterface } from "node:readline";
|
|
69
|
+
import { CLI_PROMPT_LAYOUT, isPromptRow } from "../core/prompt-layout.js";
|
|
70
|
+
import { GLOSS_UNVERIFIED_SUFFIX } from "./contract.js";
|
|
71
|
+
import { payloadRegionText } from "./payload-view.js";
|
|
72
|
+
/** The marker prefixes. Exported because the help text and the tests pin them. */
|
|
73
|
+
export const COMPUTED_MARKER = "[computed]";
|
|
74
|
+
export const CLAIMED_MARKER = "[claimed]";
|
|
75
|
+
/** The full-payload delimiters (SPEC.md §10.4). Pinned by tests. */
|
|
76
|
+
export const PAYLOAD_BEGIN = "--- BEGIN FULL PAYLOAD";
|
|
77
|
+
export const PAYLOAD_END = "--- END FULL PAYLOAD ---";
|
|
78
|
+
/** One line of the legend, printed above every delivery. */
|
|
79
|
+
export const RENDERING_LEGEND = [
|
|
80
|
+
`${COMPUTED_MARKER} derived by the runtime (verified log, attested policy, budget evaluator,`,
|
|
81
|
+
" payload bytes, clock); the parenthetical names the derivation.",
|
|
82
|
+
`${CLAIMED_MARKER} written by the party under oversight; the parenthetical names the author.`,
|
|
83
|
+
" A claim may raise your scrutiny. It is never evidence.",
|
|
84
|
+
].join("\n");
|
|
85
|
+
// ---------------------------------------------------------------------------
|
|
86
|
+
// Value formatting
|
|
87
|
+
// ---------------------------------------------------------------------------
|
|
88
|
+
function formatDuration(ms) {
|
|
89
|
+
const seconds = Math.max(0, Math.round(ms / 1000));
|
|
90
|
+
const minutes = Math.floor(seconds / 60);
|
|
91
|
+
const hours = Math.floor(minutes / 60);
|
|
92
|
+
if (hours > 0)
|
|
93
|
+
return `${hours}h ${minutes % 60}m left`;
|
|
94
|
+
if (minutes > 0)
|
|
95
|
+
return `${minutes}m ${seconds % 60}s left`;
|
|
96
|
+
return `${seconds}s left`;
|
|
97
|
+
}
|
|
98
|
+
function formatBudgets(verdicts) {
|
|
99
|
+
if (verdicts.length === 0)
|
|
100
|
+
return "none configured";
|
|
101
|
+
return verdicts
|
|
102
|
+
.map((verdict) => `${verdict.limit} ${verdict.pass ? "pass" : "FAIL"} (consumed ${verdict.consumed}, requested ${verdict.requested}, remaining ${verdict.remaining}, ${verdict.window})`)
|
|
103
|
+
.join("; ");
|
|
104
|
+
}
|
|
105
|
+
/**
|
|
106
|
+
* A field's value as one line of text.
|
|
107
|
+
*
|
|
108
|
+
* Deliberately total: an unknown shape is JSON-stringified rather than dropped,
|
|
109
|
+
* because a field the runtime tagged and the channel silently omitted is a field
|
|
110
|
+
* the approver did not see.
|
|
111
|
+
*/
|
|
112
|
+
function formatValue(field, value) {
|
|
113
|
+
if (value === null || value === undefined)
|
|
114
|
+
return "(none)";
|
|
115
|
+
// APRV-197. The one line in the rendering that NO party stands behind — not
|
|
116
|
+
// the runtime, not even the requesting agent — says so on the line itself,
|
|
117
|
+
// in the same words Telegram has used since APRV-144. The `(model:haiku)`
|
|
118
|
+
// attribution at the end of the line is true but small, and a reader skimming
|
|
119
|
+
// a terminal reads the sentence, not the parenthetical.
|
|
120
|
+
if (field === "gloss" && typeof value === "string") {
|
|
121
|
+
return `${value} ${GLOSS_UNVERIFIED_SUFFIX}`;
|
|
122
|
+
}
|
|
123
|
+
if (field === "ttl_remaining_ms" && typeof value === "number")
|
|
124
|
+
return formatDuration(value);
|
|
125
|
+
if (field === "budgets" && Array.isArray(value))
|
|
126
|
+
return formatBudgets(value);
|
|
127
|
+
if (field === "attestation" && typeof value === "object") {
|
|
128
|
+
const status = value.status;
|
|
129
|
+
const seq = value.seq;
|
|
130
|
+
return seq === undefined ? String(status) : `${String(status)} (policy.updated seq ${String(seq)})`;
|
|
131
|
+
}
|
|
132
|
+
if (field === "chain" && typeof value === "object") {
|
|
133
|
+
const chain = value;
|
|
134
|
+
return `seq ${String(chain.seq)} hash ${String(chain.hash)} (log head seq ${String(chain.head_seq)})`;
|
|
135
|
+
}
|
|
136
|
+
if (field === "est_cost_usd" && typeof value === "number")
|
|
137
|
+
return `$${value.toFixed(2)}`;
|
|
138
|
+
if (typeof value === "string" || typeof value === "number" || typeof value === "boolean") {
|
|
139
|
+
return String(value);
|
|
140
|
+
}
|
|
141
|
+
return JSON.stringify(value) ?? String(value);
|
|
142
|
+
}
|
|
143
|
+
/** The parenthetical: which derivation, or which author. */
|
|
144
|
+
function attribution(field) {
|
|
145
|
+
return field.kind === "computed" ? field.source : field.author;
|
|
146
|
+
}
|
|
147
|
+
/**
|
|
148
|
+
* The order fields are presented in, and which of them render (APRV-218).
|
|
149
|
+
*
|
|
150
|
+
* The default is {@link CLI_PROMPT_LAYOUT}: computed identity and authority
|
|
151
|
+
* first, claimed persuasion last, every row on — a reader who stops halfway has
|
|
152
|
+
* read the runtime's answer and not the agent's pitch, and a terminal a human
|
|
153
|
+
* asked for by typing a verb is not the place to economise on lines the way a
|
|
154
|
+
* push notification is. `channels.cli.prompt` in APPROVAL.md replaces it.
|
|
155
|
+
*
|
|
156
|
+
* Two properties survive any layout. Fields absent from a request are skipped;
|
|
157
|
+
* and members the layout does not NAME are appended rather than dropped, so a
|
|
158
|
+
* widened {@link ChannelRequest} cannot silently lose one to a policy written
|
|
159
|
+
* before that field existed. `fullPayload` is one of those appended members: it
|
|
160
|
+
* is not a row, it has its own delimited region below, and no layout key
|
|
161
|
+
* reaches it.
|
|
162
|
+
*/
|
|
163
|
+
function orderedFields(request, layout) {
|
|
164
|
+
const members = Object.keys(request);
|
|
165
|
+
const ordered = layout.order.filter((name) => layout.visibility[name] !== "off" && members.includes(name));
|
|
166
|
+
for (const name of members) {
|
|
167
|
+
if (!ordered.includes(name) && !isPromptRow(name))
|
|
168
|
+
ordered.push(name);
|
|
169
|
+
}
|
|
170
|
+
return ordered;
|
|
171
|
+
}
|
|
172
|
+
// ---------------------------------------------------------------------------
|
|
173
|
+
// Line reading
|
|
174
|
+
// ---------------------------------------------------------------------------
|
|
175
|
+
/**
|
|
176
|
+
* Sequential line reads over one `readline` interface.
|
|
177
|
+
*
|
|
178
|
+
* One interface per channel, not one per question: a fresh interface per prompt
|
|
179
|
+
* would race for buffered bytes on a piped stdin and lose lines, which on this
|
|
180
|
+
* path means losing a human's answer. `next()` resolves `null` at end of input,
|
|
181
|
+
* which every caller treats as "no gesture" — never as a default answer.
|
|
182
|
+
*/
|
|
183
|
+
class LineReader {
|
|
184
|
+
rl;
|
|
185
|
+
pending = [];
|
|
186
|
+
waiting = [];
|
|
187
|
+
closed = false;
|
|
188
|
+
constructor(input) {
|
|
189
|
+
this.rl = createInterface({ input, terminal: false });
|
|
190
|
+
this.rl.on("line", (line) => {
|
|
191
|
+
const waiter = this.waiting.shift();
|
|
192
|
+
if (waiter === undefined)
|
|
193
|
+
this.pending.push(line);
|
|
194
|
+
else
|
|
195
|
+
waiter(line);
|
|
196
|
+
});
|
|
197
|
+
this.rl.on("close", () => {
|
|
198
|
+
this.closed = true;
|
|
199
|
+
while (this.waiting.length > 0)
|
|
200
|
+
this.waiting.shift()?.(null);
|
|
201
|
+
});
|
|
202
|
+
}
|
|
203
|
+
next() {
|
|
204
|
+
const buffered = this.pending.shift();
|
|
205
|
+
if (buffered !== undefined)
|
|
206
|
+
return Promise.resolve(buffered);
|
|
207
|
+
if (this.closed)
|
|
208
|
+
return Promise.resolve(null);
|
|
209
|
+
return new Promise((resolve) => {
|
|
210
|
+
this.waiting.push(resolve);
|
|
211
|
+
});
|
|
212
|
+
}
|
|
213
|
+
close() {
|
|
214
|
+
this.rl.close();
|
|
215
|
+
}
|
|
216
|
+
}
|
|
217
|
+
export class CliChannel {
|
|
218
|
+
name;
|
|
219
|
+
output;
|
|
220
|
+
input;
|
|
221
|
+
handler = null;
|
|
222
|
+
rendered = [];
|
|
223
|
+
reader = null;
|
|
224
|
+
counter = 0;
|
|
225
|
+
/** The policy's row layout for this channel (APRV-218). Pure input to the rendering. */
|
|
226
|
+
layout;
|
|
227
|
+
constructor(options = {}) {
|
|
228
|
+
this.name = options.name ?? "cli";
|
|
229
|
+
this.output = options.output ?? process.stdout;
|
|
230
|
+
this.input = options.input ?? process.stdin;
|
|
231
|
+
this.layout = options.layout ?? CLI_PROMPT_LAYOUT;
|
|
232
|
+
}
|
|
233
|
+
/**
|
|
234
|
+
* Present a request, or a batch, and return the delivery id.
|
|
235
|
+
*
|
|
236
|
+
* Writes to the output sink and nowhere else: no log, no state, no decision.
|
|
237
|
+
* A batch is rendered member by member — each member carries its own full
|
|
238
|
+
* payload, and folding one behind another is exactly what `channels/batch.ts`
|
|
239
|
+
* refuses upstream.
|
|
240
|
+
*/
|
|
241
|
+
notify(request) {
|
|
242
|
+
this.counter += 1;
|
|
243
|
+
const deliveryId = `cli-${this.counter}`;
|
|
244
|
+
const isBatch = "requests" in request;
|
|
245
|
+
const members = isBatch ? request.requests : [request];
|
|
246
|
+
this.output.write(`\n=== approval.md ${isBatch ? `batch ${deliveryId} (${members.length} request(s))` : `request ${deliveryId}`} ===\n${RENDERING_LEGEND}\n`);
|
|
247
|
+
this.rendered = members.map((member, index) => {
|
|
248
|
+
const entry = this.renderRequest(member, isBatch ? deliveryId : undefined);
|
|
249
|
+
this.output.write(textOf(member, entry, isBatch ? index + 1 : null, members.length));
|
|
250
|
+
return entry;
|
|
251
|
+
});
|
|
252
|
+
return deliveryId;
|
|
253
|
+
}
|
|
254
|
+
onDecision(handler) {
|
|
255
|
+
this.handler = handler;
|
|
256
|
+
}
|
|
257
|
+
health() {
|
|
258
|
+
return { ok: true };
|
|
259
|
+
}
|
|
260
|
+
lastRendered() {
|
|
261
|
+
return this.rendered;
|
|
262
|
+
}
|
|
263
|
+
/**
|
|
264
|
+
* Release the input interface. Safe to call when nothing was ever read.
|
|
265
|
+
*
|
|
266
|
+
* The source is paused as well as closed: a `readline` interface over
|
|
267
|
+
* `process.stdin` leaves the stream flowing, and a process that finished
|
|
268
|
+
* asking would sit there holding the event loop open.
|
|
269
|
+
*/
|
|
270
|
+
close() {
|
|
271
|
+
this.reader?.close();
|
|
272
|
+
this.reader = null;
|
|
273
|
+
this.input.pause?.();
|
|
274
|
+
}
|
|
275
|
+
/**
|
|
276
|
+
* The prompt loop: `g` grants, `r` rejects, `s` skips.
|
|
277
|
+
*
|
|
278
|
+
* A reject demands a note and re-asks until it gets one — a refusal an agent
|
|
279
|
+
* cannot read is a refusal it will retry. A grant's note is optional; there is
|
|
280
|
+
* nothing to explain about "yes, do the thing I was shown".
|
|
281
|
+
*
|
|
282
|
+
* The gesture is reported to the handler registered by the runtime, and the
|
|
283
|
+
* handler's {@link DecisionOutcome} is returned unchanged, refusals included.
|
|
284
|
+
* Nothing here inspects it, and nothing here retries: a gate refusal is an
|
|
285
|
+
* answer, and re-asking a human who already answered is how double-grants get
|
|
286
|
+
* made.
|
|
287
|
+
*/
|
|
288
|
+
async collectDecision(actionKey, deliveryId, options = {}) {
|
|
289
|
+
const handler = this.handler;
|
|
290
|
+
if (handler === null) {
|
|
291
|
+
throw new Error("no decision handler is registered on the cli channel; the runtime registers one before notify(), and a channel that recorded its own decision would be deciding rather than transporting (SPEC.md §10.3)");
|
|
292
|
+
}
|
|
293
|
+
for (;;) {
|
|
294
|
+
this.output.write(`\n${actionKey}\n g) grant r) reject s) skip > `);
|
|
295
|
+
const answer = (await this.readLine())?.trim().toLowerCase();
|
|
296
|
+
if (answer === undefined) {
|
|
297
|
+
this.output.write("\n(input ended; no decision was recorded)\n");
|
|
298
|
+
return { kind: "aborted" };
|
|
299
|
+
}
|
|
300
|
+
if (answer === "s" || answer === "skip" || answer === "") {
|
|
301
|
+
this.output.write("skipped; the request stays pending\n");
|
|
302
|
+
return { kind: "skipped" };
|
|
303
|
+
}
|
|
304
|
+
if (answer === "g" || answer === "grant") {
|
|
305
|
+
const note = await this.askNote("note (optional, press enter to skip) > ", false);
|
|
306
|
+
if (note === null)
|
|
307
|
+
return { kind: "aborted" };
|
|
308
|
+
return this.report(handler, actionKey, "grant", note, deliveryId, options);
|
|
309
|
+
}
|
|
310
|
+
if (answer === "r" || answer === "reject") {
|
|
311
|
+
const note = await this.askNote("note (REQUIRED — say why) > ", true);
|
|
312
|
+
if (note === null)
|
|
313
|
+
return { kind: "aborted" };
|
|
314
|
+
return this.report(handler, actionKey, "reject", note, deliveryId, options);
|
|
315
|
+
}
|
|
316
|
+
this.output.write(`unrecognized answer ${JSON.stringify(answer)}; expected g, r or s\n`);
|
|
317
|
+
}
|
|
318
|
+
}
|
|
319
|
+
/**
|
|
320
|
+
* The checkpoint prompt, in a terminal (APRV-257).
|
|
321
|
+
*
|
|
322
|
+
* The same question the Telegram tap asks, in the channel that has no
|
|
323
|
+
* buttons: the lines the runtime composed, then `s` to sign and `n` to
|
|
324
|
+
* decline. The text is the runtime's and identical on both surfaces, because
|
|
325
|
+
* the thing being consented to is identical and two phrasings of one gesture
|
|
326
|
+
* would be two claims about it.
|
|
327
|
+
*
|
|
328
|
+
* It collects a gesture and nothing else. What signing MEANS — the key, the
|
|
329
|
+
* head, the append — is the runtime's, exactly as a decision is: this channel
|
|
330
|
+
* can no more sign a checkpoint than it can grant a request.
|
|
331
|
+
*
|
|
332
|
+
* End of input is `null`, never a default. A closed pipe has not declined,
|
|
333
|
+
* and it certainly has not signed.
|
|
334
|
+
*/
|
|
335
|
+
async collectCheckpoint(lines) {
|
|
336
|
+
for (const line of lines)
|
|
337
|
+
this.output.write(`${line}\n`);
|
|
338
|
+
for (;;) {
|
|
339
|
+
this.output.write(` s) sign n) not now > `);
|
|
340
|
+
const answer = (await this.readLine())?.trim().toLowerCase();
|
|
341
|
+
if (answer === undefined) {
|
|
342
|
+
this.output.write("\n(input ended; nothing was signed)\n");
|
|
343
|
+
return null;
|
|
344
|
+
}
|
|
345
|
+
if (answer === "n" || answer === "not now" || answer === "") {
|
|
346
|
+
this.output.write("not signed; nothing was appended and nothing is refused\n");
|
|
347
|
+
return false;
|
|
348
|
+
}
|
|
349
|
+
if (answer === "s" || answer === "sign")
|
|
350
|
+
return true;
|
|
351
|
+
this.output.write(`unrecognized answer ${JSON.stringify(answer)}; expected s or n\n`);
|
|
352
|
+
}
|
|
353
|
+
}
|
|
354
|
+
// -------------------------------------------------------------------------
|
|
355
|
+
// internals
|
|
356
|
+
// -------------------------------------------------------------------------
|
|
357
|
+
report(handler, actionKey, verb, note, deliveryId, options) {
|
|
358
|
+
const decision = {
|
|
359
|
+
action_key: actionKey,
|
|
360
|
+
decision: verb,
|
|
361
|
+
deliveryId,
|
|
362
|
+
...(note === undefined ? {} : { note }),
|
|
363
|
+
...(options.batchDeliveryId === undefined
|
|
364
|
+
? {}
|
|
365
|
+
: { batchDeliveryId: options.batchDeliveryId }),
|
|
366
|
+
};
|
|
367
|
+
return { kind: "decided", decision, outcome: handler(decision) };
|
|
368
|
+
}
|
|
369
|
+
/**
|
|
370
|
+
* Ask for a note. Returns `undefined` for "none given" and `null` when input
|
|
371
|
+
* ended — the two are different, and conflating them would let a closed pipe
|
|
372
|
+
* look like a human who chose to say nothing.
|
|
373
|
+
*/
|
|
374
|
+
async askNote(prompt, required) {
|
|
375
|
+
for (;;) {
|
|
376
|
+
this.output.write(prompt);
|
|
377
|
+
const line = await this.readLine();
|
|
378
|
+
if (line === null) {
|
|
379
|
+
this.output.write("\n(input ended; no decision was recorded)\n");
|
|
380
|
+
return null;
|
|
381
|
+
}
|
|
382
|
+
const note = line.trim();
|
|
383
|
+
if (note.length > 0)
|
|
384
|
+
return note;
|
|
385
|
+
if (!required)
|
|
386
|
+
return undefined;
|
|
387
|
+
this.output.write("a note is required to reject: an unexplained refusal cannot be acted on\n");
|
|
388
|
+
}
|
|
389
|
+
}
|
|
390
|
+
async readLine() {
|
|
391
|
+
this.reader ??= new LineReader(this.input);
|
|
392
|
+
return await this.reader.next();
|
|
393
|
+
}
|
|
394
|
+
/**
|
|
395
|
+
* Build one request's rendering split. This is the same function whose output
|
|
396
|
+
* is written to the terminal — {@link lastRendered} is not a parallel
|
|
397
|
+
* description of the rendering, it *is* the rendering.
|
|
398
|
+
*/
|
|
399
|
+
renderRequest(request, batchDeliveryId) {
|
|
400
|
+
const members = request;
|
|
401
|
+
const fields = [];
|
|
402
|
+
for (const name of orderedFields(request, this.layout)) {
|
|
403
|
+
const field = members[name];
|
|
404
|
+
if (field === undefined)
|
|
405
|
+
continue;
|
|
406
|
+
fields.push({ field: name, kind: field.kind, text: formatValue(name, field.value) });
|
|
407
|
+
}
|
|
408
|
+
const rendering = request.fullPayload.value;
|
|
409
|
+
const fullPayloadText = rendering === null
|
|
410
|
+
? null
|
|
411
|
+
: [
|
|
412
|
+
`${PAYLOAD_BEGIN} (bound sha256 ${rendering.hash}) ---`,
|
|
413
|
+
// APRV-119. The canonical rendering, the same bytes the other two
|
|
414
|
+
// channels put in front of a human. Until now this channel printed
|
|
415
|
+
// the pretty JSON alone, which meant a terminal approver and a
|
|
416
|
+
// Telegram approver read two different texts for one payload — the
|
|
417
|
+
// exact divergence WYSIWYS exists to rule out.
|
|
418
|
+
payloadRegionText(rendering, request.class.value),
|
|
419
|
+
PAYLOAD_END,
|
|
420
|
+
...(rendering.truncated
|
|
421
|
+
? ["(TRUNCATED — this is not the whole payload; do not grant on it)"]
|
|
422
|
+
: []),
|
|
423
|
+
].join("\n");
|
|
424
|
+
return {
|
|
425
|
+
action_key: request.action_key.value,
|
|
426
|
+
fields,
|
|
427
|
+
fullPayloadText,
|
|
428
|
+
...(batchDeliveryId === undefined ? {} : { batchDeliveryId }),
|
|
429
|
+
};
|
|
430
|
+
}
|
|
431
|
+
}
|
|
432
|
+
/**
|
|
433
|
+
* The terminal text for one rendering.
|
|
434
|
+
*
|
|
435
|
+
* Computed lines first, then the claimed block under its own heading, then the
|
|
436
|
+
* delimited payload. `request` is read only for each field's attribution — the
|
|
437
|
+
* derivation that produced a computed value, the author of a claimed one.
|
|
438
|
+
*/
|
|
439
|
+
function textOf(request, entry, position, total) {
|
|
440
|
+
const members = request;
|
|
441
|
+
const suffix = (name) => {
|
|
442
|
+
const field = members[name];
|
|
443
|
+
return field === undefined ? "" : ` (${attribution(field)})`;
|
|
444
|
+
};
|
|
445
|
+
const lines = [
|
|
446
|
+
position === null
|
|
447
|
+
? `\n--- ${entry.action_key} ---`
|
|
448
|
+
: `\n--- ${entry.action_key} (${position} of ${total}) ---`,
|
|
449
|
+
];
|
|
450
|
+
for (const field of entry.fields) {
|
|
451
|
+
if (field.kind !== "computed")
|
|
452
|
+
continue;
|
|
453
|
+
lines.push(`${COMPUTED_MARKER} ${field.field.padEnd(16)} ${field.text}${suffix(field.field)}`);
|
|
454
|
+
}
|
|
455
|
+
const claimed = entry.fields.filter((field) => field.kind === "claimed");
|
|
456
|
+
if (claimed.length > 0) {
|
|
457
|
+
lines.push("claimed by the party under oversight — NOT verified by the runtime:");
|
|
458
|
+
for (const field of claimed) {
|
|
459
|
+
lines.push(` ${CLAIMED_MARKER} ${field.field.padEnd(14)} ${field.text}${suffix(field.field)}`);
|
|
460
|
+
}
|
|
461
|
+
}
|
|
462
|
+
if (entry.fullPayloadText !== null) {
|
|
463
|
+
lines.push("");
|
|
464
|
+
lines.push(entry.fullPayloadText);
|
|
465
|
+
}
|
|
466
|
+
return `${lines.join("\n")}\n`;
|
|
467
|
+
}
|
|
468
|
+
//# sourceMappingURL=cli.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"cli.js","sourceRoot":"","sources":["../../../src/channels/cli.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,92 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* The shared channel conformance suite (SPEC.md §9, §10.3, §10.4).
|
|
3
|
+
*
|
|
4
|
+
* SPEC.md §9 states the display rule and then names its consequence in the same
|
|
5
|
+
* breath: rendering claimed fields with the visual authority of computed fields
|
|
6
|
+
* "is a conformance failure for a channel". This module is what that sentence
|
|
7
|
+
* points at. It ships with the contract rather than with any one channel, so
|
|
8
|
+
* `cli`, `web` and `telegram` (APRV-23/25/26) are held to one standard written
|
|
9
|
+
* once, and a fourth channel written by someone else can import it and find out
|
|
10
|
+
* in a single test whether it is a channel or merely a message sender.
|
|
11
|
+
*
|
|
12
|
+
* ## What it checks
|
|
13
|
+
*
|
|
14
|
+
* 1. **Tagging.** Every member of the request handed to the channel is a
|
|
15
|
+
* {@link TaggedField} ({@link assertTagged}), and every field the channel
|
|
16
|
+
* reports rendering carries the *same* kind the request gave it. A channel
|
|
17
|
+
* that presents a claimed summary as computed fails here.
|
|
18
|
+
* 2. **The full payload** (§10.4). A manual request's rendering contains the
|
|
19
|
+
* payload text verbatim, in a region distinct from the claimed summary.
|
|
20
|
+
* 3. **Decision round-trip.** A gesture driven through the harness lands
|
|
21
|
+
* exactly one correctly-shaped event in a real log, through the real gate.
|
|
22
|
+
* 4. **Batch semantics** (§10.3, B7). A batch notify plus two decisions lands
|
|
23
|
+
* two events, each carrying the batch delivery id; and the forbidden mix is
|
|
24
|
+
* refused at {@link assembleBatch} before anything is delivered.
|
|
25
|
+
* 5. **Terminal requests are neither pending nor armed** (APRV-113). A request
|
|
26
|
+
* the log has settled is absent from the derivation every channel builds its
|
|
27
|
+
* queue from, and a second gesture on it is refused and appends nothing.
|
|
28
|
+
*
|
|
29
|
+
* ## How it is run
|
|
30
|
+
*
|
|
31
|
+
* ```ts
|
|
32
|
+
* test("my channel conforms", async (t) => {
|
|
33
|
+
* await runChannelConformance(t, () => new MyChannel(), harness);
|
|
34
|
+
* });
|
|
35
|
+
* ```
|
|
36
|
+
*
|
|
37
|
+
* `t` is a `node:test` context and is used only for `diagnostic()` labels: the
|
|
38
|
+
* checks run inline and **throw** on the first failure rather than being split
|
|
39
|
+
* into subtests. That is deliberate. A subtest's promise resolves even when the
|
|
40
|
+
* subtest fails, so a suite built from `t.test()` could not itself be tested —
|
|
41
|
+
* and a conformance suite nobody has watched fail is a suite that might pass
|
|
42
|
+
* anything. Throwing means `tests/channels-contract.test.ts` can assert the
|
|
43
|
+
* suite goes RED against deliberately broken channels.
|
|
44
|
+
*
|
|
45
|
+
* The suite writes to whatever log the harness gives it, through the real gate.
|
|
46
|
+
* It never hand-writes a log line.
|
|
47
|
+
*/
|
|
48
|
+
import { type DecideOptions } from "../core/gate.js";
|
|
49
|
+
import { type Channel, type ChannelActorOptions, type ChannelDecision, type ChannelRequest, type DecisionOutcome } from "./contract.js";
|
|
50
|
+
/** Anything with a `diagnostic` method — `node:test`'s `TestContext` qualifies. */
|
|
51
|
+
export interface ConformanceContext {
|
|
52
|
+
diagnostic?(message: string): void;
|
|
53
|
+
}
|
|
54
|
+
/**
|
|
55
|
+
* One scenario the harness prepares: a real log with `count` live manual
|
|
56
|
+
* requests, and the identity that will decide them.
|
|
57
|
+
*/
|
|
58
|
+
export interface ConformanceCase {
|
|
59
|
+
/** Path to a real `events.jsonl`, built through the gate. */
|
|
60
|
+
logPath: string;
|
|
61
|
+
/** The pending requests, as `channels/tagging.ts` built them. */
|
|
62
|
+
requests: ChannelRequest[];
|
|
63
|
+
/** The approver. Must be `human:…`; the gate refuses anything else. */
|
|
64
|
+
actor: ChannelActorOptions;
|
|
65
|
+
/** Gate options for recording (policy location, injected clock). */
|
|
66
|
+
gateOptions?: DecideOptions;
|
|
67
|
+
/** Called when the suite is done with this case. */
|
|
68
|
+
cleanup?(): void;
|
|
69
|
+
}
|
|
70
|
+
/**
|
|
71
|
+
* What a channel's test file must provide.
|
|
72
|
+
*
|
|
73
|
+
* `setup(count)` returns a *fresh* case each call — the suite decides requests,
|
|
74
|
+
* and a decided request cannot be decided again. `setup(2)` MUST return two
|
|
75
|
+
* requests with **distinct** payload hashes; the batch checks assert that and
|
|
76
|
+
* would otherwise be vacuous.
|
|
77
|
+
*
|
|
78
|
+
* `decide` is the harness's simulation of the human gesture: press the button,
|
|
79
|
+
* answer the prompt, POST the webhook — whatever makes the channel invoke the
|
|
80
|
+
* handler it was given. It is optional; without it the suite calls the
|
|
81
|
+
* registered handler directly, which still exercises the runtime path but not
|
|
82
|
+
* the channel's own callback wiring, so a real channel should provide it.
|
|
83
|
+
*/
|
|
84
|
+
export interface ConformanceHarness {
|
|
85
|
+
setup(count: number): ConformanceCase | Promise<ConformanceCase>;
|
|
86
|
+
decide?(channel: Channel, decision: ChannelDecision): DecisionOutcome | Promise<DecisionOutcome>;
|
|
87
|
+
}
|
|
88
|
+
/**
|
|
89
|
+
* Run the suite. Resolves when every check passes; throws (an `AssertionError`)
|
|
90
|
+
* on the first failure.
|
|
91
|
+
*/
|
|
92
|
+
export declare function runChannelConformance(t: ConformanceContext, makeChannel: () => Channel, harness: ConformanceHarness): Promise<void>;
|