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,71 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* `approval channel cli` (APRV-23) — the zero-config channel, driven over the
|
|
3
|
+
* plugin contract rather than around it.
|
|
4
|
+
*
|
|
5
|
+
* There is no second decision path in this codebase and this verb is not one.
|
|
6
|
+
* It builds the pending queue with `channels/tagging.ts`, hands each request to
|
|
7
|
+
* `channels/cli.ts` for rendering, and registers a decision handler whose entire
|
|
8
|
+
* body is a call to `recordChannelDecision` — which calls the human-only
|
|
9
|
+
* `decide()` in `core/gate.ts`. Every gate rule (human actor, TTL, budgets,
|
|
10
|
+
* attestation, idempotency, compare-and-append) applies here unchanged, because
|
|
11
|
+
* nothing here reimplements any of them.
|
|
12
|
+
*
|
|
13
|
+
* ## Interactive, and deliberately not by default
|
|
14
|
+
*
|
|
15
|
+
* A prompt that blocks is a prompt that hangs a pipeline. So the verb is
|
|
16
|
+
* interactive only when stdin is a TTY, or when `--interactive` says so
|
|
17
|
+
* explicitly; `--json` is never interactive. Anything else lists the queue and
|
|
18
|
+
* exits 0. That rule is in `--help` because an agent that shells out to this
|
|
19
|
+
* verb must be able to predict, before it spawns anything, whether the child
|
|
20
|
+
* will return.
|
|
21
|
+
*
|
|
22
|
+
* ## The reading aids (APRV-197)
|
|
23
|
+
*
|
|
24
|
+
* Two of them, and they are different in kind. The deterministic one is the
|
|
25
|
+
* `command_breakdown` line: derived by the classifier from the bound bytes,
|
|
26
|
+
* marked `[computed] (classifier)`, free, and always present for a command this
|
|
27
|
+
* runtime's own tokenizer can read. The other is the model gloss, which costs a
|
|
28
|
+
* subprocess and 10-15 seconds and is marked `(model, unverified)` on the line
|
|
29
|
+
* itself. Until APRV-197 only the Telegram listener attached the second, so an
|
|
30
|
+
* operator deciding here read the agent's raw summary and nothing else; the two
|
|
31
|
+
* surfaces now share `cli/gloss-attach.ts`. See {@link glossRunner} for when a
|
|
32
|
+
* model is asked at all — only under `--gloss`, and never on the `--json` path,
|
|
33
|
+
* which is not interactive and has nobody waiting at it.
|
|
34
|
+
*
|
|
35
|
+
* ## Identity is declared, not proved
|
|
36
|
+
*
|
|
37
|
+
* `--as human:<id>`, else `APPROVAL_HUMAN`. The trust boundary is the local
|
|
38
|
+
* machine: anyone who can set that variable and write to the log is inside it,
|
|
39
|
+
* so a decision recorded here proves that *someone with local control* answered,
|
|
40
|
+
* not *who*. Stated in `--help` rather than implied, because a reader who
|
|
41
|
+
* believes this authenticates anybody would be wrong in a way that matters. The
|
|
42
|
+
* identity is required only when a decision could be recorded — listing the
|
|
43
|
+
* queue asks nothing of anyone.
|
|
44
|
+
*
|
|
45
|
+
* ## Where the payload comes from
|
|
46
|
+
*
|
|
47
|
+
* v0.1's log records `payload_hash`, never the payload bytes, so the material to
|
|
48
|
+
* render comes from the payload store beside the log — `.approval/payloads/`,
|
|
49
|
+
* written by `approval request --payload` (APRV-28) — which is why this verb
|
|
50
|
+
* needs no flag at all in the ordinary case. `--payload-dir` remains as an
|
|
51
|
+
* override for an operator whose bytes live elsewhere: one JSON file per action
|
|
52
|
+
* key, consulted first. `channels/tagging.ts` hashes whatever it is given and refuses
|
|
53
|
+
* anything that does not match the recorded binding, so a wrong file is a
|
|
54
|
+
* refusal and never a rendering. A manual request with no material is *skipped*
|
|
55
|
+
* and reported — visibly, never silently, because a request missing from a queue
|
|
56
|
+
* is a request nobody will approve.
|
|
57
|
+
*
|
|
58
|
+
* ## The asynchronous exit code
|
|
59
|
+
*
|
|
60
|
+
* `main()` is synchronous by contract: `cli.js` assigns its return value to
|
|
61
|
+
* `process.exitCode`. The prompt loop is asynchronous (readline), so the
|
|
62
|
+
* interactive path returns {@link EXIT_OK} to `main` and assigns the real code
|
|
63
|
+
* to `process.exitCode` when the loop settles. Node exits with the last value
|
|
64
|
+
* assigned, so a refusal still exits 1. Every synchronous path — `--json`, a
|
|
65
|
+
* non-TTY listing, a usage error, an I/O fact — returns its code the ordinary
|
|
66
|
+
* way.
|
|
67
|
+
*/
|
|
68
|
+
import type { Streams } from "./main.js";
|
|
69
|
+
export declare function commandChannelCli(argv: string[], streams: Streams, cwd: string): number;
|
|
70
|
+
/** `approval channel <subcommand>` — `cli`, `web` (APRV-25), `telegram`. */
|
|
71
|
+
export declare function commandChannel(argv: string[], streams: Streams, cwd: string): number | Promise<number>;
|
|
@@ -0,0 +1,438 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* `approval channel cli` (APRV-23) — the zero-config channel, driven over the
|
|
3
|
+
* plugin contract rather than around it.
|
|
4
|
+
*
|
|
5
|
+
* There is no second decision path in this codebase and this verb is not one.
|
|
6
|
+
* It builds the pending queue with `channels/tagging.ts`, hands each request to
|
|
7
|
+
* `channels/cli.ts` for rendering, and registers a decision handler whose entire
|
|
8
|
+
* body is a call to `recordChannelDecision` — which calls the human-only
|
|
9
|
+
* `decide()` in `core/gate.ts`. Every gate rule (human actor, TTL, budgets,
|
|
10
|
+
* attestation, idempotency, compare-and-append) applies here unchanged, because
|
|
11
|
+
* nothing here reimplements any of them.
|
|
12
|
+
*
|
|
13
|
+
* ## Interactive, and deliberately not by default
|
|
14
|
+
*
|
|
15
|
+
* A prompt that blocks is a prompt that hangs a pipeline. So the verb is
|
|
16
|
+
* interactive only when stdin is a TTY, or when `--interactive` says so
|
|
17
|
+
* explicitly; `--json` is never interactive. Anything else lists the queue and
|
|
18
|
+
* exits 0. That rule is in `--help` because an agent that shells out to this
|
|
19
|
+
* verb must be able to predict, before it spawns anything, whether the child
|
|
20
|
+
* will return.
|
|
21
|
+
*
|
|
22
|
+
* ## The reading aids (APRV-197)
|
|
23
|
+
*
|
|
24
|
+
* Two of them, and they are different in kind. The deterministic one is the
|
|
25
|
+
* `command_breakdown` line: derived by the classifier from the bound bytes,
|
|
26
|
+
* marked `[computed] (classifier)`, free, and always present for a command this
|
|
27
|
+
* runtime's own tokenizer can read. The other is the model gloss, which costs a
|
|
28
|
+
* subprocess and 10-15 seconds and is marked `(model, unverified)` on the line
|
|
29
|
+
* itself. Until APRV-197 only the Telegram listener attached the second, so an
|
|
30
|
+
* operator deciding here read the agent's raw summary and nothing else; the two
|
|
31
|
+
* surfaces now share `cli/gloss-attach.ts`. See {@link glossRunner} for when a
|
|
32
|
+
* model is asked at all — only under `--gloss`, and never on the `--json` path,
|
|
33
|
+
* which is not interactive and has nobody waiting at it.
|
|
34
|
+
*
|
|
35
|
+
* ## Identity is declared, not proved
|
|
36
|
+
*
|
|
37
|
+
* `--as human:<id>`, else `APPROVAL_HUMAN`. The trust boundary is the local
|
|
38
|
+
* machine: anyone who can set that variable and write to the log is inside it,
|
|
39
|
+
* so a decision recorded here proves that *someone with local control* answered,
|
|
40
|
+
* not *who*. Stated in `--help` rather than implied, because a reader who
|
|
41
|
+
* believes this authenticates anybody would be wrong in a way that matters. The
|
|
42
|
+
* identity is required only when a decision could be recorded — listing the
|
|
43
|
+
* queue asks nothing of anyone.
|
|
44
|
+
*
|
|
45
|
+
* ## Where the payload comes from
|
|
46
|
+
*
|
|
47
|
+
* v0.1's log records `payload_hash`, never the payload bytes, so the material to
|
|
48
|
+
* render comes from the payload store beside the log — `.approval/payloads/`,
|
|
49
|
+
* written by `approval request --payload` (APRV-28) — which is why this verb
|
|
50
|
+
* needs no flag at all in the ordinary case. `--payload-dir` remains as an
|
|
51
|
+
* override for an operator whose bytes live elsewhere: one JSON file per action
|
|
52
|
+
* key, consulted first. `channels/tagging.ts` hashes whatever it is given and refuses
|
|
53
|
+
* anything that does not match the recorded binding, so a wrong file is a
|
|
54
|
+
* refusal and never a rendering. A manual request with no material is *skipped*
|
|
55
|
+
* and reported — visibly, never silently, because a request missing from a queue
|
|
56
|
+
* is a request nobody will approve.
|
|
57
|
+
*
|
|
58
|
+
* ## The asynchronous exit code
|
|
59
|
+
*
|
|
60
|
+
* `main()` is synchronous by contract: `cli.js` assigns its return value to
|
|
61
|
+
* `process.exitCode`. The prompt loop is asynchronous (readline), so the
|
|
62
|
+
* interactive path returns {@link EXIT_OK} to `main` and assigns the real code
|
|
63
|
+
* to `process.exitCode` when the loop settles. Node exits with the last value
|
|
64
|
+
* assigned, so a refusal still exits 1. Every synchronous path — `--json`, a
|
|
65
|
+
* non-TTY listing, a usage error, an I/O fact — returns its code the ordinary
|
|
66
|
+
* way.
|
|
67
|
+
*/
|
|
68
|
+
import { readFileSync } from "node:fs";
|
|
69
|
+
import { isAbsolute, join, resolve as resolvePathSegments } from "node:path";
|
|
70
|
+
import { CliChannel } from "../channels/cli.js";
|
|
71
|
+
import { recordChannelDecision, refusedDecisionLine, } from "../channels/contract.js";
|
|
72
|
+
import { buildPendingQueue } from "../channels/tagging.js";
|
|
73
|
+
import { checkpointOfferFor, checkpointPromptLines, checkpointSignedLines, signCheckpointOffer, } from "./checkpoint-tap.js";
|
|
74
|
+
import { HUMAN_ACTOR_ENV, resolveHumanActor } from "../core/attest.js";
|
|
75
|
+
import { loadPolicy } from "../core/policy-load.js";
|
|
76
|
+
import { promptLayoutFor } from "../core/prompt-layout.js";
|
|
77
|
+
import { passphraseEnvFor } from "../core/vault.js";
|
|
78
|
+
import { boolFlag, parseFlags, stringFlag } from "./args.js";
|
|
79
|
+
import { GLOSS_TIMEOUT_MS } from "./gloss.js";
|
|
80
|
+
import { attachGloss, glossAbsenceLine } from "./gloss-attach.js";
|
|
81
|
+
import { glossRunnerFromOptions, parseGlossOptions, } from "./gloss-options.js";
|
|
82
|
+
import { EXIT_INTEGRITY, EXIT_IO, EXIT_OK, EXIT_TORN_TAIL, EXIT_USAGE, } from "./exit-codes.js";
|
|
83
|
+
import { CHANNEL_CLI_HELP, CHANNEL_HELP } from "./help.js";
|
|
84
|
+
import { DEFAULT_LOG_PATH, preflightLog, resolvePath } from "./paths.js";
|
|
85
|
+
import { commandTelegram } from "./channel-telegram.js";
|
|
86
|
+
import { commandWeb } from "./channel-web.js";
|
|
87
|
+
import { refusal as renderRefusal, style, tokenPanel, TOKEN_NOTICE } from "./style.js";
|
|
88
|
+
import { usageErrorText } from "./usage.js";
|
|
89
|
+
const FLAGS = {
|
|
90
|
+
"--log": "string",
|
|
91
|
+
"--policy-dir": "string",
|
|
92
|
+
"--policy": "string",
|
|
93
|
+
"--payload-dir": "string",
|
|
94
|
+
"--as": "string",
|
|
95
|
+
"--interactive": "boolean",
|
|
96
|
+
"--gloss": "boolean",
|
|
97
|
+
"--gloss-provider": "string",
|
|
98
|
+
"--gloss-model": "string",
|
|
99
|
+
"--json": "boolean",
|
|
100
|
+
"--help": "boolean",
|
|
101
|
+
"-h": "boolean",
|
|
102
|
+
};
|
|
103
|
+
function absolute(value, cwd) {
|
|
104
|
+
return isAbsolute(value) ? value : resolvePathSegments(cwd, value);
|
|
105
|
+
}
|
|
106
|
+
function usageError(streams, json, message, help) {
|
|
107
|
+
if (json)
|
|
108
|
+
streams.err(`${JSON.stringify({ error: { code: "usage", message } })}\n`);
|
|
109
|
+
else
|
|
110
|
+
streams.err(usageErrorText(message, help));
|
|
111
|
+
return EXIT_USAGE;
|
|
112
|
+
}
|
|
113
|
+
function ioError(streams, json, message) {
|
|
114
|
+
if (json)
|
|
115
|
+
streams.err(`${JSON.stringify({ error: { code: "io", message } })}\n`);
|
|
116
|
+
else
|
|
117
|
+
streams.err(`approval: ${message}\n`);
|
|
118
|
+
return EXIT_IO;
|
|
119
|
+
}
|
|
120
|
+
/**
|
|
121
|
+
* Payload material for one action key, from `--payload-dir`.
|
|
122
|
+
*
|
|
123
|
+
* Two filenames are accepted — the key verbatim and its percent-encoding — so a
|
|
124
|
+
* key containing a path separator cannot name a file outside the directory and
|
|
125
|
+
* an operator is not forced to guess an encoding. Unparseable or unreadable
|
|
126
|
+
* material yields `undefined`, which the tagger turns into a *visible* skip
|
|
127
|
+
* rather than a rendering; the parse failure itself is reported on stderr.
|
|
128
|
+
*/
|
|
129
|
+
function payloadSource(dir, streams) {
|
|
130
|
+
return (actionKey) => {
|
|
131
|
+
for (const name of [`${encodeURIComponent(actionKey)}.json`, `${actionKey}.json`]) {
|
|
132
|
+
if (name.includes("/") || name.includes("\\"))
|
|
133
|
+
continue;
|
|
134
|
+
let raw;
|
|
135
|
+
try {
|
|
136
|
+
raw = readFileSync(join(dir, name), "utf8");
|
|
137
|
+
}
|
|
138
|
+
catch {
|
|
139
|
+
continue;
|
|
140
|
+
}
|
|
141
|
+
try {
|
|
142
|
+
return JSON.parse(raw);
|
|
143
|
+
}
|
|
144
|
+
catch (cause) {
|
|
145
|
+
streams.err(`approval: payload material for ${actionKey} (${join(dir, name)}) is not valid JSON: ${cause instanceof Error ? cause.message : String(cause)}; the request will be skipped rather than rendered from bytes nobody could bind\n`);
|
|
146
|
+
return undefined;
|
|
147
|
+
}
|
|
148
|
+
}
|
|
149
|
+
return undefined;
|
|
150
|
+
};
|
|
151
|
+
}
|
|
152
|
+
/** The queue refusal codes, mapped onto the frozen exit table. */
|
|
153
|
+
function refusalExit(code) {
|
|
154
|
+
switch (code) {
|
|
155
|
+
case "log-unreadable":
|
|
156
|
+
return EXIT_IO;
|
|
157
|
+
case "log-torn-tail":
|
|
158
|
+
return EXIT_TORN_TAIL;
|
|
159
|
+
default:
|
|
160
|
+
return EXIT_INTEGRITY;
|
|
161
|
+
}
|
|
162
|
+
}
|
|
163
|
+
/**
|
|
164
|
+
* One line of human-readable outcome per decision.
|
|
165
|
+
*
|
|
166
|
+
* A refusal since APRV-235 leads with the sentence the Telegram message edit
|
|
167
|
+
* shows, from the one helper both surfaces share, and keeps the gate's own
|
|
168
|
+
* message after it. The person at this terminal and the person holding the
|
|
169
|
+
* phone are usually the same person, and they were reading two different
|
|
170
|
+
* accounts of one refused tap. The gate's message stays because a terminal can
|
|
171
|
+
* afford the detail a chat bubble cannot, and because it is the text that names
|
|
172
|
+
* the hashes.
|
|
173
|
+
*/
|
|
174
|
+
function describeOutcome(outcome) {
|
|
175
|
+
if (outcome.ok) {
|
|
176
|
+
return `${outcome.decision === "grant" ? "granted" : "rejected"} ${outcome.action_key} -> ${outcome.state} at seq ${outcome.record.seq}`;
|
|
177
|
+
}
|
|
178
|
+
return `refused: ${outcome.code}: ${refusedDecisionLine(outcome.code)}\n ${outcome.message}`;
|
|
179
|
+
}
|
|
180
|
+
export function commandChannelCli(argv, streams, cwd) {
|
|
181
|
+
const json = argv.includes("--json");
|
|
182
|
+
const parsed = parseFlags(argv, FLAGS);
|
|
183
|
+
if (!parsed.ok)
|
|
184
|
+
return usageError(streams, json, parsed.message, CHANNEL_CLI_HELP);
|
|
185
|
+
if (boolFlag(parsed.flags, "--help") || boolFlag(parsed.flags, "-h")) {
|
|
186
|
+
streams.out(`${CHANNEL_CLI_HELP}\n`);
|
|
187
|
+
return EXIT_OK;
|
|
188
|
+
}
|
|
189
|
+
const extra = parsed.positionals[0];
|
|
190
|
+
if (extra !== undefined) {
|
|
191
|
+
return usageError(streams, json, `unexpected argument ${JSON.stringify(extra)}`, CHANNEL_CLI_HELP);
|
|
192
|
+
}
|
|
193
|
+
const flags = parsed.flags;
|
|
194
|
+
const selectedGloss = parseGlossOptions(flags, false);
|
|
195
|
+
if (!selectedGloss.ok) {
|
|
196
|
+
return usageError(streams, json, selectedGloss.message, CHANNEL_CLI_HELP);
|
|
197
|
+
}
|
|
198
|
+
const logPath = resolvePath(stringFlag(flags, "--log"), DEFAULT_LOG_PATH, cwd);
|
|
199
|
+
const policyFile = stringFlag(flags, "--policy");
|
|
200
|
+
const policyDir = stringFlag(flags, "--policy-dir");
|
|
201
|
+
const policy = policyFile !== null
|
|
202
|
+
? { file: absolute(policyFile, cwd) }
|
|
203
|
+
: { dir: policyDir === null ? cwd : absolute(policyDir, cwd) };
|
|
204
|
+
const payloadDir = stringFlag(flags, "--payload-dir");
|
|
205
|
+
const tagOptions = {
|
|
206
|
+
policy,
|
|
207
|
+
...(payloadDir === null
|
|
208
|
+
? {}
|
|
209
|
+
: { payload: payloadSource(absolute(payloadDir, cwd), streams) }),
|
|
210
|
+
};
|
|
211
|
+
const check = preflightLog(logPath);
|
|
212
|
+
if (!check.ok)
|
|
213
|
+
return ioError(streams, json, check.message);
|
|
214
|
+
const queue = buildPendingQueue(logPath, tagOptions, new Date().toISOString());
|
|
215
|
+
if (!queue.ok) {
|
|
216
|
+
if (json) {
|
|
217
|
+
streams.err(`${JSON.stringify({ ok: false, error: { code: queue.code, message: queue.message } })}\n`);
|
|
218
|
+
}
|
|
219
|
+
else {
|
|
220
|
+
streams.err(`${renderRefusal(style({ json }), queue.code, queue.message)}\n`);
|
|
221
|
+
}
|
|
222
|
+
return refusalExit(queue.code);
|
|
223
|
+
}
|
|
224
|
+
// Never interactive with --json: a prompt has nowhere to go in a machine
|
|
225
|
+
// shape, and a caller that asked for one object must get one object.
|
|
226
|
+
const interactive = !json && (boolFlag(flags, "--interactive") || process.stdin.isTTY === true);
|
|
227
|
+
if (!interactive) {
|
|
228
|
+
return listOnly(queue.requests, queue.skipped, streams, json, promptLayoutFor(loadPolicy(policy), "cli"));
|
|
229
|
+
}
|
|
230
|
+
const asFlag = stringFlag(flags, "--as");
|
|
231
|
+
const actor = resolveHumanActor(asFlag === null ? {} : { actor: asFlag });
|
|
232
|
+
if (actor === null) {
|
|
233
|
+
// Checked BEFORE anything is rendered: asking a human to read a payload and
|
|
234
|
+
// then telling them their answer cannot be recorded wastes the one resource
|
|
235
|
+
// this whole system is spending.
|
|
236
|
+
return usageError(streams, json, asFlag === null
|
|
237
|
+
? `no human identity: set ${HUMAN_ACTOR_ENV}=human:<id> or pass --as human:<id>; a decision collected here is recorded by the human-only gate and cannot be attributed to nobody`
|
|
238
|
+
: `--as expects a human identity matching human:<id>, got ${JSON.stringify(asFlag)}; approval decisions are human-only and an agent: or system: actor cannot record one`, CHANNEL_CLI_HELP);
|
|
239
|
+
}
|
|
240
|
+
// APRV-257. Resolved BEFORE the empty-queue exit, because an empty queue is
|
|
241
|
+
// exactly when a checkpoint is the only thing owed: the operator who opens
|
|
242
|
+
// this verb on a quiet gate is the one who should be asked, and a verb that
|
|
243
|
+
// had already returned could not ask them.
|
|
244
|
+
const tap = { logPath, policy, keyFile: null, vault: null };
|
|
245
|
+
const checkpoint = checkpointOfferFor(tap);
|
|
246
|
+
if (queue.requests.length === 0 && checkpoint === null) {
|
|
247
|
+
reportSkipped(queue.skipped, streams);
|
|
248
|
+
streams.out("queue: empty — no requests awaiting a decision\n");
|
|
249
|
+
return EXIT_OK;
|
|
250
|
+
}
|
|
251
|
+
// See the module header: the prompt loop is asynchronous, so its exit code is
|
|
252
|
+
// assigned to process.exitCode when it settles.
|
|
253
|
+
void interactiveLoop(queue.requests, logPath, policy, actor, streams, glossRunner(selectedGloss.options, policy, streams), checkpoint === null ? null : { tap, offer: checkpoint }).then((code) => {
|
|
254
|
+
process.exitCode = code;
|
|
255
|
+
}, (cause) => {
|
|
256
|
+
streams.err(`approval: the prompt loop failed: ${cause instanceof Error ? cause.message : String(cause)}\n`);
|
|
257
|
+
process.exitCode = EXIT_IO;
|
|
258
|
+
});
|
|
259
|
+
reportSkipped(queue.skipped, streams);
|
|
260
|
+
return EXIT_OK;
|
|
261
|
+
}
|
|
262
|
+
/**
|
|
263
|
+
* Whether this walk asks a model for a gloss, and with what (APRV-197).
|
|
264
|
+
*
|
|
265
|
+
* `--gloss`, and nothing else. The VERB is the only place a subprocess is
|
|
266
|
+
* wired, so every other caller of the prompt loop — the conformance harness,
|
|
267
|
+
* the test suite, any programmatic driver — gets `undefined` and spawns
|
|
268
|
+
* nothing. Three surfaces now carry the same flag under the same rule
|
|
269
|
+
* (`channel cli`, `channel telegram listen`, `up`).
|
|
270
|
+
*
|
|
271
|
+
* Opt-in rather than on-by-default because the cost is measured and it is not
|
|
272
|
+
* small: 10-15 seconds per request (see {@link GLOSS_TIMEOUT_MS}), spent while
|
|
273
|
+
* a human waits at a prompt. The reading aid that is always there is the
|
|
274
|
+
* deterministic one — `command_breakdown`, derived by the classifier from the
|
|
275
|
+
* bound bytes, free, and marked `[computed]`. A sentence from a model that no
|
|
276
|
+
* party vouches for is worth asking for, and worth asking for ON PURPOSE.
|
|
277
|
+
*
|
|
278
|
+
* The policy is read for one thing only (APRV-207): the NAME of its passphrase
|
|
279
|
+
* variable, so the scrub that starves the subprocess removes a renamed one too.
|
|
280
|
+
*/
|
|
281
|
+
function glossRunner(selection, policy, streams) {
|
|
282
|
+
if (!selection.enabled)
|
|
283
|
+
return undefined;
|
|
284
|
+
return glossRunnerFromOptions(selection, {
|
|
285
|
+
passphraseEnv: passphraseEnvFor(loadPolicy(policy)),
|
|
286
|
+
diagnostic: (reason) => streams.err(`approval: Codex gloss unavailable (${reason}); continuing without it\n`),
|
|
287
|
+
});
|
|
288
|
+
}
|
|
289
|
+
function reportSkipped(skipped, streams) {
|
|
290
|
+
for (const entry of skipped) {
|
|
291
|
+
// APRV-102: the shared refusal shape. The action key leads the message
|
|
292
|
+
// because a skip is ABOUT one request, and the reader is scanning for which.
|
|
293
|
+
streams.err(`${renderRefusal(style(), entry.code, `skipped ${entry.action_key}: ${entry.message}`)}\n`);
|
|
294
|
+
}
|
|
295
|
+
}
|
|
296
|
+
/**
|
|
297
|
+
* The non-interactive answer: the queue, and then nothing. It must not read
|
|
298
|
+
* stdin at all — a listing that blocked on a closed pipe would hang every CI
|
|
299
|
+
* step that ever called it.
|
|
300
|
+
*/
|
|
301
|
+
function listOnly(requests, skipped, streams, json, layout) {
|
|
302
|
+
if (json) {
|
|
303
|
+
// FROZEN SHAPE: the tagged queue, verbatim. Every field keeps its
|
|
304
|
+
// kind/value/source|author markers, so a machine reader sees the same
|
|
305
|
+
// computed/claimed split a human does.
|
|
306
|
+
streams.out(`${JSON.stringify({
|
|
307
|
+
ok: true,
|
|
308
|
+
channel: "cli",
|
|
309
|
+
interactive: false,
|
|
310
|
+
pending: requests,
|
|
311
|
+
skipped,
|
|
312
|
+
})}\n`);
|
|
313
|
+
return EXIT_OK;
|
|
314
|
+
}
|
|
315
|
+
reportSkipped(skipped, streams);
|
|
316
|
+
if (requests.length === 0) {
|
|
317
|
+
streams.out("queue: empty — no requests awaiting a decision\n");
|
|
318
|
+
return EXIT_OK;
|
|
319
|
+
}
|
|
320
|
+
const channel = new CliChannel({ output: { write: (text) => streams.out(text) }, layout });
|
|
321
|
+
channel.notify({ requests });
|
|
322
|
+
streams.out(`\n${requests.length} request(s) awaiting a decision. stdin is not a terminal, so nothing was asked and nothing was recorded; re-run with a terminal (or --interactive) to decide.\n`);
|
|
323
|
+
return EXIT_OK;
|
|
324
|
+
}
|
|
325
|
+
/**
|
|
326
|
+
* Walk the queue: notify, prompt, record, report.
|
|
327
|
+
*
|
|
328
|
+
* The grant token is printed exactly once, here, by the runtime — never by the
|
|
329
|
+
* channel, which is handed a {@link DecisionOutcome} that does not carry it.
|
|
330
|
+
*/
|
|
331
|
+
async function interactiveLoop(requests, logPath, policy, actor, streams, gloss,
|
|
332
|
+
/**
|
|
333
|
+
* The checkpoint this log is owed, when one is (APRV-257). Asked FIRST, and
|
|
334
|
+
* once: it is a question about the whole log rather than about any request in
|
|
335
|
+
* the queue, so leaving it until the end would be asking it of whoever
|
|
336
|
+
* happened to still be at the terminal.
|
|
337
|
+
*/
|
|
338
|
+
checkpoint) {
|
|
339
|
+
// APRV-218: which rows this walk shows, from `channels.cli.prompt`. Resolved
|
|
340
|
+
// HERE, at the verb, because the channel neither reads a policy file nor holds
|
|
341
|
+
// an opinion about what an operator should see. A policy that did not load
|
|
342
|
+
// yields the default layout and nothing else: a layout is not a permission.
|
|
343
|
+
const channel = new CliChannel({
|
|
344
|
+
output: { write: (text) => streams.out(text) },
|
|
345
|
+
layout: promptLayoutFor(loadPolicy(policy), "cli"),
|
|
346
|
+
});
|
|
347
|
+
let token;
|
|
348
|
+
channel.onDecision((decision) => {
|
|
349
|
+
const result = recordChannelDecision(logPath, decision, { actor, channel: channel.name }, { policy });
|
|
350
|
+
token = result.token;
|
|
351
|
+
return result.outcome;
|
|
352
|
+
});
|
|
353
|
+
let refused = false;
|
|
354
|
+
const tally = { asked: 0, absent: 0 };
|
|
355
|
+
try {
|
|
356
|
+
// APRV-257, first and once. Declining costs nothing and refuses nothing, so
|
|
357
|
+
// a `false` here is not an outcome the exit code reads; a signature that
|
|
358
|
+
// was ATTEMPTED and failed is reported and does set `refused`, because the
|
|
359
|
+
// operator asked for a record and did not get one.
|
|
360
|
+
if (checkpoint !== null) {
|
|
361
|
+
const sign = await channel.collectCheckpoint(checkpointPromptLines(checkpoint.offer));
|
|
362
|
+
if (sign === true) {
|
|
363
|
+
const result = signCheckpointOffer(checkpoint.tap, checkpoint.offer.head, actor, channel.name, process.cwd());
|
|
364
|
+
for (const line of checkpointSignedLines(result))
|
|
365
|
+
streams.out(`${line}\n`);
|
|
366
|
+
if (!result.ok)
|
|
367
|
+
refused = true;
|
|
368
|
+
}
|
|
369
|
+
}
|
|
370
|
+
for (const original of requests) {
|
|
371
|
+
// APRV-197. Attached per request, immediately before it is rendered, and
|
|
372
|
+
// by the same function the Telegram listener uses. Per request rather
|
|
373
|
+
// than in one pass up front because the wait is 10-15s each: a human who
|
|
374
|
+
// walks away after the first decision should not have paid for glosses of
|
|
375
|
+
// requests they never read, and one who stays sees the pause land next to
|
|
376
|
+
// the prompt it belongs to.
|
|
377
|
+
let request = original;
|
|
378
|
+
if (gloss !== undefined) {
|
|
379
|
+
streams.err(`approval: asking a model to describe ${original.action_key.value} (up to ${GLOSS_TIMEOUT_MS}ms; drop --gloss to skip it)\n`);
|
|
380
|
+
const attached = attachGloss(original, gloss);
|
|
381
|
+
if (attached.outcome !== "opaque")
|
|
382
|
+
tally.asked += 1;
|
|
383
|
+
if (attached.outcome === "absent")
|
|
384
|
+
tally.absent += 1;
|
|
385
|
+
request = attached.request;
|
|
386
|
+
}
|
|
387
|
+
const deliveryId = channel.notify(request);
|
|
388
|
+
token = undefined;
|
|
389
|
+
const collected = await channel.collectDecision(request.action_key.value, deliveryId);
|
|
390
|
+
if (collected.kind === "aborted")
|
|
391
|
+
break;
|
|
392
|
+
if (collected.kind === "skipped")
|
|
393
|
+
continue;
|
|
394
|
+
streams.out(`${describeOutcome(collected.outcome)}\n`);
|
|
395
|
+
if (!collected.outcome.ok)
|
|
396
|
+
refused = true;
|
|
397
|
+
else if (token !== undefined) {
|
|
398
|
+
// APRV-102: the rule-boxed panel of APRV-91's brief, from the one helper
|
|
399
|
+
// every token surface shares. This terminal is the only place the raw
|
|
400
|
+
// value will ever exist.
|
|
401
|
+
streams.out(`${tokenPanel(style(), request.action_key.value, token, TOKEN_NOTICE)}\n`);
|
|
402
|
+
}
|
|
403
|
+
}
|
|
404
|
+
}
|
|
405
|
+
finally {
|
|
406
|
+
channel.close();
|
|
407
|
+
}
|
|
408
|
+
// APRV-197. Chronic silence becomes a visible line: an operator who asked for
|
|
409
|
+
// glosses and read none now learns that a model was asked and did not answer,
|
|
410
|
+
// instead of concluding the feature was never built (which is exactly what
|
|
411
|
+
// happened under APRV-144's ceiling).
|
|
412
|
+
if (tally.absent > 0) {
|
|
413
|
+
streams.err(glossAbsenceLine("channel cli", tally.absent, tally.asked, GLOSS_TIMEOUT_MS));
|
|
414
|
+
}
|
|
415
|
+
return refused ? EXIT_INTEGRITY : EXIT_OK;
|
|
416
|
+
}
|
|
417
|
+
/** `approval channel <subcommand>` — `cli`, `web` (APRV-25), `telegram`. */
|
|
418
|
+
export function commandChannel(argv, streams, cwd) {
|
|
419
|
+
const sub = argv[0];
|
|
420
|
+
const rest = argv.slice(1);
|
|
421
|
+
const json = argv.includes("--json");
|
|
422
|
+
if (sub === undefined) {
|
|
423
|
+
return usageError(streams, json, "missing subcommand for `approval channel`", CHANNEL_HELP);
|
|
424
|
+
}
|
|
425
|
+
if (sub === "--help" || sub === "-h" || sub === "help") {
|
|
426
|
+
streams.out(`${CHANNEL_HELP}\n`);
|
|
427
|
+
return EXIT_OK;
|
|
428
|
+
}
|
|
429
|
+
if (sub === "cli")
|
|
430
|
+
return commandChannelCli(rest, streams, cwd);
|
|
431
|
+
// APRV-25: the local queue page. Long-lived, like `telegram listen`.
|
|
432
|
+
if (sub === "web")
|
|
433
|
+
return commandWeb(rest, streams, cwd);
|
|
434
|
+
if (sub === "telegram")
|
|
435
|
+
return commandTelegram(rest, streams, cwd);
|
|
436
|
+
return usageError(streams, json, `unknown subcommand ${JSON.stringify(sub)} for \`approval channel\``, CHANNEL_HELP);
|
|
437
|
+
}
|
|
438
|
+
//# sourceMappingURL=channel.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"channel.js","sourceRoot":"","sources":["../../../src/cli/channel.ts"],"names":[],"mappings":"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"}
|