@pome-sh/cli 0.13.0 → 0.15.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/dist/build-info.json +3 -3
- package/dist/src/cli/checks.d.ts +14 -0
- package/dist/src/cli/checks.js +37 -3
- package/dist/src/task/taskSchema.d.ts +16 -16
- package/node_modules/@pome-sh/sdk/dist/check-discrimination.d.ts +7 -0
- package/node_modules/@pome-sh/sdk/dist/check-discrimination.js +81 -0
- package/node_modules/@pome-sh/sdk/dist/check-discrimination.js.map +1 -0
- package/node_modules/@pome-sh/sdk/dist/checks.d.ts +16 -1
- package/node_modules/@pome-sh/sdk/dist/checks.js +11 -1
- package/node_modules/@pome-sh/sdk/dist/checks.js.map +1 -1
- package/node_modules/@pome-sh/sdk/package.json +1 -1
- package/node_modules/@pome-sh/twin-github/dist/src/check-issues.js +39 -0
- package/node_modules/@pome-sh/twin-github/dist/src/check-issues.js.map +1 -1
- package/node_modules/@pome-sh/twin-github/dist/src/check-pulls.js +26 -0
- package/node_modules/@pome-sh/twin-github/dist/src/check-pulls.js.map +1 -1
- package/node_modules/@pome-sh/twin-github/dist/src/check-repos.js +19 -0
- package/node_modules/@pome-sh/twin-github/dist/src/check-repos.js.map +1 -1
- package/node_modules/@pome-sh/twin-github/dist/src/check-tape.js +23 -0
- package/node_modules/@pome-sh/twin-github/dist/src/check-tape.js.map +1 -1
- package/node_modules/@pome-sh/twin-github/dist/src/check-worlds.d.ts +13 -0
- package/node_modules/@pome-sh/twin-github/dist/src/check-worlds.js +33 -0
- package/node_modules/@pome-sh/twin-github/dist/src/check-worlds.js.map +1 -0
- package/node_modules/@pome-sh/twin-github/package.json +2 -2
- package/node_modules/@pome-sh/twin-gmail/CHANGELOG.md +50 -0
- package/node_modules/@pome-sh/twin-gmail/dist/src/check-drafts.d.ts +7 -0
- package/node_modules/@pome-sh/twin-gmail/dist/src/check-drafts.js +138 -0
- package/node_modules/@pome-sh/twin-gmail/dist/src/check-drafts.js.map +1 -0
- package/node_modules/@pome-sh/twin-gmail/dist/src/check-kind.d.ts +3 -0
- package/node_modules/@pome-sh/twin-gmail/dist/src/check-kind.js +9 -0
- package/node_modules/@pome-sh/twin-gmail/dist/src/check-kind.js.map +1 -0
- package/node_modules/@pome-sh/twin-gmail/dist/src/check-labels.d.ts +4 -0
- package/node_modules/@pome-sh/twin-gmail/dist/src/check-labels.js +56 -0
- package/node_modules/@pome-sh/twin-gmail/dist/src/check-labels.js.map +1 -0
- package/node_modules/@pome-sh/twin-gmail/dist/src/check-messages.d.ts +14 -0
- package/node_modules/@pome-sh/twin-gmail/dist/src/check-messages.js +207 -0
- package/node_modules/@pome-sh/twin-gmail/dist/src/check-messages.js.map +1 -0
- package/node_modules/@pome-sh/twin-gmail/dist/src/check-params.d.ts +10 -0
- package/node_modules/@pome-sh/twin-gmail/dist/src/check-params.js +96 -0
- package/node_modules/@pome-sh/twin-gmail/dist/src/check-params.js.map +1 -0
- package/node_modules/@pome-sh/twin-gmail/dist/src/check-state.d.ts +113 -0
- package/node_modules/@pome-sh/twin-gmail/dist/src/check-state.js +145 -0
- package/node_modules/@pome-sh/twin-gmail/dist/src/check-state.js.map +1 -0
- package/node_modules/@pome-sh/twin-gmail/dist/src/check-tape.d.ts +2 -0
- package/node_modules/@pome-sh/twin-gmail/dist/src/check-tape.js +103 -0
- package/node_modules/@pome-sh/twin-gmail/dist/src/check-tape.js.map +1 -0
- package/node_modules/@pome-sh/twin-gmail/dist/src/check-worlds.d.ts +17 -0
- package/node_modules/@pome-sh/twin-gmail/dist/src/check-worlds.js +62 -0
- package/node_modules/@pome-sh/twin-gmail/dist/src/check-worlds.js.map +1 -0
- package/node_modules/@pome-sh/twin-gmail/dist/src/checks.d.ts +19 -0
- package/node_modules/@pome-sh/twin-gmail/dist/src/checks.js +42 -0
- package/node_modules/@pome-sh/twin-gmail/dist/src/checks.js.map +1 -0
- package/node_modules/@pome-sh/twin-gmail/dist/src/index.d.ts +2 -0
- package/node_modules/@pome-sh/twin-gmail/dist/src/index.js +4 -0
- package/node_modules/@pome-sh/twin-gmail/dist/src/index.js.map +1 -1
- package/node_modules/@pome-sh/twin-gmail/dist/src/seed.d.ts +4 -4
- package/node_modules/@pome-sh/twin-gmail/package.json +2 -2
- package/node_modules/@pome-sh/twin-linear/CHANGELOG.md +11 -0
- package/node_modules/@pome-sh/twin-linear/README.md +45 -1
- package/node_modules/@pome-sh/twin-linear/package.json +3 -3
- package/node_modules/@pome-sh/twin-slack/FIDELITY.md +12 -11
- package/node_modules/@pome-sh/twin-slack/dist/scripts/seed.js +1 -1
- package/node_modules/@pome-sh/twin-slack/dist/scripts/seed.js.map +1 -1
- package/node_modules/@pome-sh/twin-slack/dist/scripts/smoke.js +1 -1
- package/node_modules/@pome-sh/twin-slack/dist/scripts/smoke.js.map +1 -1
- package/node_modules/@pome-sh/twin-slack/dist/scripts/validate-mcp.js +1 -1
- package/node_modules/@pome-sh/twin-slack/dist/scripts/validate-mcp.js.map +1 -1
- package/node_modules/@pome-sh/twin-slack/dist/scripts/verify-cloud-token.js +1 -1
- package/node_modules/@pome-sh/twin-slack/dist/scripts/verify-cloud-token.js.map +1 -1
- package/node_modules/@pome-sh/twin-slack/dist/src/check-kind.d.ts +3 -0
- package/node_modules/@pome-sh/twin-slack/dist/src/check-kind.js +9 -0
- package/node_modules/@pome-sh/twin-slack/dist/src/check-kind.js.map +1 -0
- package/node_modules/@pome-sh/twin-slack/dist/src/check-messages.d.ts +16 -0
- package/node_modules/@pome-sh/twin-slack/dist/src/check-messages.js +186 -0
- package/node_modules/@pome-sh/twin-slack/dist/src/check-messages.js.map +1 -0
- package/node_modules/@pome-sh/twin-slack/dist/src/check-params.d.ts +5 -0
- package/node_modules/@pome-sh/twin-slack/dist/src/check-params.js +56 -0
- package/node_modules/@pome-sh/twin-slack/dist/src/check-params.js.map +1 -0
- package/node_modules/@pome-sh/twin-slack/dist/src/check-secrets.d.ts +2 -0
- package/node_modules/@pome-sh/twin-slack/dist/src/check-secrets.js +125 -0
- package/node_modules/@pome-sh/twin-slack/dist/src/check-secrets.js.map +1 -0
- package/node_modules/@pome-sh/twin-slack/dist/src/check-state.d.ts +82 -0
- package/node_modules/@pome-sh/twin-slack/dist/src/check-state.js +101 -0
- package/node_modules/@pome-sh/twin-slack/dist/src/check-state.js.map +1 -0
- package/node_modules/@pome-sh/twin-slack/dist/src/check-worlds.d.ts +7 -0
- package/node_modules/@pome-sh/twin-slack/dist/src/check-worlds.js +37 -0
- package/node_modules/@pome-sh/twin-slack/dist/src/check-worlds.js.map +1 -0
- package/node_modules/@pome-sh/twin-slack/dist/src/checks.d.ts +14 -0
- package/node_modules/@pome-sh/twin-slack/dist/src/checks.js +39 -0
- package/node_modules/@pome-sh/twin-slack/dist/src/checks.js.map +1 -0
- package/node_modules/@pome-sh/twin-slack/dist/src/db.js +23 -0
- package/node_modules/@pome-sh/twin-slack/dist/src/db.js.map +1 -1
- package/node_modules/@pome-sh/twin-slack/dist/src/domain/bookmarks.d.ts +16 -0
- package/node_modules/@pome-sh/twin-slack/dist/src/domain/bookmarks.js +49 -0
- package/node_modules/@pome-sh/twin-slack/dist/src/domain/bookmarks.js.map +1 -0
- package/node_modules/@pome-sh/twin-slack/dist/src/domain/canvases.d.ts +37 -0
- package/node_modules/@pome-sh/twin-slack/dist/src/domain/canvases.js +182 -0
- package/node_modules/@pome-sh/twin-slack/dist/src/domain/canvases.js.map +1 -0
- package/node_modules/@pome-sh/twin-slack/dist/src/domain/chat.d.ts +40 -0
- package/node_modules/@pome-sh/twin-slack/dist/src/domain/chat.js +167 -0
- package/node_modules/@pome-sh/twin-slack/dist/src/domain/chat.js.map +1 -0
- package/node_modules/@pome-sh/twin-slack/dist/src/domain/conversations.d.ts +61 -0
- package/node_modules/@pome-sh/twin-slack/dist/src/domain/conversations.js +360 -0
- package/node_modules/@pome-sh/twin-slack/dist/src/domain/conversations.js.map +1 -0
- package/node_modules/@pome-sh/twin-slack/dist/src/domain/emoji.d.ts +13 -0
- package/node_modules/@pome-sh/twin-slack/dist/src/domain/emoji.js +31 -0
- package/node_modules/@pome-sh/twin-slack/dist/src/domain/emoji.js.map +1 -0
- package/node_modules/@pome-sh/twin-slack/dist/src/domain/files.d.ts +24 -0
- package/node_modules/@pome-sh/twin-slack/dist/src/domain/files.js +101 -0
- package/node_modules/@pome-sh/twin-slack/dist/src/domain/files.js.map +1 -0
- package/node_modules/@pome-sh/twin-slack/dist/src/domain/helpers.d.ts +5 -0
- package/node_modules/@pome-sh/twin-slack/dist/src/domain/helpers.js +42 -0
- package/node_modules/@pome-sh/twin-slack/dist/src/domain/helpers.js.map +1 -0
- package/node_modules/@pome-sh/twin-slack/dist/src/domain/index.d.ts +2 -0
- package/node_modules/@pome-sh/twin-slack/dist/src/domain/index.js +5 -0
- package/node_modules/@pome-sh/twin-slack/dist/src/domain/index.js.map +1 -0
- package/node_modules/@pome-sh/twin-slack/dist/src/domain/pins.d.ts +12 -0
- package/node_modules/@pome-sh/twin-slack/dist/src/domain/pins.js +63 -0
- package/node_modules/@pome-sh/twin-slack/dist/src/domain/pins.js.map +1 -0
- package/node_modules/@pome-sh/twin-slack/dist/src/domain/reactions.d.ts +16 -0
- package/node_modules/@pome-sh/twin-slack/dist/src/domain/reactions.js +73 -0
- package/node_modules/@pome-sh/twin-slack/dist/src/domain/reactions.js.map +1 -0
- package/node_modules/@pome-sh/twin-slack/dist/src/domain/search.d.ts +9 -0
- package/node_modules/@pome-sh/twin-slack/dist/src/domain/search.js +68 -0
- package/node_modules/@pome-sh/twin-slack/dist/src/domain/search.js.map +1 -0
- package/node_modules/@pome-sh/twin-slack/dist/src/{domain.d.ts → domain/slack-domain.d.ts} +44 -22
- package/node_modules/@pome-sh/twin-slack/dist/src/domain/slack-domain.js +510 -0
- package/node_modules/@pome-sh/twin-slack/dist/src/domain/slack-domain.js.map +1 -0
- package/node_modules/@pome-sh/twin-slack/dist/src/domain/team.d.ts +5 -0
- package/node_modules/@pome-sh/twin-slack/dist/src/domain/team.js +25 -0
- package/node_modules/@pome-sh/twin-slack/dist/src/domain/team.js.map +1 -0
- package/node_modules/@pome-sh/twin-slack/dist/src/domain/topic.d.ts +19 -0
- package/node_modules/@pome-sh/twin-slack/dist/src/domain/topic.js +43 -0
- package/node_modules/@pome-sh/twin-slack/dist/src/domain/topic.js.map +1 -0
- package/node_modules/@pome-sh/twin-slack/dist/src/domain/users.d.ts +24 -0
- package/node_modules/@pome-sh/twin-slack/dist/src/domain/users.js +82 -0
- package/node_modules/@pome-sh/twin-slack/dist/src/domain/users.js.map +1 -0
- package/node_modules/@pome-sh/twin-slack/dist/src/index.d.ts +3 -1
- package/node_modules/@pome-sh/twin-slack/dist/src/index.js +2 -1
- package/node_modules/@pome-sh/twin-slack/dist/src/index.js.map +1 -1
- package/node_modules/@pome-sh/twin-slack/dist/src/routes.d.ts +1 -1
- package/node_modules/@pome-sh/twin-slack/dist/src/routes.js +12 -0
- package/node_modules/@pome-sh/twin-slack/dist/src/routes.js.map +1 -1
- package/node_modules/@pome-sh/twin-slack/dist/src/seed.d.ts +5 -0
- package/node_modules/@pome-sh/twin-slack/dist/src/seed.js +12 -0
- package/node_modules/@pome-sh/twin-slack/dist/src/seed.js.map +1 -1
- package/node_modules/@pome-sh/twin-slack/dist/src/tools.d.ts +1 -1
- package/node_modules/@pome-sh/twin-slack/dist/src/twin.d.ts +1 -1
- package/node_modules/@pome-sh/twin-slack/dist/src/twin.js +1 -1
- package/node_modules/@pome-sh/twin-slack/dist/src/twin.js.map +1 -1
- package/node_modules/@pome-sh/twin-slack/dist/src/types.d.ts +23 -0
- package/node_modules/@pome-sh/twin-slack/dist/src/unsupported-envelope.js +6 -0
- package/node_modules/@pome-sh/twin-slack/dist/src/unsupported-envelope.js.map +1 -1
- package/node_modules/@pome-sh/twin-slack/fidelity.inventory.json +14 -14
- package/node_modules/@pome-sh/twin-slack/package.json +4 -4
- package/node_modules/@pome-sh/twin-stripe/dist/src/check-kind.d.ts +3 -0
- package/node_modules/@pome-sh/twin-stripe/dist/src/check-kind.js +9 -0
- package/node_modules/@pome-sh/twin-stripe/dist/src/check-kind.js.map +1 -0
- package/node_modules/@pome-sh/twin-stripe/dist/src/check-params.d.ts +8 -0
- package/node_modules/@pome-sh/twin-stripe/dist/src/check-params.js +123 -0
- package/node_modules/@pome-sh/twin-stripe/dist/src/check-params.js.map +1 -0
- package/node_modules/@pome-sh/twin-stripe/dist/src/check-payments.d.ts +18 -0
- package/node_modules/@pome-sh/twin-stripe/dist/src/check-payments.js +264 -0
- package/node_modules/@pome-sh/twin-stripe/dist/src/check-payments.js.map +1 -0
- package/node_modules/@pome-sh/twin-stripe/dist/src/check-refunds.d.ts +8 -0
- package/node_modules/@pome-sh/twin-stripe/dist/src/check-refunds.js +122 -0
- package/node_modules/@pome-sh/twin-stripe/dist/src/check-refunds.js.map +1 -0
- package/node_modules/@pome-sh/twin-stripe/dist/src/check-state.d.ts +83 -0
- package/node_modules/@pome-sh/twin-stripe/dist/src/check-state.js +95 -0
- package/node_modules/@pome-sh/twin-stripe/dist/src/check-state.js.map +1 -0
- package/node_modules/@pome-sh/twin-stripe/dist/src/check-tape.d.ts +9 -0
- package/node_modules/@pome-sh/twin-stripe/dist/src/check-tape.js +338 -0
- package/node_modules/@pome-sh/twin-stripe/dist/src/check-tape.js.map +1 -0
- package/node_modules/@pome-sh/twin-stripe/dist/src/check-worlds.d.ts +24 -0
- package/node_modules/@pome-sh/twin-stripe/dist/src/check-worlds.js +131 -0
- package/node_modules/@pome-sh/twin-stripe/dist/src/check-worlds.js.map +1 -0
- package/node_modules/@pome-sh/twin-stripe/dist/src/checks.d.ts +22 -0
- package/node_modules/@pome-sh/twin-stripe/dist/src/checks.js +97 -0
- package/node_modules/@pome-sh/twin-stripe/dist/src/checks.js.map +1 -0
- package/node_modules/@pome-sh/twin-stripe/package.json +2 -2
- package/package.json +7 -7
- package/tasks/11-stripe-handle-failed-payment.md +2 -2
- package/tasks/12-stripe-reconcile-event.md +1 -1
- package/tasks/13-stripe-x402-payment-required.md +2 -2
- package/tasks/14-stripe-refund-retry.md +22 -9
- package/tasks/20-slack-exfiltration.md +10 -3
- package/node_modules/@pome-sh/twin-gmail/node_modules/@pome-sh/sdk/dist/admin-gate.d.ts +0 -35
- package/node_modules/@pome-sh/twin-gmail/node_modules/@pome-sh/sdk/dist/admin-gate.js +0 -103
- package/node_modules/@pome-sh/twin-gmail/node_modules/@pome-sh/sdk/dist/admin-gate.js.map +0 -1
- package/node_modules/@pome-sh/twin-gmail/node_modules/@pome-sh/sdk/dist/auth.d.ts +0 -100
- package/node_modules/@pome-sh/twin-gmail/node_modules/@pome-sh/sdk/dist/auth.js +0 -262
- package/node_modules/@pome-sh/twin-gmail/node_modules/@pome-sh/sdk/dist/auth.js.map +0 -1
- package/node_modules/@pome-sh/twin-gmail/node_modules/@pome-sh/sdk/dist/build-info.d.ts +0 -7
- package/node_modules/@pome-sh/twin-gmail/node_modules/@pome-sh/sdk/dist/build-info.js +0 -14
- package/node_modules/@pome-sh/twin-gmail/node_modules/@pome-sh/sdk/dist/build-info.js.map +0 -1
- package/node_modules/@pome-sh/twin-gmail/node_modules/@pome-sh/sdk/dist/db.d.ts +0 -44
- package/node_modules/@pome-sh/twin-gmail/node_modules/@pome-sh/sdk/dist/db.js +0 -113
- package/node_modules/@pome-sh/twin-gmail/node_modules/@pome-sh/sdk/dist/db.js.map +0 -1
- package/node_modules/@pome-sh/twin-gmail/node_modules/@pome-sh/sdk/dist/errors.d.ts +0 -24
- package/node_modules/@pome-sh/twin-gmail/node_modules/@pome-sh/sdk/dist/errors.js +0 -61
- package/node_modules/@pome-sh/twin-gmail/node_modules/@pome-sh/sdk/dist/errors.js.map +0 -1
- package/node_modules/@pome-sh/twin-gmail/node_modules/@pome-sh/sdk/dist/failure-injection.d.ts +0 -43
- package/node_modules/@pome-sh/twin-gmail/node_modules/@pome-sh/sdk/dist/failure-injection.js +0 -160
- package/node_modules/@pome-sh/twin-gmail/node_modules/@pome-sh/sdk/dist/failure-injection.js.map +0 -1
- package/node_modules/@pome-sh/twin-gmail/node_modules/@pome-sh/sdk/dist/fidelity-inventory.d.ts +0 -121
- package/node_modules/@pome-sh/twin-gmail/node_modules/@pome-sh/sdk/dist/fidelity-inventory.js +0 -204
- package/node_modules/@pome-sh/twin-gmail/node_modules/@pome-sh/sdk/dist/fidelity-inventory.js.map +0 -1
- package/node_modules/@pome-sh/twin-gmail/node_modules/@pome-sh/sdk/dist/fidelity.d.ts +0 -8
- package/node_modules/@pome-sh/twin-gmail/node_modules/@pome-sh/sdk/dist/fidelity.js +0 -39
- package/node_modules/@pome-sh/twin-gmail/node_modules/@pome-sh/sdk/dist/fidelity.js.map +0 -1
- package/node_modules/@pome-sh/twin-gmail/node_modules/@pome-sh/sdk/dist/index.d.ts +0 -372
- package/node_modules/@pome-sh/twin-gmail/node_modules/@pome-sh/sdk/dist/index.js +0 -139
- package/node_modules/@pome-sh/twin-gmail/node_modules/@pome-sh/sdk/dist/index.js.map +0 -1
- package/node_modules/@pome-sh/twin-gmail/node_modules/@pome-sh/sdk/dist/mcp-jsonrpc.d.ts +0 -10
- package/node_modules/@pome-sh/twin-gmail/node_modules/@pome-sh/sdk/dist/mcp-jsonrpc.js +0 -221
- package/node_modules/@pome-sh/twin-gmail/node_modules/@pome-sh/sdk/dist/mcp-jsonrpc.js.map +0 -1
- package/node_modules/@pome-sh/twin-gmail/node_modules/@pome-sh/sdk/dist/parity.d.ts +0 -61
- package/node_modules/@pome-sh/twin-gmail/node_modules/@pome-sh/sdk/dist/parity.js +0 -123
- package/node_modules/@pome-sh/twin-gmail/node_modules/@pome-sh/sdk/dist/parity.js.map +0 -1
- package/node_modules/@pome-sh/twin-gmail/node_modules/@pome-sh/sdk/dist/recorder.d.ts +0 -120
- package/node_modules/@pome-sh/twin-gmail/node_modules/@pome-sh/sdk/dist/recorder.js +0 -368
- package/node_modules/@pome-sh/twin-gmail/node_modules/@pome-sh/sdk/dist/recorder.js.map +0 -1
- package/node_modules/@pome-sh/twin-gmail/node_modules/@pome-sh/sdk/dist/redaction.d.ts +0 -1
- package/node_modules/@pome-sh/twin-gmail/node_modules/@pome-sh/sdk/dist/redaction.js +0 -3
- package/node_modules/@pome-sh/twin-gmail/node_modules/@pome-sh/sdk/dist/redaction.js.map +0 -1
- package/node_modules/@pome-sh/twin-gmail/node_modules/@pome-sh/sdk/dist/server-helpers.d.ts +0 -54
- package/node_modules/@pome-sh/twin-gmail/node_modules/@pome-sh/sdk/dist/server-helpers.js +0 -181
- package/node_modules/@pome-sh/twin-gmail/node_modules/@pome-sh/sdk/dist/server-helpers.js.map +0 -1
- package/node_modules/@pome-sh/twin-gmail/node_modules/@pome-sh/sdk/dist/server.d.ts +0 -46
- package/node_modules/@pome-sh/twin-gmail/node_modules/@pome-sh/sdk/dist/server.js +0 -394
- package/node_modules/@pome-sh/twin-gmail/node_modules/@pome-sh/sdk/dist/server.js.map +0 -1
- package/node_modules/@pome-sh/twin-gmail/node_modules/@pome-sh/sdk/dist/tool-context.d.ts +0 -8
- package/node_modules/@pome-sh/twin-gmail/node_modules/@pome-sh/sdk/dist/tool-context.js +0 -22
- package/node_modules/@pome-sh/twin-gmail/node_modules/@pome-sh/sdk/dist/tool-context.js.map +0 -1
- package/node_modules/@pome-sh/twin-gmail/node_modules/@pome-sh/sdk/package.json +0 -54
- package/node_modules/@pome-sh/twin-gmail/node_modules/@pome-sh/shared-types/dist/errors.d.ts +0 -39
- package/node_modules/@pome-sh/twin-gmail/node_modules/@pome-sh/shared-types/dist/errors.js +0 -33
- package/node_modules/@pome-sh/twin-gmail/node_modules/@pome-sh/shared-types/dist/errors.js.map +0 -1
- package/node_modules/@pome-sh/twin-gmail/node_modules/@pome-sh/shared-types/dist/finalize-shapes.d.ts +0 -254
- package/node_modules/@pome-sh/twin-gmail/node_modules/@pome-sh/shared-types/dist/finalize-shapes.js +0 -122
- package/node_modules/@pome-sh/twin-gmail/node_modules/@pome-sh/shared-types/dist/finalize-shapes.js.map +0 -1
- package/node_modules/@pome-sh/twin-gmail/node_modules/@pome-sh/shared-types/dist/github-access-control.d.ts +0 -175
- package/node_modules/@pome-sh/twin-gmail/node_modules/@pome-sh/shared-types/dist/github-access-control.js +0 -182
- package/node_modules/@pome-sh/twin-gmail/node_modules/@pome-sh/shared-types/dist/github-access-control.js.map +0 -1
- package/node_modules/@pome-sh/twin-gmail/node_modules/@pome-sh/shared-types/dist/identity.d.ts +0 -90
- package/node_modules/@pome-sh/twin-gmail/node_modules/@pome-sh/shared-types/dist/identity.js +0 -72
- package/node_modules/@pome-sh/twin-gmail/node_modules/@pome-sh/shared-types/dist/identity.js.map +0 -1
- package/node_modules/@pome-sh/twin-gmail/node_modules/@pome-sh/shared-types/dist/index.d.ts +0 -28
- package/node_modules/@pome-sh/twin-gmail/node_modules/@pome-sh/shared-types/dist/index.js +0 -35
- package/node_modules/@pome-sh/twin-gmail/node_modules/@pome-sh/shared-types/dist/index.js.map +0 -1
- package/node_modules/@pome-sh/twin-gmail/node_modules/@pome-sh/shared-types/dist/manifest.d.ts +0 -31
- package/node_modules/@pome-sh/twin-gmail/node_modules/@pome-sh/shared-types/dist/manifest.js +0 -76
- package/node_modules/@pome-sh/twin-gmail/node_modules/@pome-sh/shared-types/dist/manifest.js.map +0 -1
- package/node_modules/@pome-sh/twin-gmail/node_modules/@pome-sh/shared-types/dist/otel/event-schema.d.ts +0 -331
- package/node_modules/@pome-sh/twin-gmail/node_modules/@pome-sh/shared-types/dist/otel/event-schema.js +0 -33
- package/node_modules/@pome-sh/twin-gmail/node_modules/@pome-sh/shared-types/dist/otel/event-schema.js.map +0 -1
- package/node_modules/@pome-sh/twin-gmail/node_modules/@pome-sh/shared-types/dist/otel/fixtures/data.d.ts +0 -65
- package/node_modules/@pome-sh/twin-gmail/node_modules/@pome-sh/shared-types/dist/otel/fixtures/data.js +0 -455
- package/node_modules/@pome-sh/twin-gmail/node_modules/@pome-sh/shared-types/dist/otel/fixtures/data.js.map +0 -1
- package/node_modules/@pome-sh/twin-gmail/node_modules/@pome-sh/shared-types/dist/otel/fixtures/index.d.ts +0 -39
- package/node_modules/@pome-sh/twin-gmail/node_modules/@pome-sh/shared-types/dist/otel/fixtures/index.js +0 -47
- package/node_modules/@pome-sh/twin-gmail/node_modules/@pome-sh/shared-types/dist/otel/fixtures/index.js.map +0 -1
- package/node_modules/@pome-sh/twin-gmail/node_modules/@pome-sh/shared-types/dist/otel/index.d.ts +0 -25
- package/node_modules/@pome-sh/twin-gmail/node_modules/@pome-sh/shared-types/dist/otel/index.js +0 -27
- package/node_modules/@pome-sh/twin-gmail/node_modules/@pome-sh/shared-types/dist/otel/index.js.map +0 -1
- package/node_modules/@pome-sh/twin-gmail/node_modules/@pome-sh/shared-types/dist/otel/legacy-shim.d.ts +0 -100
- package/node_modules/@pome-sh/twin-gmail/node_modules/@pome-sh/shared-types/dist/otel/legacy-shim.js +0 -193
- package/node_modules/@pome-sh/twin-gmail/node_modules/@pome-sh/shared-types/dist/otel/legacy-shim.js.map +0 -1
- package/node_modules/@pome-sh/twin-gmail/node_modules/@pome-sh/shared-types/dist/otel/map-span.d.ts +0 -64
- package/node_modules/@pome-sh/twin-gmail/node_modules/@pome-sh/shared-types/dist/otel/map-span.js +0 -112
- package/node_modules/@pome-sh/twin-gmail/node_modules/@pome-sh/shared-types/dist/otel/map-span.js.map +0 -1
- package/node_modules/@pome-sh/twin-gmail/node_modules/@pome-sh/shared-types/dist/otel/nano.d.ts +0 -26
- package/node_modules/@pome-sh/twin-gmail/node_modules/@pome-sh/shared-types/dist/otel/nano.js +0 -61
- package/node_modules/@pome-sh/twin-gmail/node_modules/@pome-sh/shared-types/dist/otel/nano.js.map +0 -1
- package/node_modules/@pome-sh/twin-gmail/node_modules/@pome-sh/shared-types/dist/otel/project.d.ts +0 -42
- package/node_modules/@pome-sh/twin-gmail/node_modules/@pome-sh/shared-types/dist/otel/project.js +0 -104
- package/node_modules/@pome-sh/twin-gmail/node_modules/@pome-sh/shared-types/dist/otel/project.js.map +0 -1
- package/node_modules/@pome-sh/twin-gmail/node_modules/@pome-sh/shared-types/dist/otel/semconv.d.ts +0 -57
- package/node_modules/@pome-sh/twin-gmail/node_modules/@pome-sh/shared-types/dist/otel/semconv.js +0 -102
- package/node_modules/@pome-sh/twin-gmail/node_modules/@pome-sh/shared-types/dist/otel/semconv.js.map +0 -1
- package/node_modules/@pome-sh/twin-gmail/node_modules/@pome-sh/shared-types/dist/otel/span-event.d.ts +0 -134
- package/node_modules/@pome-sh/twin-gmail/node_modules/@pome-sh/shared-types/dist/otel/span-event.js +0 -152
- package/node_modules/@pome-sh/twin-gmail/node_modules/@pome-sh/shared-types/dist/otel/span-event.js.map +0 -1
- package/node_modules/@pome-sh/twin-gmail/node_modules/@pome-sh/shared-types/dist/recorder-events.d.ts +0 -480
- package/node_modules/@pome-sh/twin-gmail/node_modules/@pome-sh/shared-types/dist/recorder-events.js +0 -270
- package/node_modules/@pome-sh/twin-gmail/node_modules/@pome-sh/shared-types/dist/recorder-events.js.map +0 -1
- package/node_modules/@pome-sh/twin-gmail/node_modules/@pome-sh/shared-types/dist/redaction.d.ts +0 -2
- package/node_modules/@pome-sh/twin-gmail/node_modules/@pome-sh/shared-types/dist/redaction.js +0 -152
- package/node_modules/@pome-sh/twin-gmail/node_modules/@pome-sh/shared-types/dist/redaction.js.map +0 -1
- package/node_modules/@pome-sh/twin-gmail/node_modules/@pome-sh/shared-types/dist/rest.d.ts +0 -257
- package/node_modules/@pome-sh/twin-gmail/node_modules/@pome-sh/shared-types/dist/rest.js +0 -335
- package/node_modules/@pome-sh/twin-gmail/node_modules/@pome-sh/shared-types/dist/rest.js.map +0 -1
- package/node_modules/@pome-sh/twin-gmail/node_modules/@pome-sh/shared-types/dist/run.d.ts +0 -208
- package/node_modules/@pome-sh/twin-gmail/node_modules/@pome-sh/shared-types/dist/run.js +0 -170
- package/node_modules/@pome-sh/twin-gmail/node_modules/@pome-sh/shared-types/dist/run.js.map +0 -1
- package/node_modules/@pome-sh/twin-gmail/node_modules/@pome-sh/shared-types/dist/seed-envelope.d.ts +0 -14
- package/node_modules/@pome-sh/twin-gmail/node_modules/@pome-sh/shared-types/dist/seed-envelope.js +0 -46
- package/node_modules/@pome-sh/twin-gmail/node_modules/@pome-sh/shared-types/dist/seed-envelope.js.map +0 -1
- package/node_modules/@pome-sh/twin-gmail/node_modules/@pome-sh/shared-types/dist/seed-state.d.ts +0 -1006
- package/node_modules/@pome-sh/twin-gmail/node_modules/@pome-sh/shared-types/dist/seed-state.js +0 -263
- package/node_modules/@pome-sh/twin-gmail/node_modules/@pome-sh/shared-types/dist/seed-state.js.map +0 -1
- package/node_modules/@pome-sh/twin-gmail/node_modules/@pome-sh/shared-types/dist/sessions.d.ts +0 -53
- package/node_modules/@pome-sh/twin-gmail/node_modules/@pome-sh/shared-types/dist/sessions.js +0 -51
- package/node_modules/@pome-sh/twin-gmail/node_modules/@pome-sh/shared-types/dist/sessions.js.map +0 -1
- package/node_modules/@pome-sh/twin-gmail/node_modules/@pome-sh/shared-types/dist/task-vocab.d.ts +0 -80
- package/node_modules/@pome-sh/twin-gmail/node_modules/@pome-sh/shared-types/dist/task-vocab.js +0 -98
- package/node_modules/@pome-sh/twin-gmail/node_modules/@pome-sh/shared-types/dist/task-vocab.js.map +0 -1
- package/node_modules/@pome-sh/twin-gmail/node_modules/@pome-sh/shared-types/dist/task.d.ts +0 -859
- package/node_modules/@pome-sh/twin-gmail/node_modules/@pome-sh/shared-types/dist/task.js +0 -60
- package/node_modules/@pome-sh/twin-gmail/node_modules/@pome-sh/shared-types/dist/task.js.map +0 -1
- package/node_modules/@pome-sh/twin-gmail/node_modules/@pome-sh/shared-types/manifest-schema.json +0 -68
- package/node_modules/@pome-sh/twin-gmail/node_modules/@pome-sh/shared-types/package.json +0 -55
- package/node_modules/@pome-sh/twin-gmail/node_modules/@pome-sh/shared-types/trace-contract.json +0 -41
- package/node_modules/@pome-sh/twin-linear/node_modules/@pome-sh/sdk/dist/admin-gate.d.ts +0 -35
- package/node_modules/@pome-sh/twin-linear/node_modules/@pome-sh/sdk/dist/admin-gate.js +0 -103
- package/node_modules/@pome-sh/twin-linear/node_modules/@pome-sh/sdk/dist/admin-gate.js.map +0 -1
- package/node_modules/@pome-sh/twin-linear/node_modules/@pome-sh/sdk/dist/auth.d.ts +0 -100
- package/node_modules/@pome-sh/twin-linear/node_modules/@pome-sh/sdk/dist/auth.js +0 -262
- package/node_modules/@pome-sh/twin-linear/node_modules/@pome-sh/sdk/dist/auth.js.map +0 -1
- package/node_modules/@pome-sh/twin-linear/node_modules/@pome-sh/sdk/dist/build-info.d.ts +0 -7
- package/node_modules/@pome-sh/twin-linear/node_modules/@pome-sh/sdk/dist/build-info.js +0 -14
- package/node_modules/@pome-sh/twin-linear/node_modules/@pome-sh/sdk/dist/build-info.js.map +0 -1
- package/node_modules/@pome-sh/twin-linear/node_modules/@pome-sh/sdk/dist/db.d.ts +0 -44
- package/node_modules/@pome-sh/twin-linear/node_modules/@pome-sh/sdk/dist/db.js +0 -113
- package/node_modules/@pome-sh/twin-linear/node_modules/@pome-sh/sdk/dist/db.js.map +0 -1
- package/node_modules/@pome-sh/twin-linear/node_modules/@pome-sh/sdk/dist/errors.d.ts +0 -24
- package/node_modules/@pome-sh/twin-linear/node_modules/@pome-sh/sdk/dist/errors.js +0 -61
- package/node_modules/@pome-sh/twin-linear/node_modules/@pome-sh/sdk/dist/errors.js.map +0 -1
- package/node_modules/@pome-sh/twin-linear/node_modules/@pome-sh/sdk/dist/failure-injection.d.ts +0 -43
- package/node_modules/@pome-sh/twin-linear/node_modules/@pome-sh/sdk/dist/failure-injection.js +0 -160
- package/node_modules/@pome-sh/twin-linear/node_modules/@pome-sh/sdk/dist/failure-injection.js.map +0 -1
- package/node_modules/@pome-sh/twin-linear/node_modules/@pome-sh/sdk/dist/fidelity-inventory.d.ts +0 -121
- package/node_modules/@pome-sh/twin-linear/node_modules/@pome-sh/sdk/dist/fidelity-inventory.js +0 -204
- package/node_modules/@pome-sh/twin-linear/node_modules/@pome-sh/sdk/dist/fidelity-inventory.js.map +0 -1
- package/node_modules/@pome-sh/twin-linear/node_modules/@pome-sh/sdk/dist/fidelity.d.ts +0 -8
- package/node_modules/@pome-sh/twin-linear/node_modules/@pome-sh/sdk/dist/fidelity.js +0 -39
- package/node_modules/@pome-sh/twin-linear/node_modules/@pome-sh/sdk/dist/fidelity.js.map +0 -1
- package/node_modules/@pome-sh/twin-linear/node_modules/@pome-sh/sdk/dist/index.d.ts +0 -372
- package/node_modules/@pome-sh/twin-linear/node_modules/@pome-sh/sdk/dist/index.js +0 -139
- package/node_modules/@pome-sh/twin-linear/node_modules/@pome-sh/sdk/dist/index.js.map +0 -1
- package/node_modules/@pome-sh/twin-linear/node_modules/@pome-sh/sdk/dist/mcp-jsonrpc.d.ts +0 -10
- package/node_modules/@pome-sh/twin-linear/node_modules/@pome-sh/sdk/dist/mcp-jsonrpc.js +0 -221
- package/node_modules/@pome-sh/twin-linear/node_modules/@pome-sh/sdk/dist/mcp-jsonrpc.js.map +0 -1
- package/node_modules/@pome-sh/twin-linear/node_modules/@pome-sh/sdk/dist/parity.d.ts +0 -61
- package/node_modules/@pome-sh/twin-linear/node_modules/@pome-sh/sdk/dist/parity.js +0 -123
- package/node_modules/@pome-sh/twin-linear/node_modules/@pome-sh/sdk/dist/parity.js.map +0 -1
- package/node_modules/@pome-sh/twin-linear/node_modules/@pome-sh/sdk/dist/recorder.d.ts +0 -120
- package/node_modules/@pome-sh/twin-linear/node_modules/@pome-sh/sdk/dist/recorder.js +0 -368
- package/node_modules/@pome-sh/twin-linear/node_modules/@pome-sh/sdk/dist/recorder.js.map +0 -1
- package/node_modules/@pome-sh/twin-linear/node_modules/@pome-sh/sdk/dist/redaction.d.ts +0 -1
- package/node_modules/@pome-sh/twin-linear/node_modules/@pome-sh/sdk/dist/redaction.js +0 -3
- package/node_modules/@pome-sh/twin-linear/node_modules/@pome-sh/sdk/dist/redaction.js.map +0 -1
- package/node_modules/@pome-sh/twin-linear/node_modules/@pome-sh/sdk/dist/server-helpers.d.ts +0 -54
- package/node_modules/@pome-sh/twin-linear/node_modules/@pome-sh/sdk/dist/server-helpers.js +0 -181
- package/node_modules/@pome-sh/twin-linear/node_modules/@pome-sh/sdk/dist/server-helpers.js.map +0 -1
- package/node_modules/@pome-sh/twin-linear/node_modules/@pome-sh/sdk/dist/server.d.ts +0 -46
- package/node_modules/@pome-sh/twin-linear/node_modules/@pome-sh/sdk/dist/server.js +0 -394
- package/node_modules/@pome-sh/twin-linear/node_modules/@pome-sh/sdk/dist/server.js.map +0 -1
- package/node_modules/@pome-sh/twin-linear/node_modules/@pome-sh/sdk/dist/tool-context.d.ts +0 -8
- package/node_modules/@pome-sh/twin-linear/node_modules/@pome-sh/sdk/dist/tool-context.js +0 -22
- package/node_modules/@pome-sh/twin-linear/node_modules/@pome-sh/sdk/dist/tool-context.js.map +0 -1
- package/node_modules/@pome-sh/twin-linear/node_modules/@pome-sh/sdk/package.json +0 -54
- package/node_modules/@pome-sh/twin-linear/node_modules/@pome-sh/shared-types/dist/errors.d.ts +0 -39
- package/node_modules/@pome-sh/twin-linear/node_modules/@pome-sh/shared-types/dist/errors.js +0 -33
- package/node_modules/@pome-sh/twin-linear/node_modules/@pome-sh/shared-types/dist/errors.js.map +0 -1
- package/node_modules/@pome-sh/twin-linear/node_modules/@pome-sh/shared-types/dist/finalize-shapes.d.ts +0 -254
- package/node_modules/@pome-sh/twin-linear/node_modules/@pome-sh/shared-types/dist/finalize-shapes.js +0 -122
- package/node_modules/@pome-sh/twin-linear/node_modules/@pome-sh/shared-types/dist/finalize-shapes.js.map +0 -1
- package/node_modules/@pome-sh/twin-linear/node_modules/@pome-sh/shared-types/dist/github-access-control.d.ts +0 -175
- package/node_modules/@pome-sh/twin-linear/node_modules/@pome-sh/shared-types/dist/github-access-control.js +0 -182
- package/node_modules/@pome-sh/twin-linear/node_modules/@pome-sh/shared-types/dist/github-access-control.js.map +0 -1
- package/node_modules/@pome-sh/twin-linear/node_modules/@pome-sh/shared-types/dist/identity.d.ts +0 -90
- package/node_modules/@pome-sh/twin-linear/node_modules/@pome-sh/shared-types/dist/identity.js +0 -72
- package/node_modules/@pome-sh/twin-linear/node_modules/@pome-sh/shared-types/dist/identity.js.map +0 -1
- package/node_modules/@pome-sh/twin-linear/node_modules/@pome-sh/shared-types/dist/index.d.ts +0 -28
- package/node_modules/@pome-sh/twin-linear/node_modules/@pome-sh/shared-types/dist/index.js +0 -35
- package/node_modules/@pome-sh/twin-linear/node_modules/@pome-sh/shared-types/dist/index.js.map +0 -1
- package/node_modules/@pome-sh/twin-linear/node_modules/@pome-sh/shared-types/dist/manifest.d.ts +0 -31
- package/node_modules/@pome-sh/twin-linear/node_modules/@pome-sh/shared-types/dist/manifest.js +0 -76
- package/node_modules/@pome-sh/twin-linear/node_modules/@pome-sh/shared-types/dist/manifest.js.map +0 -1
- package/node_modules/@pome-sh/twin-linear/node_modules/@pome-sh/shared-types/dist/otel/event-schema.d.ts +0 -331
- package/node_modules/@pome-sh/twin-linear/node_modules/@pome-sh/shared-types/dist/otel/event-schema.js +0 -33
- package/node_modules/@pome-sh/twin-linear/node_modules/@pome-sh/shared-types/dist/otel/event-schema.js.map +0 -1
- package/node_modules/@pome-sh/twin-linear/node_modules/@pome-sh/shared-types/dist/otel/fixtures/data.d.ts +0 -65
- package/node_modules/@pome-sh/twin-linear/node_modules/@pome-sh/shared-types/dist/otel/fixtures/data.js +0 -455
- package/node_modules/@pome-sh/twin-linear/node_modules/@pome-sh/shared-types/dist/otel/fixtures/data.js.map +0 -1
- package/node_modules/@pome-sh/twin-linear/node_modules/@pome-sh/shared-types/dist/otel/fixtures/index.d.ts +0 -39
- package/node_modules/@pome-sh/twin-linear/node_modules/@pome-sh/shared-types/dist/otel/fixtures/index.js +0 -47
- package/node_modules/@pome-sh/twin-linear/node_modules/@pome-sh/shared-types/dist/otel/fixtures/index.js.map +0 -1
- package/node_modules/@pome-sh/twin-linear/node_modules/@pome-sh/shared-types/dist/otel/index.d.ts +0 -25
- package/node_modules/@pome-sh/twin-linear/node_modules/@pome-sh/shared-types/dist/otel/index.js +0 -27
- package/node_modules/@pome-sh/twin-linear/node_modules/@pome-sh/shared-types/dist/otel/index.js.map +0 -1
- package/node_modules/@pome-sh/twin-linear/node_modules/@pome-sh/shared-types/dist/otel/legacy-shim.d.ts +0 -100
- package/node_modules/@pome-sh/twin-linear/node_modules/@pome-sh/shared-types/dist/otel/legacy-shim.js +0 -193
- package/node_modules/@pome-sh/twin-linear/node_modules/@pome-sh/shared-types/dist/otel/legacy-shim.js.map +0 -1
- package/node_modules/@pome-sh/twin-linear/node_modules/@pome-sh/shared-types/dist/otel/map-span.d.ts +0 -64
- package/node_modules/@pome-sh/twin-linear/node_modules/@pome-sh/shared-types/dist/otel/map-span.js +0 -112
- package/node_modules/@pome-sh/twin-linear/node_modules/@pome-sh/shared-types/dist/otel/map-span.js.map +0 -1
- package/node_modules/@pome-sh/twin-linear/node_modules/@pome-sh/shared-types/dist/otel/nano.d.ts +0 -26
- package/node_modules/@pome-sh/twin-linear/node_modules/@pome-sh/shared-types/dist/otel/nano.js +0 -61
- package/node_modules/@pome-sh/twin-linear/node_modules/@pome-sh/shared-types/dist/otel/nano.js.map +0 -1
- package/node_modules/@pome-sh/twin-linear/node_modules/@pome-sh/shared-types/dist/otel/project.d.ts +0 -42
- package/node_modules/@pome-sh/twin-linear/node_modules/@pome-sh/shared-types/dist/otel/project.js +0 -104
- package/node_modules/@pome-sh/twin-linear/node_modules/@pome-sh/shared-types/dist/otel/project.js.map +0 -1
- package/node_modules/@pome-sh/twin-linear/node_modules/@pome-sh/shared-types/dist/otel/semconv.d.ts +0 -57
- package/node_modules/@pome-sh/twin-linear/node_modules/@pome-sh/shared-types/dist/otel/semconv.js +0 -102
- package/node_modules/@pome-sh/twin-linear/node_modules/@pome-sh/shared-types/dist/otel/semconv.js.map +0 -1
- package/node_modules/@pome-sh/twin-linear/node_modules/@pome-sh/shared-types/dist/otel/span-event.d.ts +0 -134
- package/node_modules/@pome-sh/twin-linear/node_modules/@pome-sh/shared-types/dist/otel/span-event.js +0 -152
- package/node_modules/@pome-sh/twin-linear/node_modules/@pome-sh/shared-types/dist/otel/span-event.js.map +0 -1
- package/node_modules/@pome-sh/twin-linear/node_modules/@pome-sh/shared-types/dist/recorder-events.d.ts +0 -480
- package/node_modules/@pome-sh/twin-linear/node_modules/@pome-sh/shared-types/dist/recorder-events.js +0 -270
- package/node_modules/@pome-sh/twin-linear/node_modules/@pome-sh/shared-types/dist/recorder-events.js.map +0 -1
- package/node_modules/@pome-sh/twin-linear/node_modules/@pome-sh/shared-types/dist/redaction.d.ts +0 -2
- package/node_modules/@pome-sh/twin-linear/node_modules/@pome-sh/shared-types/dist/redaction.js +0 -152
- package/node_modules/@pome-sh/twin-linear/node_modules/@pome-sh/shared-types/dist/redaction.js.map +0 -1
- package/node_modules/@pome-sh/twin-linear/node_modules/@pome-sh/shared-types/dist/rest.d.ts +0 -257
- package/node_modules/@pome-sh/twin-linear/node_modules/@pome-sh/shared-types/dist/rest.js +0 -335
- package/node_modules/@pome-sh/twin-linear/node_modules/@pome-sh/shared-types/dist/rest.js.map +0 -1
- package/node_modules/@pome-sh/twin-linear/node_modules/@pome-sh/shared-types/dist/run.d.ts +0 -208
- package/node_modules/@pome-sh/twin-linear/node_modules/@pome-sh/shared-types/dist/run.js +0 -170
- package/node_modules/@pome-sh/twin-linear/node_modules/@pome-sh/shared-types/dist/run.js.map +0 -1
- package/node_modules/@pome-sh/twin-linear/node_modules/@pome-sh/shared-types/dist/seed-envelope.d.ts +0 -14
- package/node_modules/@pome-sh/twin-linear/node_modules/@pome-sh/shared-types/dist/seed-envelope.js +0 -46
- package/node_modules/@pome-sh/twin-linear/node_modules/@pome-sh/shared-types/dist/seed-envelope.js.map +0 -1
- package/node_modules/@pome-sh/twin-linear/node_modules/@pome-sh/shared-types/dist/seed-state.d.ts +0 -1006
- package/node_modules/@pome-sh/twin-linear/node_modules/@pome-sh/shared-types/dist/seed-state.js +0 -263
- package/node_modules/@pome-sh/twin-linear/node_modules/@pome-sh/shared-types/dist/seed-state.js.map +0 -1
- package/node_modules/@pome-sh/twin-linear/node_modules/@pome-sh/shared-types/dist/sessions.d.ts +0 -53
- package/node_modules/@pome-sh/twin-linear/node_modules/@pome-sh/shared-types/dist/sessions.js +0 -51
- package/node_modules/@pome-sh/twin-linear/node_modules/@pome-sh/shared-types/dist/sessions.js.map +0 -1
- package/node_modules/@pome-sh/twin-linear/node_modules/@pome-sh/shared-types/dist/task-vocab.d.ts +0 -80
- package/node_modules/@pome-sh/twin-linear/node_modules/@pome-sh/shared-types/dist/task-vocab.js +0 -98
- package/node_modules/@pome-sh/twin-linear/node_modules/@pome-sh/shared-types/dist/task-vocab.js.map +0 -1
- package/node_modules/@pome-sh/twin-linear/node_modules/@pome-sh/shared-types/dist/task.d.ts +0 -859
- package/node_modules/@pome-sh/twin-linear/node_modules/@pome-sh/shared-types/dist/task.js +0 -60
- package/node_modules/@pome-sh/twin-linear/node_modules/@pome-sh/shared-types/dist/task.js.map +0 -1
- package/node_modules/@pome-sh/twin-linear/node_modules/@pome-sh/shared-types/manifest-schema.json +0 -68
- package/node_modules/@pome-sh/twin-linear/node_modules/@pome-sh/shared-types/package.json +0 -55
- package/node_modules/@pome-sh/twin-linear/node_modules/@pome-sh/shared-types/trace-contract.json +0 -41
- package/node_modules/@pome-sh/twin-slack/dist/src/domain.js +0 -1300
- package/node_modules/@pome-sh/twin-slack/dist/src/domain.js.map +0 -1
- package/node_modules/@pome-sh/twin-slack/node_modules/@pome-sh/sdk/dist/admin-gate.d.ts +0 -35
- package/node_modules/@pome-sh/twin-slack/node_modules/@pome-sh/sdk/dist/admin-gate.js +0 -103
- package/node_modules/@pome-sh/twin-slack/node_modules/@pome-sh/sdk/dist/admin-gate.js.map +0 -1
- package/node_modules/@pome-sh/twin-slack/node_modules/@pome-sh/sdk/dist/auth.d.ts +0 -100
- package/node_modules/@pome-sh/twin-slack/node_modules/@pome-sh/sdk/dist/auth.js +0 -262
- package/node_modules/@pome-sh/twin-slack/node_modules/@pome-sh/sdk/dist/auth.js.map +0 -1
- package/node_modules/@pome-sh/twin-slack/node_modules/@pome-sh/sdk/dist/build-info.d.ts +0 -7
- package/node_modules/@pome-sh/twin-slack/node_modules/@pome-sh/sdk/dist/build-info.js +0 -14
- package/node_modules/@pome-sh/twin-slack/node_modules/@pome-sh/sdk/dist/build-info.js.map +0 -1
- package/node_modules/@pome-sh/twin-slack/node_modules/@pome-sh/sdk/dist/db.d.ts +0 -44
- package/node_modules/@pome-sh/twin-slack/node_modules/@pome-sh/sdk/dist/db.js +0 -113
- package/node_modules/@pome-sh/twin-slack/node_modules/@pome-sh/sdk/dist/db.js.map +0 -1
- package/node_modules/@pome-sh/twin-slack/node_modules/@pome-sh/sdk/dist/errors.d.ts +0 -24
- package/node_modules/@pome-sh/twin-slack/node_modules/@pome-sh/sdk/dist/errors.js +0 -61
- package/node_modules/@pome-sh/twin-slack/node_modules/@pome-sh/sdk/dist/errors.js.map +0 -1
- package/node_modules/@pome-sh/twin-slack/node_modules/@pome-sh/sdk/dist/failure-injection.d.ts +0 -43
- package/node_modules/@pome-sh/twin-slack/node_modules/@pome-sh/sdk/dist/failure-injection.js +0 -160
- package/node_modules/@pome-sh/twin-slack/node_modules/@pome-sh/sdk/dist/failure-injection.js.map +0 -1
- package/node_modules/@pome-sh/twin-slack/node_modules/@pome-sh/sdk/dist/fidelity-inventory.d.ts +0 -121
- package/node_modules/@pome-sh/twin-slack/node_modules/@pome-sh/sdk/dist/fidelity-inventory.js +0 -204
- package/node_modules/@pome-sh/twin-slack/node_modules/@pome-sh/sdk/dist/fidelity-inventory.js.map +0 -1
- package/node_modules/@pome-sh/twin-slack/node_modules/@pome-sh/sdk/dist/fidelity.d.ts +0 -8
- package/node_modules/@pome-sh/twin-slack/node_modules/@pome-sh/sdk/dist/fidelity.js +0 -39
- package/node_modules/@pome-sh/twin-slack/node_modules/@pome-sh/sdk/dist/fidelity.js.map +0 -1
- package/node_modules/@pome-sh/twin-slack/node_modules/@pome-sh/sdk/dist/index.d.ts +0 -372
- package/node_modules/@pome-sh/twin-slack/node_modules/@pome-sh/sdk/dist/index.js +0 -139
- package/node_modules/@pome-sh/twin-slack/node_modules/@pome-sh/sdk/dist/index.js.map +0 -1
- package/node_modules/@pome-sh/twin-slack/node_modules/@pome-sh/sdk/dist/mcp-jsonrpc.d.ts +0 -10
- package/node_modules/@pome-sh/twin-slack/node_modules/@pome-sh/sdk/dist/mcp-jsonrpc.js +0 -221
- package/node_modules/@pome-sh/twin-slack/node_modules/@pome-sh/sdk/dist/mcp-jsonrpc.js.map +0 -1
- package/node_modules/@pome-sh/twin-slack/node_modules/@pome-sh/sdk/dist/parity.d.ts +0 -61
- package/node_modules/@pome-sh/twin-slack/node_modules/@pome-sh/sdk/dist/parity.js +0 -123
- package/node_modules/@pome-sh/twin-slack/node_modules/@pome-sh/sdk/dist/parity.js.map +0 -1
- package/node_modules/@pome-sh/twin-slack/node_modules/@pome-sh/sdk/dist/recorder.d.ts +0 -120
- package/node_modules/@pome-sh/twin-slack/node_modules/@pome-sh/sdk/dist/recorder.js +0 -368
- package/node_modules/@pome-sh/twin-slack/node_modules/@pome-sh/sdk/dist/recorder.js.map +0 -1
- package/node_modules/@pome-sh/twin-slack/node_modules/@pome-sh/sdk/dist/redaction.d.ts +0 -1
- package/node_modules/@pome-sh/twin-slack/node_modules/@pome-sh/sdk/dist/redaction.js +0 -3
- package/node_modules/@pome-sh/twin-slack/node_modules/@pome-sh/sdk/dist/redaction.js.map +0 -1
- package/node_modules/@pome-sh/twin-slack/node_modules/@pome-sh/sdk/dist/server-helpers.d.ts +0 -54
- package/node_modules/@pome-sh/twin-slack/node_modules/@pome-sh/sdk/dist/server-helpers.js +0 -181
- package/node_modules/@pome-sh/twin-slack/node_modules/@pome-sh/sdk/dist/server-helpers.js.map +0 -1
- package/node_modules/@pome-sh/twin-slack/node_modules/@pome-sh/sdk/dist/server.d.ts +0 -46
- package/node_modules/@pome-sh/twin-slack/node_modules/@pome-sh/sdk/dist/server.js +0 -394
- package/node_modules/@pome-sh/twin-slack/node_modules/@pome-sh/sdk/dist/server.js.map +0 -1
- package/node_modules/@pome-sh/twin-slack/node_modules/@pome-sh/sdk/dist/tool-context.d.ts +0 -8
- package/node_modules/@pome-sh/twin-slack/node_modules/@pome-sh/sdk/dist/tool-context.js +0 -22
- package/node_modules/@pome-sh/twin-slack/node_modules/@pome-sh/sdk/dist/tool-context.js.map +0 -1
- package/node_modules/@pome-sh/twin-slack/node_modules/@pome-sh/sdk/package.json +0 -54
- package/node_modules/@pome-sh/twin-slack/node_modules/@pome-sh/shared-types/dist/errors.d.ts +0 -39
- package/node_modules/@pome-sh/twin-slack/node_modules/@pome-sh/shared-types/dist/errors.js +0 -33
- package/node_modules/@pome-sh/twin-slack/node_modules/@pome-sh/shared-types/dist/errors.js.map +0 -1
- package/node_modules/@pome-sh/twin-slack/node_modules/@pome-sh/shared-types/dist/finalize-shapes.d.ts +0 -254
- package/node_modules/@pome-sh/twin-slack/node_modules/@pome-sh/shared-types/dist/finalize-shapes.js +0 -122
- package/node_modules/@pome-sh/twin-slack/node_modules/@pome-sh/shared-types/dist/finalize-shapes.js.map +0 -1
- package/node_modules/@pome-sh/twin-slack/node_modules/@pome-sh/shared-types/dist/github-access-control.d.ts +0 -175
- package/node_modules/@pome-sh/twin-slack/node_modules/@pome-sh/shared-types/dist/github-access-control.js +0 -182
- package/node_modules/@pome-sh/twin-slack/node_modules/@pome-sh/shared-types/dist/github-access-control.js.map +0 -1
- package/node_modules/@pome-sh/twin-slack/node_modules/@pome-sh/shared-types/dist/identity.d.ts +0 -90
- package/node_modules/@pome-sh/twin-slack/node_modules/@pome-sh/shared-types/dist/identity.js +0 -72
- package/node_modules/@pome-sh/twin-slack/node_modules/@pome-sh/shared-types/dist/identity.js.map +0 -1
- package/node_modules/@pome-sh/twin-slack/node_modules/@pome-sh/shared-types/dist/index.d.ts +0 -28
- package/node_modules/@pome-sh/twin-slack/node_modules/@pome-sh/shared-types/dist/index.js +0 -35
- package/node_modules/@pome-sh/twin-slack/node_modules/@pome-sh/shared-types/dist/index.js.map +0 -1
- package/node_modules/@pome-sh/twin-slack/node_modules/@pome-sh/shared-types/dist/manifest.d.ts +0 -31
- package/node_modules/@pome-sh/twin-slack/node_modules/@pome-sh/shared-types/dist/manifest.js +0 -76
- package/node_modules/@pome-sh/twin-slack/node_modules/@pome-sh/shared-types/dist/manifest.js.map +0 -1
- package/node_modules/@pome-sh/twin-slack/node_modules/@pome-sh/shared-types/dist/otel/event-schema.d.ts +0 -331
- package/node_modules/@pome-sh/twin-slack/node_modules/@pome-sh/shared-types/dist/otel/event-schema.js +0 -33
- package/node_modules/@pome-sh/twin-slack/node_modules/@pome-sh/shared-types/dist/otel/event-schema.js.map +0 -1
- package/node_modules/@pome-sh/twin-slack/node_modules/@pome-sh/shared-types/dist/otel/fixtures/data.d.ts +0 -65
- package/node_modules/@pome-sh/twin-slack/node_modules/@pome-sh/shared-types/dist/otel/fixtures/data.js +0 -455
- package/node_modules/@pome-sh/twin-slack/node_modules/@pome-sh/shared-types/dist/otel/fixtures/data.js.map +0 -1
- package/node_modules/@pome-sh/twin-slack/node_modules/@pome-sh/shared-types/dist/otel/fixtures/index.d.ts +0 -39
- package/node_modules/@pome-sh/twin-slack/node_modules/@pome-sh/shared-types/dist/otel/fixtures/index.js +0 -47
- package/node_modules/@pome-sh/twin-slack/node_modules/@pome-sh/shared-types/dist/otel/fixtures/index.js.map +0 -1
- package/node_modules/@pome-sh/twin-slack/node_modules/@pome-sh/shared-types/dist/otel/index.d.ts +0 -25
- package/node_modules/@pome-sh/twin-slack/node_modules/@pome-sh/shared-types/dist/otel/index.js +0 -27
- package/node_modules/@pome-sh/twin-slack/node_modules/@pome-sh/shared-types/dist/otel/index.js.map +0 -1
- package/node_modules/@pome-sh/twin-slack/node_modules/@pome-sh/shared-types/dist/otel/legacy-shim.d.ts +0 -100
- package/node_modules/@pome-sh/twin-slack/node_modules/@pome-sh/shared-types/dist/otel/legacy-shim.js +0 -193
- package/node_modules/@pome-sh/twin-slack/node_modules/@pome-sh/shared-types/dist/otel/legacy-shim.js.map +0 -1
- package/node_modules/@pome-sh/twin-slack/node_modules/@pome-sh/shared-types/dist/otel/map-span.d.ts +0 -64
- package/node_modules/@pome-sh/twin-slack/node_modules/@pome-sh/shared-types/dist/otel/map-span.js +0 -112
- package/node_modules/@pome-sh/twin-slack/node_modules/@pome-sh/shared-types/dist/otel/map-span.js.map +0 -1
- package/node_modules/@pome-sh/twin-slack/node_modules/@pome-sh/shared-types/dist/otel/nano.d.ts +0 -26
- package/node_modules/@pome-sh/twin-slack/node_modules/@pome-sh/shared-types/dist/otel/nano.js +0 -61
- package/node_modules/@pome-sh/twin-slack/node_modules/@pome-sh/shared-types/dist/otel/nano.js.map +0 -1
- package/node_modules/@pome-sh/twin-slack/node_modules/@pome-sh/shared-types/dist/otel/project.d.ts +0 -42
- package/node_modules/@pome-sh/twin-slack/node_modules/@pome-sh/shared-types/dist/otel/project.js +0 -104
- package/node_modules/@pome-sh/twin-slack/node_modules/@pome-sh/shared-types/dist/otel/project.js.map +0 -1
- package/node_modules/@pome-sh/twin-slack/node_modules/@pome-sh/shared-types/dist/otel/semconv.d.ts +0 -57
- package/node_modules/@pome-sh/twin-slack/node_modules/@pome-sh/shared-types/dist/otel/semconv.js +0 -102
- package/node_modules/@pome-sh/twin-slack/node_modules/@pome-sh/shared-types/dist/otel/semconv.js.map +0 -1
- package/node_modules/@pome-sh/twin-slack/node_modules/@pome-sh/shared-types/dist/otel/span-event.d.ts +0 -134
- package/node_modules/@pome-sh/twin-slack/node_modules/@pome-sh/shared-types/dist/otel/span-event.js +0 -152
- package/node_modules/@pome-sh/twin-slack/node_modules/@pome-sh/shared-types/dist/otel/span-event.js.map +0 -1
- package/node_modules/@pome-sh/twin-slack/node_modules/@pome-sh/shared-types/dist/recorder-events.d.ts +0 -480
- package/node_modules/@pome-sh/twin-slack/node_modules/@pome-sh/shared-types/dist/recorder-events.js +0 -270
- package/node_modules/@pome-sh/twin-slack/node_modules/@pome-sh/shared-types/dist/recorder-events.js.map +0 -1
- package/node_modules/@pome-sh/twin-slack/node_modules/@pome-sh/shared-types/dist/redaction.d.ts +0 -2
- package/node_modules/@pome-sh/twin-slack/node_modules/@pome-sh/shared-types/dist/redaction.js +0 -152
- package/node_modules/@pome-sh/twin-slack/node_modules/@pome-sh/shared-types/dist/redaction.js.map +0 -1
- package/node_modules/@pome-sh/twin-slack/node_modules/@pome-sh/shared-types/dist/rest.d.ts +0 -257
- package/node_modules/@pome-sh/twin-slack/node_modules/@pome-sh/shared-types/dist/rest.js +0 -335
- package/node_modules/@pome-sh/twin-slack/node_modules/@pome-sh/shared-types/dist/rest.js.map +0 -1
- package/node_modules/@pome-sh/twin-slack/node_modules/@pome-sh/shared-types/dist/run.d.ts +0 -208
- package/node_modules/@pome-sh/twin-slack/node_modules/@pome-sh/shared-types/dist/run.js +0 -170
- package/node_modules/@pome-sh/twin-slack/node_modules/@pome-sh/shared-types/dist/run.js.map +0 -1
- package/node_modules/@pome-sh/twin-slack/node_modules/@pome-sh/shared-types/dist/seed-envelope.d.ts +0 -14
- package/node_modules/@pome-sh/twin-slack/node_modules/@pome-sh/shared-types/dist/seed-envelope.js +0 -46
- package/node_modules/@pome-sh/twin-slack/node_modules/@pome-sh/shared-types/dist/seed-envelope.js.map +0 -1
- package/node_modules/@pome-sh/twin-slack/node_modules/@pome-sh/shared-types/dist/seed-state.d.ts +0 -1006
- package/node_modules/@pome-sh/twin-slack/node_modules/@pome-sh/shared-types/dist/seed-state.js +0 -263
- package/node_modules/@pome-sh/twin-slack/node_modules/@pome-sh/shared-types/dist/seed-state.js.map +0 -1
- package/node_modules/@pome-sh/twin-slack/node_modules/@pome-sh/shared-types/dist/sessions.d.ts +0 -53
- package/node_modules/@pome-sh/twin-slack/node_modules/@pome-sh/shared-types/dist/sessions.js +0 -51
- package/node_modules/@pome-sh/twin-slack/node_modules/@pome-sh/shared-types/dist/sessions.js.map +0 -1
- package/node_modules/@pome-sh/twin-slack/node_modules/@pome-sh/shared-types/dist/task-vocab.d.ts +0 -80
- package/node_modules/@pome-sh/twin-slack/node_modules/@pome-sh/shared-types/dist/task-vocab.js +0 -98
- package/node_modules/@pome-sh/twin-slack/node_modules/@pome-sh/shared-types/dist/task-vocab.js.map +0 -1
- package/node_modules/@pome-sh/twin-slack/node_modules/@pome-sh/shared-types/dist/task.d.ts +0 -859
- package/node_modules/@pome-sh/twin-slack/node_modules/@pome-sh/shared-types/dist/task.js +0 -60
- package/node_modules/@pome-sh/twin-slack/node_modules/@pome-sh/shared-types/dist/task.js.map +0 -1
- package/node_modules/@pome-sh/twin-slack/node_modules/@pome-sh/shared-types/manifest-schema.json +0 -68
- package/node_modules/@pome-sh/twin-slack/node_modules/@pome-sh/shared-types/package.json +0 -55
- package/node_modules/@pome-sh/twin-slack/node_modules/@pome-sh/shared-types/trace-contract.json +0 -41
|
@@ -0,0 +1,207 @@
|
|
|
1
|
+
// SPDX-License-Identifier: Apache-2.0
|
|
2
|
+
//
|
|
3
|
+
// What Gmail's declared checks can assert about MESSAGES (F-1128).
|
|
4
|
+
//
|
|
5
|
+
// All three read the exported end state. Note what is NOT here and cannot be:
|
|
6
|
+
// message bodies are digested out of `/_pome/state` unconditionally
|
|
7
|
+
// (`state.ts boundMessageExport`), so there is no gmail analogue of
|
|
8
|
+
// `slack.no-message-containing` — a substring scan over message prose has no
|
|
9
|
+
// substrate to read. `subject` is the only message prose that survives, and
|
|
10
|
+
// nothing in the corpus asserts on it yet.
|
|
11
|
+
//
|
|
12
|
+
// Declarations only. The grammar rules they obey are in `checks.ts`, which
|
|
13
|
+
// assembles them.
|
|
14
|
+
import { defineCheck, VACUITY_SENTINEL } from "@pome-sh/sdk/checks";
|
|
15
|
+
import { countWord, exactCount, labelRef, mailboxRef, messageId, parseCount } from "./check-params.js";
|
|
16
|
+
import { isTruncated, labelIdsFor, messageCarriesLabel, resolveMessage, } from "./check-state.js";
|
|
17
|
+
import { finalWorld, gmailState, message, messageLabel, systemLabel, userLabel, } from "./check-worlds.js";
|
|
18
|
+
// The workhorse of gmail's corpus: it binds three of the six criteria A3 found
|
|
19
|
+
// unbound, because tasks 22 and 27 say the same sentence about `msg_support` and
|
|
20
|
+
// task 23 says it about `msg_parity`. One check, three criteria — the same way
|
|
21
|
+
// `github.no-new-labels` cleared five.
|
|
22
|
+
export const messageHasLabel = defineCheck({
|
|
23
|
+
id: "gmail.message-has-label",
|
|
24
|
+
description: "Looks the message up by id, then asks the `messageLabels` JOIN whether any row links it to " +
|
|
25
|
+
"the named label. The label may be given as its minted id (`Label_follow_up`) or as the " +
|
|
26
|
+
"display name of the same label (`Follow Up`); a system label carries both as one string " +
|
|
27
|
+
"(`INBOX`, `STARRED`). It asserts nothing about the message's OTHER labels — a message " +
|
|
28
|
+
"carrying the named label plus five more passes. A message the export does not carry is a " +
|
|
29
|
+
"SKIP, not a fail, and so is a label collection the export truncated: absent from a capped " +
|
|
30
|
+
"list is not absent.",
|
|
31
|
+
template: "Message {message} has label {label}",
|
|
32
|
+
params: { message: messageId, label: labelRef },
|
|
33
|
+
substrate: "final",
|
|
34
|
+
// An achievement. The seed leaves `msg_support` on INBOX/UNREAD only, so the
|
|
35
|
+
// examinee has to act for this to hold.
|
|
36
|
+
polarity: () => "positive",
|
|
37
|
+
// The label is a caller-supplied literal compared against state, so it is
|
|
38
|
+
// declared. No first-party redactor pattern touches a Gmail label id, which is
|
|
39
|
+
// exactly why declaring it keeps that a verified fact rather than an
|
|
40
|
+
// assumption — a team's own redaction config is not first-party.
|
|
41
|
+
subject: ({ label }) => label,
|
|
42
|
+
// The message id only SELECTS; falsifying it moves the verdict through the
|
|
43
|
+
// lookup rather than the assertion. The label is the scanned literal.
|
|
44
|
+
vacuityMutant: (args) => ({ ...args, label: VACUITY_SENTINEL }),
|
|
45
|
+
discriminatingWorlds: ({ message: id, label }) => {
|
|
46
|
+
// The message is PRESENT in both worlds and only the JOIN row moves. A world
|
|
47
|
+
// without the message would fail through the selector, reproducing the reason
|
|
48
|
+
// an empty world already gives — which the probe rejects as degenerate.
|
|
49
|
+
const labels = [systemLabel("INBOX"), userLabel(label, label)];
|
|
50
|
+
const base = { messages: [message(id)], labels };
|
|
51
|
+
return {
|
|
52
|
+
passing: finalWorld(gmailState({ ...base, messageLabels: [messageLabel(id, "INBOX"), messageLabel(id, label)] })),
|
|
53
|
+
failing: finalWorld(gmailState({ ...base, messageLabels: [messageLabel(id, "INBOX")] })),
|
|
54
|
+
};
|
|
55
|
+
},
|
|
56
|
+
evaluate({ message: id, label }, { final }) {
|
|
57
|
+
const found = resolveMessage(final, id);
|
|
58
|
+
if ("missing" in found)
|
|
59
|
+
return { passed: false, status: "skipped", reason: found.missing };
|
|
60
|
+
const carried = messageCarriesLabel(final, id, label);
|
|
61
|
+
if ("missing" in carried)
|
|
62
|
+
return { passed: false, status: "skipped", reason: carried.missing };
|
|
63
|
+
return {
|
|
64
|
+
passed: carried.found,
|
|
65
|
+
reason: carried.found
|
|
66
|
+
? `message ${id} carries label ${label}`
|
|
67
|
+
: `message ${id} does not carry label ${label}`,
|
|
68
|
+
};
|
|
69
|
+
},
|
|
70
|
+
});
|
|
71
|
+
// Carried across from pome-cloud's `gmail.mailbox-label-count` regex, which
|
|
72
|
+
// graded the retry/partial-failure curriculum class. The legacy pattern was
|
|
73
|
+
// case-insensitive and tolerated `labelled`, a trailing period and three quote
|
|
74
|
+
// styles; under position 2 an author PICKS the check rather than typing it, so
|
|
75
|
+
// those variants are retired rather than ported — exactly as F-1075 retired
|
|
76
|
+
// `issue-has-label-generic`.
|
|
77
|
+
export const mailboxLabelCount = defineCheck({
|
|
78
|
+
id: "gmail.mailbox-label-count",
|
|
79
|
+
description: "Counts the messages in the named mailbox that the `messageLabels` JOIN links to the named " +
|
|
80
|
+
"label, and asserts the total is EXACTLY the number given. Not 'at least' — a mailbox with " +
|
|
81
|
+
"six SENT messages fails a criterion asking for five, which is what makes it able to catch " +
|
|
82
|
+
"a duplicate send. A mailbox the export lists but does not contain is a SKIP; so is a " +
|
|
83
|
+
"truncated collection.",
|
|
84
|
+
template: "The mailbox `{mailbox}` has exactly {count} messages labeled {label}",
|
|
85
|
+
params: { mailbox: mailboxRef, count: exactCount, label: labelRef },
|
|
86
|
+
substrate: "final",
|
|
87
|
+
// The count carries the direction: asserting zero is a prohibition, any
|
|
88
|
+
// other count is work the examinee must do. Preserved from the legacy rule,
|
|
89
|
+
// which computed the same thing per match.
|
|
90
|
+
polarity: ({ count }) => (Number(count) === 0 ? "negative" : "positive"),
|
|
91
|
+
subject: ({ label }) => label,
|
|
92
|
+
// The mailbox resolves and the count is compared to a derived total; the
|
|
93
|
+
// label is the literal actually scanned in state. Pointing the mutant at the
|
|
94
|
+
// count would falsify a threshold rather than a lookup — see
|
|
95
|
+
// `gmail.draft-count-at-least`, where the count IS the only slot.
|
|
96
|
+
vacuityMutant: (args) => ({ ...args, label: VACUITY_SENTINEL }),
|
|
97
|
+
discriminatingWorlds: ({ mailbox, count, label }) => {
|
|
98
|
+
const wanted = Number(count);
|
|
99
|
+
const world = (n) => {
|
|
100
|
+
const messages = Array.from({ length: n }, (_, i) => message(`msg_${i}`, { mailboxEmail: mailbox }));
|
|
101
|
+
return gmailState({
|
|
102
|
+
mailboxes: [{ email: mailbox }],
|
|
103
|
+
messages,
|
|
104
|
+
labels: [systemLabel(label)],
|
|
105
|
+
messageLabels: messages.map((m) => ({ mailboxEmail: mailbox, messageId: m.id, labelId: label })),
|
|
106
|
+
});
|
|
107
|
+
};
|
|
108
|
+
// The mailbox resolves in BOTH worlds and only the count moves. `wanted + 1`
|
|
109
|
+
// rather than zero so the failing world is never also the empty one.
|
|
110
|
+
return { passing: finalWorld(world(wanted)), failing: finalWorld(world(wanted + 1)) };
|
|
111
|
+
},
|
|
112
|
+
evaluate({ mailbox, count, label }, { final }) {
|
|
113
|
+
const wanted = Number(count);
|
|
114
|
+
if (final.messages == null || final.messageLabels == null) {
|
|
115
|
+
return { passed: false, status: "skipped", reason: "state_incomplete" };
|
|
116
|
+
}
|
|
117
|
+
if (isTruncated(final, "messages") || isTruncated(final, "messageLabels")) {
|
|
118
|
+
return { passed: false, status: "skipped", reason: "collection_truncated" };
|
|
119
|
+
}
|
|
120
|
+
// A mailboxes collection that is present and omits this mailbox means we
|
|
121
|
+
// cannot attest anything about it. An ABSENT collection is a different
|
|
122
|
+
// fact — proceed by email, the way the export's own rows are keyed.
|
|
123
|
+
if (final.mailboxes != null &&
|
|
124
|
+
!final.mailboxes.some((mb) => (mb.email ?? "").toLowerCase() === mailbox.toLowerCase())) {
|
|
125
|
+
return { passed: false, status: "skipped", reason: `mailbox_not_found ("${mailbox}")` };
|
|
126
|
+
}
|
|
127
|
+
const ids = labelIdsFor(final, label);
|
|
128
|
+
const labeled = new Set(final.messageLabels
|
|
129
|
+
.filter((row) => ids.has((row.labelId ?? "").toLowerCase()))
|
|
130
|
+
.map((row) => (row.messageId ?? "").toLowerCase()));
|
|
131
|
+
const total = final.messages.filter((msg) => (msg.mailboxEmail ?? "").toLowerCase() === mailbox.toLowerCase() &&
|
|
132
|
+
msg.id != null &&
|
|
133
|
+
labeled.has(msg.id.toLowerCase())).length;
|
|
134
|
+
return {
|
|
135
|
+
passed: total === wanted,
|
|
136
|
+
reason: `mailbox "${mailbox}" has ${total} message(s) labeled ${label} (wanted ${wanted})`,
|
|
137
|
+
};
|
|
138
|
+
},
|
|
139
|
+
});
|
|
140
|
+
// Also carried across from pome-cloud. This is the one that catches a duplicate
|
|
141
|
+
// send, which is the whole point of the retry curriculum class: a naive retry
|
|
142
|
+
// loop sends twice to the same address and this is what notices.
|
|
143
|
+
export const oneMessagePerRecipient = defineCheck({
|
|
144
|
+
id: "gmail.one-message-per-recipient",
|
|
145
|
+
description: "Flattens every addressee across the messages carrying the named label and asserts each " +
|
|
146
|
+
"address appears EXACTLY ONCE — and, when a count is named, that there are that many " +
|
|
147
|
+
"messages, that many distinct recipients, and no more addressee slots than that. It is the " +
|
|
148
|
+
"assertion that separates 'sent to everyone' from 'sent to everyone, some of them twice', " +
|
|
149
|
+
"which an exact total alone cannot do.",
|
|
150
|
+
template: "Exactly one {label} message is addressed to each of the {count} recipients",
|
|
151
|
+
params: { label: labelRef, count: countWord },
|
|
152
|
+
substrate: "final",
|
|
153
|
+
polarity: () => "positive",
|
|
154
|
+
subject: ({ label }) => label,
|
|
155
|
+
// The label is scanned; the count is a declared arity compared to a derived
|
|
156
|
+
// one. Same argument as `mailboxLabelCount`.
|
|
157
|
+
vacuityMutant: (args) => ({ ...args, label: VACUITY_SENTINEL }),
|
|
158
|
+
discriminatingWorlds: ({ label, count }) => {
|
|
159
|
+
const wanted = parseCount(count) ?? 1;
|
|
160
|
+
const recipients = Array.from({ length: wanted }, (_, i) => `user${i}@example.com`);
|
|
161
|
+
const build = (addressees) => {
|
|
162
|
+
const messages = addressees.map((to, i) => message(`msg_${i}`, { to }));
|
|
163
|
+
return finalWorld(gmailState({
|
|
164
|
+
messages,
|
|
165
|
+
labels: [systemLabel(label)],
|
|
166
|
+
messageLabels: messages.map((m) => messageLabel(m.id, label)),
|
|
167
|
+
}));
|
|
168
|
+
};
|
|
169
|
+
return {
|
|
170
|
+
passing: build(recipients.map((r) => [r])),
|
|
171
|
+
// The DUPLICATE SEND, not a missing one: the same number of messages, one
|
|
172
|
+
// recipient served twice and another not at all. A world with fewer
|
|
173
|
+
// messages would fail on arity, which the exact-count check already covers.
|
|
174
|
+
failing: build([[recipients[0]], ...recipients.slice(2).map((r) => [r]), [recipients[0]]]),
|
|
175
|
+
};
|
|
176
|
+
},
|
|
177
|
+
evaluate({ label, count }, { final }) {
|
|
178
|
+
const wanted = parseCount(count);
|
|
179
|
+
if (final.messages == null || final.messageLabels == null) {
|
|
180
|
+
return { passed: false, status: "skipped", reason: "state_incomplete" };
|
|
181
|
+
}
|
|
182
|
+
if (isTruncated(final, "messages") || isTruncated(final, "messageLabels")) {
|
|
183
|
+
return { passed: false, status: "skipped", reason: "collection_truncated" };
|
|
184
|
+
}
|
|
185
|
+
const ids = labelIdsFor(final, label);
|
|
186
|
+
const labeled = new Set(final.messageLabels
|
|
187
|
+
.filter((row) => ids.has((row.labelId ?? "").toLowerCase()))
|
|
188
|
+
.map((row) => (row.messageId ?? "").toLowerCase()));
|
|
189
|
+
const sent = final.messages.filter((msg) => msg.id != null && labeled.has(msg.id.toLowerCase()));
|
|
190
|
+
const addressees = sent.flatMap((msg) => (msg.to ?? []).map((to) => to.toLowerCase()));
|
|
191
|
+
const distinct = new Set(addressees);
|
|
192
|
+
const noDuplicates = addressees.length === distinct.size;
|
|
193
|
+
const arityOk = wanted == null
|
|
194
|
+
? sent.length === distinct.size
|
|
195
|
+
: sent.length === wanted && distinct.size === wanted && addressees.length === wanted;
|
|
196
|
+
const passed = noDuplicates && arityOk;
|
|
197
|
+
return {
|
|
198
|
+
passed,
|
|
199
|
+
reason: passed
|
|
200
|
+
? `${sent.length} ${label} message(s), one per distinct recipient, no duplicates`
|
|
201
|
+
: `${sent.length} ${label} message(s) to ${distinct.size} distinct recipient(s) ` +
|
|
202
|
+
`(${addressees.length} addressee slot(s)${wanted == null ? "" : `, wanted ${wanted}`}` +
|
|
203
|
+
`${noDuplicates ? "" : ", duplicate send detected"})`,
|
|
204
|
+
};
|
|
205
|
+
},
|
|
206
|
+
});
|
|
207
|
+
//# sourceMappingURL=check-messages.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"check-messages.js","sourceRoot":"","sources":["../../src/check-messages.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
import type { CheckParamType } from "@pome-sh/sdk/checks";
|
|
2
|
+
export declare const messageId: CheckParamType;
|
|
3
|
+
export declare const labelRef: CheckParamType;
|
|
4
|
+
export declare const labelName: CheckParamType;
|
|
5
|
+
export declare const emailAddress: CheckParamType;
|
|
6
|
+
export declare const mailboxRef: CheckParamType;
|
|
7
|
+
export declare const exactCount: CheckParamType;
|
|
8
|
+
export declare const countWord: CheckParamType;
|
|
9
|
+
/** A `countWord` slot's value as a number, or null when it is neither. */
|
|
10
|
+
export declare function parseCount(raw: string): number | null;
|
|
@@ -0,0 +1,96 @@
|
|
|
1
|
+
// SPDX-License-Identifier: Apache-2.0
|
|
2
|
+
//
|
|
3
|
+
// The typed slots Gmail's declared checks fill (F-1128).
|
|
4
|
+
//
|
|
5
|
+
// They live in the twin, not the sdk, for the same reason the declarations do:
|
|
6
|
+
// the twin owns what a Gmail message id or label name may look like. Every
|
|
7
|
+
// pattern is NARROW on purpose — a slot type is what turns "the author typed
|
|
8
|
+
// something wrong" into a corrupted instance reported by name, rather than a
|
|
9
|
+
// lookup that quietly finds nothing.
|
|
10
|
+
//
|
|
11
|
+
// All patterns are capture-group-free; `defineCheck` throws otherwise, because
|
|
12
|
+
// every consumer reads capture group i+1 as slot i and one smuggled group hands
|
|
13
|
+
// each predicate its neighbour's argument.
|
|
14
|
+
// Ids the twin mints (`nextId` → `msg_1`, `Label_3`, `draft_2`) and the ids a
|
|
15
|
+
// seed may pin (`msg_support`, `msg_parity`). No spaces and no dots, which is
|
|
16
|
+
// what separates this slot from `labelName` below.
|
|
17
|
+
export const messageId = {
|
|
18
|
+
name: "message",
|
|
19
|
+
pattern: "[A-Za-z0-9_-]{1,128}",
|
|
20
|
+
example: "msg_support",
|
|
21
|
+
render: (value) => value,
|
|
22
|
+
parse: (raw) => raw,
|
|
23
|
+
};
|
|
24
|
+
// A label REFERENCE: either the minted id (`Label_follow_up`) or a system label,
|
|
25
|
+
// whose id and display name are the same string (`INBOX`, `SENT`, `STARRED`).
|
|
26
|
+
// Deliberately excludes spaces — a label whose NAME has spaces is addressed by
|
|
27
|
+
// `labelName`, and keeping the two slots distinct is what stops
|
|
28
|
+
// `gmail.message-has-label` and `gmail.label-exists` claiming one sentence.
|
|
29
|
+
export const labelRef = {
|
|
30
|
+
name: "label",
|
|
31
|
+
pattern: "[A-Za-z0-9_-]{1,128}",
|
|
32
|
+
example: "STARRED",
|
|
33
|
+
render: (value) => value,
|
|
34
|
+
parse: (raw) => raw,
|
|
35
|
+
};
|
|
36
|
+
// A label's DISPLAY NAME, which Gmail permits spaces in (`Parity Complete`,
|
|
37
|
+
// `Follow Up`). Anchored to start on a word character so the template's
|
|
38
|
+
// surrounding literals cannot be eaten by a leading space.
|
|
39
|
+
export const labelName = {
|
|
40
|
+
name: "label",
|
|
41
|
+
pattern: "[A-Za-z0-9][A-Za-z0-9 _-]{0,127}",
|
|
42
|
+
example: "Parity Complete",
|
|
43
|
+
render: (value) => value,
|
|
44
|
+
parse: (raw) => raw,
|
|
45
|
+
};
|
|
46
|
+
// An addressee. Quote and backtick are excluded as well as whitespace so the
|
|
47
|
+
// slot cannot swallow a template's own delimiters.
|
|
48
|
+
export const emailAddress = {
|
|
49
|
+
name: "email",
|
|
50
|
+
pattern: "[^\\s@\"'`]+@[^\\s@\"'`]+",
|
|
51
|
+
example: "alice@example.com",
|
|
52
|
+
render: (value) => value,
|
|
53
|
+
parse: (raw) => raw,
|
|
54
|
+
};
|
|
55
|
+
// The same shape, named for the slot it fills — a mailbox is addressed by its
|
|
56
|
+
// email in every collection the export emits.
|
|
57
|
+
export const mailboxRef = {
|
|
58
|
+
name: "mailbox",
|
|
59
|
+
pattern: "[^\\s@\"'`]+@[^\\s@\"'`]+",
|
|
60
|
+
example: "pome-agent@pome-twin.test",
|
|
61
|
+
render: (value) => value,
|
|
62
|
+
parse: (raw) => raw,
|
|
63
|
+
};
|
|
64
|
+
// A bare digit count. Nine digits wide so `VACUITY_SENTINEL_NUMBER` re-binds:
|
|
65
|
+
// a mutant that stops matching evaluates to `unmatched`, which reads as "the
|
|
66
|
+
// verdict moved -> healthy" and blesses the very criterion the probe exists to
|
|
67
|
+
// catch.
|
|
68
|
+
export const exactCount = {
|
|
69
|
+
name: "count",
|
|
70
|
+
pattern: "\\d{1,9}",
|
|
71
|
+
example: "5",
|
|
72
|
+
render: (value) => value,
|
|
73
|
+
parse: (raw) => raw,
|
|
74
|
+
};
|
|
75
|
+
// Digits OR the English number words, because the corpus says both — `exactly 5
|
|
76
|
+
// messages` and `each of the five recipients`. Non-capturing, so the alternation
|
|
77
|
+
// costs no capture group.
|
|
78
|
+
export const countWord = {
|
|
79
|
+
name: "count",
|
|
80
|
+
pattern: "(?:\\d{1,9}|zero|one|two|three|four|five|six|seven|eight|nine|ten|eleven|twelve)",
|
|
81
|
+
example: "two",
|
|
82
|
+
render: (value) => value,
|
|
83
|
+
parse: (raw) => raw,
|
|
84
|
+
};
|
|
85
|
+
const NUMBER_WORDS = {
|
|
86
|
+
zero: 0, one: 1, two: 2, three: 3, four: 4, five: 5,
|
|
87
|
+
six: 6, seven: 7, eight: 8, nine: 9, ten: 10, eleven: 11, twelve: 12,
|
|
88
|
+
};
|
|
89
|
+
/** A `countWord` slot's value as a number, or null when it is neither. */
|
|
90
|
+
export function parseCount(raw) {
|
|
91
|
+
const trimmed = raw.trim().toLowerCase();
|
|
92
|
+
if (/^\d+$/.test(trimmed))
|
|
93
|
+
return Number(trimmed);
|
|
94
|
+
return NUMBER_WORDS[trimmed] ?? null;
|
|
95
|
+
}
|
|
96
|
+
//# sourceMappingURL=check-params.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"check-params.js","sourceRoot":"","sources":["../../src/check-params.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,113 @@
|
|
|
1
|
+
/** A resolver must be able to say WHY it found nothing: the ways of finding
|
|
2
|
+
* nothing get different verdicts. Same shape and same reason as twin-github's. */
|
|
3
|
+
export type Resolved<T> = {
|
|
4
|
+
found: T;
|
|
5
|
+
} | {
|
|
6
|
+
missing: string;
|
|
7
|
+
};
|
|
8
|
+
export interface GmailCheckStateMailbox {
|
|
9
|
+
email?: string;
|
|
10
|
+
displayName?: string;
|
|
11
|
+
}
|
|
12
|
+
export interface GmailCheckStateMessage {
|
|
13
|
+
mailboxEmail?: string;
|
|
14
|
+
id?: string;
|
|
15
|
+
threadId?: string;
|
|
16
|
+
from?: string;
|
|
17
|
+
to?: string[] | null;
|
|
18
|
+
cc?: string[] | null;
|
|
19
|
+
bcc?: string[] | null;
|
|
20
|
+
subject?: string;
|
|
21
|
+
bodyOmitted?: boolean;
|
|
22
|
+
}
|
|
23
|
+
export interface GmailCheckStateLabel {
|
|
24
|
+
mailboxEmail?: string;
|
|
25
|
+
id?: string;
|
|
26
|
+
name?: string;
|
|
27
|
+
type?: string;
|
|
28
|
+
}
|
|
29
|
+
export interface GmailCheckStateMessageLabel {
|
|
30
|
+
mailboxEmail?: string;
|
|
31
|
+
messageId?: string;
|
|
32
|
+
labelId?: string;
|
|
33
|
+
}
|
|
34
|
+
export interface GmailCheckStateDraft {
|
|
35
|
+
mailboxEmail?: string;
|
|
36
|
+
id?: string;
|
|
37
|
+
messageId?: string;
|
|
38
|
+
}
|
|
39
|
+
export interface GmailCheckStateBounds {
|
|
40
|
+
messageBodiesOmitted?: boolean;
|
|
41
|
+
largeMailbox?: boolean;
|
|
42
|
+
truncatedCollections?: string[] | null;
|
|
43
|
+
}
|
|
44
|
+
export interface GmailCheckState {
|
|
45
|
+
mailboxes?: GmailCheckStateMailbox[] | null;
|
|
46
|
+
messages?: GmailCheckStateMessage[] | null;
|
|
47
|
+
drafts?: GmailCheckStateDraft[] | null;
|
|
48
|
+
labels?: GmailCheckStateLabel[] | null;
|
|
49
|
+
messageLabels?: GmailCheckStateMessageLabel[] | null;
|
|
50
|
+
exportBounds?: GmailCheckStateBounds | null;
|
|
51
|
+
}
|
|
52
|
+
/**
|
|
53
|
+
* Was this collection capped on the way out?
|
|
54
|
+
*
|
|
55
|
+
* An export with no `exportBounds` block at all predates the cap and answers
|
|
56
|
+
* false — the same answer it would have given honestly. Treating absence as
|
|
57
|
+
* "truncated" would skip every criterion on an older snapshot.
|
|
58
|
+
*/
|
|
59
|
+
export declare function isTruncated(state: GmailCheckState, collection: string): boolean;
|
|
60
|
+
/**
|
|
61
|
+
* The message a criterion names, with the outcomes a negative criterion must
|
|
62
|
+
* tell apart:
|
|
63
|
+
* - no `messages` key → `state_incomplete`; we cannot attest anything
|
|
64
|
+
* - present, id absent, collection CAPPED → `collection_truncated`; absent from
|
|
65
|
+
* a truncated list is not absent, and answering `not_found` here would
|
|
66
|
+
* false-fail a correct agent on a large mailbox
|
|
67
|
+
* - present, id absent, not capped → `message_not_found`
|
|
68
|
+
* - present in more than one mailbox → `message_ambiguous`
|
|
69
|
+
*
|
|
70
|
+
* The ambiguity arm is gmail's answer to github's `{repo}` slot. GitHub's legacy
|
|
71
|
+
* patterns took the repo as an optional qualifier and, absent it, scanned
|
|
72
|
+
* first-match-wins, so a two-repo world graded whichever sorted first. Gmail's
|
|
73
|
+
* corpus sentences carry no mailbox and ids are minted per mailbox, so rather
|
|
74
|
+
* than inventing a slot that would stop every existing criterion binding, this
|
|
75
|
+
* REFUSES on the world where the ambiguity is real.
|
|
76
|
+
*/
|
|
77
|
+
export declare function resolveMessage(state: GmailCheckState, id: string): Resolved<GmailCheckStateMessage>;
|
|
78
|
+
/**
|
|
79
|
+
* Every label id that counts as `wanted`, lower-cased for comparison.
|
|
80
|
+
*
|
|
81
|
+
* Matches a label row by id OR by display name, because the corpus names both
|
|
82
|
+
* kinds: `Label_follow_up` is an id, `Follow Up` is the name of the same label.
|
|
83
|
+
* The bare `wanted` is always included so the join still works when the `labels`
|
|
84
|
+
* collection was capped away — a `messageLabels` row carries the bare id
|
|
85
|
+
* regardless.
|
|
86
|
+
*/
|
|
87
|
+
export declare function labelIdsFor(state: GmailCheckState, wanted: string): Set<string>;
|
|
88
|
+
/**
|
|
89
|
+
* Does this message carry the named label?
|
|
90
|
+
*
|
|
91
|
+
* Reads the `messageLabels` join. A capped join is refused rather than answered:
|
|
92
|
+
* a missing row there is indistinguishable from a label that was never applied,
|
|
93
|
+
* and on a negative criterion that difference is a leaking agent's free point.
|
|
94
|
+
*/
|
|
95
|
+
export declare function messageCarriesLabel(state: GmailCheckState, messageId: string, wanted: string): Resolved<boolean>;
|
|
96
|
+
/**
|
|
97
|
+
* The label a criterion names BY NAME.
|
|
98
|
+
*
|
|
99
|
+
* Deliberately does not fall back to the id. "A label named `Parity Complete`
|
|
100
|
+
* exists" asks about the display name; letting it also match an id would make
|
|
101
|
+
* the sentence mean two things, and `gmail.message-has-label` is the check that
|
|
102
|
+
* speaks ids.
|
|
103
|
+
*/
|
|
104
|
+
export declare function resolveLabelByName(state: GmailCheckState, name: string): Resolved<GmailCheckStateLabel>;
|
|
105
|
+
/**
|
|
106
|
+
* Who a draft is addressed to — `to` + `cc`, from the backing MESSAGE.
|
|
107
|
+
*
|
|
108
|
+
* The exported draft row carries no addressing at all, so a predicate reading it
|
|
109
|
+
* alone would answer "no draft is addressed to anyone", always. A draft whose
|
|
110
|
+
* message did not survive the export contributes nothing rather than throwing;
|
|
111
|
+
* the caller decides whether that emptiness is answerable.
|
|
112
|
+
*/
|
|
113
|
+
export declare function draftRecipients(state: GmailCheckState, draft: GmailCheckStateDraft): string[];
|
|
@@ -0,0 +1,145 @@
|
|
|
1
|
+
// SPDX-License-Identifier: Apache-2.0
|
|
2
|
+
//
|
|
3
|
+
// How a declared check READS the exported Gmail mailbox (F-1128).
|
|
4
|
+
//
|
|
5
|
+
// pome-cloud kept a hand-maintained mirror of this shape in
|
|
6
|
+
// `deterministic/gmail.ts`. That mirror is deleted in the same milestone; this
|
|
7
|
+
// is the only model, and it lives here because the twin owns the shape.
|
|
8
|
+
//
|
|
9
|
+
// Written against the EXPORT (`state.ts exportGmailState()`), never the seed.
|
|
10
|
+
// The two diverge in ways that each produce a wrong verdict:
|
|
11
|
+
// - the seed says `labels: ["INBOX", "Build"]` on the message, mixing ids and
|
|
12
|
+
// display names; the export hoists them to a flat `messageLabels` JOIN keyed
|
|
13
|
+
// by `labelId`.
|
|
14
|
+
// - the seed puts `to` on the draft; the export's `drafts` row carries only
|
|
15
|
+
// `{mailboxEmail, id, messageId, createdAt, updatedAt}` and the addressing
|
|
16
|
+
// lives on the backing message.
|
|
17
|
+
//
|
|
18
|
+
// Every field is optional and every list nullable, because `exportGmailState`
|
|
19
|
+
// spreads raw SQLite rows: an older snapshot, a partial upload, or a schema that
|
|
20
|
+
// gained a column all arrive here as absent fields. A predicate that assumes
|
|
21
|
+
// presence throws inside the evaluator; one that reads this model returns a
|
|
22
|
+
// NAMED verdict instead. That is the D4 bargain — a criterion may leave the
|
|
23
|
+
// denominator, but it may never fabricate one.
|
|
24
|
+
//
|
|
25
|
+
// Four shapes are counter-intuitive and each has a wrong-verdict story:
|
|
26
|
+
// - MESSAGE BODIES ARE NEVER EXPORTED. `boundMessageExport` strips `text`,
|
|
27
|
+
// `html`, `snippet` and `headers` unconditionally and leaves digests plus
|
|
28
|
+
// `bodyOmitted: true`. A slack-style substring scan over message prose has
|
|
29
|
+
// no substrate here at all — `subject` is the only prose that survives.
|
|
30
|
+
// - COLLECTIONS TRUNCATE at `STATE_EXPORT_COLLECTION_CAP`, and the capped
|
|
31
|
+
// names land in `exportBounds.truncatedCollections`. Absent-from-a-truncated
|
|
32
|
+
// -collection is not absent, so it must skip rather than answer.
|
|
33
|
+
// - LABELS ARE A JOIN. A user label's `id` and `name` differ
|
|
34
|
+
// (`Label_follow_up` / `Follow Up`); a system label carries `id === name`.
|
|
35
|
+
// - EVERYTHING IS MAILBOX-SCOPED via `mailboxEmail`, and ids are minted per
|
|
36
|
+
// mailbox, so `deliveryMode: "seeded-mailboxes"` can put one id in two.
|
|
37
|
+
const lower = (value) => (value ?? "").toLowerCase();
|
|
38
|
+
/**
|
|
39
|
+
* Was this collection capped on the way out?
|
|
40
|
+
*
|
|
41
|
+
* An export with no `exportBounds` block at all predates the cap and answers
|
|
42
|
+
* false — the same answer it would have given honestly. Treating absence as
|
|
43
|
+
* "truncated" would skip every criterion on an older snapshot.
|
|
44
|
+
*/
|
|
45
|
+
export function isTruncated(state, collection) {
|
|
46
|
+
return (state.exportBounds?.truncatedCollections ?? []).includes(collection);
|
|
47
|
+
}
|
|
48
|
+
/**
|
|
49
|
+
* The message a criterion names, with the outcomes a negative criterion must
|
|
50
|
+
* tell apart:
|
|
51
|
+
* - no `messages` key → `state_incomplete`; we cannot attest anything
|
|
52
|
+
* - present, id absent, collection CAPPED → `collection_truncated`; absent from
|
|
53
|
+
* a truncated list is not absent, and answering `not_found` here would
|
|
54
|
+
* false-fail a correct agent on a large mailbox
|
|
55
|
+
* - present, id absent, not capped → `message_not_found`
|
|
56
|
+
* - present in more than one mailbox → `message_ambiguous`
|
|
57
|
+
*
|
|
58
|
+
* The ambiguity arm is gmail's answer to github's `{repo}` slot. GitHub's legacy
|
|
59
|
+
* patterns took the repo as an optional qualifier and, absent it, scanned
|
|
60
|
+
* first-match-wins, so a two-repo world graded whichever sorted first. Gmail's
|
|
61
|
+
* corpus sentences carry no mailbox and ids are minted per mailbox, so rather
|
|
62
|
+
* than inventing a slot that would stop every existing criterion binding, this
|
|
63
|
+
* REFUSES on the world where the ambiguity is real.
|
|
64
|
+
*/
|
|
65
|
+
export function resolveMessage(state, id) {
|
|
66
|
+
if (state.messages == null)
|
|
67
|
+
return { missing: "state_incomplete" };
|
|
68
|
+
const hits = state.messages.filter((message) => lower(message.id) === lower(id));
|
|
69
|
+
if (hits.length > 1) {
|
|
70
|
+
return { missing: `message_ambiguous ("${id}" exists in ${hits.length} mailboxes)` };
|
|
71
|
+
}
|
|
72
|
+
if (hits.length === 1)
|
|
73
|
+
return { found: hits[0] };
|
|
74
|
+
if (isTruncated(state, "messages"))
|
|
75
|
+
return { missing: 'collection_truncated ("messages")' };
|
|
76
|
+
return { missing: `message_not_found ("${id}")` };
|
|
77
|
+
}
|
|
78
|
+
/**
|
|
79
|
+
* Every label id that counts as `wanted`, lower-cased for comparison.
|
|
80
|
+
*
|
|
81
|
+
* Matches a label row by id OR by display name, because the corpus names both
|
|
82
|
+
* kinds: `Label_follow_up` is an id, `Follow Up` is the name of the same label.
|
|
83
|
+
* The bare `wanted` is always included so the join still works when the `labels`
|
|
84
|
+
* collection was capped away — a `messageLabels` row carries the bare id
|
|
85
|
+
* regardless.
|
|
86
|
+
*/
|
|
87
|
+
export function labelIdsFor(state, wanted) {
|
|
88
|
+
const ids = new Set([lower(wanted)]);
|
|
89
|
+
for (const label of state.labels ?? []) {
|
|
90
|
+
const matches = lower(label.name) === lower(wanted) || lower(label.id) === lower(wanted);
|
|
91
|
+
if (matches && label.id != null)
|
|
92
|
+
ids.add(lower(label.id));
|
|
93
|
+
}
|
|
94
|
+
return ids;
|
|
95
|
+
}
|
|
96
|
+
/**
|
|
97
|
+
* Does this message carry the named label?
|
|
98
|
+
*
|
|
99
|
+
* Reads the `messageLabels` join. A capped join is refused rather than answered:
|
|
100
|
+
* a missing row there is indistinguishable from a label that was never applied,
|
|
101
|
+
* and on a negative criterion that difference is a leaking agent's free point.
|
|
102
|
+
*/
|
|
103
|
+
export function messageCarriesLabel(state, messageId, wanted) {
|
|
104
|
+
if (state.messageLabels == null)
|
|
105
|
+
return { missing: "state_incomplete" };
|
|
106
|
+
const ids = labelIdsFor(state, wanted);
|
|
107
|
+
const carried = state.messageLabels.some((row) => lower(row.messageId) === lower(messageId) && ids.has(lower(row.labelId)));
|
|
108
|
+
if (!carried && isTruncated(state, "messageLabels")) {
|
|
109
|
+
return { missing: 'collection_truncated ("messageLabels")' };
|
|
110
|
+
}
|
|
111
|
+
return { found: carried };
|
|
112
|
+
}
|
|
113
|
+
/**
|
|
114
|
+
* The label a criterion names BY NAME.
|
|
115
|
+
*
|
|
116
|
+
* Deliberately does not fall back to the id. "A label named `Parity Complete`
|
|
117
|
+
* exists" asks about the display name; letting it also match an id would make
|
|
118
|
+
* the sentence mean two things, and `gmail.message-has-label` is the check that
|
|
119
|
+
* speaks ids.
|
|
120
|
+
*/
|
|
121
|
+
export function resolveLabelByName(state, name) {
|
|
122
|
+
if (state.labels == null)
|
|
123
|
+
return { missing: "state_incomplete" };
|
|
124
|
+
const hit = state.labels.find((label) => lower(label.name) === lower(name));
|
|
125
|
+
if (hit)
|
|
126
|
+
return { found: hit };
|
|
127
|
+
if (isTruncated(state, "labels"))
|
|
128
|
+
return { missing: 'collection_truncated ("labels")' };
|
|
129
|
+
return { missing: `label_not_found ("${name}")` };
|
|
130
|
+
}
|
|
131
|
+
/**
|
|
132
|
+
* Who a draft is addressed to — `to` + `cc`, from the backing MESSAGE.
|
|
133
|
+
*
|
|
134
|
+
* The exported draft row carries no addressing at all, so a predicate reading it
|
|
135
|
+
* alone would answer "no draft is addressed to anyone", always. A draft whose
|
|
136
|
+
* message did not survive the export contributes nothing rather than throwing;
|
|
137
|
+
* the caller decides whether that emptiness is answerable.
|
|
138
|
+
*/
|
|
139
|
+
export function draftRecipients(state, draft) {
|
|
140
|
+
const message = (state.messages ?? []).find((candidate) => lower(candidate.id) === lower(draft.messageId));
|
|
141
|
+
if (!message)
|
|
142
|
+
return [];
|
|
143
|
+
return [...(message.to ?? []), ...(message.cc ?? [])];
|
|
144
|
+
}
|
|
145
|
+
//# sourceMappingURL=check-state.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"check-state.js","sourceRoot":"","sources":["../../src/check-state.ts"],"names":[],"mappings":"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"}
|