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,294 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* `approval gate open|close|status` — the open window's CLI (APRV-214, amended
|
|
3
|
+
* SPEC.md §5.2).
|
|
4
|
+
*
|
|
5
|
+
* As everywhere else in this CLI, no logic lives here. Deriving the window,
|
|
6
|
+
* checking the actor, the cap and the window state, and every append are
|
|
7
|
+
* `core/gate-window.ts`; this file resolves paths and identity, runs the
|
|
8
|
+
* ceremony, chooses an exit code, and formats output.
|
|
9
|
+
*
|
|
10
|
+
* ## The ceremony, and why it is shaped like this
|
|
11
|
+
*
|
|
12
|
+
* `open` suspends the harness gate's policy for every tool call under the root.
|
|
13
|
+
* Three locks stand between an agent and that, and they are independent:
|
|
14
|
+
*
|
|
15
|
+
* 1. **The class.** `approval gate open` classifies `policy.core`
|
|
16
|
+
* (`core/command-class.ts`), which APPROVAL.md holds human-only, so the
|
|
17
|
+
* harness hook denies the command before it ever runs.
|
|
18
|
+
* 2. **The terminal.** `createPrompter` returns `null` unless `process.stdin`
|
|
19
|
+
* is a TTY, and a harness shell tool has no TTY. `--json` refuses for the
|
|
20
|
+
* same reason: a machine-readable answer implies a machine asking.
|
|
21
|
+
* 3. **The word.** One line is read and only exactly `understood` proceeds.
|
|
22
|
+
* There is deliberately NO `--yes` and no `--force`: a flag that answers
|
|
23
|
+
* the question is a way for something that cannot type to type.
|
|
24
|
+
*
|
|
25
|
+
* `close` has none of it beyond the human actor, because closing only ever
|
|
26
|
+
* tightens, and a ceremony guarding the safe direction is one people learn to
|
|
27
|
+
* type past. `status` decides nothing and writes nothing.
|
|
28
|
+
*/
|
|
29
|
+
import { HUMAN_ACTOR_ENV, resolveHumanActor } from "../core/attest.js";
|
|
30
|
+
import { closeWindow, DEFAULT_WINDOW, MAX_WINDOW_MS, openGateWindow, openWindow, remainingMs, } from "../core/gate-window.js";
|
|
31
|
+
import { parseDuration } from "../core/policy-load.js";
|
|
32
|
+
import { readVerifiedRecords } from "../core/state.js";
|
|
33
|
+
import { boolFlag, parseFlags, stringFlag } from "./args.js";
|
|
34
|
+
import { EXIT_INTEGRITY, EXIT_IO, EXIT_OK, EXIT_TORN_TAIL, EXIT_USAGE, } from "./exit-codes.js";
|
|
35
|
+
import { GATE_WINDOW_HELP } from "./help.js";
|
|
36
|
+
import { DEFAULT_LOG_PATH, resolvePath } from "./paths.js";
|
|
37
|
+
import { createPrompter } from "./prompt.js";
|
|
38
|
+
import { refusal as renderRefusal, style } from "./style.js";
|
|
39
|
+
import { usageErrorText } from "./usage.js";
|
|
40
|
+
/** The one answer that opens a window. Trimmed, never case-folded. */
|
|
41
|
+
const CONFIRMATION = "understood";
|
|
42
|
+
const FLAGS = {
|
|
43
|
+
"--for": "string",
|
|
44
|
+
"--reason": "string",
|
|
45
|
+
"--note": "string",
|
|
46
|
+
"--as": "string",
|
|
47
|
+
"--log": "string",
|
|
48
|
+
"--json": "boolean",
|
|
49
|
+
"--help": "boolean",
|
|
50
|
+
"-h": "boolean",
|
|
51
|
+
};
|
|
52
|
+
function usageError(streams, json, message) {
|
|
53
|
+
if (json)
|
|
54
|
+
streams.err(`${JSON.stringify({ error: { code: "usage", message } })}\n`);
|
|
55
|
+
else
|
|
56
|
+
streams.err(usageErrorText(message, GATE_WINDOW_HELP));
|
|
57
|
+
return EXIT_USAGE;
|
|
58
|
+
}
|
|
59
|
+
/**
|
|
60
|
+
* Map a refusal onto the frozen exit table.
|
|
61
|
+
*
|
|
62
|
+
* Everything this verb DECIDED is {@link EXIT_INTEGRITY} — the command was
|
|
63
|
+
* well-formed, the runtime understood it, and the answer is no. Only facts
|
|
64
|
+
* about the filesystem are {@link EXIT_IO}, and only a crashed write is
|
|
65
|
+
* {@link EXIT_TORN_TAIL}: the same split every other verb draws.
|
|
66
|
+
*/
|
|
67
|
+
function refusalExitCode(refusal) {
|
|
68
|
+
switch (refusal.code) {
|
|
69
|
+
case "log-unreadable":
|
|
70
|
+
return EXIT_IO;
|
|
71
|
+
case "log-torn-tail":
|
|
72
|
+
return EXIT_TORN_TAIL;
|
|
73
|
+
case "append-failed":
|
|
74
|
+
switch (refusal.append?.code) {
|
|
75
|
+
case "corrupt-tail":
|
|
76
|
+
return EXIT_TORN_TAIL;
|
|
77
|
+
case "io":
|
|
78
|
+
case "lock-timeout":
|
|
79
|
+
return EXIT_IO;
|
|
80
|
+
default:
|
|
81
|
+
return EXIT_INTEGRITY;
|
|
82
|
+
}
|
|
83
|
+
default:
|
|
84
|
+
return EXIT_INTEGRITY;
|
|
85
|
+
}
|
|
86
|
+
}
|
|
87
|
+
function emitRefusal(streams, json, refusal) {
|
|
88
|
+
if (json) {
|
|
89
|
+
const error = { code: refusal.code, message: refusal.message };
|
|
90
|
+
if (refusal.append !== undefined)
|
|
91
|
+
error["append"] = refusal.append.code;
|
|
92
|
+
streams.err(`${JSON.stringify({ ok: false, error })}\n`);
|
|
93
|
+
}
|
|
94
|
+
else {
|
|
95
|
+
streams.err(`${renderRefusal(style({ json }), refusal.code, refusal.message)}\n`);
|
|
96
|
+
}
|
|
97
|
+
return refusalExitCode(refusal);
|
|
98
|
+
}
|
|
99
|
+
function emitJson(streams, value) {
|
|
100
|
+
streams.out(`${JSON.stringify(value)}\n`);
|
|
101
|
+
}
|
|
102
|
+
/** A refusal built here rather than in core, in core's own shape. */
|
|
103
|
+
function refuse(code, message) {
|
|
104
|
+
return { ok: false, code, message };
|
|
105
|
+
}
|
|
106
|
+
/** How a window is reported, in text and in `--json`, from one place. */
|
|
107
|
+
function windowJson(window, now) {
|
|
108
|
+
return {
|
|
109
|
+
seq: window.seq,
|
|
110
|
+
opened_at: window.openedAt,
|
|
111
|
+
opened_by: window.openedBy,
|
|
112
|
+
reason: window.reason,
|
|
113
|
+
expires_at: window.expiresAt,
|
|
114
|
+
remaining_ms: remainingMs(window, now),
|
|
115
|
+
bypassed: window.bypassCount,
|
|
116
|
+
scope: "hook",
|
|
117
|
+
};
|
|
118
|
+
}
|
|
119
|
+
/** `1h 05m`, `4m 12s`: enough for a person to decide whether to close it. */
|
|
120
|
+
function humanRemaining(ms) {
|
|
121
|
+
const seconds = Math.max(0, Math.round(ms / 1_000));
|
|
122
|
+
const hours = Math.floor(seconds / 3_600);
|
|
123
|
+
const minutes = Math.floor((seconds % 3_600) / 60);
|
|
124
|
+
if (hours > 0)
|
|
125
|
+
return `${String(hours)}h ${String(minutes).padStart(2, "0")}m`;
|
|
126
|
+
return `${String(minutes)}m ${String(seconds % 60).padStart(2, "0")}s`;
|
|
127
|
+
}
|
|
128
|
+
// ---------------------------------------------------------------------------
|
|
129
|
+
// The statement a person reads before typing
|
|
130
|
+
// ---------------------------------------------------------------------------
|
|
131
|
+
/**
|
|
132
|
+
* What is about to happen, in plain sentences, before one word is read.
|
|
133
|
+
*
|
|
134
|
+
* It states the consequences AND the limits, because a person who believes the
|
|
135
|
+
* window is narrower than it is will open one carelessly, and a person who
|
|
136
|
+
* believes it is wider than it is will hand-edit the hook out of the harness
|
|
137
|
+
* instead — which is the ungated, unrecorded session this whole verb exists to
|
|
138
|
+
* replace.
|
|
139
|
+
*/
|
|
140
|
+
function statement(root, durationText, expiresAt, reason, actor) {
|
|
141
|
+
return [
|
|
142
|
+
"approval gate open — a human-only ceremony (SPEC.md §5.2, \"The open window\")",
|
|
143
|
+
"",
|
|
144
|
+
`You are about to open the harness gate in ${root} for ${durationText}, until ${expiresAt}.`,
|
|
145
|
+
"Until it closes:",
|
|
146
|
+
" - every hook-gated shell command and file edit an agent makes under that root is",
|
|
147
|
+
" ALLOWED without approval, whatever APPROVAL.md says about it;",
|
|
148
|
+
" - each one appends a `gate.bypassed` record (tool, classes, summary);",
|
|
149
|
+
" - nothing is charged to a budget and nothing enters the retrospective sample;",
|
|
150
|
+
" - `approval status` reports UNHEALTHY while the window is open;",
|
|
151
|
+
" - what STAYS denied: writes aimed at .approval/log/ (`log.mutate`), every",
|
|
152
|
+
" `human-only` class, and any command the classifier cannot read;",
|
|
153
|
+
" - a log the hook cannot read or verify still denies.",
|
|
154
|
+
"",
|
|
155
|
+
` reason: ${reason}`,
|
|
156
|
+
` opened by: ${actor}`,
|
|
157
|
+
"",
|
|
158
|
+
"Close it early with `approval gate close`. It lapses at the time above; nothing",
|
|
159
|
+
"is appended then.",
|
|
160
|
+
"",
|
|
161
|
+
].join("\n");
|
|
162
|
+
}
|
|
163
|
+
// ---------------------------------------------------------------------------
|
|
164
|
+
// approval gate
|
|
165
|
+
// ---------------------------------------------------------------------------
|
|
166
|
+
export function commandGate(argv, streams, cwd, deps = {}) {
|
|
167
|
+
const json = argv.includes("--json");
|
|
168
|
+
const parsed = parseFlags(argv, FLAGS);
|
|
169
|
+
if (!parsed.ok)
|
|
170
|
+
return usageError(streams, json, parsed.message);
|
|
171
|
+
if (boolFlag(parsed.flags, "--help") || boolFlag(parsed.flags, "-h")) {
|
|
172
|
+
streams.out(`${GATE_WINDOW_HELP}\n`);
|
|
173
|
+
return EXIT_OK;
|
|
174
|
+
}
|
|
175
|
+
const sub = parsed.positionals[0];
|
|
176
|
+
if (sub === undefined) {
|
|
177
|
+
return usageError(streams, json, "missing subcommand: open, close or status");
|
|
178
|
+
}
|
|
179
|
+
const extra = parsed.positionals[1];
|
|
180
|
+
if (extra !== undefined) {
|
|
181
|
+
return usageError(streams, json, `unexpected argument ${JSON.stringify(extra)}`);
|
|
182
|
+
}
|
|
183
|
+
const logPath = resolvePath(stringFlag(parsed.flags, "--log"), DEFAULT_LOG_PATH, cwd);
|
|
184
|
+
switch (sub) {
|
|
185
|
+
case "open":
|
|
186
|
+
return gateOpen(parsed.flags, streams, cwd, logPath, json, deps);
|
|
187
|
+
case "close":
|
|
188
|
+
return gateClose(parsed.flags, streams, logPath, json);
|
|
189
|
+
case "status":
|
|
190
|
+
return gateStatus(streams, logPath, json);
|
|
191
|
+
default:
|
|
192
|
+
return usageError(streams, json, `unknown subcommand ${JSON.stringify(sub)}: expected open, close or status`);
|
|
193
|
+
}
|
|
194
|
+
}
|
|
195
|
+
function gateOpen(flags, streams, cwd, logPath, json, deps) {
|
|
196
|
+
// 1. Usage first, so a typo costs nothing and reaches no ceremony.
|
|
197
|
+
const durationText = stringFlag(flags, "--for") ?? DEFAULT_WINDOW;
|
|
198
|
+
const durationMs = parseDuration(durationText);
|
|
199
|
+
if (durationMs === null) {
|
|
200
|
+
return usageError(streams, json, `--for expects a duration like 5m, 30m, 2h, got ${JSON.stringify(durationText)}`);
|
|
201
|
+
}
|
|
202
|
+
const reasonFlag = stringFlag(flags, "--reason");
|
|
203
|
+
if (reasonFlag === null) {
|
|
204
|
+
return usageError(streams, json, "--reason is required: a bypass nobody stated a reason for is a bypass nobody can review");
|
|
205
|
+
}
|
|
206
|
+
// 2. The refusals the verb decides, in the order SPEC.md §11.2 lists them.
|
|
207
|
+
if (reasonFlag.trim().length === 0) {
|
|
208
|
+
return emitRefusal(streams, json, refuse("gate-reason-required", "--reason was empty; say what the window is for"));
|
|
209
|
+
}
|
|
210
|
+
if (durationMs > MAX_WINDOW_MS) {
|
|
211
|
+
return emitRefusal(streams, json, refuse("gate-duration-too-long", `--for ${JSON.stringify(durationText)} is longer than the 24h cap: a bypass that outlives the attention of the person who opened it is a bypass nobody is watching`));
|
|
212
|
+
}
|
|
213
|
+
const asFlag = stringFlag(flags, "--as");
|
|
214
|
+
const actor = resolveHumanActor(asFlag === null ? {} : { actor: asFlag });
|
|
215
|
+
if (actor === null) {
|
|
216
|
+
return emitRefusal(streams, json, refuse("actor-not-human", `opening the gate requires a human identity: pass --as human:<id> or set ${HUMAN_ACTOR_ENV}. This is the one act that suspends the policy, so an agent identity is refused here as well as in the log's own schema`));
|
|
217
|
+
}
|
|
218
|
+
// 3. The terminal. `--json` is refused for the same reason a pipe is: an
|
|
219
|
+
// answer shaped for a machine implies a machine asking the question, and
|
|
220
|
+
// what this asks for is a person's assent.
|
|
221
|
+
if (json) {
|
|
222
|
+
return emitRefusal(streams, json, refuse("gate-stdin-not-tty", "`gate open` has no --json form: it is a ceremony a person performs at a terminal, and a machine-readable answer would imply a machine asking. Run it in a terminal with no --json"));
|
|
223
|
+
}
|
|
224
|
+
const prompter = deps.prompter === undefined ? createPrompter(streams) : deps.prompter;
|
|
225
|
+
if (prompter === null) {
|
|
226
|
+
return emitRefusal(streams, json, refuse("gate-stdin-not-tty", "stdin is not a terminal, so nobody can be asked. There is deliberately no --yes and no --force: a flag that answers this question is a way for something that cannot type to type. Run it from a terminal"));
|
|
227
|
+
}
|
|
228
|
+
const expiresAt = new Date(Date.now() + durationMs).toISOString();
|
|
229
|
+
streams.out(statement(cwd, durationText, expiresAt, reasonFlag.trim(), actor));
|
|
230
|
+
const answer = prompter.readLine(`Type \`${CONFIRMATION}\` to open the window, anything else to abort: `);
|
|
231
|
+
// `null` is EOF (Ctrl-D, or the terminal going away), and it aborts like any
|
|
232
|
+
// other answer that is not the word.
|
|
233
|
+
if (answer === null || answer.trim() !== CONFIRMATION) {
|
|
234
|
+
return emitRefusal(streams, json, refuse("gate-confirmation-mismatch", `the window was not opened: the answer must be exactly \`${CONFIRMATION}\`. Nothing was appended`));
|
|
235
|
+
}
|
|
236
|
+
const result = openWindow(logPath, { durationText, durationMs, reason: reasonFlag.trim() }, actor, {});
|
|
237
|
+
if (!result.ok)
|
|
238
|
+
return emitRefusal(streams, json, result);
|
|
239
|
+
streams.out(`gate OPEN at seq ${String(result.record.seq)} until ${result.window.expiresAt} (${durationText}), opened by ${actor}\n` +
|
|
240
|
+
"every gated tool call under this root is now allowed without approval and recorded as gate.bypassed;\n" +
|
|
241
|
+
"`approval status` reports unhealthy until it closes. Close it with `approval gate close`.\n");
|
|
242
|
+
return EXIT_OK;
|
|
243
|
+
}
|
|
244
|
+
function gateClose(flags, streams, logPath, json) {
|
|
245
|
+
const asFlag = stringFlag(flags, "--as");
|
|
246
|
+
const actor = resolveHumanActor(asFlag === null ? {} : { actor: asFlag });
|
|
247
|
+
if (actor === null) {
|
|
248
|
+
return emitRefusal(streams, json, refuse("actor-not-human", `closing the gate requires a human identity: pass --as human:<id> or set ${HUMAN_ACTOR_ENV}. The pair is one ceremony and both halves are the human's`));
|
|
249
|
+
}
|
|
250
|
+
const note = stringFlag(flags, "--note");
|
|
251
|
+
const result = closeWindow(logPath, actor, note === null ? {} : { note });
|
|
252
|
+
if (!result.ok)
|
|
253
|
+
return emitRefusal(streams, json, result);
|
|
254
|
+
if (json) {
|
|
255
|
+
emitJson(streams, {
|
|
256
|
+
ok: true,
|
|
257
|
+
seq: result.record.seq,
|
|
258
|
+
opened_seq: result.closed.seq,
|
|
259
|
+
actor,
|
|
260
|
+
bypassed: result.closed.bypassCount,
|
|
261
|
+
});
|
|
262
|
+
}
|
|
263
|
+
else {
|
|
264
|
+
streams.out(`gate CLOSED at seq ${String(result.record.seq)}: the window opened at seq ${String(result.closed.seq)} by ${result.closed.openedBy} is over, after ${String(result.closed.bypassCount)} bypassed call(s)\n`);
|
|
265
|
+
}
|
|
266
|
+
return EXIT_OK;
|
|
267
|
+
}
|
|
268
|
+
function gateStatus(streams, logPath, json) {
|
|
269
|
+
const read = readVerifiedRecords(logPath);
|
|
270
|
+
if (!read.ok)
|
|
271
|
+
return emitRefusal(streams, json, refuse(read.code, read.message));
|
|
272
|
+
const now = Date.now();
|
|
273
|
+
const window = openGateWindow(read.records, now);
|
|
274
|
+
if (json) {
|
|
275
|
+
emitJson(streams, {
|
|
276
|
+
ok: true,
|
|
277
|
+
open: window !== null,
|
|
278
|
+
window: window === null ? null : windowJson(window, now),
|
|
279
|
+
});
|
|
280
|
+
return EXIT_OK;
|
|
281
|
+
}
|
|
282
|
+
const st = style({ json });
|
|
283
|
+
if (window === null) {
|
|
284
|
+
streams.out(`gate: ${st.ok("closed")} — the policy decides every gated tool call\n`);
|
|
285
|
+
return EXIT_OK;
|
|
286
|
+
}
|
|
287
|
+
streams.out(`gate: ${st.warn("OPEN")} until ${window.expiresAt} (${humanRemaining(remainingMs(window, now))} left)\n` +
|
|
288
|
+
` opened by ${window.openedBy} at seq ${String(window.seq)} (${window.openedAt})\n` +
|
|
289
|
+
` reason: ${window.reason}\n` +
|
|
290
|
+
` bypassed: ${String(window.bypassCount)} call(s) so far\n` +
|
|
291
|
+
" close it with `approval gate close`\n");
|
|
292
|
+
return EXIT_OK;
|
|
293
|
+
}
|
|
294
|
+
//# sourceMappingURL=gate-window.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"gate-window.js","sourceRoot":"","sources":["../../../src/cli/gate-window.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,68 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* The gate verbs of SPEC.md §10.1: `approval register`, `approval request`,
|
|
3
|
+
* `approval grant|reject|revoke`, and `approval expire`.
|
|
4
|
+
*
|
|
5
|
+
* As everywhere else in this CLI, **no logic lives here.** State derivation,
|
|
6
|
+
* transition legality, TTL arithmetic, attestation, and budgets are all
|
|
7
|
+
* `core/gate.ts`; frontmatter reading is `core/frontmatter.ts`; the append is
|
|
8
|
+
* `core/log.ts`. This file resolves paths and identity, chooses an exit code,
|
|
9
|
+
* and formats output.
|
|
10
|
+
*
|
|
11
|
+
* Four choices are load-bearing enough to state plainly.
|
|
12
|
+
*
|
|
13
|
+
* **A gate refusal is exit 1, not exit 2.** "You may not do that" is not a
|
|
14
|
+
* usage error — the command was well-formed, the runtime understood it, and the
|
|
15
|
+
* answer is no. Grouping refusals with typos would train agents to retry with
|
|
16
|
+
* different flags when the correct response is to ask a human. Exit 2 stays what
|
|
17
|
+
* it has always been: an unknown flag, a missing argument, an unresolvable
|
|
18
|
+
* identity. The frozen `error.code` inside `--json` is what a caller branches on
|
|
19
|
+
* to tell *which* refusal it was.
|
|
20
|
+
*
|
|
21
|
+
* **The log supplies the action's declaration, not flags.** `approval request
|
|
22
|
+
* <task> --action <key>` reads the action's class, cost, reversibility and
|
|
23
|
+
* summary from the `task.registered` record in the log — the same record
|
|
24
|
+
* `approval register` wrote from the envelope. There are no `--class` /
|
|
25
|
+
* `--cost` flags, deliberately: an agent that could name its own class at
|
|
26
|
+
* request time could declare `read.web` for an action registered as
|
|
27
|
+
* `financial.spend`, and SPEC.md §7's "class MUST be declared before a token can
|
|
28
|
+
* be requested" would mean nothing. Register once from the file; request against
|
|
29
|
+
* what was registered. A task file edited after registration is `envelope.drift`
|
|
30
|
+
* (M5), not a silent re-declaration.
|
|
31
|
+
*
|
|
32
|
+
* **`register` reads task files but never writes them.** Unknown frontmatter
|
|
33
|
+
* keys are preserved trivially here because nothing is rewritten at all;
|
|
34
|
+
* round-trip rewriting is M6.
|
|
35
|
+
*
|
|
36
|
+
* **grant / reject / revoke are human-only**, via `resolveHumanActor` — `--as
|
|
37
|
+
* human:<id>` or `APPROVAL_HUMAN`, refused at exit 2 when absent or when it
|
|
38
|
+
* names an agent. `expire` takes no identity at all: it is the system verb, and
|
|
39
|
+
* `core/gate.ts` stamps `system:gate`.
|
|
40
|
+
*
|
|
41
|
+
* **This layer no longer reads the clock.** It used to pass `new Date()` into
|
|
42
|
+
* every gate call; under amended SPEC.md §8 (A2) a gate-typed event's `ts` is
|
|
43
|
+
* assigned inside core at the write boundary, and there is no parameter here to
|
|
44
|
+
* pass one through. Nothing about determinism is lost — core reads an injected
|
|
45
|
+
* clock — and one caller-supplied-timestamp seam is gone.
|
|
46
|
+
*/
|
|
47
|
+
import { type Decision } from "../core/gate.js";
|
|
48
|
+
import type { Streams } from "./main.js";
|
|
49
|
+
export declare function commandRegister(argv: string[], streams: Streams, cwd: string): number;
|
|
50
|
+
export declare function commandRequest(argv: string[], streams: Streams, cwd: string): number;
|
|
51
|
+
export declare function commandDecide(decision: Decision, argv: string[], streams: Streams, cwd: string): number;
|
|
52
|
+
/**
|
|
53
|
+
* `approval withdraw <task> --action <key>` — the requester takes its own
|
|
54
|
+
* pending request back (APRV-106).
|
|
55
|
+
*
|
|
56
|
+
* Agent-facing, unlike every other terminal verb here: the whole point is that
|
|
57
|
+
* the party who asked can stop asking, and the party who asks is usually an
|
|
58
|
+
* agent. Identity resolves through {@link resolvePrincipalActor}, and the gate
|
|
59
|
+
* then checks it against the actor on the `approval.requested` record — so
|
|
60
|
+
* passing `--as` does not let a caller withdraw someone else's request, it only
|
|
61
|
+
* lets the caller say who it is.
|
|
62
|
+
*
|
|
63
|
+
* The task id is positional and the action key is a flag, matching
|
|
64
|
+
* `approval request` exactly: the two verbs are the open and the close of one
|
|
65
|
+
* gesture, and an agent that can spell one can spell the other.
|
|
66
|
+
*/
|
|
67
|
+
export declare function commandWithdraw(argv: string[], streams: Streams, cwd: string): number;
|
|
68
|
+
export declare function commandExpire(argv: string[], streams: Streams, cwd: string): number;
|