@cello-protocol/daemon 0.0.227 → 0.0.229
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/agent-admin-handlers.d.ts +56 -0
- package/dist/agent-admin-handlers.d.ts.map +1 -0
- package/dist/agent-admin-handlers.js +73 -0
- package/dist/agent-admin-handlers.js.map +1 -0
- package/dist/agent-handlers.d.ts +72 -0
- package/dist/agent-handlers.d.ts.map +1 -0
- package/dist/agent-handlers.js +604 -0
- package/dist/agent-handlers.js.map +1 -0
- package/dist/agent-id-migration.d.ts +70 -0
- package/dist/agent-id-migration.d.ts.map +1 -0
- package/dist/agent-id-migration.js +468 -0
- package/dist/agent-id-migration.js.map +1 -0
- package/dist/agent-loader.d.ts +37 -0
- package/dist/agent-loader.d.ts.map +1 -0
- package/dist/agent-loader.js +37 -0
- package/dist/agent-loader.js.map +1 -0
- package/dist/agent-selection-root.d.ts +29 -0
- package/dist/agent-selection-root.d.ts.map +1 -0
- package/dist/agent-selection-root.js +126 -0
- package/dist/agent-selection-root.js.map +1 -0
- package/dist/agent-selection.d.ts +73 -0
- package/dist/agent-selection.d.ts.map +1 -0
- package/dist/agent-selection.js +80 -0
- package/dist/agent-selection.js.map +1 -0
- package/dist/agent-settings-keys.d.ts +52 -0
- package/dist/agent-settings-keys.d.ts.map +1 -0
- package/dist/agent-settings-keys.js +114 -0
- package/dist/agent-settings-keys.js.map +1 -0
- package/dist/agent-state.d.ts +67 -0
- package/dist/agent-state.d.ts.map +1 -0
- package/dist/agent-state.js +66 -0
- package/dist/agent-state.js.map +1 -0
- package/dist/assignment-verify.d.ts +90 -0
- package/dist/assignment-verify.d.ts.map +1 -0
- package/dist/assignment-verify.js +301 -0
- package/dist/assignment-verify.js.map +1 -0
- package/dist/attendance-wiring.d.ts +23 -0
- package/dist/attendance-wiring.d.ts.map +1 -0
- package/dist/attendance-wiring.js +248 -0
- package/dist/attendance-wiring.js.map +1 -0
- package/dist/attestation-body.d.ts +47 -0
- package/dist/attestation-body.d.ts.map +1 -0
- package/dist/attestation-body.js +71 -0
- package/dist/attestation-body.js.map +1 -0
- package/dist/authorship-verification.d.ts +91 -0
- package/dist/authorship-verification.d.ts.map +1 -0
- package/dist/authorship-verification.js +532 -0
- package/dist/authorship-verification.js.map +1 -0
- package/dist/away-detection.d.ts +139 -0
- package/dist/away-detection.d.ts.map +1 -0
- package/dist/away-detection.js +186 -0
- package/dist/away-detection.js.map +1 -0
- package/dist/away-inbox-oneshot.d.ts +40 -0
- package/dist/away-inbox-oneshot.d.ts.map +1 -0
- package/dist/away-inbox-oneshot.js +311 -0
- package/dist/away-inbox-oneshot.js.map +1 -0
- package/dist/backup-restore-handlers.d.ts +10 -0
- package/dist/backup-restore-handlers.d.ts.map +1 -0
- package/dist/backup-restore-handlers.js +82 -0
- package/dist/backup-restore-handlers.js.map +1 -0
- package/dist/backup-restore.d.ts +102 -0
- package/dist/backup-restore.d.ts.map +1 -0
- package/dist/backup-restore.js +341 -0
- package/dist/backup-restore.js.map +1 -0
- package/dist/bin/cello-daemon.d.ts +13 -0
- package/dist/bin/cello-daemon.d.ts.map +1 -0
- package/dist/bin/cello-daemon.js.map +1 -0
- package/dist/boot-agents.d.ts +64 -0
- package/dist/boot-agents.d.ts.map +1 -0
- package/dist/boot-agents.js +241 -0
- package/dist/boot-agents.js.map +1 -0
- package/dist/boot-connection-state.d.ts +38 -0
- package/dist/boot-connection-state.d.ts.map +1 -0
- package/dist/boot-connection-state.js +95 -0
- package/dist/boot-connection-state.js.map +1 -0
- package/dist/boot-core.d.ts +36 -0
- package/dist/boot-core.d.ts.map +1 -0
- package/dist/boot-core.js +293 -0
- package/dist/boot-core.js.map +1 -0
- package/dist/boot-parked-content.d.ts +34 -0
- package/dist/boot-parked-content.d.ts.map +1 -0
- package/dist/boot-parked-content.js +528 -0
- package/dist/boot-parked-content.js.map +1 -0
- package/dist/boot-sweeps.d.ts +22 -0
- package/dist/boot-sweeps.d.ts.map +1 -0
- package/dist/boot-sweeps.js +51 -0
- package/dist/boot-sweeps.js.map +1 -0
- package/dist/bundled-consortium-manifest.d.ts +47 -0
- package/dist/bundled-consortium-manifest.d.ts.map +1 -0
- package/dist/bundled-consortium-manifest.js +116 -0
- package/dist/bundled-consortium-manifest.js.map +1 -0
- package/dist/cbor-blob-migration.d.ts +8 -0
- package/dist/cbor-blob-migration.d.ts.map +1 -0
- package/dist/cbor-blob-migration.js +116 -0
- package/dist/cbor-blob-migration.js.map +1 -0
- package/dist/challenge-verifier.d.ts +12 -0
- package/dist/challenge-verifier.d.ts.map +1 -0
- package/dist/challenge-verifier.js +11 -0
- package/dist/challenge-verifier.js.map +1 -0
- package/dist/channel-log-store.d.ts +80 -0
- package/dist/channel-log-store.d.ts.map +1 -0
- package/dist/channel-log-store.js +290 -0
- package/dist/channel-log-store.js.map +1 -0
- package/dist/close-commitment.d.ts +67 -0
- package/dist/close-commitment.d.ts.map +1 -0
- package/dist/close-commitment.js +78 -0
- package/dist/close-commitment.js.map +1 -0
- package/dist/close-session-handler.d.ts +94 -0
- package/dist/close-session-handler.d.ts.map +1 -0
- package/dist/close-session-handler.js +1418 -0
- package/dist/close-session-handler.js.map +1 -0
- package/dist/co-attendance.d.ts +29 -0
- package/dist/co-attendance.d.ts.map +1 -0
- package/dist/co-attendance.js +32 -0
- package/dist/co-attendance.js.map +1 -0
- package/dist/column-birth.d.ts +40 -0
- package/dist/column-birth.d.ts.map +1 -0
- package/dist/column-birth.js +61 -0
- package/dist/column-birth.js.map +1 -0
- package/dist/connect-or-start.d.ts +25 -0
- package/dist/connect-or-start.d.ts.map +1 -0
- package/dist/connect-or-start.js +175 -0
- package/dist/connect-or-start.js.map +1 -0
- package/dist/connection-agents.d.ts +16 -0
- package/dist/connection-agents.d.ts.map +1 -0
- package/dist/connection-agents.js +68 -0
- package/dist/connection-agents.js.map +1 -0
- package/dist/consent-migration.d.ts +49 -0
- package/dist/consent-migration.d.ts.map +1 -0
- package/dist/consent-migration.js +128 -0
- package/dist/consent-migration.js.map +1 -0
- package/dist/consortium-bootstrap.d.ts +138 -0
- package/dist/consortium-bootstrap.d.ts.map +1 -0
- package/dist/consortium-bootstrap.js +339 -0
- package/dist/consortium-bootstrap.js.map +1 -0
- package/dist/consortium-fingerprint.d.ts +115 -0
- package/dist/consortium-fingerprint.d.ts.map +1 -0
- package/dist/consortium-fingerprint.js +175 -0
- package/dist/consortium-fingerprint.js.map +1 -0
- package/dist/contact-handlers.d.ts +59 -0
- package/dist/contact-handlers.d.ts.map +1 -0
- package/dist/contact-handlers.js +343 -0
- package/dist/contact-handlers.js.map +1 -0
- package/dist/contact-pubkey-case.d.ts +65 -0
- package/dist/contact-pubkey-case.d.ts.map +1 -0
- package/dist/contact-pubkey-case.js +136 -0
- package/dist/contact-pubkey-case.js.map +1 -0
- package/dist/contacts-tier-migration.d.ts +90 -0
- package/dist/contacts-tier-migration.d.ts.map +1 -0
- package/dist/contacts-tier-migration.js +150 -0
- package/dist/contacts-tier-migration.js.map +1 -0
- package/dist/content-encryption-status.d.ts +111 -0
- package/dist/content-encryption-status.d.ts.map +1 -0
- package/dist/content-encryption-status.js +158 -0
- package/dist/content-encryption-status.js.map +1 -0
- package/dist/content-park-client.d.ts +90 -0
- package/dist/content-park-client.d.ts.map +1 -0
- package/dist/content-park-client.js +362 -0
- package/dist/content-park-client.js.map +1 -0
- package/dist/content-park.d.ts +52 -0
- package/dist/content-park.d.ts.map +1 -0
- package/dist/content-park.js +1309 -0
- package/dist/content-park.js.map +1 -0
- package/dist/cross-node-negotiation.d.ts +44 -0
- package/dist/cross-node-negotiation.d.ts.map +1 -0
- package/dist/cross-node-negotiation.js +34 -0
- package/dist/cross-node-negotiation.js.map +1 -0
- package/dist/daemon-handle.d.ts +57 -0
- package/dist/daemon-handle.d.ts.map +1 -0
- package/dist/daemon-handle.js +2 -0
- package/dist/daemon-handle.js.map +1 -0
- package/dist/daemon-status-report.d.ts +50 -0
- package/dist/daemon-status-report.d.ts.map +1 -0
- package/dist/daemon-status-report.js +81 -0
- package/dist/daemon-status-report.js.map +1 -0
- package/dist/daemon.d.ts +45 -0
- package/dist/daemon.d.ts.map +1 -0
- package/dist/daemon.js +1177 -0
- package/dist/daemon.js.map +1 -0
- package/dist/db-identity-store.d.ts +159 -0
- package/dist/db-identity-store.d.ts.map +1 -0
- package/dist/db-identity-store.js +502 -0
- package/dist/db-identity-store.js.map +1 -0
- package/dist/delivery-open-registry.d.ts +92 -0
- package/dist/delivery-open-registry.d.ts.map +1 -0
- package/dist/delivery-open-registry.js +121 -0
- package/dist/delivery-open-registry.js.map +1 -0
- package/dist/delivery-session-suspects.d.ts +56 -0
- package/dist/delivery-session-suspects.d.ts.map +1 -0
- package/dist/delivery-session-suspects.js +94 -0
- package/dist/delivery-session-suspects.js.map +1 -0
- package/dist/directory-auth-posture.d.ts +87 -0
- package/dist/directory-auth-posture.d.ts.map +1 -0
- package/dist/directory-auth-posture.js +134 -0
- package/dist/directory-auth-posture.js.map +1 -0
- package/dist/directory-bootstrap.d.ts +310 -0
- package/dist/directory-bootstrap.d.ts.map +1 -0
- package/dist/directory-bootstrap.js +557 -0
- package/dist/directory-bootstrap.js.map +1 -0
- package/dist/directory-connect.d.ts +27 -0
- package/dist/directory-connect.d.ts.map +1 -0
- package/dist/directory-connect.js +106 -0
- package/dist/directory-connect.js.map +1 -0
- package/dist/disconnect-cleanup.d.ts +51 -0
- package/dist/disconnect-cleanup.d.ts.map +1 -0
- package/dist/disconnect-cleanup.js +72 -0
- package/dist/disconnect-cleanup.js.map +1 -0
- package/dist/document-amendment-store.d.ts +120 -0
- package/dist/document-amendment-store.d.ts.map +1 -0
- package/dist/document-amendment-store.js +266 -0
- package/dist/document-amendment-store.js.map +1 -0
- package/dist/document-delivery-transport.d.ts +168 -0
- package/dist/document-delivery-transport.d.ts.map +1 -0
- package/dist/document-delivery-transport.js +206 -0
- package/dist/document-delivery-transport.js.map +1 -0
- package/dist/document-engine.d.ts +134 -0
- package/dist/document-engine.d.ts.map +1 -0
- package/dist/document-engine.js +282 -0
- package/dist/document-engine.js.map +1 -0
- package/dist/document-flag.d.ts +58 -0
- package/dist/document-flag.d.ts.map +1 -0
- package/dist/document-flag.js +70 -0
- package/dist/document-flag.js.map +1 -0
- package/dist/document-frame-router.d.ts +245 -0
- package/dist/document-frame-router.d.ts.map +1 -0
- package/dist/document-frame-router.js +397 -0
- package/dist/document-frame-router.js.map +1 -0
- package/dist/document-gate-wiring.d.ts +61 -0
- package/dist/document-gate-wiring.d.ts.map +1 -0
- package/dist/document-gate-wiring.js +125 -0
- package/dist/document-gate-wiring.js.map +1 -0
- package/dist/document-gate.d.ts +149 -0
- package/dist/document-gate.d.ts.map +1 -0
- package/dist/document-gate.js +509 -0
- package/dist/document-gate.js.map +1 -0
- package/dist/document-handlers.d.ts +47 -0
- package/dist/document-handlers.d.ts.map +1 -0
- package/dist/document-handlers.js +2203 -0
- package/dist/document-handlers.js.map +1 -0
- package/dist/document-handshake.d.ts +176 -0
- package/dist/document-handshake.d.ts.map +1 -0
- package/dist/document-handshake.js +452 -0
- package/dist/document-handshake.js.map +1 -0
- package/dist/document-inbound.d.ts +162 -0
- package/dist/document-inbound.d.ts.map +1 -0
- package/dist/document-inbound.js +530 -0
- package/dist/document-inbound.js.map +1 -0
- package/dist/document-json.d.ts +120 -0
- package/dist/document-json.d.ts.map +1 -0
- package/dist/document-json.js +191 -0
- package/dist/document-json.js.map +1 -0
- package/dist/document-layer.d.ts +215 -0
- package/dist/document-layer.d.ts.map +1 -0
- package/dist/document-layer.js +1025 -0
- package/dist/document-layer.js.map +1 -0
- package/dist/document-lifecycle.d.ts +52 -0
- package/dist/document-lifecycle.d.ts.map +1 -0
- package/dist/document-lifecycle.js +134 -0
- package/dist/document-lifecycle.js.map +1 -0
- package/dist/document-live-docs.d.ts +58 -0
- package/dist/document-live-docs.d.ts.map +1 -0
- package/dist/document-live-docs.js +126 -0
- package/dist/document-live-docs.js.map +1 -0
- package/dist/document-notify.d.ts +228 -0
- package/dist/document-notify.d.ts.map +1 -0
- package/dist/document-notify.js +580 -0
- package/dist/document-notify.js.map +1 -0
- package/dist/document-profile.d.ts +61 -0
- package/dist/document-profile.d.ts.map +1 -0
- package/dist/document-profile.js +112 -0
- package/dist/document-profile.js.map +1 -0
- package/dist/document-publish.d.ts +87 -0
- package/dist/document-publish.d.ts.map +1 -0
- package/dist/document-publish.js +173 -0
- package/dist/document-publish.js.map +1 -0
- package/dist/document-reachability.d.ts +42 -0
- package/dist/document-reachability.d.ts.map +1 -0
- package/dist/document-reachability.js +80 -0
- package/dist/document-reachability.js.map +1 -0
- package/dist/document-reconcile-engine.d.ts +66 -0
- package/dist/document-reconcile-engine.d.ts.map +1 -0
- package/dist/document-reconcile-engine.js +225 -0
- package/dist/document-reconcile-engine.js.map +1 -0
- package/dist/document-reconcile-scheduler.d.ts +163 -0
- package/dist/document-reconcile-scheduler.d.ts.map +1 -0
- package/dist/document-reconcile-scheduler.js +303 -0
- package/dist/document-reconcile-scheduler.js.map +1 -0
- package/dist/document-rejection.d.ts +251 -0
- package/dist/document-rejection.d.ts.map +1 -0
- package/dist/document-rejection.js +435 -0
- package/dist/document-rejection.js.map +1 -0
- package/dist/document-screen.d.ts +114 -0
- package/dist/document-screen.d.ts.map +1 -0
- package/dist/document-screen.js +223 -0
- package/dist/document-screen.js.map +1 -0
- package/dist/document-store.d.ts +372 -0
- package/dist/document-store.d.ts.map +1 -0
- package/dist/document-store.js +931 -0
- package/dist/document-store.js.map +1 -0
- package/dist/document-surface.d.ts +32 -0
- package/dist/document-surface.d.ts.map +1 -0
- package/dist/document-surface.js +151 -0
- package/dist/document-surface.js.map +1 -0
- package/dist/document-types.d.ts +94 -0
- package/dist/document-types.d.ts.map +1 -0
- package/dist/document-types.js +90 -0
- package/dist/document-types.js.map +1 -0
- package/dist/document-watch.d.ts +69 -0
- package/dist/document-watch.d.ts.map +1 -0
- package/dist/document-watch.js +108 -0
- package/dist/document-watch.js.map +1 -0
- package/dist/document-wiring.d.ts +53 -0
- package/dist/document-wiring.d.ts.map +1 -0
- package/dist/document-wiring.js +323 -0
- package/dist/document-wiring.js.map +1 -0
- package/dist/document-write-guard.d.ts +66 -0
- package/dist/document-write-guard.d.ts.map +1 -0
- package/dist/document-write-guard.js +98 -0
- package/dist/document-write-guard.js.map +1 -0
- package/dist/document-write-path.d.ts +94 -0
- package/dist/document-write-path.d.ts.map +1 -0
- package/dist/document-write-path.js +530 -0
- package/dist/document-write-path.js.map +1 -0
- package/dist/error-message.d.ts +7 -0
- package/dist/error-message.d.ts.map +1 -0
- package/dist/error-message.js +19 -0
- package/dist/error-message.js.map +1 -0
- package/dist/file-manifest-provider.d.ts +37 -0
- package/dist/file-manifest-provider.d.ts.map +1 -0
- package/dist/file-manifest-provider.js +105 -0
- package/dist/file-manifest-provider.js.map +1 -0
- package/dist/frame-values.d.ts +3 -0
- package/dist/frame-values.d.ts.map +1 -0
- package/dist/frame-values.js +84 -0
- package/dist/frame-values.js.map +1 -0
- package/dist/frontier-mismatch.d.ts +73 -0
- package/dist/frontier-mismatch.d.ts.map +1 -0
- package/dist/frontier-mismatch.js +89 -0
- package/dist/frontier-mismatch.js.map +1 -0
- package/dist/gateway-config-handlers.d.ts +26 -0
- package/dist/gateway-config-handlers.d.ts.map +1 -0
- package/dist/gateway-config-handlers.js +454 -0
- package/dist/gateway-config-handlers.js.map +1 -0
- package/dist/held-content.d.ts +145 -0
- package/dist/held-content.d.ts.map +1 -0
- package/dist/held-content.js +389 -0
- package/dist/held-content.js.map +1 -0
- package/dist/http-manifest-poll.d.ts +67 -0
- package/dist/http-manifest-poll.d.ts.map +1 -0
- package/dist/http-manifest-poll.js +150 -0
- package/dist/http-manifest-poll.js.map +1 -0
- package/dist/identity-migration.d.ts +40 -0
- package/dist/identity-migration.d.ts.map +1 -0
- package/dist/identity-migration.js +461 -0
- package/dist/identity-migration.js.map +1 -0
- package/dist/inbound-refusals.d.ts +283 -0
- package/dist/inbound-refusals.d.ts.map +1 -0
- package/dist/inbound-refusals.js +919 -0
- package/dist/inbound-refusals.js.map +1 -0
- package/dist/inbound-seal-request.d.ts +32 -0
- package/dist/inbound-seal-request.d.ts.map +1 -0
- package/dist/inbound-seal-request.js +228 -0
- package/dist/inbound-seal-request.js.map +1 -0
- package/dist/inbound-sessions.d.ts +291 -0
- package/dist/inbound-sessions.d.ts.map +1 -0
- package/dist/inbound-sessions.js +1609 -0
- package/dist/inbound-sessions.js.map +1 -0
- package/dist/inclusion-proof-handlers.d.ts +43 -0
- package/dist/inclusion-proof-handlers.d.ts.map +1 -0
- package/dist/inclusion-proof-handlers.js +565 -0
- package/dist/inclusion-proof-handlers.js.map +1 -0
- package/dist/inclusion-proof.d.ts +151 -0
- package/dist/inclusion-proof.d.ts.map +1 -0
- package/dist/inclusion-proof.js +228 -0
- package/dist/inclusion-proof.js.map +1 -0
- package/dist/index.d.ts +32 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js.map +1 -0
- package/dist/initiate-session-handler.d.ts +55 -0
- package/dist/initiate-session-handler.d.ts.map +1 -0
- package/dist/initiate-session-handler.js +310 -0
- package/dist/initiate-session-handler.js.map +1 -0
- package/dist/ipc-client.d.ts +31 -0
- package/dist/ipc-client.d.ts.map +1 -0
- package/dist/ipc-client.js +113 -0
- package/dist/ipc-client.js.map +1 -0
- package/dist/ipc-server.d.ts +63 -0
- package/dist/ipc-server.d.ts.map +1 -0
- package/dist/ipc-server.js +429 -0
- package/dist/ipc-server.js.map +1 -0
- package/dist/ipc-surface.d.ts +44 -0
- package/dist/ipc-surface.d.ts.map +1 -0
- package/dist/ipc-surface.js +107 -0
- package/dist/ipc-surface.js.map +1 -0
- package/dist/line-lcs.d.ts +51 -0
- package/dist/line-lcs.d.ts.map +1 -0
- package/dist/line-lcs.js +71 -0
- package/dist/line-lcs.js.map +1 -0
- package/dist/lock-file.d.ts +39 -0
- package/dist/lock-file.d.ts.map +1 -0
- package/dist/lock-file.js +120 -0
- package/dist/lock-file.js.map +1 -0
- package/dist/log-collapse.d.ts +66 -0
- package/dist/log-collapse.d.ts.map +1 -0
- package/dist/log-collapse.js +244 -0
- package/dist/log-collapse.js.map +1 -0
- package/dist/log-rotate.d.ts +67 -0
- package/dist/log-rotate.d.ts.map +1 -0
- package/dist/log-rotate.js +134 -0
- package/dist/log-rotate.js.map +1 -0
- package/dist/manifest-deps.d.ts +25 -0
- package/dist/manifest-deps.d.ts.map +1 -0
- package/dist/manifest-deps.js +151 -0
- package/dist/manifest-deps.js.map +1 -0
- package/dist/manifest-poll-scheduler.d.ts +31 -0
- package/dist/manifest-poll-scheduler.d.ts.map +1 -0
- package/dist/manifest-poll-scheduler.js +59 -0
- package/dist/manifest-poll-scheduler.js.map +1 -0
- package/dist/manifest-validity.d.ts +153 -0
- package/dist/manifest-validity.d.ts.map +1 -0
- package/dist/manifest-validity.js +268 -0
- package/dist/manifest-validity.js.map +1 -0
- package/dist/manifest-version-store-db.d.ts +24 -0
- package/dist/manifest-version-store-db.d.ts.map +1 -0
- package/dist/manifest-version-store-db.js +58 -0
- package/dist/manifest-version-store-db.js.map +1 -0
- package/dist/manifest-version-store.d.ts +16 -0
- package/dist/manifest-version-store.d.ts.map +1 -0
- package/dist/manifest-version-store.js +15 -0
- package/dist/manifest-version-store.js.map +1 -0
- package/dist/network-directory-node.d.ts +136 -0
- package/dist/network-directory-node.d.ts.map +1 -0
- package/dist/network-directory-node.js +810 -0
- package/dist/network-directory-node.js.map +1 -0
- package/dist/nonce-dedup.d.ts +68 -0
- package/dist/nonce-dedup.d.ts.map +1 -0
- package/dist/nonce-dedup.js +205 -0
- package/dist/nonce-dedup.js.map +1 -0
- package/dist/notification-dispatcher.d.ts +92 -0
- package/dist/notification-dispatcher.d.ts.map +1 -0
- package/dist/notification-dispatcher.js +210 -0
- package/dist/notification-dispatcher.js.map +1 -0
- package/dist/notification-handlers.d.ts +53 -0
- package/dist/notification-handlers.d.ts.map +1 -0
- package/dist/notification-handlers.js +461 -0
- package/dist/notification-handlers.js.map +1 -0
- package/dist/onboarding-guidance.d.ts +79 -0
- package/dist/onboarding-guidance.d.ts.map +1 -0
- package/dist/onboarding-guidance.js +95 -0
- package/dist/onboarding-guidance.js.map +1 -0
- package/dist/operator-guidance.d.ts +25 -0
- package/dist/operator-guidance.d.ts.map +1 -0
- package/dist/operator-guidance.js +50 -0
- package/dist/operator-guidance.js.map +1 -0
- package/dist/orphan-triage.d.ts +130 -0
- package/dist/orphan-triage.d.ts.map +1 -0
- package/dist/orphan-triage.js +207 -0
- package/dist/orphan-triage.js.map +1 -0
- package/dist/outbound-sessions.d.ts +126 -0
- package/dist/outbound-sessions.d.ts.map +1 -0
- package/dist/outbound-sessions.js +1052 -0
- package/dist/outbound-sessions.js.map +1 -0
- package/dist/park-envelope.d.ts +329 -0
- package/dist/park-envelope.d.ts.map +1 -0
- package/dist/park-envelope.js +509 -0
- package/dist/park-envelope.js.map +1 -0
- package/dist/park-recovery.d.ts +273 -0
- package/dist/park-recovery.d.ts.map +1 -0
- package/dist/park-recovery.js +717 -0
- package/dist/park-recovery.js.map +1 -0
- package/dist/park-refusals.d.ts +147 -0
- package/dist/park-refusals.d.ts.map +1 -0
- package/dist/park-refusals.js +331 -0
- package/dist/park-refusals.js.map +1 -0
- package/dist/quarantine-framing.d.ts +92 -0
- package/dist/quarantine-framing.d.ts.map +1 -0
- package/dist/quarantine-framing.js +111 -0
- package/dist/quarantine-framing.js.map +1 -0
- package/dist/reconnect-drain.d.ts +22 -0
- package/dist/reconnect-drain.d.ts.map +1 -0
- package/dist/reconnect-drain.js +65 -0
- package/dist/reconnect-drain.js.map +1 -0
- package/dist/recovered-position.d.ts +14 -0
- package/dist/recovered-position.d.ts.map +1 -0
- package/dist/recovered-position.js +59 -0
- package/dist/recovered-position.js.map +1 -0
- package/dist/refusal-notices.d.ts +196 -0
- package/dist/refusal-notices.d.ts.map +1 -0
- package/dist/refusal-notices.js +516 -0
- package/dist/refusal-notices.js.map +1 -0
- package/dist/refusal-reasons.d.ts +245 -0
- package/dist/refusal-reasons.d.ts.map +1 -0
- package/dist/refusal-reasons.js +363 -0
- package/dist/refusal-reasons.js.map +1 -0
- package/dist/register-handler.d.ts +36 -0
- package/dist/register-handler.d.ts.map +1 -0
- package/dist/register-handler.js +285 -0
- package/dist/register-handler.js.map +1 -0
- package/dist/registration-context.d.ts +72 -0
- package/dist/registration-context.d.ts.map +1 -0
- package/dist/registration-context.js +126 -0
- package/dist/registration-context.js.map +1 -0
- package/dist/registration-manager.d.ts +94 -0
- package/dist/registration-manager.d.ts.map +1 -0
- package/dist/registration-manager.js +585 -0
- package/dist/registration-manager.js.map +1 -0
- package/dist/registration-persistence.d.ts +183 -0
- package/dist/registration-persistence.d.ts.map +1 -0
- package/dist/registration-persistence.js +263 -0
- package/dist/registration-persistence.js.map +1 -0
- package/dist/registry-poll.d.ts +52 -0
- package/dist/registry-poll.d.ts.map +1 -0
- package/dist/registry-poll.js +140 -0
- package/dist/registry-poll.js.map +1 -0
- package/dist/registry-version-store-db.d.ts +22 -0
- package/dist/registry-version-store-db.d.ts.map +1 -0
- package/dist/registry-version-store-db.js +50 -0
- package/dist/registry-version-store-db.js.map +1 -0
- package/dist/relay-endpoints.d.ts +18 -0
- package/dist/relay-endpoints.d.ts.map +1 -0
- package/dist/relay-endpoints.js +9 -0
- package/dist/relay-endpoints.js.map +1 -0
- package/dist/relay-only.d.ts +140 -0
- package/dist/relay-only.d.ts.map +1 -0
- package/dist/relay-only.js +193 -0
- package/dist/relay-only.js.map +1 -0
- package/dist/relay-receipt-store.d.ts +155 -0
- package/dist/relay-receipt-store.d.ts.map +1 -0
- package/dist/relay-receipt-store.js +284 -0
- package/dist/relay-receipt-store.js.map +1 -0
- package/dist/relay-reconnect.d.ts +32 -0
- package/dist/relay-reconnect.d.ts.map +1 -0
- package/dist/relay-reconnect.js +29 -0
- package/dist/relay-reconnect.js.map +1 -0
- package/dist/reply-lag.d.ts +11 -0
- package/dist/reply-lag.d.ts.map +1 -0
- package/dist/reply-lag.js +46 -0
- package/dist/reply-lag.js.map +1 -0
- package/dist/resolve-named-agent.d.ts +49 -0
- package/dist/resolve-named-agent.d.ts.map +1 -0
- package/dist/resolve-named-agent.js +77 -0
- package/dist/resolve-named-agent.js.map +1 -0
- package/dist/restart-seal-resolver.d.ts +110 -0
- package/dist/restart-seal-resolver.d.ts.map +1 -0
- package/dist/restart-seal-resolver.js +353 -0
- package/dist/restart-seal-resolver.js.map +1 -0
- package/dist/resume-last-seen.d.ts +15 -0
- package/dist/resume-last-seen.d.ts.map +1 -0
- package/dist/resume-last-seen.js +44 -0
- package/dist/resume-last-seen.js.map +1 -0
- package/dist/retry-queue.d.ts +203 -0
- package/dist/retry-queue.d.ts.map +1 -0
- package/dist/retry-queue.js +701 -0
- package/dist/retry-queue.js.map +1 -0
- package/dist/roster-freshness.d.ts +160 -0
- package/dist/roster-freshness.d.ts.map +1 -0
- package/dist/roster-freshness.js +250 -0
- package/dist/roster-freshness.js.map +1 -0
- package/dist/screening-status.d.ts +15 -0
- package/dist/screening-status.d.ts.map +1 -0
- package/dist/screening-status.js +65 -0
- package/dist/screening-status.js.map +1 -0
- package/dist/seal-carried-close.d.ts +37 -0
- package/dist/seal-carried-close.d.ts.map +1 -0
- package/dist/seal-carried-close.js +179 -0
- package/dist/seal-carried-close.js.map +1 -0
- package/dist/seal-certificate-pull.d.ts +79 -0
- package/dist/seal-certificate-pull.d.ts.map +1 -0
- package/dist/seal-certificate-pull.js +186 -0
- package/dist/seal-certificate-pull.js.map +1 -0
- package/dist/seal-certified-root-check.d.ts +37 -0
- package/dist/seal-certified-root-check.d.ts.map +1 -0
- package/dist/seal-certified-root-check.js +127 -0
- package/dist/seal-certified-root-check.js.map +1 -0
- package/dist/seal-coordinator.d.ts +118 -0
- package/dist/seal-coordinator.d.ts.map +1 -0
- package/dist/seal-coordinator.js +927 -0
- package/dist/seal-coordinator.js.map +1 -0
- package/dist/seal-escalation.d.ts +80 -0
- package/dist/seal-escalation.d.ts.map +1 -0
- package/dist/seal-escalation.js +283 -0
- package/dist/seal-escalation.js.map +1 -0
- package/dist/seal-evidence-root-check.d.ts +70 -0
- package/dist/seal-evidence-root-check.d.ts.map +1 -0
- package/dist/seal-evidence-root-check.js +199 -0
- package/dist/seal-evidence-root-check.js.map +1 -0
- package/dist/seal-failure-store.d.ts +139 -0
- package/dist/seal-failure-store.d.ts.map +1 -0
- package/dist/seal-failure-store.js +207 -0
- package/dist/seal-failure-store.js.map +1 -0
- package/dist/seal-flows.d.ts +107 -0
- package/dist/seal-flows.d.ts.map +1 -0
- package/dist/seal-flows.js +638 -0
- package/dist/seal-flows.js.map +1 -0
- package/dist/seal-frontier-verify.d.ts +103 -0
- package/dist/seal-frontier-verify.d.ts.map +1 -0
- package/dist/seal-frontier-verify.js +143 -0
- package/dist/seal-frontier-verify.js.map +1 -0
- package/dist/seal-leaf.d.ts +58 -0
- package/dist/seal-leaf.d.ts.map +1 -0
- package/dist/seal-leaf.js +112 -0
- package/dist/seal-leaf.js.map +1 -0
- package/dist/seal-legibility-tbs.d.ts +25 -0
- package/dist/seal-legibility-tbs.d.ts.map +1 -0
- package/dist/seal-legibility-tbs.js +77 -0
- package/dist/seal-legibility-tbs.js.map +1 -0
- package/dist/seal-local-terminus.d.ts +41 -0
- package/dist/seal-local-terminus.d.ts.map +1 -0
- package/dist/seal-local-terminus.js +170 -0
- package/dist/seal-local-terminus.js.map +1 -0
- package/dist/seal-receipt-upgrade.d.ts +30 -0
- package/dist/seal-receipt-upgrade.d.ts.map +1 -0
- package/dist/seal-receipt-upgrade.js +49 -0
- package/dist/seal-receipt-upgrade.js.map +1 -0
- package/dist/seal-relay-silence.d.ts +51 -0
- package/dist/seal-relay-silence.d.ts.map +1 -0
- package/dist/seal-relay-silence.js +76 -0
- package/dist/seal-relay-silence.js.map +1 -0
- package/dist/seal-settle.d.ts +38 -0
- package/dist/seal-settle.d.ts.map +1 -0
- package/dist/seal-settle.js +33 -0
- package/dist/seal-settle.js.map +1 -0
- package/dist/seal-upgrade.d.ts +107 -0
- package/dist/seal-upgrade.d.ts.map +1 -0
- package/dist/seal-upgrade.js +200 -0
- package/dist/seal-upgrade.js.map +1 -0
- package/dist/sealed-conversation.d.ts +36 -0
- package/dist/sealed-conversation.d.ts.map +1 -0
- package/dist/sealed-conversation.js +171 -0
- package/dist/sealed-conversation.js.map +1 -0
- package/dist/sealed-leaf-set.d.ts +92 -0
- package/dist/sealed-leaf-set.d.ts.map +1 -0
- package/dist/sealed-leaf-set.js +122 -0
- package/dist/sealed-leaf-set.js.map +1 -0
- package/dist/send-claims.d.ts +56 -0
- package/dist/send-claims.d.ts.map +1 -0
- package/dist/send-claims.js +50 -0
- package/dist/send-claims.js.map +1 -0
- package/dist/session-assignment-parser.d.ts +104 -0
- package/dist/session-assignment-parser.d.ts.map +1 -0
- package/dist/session-assignment-parser.js +345 -0
- package/dist/session-assignment-parser.js.map +1 -0
- package/dist/session-category.d.ts +19 -0
- package/dist/session-category.d.ts.map +1 -0
- package/dist/session-category.js +14 -0
- package/dist/session-category.js.map +1 -0
- package/dist/session-ceremony.d.ts +297 -0
- package/dist/session-ceremony.d.ts.map +1 -0
- package/dist/session-ceremony.js +964 -0
- package/dist/session-ceremony.js.map +1 -0
- package/dist/session-closed.d.ts +79 -0
- package/dist/session-closed.d.ts.map +1 -0
- package/dist/session-closed.js +189 -0
- package/dist/session-closed.js.map +1 -0
- package/dist/session-connection-gater.d.ts +148 -0
- package/dist/session-connection-gater.d.ts.map +1 -0
- package/dist/session-connection-gater.js +332 -0
- package/dist/session-connection-gater.js.map +1 -0
- package/dist/session-content-context.d.ts +162 -0
- package/dist/session-content-context.d.ts.map +1 -0
- package/dist/session-content-context.js +2 -0
- package/dist/session-content-context.js.map +1 -0
- package/dist/session-content-handlers.d.ts +82 -0
- package/dist/session-content-handlers.d.ts.map +1 -0
- package/dist/session-content-handlers.js +1382 -0
- package/dist/session-content-handlers.js.map +1 -0
- package/dist/session-content-ingest.d.ts +206 -0
- package/dist/session-content-ingest.d.ts.map +1 -0
- package/dist/session-content-ingest.js +2167 -0
- package/dist/session-content-ingest.js.map +1 -0
- package/dist/session-content-send.d.ts +191 -0
- package/dist/session-content-send.d.ts.map +1 -0
- package/dist/session-content-send.js +1360 -0
- package/dist/session-content-send.js.map +1 -0
- package/dist/session-delivery-acks.d.ts +169 -0
- package/dist/session-delivery-acks.d.ts.map +1 -0
- package/dist/session-delivery-acks.js +569 -0
- package/dist/session-delivery-acks.js.map +1 -0
- package/dist/session-ephemerals.d.ts +279 -0
- package/dist/session-ephemerals.d.ts.map +1 -0
- package/dist/session-ephemerals.js +591 -0
- package/dist/session-ephemerals.js.map +1 -0
- package/dist/session-leaf-records.d.ts +159 -0
- package/dist/session-leaf-records.d.ts.map +1 -0
- package/dist/session-leaf-records.js +408 -0
- package/dist/session-leaf-records.js.map +1 -0
- package/dist/session-lifecycle.d.ts +303 -0
- package/dist/session-lifecycle.d.ts.map +1 -0
- package/dist/session-lifecycle.js +1679 -0
- package/dist/session-lifecycle.js.map +1 -0
- package/dist/session-liveness.d.ts +135 -0
- package/dist/session-liveness.d.ts.map +1 -0
- package/dist/session-liveness.js +347 -0
- package/dist/session-liveness.js.map +1 -0
- package/dist/session-name.d.ts +35 -0
- package/dist/session-name.d.ts.map +1 -0
- package/dist/session-name.js +60 -0
- package/dist/session-name.js.map +1 -0
- package/dist/session-node-factory.d.ts +18 -0
- package/dist/session-node-factory.d.ts.map +1 -0
- package/dist/session-node-factory.js +182 -0
- package/dist/session-node-factory.js.map +1 -0
- package/dist/session-node-manager.d.ts +877 -0
- package/dist/session-node-manager.d.ts.map +1 -0
- package/dist/session-node-manager.js +2998 -0
- package/dist/session-node-manager.js.map +1 -0
- package/dist/session-node-types.d.ts +1057 -0
- package/dist/session-node-types.d.ts.map +1 -0
- package/dist/session-node-types.js +657 -0
- package/dist/session-node-types.js.map +1 -0
- package/dist/session-notify.d.ts +46 -0
- package/dist/session-notify.d.ts.map +1 -0
- package/dist/session-notify.js +116 -0
- package/dist/session-notify.js.map +1 -0
- package/dist/session-own-chain-store.d.ts +65 -0
- package/dist/session-own-chain-store.d.ts.map +1 -0
- package/dist/session-own-chain-store.js +75 -0
- package/dist/session-own-chain-store.js.map +1 -0
- package/dist/session-queries.d.ts +476 -0
- package/dist/session-queries.d.ts.map +1 -0
- package/dist/session-queries.js +1007 -0
- package/dist/session-queries.js.map +1 -0
- package/dist/session-read-handlers.d.ts +87 -0
- package/dist/session-read-handlers.d.ts.map +1 -0
- package/dist/session-read-handlers.js +689 -0
- package/dist/session-read-handlers.js.map +1 -0
- package/dist/session-records.d.ts +341 -0
- package/dist/session-records.d.ts.map +1 -0
- package/dist/session-records.js +858 -0
- package/dist/session-records.js.map +1 -0
- package/dist/session-relay-client.d.ts +659 -0
- package/dist/session-relay-client.d.ts.map +1 -0
- package/dist/session-relay-client.js +2876 -0
- package/dist/session-relay-client.js.map +1 -0
- package/dist/session-relay.d.ts +397 -0
- package/dist/session-relay.d.ts.map +1 -0
- package/dist/session-relay.js +1636 -0
- package/dist/session-relay.js.map +1 -0
- package/dist/session-salt-agreement.d.ts +331 -0
- package/dist/session-salt-agreement.d.ts.map +1 -0
- package/dist/session-salt-agreement.js +472 -0
- package/dist/session-salt-agreement.js.map +1 -0
- package/dist/session-salts.d.ts +432 -0
- package/dist/session-salts.d.ts.map +1 -0
- package/dist/session-salts.js +1540 -0
- package/dist/session-salts.js.map +1 -0
- package/dist/session-schema.d.ts +30 -0
- package/dist/session-schema.d.ts.map +1 -0
- package/dist/session-schema.js +877 -0
- package/dist/session-schema.js.map +1 -0
- package/dist/session-seal-leaf-store.d.ts +70 -0
- package/dist/session-seal-leaf-store.d.ts.map +1 -0
- package/dist/session-seal-leaf-store.js +105 -0
- package/dist/session-seal-leaf-store.js.map +1 -0
- package/dist/session-seal.d.ts +334 -0
- package/dist/session-seal.d.ts.map +1 -0
- package/dist/session-seal.js +1017 -0
- package/dist/session-seal.js.map +1 -0
- package/dist/session-terminal-refusal.d.ts +65 -0
- package/dist/session-terminal-refusal.d.ts.map +1 -0
- package/dist/session-terminal-refusal.js +87 -0
- package/dist/session-terminal-refusal.js.map +1 -0
- package/dist/session-tree.d.ts +110 -0
- package/dist/session-tree.d.ts.map +1 -0
- package/dist/session-tree.js +144 -0
- package/dist/session-tree.js.map +1 -0
- package/dist/session-views.d.ts +47 -0
- package/dist/session-views.d.ts.map +1 -0
- package/dist/session-views.js +278 -0
- package/dist/session-views.js.map +1 -0
- package/dist/signal-handlers.d.ts +63 -0
- package/dist/signal-handlers.d.ts.map +1 -0
- package/dist/signal-handlers.js +980 -0
- package/dist/signal-handlers.js.map +1 -0
- package/dist/signal-requirement-policy.d.ts +51 -0
- package/dist/signal-requirement-policy.d.ts.map +1 -0
- package/dist/signal-requirement-policy.js +89 -0
- package/dist/signal-requirement-policy.js.map +1 -0
- package/dist/signal-revocability.d.ts +49 -0
- package/dist/signal-revocability.d.ts.map +1 -0
- package/dist/signal-revocability.js +93 -0
- package/dist/signal-revocability.js.map +1 -0
- package/dist/signal-submission.d.ts +181 -0
- package/dist/signal-submission.d.ts.map +1 -0
- package/dist/signal-submission.js +368 -0
- package/dist/signal-submission.js.map +1 -0
- package/dist/signaling-connect.d.ts +118 -0
- package/dist/signaling-connect.d.ts.map +1 -0
- package/dist/signaling-connect.js +538 -0
- package/dist/signaling-connect.js.map +1 -0
- package/dist/signaling-wiring.d.ts +105 -0
- package/dist/signaling-wiring.d.ts.map +1 -0
- package/dist/signaling-wiring.js +393 -0
- package/dist/signaling-wiring.js.map +1 -0
- package/dist/singleton-lock.d.ts +85 -0
- package/dist/singleton-lock.d.ts.map +1 -0
- package/dist/singleton-lock.js +219 -0
- package/dist/singleton-lock.js.map +1 -0
- package/dist/sqlcipher-db.d.ts +139 -0
- package/dist/sqlcipher-db.d.ts.map +1 -0
- package/dist/sqlcipher-db.js +357 -0
- package/dist/sqlcipher-db.js.map +1 -0
- package/dist/standing-receivers.d.ts +319 -0
- package/dist/standing-receivers.d.ts.map +1 -0
- package/dist/standing-receivers.js +1295 -0
- package/dist/standing-receivers.js.map +1 -0
- package/dist/start-agent.d.ts +64 -0
- package/dist/start-agent.d.ts.map +1 -0
- package/dist/start-agent.js +136 -0
- package/dist/start-agent.js.map +1 -0
- package/dist/status-handler.d.ts +54 -0
- package/dist/status-handler.d.ts.map +1 -0
- package/dist/status-handler.js +61 -0
- package/dist/status-handler.js.map +1 -0
- package/dist/submission-retry.d.ts +208 -0
- package/dist/submission-retry.d.ts.map +1 -0
- package/dist/submission-retry.js +506 -0
- package/dist/submission-retry.js.map +1 -0
- package/dist/telegram-bot-client.d.ts +34 -0
- package/dist/telegram-bot-client.d.ts.map +1 -0
- package/dist/telegram-bot-client.js +36 -0
- package/dist/telegram-bot-client.js.map +1 -0
- package/dist/telegram-doorbell.d.ts +38 -0
- package/dist/telegram-doorbell.d.ts.map +1 -0
- package/dist/telegram-doorbell.js +140 -0
- package/dist/telegram-doorbell.js.map +1 -0
- package/dist/test-handlers.d.ts +62 -0
- package/dist/test-handlers.d.ts.map +1 -0
- package/dist/test-handlers.js +240 -0
- package/dist/test-handlers.js.map +1 -0
- package/dist/testing.d.ts +10 -0
- package/dist/testing.d.ts.map +1 -0
- package/dist/testing.js +10 -0
- package/dist/testing.js.map +1 -0
- package/dist/transport-composition.d.ts +31 -0
- package/dist/transport-composition.d.ts.map +1 -0
- package/dist/transport-composition.js +55 -0
- package/dist/transport-composition.js.map +1 -0
- package/dist/transport-selector.d.ts +202 -0
- package/dist/transport-selector.d.ts.map +1 -0
- package/dist/transport-selector.js +196 -0
- package/dist/transport-selector.js.map +1 -0
- package/dist/trust-signal-pickup-listener.d.ts +43 -0
- package/dist/trust-signal-pickup-listener.d.ts.map +1 -0
- package/dist/trust-signal-pickup-listener.js +48 -0
- package/dist/trust-signal-pickup-listener.js.map +1 -0
- package/dist/trust-signal-store.d.ts +406 -0
- package/dist/trust-signal-store.d.ts.map +1 -0
- package/dist/trust-signal-store.js +939 -0
- package/dist/trust-signal-store.js.map +1 -0
- package/dist/trust-signal-sweep-tick.d.ts +60 -0
- package/dist/trust-signal-sweep-tick.d.ts.map +1 -0
- package/dist/trust-signal-sweep-tick.js +101 -0
- package/dist/trust-signal-sweep-tick.js.map +1 -0
- package/dist/trust-signal-sweep.d.ts +94 -0
- package/dist/trust-signal-sweep.d.ts.map +1 -0
- package/dist/trust-signal-sweep.js +147 -0
- package/dist/trust-signal-sweep.js.map +1 -0
- package/dist/type-registry.d.ts +42 -0
- package/dist/type-registry.d.ts.map +1 -0
- package/dist/type-registry.js +37 -0
- package/dist/type-registry.js.map +1 -0
- package/dist/types.d.ts +746 -0
- package/dist/types.d.ts.map +1 -0
- package/dist/types.js +20 -0
- package/dist/types.js.map +1 -0
- package/dist/unresolved-nodes-report.d.ts +14 -0
- package/dist/unresolved-nodes-report.d.ts.map +1 -0
- package/dist/unresolved-nodes-report.js +96 -0
- package/dist/unresolved-nodes-report.js.map +1 -0
- package/dist/vocabulary.d.ts +150 -0
- package/dist/vocabulary.d.ts.map +1 -0
- package/dist/vocabulary.js +386 -0
- package/dist/vocabulary.js.map +1 -0
- package/dist/who-label.d.ts +28 -0
- package/dist/who-label.d.ts.map +1 -0
- package/dist/who-label.js +31 -0
- package/dist/who-label.js.map +1 -0
- package/dist/who-resolver.d.ts +15 -0
- package/dist/who-resolver.d.ts.map +1 -0
- package/dist/who-resolver.js +47 -0
- package/dist/who-resolver.js.map +1 -0
- package/dist/wire-content-hash.d.ts +93 -0
- package/dist/wire-content-hash.d.ts.map +1 -0
- package/dist/wire-content-hash.js +116 -0
- package/dist/wire-content-hash.js.map +1 -0
- package/dist/withheld-content.d.ts +13 -0
- package/dist/withheld-content.d.ts.map +1 -0
- package/dist/withheld-content.js +46 -0
- package/dist/withheld-content.js.map +1 -0
- package/dist/witness-alerts.d.ts +40 -0
- package/dist/witness-alerts.d.ts.map +1 -0
- package/dist/witness-alerts.js +102 -0
- package/dist/witness-alerts.js.map +1 -0
- package/package.json +5 -5
|
@@ -0,0 +1,435 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* DOD-DOC-REJECT-1 — rejection and supersession (§3.2, §16.7-2).
|
|
3
|
+
*
|
|
4
|
+
* ── WHY SUPERSESSION, AND NOT "BOTH SIDES ROLL BACK" ──────────────────────────────────────────
|
|
5
|
+
*
|
|
6
|
+
* The naive protocol is: the receiver discards, the sender undoes locally, and both return to the
|
|
7
|
+
* pre-update state. It does not work, and the reason is a property of CRDTs rather than a bug.
|
|
8
|
+
*
|
|
9
|
+
* **Yjs undo adds INVERSES; it does not erase.** The rejected operations stay in the sender's
|
|
10
|
+
* document. So every later update the sender computes against the receiver's state vector
|
|
11
|
+
* re-transmits them, and the receiver — which refuses to hold them — can never integrate the
|
|
12
|
+
* legitimate work stacked causally on top, because Yjs will not apply operations whose
|
|
13
|
+
* predecessors are missing. A permanent causal gap, from a protocol that looked symmetric.
|
|
14
|
+
*
|
|
15
|
+
* The protocol that works (§3.2):
|
|
16
|
+
* 1. The receiver rejects with a REASON — a protocol message and its own `0x05` leaf, never a
|
|
17
|
+
* silent drop. The update goes to quarantine, held rather than discarded.
|
|
18
|
+
* 2. The sender rolls back locally, which emits inverses into its own log and leaves an
|
|
19
|
+
* auditable "wrote X, was rejected, undid X" trail.
|
|
20
|
+
* 3. The sender publishes a SUPERSEDING update against the receiver's state vector, which
|
|
21
|
+
* necessarily carries the rejected operations PLUS their inverses plus any new work.
|
|
22
|
+
* 4. The receiver validates the now-clean projected diff — the rejected content nets to zero —
|
|
23
|
+
* admits it, and clears the quarantine. Causality intact, both parties converge, and the
|
|
24
|
+
* rejected content survives only as inert tombstones.
|
|
25
|
+
*
|
|
26
|
+
* ── SCOPE ─────────────────────────────────────────────────────────────────────────────────────
|
|
27
|
+
*
|
|
28
|
+
* This proves the protocol against STORE-1's local envelope log. The CBOR wire encoding is
|
|
29
|
+
* DOD-DOC-ENVELOPE-1's job and the cross-daemon proof is DOD-DOC-E2E-REJECT-1's.
|
|
30
|
+
*/
|
|
31
|
+
import * as Y from "yjs";
|
|
32
|
+
import { buildDocumentRejectionTbs, documentRejectionHash, encodeDocumentRejection, DOCUMENT_REJECTION_VERSION, } from "@cello-protocol/protocol-types";
|
|
33
|
+
/**
|
|
34
|
+
* The document stalls on the THIRD rejected round: the original refusal, one superseding attempt,
|
|
35
|
+
* and no more (§16.7-2 "one retry, then freeze").
|
|
36
|
+
*
|
|
37
|
+
* Counted in rounds rather than retries because the previous spelling — a `REJECTION_RETRY_LIMIT`
|
|
38
|
+
* of 1 compared as `round > LIMIT + 1` — permitted two retries under a name that said one, which
|
|
39
|
+
* is the kind of thing the next edit gets wrong.
|
|
40
|
+
*
|
|
41
|
+
* Bounded at all because an unbounded retry loop between two daemons that disagree is not
|
|
42
|
+
* convergence, it is a hot loop neither operator can see. Stalling is the visible failure.
|
|
43
|
+
*/
|
|
44
|
+
export const MAX_REJECTED_ROUNDS = 3;
|
|
45
|
+
/**
|
|
46
|
+
* The placeholder `state_vector` a rejection row carries.
|
|
47
|
+
*
|
|
48
|
+
* ONE ZERO BYTE, not an empty array. See the call site for why: SQLCipher binds a zero-length blob
|
|
49
|
+
* as NULL and the column is NOT NULL, so an empty vector throws on the driver production uses and
|
|
50
|
+
* on no driver the tests use. The value is meaningless by design — a rejection has no state vector —
|
|
51
|
+
* and it is named rather than inlined so nobody "tidies" it back to `new Uint8Array(0)`.
|
|
52
|
+
*/
|
|
53
|
+
export const REJECTION_STATE_VECTOR = new Uint8Array([0]);
|
|
54
|
+
export class DocumentRejections {
|
|
55
|
+
#store;
|
|
56
|
+
#logger;
|
|
57
|
+
constructor(store, logger) {
|
|
58
|
+
this.#store = store;
|
|
59
|
+
this.#logger = logger;
|
|
60
|
+
}
|
|
61
|
+
/**
|
|
62
|
+
* Record a rejection: a `0x05` row referencing the rejected envelope, the quarantined bytes
|
|
63
|
+
* held, and a policy record carrying the reason.
|
|
64
|
+
*
|
|
65
|
+
* The envelope log is append-only, so this is a NEW ROW — nothing is edited or removed.
|
|
66
|
+
*
|
|
67
|
+
* ── HOW A REFUSAL IS ACTUALLY REALIZED, AND WHY NOT THE WAY §9 SAYS ─────────────────────────
|
|
68
|
+
*
|
|
69
|
+
* §9 phrases effectiveness as a replay-time set property: "an update leaf is effective iff no
|
|
70
|
+
* rejection leaf references it". Implemented literally that is unsound, and it was measured
|
|
71
|
+
* rather than argued. Sender publishes a base, then a refused update, then rolls back and
|
|
72
|
+
* supersedes. Replaying the log while SKIPPING the refused leaf gives:
|
|
73
|
+
*
|
|
74
|
+
* text "agreed base. " pendingStructs PRESENT pendingDs PRESENT
|
|
75
|
+
*
|
|
76
|
+
* The supersession is causally stacked on the refused operations — the rollback is a DELETION of
|
|
77
|
+
* those structs and the new work is positioned after them — so dropping them leaves everything
|
|
78
|
+
* later permanently pending. The document reads as complete and is silently missing the
|
|
79
|
+
* legitimate work. §16.7-5 already retired §9's "document-log order" phrasing; this retires its
|
|
80
|
+
* effectiveness phrasing on the same grounds.
|
|
81
|
+
*
|
|
82
|
+
* What is sound: the receiver NEVER WRITES the refused payload to its log. There is nothing to
|
|
83
|
+
* subtract at replay because it was never added, and the peer's supersession — computed against
|
|
84
|
+
* the RECEIVER's state vector per §3.2 step 3 — is self-contained. Measured on the same fixture:
|
|
85
|
+
*
|
|
86
|
+
* text "agreed base. clean text. " pendingStructs null pendingDs null converged true
|
|
87
|
+
*
|
|
88
|
+
* The refused bytes do travel again inside that supersession, carrying their own inverses, which
|
|
89
|
+
* is precisely "inverses, not erasure" (§3.2) — the content nets to zero and survives only as
|
|
90
|
+
* tombstones. The bytes we refused live in `document_quarantine`, and the chain bridges across
|
|
91
|
+
* the refused envelope so the peer's next link still resolves (see `verifyChainLinkage`).
|
|
92
|
+
*/
|
|
93
|
+
async reject(agentId, documentId, input) {
|
|
94
|
+
// THE SIGNED PREIMAGE (DOD-DOC-REJECT-2). Until it existed, this method took a `signature` from
|
|
95
|
+
// its caller with nothing defining what that signature was OVER — so it could only ever be
|
|
96
|
+
// filled dishonestly, which is what writing the composition-root signer proved. The rejection
|
|
97
|
+
// is now built, signed, and its LEAF HASH derived from the same preimage: the leaf commits to
|
|
98
|
+
// exactly the bytes whose signature was verified.
|
|
99
|
+
// DUPLICATE DETECTION MOVED UP FRONT. It used to fall out of the leaf hash colliding, because
|
|
100
|
+
// that hash was sha256(envelope + reason + nonce) and a caller reusing the nonce produced the
|
|
101
|
+
// same row. The real preimage binds the ROUND and the TIMESTAMP, so two rejections of the same
|
|
102
|
+
// envelope for the same reason now hash differently and would each advance the round — driving
|
|
103
|
+
// a document to `stalled` on retries that never happened. The check has to be on what makes a
|
|
104
|
+
// rejection the SAME rejection: this envelope, refused for this reason, by us.
|
|
105
|
+
const already = this.#store
|
|
106
|
+
.listQuarantined(agentId, documentId)
|
|
107
|
+
.find((q) => q.rejectedEnvelopeHash === input.rejectedEnvelopeHash && q.reason === input.reason);
|
|
108
|
+
if (already) {
|
|
109
|
+
this.#logger.warn("document.rejection.duplicate", {
|
|
110
|
+
documentId,
|
|
111
|
+
rejectedEnvelopeHash: input.rejectedEnvelopeHash,
|
|
112
|
+
reason: input.reason,
|
|
113
|
+
});
|
|
114
|
+
return {
|
|
115
|
+
stalled: this.#isStalled(agentId, documentId),
|
|
116
|
+
round: this.#round(agentId, documentId),
|
|
117
|
+
};
|
|
118
|
+
}
|
|
119
|
+
const round = this.#round(agentId, documentId) + 1;
|
|
120
|
+
const envelope = {
|
|
121
|
+
type: "document_rejection",
|
|
122
|
+
rejection_version: DOCUMENT_REJECTION_VERSION,
|
|
123
|
+
document_id: documentId,
|
|
124
|
+
rejected_envelope_hash: input.rejectedEnvelopeHash,
|
|
125
|
+
rejecting_agent_id: agentId,
|
|
126
|
+
reason: input.reason,
|
|
127
|
+
...(input.detail === undefined ? {} : { detail: input.detail }),
|
|
128
|
+
round,
|
|
129
|
+
rejected_at_ms: input.nowMs,
|
|
130
|
+
signature: new Uint8Array(0),
|
|
131
|
+
};
|
|
132
|
+
envelope.signature = await input.sign(buildDocumentRejectionTbs(envelope));
|
|
133
|
+
// CHAIN IT. Writing `docPrevHash: null` made every rejection a second GENESIS row for this
|
|
134
|
+
// agent, so two rejections forked the chain — and the retry protocol guarantees at least two
|
|
135
|
+
// before a stall. `verifyChainLinkage` then refuses, and since `rebuildSnapshot` is how a
|
|
136
|
+
// document survives a restart, the document rebuilt until the next daemon start and was
|
|
137
|
+
// permanently unopenable after it. Measured. A rejection is this agent's own authored act, so
|
|
138
|
+
// it belongs in this agent's own chain.
|
|
139
|
+
const rejectionEnvelopeHash = documentRejectionHash(envelope);
|
|
140
|
+
const appended = this.#store.appendEnvelope(agentId, {
|
|
141
|
+
envelopeHash: rejectionEnvelopeHash,
|
|
142
|
+
documentId,
|
|
143
|
+
senderAgentId: agentId, // WE authored the rejection, whoever authored the update
|
|
144
|
+
docPrevHash: this.#store.lastEnvelopeHashBySender(agentId, documentId, agentId),
|
|
145
|
+
governanceParents: [],
|
|
146
|
+
signature: envelope.signature,
|
|
147
|
+
// A ONE-BYTE PLACEHOLDER, and it has to be — an empty blob here THREW on the real driver.
|
|
148
|
+
//
|
|
149
|
+
// A rejection asserts nothing about document state, so the honest value is empty, and that is
|
|
150
|
+
// what this was. `node:sqlite` (every unit test) binds a zero-length blob as an empty blob;
|
|
151
|
+
// `@signalapp/sqlcipher` (production) binds it as NULL, which violates
|
|
152
|
+
// `state_vector BLOB NOT NULL` and throws INSIDE this method — before the quarantine is
|
|
153
|
+
// written, before the refusal is signed, before the peer is answered.
|
|
154
|
+
//
|
|
155
|
+
// The cost of that was the whole stall path: the receiver held nothing from the sender, so
|
|
156
|
+
// `knownEnvelopeHashesBySender` returned an empty set and every later envelope was refused
|
|
157
|
+
// `document_chain_broken` forever. One gate refusal permanently broke the document. Four
|
|
158
|
+
// fixes reasoned about the chain-bridging logic, which was correct throughout; the row simply
|
|
159
|
+
// never existed. Pinned by `document-rejection-sqlcipher.test.ts`, which runs on the real
|
|
160
|
+
// driver precisely because a `node:sqlite` test cannot see this by construction.
|
|
161
|
+
//
|
|
162
|
+
// NOT relaxed to a nullable column, which would be the truer schema: SQLCipher is SQLite
|
|
163
|
+
// 3.50.4 and SQLite has never supported dropping NOT NULL in place, so it means a full table
|
|
164
|
+
// rebuild against operators' live document logs — a heavier risk than a documented byte.
|
|
165
|
+
stateVector: REJECTION_STATE_VECTOR,
|
|
166
|
+
payload: null, // an audit record carries no content
|
|
167
|
+
kind: "rejection",
|
|
168
|
+
referencesEnvelopeHash: input.rejectedEnvelopeHash,
|
|
169
|
+
createdAtMs: input.nowMs,
|
|
170
|
+
});
|
|
171
|
+
if (!appended) {
|
|
172
|
+
// The store tells callers whether a row was written precisely so this is not inferred. A
|
|
173
|
+
// duplicate must not advance the retry round, or a document reaches `stalled` with fewer
|
|
174
|
+
// rejection leaves than rounds and an auditor replaying the log cannot see why.
|
|
175
|
+
this.#logger.warn("document.rejection.duplicate", {
|
|
176
|
+
documentId,
|
|
177
|
+
rejectedEnvelopeHash: input.rejectedEnvelopeHash,
|
|
178
|
+
reason: input.reason,
|
|
179
|
+
});
|
|
180
|
+
return { stalled: this.#isStalled(agentId, documentId), round: this.#round(agentId, documentId) };
|
|
181
|
+
}
|
|
182
|
+
// PERSISTED, not remembered. The 0x05 leaf references these bytes; holding them in a Map
|
|
183
|
+
// meant the reference outlived the thing it referenced across a restart.
|
|
184
|
+
const held = this.#store.holdQuarantined(agentId, {
|
|
185
|
+
documentId,
|
|
186
|
+
rejectionEnvelopeHash,
|
|
187
|
+
rejectedEnvelopeHash: input.rejectedEnvelopeHash,
|
|
188
|
+
// The refused envelope's own author and chain link, so `verifyChainLinkage` can bridge it —
|
|
189
|
+
// the peer chains its supersession onto an envelope our log deliberately never holds.
|
|
190
|
+
rejectedSenderAgentId: input.senderAgentId,
|
|
191
|
+
rejectedDocPrevHash: input.rejectedDocPrevHash,
|
|
192
|
+
// COPY: the caller's buffer may be a pooled network read, and a 0x05 leaf must reference
|
|
193
|
+
// the bytes that were actually refused.
|
|
194
|
+
payload: new Uint8Array(input.quarantined),
|
|
195
|
+
reason: input.reason,
|
|
196
|
+
detail: input.detail,
|
|
197
|
+
// The gate produces these deliberately; dropping them leaves an operator unable to see
|
|
198
|
+
// WHICH rule refused or WHAT number was exceeded.
|
|
199
|
+
rule: input.rule,
|
|
200
|
+
limitName: input.limit?.name,
|
|
201
|
+
limitValue: input.limit?.limit,
|
|
202
|
+
limitActual: input.limit?.actual,
|
|
203
|
+
// SYNC-R35: the EXACT signed frame, kept so the refusal travels by the ordinary exchange —
|
|
204
|
+
// a third holder wedged behind this hole can only learn its name and reason from us.
|
|
205
|
+
rejectionWire: new Uint8Array(encodeDocumentRejection(envelope)),
|
|
206
|
+
createdAtMs: input.nowMs,
|
|
207
|
+
});
|
|
208
|
+
if (!held) {
|
|
209
|
+
// Cannot happen while the leaf hash is unique per rejection, which the append above already
|
|
210
|
+
// established. Logged rather than assumed: the previous key silently dropped every round
|
|
211
|
+
// after the first, and the way that stayed invisible was precisely that nothing said so.
|
|
212
|
+
this.#logger.error("document.rejection.quarantine_not_written", {
|
|
213
|
+
documentId,
|
|
214
|
+
rejectionEnvelopeHash,
|
|
215
|
+
rejectedEnvelopeHash: input.rejectedEnvelopeHash,
|
|
216
|
+
});
|
|
217
|
+
}
|
|
218
|
+
// The policy record — on BOTH sides, per §3.2. This is the sending half; the receiving half
|
|
219
|
+
// is written when a rejection arrives.
|
|
220
|
+
this.#logger.warn("document.rejection.sent", {
|
|
221
|
+
documentId,
|
|
222
|
+
senderAgentId: input.senderAgentId,
|
|
223
|
+
reason: input.reason,
|
|
224
|
+
detail: input.detail,
|
|
225
|
+
// Carried, not merely stored: an operator asking "why was this refused" needs the rule and
|
|
226
|
+
// the number, and a column no surface reads is a column that is not there.
|
|
227
|
+
rule: input.rule,
|
|
228
|
+
limitName: input.limit?.name,
|
|
229
|
+
limitValue: input.limit?.limit,
|
|
230
|
+
limitActual: input.limit?.actual,
|
|
231
|
+
round,
|
|
232
|
+
});
|
|
233
|
+
const stalled = round >= MAX_REJECTED_ROUNDS;
|
|
234
|
+
const alreadyStalled = this.#store.getDocument(agentId, documentId)?.status === "stalled";
|
|
235
|
+
if (stalled && !alreadyStalled) {
|
|
236
|
+
this.#store.setDocumentStatus(agentId, documentId, "stalled");
|
|
237
|
+
// Once, not on every subsequent refusal — a stalled document that keeps shouting is noise
|
|
238
|
+
// an operator learns to filter.
|
|
239
|
+
this.#logger.error("document.stalled", {
|
|
240
|
+
documentId,
|
|
241
|
+
reason: input.reason,
|
|
242
|
+
detail: input.detail,
|
|
243
|
+
rounds: round,
|
|
244
|
+
});
|
|
245
|
+
}
|
|
246
|
+
// The bytes go back to the caller so the peer can actually be told. See `RejectionOutcome.wire`.
|
|
247
|
+
return { stalled, round, wire: encodeDocumentRejection(envelope) };
|
|
248
|
+
}
|
|
249
|
+
/**
|
|
250
|
+
* Record a rejection ARRIVING from the peer — the receiving half of §3.2's "both sides".
|
|
251
|
+
*
|
|
252
|
+
* ── THE ROUTING DECISION (the DoD requires it resolved in-unit) ─────────────────────────────
|
|
253
|
+
*
|
|
254
|
+
* A document rejection is written **daemon-side**, into this document's own log and quarantine,
|
|
255
|
+
* NOT through the gateway record store's `source` discriminator.
|
|
256
|
+
*
|
|
257
|
+
* The gateway's record store exists for SCREENING verdicts, and most V1 rejection reasons are
|
|
258
|
+
* not screening at all — `append_only`, the receiver-local limits, malformed updates, unresolved
|
|
259
|
+
* dependencies. Routing every document rejection through a screening store would file structural
|
|
260
|
+
* protocol events as policy verdicts, and it would couple this unit to a schema owned by a
|
|
261
|
+
* component that is not involved. DOD-DOC-SCREEN-1 is parked, so that coupling would also have
|
|
262
|
+
* to be built speculatively and unwound if screening lands differently.
|
|
263
|
+
*
|
|
264
|
+
* When SCREEN-1 does land, a rejection whose reason came from the screening rule can ADDITIONALLY
|
|
265
|
+
* write a gateway record — the discriminator exists for exactly that, and adding it later costs
|
|
266
|
+
* nothing, whereas removing a premature coupling costs a migration.
|
|
267
|
+
*/
|
|
268
|
+
recordIncomingRejection(agentId, documentId, input) {
|
|
269
|
+
// DURABLE, not a log line. Everything the PUBLISHING operator needs depends on this surviving
|
|
270
|
+
// a restart: why their work was refused, and how many rounds remain before the document
|
|
271
|
+
// stalls. It also has to exist for the retry bound to bind at all — the round was counted from
|
|
272
|
+
// rejections this agent AUTHORED, which on a pure publisher is zero forever, so the loop the
|
|
273
|
+
// limit exists to stop was the one side that had no limit.
|
|
274
|
+
const written = this.#store.recordRejectionReceived(agentId, {
|
|
275
|
+
documentId,
|
|
276
|
+
rejectionEnvelopeHash: input.rejectionEnvelopeHash,
|
|
277
|
+
rejectedEnvelopeHash: input.rejectedEnvelopeHash,
|
|
278
|
+
fromAgentId: input.fromAgentId,
|
|
279
|
+
reason: input.reason,
|
|
280
|
+
detail: input.detail,
|
|
281
|
+
createdAtMs: Date.now(),
|
|
282
|
+
});
|
|
283
|
+
const round = this.#store.countRejectionsReceived(agentId, documentId);
|
|
284
|
+
if (!written) {
|
|
285
|
+
this.#logger.warn("document.rejection.received_duplicate", {
|
|
286
|
+
documentId,
|
|
287
|
+
rejectionEnvelopeHash: input.rejectionEnvelopeHash,
|
|
288
|
+
round,
|
|
289
|
+
});
|
|
290
|
+
return { stalled: this.#isStalled(agentId, documentId), round };
|
|
291
|
+
}
|
|
292
|
+
this.#logger.warn("document.rejection.received", {
|
|
293
|
+
documentId,
|
|
294
|
+
fromAgentId: input.fromAgentId,
|
|
295
|
+
rejectedEnvelopeHash: input.rejectedEnvelopeHash,
|
|
296
|
+
reason: input.reason,
|
|
297
|
+
detail: input.detail,
|
|
298
|
+
round,
|
|
299
|
+
});
|
|
300
|
+
// The publisher stops superseding on the same threshold the receiver stops accepting on. Two
|
|
301
|
+
// sides of one bound: without this, the receiver freezes and the sender keeps retrying into a
|
|
302
|
+
// document that will never take it.
|
|
303
|
+
const stalled = round >= MAX_REJECTED_ROUNDS;
|
|
304
|
+
if (stalled && !this.#isStalled(agentId, documentId)) {
|
|
305
|
+
this.#store.setDocumentStatus(agentId, documentId, "stalled");
|
|
306
|
+
this.#logger.error("document.stalled", {
|
|
307
|
+
documentId,
|
|
308
|
+
reason: input.reason,
|
|
309
|
+
detail: input.detail,
|
|
310
|
+
rounds: round,
|
|
311
|
+
side: "publisher",
|
|
312
|
+
});
|
|
313
|
+
}
|
|
314
|
+
return { stalled, round };
|
|
315
|
+
}
|
|
316
|
+
/** Entries held for this document — never admitted, never discarded (§3.2). From the store. */
|
|
317
|
+
quarantined(agentId, documentId) {
|
|
318
|
+
return this.#store.listQuarantined(agentId, documentId).map((r) => ({
|
|
319
|
+
rejectedEnvelopeHash: r.rejectedEnvelopeHash,
|
|
320
|
+
quarantined: r.payload,
|
|
321
|
+
reason: r.reason,
|
|
322
|
+
detail: r.detail,
|
|
323
|
+
rule: r.rule,
|
|
324
|
+
limitName: r.limitName,
|
|
325
|
+
limitValue: r.limitValue,
|
|
326
|
+
limitActual: r.limitActual,
|
|
327
|
+
rejectionWire: r.rejectionWire,
|
|
328
|
+
}));
|
|
329
|
+
}
|
|
330
|
+
/** Clear one entry once its superseding update has been admitted (§3.2 step 4). */
|
|
331
|
+
clearQuarantine(agentId, documentId, rejectedEnvelopeHash) {
|
|
332
|
+
// Only announce an admission that actually happened — an event that fires on a no-op is a
|
|
333
|
+
// signal on the wrong case.
|
|
334
|
+
if (this.#store.releaseQuarantined(agentId, documentId, rejectedEnvelopeHash)) {
|
|
335
|
+
this.#logger.info("document.supersession.admitted", { documentId, rejectedEnvelopeHash });
|
|
336
|
+
}
|
|
337
|
+
}
|
|
338
|
+
/**
|
|
339
|
+
* Whether this document still accepts updates.
|
|
340
|
+
*
|
|
341
|
+
* A stalled document REFUSES, naming the reason it stalled — both operators need to see why,
|
|
342
|
+
* because a document that silently stops converging is the failure this exists to prevent.
|
|
343
|
+
*/
|
|
344
|
+
acceptsUpdates(agentId, documentId) {
|
|
345
|
+
// Read the STORE, not memory. The status was persisted while the flag that gated this check
|
|
346
|
+
// was not, so after a restart the document row said `stalled` while the daemon happily
|
|
347
|
+
// accepted updates on it — the system reporting two contradictory states at once.
|
|
348
|
+
if (this.#isStalled(agentId, documentId)) {
|
|
349
|
+
const held = this.#store.listQuarantined(agentId, documentId);
|
|
350
|
+
const last = held[held.length - 1];
|
|
351
|
+
return {
|
|
352
|
+
ok: false,
|
|
353
|
+
reason: "document_stalled",
|
|
354
|
+
detail: `this document stopped accepting updates after ` +
|
|
355
|
+
`${this.#round(agentId, documentId)} rejected rounds` +
|
|
356
|
+
(last ? `; the most recent reason was ${last.reason}` : ""),
|
|
357
|
+
};
|
|
358
|
+
}
|
|
359
|
+
return { ok: true };
|
|
360
|
+
}
|
|
361
|
+
/**
|
|
362
|
+
* Start tracking local edits so a rejection can be rolled back.
|
|
363
|
+
*
|
|
364
|
+
* Yjs's own UndoManager, deliberately: rolling back by hand would mean computing inverses, and
|
|
365
|
+
* the inverse of a CRDT operation is not something to hand-roll — the whole reason supersession
|
|
366
|
+
* works is that Yjs's undo produces operations that compose correctly with everything stacked
|
|
367
|
+
* on top of them.
|
|
368
|
+
*/
|
|
369
|
+
trackLocalEdits(doc) {
|
|
370
|
+
// The two roots this codebase's write path projects from, taken through their TYPED getters.
|
|
371
|
+
//
|
|
372
|
+
// Not the `doc.share` placeholders: `doc.get(name)` hands back the untyped AbstractType, and
|
|
373
|
+
// the typed getter later instantiates a DIFFERENT object — so the UndoManager would watch a
|
|
374
|
+
// root nobody edits and `undo()` would silently do nothing. Caught by the out-of-order guard
|
|
375
|
+
// below, which is the guard earning its keep on its first outing.
|
|
376
|
+
//
|
|
377
|
+
// Instantiating these two as Text and Map is not the guessed-type hazard GATE-1 measured:
|
|
378
|
+
// the write path DEFINES them as Text and Map. A document that puts content under any other
|
|
379
|
+
// root is not tracked here, and that is a real gap — recorded rather than papered over,
|
|
380
|
+
// because it belongs with whichever unit lets a document declare its own roots.
|
|
381
|
+
const undoManager = new Y.UndoManager([doc.getText("content"), doc.getMap("data")], {
|
|
382
|
+
captureTimeout: 0,
|
|
383
|
+
});
|
|
384
|
+
return {
|
|
385
|
+
doc,
|
|
386
|
+
undoManager,
|
|
387
|
+
depthAtTracking: undoManager.undoStack.length,
|
|
388
|
+
dispose: () => undoManager.destroy(),
|
|
389
|
+
};
|
|
390
|
+
}
|
|
391
|
+
/**
|
|
392
|
+
* Roll back the last tracked edit, as INVERSES.
|
|
393
|
+
*
|
|
394
|
+
* The sender's history grows rather than shrinking. That is not a limitation to work around: it
|
|
395
|
+
* is what leaves an auditable "wrote X, was rejected, undid X" trail, and what lets the
|
|
396
|
+
* superseding update carry the rejected operations plus their inverses so causality survives.
|
|
397
|
+
*
|
|
398
|
+
* **PRECONDITION: roll back before making further local edits.** Yjs's UndoManager undoes the
|
|
399
|
+
* most recent stack item, and it cannot undo one out of order — so a sender that keeps editing
|
|
400
|
+
* after a rejection arrives and then rolls back would undo the WRONG transaction. §3.2's
|
|
401
|
+
* ordering is steps 2 then 3 for exactly this reason: roll back, THEN do new work, THEN
|
|
402
|
+
* publish the supersession that carries all three. A caller that needs to interleave has a
|
|
403
|
+
* genuine design question, not a call-order detail, and it belongs in the unit that wires
|
|
404
|
+
* publish to the receive path.
|
|
405
|
+
*/
|
|
406
|
+
rollback(tracked) {
|
|
407
|
+
// REFUSE rather than undo the wrong thing. Measured, the unguarded version had three failure
|
|
408
|
+
// modes that all reported success: nothing tracked (silent no-op), an untracked root (silent
|
|
409
|
+
// no-op), and — the damaging one — a sender that kept editing after the rejection arrived,
|
|
410
|
+
// where undo removed the agent's LEGITIMATE later work and KEPT the refused content. The
|
|
411
|
+
// supersession then re-ships the refused bytes, is rejected again, and the document stalls
|
|
412
|
+
// with a reason pointing at the peer while the operator's writing is gone.
|
|
413
|
+
const depth = tracked.undoManager.undoStack.length;
|
|
414
|
+
if (depth !== tracked.depthAtTracking + 1) {
|
|
415
|
+
throw new Error(`document_rollback_out_of_order: ${depth - tracked.depthAtTracking} local edit(s) are ` +
|
|
416
|
+
`stacked since tracking began, and Yjs can only undo the most recent — rolling back now ` +
|
|
417
|
+
`would discard the wrong work. Roll back before making further local edits (§3.2 step 2).`);
|
|
418
|
+
}
|
|
419
|
+
if (tracked.undoManager.undo() === null) {
|
|
420
|
+
throw new Error("document_rollback_nothing_tracked: no tracked edit to roll back — the rejected update " +
|
|
421
|
+
"was not produced through this tracker");
|
|
422
|
+
}
|
|
423
|
+
}
|
|
424
|
+
/** Derived from the log, not remembered — so it survives a restart. */
|
|
425
|
+
#round(agentId, documentId) {
|
|
426
|
+
// Scoped to the rejections THIS agent authored. A mutual exchange puts both directions' 0x05
|
|
427
|
+
// leaves in one document log, so an unscoped count conflated them and a document stalled at
|
|
428
|
+
// half the intended rounds the moment the peer also rejected something.
|
|
429
|
+
return this.#store.countRejections(agentId, documentId, agentId);
|
|
430
|
+
}
|
|
431
|
+
#isStalled(agentId, documentId) {
|
|
432
|
+
return this.#store.getDocument(agentId, documentId)?.status === "stalled";
|
|
433
|
+
}
|
|
434
|
+
}
|
|
435
|
+
//# sourceMappingURL=document-rejection.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"document-rejection.js","sourceRoot":"","sources":["../src/document-rejection.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,114 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* DOD-DOC-SCREEN-1 — the document content gate: REFUSE, never mutate.
|
|
3
|
+
*
|
|
4
|
+
* ── WHY A DOCUMENT DOES NOT GET THE MESSAGE SANITIZER ─────────────────────────────────────────
|
|
5
|
+
*
|
|
6
|
+
* The inbound message path may REWRITE content on a `redact` verdict: the operator sees a sanitized
|
|
7
|
+
* form while the leaf still binds the original. That is right for conversation and catastrophic for
|
|
8
|
+
* a document. Measured on 2026-08-05 against eighteen realistic samples, six were silently altered:
|
|
9
|
+
*
|
|
10
|
+
* कर्म → कर्म a different Hindi word; the ZWJ is orthography in Devanagari
|
|
11
|
+
* 👨👩👧 → 👨👩👧 one family emoji becomes three separate people
|
|
12
|
+
* Hello → Hello full-width is how CJK users type
|
|
13
|
+
* file is ½ → file is 1⁄2 ligatures and fractions normalised away
|
|
14
|
+
* <|im_start|> → ␠ a document ABOUT prompt formats loses its subject
|
|
15
|
+
*
|
|
16
|
+
* For a CRDT replica that is not a false positive. It is permanent divergence: the receiver applies
|
|
17
|
+
* different bytes than the sender signed, both sides believe they converged, and nothing reports
|
|
18
|
+
* it. And screening the PROJECTION instead does not help — documents are read-WRITE, so the next
|
|
19
|
+
* write-back diffs the operator's screened file against their replica and publishes the redaction
|
|
20
|
+
* as a real, signed edit that deletes the peer's content.
|
|
21
|
+
*
|
|
22
|
+
* So this rule has exactly two outcomes: carry the text exactly, or refuse the envelope. There is
|
|
23
|
+
* no third return value, and that is deliberate — a rule that COULD return replacement text would
|
|
24
|
+
* eventually be used to.
|
|
25
|
+
*
|
|
26
|
+
* ── WHAT IT REFUSES, AND WHY THAT LIST IS SHORT ───────────────────────────────────────────────
|
|
27
|
+
*
|
|
28
|
+
* Only characters whose presence changes what the text MEANS to a reader or a model, independent of
|
|
29
|
+
* language:
|
|
30
|
+
*
|
|
31
|
+
* - BIDI overrides and isolates, which make what an operator reads differ from what the document
|
|
32
|
+
* says. In a shared document that is a signature on content the signer did not see.
|
|
33
|
+
* - Chat-template control markers, which are not content in any document — they are an attempt to
|
|
34
|
+
* address the reader's model rather than the reader.
|
|
35
|
+
*
|
|
36
|
+
* NOT on the list: zero-width joiners, full-width forms, ligatures, typographic punctuation,
|
|
37
|
+
* combining marks. Every one of those is legitimate text in some language, and refusing them would
|
|
38
|
+
* make CELLO unusable for the operators most likely to need it. Zero-width SPACE is refused —
|
|
39
|
+
* it joins nothing, and its only use in a document is to hide a boundary.
|
|
40
|
+
*
|
|
41
|
+
* This is the denylist half. `DOD-DOC-PROFILE-1` adds the allowlist: a codepoint set agreed at the
|
|
42
|
+
* handshake and bound into `document_id`, which is a stronger instrument because it is decided at
|
|
43
|
+
* consent rather than argued at the boundary. This rule stays underneath it — a profile a peer
|
|
44
|
+
* never agreed to cannot be used to smuggle a BIDI override.
|
|
45
|
+
*/
|
|
46
|
+
import type { GateRule } from "./document-gate.js";
|
|
47
|
+
/** Named so a refusal can say which rule fired without the sender parsing prose (§16.7-6). */
|
|
48
|
+
export declare const SCREEN_RULE_ID = "document_content_screen";
|
|
49
|
+
/** Named separately so a refusal says WHICH screen refused — the gateway's, not this module's. */
|
|
50
|
+
export declare const SEMANTIC_RULE_ID = "document_content_semantic_screen";
|
|
51
|
+
/** Named separately so a refusal says whether the AGREED profile or the default floor refused. */
|
|
52
|
+
export declare const PROFILE_RULE_ID = "document_content_profile";
|
|
53
|
+
/**
|
|
54
|
+
* The one sentence every surface uses to say WHY, so the four call sites cannot describe the same
|
|
55
|
+
* rule differently. It names both halves: the earlier wording described only the invisible-character
|
|
56
|
+
* half, which reads as nonsense to an operator who was refused for `[INST]`.
|
|
57
|
+
*/
|
|
58
|
+
export declare const SCREEN_GUIDANCE: string;
|
|
59
|
+
/**
|
|
60
|
+
* Markers that address the READER'S MODEL rather than the reader.
|
|
61
|
+
*
|
|
62
|
+
* THE LIST IS THE MESSAGE PATH'S LIST. Two copies of a security literal drift, and this one had
|
|
63
|
+
* drifted: four markers where the sanitizer strips ten, and matched case-sensitively where the
|
|
64
|
+
* sanitizer is deliberately case-insensitive ("bypassable by shift-key" is its own wording). So
|
|
65
|
+
* `[SYSTEM]`, `<<SYS>>`, `[INST]`, `SYSTEM PROMPT:` and `<|IM_START|>` reached an operator's agent
|
|
66
|
+
* through a shared document while being stripped out of every message. The affordance prefix is the
|
|
67
|
+
* sharpest: the sanitizer strips it so relayed text cannot forge local provenance, and a document
|
|
68
|
+
* carried it verbatim.
|
|
69
|
+
*
|
|
70
|
+
* Same list, different remedy — the message path strips, a signed CRDT replica cannot be rewritten,
|
|
71
|
+
* so this path REFUSES. Refusing is honest: a document about prompt formats is told which literal
|
|
72
|
+
* to quote differently, where erasing would change its subject without saying so.
|
|
73
|
+
*
|
|
74
|
+
* NOT taken from the sanitizer, deliberately: its `### Instruction:` heading family and its `</s>`
|
|
75
|
+
* pattern are ordinary markdown and ordinary prose in a technical document. Refusing those would
|
|
76
|
+
* refuse legitimate writing, which is the false-positive class this whole rule exists to avoid.
|
|
77
|
+
*/
|
|
78
|
+
/**
|
|
79
|
+
* The prose-ambiguous members of the shared list, excluded HERE and only here.
|
|
80
|
+
*
|
|
81
|
+
* A message gets these STRIPPED, which costs a reader a few characters. A document gets a hard
|
|
82
|
+
* REFUSAL, and these three are ordinary English and ordinary markup:
|
|
83
|
+
* - `SYSTEM PROMPT:` — "Here is the system prompt: keep it short" is a sentence someone writes.
|
|
84
|
+
* - `<system>` / `</system>` — a tag in any XML or config document.
|
|
85
|
+
* Refusing them would refuse legitimate writing, which is the false-positive class this whole rule
|
|
86
|
+
* exists to avoid, and the same objection that kept `### Instruction:` and `</s>` off the list.
|
|
87
|
+
* Excluded by name rather than by omission so the choice is visible and testable.
|
|
88
|
+
*/
|
|
89
|
+
export declare const PROSE_AMBIGUOUS: readonly string[];
|
|
90
|
+
/**
|
|
91
|
+
* The rule. Null admits; anything else refuses.
|
|
92
|
+
*
|
|
93
|
+
* Offsets are in CODE POINTS, not UTF-16 units, because they exist for a human or an agent to find
|
|
94
|
+
* the character in their own editor — and an offset that lands mid-surrogate in a document with an
|
|
95
|
+
* emoji in it is worse than none.
|
|
96
|
+
*/
|
|
97
|
+
/**
|
|
98
|
+
* The denylist scan itself, over plain text — no gate, no diff, no context.
|
|
99
|
+
*
|
|
100
|
+
* Extracted so the AUTHORING check and the RECEIVING gate cannot drift. Two implementations of one
|
|
101
|
+
* rule is how a sender-side "advisory" ends up refusing things the receiver admits, or worse
|
|
102
|
+
* admitting things it refuses — and this milestone has now been bitten four times by a second copy
|
|
103
|
+
* of a rule that was supposed to match the first.
|
|
104
|
+
*
|
|
105
|
+
* Returns null when the text is clean; otherwise every distinct offender, a count, and CODE-POINT
|
|
106
|
+
* offsets (not UTF-16, which lands mid-surrogate in any document containing an emoji).
|
|
107
|
+
*/
|
|
108
|
+
export declare function screenText(text: string): {
|
|
109
|
+
codepoints: string[];
|
|
110
|
+
count: number;
|
|
111
|
+
offsets: number[];
|
|
112
|
+
} | null;
|
|
113
|
+
export declare const screeningRule: GateRule;
|
|
114
|
+
//# sourceMappingURL=document-screen.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"document-screen.d.ts","sourceRoot":"","sources":["../src/document-screen.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA4CG;AAGH,OAAO,KAAK,EAAE,QAAQ,EAA8B,MAAM,oBAAoB,CAAC;AAG/E,8FAA8F;AAC9F,eAAO,MAAM,cAAc,4BAA4B,CAAC;AAExD,kGAAkG;AAClG,eAAO,MAAM,gBAAgB,qCAAqC,CAAC;AAEnE,kGAAkG;AAClG,eAAO,MAAM,eAAe,6BAA6B,CAAC;AAE1D;;;;GAIG;AACH,eAAO,MAAM,eAAe,QAGD,CAAC;AAsB5B;;;;;;;;;;;;;;;;;;GAkBG;AACH;;;;;;;;;;GAUG;AACH,eAAO,MAAM,eAAe,EAAE,SAAS,MAAM,EAAgD,CAAC;AAgB9F;;;;;;GAMG;AACH;;;;;;;;;;GAUG;AACH,wBAAgB,UAAU,CAAC,IAAI,EAAE,MAAM,GAAG;IAAE,UAAU,EAAE,MAAM,EAAE,CAAC;IAAC,KAAK,EAAE,MAAM,CAAC;IAAC,OAAO,EAAE,MAAM,EAAE,CAAA;CAAE,GAAG,IAAI,CAyC1G;AAED,eAAO,MAAM,aAAa,EAAE,QAwC3B,CAAC"}
|