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,331 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* The dark-session detector (APRV-192): the log is asked what git already knows.
|
|
3
|
+
*
|
|
4
|
+
* ## The hole this closes
|
|
5
|
+
*
|
|
6
|
+
* APRV-151 built the CI-side grant cross-check, and its root cause is the thing
|
|
7
|
+
* that check cannot reach. A session whose harness never invoked the hook writes
|
|
8
|
+
* NO records at all: not a grant, not a refusal, not a request. Nothing inside
|
|
9
|
+
* such a session is in a position to notice, because the component that would
|
|
10
|
+
* have written the record is the component that did not run, and asking a
|
|
11
|
+
* session whether it is hooked asks the party under oversight to report its own
|
|
12
|
+
* oversight (SPEC.md §11). The CI guard sees only the diffs that reach a pull
|
|
13
|
+
* request; a session that ran dark and pushed nothing, or pushed to a branch
|
|
14
|
+
* nobody opened a pull request for, leaves the guard with nothing to read.
|
|
15
|
+
*
|
|
16
|
+
* So the direction is reversed. APRV-42's git evidence asks "does every log
|
|
17
|
+
* entry match git?"; this asks **"does every piece of git activity match a log
|
|
18
|
+
* entry?"** Git is the artifact a session cannot help producing: a commit has an
|
|
19
|
+
* author, a date and a tree, a linked worktree has a root and a birth, and none
|
|
20
|
+
* of those is authored by the runtime's hook. The absence of a record beside
|
|
21
|
+
* them is the signal.
|
|
22
|
+
*
|
|
23
|
+
* ## Two arms, because there are two questions
|
|
24
|
+
*
|
|
25
|
+
* **Arm A, evidence.** For each commit in the window, every guarded path it
|
|
26
|
+
* changed must carry evidence in the verified log that a human decided it. This
|
|
27
|
+
* is not reimplemented: it is {@link evaluateProtectedPaths}, APRV-151's own
|
|
28
|
+
* evaluator, called per commit, so the verdict vocabulary (`attested`,
|
|
29
|
+
* `granted-file`, `granted-command`), the recency bound, the exempt evidence
|
|
30
|
+
* surface and the `no-evidence` code are one implementation with two callers.
|
|
31
|
+
* Arm A runs over EVERY checkout, the primary included, because a guarded-path
|
|
32
|
+
* commit with no evidence is dark wherever it was made.
|
|
33
|
+
*
|
|
34
|
+
* **Arm B, silence.** A linked worktree that produced commits in the window (or
|
|
35
|
+
* that came into existence in it) and to which NOT ONE record in the window can
|
|
36
|
+
* be attributed is a dark session, whatever it touched. This is the arm that
|
|
37
|
+
* catches the APRV-151 root cause on paths the CI guard never sees, and it is
|
|
38
|
+
* the arm that needs an attribution rule.
|
|
39
|
+
*
|
|
40
|
+
* ## How a record is attributed to a worktree
|
|
41
|
+
*
|
|
42
|
+
* Hook task ids are `hook:<session>:<tool-use>` and carry no checkout, so the
|
|
43
|
+
* id is not the key. The bound material is. Every gated file-tool call binds
|
|
44
|
+
* `{tool, rule, file, …}` with `file` ABSOLUTE (`cli/hook.ts`), and every gated
|
|
45
|
+
* shell call binds `{command, cwd}` with `cwd` absolute. A record whose bound
|
|
46
|
+
* material names a path inside a worktree root was written by a session working
|
|
47
|
+
* in that worktree. That is PR #169's checkout-root anchoring, which APRV-151's
|
|
48
|
+
* notes recorded as the stronger answer to the two-checkouts problem and did not
|
|
49
|
+
* have a caller for; it has one now.
|
|
50
|
+
*
|
|
51
|
+
* The branch name is the second key, and a weak one: a branch `aprv-192-…`
|
|
52
|
+
* names task `APRV-192`, and a `task.registered` for that id in the window is
|
|
53
|
+
* attribution. Weak because a branch name is chosen by the party under
|
|
54
|
+
* oversight, so it may only ever ADD attribution (SPEC.md §11.1 invariant 4:
|
|
55
|
+
* a self-reported field may raise scrutiny and never lower it) — which is
|
|
56
|
+
* exactly what it does here, since attribution is what stops an alarm. Stated
|
|
57
|
+
* plainly rather than hidden: a session that names its branch after a task some
|
|
58
|
+
* other session registered escapes arm B. It does not escape arm A, and the
|
|
59
|
+
* cost of the alternative (no branch key at all) is an alarm on every worktree
|
|
60
|
+
* whose session worked entirely outside the payload store's reach.
|
|
61
|
+
*
|
|
62
|
+
* ## Fail closed in the report
|
|
63
|
+
*
|
|
64
|
+
* Uncertainty is never "fine". A log that does not verify, a payload whose
|
|
65
|
+
* bytes will not resolve, a commit git could not date, a worktree whose root
|
|
66
|
+
* cannot be placed: each is its own `undetermined` verdict with its own code,
|
|
67
|
+
* counted separately from the clean ones, and the renderer never folds an
|
|
68
|
+
* undetermined subject into the pass count. What this module does NOT do is
|
|
69
|
+
* escalate on uncertainty, because a detector is not an enforcement path: it
|
|
70
|
+
* reports, a human reads, and nothing here changes what the gate authorizes.
|
|
71
|
+
*
|
|
72
|
+
* ## What keeps the human's own commits quiet (AC4)
|
|
73
|
+
*
|
|
74
|
+
* Three exemptions, narrow and documented, and each of them fails NOISY when it
|
|
75
|
+
* does not apply:
|
|
76
|
+
*
|
|
77
|
+
* 1. A commit that touches only the daemon's own append surface
|
|
78
|
+
* ({@link EXEMPT_PREFIXES}) is a records advance carrying evidence, not a
|
|
79
|
+
* session doing work. Requiring evidence for the evidence is circular.
|
|
80
|
+
* 2. A commit authored by the git-evidence identity is the daemon's own
|
|
81
|
+
* (`daemon/git-evidence.ts`), and the daemon is not a session.
|
|
82
|
+
* 3. Arm B's subject is LINKED WORKTREES ONLY. The agent-session artifact is
|
|
83
|
+
* the worktree; the human commits in the primary checkout, where the policy
|
|
84
|
+
* ceremony and the genesis events are made. The primary is not thereby
|
|
85
|
+
* passed: it stays wholly subject to arm A, so a ceremony commit passes on
|
|
86
|
+
* its attestation and an unevidenced guarded-path commit there is still
|
|
87
|
+
* reported. And the limit is stated on every report as its own coverage
|
|
88
|
+
* line, so an agent session that ran in the primary checkout shows up as a
|
|
89
|
+
* gap in the report rather than as silence.
|
|
90
|
+
*
|
|
91
|
+
* ## Layout
|
|
92
|
+
*
|
|
93
|
+
* The evaluator ({@link evaluateDarkSessions}) is PURE: no IO, no clock, no
|
|
94
|
+
* git, so a fixture is enough to test it and a repository is never required.
|
|
95
|
+
* The observing half below the fold does run git and read the payload store,
|
|
96
|
+
* and it lives here rather than under `daemon/` because `approval doctor`
|
|
97
|
+
* reports the same findings and `src/cli/` may not import `src/daemon/`
|
|
98
|
+
* (APRV-59). The one thing that stays in `daemon/dark-session.ts` is the
|
|
99
|
+
* append, which is the one thing a reader must never do.
|
|
100
|
+
*/
|
|
101
|
+
import type { ProtectedPathEntry } from "./command-class.js";
|
|
102
|
+
import { type Clock } from "./clock.js";
|
|
103
|
+
import type { EventRecord } from "./log.js";
|
|
104
|
+
/**
|
|
105
|
+
* The events a hooked session cannot avoid writing.
|
|
106
|
+
*
|
|
107
|
+
* A registration opens the question, a request puts it to a human, and a start
|
|
108
|
+
* records that something ran. A session that made any gated tool call at all
|
|
109
|
+
* wrote at least one of these; a session that wrote none of them made no gated
|
|
110
|
+
* call the runtime ever saw, which is the definition of dark.
|
|
111
|
+
*/
|
|
112
|
+
export declare const SESSION_EVENTS: readonly string[];
|
|
113
|
+
/**
|
|
114
|
+
* How a subject came out. **Frozen union**, additive-only, in the same sense as
|
|
115
|
+
* every other verdict vocabulary here (SPEC.md §11.1 invariant 6).
|
|
116
|
+
*/
|
|
117
|
+
export declare const DARK_SESSION_VERDICTS: readonly ["hooked", "dark", "exempt", "undetermined"];
|
|
118
|
+
export type DarkSessionVerdict = (typeof DARK_SESSION_VERDICTS)[number];
|
|
119
|
+
/**
|
|
120
|
+
* Why a subject got the verdict it got. **Frozen union**, additive-only.
|
|
121
|
+
*
|
|
122
|
+
* `no-evidence` is spelled exactly as APRV-151 spells it, because it IS
|
|
123
|
+
* APRV-151's finding, arrived at through the same evaluator.
|
|
124
|
+
*/
|
|
125
|
+
export declare const DARK_SESSION_CODES: readonly [
|
|
126
|
+
/** Arm B: git activity in the window, and not one attributable record. */
|
|
127
|
+
"no-records",
|
|
128
|
+
/** Arm A: a guarded path changed and the log carries no evidence for it. */
|
|
129
|
+
"no-evidence",
|
|
130
|
+
/** Exempt: the commits touch only the daemon's own append surface. */
|
|
131
|
+
"evidence-surface",
|
|
132
|
+
/** Exempt: authored by the daemon's own git identity. */
|
|
133
|
+
"daemon-authored",
|
|
134
|
+
/** Exempt from arm B (never from arm A): the primary checkout. */
|
|
135
|
+
"primary-checkout",
|
|
136
|
+
/** Undetermined: the log did not verify, so nothing may be read from it. */
|
|
137
|
+
"log-unverified",
|
|
138
|
+
/** Undetermined: git could not be run, or answered nothing. */
|
|
139
|
+
"git-unavailable",
|
|
140
|
+
/** Undetermined: bound material would not resolve, so records cannot be placed. */
|
|
141
|
+
"payload-unresolvable",
|
|
142
|
+
/** Undetermined: git named no usable date for the activity. */
|
|
143
|
+
"activity-undated"];
|
|
144
|
+
export type DarkSessionCode = (typeof DARK_SESSION_CODES)[number];
|
|
145
|
+
/** One commit the observer saw, as git reported it. */
|
|
146
|
+
export interface ObservedCommit {
|
|
147
|
+
/** The full sha. */
|
|
148
|
+
sha: string;
|
|
149
|
+
/** Author instant, ISO-8601, or `null` when git would not say. */
|
|
150
|
+
ts: string | null;
|
|
151
|
+
/** `Name <email>`, verbatim from git. */
|
|
152
|
+
author: string;
|
|
153
|
+
/** The author's email alone, lowercased, or `""` when git named none. */
|
|
154
|
+
authorEmail: string;
|
|
155
|
+
/** Repository-relative, `/`-separated paths this commit changed. */
|
|
156
|
+
changedPaths: readonly string[];
|
|
157
|
+
/** The branch or worktree this commit was observed on, for the message. */
|
|
158
|
+
ref: string;
|
|
159
|
+
}
|
|
160
|
+
/** One checkout the observer saw: the primary, or a linked worktree. */
|
|
161
|
+
export interface ObservedCheckout {
|
|
162
|
+
/** Absolute, symlink-resolved root. */
|
|
163
|
+
root: string;
|
|
164
|
+
/** How it is named in the report (the worktree directory's base name). */
|
|
165
|
+
name: string;
|
|
166
|
+
/** True for the primary checkout, false for a linked worktree. */
|
|
167
|
+
primary: boolean;
|
|
168
|
+
/** The checked-out branch, or `null` on a detached HEAD. */
|
|
169
|
+
branch: string | null;
|
|
170
|
+
/** Its birth instant, when the observer could stat it; else `null`. */
|
|
171
|
+
born: string | null;
|
|
172
|
+
/** Commits observed on it inside the window. */
|
|
173
|
+
commits: readonly ObservedCommit[];
|
|
174
|
+
}
|
|
175
|
+
/** What the observer gathered, and what it could not. */
|
|
176
|
+
export interface GitActivity {
|
|
177
|
+
checkouts: readonly ObservedCheckout[];
|
|
178
|
+
/**
|
|
179
|
+
* Why git could not be asked, when it could not. A non-null value makes every
|
|
180
|
+
* subject `undetermined` rather than passing them for lack of evidence.
|
|
181
|
+
*/
|
|
182
|
+
unavailable: string | null;
|
|
183
|
+
}
|
|
184
|
+
/** The window the sweep judged, as instants. */
|
|
185
|
+
export interface DarkSessionWindow {
|
|
186
|
+
from: string;
|
|
187
|
+
to: string;
|
|
188
|
+
}
|
|
189
|
+
export interface DarkSessionInput {
|
|
190
|
+
activity: GitActivity;
|
|
191
|
+
/**
|
|
192
|
+
* Records from the log that have passed chain verification, or `null` when it
|
|
193
|
+
* did not verify. `null` makes every subject `undetermined`; nothing here
|
|
194
|
+
* reads an unverified record (SPEC.md §11.1 invariant 1).
|
|
195
|
+
*/
|
|
196
|
+
records: readonly EventRecord[] | null;
|
|
197
|
+
/** Why the log could not be used, when `records` is `null`. */
|
|
198
|
+
logDetail?: string;
|
|
199
|
+
/** `policy.protected_paths`, widening the built-in guarded set. */
|
|
200
|
+
policyProtectedPaths: readonly ProtectedPathEntry[];
|
|
201
|
+
/** The policy file's repository-relative path, e.g. `APPROVAL.md`. */
|
|
202
|
+
policyPath: string;
|
|
203
|
+
/** SHA-256 of the policy bytes now on disk, for the `attested` verdict. */
|
|
204
|
+
policySha256: string | null;
|
|
205
|
+
/** Resolve bound material by hash from the live payload store. */
|
|
206
|
+
payloadFor: (hash: string) => unknown | null;
|
|
207
|
+
/** Author emails whose commits are the daemon's own, lowercased. */
|
|
208
|
+
daemonEmails: readonly string[];
|
|
209
|
+
/** The instants the observer swept between. */
|
|
210
|
+
window: DarkSessionWindow;
|
|
211
|
+
/** Override the recency bound `evaluateProtectedPaths` applies. */
|
|
212
|
+
lookbackMs?: number;
|
|
213
|
+
}
|
|
214
|
+
/** One subject's verdict. A subject is one checkout. */
|
|
215
|
+
export interface DarkSessionFinding {
|
|
216
|
+
/** The checkout's name — the worktree directory, or `primary`. */
|
|
217
|
+
subject: string;
|
|
218
|
+
root: string;
|
|
219
|
+
primary: boolean;
|
|
220
|
+
branch: string | null;
|
|
221
|
+
verdict: DarkSessionVerdict;
|
|
222
|
+
code: DarkSessionCode | null;
|
|
223
|
+
/** Commits observed on this subject in the window. */
|
|
224
|
+
commits: number;
|
|
225
|
+
/** Guarded paths this subject changed in the window. */
|
|
226
|
+
guardedPaths: readonly string[];
|
|
227
|
+
/** Records in the window attributed to this subject. */
|
|
228
|
+
attributed: readonly number[];
|
|
229
|
+
/**
|
|
230
|
+
* The newest sha observed on this subject, or `null` when it produced no
|
|
231
|
+
* commit. Half of the observation key: an alarm is about a state of the
|
|
232
|
+
* world, and the same state must not be recorded twice.
|
|
233
|
+
*/
|
|
234
|
+
newestSha: string | null;
|
|
235
|
+
/** Stable across ticks for one observation; see {@link observationKey}. */
|
|
236
|
+
key: string;
|
|
237
|
+
/** Prose a reader can act on, on every verdict. */
|
|
238
|
+
detail: string;
|
|
239
|
+
}
|
|
240
|
+
export interface DarkSessionReport {
|
|
241
|
+
/** True when no subject came out `dark`. Says nothing about what was seen. */
|
|
242
|
+
ok: boolean;
|
|
243
|
+
/**
|
|
244
|
+
* True when every subject was ESTABLISHED, one way or the other.
|
|
245
|
+
*
|
|
246
|
+
* Kept separate from {@link DarkSessionReport.ok} on purpose. A report with
|
|
247
|
+
* no dark subject and three undetermined ones is not a clean sweep, and a
|
|
248
|
+
* single boolean would have to lie about one of the two facts: either it
|
|
249
|
+
* alarms on uncertainty (and an operator learns to ignore the alarm) or it
|
|
250
|
+
* calls uncertainty fine (and the detector reports a pass it did not earn).
|
|
251
|
+
* Two booleans say both things, and every surface reads the one it means.
|
|
252
|
+
*/
|
|
253
|
+
settled: boolean;
|
|
254
|
+
findings: readonly DarkSessionFinding[];
|
|
255
|
+
window: DarkSessionWindow;
|
|
256
|
+
/**
|
|
257
|
+
* What this sweep could not see, always stated. Arm B covers linked worktrees
|
|
258
|
+
* only, so a session that ran in the primary checkout is outside it, and a
|
|
259
|
+
* report that did not say so would be claiming coverage it does not have.
|
|
260
|
+
*/
|
|
261
|
+
coverage: string;
|
|
262
|
+
}
|
|
263
|
+
/** The observation key: one subject, one state of the world. */
|
|
264
|
+
export declare function observationKey(subject: string, newestSha: string | null, born: string | null): string;
|
|
265
|
+
/** The Backlog.md task id a branch name begins with, upper-cased (`aprv-192-x`). */
|
|
266
|
+
export declare function taskIdFromBranch(branch: string | null): string | null;
|
|
267
|
+
/**
|
|
268
|
+
* Evaluate what git showed against what the log carries. Pure: no IO, no clock.
|
|
269
|
+
*/
|
|
270
|
+
export declare function evaluateDarkSessions(input: DarkSessionInput): DarkSessionReport;
|
|
271
|
+
/** The report as lines an operator reads. Pure. */
|
|
272
|
+
export declare function renderDarkSessionReport(report: DarkSessionReport): string;
|
|
273
|
+
/**
|
|
274
|
+
* Everything below this line does IO, and it lives here rather than in
|
|
275
|
+
* `daemon/` for one reason: `approval doctor` reports the same findings and
|
|
276
|
+
* `src/cli/` may not import `src/daemon/` (APRV-59, `tests/layering.test.ts`).
|
|
277
|
+
* Two observers would be two answers to one question, so there is one, and the
|
|
278
|
+
* daemon's module keeps only the thing a reader must never do — the append.
|
|
279
|
+
*/
|
|
280
|
+
/** How far back a sweep looks, absent an operator saying otherwise. */
|
|
281
|
+
export declare const DEFAULT_DARK_WINDOW_MS: number;
|
|
282
|
+
/** How often the sweep runs, absent an operator saying otherwise. */
|
|
283
|
+
export declare const DEFAULT_DARK_INTERVAL_MS: number;
|
|
284
|
+
/**
|
|
285
|
+
* The git identities whose commits are the runtime's own.
|
|
286
|
+
*
|
|
287
|
+
* Spelled here rather than imported from `daemon/git-evidence.ts`, which is
|
|
288
|
+
* where the daemon's commit identity is defined: core must not depend on the
|
|
289
|
+
* daemon. `tests/dark-session.test.ts` pins the two against each other so they
|
|
290
|
+
* cannot drift apart, the same device `APPROVALD_VERSION` uses for its own
|
|
291
|
+
* duplicate of the package version.
|
|
292
|
+
*/
|
|
293
|
+
export declare const DAEMON_EVIDENCE_EMAILS: readonly string[];
|
|
294
|
+
/** The opt-in, as the daemon carries it. */
|
|
295
|
+
export interface DarkSessionWatch {
|
|
296
|
+
/** How far back each sweep looks. */
|
|
297
|
+
windowMs: number;
|
|
298
|
+
/** How often a sweep runs. The tick interval is the floor. */
|
|
299
|
+
intervalMs: number;
|
|
300
|
+
}
|
|
301
|
+
/** Everything git could tell the sweep about a repository in one window. */
|
|
302
|
+
export declare function observeGitActivity(root: string, from: string, to: string): GitActivity;
|
|
303
|
+
export interface DarkSessionSweepOptions {
|
|
304
|
+
logPath: string;
|
|
305
|
+
/** The checkout to observe. The daemon's own `cwd`; never an agent worktree. */
|
|
306
|
+
root: string;
|
|
307
|
+
/** Policy location, with `loadPolicy`'s semantics. */
|
|
308
|
+
policy: {
|
|
309
|
+
dir?: string;
|
|
310
|
+
file?: string;
|
|
311
|
+
};
|
|
312
|
+
schemaDir?: string;
|
|
313
|
+
/** The write-boundary clock (amended SPEC.md §8). */
|
|
314
|
+
clock?: Clock;
|
|
315
|
+
windowMs: number;
|
|
316
|
+
/** Verified records. The caller has already read them; nothing re-reads. */
|
|
317
|
+
records: readonly EventRecord[] | null;
|
|
318
|
+
logDetail?: string;
|
|
319
|
+
/** Test seam: an observer that answers without running git. */
|
|
320
|
+
observe?: (root: string, from: string, to: string) => GitActivity;
|
|
321
|
+
}
|
|
322
|
+
/**
|
|
323
|
+
* Observe and judge, appending nothing.
|
|
324
|
+
*
|
|
325
|
+
* The read-only half, which is the half `approval doctor` calls: doctor reports
|
|
326
|
+
* and the daemon writes, so two processes never become two writers of one fact.
|
|
327
|
+
*/
|
|
328
|
+
export declare function reportDarkSessions(options: DarkSessionSweepOptions): {
|
|
329
|
+
report: DarkSessionReport;
|
|
330
|
+
window: DarkSessionWindow;
|
|
331
|
+
};
|