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
package/cli.js
CHANGED
|
@@ -1,4 +1,30 @@
|
|
|
1
1
|
#!/usr/bin/env node
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
2
|
+
/**
|
|
3
|
+
* `approval` bin entry: a thin loader for the compiled CLI.
|
|
4
|
+
*
|
|
5
|
+
* All behaviour lives in src/cli/main.ts. This file exists only to find the
|
|
6
|
+
* build output and hand it argv, so the published bin and
|
|
7
|
+
* `node dist/src/cli/main.js` are the same program.
|
|
8
|
+
*
|
|
9
|
+
* The exit code is set via `process.exitCode` rather than `process.exit()`, so
|
|
10
|
+
* stdout is flushed by the normal exit path — a JSON object truncated by an
|
|
11
|
+
* early exit would be worse than no output.
|
|
12
|
+
*/
|
|
13
|
+
|
|
14
|
+
import { existsSync } from "node:fs";
|
|
15
|
+
|
|
16
|
+
const entry = new URL("./dist/src/cli/main.js", import.meta.url);
|
|
17
|
+
|
|
18
|
+
if (!existsSync(entry)) {
|
|
19
|
+
// Exit 4 = I/O error in the frozen exit-code table (src/cli/exit-codes.ts).
|
|
20
|
+
process.stderr.write(
|
|
21
|
+
"approval: dist/src/cli/main.js is missing — run `npm run build` first.\n",
|
|
22
|
+
);
|
|
23
|
+
process.exitCode = 4;
|
|
24
|
+
} else {
|
|
25
|
+
const { main } = await import(entry.href);
|
|
26
|
+
// `main` is asynchronous since APRV-209: every verb is loaded on demand, and
|
|
27
|
+
// ESM has no synchronous dynamic import. The exit code still travels through
|
|
28
|
+
// `process.exitCode`, so the flush behaviour described above is unchanged.
|
|
29
|
+
process.exitCode = await main(process.argv.slice(2));
|
|
30
|
+
}
|
|
@@ -0,0 +1,426 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* The AgentMail adapter (SPEC.md §6.1, §6.2, §10.4, §11; APRV-222).
|
|
3
|
+
*
|
|
4
|
+
* A second executor for `communicate.email.external`, over the AgentMail HTTPS
|
|
5
|
+
* API. It exists because AgentMail is becoming the way an agent holds a mailbox,
|
|
6
|
+
* and because its Drafts primitive is documented as mail that only leaves when
|
|
7
|
+
* something outside the agent says so. approval.md is that something, with a
|
|
8
|
+
* hash-chained log behind it.
|
|
9
|
+
*
|
|
10
|
+
* Like every adapter it implements exactly one method, {@link Adapter.act}, and
|
|
11
|
+
* `adapters/contract.ts` owns everything around the call: the hash
|
|
12
|
+
* recomputation, the token spend, `execution.started`, the credential window,
|
|
13
|
+
* the outcome event, and the redaction sweep. Nothing here touches a token or
|
|
14
|
+
* the log.
|
|
15
|
+
*
|
|
16
|
+
* ## The enforcement model this adapter assumes
|
|
17
|
+
*
|
|
18
|
+
* AgentMail API keys carry per-permission booleans (`draft_create`,
|
|
19
|
+
* `draft_update`, `draft_read`, `draft_send`, `message_send` are separate). The
|
|
20
|
+
* deployment this adapter is written for gives the agent a key WITHOUT the two
|
|
21
|
+
* send permissions and puts a key WITH them in the vault under
|
|
22
|
+
* {@link DEFAULT_AGENTMAIL_CREDENTIAL_NAMES}.apiKey, where it is readable only
|
|
23
|
+
* inside the verified execution window the contract opens. The agent can therefore
|
|
24
|
+
* compose all day and cannot send at all; the sending key answers to a grant.
|
|
25
|
+
*
|
|
26
|
+
* ## Two payload modes, discriminated by shape, ambiguity refused
|
|
27
|
+
*
|
|
28
|
+
* **Direct send.** The email adapter's own payload, validated by the email
|
|
29
|
+
* adapter's own {@link validateEmailPayload} rather than a second copy of it:
|
|
30
|
+
*
|
|
31
|
+
* ```ts
|
|
32
|
+
* { from, to: string[], cc?, bcc?, subject, body, content_type? }
|
|
33
|
+
* ```
|
|
34
|
+
*
|
|
35
|
+
* posted to `POST /v0/inboxes/{inbox_id}/messages/send`.
|
|
36
|
+
*
|
|
37
|
+
* **Draft send.** A snapshot of a draft the agent has already composed, taken at
|
|
38
|
+
* request time so a human approves the words rather than an id:
|
|
39
|
+
*
|
|
40
|
+
* ```ts
|
|
41
|
+
* { inbox_id, draft_id, to: string[], cc?, bcc?, subject, text }
|
|
42
|
+
* ```
|
|
43
|
+
*
|
|
44
|
+
* The adapter re-fetches the draft, canonicalizes those same fields (RFC 8785,
|
|
45
|
+
* the same `core/jcs.ts` the hash chain uses) on both sides, and refuses
|
|
46
|
+
* `agentmail-draft-drifted` on any difference before calling
|
|
47
|
+
* `POST .../drafts/{draft_id}/send`. That check is the whole point of the mode:
|
|
48
|
+
* a draft is mutable server-side state, and an approval of a draft id would
|
|
49
|
+
* otherwise be an approval of whatever the agent last wrote into it. The
|
|
50
|
+
* refusal names WHICH fields differ and never what they now hold — a drift
|
|
51
|
+
* message is written to a log and read by a human who did not approve the new
|
|
52
|
+
* text, and quoting it there would publish unapproved content through the
|
|
53
|
+
* refusal path.
|
|
54
|
+
*
|
|
55
|
+
* ## The comparison runs before the token is spent (APRV-276)
|
|
56
|
+
*
|
|
57
|
+
* It happens TWICE, through one function ({@link checkDraftBeforeSend}), and
|
|
58
|
+
* the first of the two is the one this section exists for.
|
|
59
|
+
*
|
|
60
|
+
* The first call is {@link Adapter.precheck}: the contract runs it after the
|
|
61
|
+
* declared credentials resolve and BEFORE the token is consumed, so a drifted
|
|
62
|
+
* draft refuses with nothing appended and the grant intact. Until APRV-276 the
|
|
63
|
+
* comparison ran only inside `act`, which meant a drift refused correctly and
|
|
64
|
+
* spent the single-use token doing it: the human's tap was consumed by an
|
|
65
|
+
* attempt that sent nothing, and restoring the approved text then refused
|
|
66
|
+
* `token-consumed`. That is the failure mode the whole design is against — a
|
|
67
|
+
* refusal that costs a human another tap teaches operators to stop checking.
|
|
68
|
+
*
|
|
69
|
+
* The second call is `act`'s own, inside the consumed-token window and
|
|
70
|
+
* immediately before the POST. It is not redundant: AgentMail sends a draft by
|
|
71
|
+
* id, so something must stand between the last read and the send, and this is
|
|
72
|
+
* what makes that gap as small as the transport allows. A drift caught there is
|
|
73
|
+
* `execution.started` then `execution.failed`, which is the honest record of a
|
|
74
|
+
* window that was open when the far side moved.
|
|
75
|
+
*
|
|
76
|
+
* **Which key performs the pre-spend read.** The same sending key from the
|
|
77
|
+
* vault, handed over by the credential provider the contract scopes to the
|
|
78
|
+
* precheck call. Not the agent's own `AGENTMAIL_API_KEY`, even though the demo
|
|
79
|
+
* has one in the environment: a comparison whose input the party under
|
|
80
|
+
* oversight chooses is scrutiny that party controls, and SPEC.md §11.1
|
|
81
|
+
* invariant 4 puts that the other way round. Nothing new is opened to make this
|
|
82
|
+
* possible — the contract already reads the vault before the spend, to resolve
|
|
83
|
+
* {@link Adapter.requiredCredentials} (APRV-169), inside APRV-168's
|
|
84
|
+
* `presented`-phase grant, which is minted only when the caller's token matches
|
|
85
|
+
* the digest the human's grant recorded. SPEC.md §10.4 carries the decision.
|
|
86
|
+
*
|
|
87
|
+
* A payload carrying markers of both modes, or of neither, is refused rather
|
|
88
|
+
* than guessed at (`agentmail-payload-ambiguous`, `agentmail-payload-invalid`):
|
|
89
|
+
* choosing a send mode by inference is choosing a side effect by inference.
|
|
90
|
+
*
|
|
91
|
+
* ## `from`, and why it costs one extra read
|
|
92
|
+
*
|
|
93
|
+
* AgentMail's send endpoint has no `from` field. The inbox IS the sender, so
|
|
94
|
+
* the payload cannot bind the From address the way the SMTP adapter's can, and
|
|
95
|
+
* a human who approved a message "from carter@…" would otherwise be approving a
|
|
96
|
+
* sender this adapter never checked.
|
|
97
|
+
*
|
|
98
|
+
* The resolution: `from` stays in the payload as the human-facing claim about
|
|
99
|
+
* the sender (reusing {@link validateEmailPayload} keeps it required and
|
|
100
|
+
* well-formed), it is sent to AgentMail in no field at all, and `act` performs
|
|
101
|
+
* one extra read — `GET /v0/inboxes/{inbox_id}` — before the send, refusing
|
|
102
|
+
* `agentmail-from-mismatch` (case-insensitively) when the inbox's own address is
|
|
103
|
+
* not the approved one. So `from` is informational on the wire and binding here.
|
|
104
|
+
* The read runs on every direct send because it doubles as the credential
|
|
105
|
+
* check: a key that cannot open its own inbox is a key that should not discover
|
|
106
|
+
* this by half-sending. It is a GET, it is idempotent, it puts no message
|
|
107
|
+
* anywhere, and a transport failure on it is `agentmail-unreachable` precisely
|
|
108
|
+
* because nothing was attempted.
|
|
109
|
+
*
|
|
110
|
+
* ## Failures
|
|
111
|
+
*
|
|
112
|
+
* Every HTTP refusal is a RETURNED failure ({@link ActOutcome} `ok: false`), so
|
|
113
|
+
* the contract records `execution.failed`: the far side answered, and an answer
|
|
114
|
+
* is knowledge. A throw from the SEND call is deliberately NOT caught — it
|
|
115
|
+
* propagates, the contract records `execution.indeterminate`, and a human finds
|
|
116
|
+
* out that nobody knows whether the message went (APRV-120). A throw from the
|
|
117
|
+
* pre-send GETs is returned as `agentmail-unreachable`, because those run before
|
|
118
|
+
* anything is attempted.
|
|
119
|
+
*
|
|
120
|
+
* Deterministic apart from its transport: no randomness, no clock, no
|
|
121
|
+
* environment reads. Every string this file returns has been through
|
|
122
|
+
* {@link redactSecrets} against the API key.
|
|
123
|
+
*/
|
|
124
|
+
import type { CredentialSpec } from "../core/credential-spec.js";
|
|
125
|
+
import { type Adapter, type CredentialProvider, type JsonValue } from "./contract.js";
|
|
126
|
+
/** The one class this adapter serves. The same string the email adapter serves. */
|
|
127
|
+
export declare const AGENTMAIL_CLASS = "communicate.email.external";
|
|
128
|
+
/** The public API. Overridable so the whole adapter can run against loopback. */
|
|
129
|
+
export declare const AGENTMAIL_DEFAULT_API_BASE = "https://api.agentmail.to";
|
|
130
|
+
/** Whole-request budget for one HTTP call. */
|
|
131
|
+
export declare const AGENTMAIL_DEFAULT_TIMEOUT_MS = 15000;
|
|
132
|
+
/**
|
|
133
|
+
* The two vault names, as an open record rather than a literal type: a
|
|
134
|
+
* deployment that stores these under other names must be able to SAY so, and a
|
|
135
|
+
* `typeof` of the defaults would type `credentialNames` as the defaults.
|
|
136
|
+
*/
|
|
137
|
+
export interface AgentmailCredentialNames {
|
|
138
|
+
apiKey: string;
|
|
139
|
+
inboxId: string;
|
|
140
|
+
}
|
|
141
|
+
/** The vault names, overridable per deployment. */
|
|
142
|
+
export declare const DEFAULT_AGENTMAIL_CREDENTIAL_NAMES: AgentmailCredentialNames;
|
|
143
|
+
export declare const AGENTMAIL_FAILURE_CODES: readonly ["agentmail-payload-invalid", "agentmail-payload-ambiguous", "agentmail-config-invalid", "agentmail-inbox-mismatch", "agentmail-from-mismatch", "agentmail-draft-missing", "agentmail-draft-drifted", "agentmail-unreachable", "agentmail-unauthorized", "agentmail-not-found", "agentmail-conflict", "agentmail-rate-limited", "agentmail-rejected", "agentmail-server-error", "credential-unavailable", "credential-refused", "credential-window-closed"];
|
|
144
|
+
export type AgentmailFailureCode = (typeof AGENTMAIL_FAILURE_CODES)[number];
|
|
145
|
+
export declare function isAgentmailFailureCode(value: string): boolean;
|
|
146
|
+
/**
|
|
147
|
+
* What this adapter reads from the vault, declared rather than discovered, so
|
|
148
|
+
* `approval setup adapter agentmail` can ask for it without knowing what
|
|
149
|
+
* AgentMail is. DERIVED from {@link DEFAULT_AGENTMAIL_CREDENTIAL_NAMES} rather
|
|
150
|
+
* than restating the strings.
|
|
151
|
+
*/
|
|
152
|
+
export declare const AGENTMAIL_CREDENTIAL_SPECS: readonly CredentialSpec[];
|
|
153
|
+
/**
|
|
154
|
+
* The names this adapter cannot act without (APRV-169), for the contract's
|
|
155
|
+
* pre-token resolution. Derived from the manifest, mapped through `names` so a
|
|
156
|
+
* deployment that renamed one gets the name it actually stored.
|
|
157
|
+
*/
|
|
158
|
+
export declare function requiredAgentmailCredentials(names?: AgentmailCredentialNames): readonly string[];
|
|
159
|
+
/** What {@link readAgentmailConfig} resolved. */
|
|
160
|
+
export interface AgentmailConfig {
|
|
161
|
+
apiKey: string;
|
|
162
|
+
inboxId: string;
|
|
163
|
+
}
|
|
164
|
+
/**
|
|
165
|
+
* What one configuration read produced.
|
|
166
|
+
*
|
|
167
|
+
* `secrets` is the redaction corpus and holds ONLY the secret-kind values (the
|
|
168
|
+
* API key). The inbox id is not a secret and is deliberately left scrubbable-not:
|
|
169
|
+
* it appears in refusal sentences that are useless without it. Returned on both
|
|
170
|
+
* branches, because a caller that goes on to make requests must scrub the far
|
|
171
|
+
* side's sentences with the same corpus this read built.
|
|
172
|
+
*/
|
|
173
|
+
export type AgentmailConfigOutcome = {
|
|
174
|
+
ok: true;
|
|
175
|
+
config: AgentmailConfig;
|
|
176
|
+
secrets: readonly string[];
|
|
177
|
+
} | {
|
|
178
|
+
ok: false;
|
|
179
|
+
code: AgentmailFailureCode;
|
|
180
|
+
message: string;
|
|
181
|
+
secrets: readonly string[];
|
|
182
|
+
};
|
|
183
|
+
/**
|
|
184
|
+
* Read this adapter's whole configuration from a credential provider.
|
|
185
|
+
*
|
|
186
|
+
* The single place in the repository that turns a {@link CredentialProvider}
|
|
187
|
+
* into AgentMail settings — the names it asks for, the order, the shape rules —
|
|
188
|
+
* mirroring `readEmailSmtpConfig` for the same reason: `act` calls it inside the
|
|
189
|
+
* verified execution window and `approval setup adapter agentmail` calls it to probe
|
|
190
|
+
* a configuration it only partly typed, and a second reader would be a second
|
|
191
|
+
* opinion about what "configured" means.
|
|
192
|
+
*/
|
|
193
|
+
export declare function readAgentmailConfig(credentials: CredentialProvider, names?: AgentmailCredentialNames): AgentmailConfigOutcome;
|
|
194
|
+
/**
|
|
195
|
+
* The slice of `fetch` this module uses, structurally.
|
|
196
|
+
*
|
|
197
|
+
* Declared here rather than imported so the adapter depends on a shape and not
|
|
198
|
+
* on a lib: a test hands over a stub, and the default is the global `fetch`
|
|
199
|
+
* Node ≥ 20 ships.
|
|
200
|
+
*/
|
|
201
|
+
export type AgentmailFetch = (url: string, init: {
|
|
202
|
+
method: string;
|
|
203
|
+
headers: Record<string, string>;
|
|
204
|
+
body?: string;
|
|
205
|
+
signal: AbortSignal;
|
|
206
|
+
}) => Promise<{
|
|
207
|
+
ok: boolean;
|
|
208
|
+
status: number;
|
|
209
|
+
text(): Promise<string>;
|
|
210
|
+
}>;
|
|
211
|
+
/** The one non-sending read, exported so the setup wizard can probe a key. */
|
|
212
|
+
export type AgentmailProbe = {
|
|
213
|
+
ok: true;
|
|
214
|
+
address: string;
|
|
215
|
+
http_status: number;
|
|
216
|
+
/**
|
|
217
|
+
* The permissions the inbox read DISCLOSED about the calling key, or
|
|
218
|
+
* `null` when it disclosed none (APRV-223).
|
|
219
|
+
*
|
|
220
|
+
* Read from the one response this adapter already asks for, never from a
|
|
221
|
+
* second endpoint: a setup verb that probed a URL nobody has confirmed
|
|
222
|
+
* exists would report a 404 as a permissions problem, which is a worse
|
|
223
|
+
* answer than "not disclosed". `null` therefore means UNKNOWN and never
|
|
224
|
+
* "none", and every caller must treat it as the reminder it is.
|
|
225
|
+
*/
|
|
226
|
+
permissions: readonly string[] | null;
|
|
227
|
+
} | {
|
|
228
|
+
ok: false;
|
|
229
|
+
code: AgentmailFailureCode;
|
|
230
|
+
message: string;
|
|
231
|
+
};
|
|
232
|
+
/** The two permissions a key must hold to send anything for this adapter. */
|
|
233
|
+
export declare const AGENTMAIL_SEND_PERMISSIONS: readonly ["draft_send", "message_send"];
|
|
234
|
+
export interface AgentmailProbeOptions {
|
|
235
|
+
fetch?: AgentmailFetch;
|
|
236
|
+
apiBase?: string;
|
|
237
|
+
timeoutMs?: number;
|
|
238
|
+
}
|
|
239
|
+
/**
|
|
240
|
+
* `GET /v0/inboxes/{inbox_id}`: does this key open this inbox, and what address
|
|
241
|
+
* does it send as? Sends nothing, changes nothing, and is the credential check
|
|
242
|
+
* both `act` and `approval setup adapter agentmail` use.
|
|
243
|
+
*/
|
|
244
|
+
export declare function probeAgentmail(config: AgentmailConfig, options?: AgentmailProbeOptions): Promise<AgentmailProbe>;
|
|
245
|
+
/** The snapshot of a composed draft a grant binds to. */
|
|
246
|
+
export interface AgentmailDraftPayload {
|
|
247
|
+
inbox_id: string;
|
|
248
|
+
draft_id: string;
|
|
249
|
+
to: string[];
|
|
250
|
+
cc?: string[];
|
|
251
|
+
bcc?: string[];
|
|
252
|
+
subject: string;
|
|
253
|
+
text: string;
|
|
254
|
+
}
|
|
255
|
+
/** The fields the drift check covers: everything a reader of the draft saw. */
|
|
256
|
+
export declare const AGENTMAIL_DRAFT_FIELDS: readonly ["to", "cc", "bcc", "subject", "text"];
|
|
257
|
+
export type AgentmailMode = "direct" | "draft";
|
|
258
|
+
export type AgentmailDraftValidation = {
|
|
259
|
+
ok: true;
|
|
260
|
+
payload: AgentmailDraftPayload;
|
|
261
|
+
} | {
|
|
262
|
+
ok: false;
|
|
263
|
+
message: string;
|
|
264
|
+
};
|
|
265
|
+
/**
|
|
266
|
+
* Structural validation of a draft payload. Never throws; returns the reason.
|
|
267
|
+
*
|
|
268
|
+
* Exported so a caller can check a payload BEFORE requesting approval for it,
|
|
269
|
+
* which is the only place a shape error can still be fixed cheaply.
|
|
270
|
+
*/
|
|
271
|
+
export declare function validateAgentmailDraftPayload(value: JsonValue): AgentmailDraftValidation;
|
|
272
|
+
/**
|
|
273
|
+
* Which mode a payload is in, by the markers it carries.
|
|
274
|
+
*
|
|
275
|
+
* A payload with markers of both modes is ambiguous and a payload with markers
|
|
276
|
+
* of neither is not addressed to this adapter at all. Both are refused: a send
|
|
277
|
+
* mode chosen by inference is a side effect chosen by inference.
|
|
278
|
+
*/
|
|
279
|
+
export declare function agentmailMode(value: JsonValue): {
|
|
280
|
+
ok: true;
|
|
281
|
+
mode: AgentmailMode;
|
|
282
|
+
} | {
|
|
283
|
+
ok: false;
|
|
284
|
+
code: AgentmailFailureCode;
|
|
285
|
+
message: string;
|
|
286
|
+
};
|
|
287
|
+
/**
|
|
288
|
+
* Which of {@link AGENTMAIL_DRAFT_FIELDS} differ between the approved snapshot
|
|
289
|
+
* and what the server now holds. Names only — never values.
|
|
290
|
+
*/
|
|
291
|
+
export declare function draftDrift(approved: AgentmailDraftPayload, fetched: Record<string, unknown>): string[];
|
|
292
|
+
export type AgentmailDraftSnapshot = {
|
|
293
|
+
ok: true;
|
|
294
|
+
payload: AgentmailDraftPayload;
|
|
295
|
+
} | {
|
|
296
|
+
ok: false;
|
|
297
|
+
message: string;
|
|
298
|
+
};
|
|
299
|
+
/**
|
|
300
|
+
* The payload a grant should bind to, built from what the API holds RIGHT NOW
|
|
301
|
+
* (APRV-223).
|
|
302
|
+
*
|
|
303
|
+
* `approval payload agentmail-draft` prints this and nothing else, and it lives
|
|
304
|
+
* here rather than in the CLI for one reason: the bytes it prints are the bytes
|
|
305
|
+
* {@link draftDrift} will compare against the same draft at send time, so the
|
|
306
|
+
* two must be one piece of code. A second opinion in the CLI about what "the
|
|
307
|
+
* draft's cc" is would be a snapshot that drifts from a draft nobody changed.
|
|
308
|
+
*
|
|
309
|
+
* The rules follow {@link canonicalField} exactly. `cc`/`bcc` are OMITTED when
|
|
310
|
+
* the draft holds nothing for them, because absent, `null` and `[]` are one
|
|
311
|
+
* fact there; `to` is copied through as the array it is, unnormalized, because
|
|
312
|
+
* a reordered or re-shaped recipient list is a different message. Anything this
|
|
313
|
+
* function cannot turn into a well-formed snapshot is refused with the reason:
|
|
314
|
+
* a payload that fails {@link validateAgentmailDraftPayload} at send time is a
|
|
315
|
+
* refusal a human has already been asked to approve.
|
|
316
|
+
*/
|
|
317
|
+
export declare function draftSnapshot(inboxId: string, draftId: string, fetched: Record<string, unknown>): AgentmailDraftSnapshot;
|
|
318
|
+
export type AgentmailDraftRead = {
|
|
319
|
+
ok: true;
|
|
320
|
+
draft: Record<string, unknown>;
|
|
321
|
+
http_status: number;
|
|
322
|
+
} | {
|
|
323
|
+
ok: false;
|
|
324
|
+
code: AgentmailFailureCode;
|
|
325
|
+
message: string;
|
|
326
|
+
};
|
|
327
|
+
export interface AgentmailDraftReadOptions extends AgentmailProbeOptions {
|
|
328
|
+
/** The key that reads the draft. The AGENT's key here, not the vault's. */
|
|
329
|
+
apiKey: string;
|
|
330
|
+
inboxId: string;
|
|
331
|
+
draftId: string;
|
|
332
|
+
}
|
|
333
|
+
/**
|
|
334
|
+
* `GET /v0/inboxes/{inbox}/drafts/{draft}`: one draft, read and nothing else.
|
|
335
|
+
*
|
|
336
|
+
* The read half of the draft flow, exported for `approval payload
|
|
337
|
+
* agentmail-draft` (APRV-223), which runs BEFORE any approval exists and with
|
|
338
|
+
* the agent's own key rather than the vault's. It sends nothing and spends no
|
|
339
|
+
* token: what it produces is a proposal a human has yet to see.
|
|
340
|
+
*/
|
|
341
|
+
export declare function readAgentmailDraft(options: AgentmailDraftReadOptions): Promise<AgentmailDraftRead>;
|
|
342
|
+
/**
|
|
343
|
+
* How many messages one page asks for. The API's own cap is higher; this is the
|
|
344
|
+
* page size, and {@link OBSERVE_MAX_PAGES} bounds how many pages are walked.
|
|
345
|
+
*/
|
|
346
|
+
export declare const AGENTMAIL_OBSERVE_PAGE_SIZE = 100;
|
|
347
|
+
/**
|
|
348
|
+
* How many pages one observation walks.
|
|
349
|
+
*
|
|
350
|
+
* A bound rather than a full drain, because a reporting verb must terminate
|
|
351
|
+
* against an inbox of any size. A run that hits the bound says so, so a reader
|
|
352
|
+
* never mistakes a truncated page walk for a quiet mailbox.
|
|
353
|
+
*/
|
|
354
|
+
export declare const OBSERVE_MAX_PAGES = 10;
|
|
355
|
+
/** One sent message, reduced to what a coverage report may say out loud. */
|
|
356
|
+
export interface AgentmailObservedMessage {
|
|
357
|
+
messageId: string;
|
|
358
|
+
/** RFC 3339, as the provider reported it. */
|
|
359
|
+
at: string;
|
|
360
|
+
subject: string;
|
|
361
|
+
recipients: number;
|
|
362
|
+
}
|
|
363
|
+
export type AgentmailObservation = {
|
|
364
|
+
ok: true;
|
|
365
|
+
messages: AgentmailObservedMessage[];
|
|
366
|
+
/** Set when the page bound stopped the walk before the far side ran out. */
|
|
367
|
+
truncated: boolean;
|
|
368
|
+
} | {
|
|
369
|
+
ok: false;
|
|
370
|
+
code: AgentmailFailureCode;
|
|
371
|
+
message: string;
|
|
372
|
+
};
|
|
373
|
+
export interface AgentmailObserveOptions extends AgentmailProbeOptions {
|
|
374
|
+
/** Override {@link AGENTMAIL_OBSERVE_PAGE_SIZE}. */
|
|
375
|
+
pageSize?: number;
|
|
376
|
+
/** Override {@link OBSERVE_MAX_PAGES}. */
|
|
377
|
+
maxPages?: number;
|
|
378
|
+
}
|
|
379
|
+
/**
|
|
380
|
+
* `GET /v0/inboxes/{inbox_id}/messages`: what this inbox actually sent.
|
|
381
|
+
*
|
|
382
|
+
* The endpoint and its fields are AgentMail's own, documented at
|
|
383
|
+
* https://docs.agentmail.to/api-reference/inboxes/messages/list — `message_id`,
|
|
384
|
+
* `labels`, `timestamp`, `to` and `subject`. The query carries `after`, `before`
|
|
385
|
+
* and `limit`, and `page_token` on every page after the first.
|
|
386
|
+
*
|
|
387
|
+
* **The sent filter is client-side, and that is a limit worth stating.** The
|
|
388
|
+
* documented list endpoint exposes no sent-only parameter, so this asks for the
|
|
389
|
+
* window's messages and keeps the ones whose `labels` include `sent`. Two
|
|
390
|
+
* consequences follow and neither is papered over: the request reads received
|
|
391
|
+
* mail as well as sent (a read, changing nothing), and a provider that stopped
|
|
392
|
+
* labelling sent mail would make this source report an empty window rather than
|
|
393
|
+
* an error. The remedy for the second is the same as for everything else here:
|
|
394
|
+
* the source reports what the provider said, and a source that says nothing is
|
|
395
|
+
* a gap a reader can see rather than a pass.
|
|
396
|
+
*
|
|
397
|
+
* Sends nothing. Spends no token. Reads no clock: the window is the caller's.
|
|
398
|
+
*/
|
|
399
|
+
export declare function observeAgentmail(config: AgentmailConfig, window: {
|
|
400
|
+
since: string;
|
|
401
|
+
until: string;
|
|
402
|
+
}, options?: AgentmailObserveOptions): Promise<AgentmailObservation>;
|
|
403
|
+
export interface AgentmailAdapterOptions {
|
|
404
|
+
/**
|
|
405
|
+
* Additional classes this adapter serves, **added** to {@link AGENTMAIL_CLASS}
|
|
406
|
+
* rather than replacing it: the class list is routing, and a list that
|
|
407
|
+
* replaced the default would make "add one class" silently stop serving the
|
|
408
|
+
* canonical one.
|
|
409
|
+
*/
|
|
410
|
+
classes?: readonly string[];
|
|
411
|
+
/** Injectable `fetch`, for tests. Defaults to the global. */
|
|
412
|
+
fetch?: AgentmailFetch;
|
|
413
|
+
/** API base. Defaults to {@link AGENTMAIL_DEFAULT_API_BASE}. */
|
|
414
|
+
apiBase?: string;
|
|
415
|
+
/** Per-request budget. Defaults to {@link AGENTMAIL_DEFAULT_TIMEOUT_MS}. */
|
|
416
|
+
timeoutMs?: number;
|
|
417
|
+
/** Override the vault names. Partial: unnamed entries keep their default. */
|
|
418
|
+
credentialNames?: Partial<AgentmailCredentialNames>;
|
|
419
|
+
}
|
|
420
|
+
/**
|
|
421
|
+
* A fresh AgentMail adapter.
|
|
422
|
+
*
|
|
423
|
+
* Stateless and reusable: it holds no connection and nothing from a previous
|
|
424
|
+
* send. Two concurrent executions through the same instance share nothing.
|
|
425
|
+
*/
|
|
426
|
+
export declare function agentmailAdapter(options?: AgentmailAdapterOptions): Adapter;
|