@cello-protocol/daemon 0.0.227 → 0.0.228
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 +429 -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,638 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* The two seal-initiation flows that cello_close_session dispatches into.
|
|
3
|
+
*
|
|
4
|
+
* handleSealInterruptedFlow — the counterparty is GONE. Exchange seal-interrupted leaves over the
|
|
5
|
+
* directory pass-through, then freeze the session at seal_interrupted_pending.
|
|
6
|
+
* handleActiveSealFlow — the counterparty is LIVE. Run the bilateral close.
|
|
7
|
+
*
|
|
8
|
+
* The daemon holds no FrostThresholdSigner and no directory FROST ceremony client, so it CANNOT
|
|
9
|
+
* produce a threshold signature by itself. That is the sovereign-node invariant, and it is why these
|
|
10
|
+
* functions only ever assemble and exchange leaves — the notarization happens at the directory.
|
|
11
|
+
*/
|
|
12
|
+
import { randomUUID } from "node:crypto";
|
|
13
|
+
import { buildSignedSealInterruptedLeaf, verifyCounterpartySealLeaf } from "./seal-leaf.js";
|
|
14
|
+
import { extractErrorMessage } from "./error-message.js";
|
|
15
|
+
/**
|
|
16
|
+
* The operator-visible text for a counterparty's seal-interrupted rejection.
|
|
17
|
+
*
|
|
18
|
+
* Extracted from the flow so it can be TESTED. AC2 is worded about the message the INITIATOR shows
|
|
19
|
+
* — "reports the ACTUAL mismatch … instead of directing the operator to ask the counterparty" — and
|
|
20
|
+
* that message was previously built inline inside `handleSealInterruptedFlow`, reachable only by
|
|
21
|
+
* standing up two daemons and driving a real seal exchange. So the clause the AC is actually about
|
|
22
|
+
* had no test at all (review). A pure function is the honest seam.
|
|
23
|
+
*/
|
|
24
|
+
export function renderSealRejection(reason, sessionId, frontier) {
|
|
25
|
+
// Gated on the REASON as well as the presence of numbers (review L3). Only a
|
|
26
|
+
// leaf_count_mismatch means what this narrative says; if any other reason ever arrives carrying a
|
|
27
|
+
// frontier, rendering it here would explain the wrong thing confidently.
|
|
28
|
+
if (frontier && reason === "leaf_count_mismatch") {
|
|
29
|
+
const { responder, initiator, diverging } = frontier;
|
|
30
|
+
return {
|
|
31
|
+
rejection_reason: reason,
|
|
32
|
+
your_leaf_count: initiator,
|
|
33
|
+
their_leaf_count: responder,
|
|
34
|
+
diverging_leaf_index: diverging,
|
|
35
|
+
guidance: `The two sides disagree on how many messages this session contains: you hold ${initiator}, ` +
|
|
36
|
+
`they hold ${responder}. They diverge at leaf ${diverging} — compare that message on both ` +
|
|
37
|
+
`transcripts with cello_transcript ${sessionId}. A leaf that only one side recorded cannot ` +
|
|
38
|
+
`be co-signed, so the session cannot seal until the records agree. If BOTH agents run on ` +
|
|
39
|
+
`this machine, read both sides here; there is no other end to check.`,
|
|
40
|
+
};
|
|
41
|
+
}
|
|
42
|
+
// M12-P14: the terminal-status refusals are the counterparty telling us the session is already
|
|
43
|
+
// FINISHED on its side. Verbatim relay is right for a condition we cannot interpret; these three
|
|
44
|
+
// we can, and the generic wording ("check the counterparty's daemon for that condition") sends an
|
|
45
|
+
// operator hunting a fault where there is none. A sealed session in particular is a SUCCESS —
|
|
46
|
+
// the receipt exists — and reporting it as a rejection to go investigate is actively wrong.
|
|
47
|
+
const terminal = {
|
|
48
|
+
session_abandoned: `The counterparty has already ABANDONED this session, so there is nothing left to co-sign — an abandon is terminal and yields no notarized receipt on either side. This is the state someone put it in deliberately (a force-close), not a fault to chase. Close it on this side too: cello_close_session ${sessionId} { force: true }. ` +
|
|
49
|
+
`One check before you do: this reason is chosen by the COUNTERPARTY and is not verified here, so a bug or a version skew on their side could send it for a session that actually sealed. If you have any independent reason to think it did seal — you saw a seal complete, or an earlier close reported session_already_sealed — do not force; run cello_sealed_receipt ${sessionId} first. Force is only safe when nothing was notarized.`,
|
|
50
|
+
session_already_sealed: `The counterparty REPORTS this session as already SEALED — it says a receipt exists on its side. That is its claim, relayed over the wire; this side has not seen or verified any such receipt, so do not repeat it to the operator as established fact. Try cello_sealed_receipt ${sessionId} rather than re-requesting a seal. ` +
|
|
51
|
+
`IF THAT RETURNS not_sealed_yet, stop and read this: the seal completion never reached this side, so no local certificate was ever written and none can be produced here. Both answers are true and they point at each other — closing again will just report session_already_sealed a second time. ` +
|
|
52
|
+
`Do NOT reach for cello_close_session { force: true } to escape the loop. Force PERMANENTLY forfeits this side's half, and the asymmetry is the whole point: a receipt you cannot yet verify is still recoverable, a forfeited one never is. Ask the counterparty for their sealed_root — this side holds none to compare against, which IS the divergence. Leave the session as it is and tell the operator the session id and the counterparty's pubkey: this is a known daemon defect (the seal completion is pushed with no pull twin), not an error they caused.`,
|
|
53
|
+
session_seal_already_pending: `The counterparty has already recorded its half of this seal and is waiting on ours, so a second request cannot be answered. Do not re-send it; check cello_sessions ${sessionId} for the seal's completion.`,
|
|
54
|
+
};
|
|
55
|
+
// Review MEDIUM-5: `reason` comes off the wire — the counterparty's rejection, relayed verbatim
|
|
56
|
+
// by the directory without validation. A plain object-literal lookup is prototype-reachable, so
|
|
57
|
+
// `reason: "toString"` passes an `!== undefined` guard and returns a FUNCTION as `guidance`,
|
|
58
|
+
// which serialises away and leaves the operator a rejection with no guidance at all. Own-property
|
|
59
|
+
// check: a hostile or merely buggy counterparty must not be able to choose that.
|
|
60
|
+
if (Object.hasOwn(terminal, reason)) {
|
|
61
|
+
return { rejection_reason: reason, guidance: terminal[reason] };
|
|
62
|
+
}
|
|
63
|
+
// Only a leaf_count_mismatch is EXPECTED to carry the numbers, so only there is their absence
|
|
64
|
+
// evidence of an older daemon. The responder rejects for five other reasons, and rendering those
|
|
65
|
+
// as a version problem asserts a cause the code never observed.
|
|
66
|
+
return {
|
|
67
|
+
rejection_reason: reason,
|
|
68
|
+
guidance: reason === "leaf_count_mismatch"
|
|
69
|
+
? `The counterparty rejected the seal-interrupted request because the two sides disagree on how many messages this session holds, but it did not report its own count — it is running an older daemon. Compare the two transcripts with cello_transcript ${sessionId}; a session strands when one side holds a leaf the other never recorded.`
|
|
70
|
+
: `The counterparty rejected the seal-interrupted request: ${reason}. That is its own reason, reported verbatim — nothing here diagnoses it further. Check the counterparty's daemon for that condition; cello_transcript ${sessionId} shows this side's record if you need it.`,
|
|
71
|
+
};
|
|
72
|
+
}
|
|
73
|
+
export function createSealFlows(deps) {
|
|
74
|
+
const { logger, sessionNodeManager, agents, getKeyProvider, signalingFor, sendOver, recordFrontierMismatch, clearFrontierMismatch } = deps;
|
|
75
|
+
const keyProviders = { get: getKeyProvider };
|
|
76
|
+
// Seal-interrupted bilateral INITIATOR flow.
|
|
77
|
+
//
|
|
78
|
+
// ⚠️ SCOPE — this flow does NOT complete a FROST-notarized seal, and must not pretend to.
|
|
79
|
+
//
|
|
80
|
+
// What it DOES: both parties produce and exchange real K_local Ed25519-signed SEAL-INTERRUPTED
|
|
81
|
+
// leaves over an agreed {leafCount, merkleRoot}; the initiator verifies the signature, the
|
|
82
|
+
// echoed nonce, and the cross-checks; the verified bilateral commitment is persisted; the
|
|
83
|
+
// session advances to the NON-TERMINAL 'seal_interrupted_pending' state.
|
|
84
|
+
//
|
|
85
|
+
// What it does NOT do: the FROST threshold notarization. The daemon holds no
|
|
86
|
+
// FrostThresholdSigner and no directory FROST ceremony client, so it CANNOT produce a threshold
|
|
87
|
+
// seal here. The session therefore STOPS at the persisted bilateral commitment rather than
|
|
88
|
+
// claim a completed seal. Wiring the real seal means injecting a SealManager adapter.
|
|
89
|
+
//
|
|
90
|
+
// Merkle-ROOT agreement is deliberately NOT compared at this layer, and the reason is still
|
|
91
|
+
// sound: under concurrent bidirectional traffic the two sides' local append orders — and
|
|
92
|
+
// therefore their roots — can legitimately diverge until the relay-assigned canonical sequence
|
|
93
|
+
// exists, so comparing roots here would reject honest sessions. leafCount agreement (each side
|
|
94
|
+
// against its own tree size, or message_count when no tree exists) is the bilateral check
|
|
95
|
+
// available at this layer.
|
|
96
|
+
//
|
|
97
|
+
// ⚠️ DOD-M15-CLAIM-COMMENTS-1 — WHAT THIS COMMENT USED TO IMPLY IS NOT TRUE. It ended "true root
|
|
98
|
+
// agreement belongs to the FROST seal against the directory-held tree", which reads as *someone
|
|
99
|
+
// else checks it*. NOBODY DOES. The directory's own SEAL-leaf handler defers the same check back
|
|
100
|
+
// to the client ("deferred to a follow-on story since clients perform this verification
|
|
101
|
+
// locally"), and the client check it names does not exist — so the certified root is never
|
|
102
|
+
// compared against either party's transcript, on any path except the unilateral one.
|
|
103
|
+
//
|
|
104
|
+
// Two comments deferring to each other is how the gap survived review: each half reads as a
|
|
105
|
+
// considered decision to check elsewhere, and there is no elsewhere.
|
|
106
|
+
//
|
|
107
|
+
// ⚠️ UPDATE — "until it lands" HAS LANDED, and leaving that clause would now under-claim a
|
|
108
|
+
// protection that exists. `DOD-M15-SEALWIRE-1` bullets 1 and 2 shipped: the bilateral certified
|
|
109
|
+
// root moved into the content-hash domain, and `verifyCertifiedRoot` rebuilds this
|
|
110
|
+
// side's OWN root from its carried leaves and compares it to the certificate, returning
|
|
111
|
+
// match / mismatch / cannot_judge rather than accepting on trust.
|
|
112
|
+
//
|
|
113
|
+
// A stale comment that under-claims is less dangerous than one that over-claims — nobody is
|
|
114
|
+
// left trusting a check that is not there — but it is not harmless: a reader takes it as a live
|
|
115
|
+
// gap and either re-implements the comparison or writes it up as outstanding. This milestone has
|
|
116
|
+
// a whole line (`DOD-M15-CLAIM-COMMENTS-1`) about comments whose claims stopped being true, and
|
|
117
|
+
// the comment that line produced is the one that went stale.
|
|
118
|
+
//
|
|
119
|
+
// What remains true HERE, at the seal-INTERRUPTED layer: root agreement is still deliberately
|
|
120
|
+
// not compared, for the reason given above — concurrent bidirectional traffic legitimately
|
|
121
|
+
// diverges the two local orders until the relay's canonical sequence exists, so comparing roots
|
|
122
|
+
// at this point would reject honest sessions. leafCount is still the bilateral check available
|
|
123
|
+
// at THIS layer. The root comparison lives where the certificate does, which is the right place
|
|
124
|
+
// for it and is no longer nowhere.
|
|
125
|
+
//
|
|
126
|
+
// Both sides bind over their OWN tree root + size (SI-001) whenever a non-empty tree exists —
|
|
127
|
+
// e.g. reloaded from session_tree_leaves after a restart. Only sessions with no persisted tree
|
|
128
|
+
// fall back to message_count plus the caller-supplied root.
|
|
129
|
+
// M7-SESSION-001 / DAEMON-004: shared bilateral ack-await machinery. The
|
|
130
|
+
// interrupted-seal flow AND the active-session seal flow both send a
|
|
131
|
+
// `seal_interrupted_request` and wait on the directory signaling stream for the
|
|
132
|
+
// counterparty's `seal_interrupted_ack` / `seal_interrupted_rejection` (or time
|
|
133
|
+
// out). Extracted so the two flows wait identically — the directory pass-through
|
|
134
|
+
// routing (directory-node.ts) is the only wired transport for this exchange.
|
|
135
|
+
const SEAL_INTERRUPTED_TIMEOUT_MS = 30_000;
|
|
136
|
+
function awaitSealAck(sessionId, mgr) {
|
|
137
|
+
return new Promise((resolve) => {
|
|
138
|
+
// CONN-001: await the ack on the OWNING agent's own stream (per-agent in prod, shared in test).
|
|
139
|
+
if (!mgr) {
|
|
140
|
+
resolve({ type: "timeout" });
|
|
141
|
+
return;
|
|
142
|
+
}
|
|
143
|
+
const timeoutHandle = setTimeout(() => {
|
|
144
|
+
unregister();
|
|
145
|
+
resolve({ type: "timeout" });
|
|
146
|
+
}, SEAL_INTERRUPTED_TIMEOUT_MS);
|
|
147
|
+
const unregister = mgr.registerInboundHandler((frame) => {
|
|
148
|
+
if (frame.type !== "seal_interrupted_ack" && frame.type !== "seal_interrupted_rejection") {
|
|
149
|
+
return;
|
|
150
|
+
}
|
|
151
|
+
if (typeof frame.sessionId !== "string" || frame.sessionId !== sessionId)
|
|
152
|
+
return;
|
|
153
|
+
clearTimeout(timeoutHandle);
|
|
154
|
+
unregister();
|
|
155
|
+
if (frame.type === "seal_interrupted_ack") {
|
|
156
|
+
resolve({
|
|
157
|
+
type: "seal_interrupted_ack",
|
|
158
|
+
sealInterruptedLeaf: frame.sealInterruptedLeaf ?? {},
|
|
159
|
+
nonce: typeof frame.nonce === "string" ? frame.nonce : null,
|
|
160
|
+
});
|
|
161
|
+
}
|
|
162
|
+
else {
|
|
163
|
+
// Only treat the frontier detail as present when BOTH numbers are real. A half-populated
|
|
164
|
+
// frame must render as "no detail", never as a mismatch with one side invented.
|
|
165
|
+
// M12-P15: which ceremony the peer is actually on. ONE status covers two that need
|
|
166
|
+
// opposite actions, so the initiator must never infer it — absent means do not act.
|
|
167
|
+
const ceremony = typeof frame["pending_ceremony"] === "string" ? frame["pending_ceremony"] : undefined;
|
|
168
|
+
const responder = frame["responder_leaf_count"];
|
|
169
|
+
const initiator = frame["initiator_leaf_count"];
|
|
170
|
+
const diverging = frame["diverging_leaf_index"];
|
|
171
|
+
const hasFrontier = typeof responder === "number" && typeof initiator === "number";
|
|
172
|
+
resolve({
|
|
173
|
+
type: "seal_interrupted_rejection",
|
|
174
|
+
reason: typeof frame.reason === "string" ? frame.reason : "unknown",
|
|
175
|
+
...(ceremony !== undefined ? { pendingCeremony: ceremony } : {}),
|
|
176
|
+
...(hasFrontier
|
|
177
|
+
? { frontier: { responder, initiator, diverging: typeof diverging === "number" ? diverging : Math.min(responder, initiator) } }
|
|
178
|
+
: {}),
|
|
179
|
+
});
|
|
180
|
+
}
|
|
181
|
+
});
|
|
182
|
+
});
|
|
183
|
+
}
|
|
184
|
+
async function handleSealInterruptedFlow(sessionId, record, correlationId, merkleRootAtInterruption,
|
|
185
|
+
/**
|
|
186
|
+
* Send and await on THIS stream instead of the agent's home one.
|
|
187
|
+
*
|
|
188
|
+
* A directory routes by looking up a stream IT holds, and each daemon holds its stream to its
|
|
189
|
+
* OWN home node — so a request for a counterparty homed elsewhere must be sent to THEIR node,
|
|
190
|
+
* not ours. Ours logs "target offline" and answers nothing, and the 30s wait below expires.
|
|
191
|
+
*
|
|
192
|
+
* The close handler supplies the visiting connection it opened to the counterparty's node. A
|
|
193
|
+
* visiting connection makes us REACHABLE FROM that node, which is what the active seal needs
|
|
194
|
+
* (the broker pushes to us); this flow needs the other direction, and both use the same
|
|
195
|
+
* connection.
|
|
196
|
+
*/
|
|
197
|
+
via) {
|
|
198
|
+
const nonce = randomUUID();
|
|
199
|
+
// Retrieve the agent's own pubkey from the agent list
|
|
200
|
+
// (the agent_name stored in the session record identifies which agent was in session)
|
|
201
|
+
const agent = agents.find((a) => a.name === record.agent_name);
|
|
202
|
+
const myPubkeyHex = agent?.pubkey ?? "";
|
|
203
|
+
const counterpartyPubkey = record.counterparty_pubkey;
|
|
204
|
+
// DAEMON-004 (AC-007 / SI-001 / finding #2): prefer the daemon-owned tree.
|
|
205
|
+
// After a SIGKILL+restart the active session is forced to 'interrupted' and
|
|
206
|
+
// its Merkle tree is reloaded from session_tree_leaves. When that reloaded
|
|
207
|
+
// tree is non-empty it is the authoritative transcript: the seal binds over
|
|
208
|
+
// the daemon's OWN reloaded root + size, and any caller-supplied
|
|
209
|
+
// merkleRootAtInterruption is IGNORED (SI-001). Only when no tree was ever
|
|
210
|
+
// persisted (legacy / pre-DAEMON-004 sessions) do we fall back to the
|
|
211
|
+
// caller-supplied root and the message_count column (SESSION-001 behavior).
|
|
212
|
+
const reloadedTree = sessionNodeManager.getSessionTree(record.agent_name, sessionId);
|
|
213
|
+
const hasOwnTree = reloadedTree.size() > 0;
|
|
214
|
+
const ownLeafCount = hasOwnTree ? reloadedTree.size() : (record.message_count ?? 0);
|
|
215
|
+
const effectiveRoot = hasOwnTree
|
|
216
|
+
? sessionNodeManager.getSessionTreeRootHex(record.agent_name, sessionId)
|
|
217
|
+
: merkleRootAtInterruption;
|
|
218
|
+
// DB-001: check signaling status before attempting to send
|
|
219
|
+
if (signalingFor(record.agent_name)?.status === "reconnecting") {
|
|
220
|
+
logger.error("session.interrupted.seal.failed", {
|
|
221
|
+
sessionId,
|
|
222
|
+
agentName: record.agent_name,
|
|
223
|
+
reason: "signaling_reconnecting",
|
|
224
|
+
error: "directory_signaling_reconnecting",
|
|
225
|
+
correlationId,
|
|
226
|
+
});
|
|
227
|
+
return {
|
|
228
|
+
ok: false,
|
|
229
|
+
reason: "signaling_reconnecting",
|
|
230
|
+
guidance: "The directory signaling stream is reconnecting. Wait for directory_signaling to show connected in cello status before initiating seal-interrupted. The daemon reconnects automatically — no manual intervention required.",
|
|
231
|
+
};
|
|
232
|
+
}
|
|
233
|
+
// H-1: construct and K_local-sign our OWN SEAL-INTERRUPTED leaf before sending.
|
|
234
|
+
const myKeyProvider = keyProviders.get(record.agent_name);
|
|
235
|
+
if (!myKeyProvider) {
|
|
236
|
+
logger.error("session.interrupted.seal.failed", {
|
|
237
|
+
sessionId,
|
|
238
|
+
agentName: record.agent_name,
|
|
239
|
+
reason: "signing_key_unavailable",
|
|
240
|
+
error: "no_key_provider_for_agent",
|
|
241
|
+
correlationId,
|
|
242
|
+
});
|
|
243
|
+
return {
|
|
244
|
+
ok: false,
|
|
245
|
+
reason: "signing_key_unavailable",
|
|
246
|
+
guidance: "The signing key for the agent that owned this session could not be loaded. Confirm the agent's key file exists under ~/.cello/agents and restart the daemon.",
|
|
247
|
+
};
|
|
248
|
+
}
|
|
249
|
+
const ownLeaf = await buildSignedSealInterruptedLeaf(myKeyProvider, {
|
|
250
|
+
sessionId,
|
|
251
|
+
leafCount: ownLeafCount,
|
|
252
|
+
merkleRootAtInterruption: effectiveRoot,
|
|
253
|
+
signerPubkeyHex: myPubkeyHex,
|
|
254
|
+
});
|
|
255
|
+
// Send SealInterruptedRequest via directory signaling
|
|
256
|
+
const request = {
|
|
257
|
+
type: "seal_interrupted_request",
|
|
258
|
+
sessionId,
|
|
259
|
+
initiatorPubkey: myPubkeyHex,
|
|
260
|
+
counterpartyPubkey,
|
|
261
|
+
leafCountAtInterruption: ownLeafCount,
|
|
262
|
+
merkleRootAtInterruption: effectiveRoot,
|
|
263
|
+
nonce,
|
|
264
|
+
};
|
|
265
|
+
const sendResult = via ? await via.sendRaw(request) : await sendOver(record.agent_name, request);
|
|
266
|
+
if (!sendResult.ok) {
|
|
267
|
+
logger.error("session.interrupted.seal.failed", {
|
|
268
|
+
sessionId,
|
|
269
|
+
agentName: record.agent_name,
|
|
270
|
+
reason: "seal_interrupted_counterparty_unavailable",
|
|
271
|
+
error: sendResult.reason,
|
|
272
|
+
correlationId,
|
|
273
|
+
});
|
|
274
|
+
return {
|
|
275
|
+
ok: false,
|
|
276
|
+
reason: "seal_interrupted_counterparty_unavailable",
|
|
277
|
+
guidance: "The counterparty is not currently reachable to complete the seal-interrupted flow. Retry when the counterparty is online — check their connection status via cello_status.",
|
|
278
|
+
};
|
|
279
|
+
}
|
|
280
|
+
// Wait for counterparty ack/rejection via the shared signaling await machinery.
|
|
281
|
+
const ackResult = await awaitSealAck(sessionId, via ?? signalingFor(record.agent_name));
|
|
282
|
+
if (ackResult.type === "timeout") {
|
|
283
|
+
logger.error("session.interrupted.seal.failed", {
|
|
284
|
+
sessionId,
|
|
285
|
+
agentName: record.agent_name,
|
|
286
|
+
reason: "seal_interrupted_counterparty_unavailable",
|
|
287
|
+
error: "seal_interrupted_response_timeout",
|
|
288
|
+
correlationId,
|
|
289
|
+
});
|
|
290
|
+
return {
|
|
291
|
+
ok: false,
|
|
292
|
+
reason: "seal_interrupted_counterparty_unavailable",
|
|
293
|
+
guidance: "The counterparty is not currently reachable to complete the seal-interrupted flow. Retry when the counterparty is online — check their connection status via cello_status.",
|
|
294
|
+
};
|
|
295
|
+
}
|
|
296
|
+
if (ackResult.type === "seal_interrupted_rejection") {
|
|
297
|
+
logger.error("session.interrupted.seal.failed", {
|
|
298
|
+
sessionId,
|
|
299
|
+
agentName: record.agent_name,
|
|
300
|
+
reason: "seal_interrupted_rejected_by_counterparty",
|
|
301
|
+
error: ackResult.reason,
|
|
302
|
+
...(ackResult.frontier
|
|
303
|
+
? {
|
|
304
|
+
responderLeafCount: ackResult.frontier.responder,
|
|
305
|
+
initiatorLeafCount: ackResult.frontier.initiator,
|
|
306
|
+
divergingLeafIndex: ackResult.frontier.diverging,
|
|
307
|
+
}
|
|
308
|
+
: {}),
|
|
309
|
+
correlationId,
|
|
310
|
+
});
|
|
311
|
+
// DOD-FRONTIER-STRAND-1 AC2: name the mismatch. The old text said "ask the counterparty to
|
|
312
|
+
// check their interrupted sessions on their end" — which, when both agents run on ONE daemon
|
|
313
|
+
// (the case that stranded session dbb93dfc… for a week), points at a machine that does not
|
|
314
|
+
// exist while withholding the two numbers that identify the problem.
|
|
315
|
+
if (ackResult.frontier) {
|
|
316
|
+
const { responder, initiator, diverging } = ackResult.frontier;
|
|
317
|
+
// AC3: the INITIATOR learns the two numbers here and must keep them too — otherwise only the
|
|
318
|
+
// responder's session list shows the strand and the side that attempted the close sees
|
|
319
|
+
// nothing afterwards.
|
|
320
|
+
recordFrontierMismatch(record.agent_name, sessionId, {
|
|
321
|
+
ours: initiator, theirs: responder, divergingLeafIndex: diverging,
|
|
322
|
+
});
|
|
323
|
+
// AC3 asks for a LOG EVENT, and only the responder emitted one (review M6). On a
|
|
324
|
+
// two-machine strand an operator grepping the INITIATING daemon — the side that ran the
|
|
325
|
+
// close and saw the failure — found nothing at all.
|
|
326
|
+
logger.warn("session.frontier.mismatch", {
|
|
327
|
+
sessionId,
|
|
328
|
+
agentName: record.agent_name,
|
|
329
|
+
role: "initiator",
|
|
330
|
+
ourLeafCount: initiator,
|
|
331
|
+
theirLeafCount: responder,
|
|
332
|
+
divergingLeafIndex: diverging,
|
|
333
|
+
correlationId,
|
|
334
|
+
});
|
|
335
|
+
}
|
|
336
|
+
// M12-P15: the counterparty just told us which ceremony IT is on. Act on that rather than
|
|
337
|
+
// dead-ending — the dead end is what left force:true (no receipt) as the only exit.
|
|
338
|
+
//
|
|
339
|
+
// ONLY `relay_bilateral`. A peer on the seal-interrupted ceremony has no relay SEAL ctrl leaf
|
|
340
|
+
// and never will, so our leaf would be one leaf into a log that can never hold a second
|
|
341
|
+
// distinct sender: the seal never completes and we would have reported ok. An ABSENT field
|
|
342
|
+
// (older peer) is not a hint — it is unknown, and unknown means do not sign.
|
|
343
|
+
if (ackResult.reason === "session_seal_already_pending" && ackResult.pendingCeremony === "relay_bilateral") {
|
|
344
|
+
logger.info("session.seal.ceremony.realigned", {
|
|
345
|
+
sessionId, agentName: record.agent_name,
|
|
346
|
+
from: "seal_interrupted", to: "bilateral_cosign", because: ackResult.reason, correlationId,
|
|
347
|
+
});
|
|
348
|
+
const submitted = await sessionNodeManager.submitSealLeaf(record.agent_name, sessionId, correlationId);
|
|
349
|
+
// `responder_seal_already_submitted` means our half is ALREADY in the relay log. The active
|
|
350
|
+
// seal path treats it as success for exactly that reason; treating it as failure here told
|
|
351
|
+
// the operator to retry forever (every retry re-hits the synchronous idempotency mark) while
|
|
352
|
+
// forbidding the only real exit.
|
|
353
|
+
if (submitted.ok || submitted.reason === "responder_seal_already_submitted") {
|
|
354
|
+
// CARRY THE CEREMONY. Without it the caller cannot tell this apart from an ordinary
|
|
355
|
+
// interrupted commitment and escalates milliseconds later — asking for an ABSENT-party
|
|
356
|
+
// seal against a counterparty that is demonstrably present and co-operating.
|
|
357
|
+
return { ok: true, sessionId, status: "seal_interrupted_pending", ceremony: "relay_bilateral" };
|
|
358
|
+
}
|
|
359
|
+
return {
|
|
360
|
+
ok: false,
|
|
361
|
+
reason: "seal_cosign_failed",
|
|
362
|
+
rejection_reason: ackResult.reason,
|
|
363
|
+
guidance: `The counterparty is running the relay bilateral seal and was waiting for our half, so we submitted it instead of re-requesting an interrupted seal — but the submit failed (${submitted.reason}). The session is NOT terminal: retry cello_close_session ${sessionId} once that cause is cleared.`,
|
|
364
|
+
};
|
|
365
|
+
}
|
|
366
|
+
return {
|
|
367
|
+
ok: false,
|
|
368
|
+
reason: "seal_interrupted_rejected_by_counterparty",
|
|
369
|
+
...renderSealRejection(ackResult.reason, sessionId, ackResult.frontier),
|
|
370
|
+
};
|
|
371
|
+
}
|
|
372
|
+
// ackResult.type === "seal_interrupted_ack"
|
|
373
|
+
{
|
|
374
|
+
const leaf = ackResult.sealInterruptedLeaf;
|
|
375
|
+
// C-1 / SI-002 / SI-003: nonce (L-2), leafCount agreement, and the
|
|
376
|
+
// counterparty's own Ed25519 signature are verified by the shared helper.
|
|
377
|
+
// We compare against our OWN ownLeafCount (an independent value) so a real
|
|
378
|
+
// divergence in transcript length is caught. Merkle-root agreement is NOT
|
|
379
|
+
// verified at this leaf-exchange layer (it is the FROST-seal step's job
|
|
380
|
+
// against the directory-held tree); see the H-1 SCOPE note above.
|
|
381
|
+
const verified = verifyCounterpartySealLeaf({
|
|
382
|
+
leaf,
|
|
383
|
+
sentNonce: nonce,
|
|
384
|
+
ackNonce: ackResult.nonce,
|
|
385
|
+
ownLeafCount,
|
|
386
|
+
expectedCounterpartyPubkey: record.counterparty_pubkey,
|
|
387
|
+
});
|
|
388
|
+
if (!verified.ok) {
|
|
389
|
+
const reasonMap = {
|
|
390
|
+
nonce_mismatch: "seal_interrupted_nonce_mismatch",
|
|
391
|
+
leaf_count_mismatch: "seal_interrupted_leaf_count_mismatch",
|
|
392
|
+
leaf_signature_invalid: "seal_interrupted_leaf_signature_invalid",
|
|
393
|
+
};
|
|
394
|
+
const guidanceMap = {
|
|
395
|
+
nonce_mismatch: "The counterparty's acknowledgement did not echo the expected nonce. This indicates a stale or replayed response. The session remains interrupted — retry cello_close_session.",
|
|
396
|
+
leaf_count_mismatch: "The counterparty's recorded message count at interruption does not match ours. The two sides have divergent session histories and cannot form a bilateral commitment. Compare cello status on both ends before retrying.",
|
|
397
|
+
leaf_signature_invalid: "The counterparty's SEAL-INTERRUPTED leaf signature did not verify. The seal flow has been aborted. The session remains interrupted — retry cello_close_session after confirming the counterparty is using a compatible version.",
|
|
398
|
+
};
|
|
399
|
+
logger.error("session.interrupted.seal.failed", {
|
|
400
|
+
sessionId,
|
|
401
|
+
agentName: record.agent_name,
|
|
402
|
+
reason: reasonMap[verified.reason],
|
|
403
|
+
error: verified.error,
|
|
404
|
+
correlationId,
|
|
405
|
+
});
|
|
406
|
+
return { ok: false, reason: reasonMap[verified.reason], guidance: guidanceMap[verified.reason] };
|
|
407
|
+
}
|
|
408
|
+
// H-1: signature + nonce + cross-checks all passed. We have a VERIFIED
|
|
409
|
+
// bilateral commitment (both K_local-signed leaves over the same
|
|
410
|
+
// {leafCount, merkleRoot}). Persist BOTH leaves and advance the session to
|
|
411
|
+
// the NON-TERMINAL 'seal_interrupted_pending' state. We do NOT write
|
|
412
|
+
// 'sealed' — the FROST threshold notarization has not run (see the H-1
|
|
413
|
+
// SCOPE note above for exactly what blocks it).
|
|
414
|
+
const advanced = sessionNodeManager.persistSealInterruptedCommitment({
|
|
415
|
+
agentName: record.agent_name,
|
|
416
|
+
sessionId,
|
|
417
|
+
role: "initiator",
|
|
418
|
+
ownLeaf,
|
|
419
|
+
counterpartyLeaf: leaf,
|
|
420
|
+
merkleRoot: effectiveRoot,
|
|
421
|
+
nonce,
|
|
422
|
+
});
|
|
423
|
+
if (!advanced) {
|
|
424
|
+
logger.error("session.interrupted.seal.failed", {
|
|
425
|
+
sessionId,
|
|
426
|
+
agentName: record.agent_name,
|
|
427
|
+
reason: "seal_interrupted_persist_failed",
|
|
428
|
+
error: "session row was not in 'interrupted' state at commit time",
|
|
429
|
+
correlationId,
|
|
430
|
+
});
|
|
431
|
+
return {
|
|
432
|
+
ok: false,
|
|
433
|
+
reason: "seal_interrupted_persist_failed",
|
|
434
|
+
guidance: "The bilateral commitment could not be persisted because the session was no longer in the interrupted state. Re-check cello status — it may already be pending or sealed.",
|
|
435
|
+
};
|
|
436
|
+
}
|
|
437
|
+
logger.info("session.interrupted.pending", {
|
|
438
|
+
sessionId,
|
|
439
|
+
agentName: record.agent_name,
|
|
440
|
+
leafCount: ownLeafCount,
|
|
441
|
+
correlationId,
|
|
442
|
+
});
|
|
443
|
+
// AC3: the frontiers evidently agree now — drop any recorded mismatch. A flag that outlives
|
|
444
|
+
// the condition is the same defect inverted: an operator told a healthy session is stranded
|
|
445
|
+
// stops believing the flag, and the next real strand reads as noise.
|
|
446
|
+
clearFrontierMismatch(record.agent_name, sessionId);
|
|
447
|
+
return { ok: true, sessionId, status: "seal_interrupted_pending" };
|
|
448
|
+
}
|
|
449
|
+
}
|
|
450
|
+
// ─── CELLO-M7-DAEMON-004: active-session seal initiation ─────────────────────
|
|
451
|
+
//
|
|
452
|
+
// Pseudocode (SPARC Phase P):
|
|
453
|
+
// 1. DB-002: if signaling reconnecting → return signaling_reconnecting and do
|
|
454
|
+
// NOT initiate a partial seal that cannot be notarized.
|
|
455
|
+
// 2. SI-001: read the merkle root from the daemon's OWN tree (never a caller param).
|
|
456
|
+
// 3. K_local-sign a SEAL ctrl leaf over that root (SI-003: signed by our own node).
|
|
457
|
+
// 4. Fire session.seal.initiated with rootHex == our own tree root, role:'initiator'.
|
|
458
|
+
// 5. Submit the SEAL to the relay/counterparty + coordinate FROST via signaling,
|
|
459
|
+
// reusing the same signaling stream the interrupted-seal flow (SESSION-001) uses.
|
|
460
|
+
// The bilateral counterparty ack + FROST threshold notarization complete the
|
|
461
|
+
// seal end-to-end (AC-004, exercised under CELLO_E2E_LIVE) — the daemon never
|
|
462
|
+
// synthesizes the counterparty's signature.
|
|
463
|
+
// round-2 [medium]: the IPC return status MUST match the persisted row. The
|
|
464
|
+
// active-seal flow advances the session to 'seal_interrupted_pending' (the same
|
|
465
|
+
// non-terminal bilateral-commitment state the interrupted flow uses); returning
|
|
466
|
+
// a distinct 'seal_initiated' here meant the close response and a subsequent
|
|
467
|
+
// cello_status / cello_list_sessions showed two names for one state. One name.
|
|
468
|
+
async function handleActiveSealFlow(sessionId, record, correlationId) {
|
|
469
|
+
const agent = agents.find((a) => a.name === record.agent_name);
|
|
470
|
+
const myPubkeyHex = agent?.pubkey ?? "";
|
|
471
|
+
const kp = keyProviders.get(record.agent_name);
|
|
472
|
+
// DB-002: never initiate a partial seal while signaling is reconnecting.
|
|
473
|
+
if (signalingFor(record.agent_name)?.status === "reconnecting") {
|
|
474
|
+
return {
|
|
475
|
+
ok: false,
|
|
476
|
+
reason: "signaling_reconnecting",
|
|
477
|
+
guidance: "The directory signaling stream is reconnecting. Wait for directory_signaling to show connected in cello status before retrying the close. The daemon reconnects automatically.",
|
|
478
|
+
};
|
|
479
|
+
}
|
|
480
|
+
if (!kp || !myPubkeyHex) {
|
|
481
|
+
logger.error("session.seal.initiate.failed", {
|
|
482
|
+
sessionId,
|
|
483
|
+
reason: "signing_key_unavailable",
|
|
484
|
+
errorMessage: "no key provider or pubkey for the agent that owns this session",
|
|
485
|
+
correlationId,
|
|
486
|
+
});
|
|
487
|
+
return {
|
|
488
|
+
ok: false,
|
|
489
|
+
reason: "signing_key_unavailable",
|
|
490
|
+
guidance: "The signing key for the agent that owns this session could not be loaded. Confirm the agent's key file exists under ~/.cello/agents and restart the daemon.",
|
|
491
|
+
};
|
|
492
|
+
}
|
|
493
|
+
// SI-001: the root is the daemon's OWN tree root — computed from the leaves it
|
|
494
|
+
// appended itself. Any caller-supplied merkleRoot is never read here.
|
|
495
|
+
const ownRootHex = sessionNodeManager.getSessionTreeRootHex(record.agent_name, sessionId);
|
|
496
|
+
const leafCount = sessionNodeManager.getSessionTree(record.agent_name, sessionId).size();
|
|
497
|
+
const nonce = randomUUID();
|
|
498
|
+
// SI-003: K_local-sign our OWN SEAL leaf over our own root. We reuse the
|
|
499
|
+
// wired SEAL-INTERRUPTED leaf shape so the counterparty co-signs an identical
|
|
500
|
+
// canonical form (the active and interrupted bilateral exchanges share the
|
|
501
|
+
// directory pass-through routing — there is no separate `seal_request`
|
|
502
|
+
// transport, and inventing one silently drops the frame at the directory).
|
|
503
|
+
let ownLeaf;
|
|
504
|
+
try {
|
|
505
|
+
ownLeaf = await buildSignedSealInterruptedLeaf(kp, {
|
|
506
|
+
sessionId,
|
|
507
|
+
leafCount,
|
|
508
|
+
merkleRootAtInterruption: ownRootHex,
|
|
509
|
+
signerPubkeyHex: myPubkeyHex,
|
|
510
|
+
});
|
|
511
|
+
}
|
|
512
|
+
catch (err) {
|
|
513
|
+
logger.error("session.seal.initiate.failed", {
|
|
514
|
+
sessionId,
|
|
515
|
+
reason: "seal_leaf_signing_failed",
|
|
516
|
+
errorMessage: extractErrorMessage(err),
|
|
517
|
+
correlationId,
|
|
518
|
+
});
|
|
519
|
+
return {
|
|
520
|
+
ok: false,
|
|
521
|
+
reason: "seal_leaf_signing_failed",
|
|
522
|
+
guidance: "The SEAL leaf could not be signed. Check the daemon logs for the signing error and confirm the agent key is intact.",
|
|
523
|
+
};
|
|
524
|
+
}
|
|
525
|
+
// AC-003: session.seal.initiated — rootHex MUST equal the daemon's own root.
|
|
526
|
+
logger.info("session.seal.initiated", {
|
|
527
|
+
sessionId,
|
|
528
|
+
rootHex: ownRootHex,
|
|
529
|
+
role: "initiator",
|
|
530
|
+
correlationId,
|
|
531
|
+
});
|
|
532
|
+
// Submit the SEAL request over the directory signaling stream (the SAME wired
|
|
533
|
+
// pass-through the interrupted-seal flow uses) and AWAIT the counterparty's
|
|
534
|
+
// bilateral ack. We never report success on a fire-and-forget send.
|
|
535
|
+
const sendResult = await sendOver(record.agent_name, {
|
|
536
|
+
type: "seal_interrupted_request",
|
|
537
|
+
sessionId,
|
|
538
|
+
initiatorPubkey: myPubkeyHex,
|
|
539
|
+
counterpartyPubkey: record.counterparty_pubkey,
|
|
540
|
+
leafCountAtInterruption: leafCount,
|
|
541
|
+
merkleRootAtInterruption: ownRootHex,
|
|
542
|
+
nonce,
|
|
543
|
+
});
|
|
544
|
+
if (!sendResult.ok) {
|
|
545
|
+
logger.error("session.seal.initiate.failed", {
|
|
546
|
+
sessionId,
|
|
547
|
+
reason: sendResult.reason,
|
|
548
|
+
errorMessage: sendResult.reason,
|
|
549
|
+
correlationId,
|
|
550
|
+
});
|
|
551
|
+
return {
|
|
552
|
+
ok: false,
|
|
553
|
+
reason: sendResult.reason ?? "directory_unreachable",
|
|
554
|
+
guidance: "guidance" in sendResult && typeof sendResult.guidance === "string"
|
|
555
|
+
? sendResult.guidance
|
|
556
|
+
: "The seal could not be submitted to the directory. Retry once cello status shows directory_signaling connected.",
|
|
557
|
+
};
|
|
558
|
+
}
|
|
559
|
+
// Wait for the counterparty's bilateral ack (or rejection / timeout).
|
|
560
|
+
const ackResult = await awaitSealAck(sessionId, signalingFor(record.agent_name));
|
|
561
|
+
if (ackResult.type === "timeout" || ackResult.type === "seal_interrupted_rejection") {
|
|
562
|
+
const reason = ackResult.type === "timeout" ? "seal_counterparty_unavailable" : "seal_rejected_by_counterparty";
|
|
563
|
+
logger.error("session.seal.initiate.failed", {
|
|
564
|
+
sessionId,
|
|
565
|
+
reason,
|
|
566
|
+
errorMessage: ackResult.type === "timeout" ? "seal_response_timeout" : ackResult.reason,
|
|
567
|
+
correlationId,
|
|
568
|
+
});
|
|
569
|
+
return {
|
|
570
|
+
ok: false,
|
|
571
|
+
reason,
|
|
572
|
+
guidance: ackResult.type === "timeout"
|
|
573
|
+
? "The counterparty did not acknowledge the seal in time. Retry when they are online — check cello_status. The session remains active and usable."
|
|
574
|
+
: "The counterparty rejected the seal request. Their session state may be inconsistent. Ask them to check cello status before retrying.",
|
|
575
|
+
};
|
|
576
|
+
}
|
|
577
|
+
// SI-002 / SI-003: verify the counterparty's own-signed ack leaf over our root.
|
|
578
|
+
const verified = verifyCounterpartySealLeaf({
|
|
579
|
+
leaf: ackResult.sealInterruptedLeaf,
|
|
580
|
+
sentNonce: nonce,
|
|
581
|
+
ackNonce: ackResult.nonce,
|
|
582
|
+
ownLeafCount: leafCount,
|
|
583
|
+
expectedCounterpartyPubkey: record.counterparty_pubkey,
|
|
584
|
+
});
|
|
585
|
+
if (!verified.ok) {
|
|
586
|
+
logger.error("session.seal.initiate.failed", {
|
|
587
|
+
sessionId,
|
|
588
|
+
reason: `seal_${verified.reason}`,
|
|
589
|
+
errorMessage: verified.error,
|
|
590
|
+
correlationId,
|
|
591
|
+
});
|
|
592
|
+
return {
|
|
593
|
+
ok: false,
|
|
594
|
+
reason: `seal_${verified.reason}`,
|
|
595
|
+
guidance: "The counterparty's seal acknowledgement failed verification (nonce, leaf count, or signature). The session remains active — retry cello_close_session once both sides agree on the transcript.",
|
|
596
|
+
};
|
|
597
|
+
}
|
|
598
|
+
// Verified bilateral commitment over the daemon's OWN root. Persist both
|
|
599
|
+
// signed leaves and advance the session out of 'active'. As in the
|
|
600
|
+
// interrupted flow, we stop at the bilateral commitment ('seal_interrupted_pending');
|
|
601
|
+
// the FROST threshold notarization that finalizes 'sealed' is the deferred
|
|
602
|
+
// directory step (AC-004, exercised under CELLO_E2E_LIVE).
|
|
603
|
+
const advanced = sessionNodeManager.persistSealInterruptedCommitment({
|
|
604
|
+
agentName: record.agent_name,
|
|
605
|
+
sessionId,
|
|
606
|
+
role: "initiator",
|
|
607
|
+
ownLeaf,
|
|
608
|
+
counterpartyLeaf: ackResult.sealInterruptedLeaf,
|
|
609
|
+
merkleRoot: ownRootHex,
|
|
610
|
+
nonce,
|
|
611
|
+
});
|
|
612
|
+
if (!advanced) {
|
|
613
|
+
logger.error("session.seal.initiate.failed", {
|
|
614
|
+
sessionId,
|
|
615
|
+
reason: "seal_persist_failed",
|
|
616
|
+
errorMessage: "session row was not in an active/interrupted state at commit time",
|
|
617
|
+
correlationId,
|
|
618
|
+
});
|
|
619
|
+
return {
|
|
620
|
+
ok: false,
|
|
621
|
+
reason: "seal_persist_failed",
|
|
622
|
+
guidance: "The bilateral seal commitment could not be persisted because the session changed state. Re-check cello status — it may already be pending or sealed.",
|
|
623
|
+
};
|
|
624
|
+
}
|
|
625
|
+
// round-2 finding #5: the session is now frozen at 'seal_interrupted_pending'.
|
|
626
|
+
// Retire its live libp2p node so no further inbound content can arrive (which
|
|
627
|
+
// ingestReceivedContent now also rejects) and so the node is not leaked per
|
|
628
|
+
// active close. retireSessionNode stops the node WITHOUT changing the DB status.
|
|
629
|
+
await sessionNodeManager.retireSessionNode(record.agent_name, sessionId);
|
|
630
|
+
// AC3: the frontiers evidently agree now — drop any recorded mismatch. A flag that outlives
|
|
631
|
+
// the condition is the same defect inverted: an operator told a healthy session is stranded
|
|
632
|
+
// stops believing the flag, and the next real strand reads as noise.
|
|
633
|
+
clearFrontierMismatch(record.agent_name, sessionId);
|
|
634
|
+
return { ok: true, sessionId, status: "seal_interrupted_pending", rootHex: ownRootHex };
|
|
635
|
+
}
|
|
636
|
+
return { awaitSealAck, handleSealInterruptedFlow, handleActiveSealFlow };
|
|
637
|
+
}
|
|
638
|
+
//# sourceMappingURL=seal-flows.js.map
|