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,169 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* The checkpoint tap: custody, the offer, the prompt text, the signature
|
|
3
|
+
* (APRV-257, the delivery half of APRV-220).
|
|
4
|
+
*
|
|
5
|
+
* APRV-220 built the record and gave a human exactly one way to sign one:
|
|
6
|
+
* `approval log checkpoint` at a terminal, remembered. This file is what makes
|
|
7
|
+
* it happen without the remembering, and it is deliberately the ONLY file
|
|
8
|
+
* between a channel and a signature.
|
|
9
|
+
*
|
|
10
|
+
* ## Why custody lives here now
|
|
11
|
+
*
|
|
12
|
+
* `core/checkpoint.ts` takes the private key as a value and reads it from
|
|
13
|
+
* nowhere, so that one file decides where a checkpoint key may come from. Until
|
|
14
|
+
* this task that file was `cli/log-checkpoint.ts`, because the terminal verb was
|
|
15
|
+
* the only caller. It is not any more: the Telegram listener and the CLI channel
|
|
16
|
+
* both sign now. So the decision moved here rather than being copied, and
|
|
17
|
+
* `cli/log-checkpoint.ts` calls {@link resolveCheckpointKey} like everyone else.
|
|
18
|
+
* There is still exactly one place to read to learn every way a key can reach a
|
|
19
|
+
* signature, which was the whole property.
|
|
20
|
+
*
|
|
21
|
+
* Two sources, in this order, unchanged from APRV-220:
|
|
22
|
+
*
|
|
23
|
+
* 1. `--key-file <path>`, for a key an operator keeps outside the vault.
|
|
24
|
+
* 2. The credential vault, under `approval.checkpoint.key`. Encrypted at rest
|
|
25
|
+
* under the passphrase `vault.passphrase_env` names, which
|
|
26
|
+
* `core/child-env.ts` strips from every child this runtime spawns
|
|
27
|
+
* (APRV-205), behind a file whose reading classifies `account.credential`.
|
|
28
|
+
*
|
|
29
|
+
* There is no `--key` flag and no environment variable holding the key.
|
|
30
|
+
*
|
|
31
|
+
* ## Why an agent-launched process cannot reach any of this
|
|
32
|
+
*
|
|
33
|
+
* Three independent locks, and the tap adds none of its own — it inherits all
|
|
34
|
+
* three, which is why the tap can be built at all:
|
|
35
|
+
*
|
|
36
|
+
* 1. **Classification.** `approval log checkpoint` and `approval setup
|
|
37
|
+
* checkpoint` classify `policy.core` in `core/command-class.ts`, which the
|
|
38
|
+
* reference policy holds `human-only`, so the Claude Code hook denies both
|
|
39
|
+
* with `hook-class-human-only` before a process starts.
|
|
40
|
+
* 2. **The passphrase.** `core/child-env.ts` strips `vault.passphrase_env` from
|
|
41
|
+
* every child this runtime spawns, so a process an agent launched cannot
|
|
42
|
+
* open the vault even if it ran this code.
|
|
43
|
+
* 3. **The launch.** The listener holds the passphrase because a HUMAN
|
|
44
|
+
* exported it into the shell they started `approval up` in. Nothing an agent
|
|
45
|
+
* can do puts it into a process the agent controls.
|
|
46
|
+
*
|
|
47
|
+
* `tests/checkpoint-tap.test.ts` proves the first two and proves the third
|
|
48
|
+
* structurally: the hook's module graph never reaches this file.
|
|
49
|
+
*
|
|
50
|
+
* ## What the human is shown is what gets signed
|
|
51
|
+
*
|
|
52
|
+
* The offer carries a `(seq, hash)`; the prompt prints it; the signature covers
|
|
53
|
+
* it. The head may have moved several times over between the prompt and the tap
|
|
54
|
+
* — a phone is in a pocket and a daemon is not — and
|
|
55
|
+
* {@link ../core/checkpoint.js appendCheckpointAt} signs the head that was on
|
|
56
|
+
* the screen, checking first that this chain still carries those bytes at that
|
|
57
|
+
* seq. APRV-220's verify rule (a checkpoint signs any seq below its own) exists
|
|
58
|
+
* precisely so this is a legal record rather than a clever one.
|
|
59
|
+
*/
|
|
60
|
+
import { type CheckpointOffer } from "../core/checkpoint.js";
|
|
61
|
+
/** Where a policy is, spelled the way every CLI verb spells it. */
|
|
62
|
+
export interface PolicyWhere {
|
|
63
|
+
file?: string;
|
|
64
|
+
dir?: string;
|
|
65
|
+
}
|
|
66
|
+
/** Everything a surface needs to offer and take a checkpoint. */
|
|
67
|
+
export interface CheckpointTap {
|
|
68
|
+
logPath: string;
|
|
69
|
+
policy: PolicyWhere;
|
|
70
|
+
/** `--key-file`, absolute, or `null` for the vault. */
|
|
71
|
+
keyFile: string | null;
|
|
72
|
+
/** An explicit vault path, or `null` for the one beside the log. */
|
|
73
|
+
vault: string | null;
|
|
74
|
+
schemaDir?: string;
|
|
75
|
+
}
|
|
76
|
+
/** Why no key could be had. One code: the repair is the message, not a branch. */
|
|
77
|
+
export declare const CHECKPOINT_KEY_REFUSAL = "checkpoint-key-unreadable";
|
|
78
|
+
export type KeyResolution = {
|
|
79
|
+
ok: true;
|
|
80
|
+
privateKey: string;
|
|
81
|
+
} | {
|
|
82
|
+
ok: false;
|
|
83
|
+
code: string;
|
|
84
|
+
message: string;
|
|
85
|
+
};
|
|
86
|
+
/**
|
|
87
|
+
* The private key, or a refusal naming which source failed and how to fix it.
|
|
88
|
+
*
|
|
89
|
+
* Moved verbatim from `cli/log-checkpoint.ts` (APRV-257) so that the terminal
|
|
90
|
+
* verb, the Telegram listener and the CLI channel share one answer to "where
|
|
91
|
+
* may a checkpoint key come from". The sentences are unchanged: an operator who
|
|
92
|
+
* has seen this refusal once should not meet it in new words on another
|
|
93
|
+
* surface.
|
|
94
|
+
*/
|
|
95
|
+
export declare function resolveCheckpointKey(keyFile: string | null, logPath: string, vaultFlag: string | null, policyWhere: PolicyWhere, cwd: string,
|
|
96
|
+
/**
|
|
97
|
+
* Where the passphrase is read from. `process.env` in production.
|
|
98
|
+
*
|
|
99
|
+
* A seam and not a back door, and the same one `setup adapter` carries: it
|
|
100
|
+
* goes through {@link passphraseFrom}, which is the function `approval vault
|
|
101
|
+
* set` uses, and it never resolves `.approval/env` (SPEC.md §11.1 invariant
|
|
102
|
+
* 7). Injectable so a suite can prove the vault path without mutating an
|
|
103
|
+
* environment every other test in the process shares.
|
|
104
|
+
*/
|
|
105
|
+
env?: NodeJS.ProcessEnv): KeyResolution;
|
|
106
|
+
/**
|
|
107
|
+
* The checkpoint this log is owed, or `null`.
|
|
108
|
+
*
|
|
109
|
+
* Reads the policy first and gives up the moment it names no cadence, so a
|
|
110
|
+
* dispatch cycle on a gate that has never turned checkpoints on pays one policy
|
|
111
|
+
* load and no log walk. Everything after that is
|
|
112
|
+
* {@link ../core/checkpoint.js checkpointDue} over verified records, which is
|
|
113
|
+
* the same call the daemon's warning and doctor's row make: three surfaces,
|
|
114
|
+
* one rule, no arrangement in which they disagree.
|
|
115
|
+
*
|
|
116
|
+
* A log that does not verify produces no offer and no complaint. A chain that
|
|
117
|
+
* is not fit to be read is not fit to be signed either, and the surfaces that
|
|
118
|
+
* exist to shout about a bad chain — `approval log verify`, the daemon's
|
|
119
|
+
* re-proof, doctor's `log` row — are already shouting.
|
|
120
|
+
*/
|
|
121
|
+
export declare function checkpointOfferFor(tap: CheckpointTap, now?: number): CheckpointOffer | null;
|
|
122
|
+
/**
|
|
123
|
+
* What a human reads before they tap, on every channel.
|
|
124
|
+
*
|
|
125
|
+
* One text for every surface, because the thing being consented to is identical
|
|
126
|
+
* and a phone that phrased it differently from a terminal would be two claims
|
|
127
|
+
* about one gesture. The `(seq, hash)` is first and whole: it is the entire
|
|
128
|
+
* content of the signature, and an approver who cannot see what they are
|
|
129
|
+
* signing is not approving anything.
|
|
130
|
+
*
|
|
131
|
+
* The last line is the one that keeps this honest. Declining costs nothing —
|
|
132
|
+
* there is no path in this runtime from a checkpoint that is due to a refusal
|
|
133
|
+
* of anything — and a prompt that implied otherwise would be manufacturing
|
|
134
|
+
* pressure for a signature.
|
|
135
|
+
*/
|
|
136
|
+
export declare function checkpointPromptLines(offer: CheckpointOffer): string[];
|
|
137
|
+
export type CheckpointTapResult = {
|
|
138
|
+
ok: true;
|
|
139
|
+
seq: number;
|
|
140
|
+
signed: {
|
|
141
|
+
seq: number;
|
|
142
|
+
hash: string;
|
|
143
|
+
};
|
|
144
|
+
fingerprint: string;
|
|
145
|
+
} | {
|
|
146
|
+
ok: false;
|
|
147
|
+
code: string;
|
|
148
|
+
message: string;
|
|
149
|
+
};
|
|
150
|
+
/**
|
|
151
|
+
* Sign one head and append the record, on the machine the channel runs on.
|
|
152
|
+
*
|
|
153
|
+
* `head` is the `(seq, hash)` that was on the screen, handed back by the
|
|
154
|
+
* channel unchanged. It is a head rather than the whole offer on purpose: by
|
|
155
|
+
* tap time the offer's cadence arithmetic is hours stale and nothing should be
|
|
156
|
+
* tempted to read it, while the head is the one part that must survive
|
|
157
|
+
* verbatim.
|
|
158
|
+
*
|
|
159
|
+
* The key is resolved at TAP time and not at offer time, and that ordering is
|
|
160
|
+
* the point: a prompt sitting on a phone for an hour holds no key material
|
|
161
|
+
* anywhere, and a listener whose vault the operator has since re-keyed refuses
|
|
162
|
+
* the tap with a sentence rather than signing with something stale.
|
|
163
|
+
*/
|
|
164
|
+
export declare function signCheckpointOffer(tap: CheckpointTap, head: {
|
|
165
|
+
seq: number;
|
|
166
|
+
hash: string;
|
|
167
|
+
}, actor: string, channel: string, cwd: string): CheckpointTapResult;
|
|
168
|
+
/** What a channel says on the message it just edited, once a tap has landed. */
|
|
169
|
+
export declare function checkpointSignedLines(result: CheckpointTapResult): string[];
|
|
@@ -0,0 +1,238 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* The checkpoint tap: custody, the offer, the prompt text, the signature
|
|
3
|
+
* (APRV-257, the delivery half of APRV-220).
|
|
4
|
+
*
|
|
5
|
+
* APRV-220 built the record and gave a human exactly one way to sign one:
|
|
6
|
+
* `approval log checkpoint` at a terminal, remembered. This file is what makes
|
|
7
|
+
* it happen without the remembering, and it is deliberately the ONLY file
|
|
8
|
+
* between a channel and a signature.
|
|
9
|
+
*
|
|
10
|
+
* ## Why custody lives here now
|
|
11
|
+
*
|
|
12
|
+
* `core/checkpoint.ts` takes the private key as a value and reads it from
|
|
13
|
+
* nowhere, so that one file decides where a checkpoint key may come from. Until
|
|
14
|
+
* this task that file was `cli/log-checkpoint.ts`, because the terminal verb was
|
|
15
|
+
* the only caller. It is not any more: the Telegram listener and the CLI channel
|
|
16
|
+
* both sign now. So the decision moved here rather than being copied, and
|
|
17
|
+
* `cli/log-checkpoint.ts` calls {@link resolveCheckpointKey} like everyone else.
|
|
18
|
+
* There is still exactly one place to read to learn every way a key can reach a
|
|
19
|
+
* signature, which was the whole property.
|
|
20
|
+
*
|
|
21
|
+
* Two sources, in this order, unchanged from APRV-220:
|
|
22
|
+
*
|
|
23
|
+
* 1. `--key-file <path>`, for a key an operator keeps outside the vault.
|
|
24
|
+
* 2. The credential vault, under `approval.checkpoint.key`. Encrypted at rest
|
|
25
|
+
* under the passphrase `vault.passphrase_env` names, which
|
|
26
|
+
* `core/child-env.ts` strips from every child this runtime spawns
|
|
27
|
+
* (APRV-205), behind a file whose reading classifies `account.credential`.
|
|
28
|
+
*
|
|
29
|
+
* There is no `--key` flag and no environment variable holding the key.
|
|
30
|
+
*
|
|
31
|
+
* ## Why an agent-launched process cannot reach any of this
|
|
32
|
+
*
|
|
33
|
+
* Three independent locks, and the tap adds none of its own — it inherits all
|
|
34
|
+
* three, which is why the tap can be built at all:
|
|
35
|
+
*
|
|
36
|
+
* 1. **Classification.** `approval log checkpoint` and `approval setup
|
|
37
|
+
* checkpoint` classify `policy.core` in `core/command-class.ts`, which the
|
|
38
|
+
* reference policy holds `human-only`, so the Claude Code hook denies both
|
|
39
|
+
* with `hook-class-human-only` before a process starts.
|
|
40
|
+
* 2. **The passphrase.** `core/child-env.ts` strips `vault.passphrase_env` from
|
|
41
|
+
* every child this runtime spawns, so a process an agent launched cannot
|
|
42
|
+
* open the vault even if it ran this code.
|
|
43
|
+
* 3. **The launch.** The listener holds the passphrase because a HUMAN
|
|
44
|
+
* exported it into the shell they started `approval up` in. Nothing an agent
|
|
45
|
+
* can do puts it into a process the agent controls.
|
|
46
|
+
*
|
|
47
|
+
* `tests/checkpoint-tap.test.ts` proves the first two and proves the third
|
|
48
|
+
* structurally: the hook's module graph never reaches this file.
|
|
49
|
+
*
|
|
50
|
+
* ## What the human is shown is what gets signed
|
|
51
|
+
*
|
|
52
|
+
* The offer carries a `(seq, hash)`; the prompt prints it; the signature covers
|
|
53
|
+
* it. The head may have moved several times over between the prompt and the tap
|
|
54
|
+
* — a phone is in a pocket and a daemon is not — and
|
|
55
|
+
* {@link ../core/checkpoint.js appendCheckpointAt} signs the head that was on
|
|
56
|
+
* the screen, checking first that this chain still carries those bytes at that
|
|
57
|
+
* seq. APRV-220's verify rule (a checkpoint signs any seq below its own) exists
|
|
58
|
+
* precisely so this is a legal record rather than a clever one.
|
|
59
|
+
*/
|
|
60
|
+
import { readFileSync } from "node:fs";
|
|
61
|
+
import { isAbsolute, resolve } from "node:path";
|
|
62
|
+
import { appendCheckpointAt, checkpointDue, checkpointPolicyOf, CHECKPOINT_KEY_CREDENTIAL, } from "../core/checkpoint.js";
|
|
63
|
+
import { readVerifiedRecords } from "../core/state.js";
|
|
64
|
+
import { loadPolicy } from "../core/policy-load.js";
|
|
65
|
+
import { getCredential, passphraseEnvFor, passphraseFrom, vaultPathFor } from "../core/vault.js";
|
|
66
|
+
/** Why no key could be had. One code: the repair is the message, not a branch. */
|
|
67
|
+
export const CHECKPOINT_KEY_REFUSAL = "checkpoint-key-unreadable";
|
|
68
|
+
function absolute(path, cwd) {
|
|
69
|
+
return isAbsolute(path) ? path : resolve(cwd, path);
|
|
70
|
+
}
|
|
71
|
+
/**
|
|
72
|
+
* The private key, or a refusal naming which source failed and how to fix it.
|
|
73
|
+
*
|
|
74
|
+
* Moved verbatim from `cli/log-checkpoint.ts` (APRV-257) so that the terminal
|
|
75
|
+
* verb, the Telegram listener and the CLI channel share one answer to "where
|
|
76
|
+
* may a checkpoint key come from". The sentences are unchanged: an operator who
|
|
77
|
+
* has seen this refusal once should not meet it in new words on another
|
|
78
|
+
* surface.
|
|
79
|
+
*/
|
|
80
|
+
export function resolveCheckpointKey(keyFile, logPath, vaultFlag, policyWhere, cwd,
|
|
81
|
+
/**
|
|
82
|
+
* Where the passphrase is read from. `process.env` in production.
|
|
83
|
+
*
|
|
84
|
+
* A seam and not a back door, and the same one `setup adapter` carries: it
|
|
85
|
+
* goes through {@link passphraseFrom}, which is the function `approval vault
|
|
86
|
+
* set` uses, and it never resolves `.approval/env` (SPEC.md §11.1 invariant
|
|
87
|
+
* 7). Injectable so a suite can prove the vault path without mutating an
|
|
88
|
+
* environment every other test in the process shares.
|
|
89
|
+
*/
|
|
90
|
+
env) {
|
|
91
|
+
if (keyFile !== null) {
|
|
92
|
+
const path = absolute(keyFile, cwd);
|
|
93
|
+
let text;
|
|
94
|
+
try {
|
|
95
|
+
text = readFileSync(path, "utf8").trim();
|
|
96
|
+
}
|
|
97
|
+
catch (cause) {
|
|
98
|
+
return {
|
|
99
|
+
ok: false,
|
|
100
|
+
code: CHECKPOINT_KEY_REFUSAL,
|
|
101
|
+
message: `--key-file ${path} could not be read (${cause instanceof Error ? cause.message : String(cause)}); nothing was appended`,
|
|
102
|
+
};
|
|
103
|
+
}
|
|
104
|
+
if (text.length === 0) {
|
|
105
|
+
return {
|
|
106
|
+
ok: false,
|
|
107
|
+
code: CHECKPOINT_KEY_REFUSAL,
|
|
108
|
+
message: `--key-file ${path} is empty; a checkpoint key is a base64 PKCS#8 Ed25519 private key on one line. Nothing was appended`,
|
|
109
|
+
};
|
|
110
|
+
}
|
|
111
|
+
return { ok: true, privateKey: text };
|
|
112
|
+
}
|
|
113
|
+
const vaultPath = vaultFlag === null ? vaultPathFor(logPath) : absolute(vaultFlag, cwd);
|
|
114
|
+
const passphraseEnv = passphraseEnvFor(loadPolicy(policyWhere));
|
|
115
|
+
const passphrase = passphraseFrom(passphraseEnv, env ?? process.env);
|
|
116
|
+
if (passphrase === null) {
|
|
117
|
+
return {
|
|
118
|
+
ok: false,
|
|
119
|
+
code: CHECKPOINT_KEY_REFUSAL,
|
|
120
|
+
message: `${passphraseEnv} is unset or empty, so the vault holding ${CHECKPOINT_KEY_CREDENTIAL} could not be opened. The passphrase is read from that variable and from nowhere else; there is no --passphrase flag. Nothing was appended`,
|
|
121
|
+
};
|
|
122
|
+
}
|
|
123
|
+
const credential = getCredential(vaultPath, passphrase, CHECKPOINT_KEY_CREDENTIAL);
|
|
124
|
+
if (!credential.ok) {
|
|
125
|
+
return {
|
|
126
|
+
ok: false,
|
|
127
|
+
code: CHECKPOINT_KEY_REFUSAL,
|
|
128
|
+
message: `the checkpoint signing key could not be read from ${vaultPath} (${credential.code}: ${credential.message}). Mint one with \`approval setup checkpoint\`, or pass --key-file. Nothing was appended`,
|
|
129
|
+
};
|
|
130
|
+
}
|
|
131
|
+
return { ok: true, privateKey: credential.value };
|
|
132
|
+
}
|
|
133
|
+
// ---------------------------------------------------------------------------
|
|
134
|
+
// The offer
|
|
135
|
+
// ---------------------------------------------------------------------------
|
|
136
|
+
/**
|
|
137
|
+
* The checkpoint this log is owed, or `null`.
|
|
138
|
+
*
|
|
139
|
+
* Reads the policy first and gives up the moment it names no cadence, so a
|
|
140
|
+
* dispatch cycle on a gate that has never turned checkpoints on pays one policy
|
|
141
|
+
* load and no log walk. Everything after that is
|
|
142
|
+
* {@link ../core/checkpoint.js checkpointDue} over verified records, which is
|
|
143
|
+
* the same call the daemon's warning and doctor's row make: three surfaces,
|
|
144
|
+
* one rule, no arrangement in which they disagree.
|
|
145
|
+
*
|
|
146
|
+
* A log that does not verify produces no offer and no complaint. A chain that
|
|
147
|
+
* is not fit to be read is not fit to be signed either, and the surfaces that
|
|
148
|
+
* exist to shout about a bad chain — `approval log verify`, the daemon's
|
|
149
|
+
* re-proof, doctor's `log` row — are already shouting.
|
|
150
|
+
*/
|
|
151
|
+
export function checkpointOfferFor(tap, now) {
|
|
152
|
+
const configured = checkpointPolicyOf(tap.policy, tap.schemaDir);
|
|
153
|
+
if (configured.checkpointEveryMs === null || configured.publicKeys.length === 0)
|
|
154
|
+
return null;
|
|
155
|
+
const read = readVerifiedRecords(tap.logPath, tap.schemaDir === undefined ? {} : { schemaDir: tap.schemaDir });
|
|
156
|
+
if (!read.ok)
|
|
157
|
+
return null;
|
|
158
|
+
return checkpointDue({
|
|
159
|
+
records: read.records,
|
|
160
|
+
publicKeys: configured.publicKeys,
|
|
161
|
+
checkpointEveryMs: configured.checkpointEveryMs,
|
|
162
|
+
...(now === undefined ? {} : { now }),
|
|
163
|
+
});
|
|
164
|
+
}
|
|
165
|
+
/**
|
|
166
|
+
* What a human reads before they tap, on every channel.
|
|
167
|
+
*
|
|
168
|
+
* One text for every surface, because the thing being consented to is identical
|
|
169
|
+
* and a phone that phrased it differently from a terminal would be two claims
|
|
170
|
+
* about one gesture. The `(seq, hash)` is first and whole: it is the entire
|
|
171
|
+
* content of the signature, and an approver who cannot see what they are
|
|
172
|
+
* signing is not approving anything.
|
|
173
|
+
*
|
|
174
|
+
* The last line is the one that keeps this honest. Declining costs nothing —
|
|
175
|
+
* there is no path in this runtime from a checkpoint that is due to a refusal
|
|
176
|
+
* of anything — and a prompt that implied otherwise would be manufacturing
|
|
177
|
+
* pressure for a signature.
|
|
178
|
+
*/
|
|
179
|
+
export function checkpointPromptLines(offer) {
|
|
180
|
+
return [
|
|
181
|
+
`CHECKPOINT DUE — sign the log head at seq ${String(offer.head.seq)}?`,
|
|
182
|
+
`head seq ${String(offer.head.seq)} ${offer.head.hash}`,
|
|
183
|
+
offer.since === null
|
|
184
|
+
? "This log has never been checkpointed."
|
|
185
|
+
: `The newest checkpoint is at seq ${String(offer.since)}.`,
|
|
186
|
+
offer.warning,
|
|
187
|
+
"Signing appends one log.checkpoint saying that a key no agent process holds saw this head. It authorizes nothing, spends nothing, and decides no request.",
|
|
188
|
+
"The head may move before you tap. What is signed is the head named above, which is the one you are looking at.",
|
|
189
|
+
"Not signing is not a refusal of anything: a checkpoint that is owed is a warning at every layer and never a reason to hold up an action.",
|
|
190
|
+
];
|
|
191
|
+
}
|
|
192
|
+
/**
|
|
193
|
+
* Sign one head and append the record, on the machine the channel runs on.
|
|
194
|
+
*
|
|
195
|
+
* `head` is the `(seq, hash)` that was on the screen, handed back by the
|
|
196
|
+
* channel unchanged. It is a head rather than the whole offer on purpose: by
|
|
197
|
+
* tap time the offer's cadence arithmetic is hours stale and nothing should be
|
|
198
|
+
* tempted to read it, while the head is the one part that must survive
|
|
199
|
+
* verbatim.
|
|
200
|
+
*
|
|
201
|
+
* The key is resolved at TAP time and not at offer time, and that ordering is
|
|
202
|
+
* the point: a prompt sitting on a phone for an hour holds no key material
|
|
203
|
+
* anywhere, and a listener whose vault the operator has since re-keyed refuses
|
|
204
|
+
* the tap with a sentence rather than signing with something stale.
|
|
205
|
+
*/
|
|
206
|
+
export function signCheckpointOffer(tap, head, actor, channel, cwd) {
|
|
207
|
+
const key = resolveCheckpointKey(tap.keyFile, tap.logPath, tap.vault, tap.policy, cwd);
|
|
208
|
+
if (!key.ok)
|
|
209
|
+
return key;
|
|
210
|
+
const appended = appendCheckpointAt(tap.logPath, key.privateKey, actor, head, {
|
|
211
|
+
channel,
|
|
212
|
+
...(tap.schemaDir === undefined ? {} : { schemaDir: tap.schemaDir }),
|
|
213
|
+
});
|
|
214
|
+
if (!appended.ok)
|
|
215
|
+
return { ok: false, code: appended.code, message: appended.message };
|
|
216
|
+
return {
|
|
217
|
+
ok: true,
|
|
218
|
+
seq: appended.record.seq,
|
|
219
|
+
signed: { seq: appended.head.seq, hash: appended.head.hash },
|
|
220
|
+
fingerprint: appended.fingerprint,
|
|
221
|
+
};
|
|
222
|
+
}
|
|
223
|
+
/** What a channel says on the message it just edited, once a tap has landed. */
|
|
224
|
+
export function checkpointSignedLines(result) {
|
|
225
|
+
if (!result.ok) {
|
|
226
|
+
return [
|
|
227
|
+
"NOT CHECKPOINTED",
|
|
228
|
+
`${result.code}: ${result.message}`,
|
|
229
|
+
"Nothing was appended. The log is unchanged and no verdict anywhere depends on this.",
|
|
230
|
+
];
|
|
231
|
+
}
|
|
232
|
+
return [
|
|
233
|
+
"CHECKPOINTED",
|
|
234
|
+
`log.checkpoint at seq ${String(result.seq)}, signing head seq ${String(result.signed.seq)} ${result.signed.hash}`,
|
|
235
|
+
`key ${result.fingerprint}`,
|
|
236
|
+
];
|
|
237
|
+
}
|
|
238
|
+
//# sourceMappingURL=checkpoint-tap.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"checkpoint-tap.js","sourceRoot":"","sources":["../../../src/cli/checkpoint-tap.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,172 @@
|
|
|
1
|
+
import { resolve } from "node:path";
|
|
2
|
+
import { boolFlag, parseFlags, stringFlag } from "./args.js";
|
|
3
|
+
import { EXIT_INTEGRITY, EXIT_IO, EXIT_OK, EXIT_USAGE } from "./exit-codes.js";
|
|
4
|
+
import { CODEX_HELP } from "./help.js";
|
|
5
|
+
import { usageErrorText } from "./usage.js";
|
|
6
|
+
import { strictDoctor } from "../codex/doctor.js";
|
|
7
|
+
import { checkBundle, prepareBundle } from "../codex/templates.js";
|
|
8
|
+
function emitError(streams, json, code, message) {
|
|
9
|
+
if (json)
|
|
10
|
+
streams.err(`${JSON.stringify({ error: { code, message } })}\n`);
|
|
11
|
+
else
|
|
12
|
+
streams.err(`approval: ${message}\n`);
|
|
13
|
+
}
|
|
14
|
+
function usage(streams, json, message) {
|
|
15
|
+
if (json)
|
|
16
|
+
emitError(streams, true, "usage", message);
|
|
17
|
+
else
|
|
18
|
+
streams.err(usageErrorText(message, CODEX_HELP));
|
|
19
|
+
return EXIT_USAGE;
|
|
20
|
+
}
|
|
21
|
+
function required(flags, name) {
|
|
22
|
+
const value = stringFlag(flags, name);
|
|
23
|
+
return value === null || value.length === 0 ? null : value;
|
|
24
|
+
}
|
|
25
|
+
export function commandCodex(argv, streams, cwd) {
|
|
26
|
+
const json = argv.includes("--json");
|
|
27
|
+
const subcommand = argv[0];
|
|
28
|
+
const rest = argv.slice(1);
|
|
29
|
+
if (subcommand === undefined || subcommand === "--help" || subcommand === "-h") {
|
|
30
|
+
streams.out(`${CODEX_HELP}\n`);
|
|
31
|
+
return subcommand === undefined ? EXIT_USAGE : EXIT_OK;
|
|
32
|
+
}
|
|
33
|
+
if (subcommand === "prepare") {
|
|
34
|
+
const parsed = parseFlags(rest, {
|
|
35
|
+
"--instance": "string",
|
|
36
|
+
"--workspace": "string",
|
|
37
|
+
"--primary": "string",
|
|
38
|
+
"--install-root": "string",
|
|
39
|
+
"--output": "string",
|
|
40
|
+
"--codex": "string",
|
|
41
|
+
"--node": "string",
|
|
42
|
+
"--json": "boolean",
|
|
43
|
+
"--help": "boolean",
|
|
44
|
+
"-h": "boolean",
|
|
45
|
+
});
|
|
46
|
+
if (!parsed.ok)
|
|
47
|
+
return usage(streams, json, parsed.message);
|
|
48
|
+
if (boolFlag(parsed.flags, "--help") || boolFlag(parsed.flags, "-h")) {
|
|
49
|
+
streams.out(`${CODEX_HELP}\n`);
|
|
50
|
+
return EXIT_OK;
|
|
51
|
+
}
|
|
52
|
+
if (parsed.positionals.length > 0)
|
|
53
|
+
return usage(streams, json, "prepare takes flags only");
|
|
54
|
+
const names = ["--instance", "--workspace", "--primary", "--install-root", "--output", "--codex", "--node"];
|
|
55
|
+
const values = Object.fromEntries(names.map((name) => [name, required(parsed.flags, name)]));
|
|
56
|
+
const missing = names.find((name) => values[name] === null);
|
|
57
|
+
if (missing !== undefined)
|
|
58
|
+
return usage(streams, json, `prepare requires ${missing}`);
|
|
59
|
+
const result = prepareBundle({
|
|
60
|
+
instanceId: values["--instance"],
|
|
61
|
+
workspace: resolve(cwd, values["--workspace"]),
|
|
62
|
+
primary: resolve(cwd, values["--primary"]),
|
|
63
|
+
installRoot: resolve(cwd, values["--install-root"]),
|
|
64
|
+
output: resolve(cwd, values["--output"]),
|
|
65
|
+
codexExecutable: resolve(cwd, values["--codex"]),
|
|
66
|
+
nodeExecutable: resolve(cwd, values["--node"]),
|
|
67
|
+
});
|
|
68
|
+
if (!result.ok) {
|
|
69
|
+
emitError(streams, json, result.code, result.message);
|
|
70
|
+
return result.code === "manifest-invalid" || result.code === "output-overlap" ? EXIT_INTEGRITY : EXIT_IO;
|
|
71
|
+
}
|
|
72
|
+
if (json)
|
|
73
|
+
streams.out(`${JSON.stringify({ ok: true, inert: true, output: result.output, files: result.files, manifest: result.manifest })}\n`);
|
|
74
|
+
else
|
|
75
|
+
streams.out(`Prepared inert Codex host bundle at ${result.output}. Review it; no host configuration changed.\n`);
|
|
76
|
+
return EXIT_OK;
|
|
77
|
+
}
|
|
78
|
+
if (subcommand === "setup") {
|
|
79
|
+
const parsed = parseFlags(rest, {
|
|
80
|
+
"--check": "string",
|
|
81
|
+
"--json": "boolean",
|
|
82
|
+
"--help": "boolean",
|
|
83
|
+
"-h": "boolean",
|
|
84
|
+
});
|
|
85
|
+
if (!parsed.ok)
|
|
86
|
+
return usage(streams, json, parsed.message);
|
|
87
|
+
if (boolFlag(parsed.flags, "--help") || boolFlag(parsed.flags, "-h")) {
|
|
88
|
+
streams.out(`${CODEX_HELP}\n`);
|
|
89
|
+
return EXIT_OK;
|
|
90
|
+
}
|
|
91
|
+
if (parsed.positionals.length > 0)
|
|
92
|
+
return usage(streams, json, "setup takes flags only");
|
|
93
|
+
const directory = required(parsed.flags, "--check");
|
|
94
|
+
if (directory === null)
|
|
95
|
+
return usage(streams, json, "setup requires --check <bundle>");
|
|
96
|
+
const result = checkBundle(resolve(cwd, directory));
|
|
97
|
+
if (!result.ok) {
|
|
98
|
+
emitError(streams, json, result.code, result.message);
|
|
99
|
+
return EXIT_INTEGRITY;
|
|
100
|
+
}
|
|
101
|
+
const response = {
|
|
102
|
+
ok: true,
|
|
103
|
+
inert: true,
|
|
104
|
+
ready: false,
|
|
105
|
+
bundle: resolve(cwd, directory),
|
|
106
|
+
files: result.files,
|
|
107
|
+
reason: "broker-and-runner-not-shipped",
|
|
108
|
+
};
|
|
109
|
+
if (json)
|
|
110
|
+
streams.out(`${JSON.stringify(response)}\n`);
|
|
111
|
+
else
|
|
112
|
+
streams.out("Bundle is internally consistent and inert. Broker and runner are not shipped; do not activate it.\n");
|
|
113
|
+
return EXIT_OK;
|
|
114
|
+
}
|
|
115
|
+
if (subcommand === "doctor") {
|
|
116
|
+
const parsed = parseFlags(rest, {
|
|
117
|
+
"--manifest": "string",
|
|
118
|
+
"--strict": "boolean",
|
|
119
|
+
"--json": "boolean",
|
|
120
|
+
"--help": "boolean",
|
|
121
|
+
"-h": "boolean",
|
|
122
|
+
});
|
|
123
|
+
if (!parsed.ok)
|
|
124
|
+
return usage(streams, json, parsed.message);
|
|
125
|
+
if (boolFlag(parsed.flags, "--help") || boolFlag(parsed.flags, "-h")) {
|
|
126
|
+
streams.out(`${CODEX_HELP}\n`);
|
|
127
|
+
return EXIT_OK;
|
|
128
|
+
}
|
|
129
|
+
if (parsed.positionals.length > 0)
|
|
130
|
+
return usage(streams, json, "doctor takes flags only");
|
|
131
|
+
if (!boolFlag(parsed.flags, "--strict"))
|
|
132
|
+
return usage(streams, json, "doctor requires --strict");
|
|
133
|
+
const manifest = required(parsed.flags, "--manifest");
|
|
134
|
+
if (manifest === null)
|
|
135
|
+
return usage(streams, json, "doctor requires --manifest <path>");
|
|
136
|
+
const result = strictDoctor(resolve(cwd, manifest));
|
|
137
|
+
if (!result.ok) {
|
|
138
|
+
if (json)
|
|
139
|
+
streams.err(`${JSON.stringify({ ok: false, ready: false, error: { code: result.code, message: result.message }, findings: result.report?.findings ?? [] })}\n`);
|
|
140
|
+
else {
|
|
141
|
+
streams.err(`approval: ${result.message}\n`);
|
|
142
|
+
for (const finding of result.report?.findings ?? []) {
|
|
143
|
+
streams.err(` ${finding.code}${finding.path === undefined ? "" : ` ${finding.path}`}: ${finding.message}\n`);
|
|
144
|
+
}
|
|
145
|
+
}
|
|
146
|
+
return EXIT_INTEGRITY;
|
|
147
|
+
}
|
|
148
|
+
return EXIT_OK;
|
|
149
|
+
}
|
|
150
|
+
if (subcommand === "start" || subcommand === "serve") {
|
|
151
|
+
const parsed = parseFlags(rest, {
|
|
152
|
+
"--manifest": "string",
|
|
153
|
+
"--json": "boolean",
|
|
154
|
+
"--help": "boolean",
|
|
155
|
+
"-h": "boolean",
|
|
156
|
+
});
|
|
157
|
+
if (!parsed.ok)
|
|
158
|
+
return usage(streams, json, parsed.message);
|
|
159
|
+
if (boolFlag(parsed.flags, "--help") || boolFlag(parsed.flags, "-h")) {
|
|
160
|
+
streams.out(`${CODEX_HELP}\n`);
|
|
161
|
+
return EXIT_OK;
|
|
162
|
+
}
|
|
163
|
+
if (parsed.positionals.length > 0)
|
|
164
|
+
return usage(streams, json, `${subcommand} takes flags only`);
|
|
165
|
+
if (required(parsed.flags, "--manifest") === null)
|
|
166
|
+
return usage(streams, json, `${subcommand} requires --manifest <path>`);
|
|
167
|
+
emitError(streams, json, "codex-not-ready", `codex ${subcommand} is not implemented until APRV-325.2 and APRV-325.3 provide the broker and runner`);
|
|
168
|
+
return EXIT_INTEGRITY;
|
|
169
|
+
}
|
|
170
|
+
return usage(streams, json, `unknown codex subcommand ${JSON.stringify(subcommand)}`);
|
|
171
|
+
}
|
|
172
|
+
//# sourceMappingURL=codex.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"codex.js","sourceRoot":"","sources":["../../../src/cli/codex.ts"],"names":[],"mappings":"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"}
|