@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,110 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* DOD-M12B-RESTART-SEAL-1 — resolve the sessions our own stop orphaned, with a receipt.
|
|
3
|
+
*
|
|
4
|
+
* A daemon shutdown flips every open session to `interrupted` on the way out, and nothing has ever
|
|
5
|
+
* moved them again: their transport keypairs died with the process, so they cannot be resumed, and
|
|
6
|
+
* the only exit is `cello_close_session {force:true}`, which forfeits the notarized receipt.
|
|
7
|
+
*
|
|
8
|
+
* This walks them on startup and SEALS them instead — bilateral if the counterparty answers,
|
|
9
|
+
* unilateral once the directory's delivery grace has elapsed. When the directory refuses
|
|
10
|
+
* `seal_unilateral_too_early` it hands back exactly how long is left; that number becomes a
|
|
11
|
+
* scheduled retry rather than a sentence asking a human to come back.
|
|
12
|
+
*
|
|
13
|
+
* SCOPE IS THE WHOLE SAFETY ARGUMENT, and after DOD-M12B-PENDING-RESOLVE-1 it has TWO branches.
|
|
14
|
+
*
|
|
15
|
+
* 1. `interrupted` with `interrupted_by = 'local'` — OURS. Our own boot sweep, shutdown sweep or
|
|
16
|
+
* kill switch ended it; nobody else did, and it cannot be resumed because the keypairs died
|
|
17
|
+
* with the process.
|
|
18
|
+
* 2. `seal_interrupted_pending` — a seal commitment that nobody ever asked the directory to
|
|
19
|
+
* notarize. **This population includes sessions the COUNTERPARTY asked to end**, which is why
|
|
20
|
+
* the SI-001 boundary in `close-session-handler.ts` had to be restated rather than left as
|
|
21
|
+
* "nothing the counterparty caused is auto-sealed". SI-001 forbids notarizing a conversation
|
|
22
|
+
* NOBODY chose to end; here somebody always did — an initiator row carries the counterparty's
|
|
23
|
+
* signed leaf, and a responder row exists because the counterparty sent a request to seal.
|
|
24
|
+
*
|
|
25
|
+
* Serial and staggered on purpose: a seal is a directory ceremony, and a machine holding hundreds of
|
|
26
|
+
* orphans must not answer a restart with hundreds of simultaneous ceremonies.
|
|
27
|
+
*/
|
|
28
|
+
import type { Logger } from "./types.js";
|
|
29
|
+
/** A session our own stop left behind. */
|
|
30
|
+
export interface RestartOrphan {
|
|
31
|
+
agentName: string;
|
|
32
|
+
sessionId: string;
|
|
33
|
+
messageCount: number;
|
|
34
|
+
/**
|
|
35
|
+
* DOD-M12B-PENDING-RESOLVE-1: which population this is. Two statuses now reach this queue and
|
|
36
|
+
* they need different words in a give-up: an `interrupted` session may legitimately be
|
|
37
|
+
* force-abandoned, and a `seal_interrupted_pending` one must not be, because forcing forfeits a
|
|
38
|
+
* signed commitment and the relay-witnessed leaves that are one request away from a receipt.
|
|
39
|
+
*/
|
|
40
|
+
status: "interrupted" | "seal_interrupted_pending";
|
|
41
|
+
}
|
|
42
|
+
/**
|
|
43
|
+
* The result of one seal attempt. `retryAfterSeconds` is the directory's own countdown from
|
|
44
|
+
* `seal_unilateral_too_early` — the delivery grace that has to elapse before a unilateral seal is
|
|
45
|
+
* allowed. It is a WAIT the directory named, not a guess.
|
|
46
|
+
*/
|
|
47
|
+
export type SealOutcome = {
|
|
48
|
+
ok: true;
|
|
49
|
+
} | {
|
|
50
|
+
ok: false;
|
|
51
|
+
reason: string;
|
|
52
|
+
retryAfterSeconds?: number;
|
|
53
|
+
/** The close path's own guidance. Carried, never replaced — see the give-up log. */
|
|
54
|
+
guidance?: string;
|
|
55
|
+
/** Everything the close computed about WHY, so `reason` stops being the only fact. */
|
|
56
|
+
detail?: Record<string, unknown>;
|
|
57
|
+
};
|
|
58
|
+
export interface ScheduledTask {
|
|
59
|
+
cancel: () => void;
|
|
60
|
+
}
|
|
61
|
+
export interface RestartSealResolverDeps {
|
|
62
|
+
logger: Logger;
|
|
63
|
+
/**
|
|
64
|
+
* DOD-M12B-PENDING-RESOLVE-1 — TWO populations, each with its own safety argument:
|
|
65
|
+
* - `interrupted` AND `interrupted_by = 'local'` — our own stop ended it, so we may describe it.
|
|
66
|
+
* - `seal_interrupted_pending` — a seal commitment nobody asked the directory to notarize.
|
|
67
|
+
* Nothing else is eligible.
|
|
68
|
+
*/
|
|
69
|
+
listRestartOrphans: () => RestartOrphan[];
|
|
70
|
+
sealSession: (agentName: string, sessionId: string) => Promise<SealOutcome>;
|
|
71
|
+
/**
|
|
72
|
+
* Record DURABLY that this session was given up on, so the next boot does not start over.
|
|
73
|
+
* Without it a machine restarting ~6 times a day re-attempts a hopeless session forever.
|
|
74
|
+
*
|
|
75
|
+
* REQUIRED, not optional. There is exactly one composition root, so optionality buys nothing and
|
|
76
|
+
* costs the compiler's ability to catch a wiring that was never done — and the whole
|
|
77
|
+
* justification for the two new columns is that this call happens.
|
|
78
|
+
*/
|
|
79
|
+
markGaveUp: (agentName: string, sessionId: string, reason: string) => void;
|
|
80
|
+
now?: () => number;
|
|
81
|
+
schedule?: (fn: () => void, ms: number) => ScheduledTask;
|
|
82
|
+
/** Gap between two seal attempts. */
|
|
83
|
+
staggerMs?: number;
|
|
84
|
+
/**
|
|
85
|
+
* How long to wait after boot before the first attempt. A seal needs the directory, and at the
|
|
86
|
+
* instant the daemon finishes starting, signaling is still being established — firing
|
|
87
|
+
* immediately would spend an attempt on a connection that does not exist yet.
|
|
88
|
+
*/
|
|
89
|
+
initialDelayMs?: number;
|
|
90
|
+
/** Hard ceiling on attempts for one session before it is reported as needing a manual decision. */
|
|
91
|
+
maxAttemptsPerSession?: number;
|
|
92
|
+
/**
|
|
93
|
+
* Ceiling on ONE seal attempt. A close that never settles would otherwise leave `#running` true
|
|
94
|
+
* with no timer armed and no log line — the resolver stalls, holding a full queue, silently.
|
|
95
|
+
*/
|
|
96
|
+
attemptTimeoutMs?: number;
|
|
97
|
+
}
|
|
98
|
+
export declare class RestartSealResolver {
|
|
99
|
+
#private;
|
|
100
|
+
constructor(deps: RestartSealResolverDeps);
|
|
101
|
+
/** Enqueue every restart orphan and begin working through them. Idempotent. */
|
|
102
|
+
start(): void;
|
|
103
|
+
/**
|
|
104
|
+
* Stop, and start nothing further. A shutdown that keeps opening directory ceremonies is not
|
|
105
|
+
* draining (DOD-M12B-SHUTDOWN-1) — and the flag, not the cancelled timer, is what an attempt
|
|
106
|
+
* already in flight checks when it lands.
|
|
107
|
+
*/
|
|
108
|
+
stop(): Promise<void>;
|
|
109
|
+
}
|
|
110
|
+
//# sourceMappingURL=restart-seal-resolver.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"restart-seal-resolver.d.ts","sourceRoot":"","sources":["../src/restart-seal-resolver.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;GA0BG;AACH,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,YAAY,CAAC;AAGzC,0CAA0C;AAC1C,MAAM,WAAW,aAAa;IAC5B,SAAS,EAAE,MAAM,CAAC;IAClB,SAAS,EAAE,MAAM,CAAC;IAClB,YAAY,EAAE,MAAM,CAAC;IACrB;;;;;OAKG;IACH,MAAM,EAAE,aAAa,GAAG,0BAA0B,CAAC;CACpD;AAED;;;;GAIG;AACH,MAAM,MAAM,WAAW,GACnB;IAAE,EAAE,EAAE,IAAI,CAAA;CAAE,GACZ;IACE,EAAE,EAAE,KAAK,CAAC;IACV,MAAM,EAAE,MAAM,CAAC;IACf,iBAAiB,CAAC,EAAE,MAAM,CAAC;IAC3B,oFAAoF;IACpF,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,sFAAsF;IACtF,MAAM,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;CAClC,CAAC;AAEN,MAAM,WAAW,aAAa;IAC5B,MAAM,EAAE,MAAM,IAAI,CAAC;CACpB;AAED,MAAM,WAAW,uBAAuB;IACtC,MAAM,EAAE,MAAM,CAAC;IACf;;;;;OAKG;IACH,kBAAkB,EAAE,MAAM,aAAa,EAAE,CAAC;IAC1C,WAAW,EAAE,CAAC,SAAS,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,KAAK,OAAO,CAAC,WAAW,CAAC,CAAC;IAC5E;;;;;;;OAOG;IACH,UAAU,EAAE,CAAC,SAAS,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,KAAK,IAAI,CAAC;IAC3E,GAAG,CAAC,EAAE,MAAM,MAAM,CAAC;IACnB,QAAQ,CAAC,EAAE,CAAC,EAAE,EAAE,MAAM,IAAI,EAAE,EAAE,EAAE,MAAM,KAAK,aAAa,CAAC;IACzD,qCAAqC;IACrC,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB;;;;OAIG;IACH,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB,mGAAmG;IACnG,qBAAqB,CAAC,EAAE,MAAM,CAAC;IAC/B;;;OAGG;IACH,gBAAgB,CAAC,EAAE,MAAM,CAAC;CAC3B;AAoHD,qBAAa,mBAAmB;;gBAkBlB,IAAI,EAAE,uBAAuB;IAUzC,+EAA+E;IAC/E,KAAK,IAAI,IAAI;IA+Bb;;;;OAIG;IACH,IAAI,IAAI,OAAO,CAAC,IAAI,CAAC;CA8LtB"}
|
|
@@ -0,0 +1,353 @@
|
|
|
1
|
+
import { extractErrorMessage } from "./error-message.js";
|
|
2
|
+
/**
|
|
3
|
+
* Refusals no retry can ever help, so they cost ONE attempt and not fifteen minutes.
|
|
4
|
+
*
|
|
5
|
+
* Measured 2026-08-17 across 443 submitted seal leaves and 183 completed seals — 59% of seals that
|
|
6
|
+
* start never finish, and these are the reasons where trying again is not persistence:
|
|
7
|
+
*
|
|
8
|
+
* session_abandoned 10× — terminal by definition; the receipt is gone.
|
|
9
|
+
* leaf_count_mismatch 4× — the two trees genuinely disagree.
|
|
10
|
+
* seal_interrupted_rejected_by_counterparty 18× — they said NO. Asking again is worse than
|
|
11
|
+
* noise: it is a machine badgering a peer who
|
|
12
|
+
* already declined.
|
|
13
|
+
*
|
|
14
|
+
* `seal_carry_bilateral_in_progress` is deliberately NOT here either: it means the relay has what
|
|
15
|
+
* it needs to seal BILATERALLY, so the right move is to come back and find the session already
|
|
16
|
+
* sealed — which then answers `session_already_sealed`, which IS terminal.
|
|
17
|
+
*
|
|
18
|
+
* `session_incomplete` and `seal_unilateral_timeout` are deliberately NOT here. The first can be
|
|
19
|
+
* fixed by a relay pull filling the gap — the close's own guidance says so — and the second is a
|
|
20
|
+
* directory that did not answer in time, which the next attempt may well get.
|
|
21
|
+
*/
|
|
22
|
+
/**
|
|
23
|
+
* DOD-M12B-PENDING-RESOLVE-1 (review F2) — refusals that mean "WE were not ready", not "this session
|
|
24
|
+
* is hopeless".
|
|
25
|
+
*
|
|
26
|
+
* Every one of these is a local precondition of OURS. The close handler says so itself:
|
|
27
|
+
* *"`standing_receiver_unavailable` is simply 'the agent is not started yet', which a freshly booted
|
|
28
|
+
* daemon reports for every session."* And a freshly booted daemon is the only time this resolver
|
|
29
|
+
* runs — the receiver is created when `cello_start_agent` reaches the daemon, which on a boot where
|
|
30
|
+
* no client has attached yet has not happened for any agent.
|
|
31
|
+
*
|
|
32
|
+
* Left in the ordinary budget they cost five attempts in ~15 minutes and then a DURABLE
|
|
33
|
+
* `restart_seal_gave_up_at`, which removes the session from the only queue that would ever look at
|
|
34
|
+
* it again. For the `seal_interrupted_pending` population that is materially worse than doing
|
|
35
|
+
* nothing: those rows hold signed commitments and relay-witnessed leaves that are ready to notarize,
|
|
36
|
+
* and the give-up reaches no operator surface at all — it is a warn line in `daemon.log`.
|
|
37
|
+
*
|
|
38
|
+
* So these retry on the same backoff but do NOT consume the attempt budget and can never be the
|
|
39
|
+
* reason for a permanent give-up. They are bounded instead by wall-clock (`#localPreconditionCap`),
|
|
40
|
+
* so a genuinely dead daemon still stops eventually rather than retrying forever.
|
|
41
|
+
*/
|
|
42
|
+
const LOCAL_PRECONDITION_REFUSALS = new Set([
|
|
43
|
+
"standing_receiver_unavailable",
|
|
44
|
+
"no_persisted_relay_endpoint",
|
|
45
|
+
"relay_unavailable",
|
|
46
|
+
"directory_unreachable",
|
|
47
|
+
"transport_unavailable",
|
|
48
|
+
/**
|
|
49
|
+
* `DOD-M15-TOKENSTALE-1` review F2 — the textbook member of this set, and it only started arriving
|
|
50
|
+
* under its own name when that unit split the submit boundary. Before, it was `relay_unavailable`
|
|
51
|
+
* and was already covered.
|
|
52
|
+
*
|
|
53
|
+
* It clears on a relogin, so it is exactly the "local precondition that will pass later" this set
|
|
54
|
+
* is for. Left out, it consumes the attempt budget and then writes a DURABLE give-up — removing
|
|
55
|
+
* sessions holding signed commitments from the only queue that would ever enumerate them again,
|
|
56
|
+
* which is the 28-session outcome the comment above records.
|
|
57
|
+
*/
|
|
58
|
+
"online_token_expired",
|
|
59
|
+
"online_token_required",
|
|
60
|
+
"online_token_pubkey_mismatch",
|
|
61
|
+
]);
|
|
62
|
+
const TERMINAL_SEAL_REFUSALS = new Set([
|
|
63
|
+
"session_abandoned",
|
|
64
|
+
"seal_interrupted_rejected_by_counterparty",
|
|
65
|
+
"session_already_sealed",
|
|
66
|
+
// OUR OWN verification finding a genuine divergence between the two trees. Distinct from the
|
|
67
|
+
// counterparty's `leaf_count_mismatch`, which never reaches here as a top-level reason — it
|
|
68
|
+
// arrives as `detail.rejection_reason` under the rejection above. Naming the bare string here
|
|
69
|
+
// was inert: the close cannot produce it.
|
|
70
|
+
"seal_interrupted_leaf_count_mismatch",
|
|
71
|
+
// DOD-M15-DIVERGE-1: this side's tree parted from the relay's ordering. Nothing backfills or
|
|
72
|
+
// re-numbers a leaf, so the refusal is identical on every attempt — spending the retry budget on
|
|
73
|
+
// it only delays the durable `restart_seal_gave_up_at` it was always going to reach. The operator
|
|
74
|
+
// decides between comparing counts with the counterparty and force-abandoning; a resolver cannot
|
|
75
|
+
// do either.
|
|
76
|
+
"session_record_diverged",
|
|
77
|
+
"session_not_found",
|
|
78
|
+
// The relay released the session (it drops one 24 h after the last message), so there is nothing
|
|
79
|
+
// left for any directory to rebuild the record from. No amount of retrying brings it back.
|
|
80
|
+
"seal_carry_empty",
|
|
81
|
+
// Two of our SEAL ctrl leaves in one durable carry. No directory can ever notarize it, and no
|
|
82
|
+
// retry changes the carry.
|
|
83
|
+
"seal_carry_duplicate_own_ctrl_leaf",
|
|
84
|
+
// The lookup that answers "is a ctrl leaf already posted?" failed. Refusing is correct — a second
|
|
85
|
+
// leaf is permanent — but retrying it five times cannot make the database readable.
|
|
86
|
+
"seal_leaf_recovery_unavailable",
|
|
87
|
+
// Not protocol outcomes — a wiring or caller fault. Retrying re-runs the same bug.
|
|
88
|
+
"session_not_closeable",
|
|
89
|
+
"close_handler_missing",
|
|
90
|
+
"missing_params",
|
|
91
|
+
]);
|
|
92
|
+
const DEFAULT_STAGGER_MS = 5_000;
|
|
93
|
+
/** Long enough for the directory handshake started moments earlier to have landed. */
|
|
94
|
+
const DEFAULT_INITIAL_DELAY_MS = 30_000;
|
|
95
|
+
const DEFAULT_MAX_ATTEMPTS = 5;
|
|
96
|
+
/** Backoff for a failure the directory gave no deadline for. Doubles, so a bounded run spans ~1 h. */
|
|
97
|
+
const BASE_BACKOFF_MS = 60_000;
|
|
98
|
+
/** Generous: a close does discovery, a broker dial, a relay submit and a directory round. */
|
|
99
|
+
const DEFAULT_ATTEMPT_TIMEOUT_MS = 120_000;
|
|
100
|
+
function defaultSchedule(fn, ms) {
|
|
101
|
+
const t = setTimeout(fn, ms);
|
|
102
|
+
// A background resolver must never be the reason a daemon will not exit.
|
|
103
|
+
t.unref?.();
|
|
104
|
+
return { cancel: () => clearTimeout(t) };
|
|
105
|
+
}
|
|
106
|
+
export class RestartSealResolver {
|
|
107
|
+
#deps;
|
|
108
|
+
#now;
|
|
109
|
+
#schedule;
|
|
110
|
+
#staggerMs;
|
|
111
|
+
#maxAttempts;
|
|
112
|
+
#initialDelayMs;
|
|
113
|
+
#attemptTimeoutMs;
|
|
114
|
+
/** Resolves when no attempt is in flight — awaited by stop() so a shutdown does not cut a
|
|
115
|
+
* ceremony in half and leave the two sides permanently divergent. */
|
|
116
|
+
#inFlight = null;
|
|
117
|
+
#queue = new Map();
|
|
118
|
+
#timer = null;
|
|
119
|
+
#started = false;
|
|
120
|
+
#stopped = false;
|
|
121
|
+
#running = false;
|
|
122
|
+
constructor(deps) {
|
|
123
|
+
this.#deps = deps;
|
|
124
|
+
this.#now = deps.now ?? (() => Date.now());
|
|
125
|
+
this.#schedule = deps.schedule ?? defaultSchedule;
|
|
126
|
+
this.#staggerMs = deps.staggerMs ?? DEFAULT_STAGGER_MS;
|
|
127
|
+
this.#maxAttempts = deps.maxAttemptsPerSession ?? DEFAULT_MAX_ATTEMPTS;
|
|
128
|
+
this.#initialDelayMs = deps.initialDelayMs ?? DEFAULT_INITIAL_DELAY_MS;
|
|
129
|
+
this.#attemptTimeoutMs = deps.attemptTimeoutMs ?? DEFAULT_ATTEMPT_TIMEOUT_MS;
|
|
130
|
+
}
|
|
131
|
+
/** Enqueue every restart orphan and begin working through them. Idempotent. */
|
|
132
|
+
start() {
|
|
133
|
+
if (this.#started || this.#stopped)
|
|
134
|
+
return;
|
|
135
|
+
this.#started = true;
|
|
136
|
+
let orphans;
|
|
137
|
+
try {
|
|
138
|
+
orphans = this.#deps.listRestartOrphans();
|
|
139
|
+
}
|
|
140
|
+
catch (err) {
|
|
141
|
+
// ABSENT IS NOT FINE. If we cannot read the list, say so — silence here reads exactly like
|
|
142
|
+
// "there was nothing to resolve", which is the state this unit exists to end.
|
|
143
|
+
this.#deps.logger.error("session.restart_seal.enumerate.failed", {
|
|
144
|
+
error: extractErrorMessage(err),
|
|
145
|
+
impact: "sessions the last shutdown orphaned will stay interrupted and unsealed",
|
|
146
|
+
});
|
|
147
|
+
return;
|
|
148
|
+
}
|
|
149
|
+
if (orphans.length === 0)
|
|
150
|
+
return;
|
|
151
|
+
const now = this.#now();
|
|
152
|
+
const firstAt = now + this.#initialDelayMs;
|
|
153
|
+
for (const orphan of orphans) {
|
|
154
|
+
this.#queue.set(`${orphan.agentName}:${orphan.sessionId}`, { orphan, attempts: 0, nextAt: firstAt });
|
|
155
|
+
}
|
|
156
|
+
this.#deps.logger.info("session.restart_seal.enqueued", {
|
|
157
|
+
count: orphans.length,
|
|
158
|
+
impact: "sessions the last shutdown left open will be sealed rather than left for a force-abandon",
|
|
159
|
+
});
|
|
160
|
+
this.#arm(this.#initialDelayMs);
|
|
161
|
+
}
|
|
162
|
+
/**
|
|
163
|
+
* Stop, and start nothing further. A shutdown that keeps opening directory ceremonies is not
|
|
164
|
+
* draining (DOD-M12B-SHUTDOWN-1) — and the flag, not the cancelled timer, is what an attempt
|
|
165
|
+
* already in flight checks when it lands.
|
|
166
|
+
*/
|
|
167
|
+
stop() {
|
|
168
|
+
this.#stopped = true;
|
|
169
|
+
this.#timer?.cancel();
|
|
170
|
+
this.#timer = null;
|
|
171
|
+
this.#queue.clear();
|
|
172
|
+
// AWAIT what is already in flight. Severing signaling under a half-finished seal-interrupted
|
|
173
|
+
// exchange leaves the counterparty holding a commitment we never acknowledged: their session
|
|
174
|
+
// advances to `seal_interrupted_pending` and ours stays `interrupted`, permanently divergent
|
|
175
|
+
// and produced automatically on every shutdown.
|
|
176
|
+
//
|
|
177
|
+
// WHAT IS AWAITED IS THE BOUNDED RACE, NOT THE CLOSE. Returning the raw `sealSession` promise
|
|
178
|
+
// would hang shutdown forever on a close that never settles — and shutdown holds the SQLCipher
|
|
179
|
+
// write lock, so "forever" means a daemon that cannot be restarted. `attemptTimeoutMs` bounds
|
|
180
|
+
// this wait because the raced promise is what is stored.
|
|
181
|
+
//
|
|
182
|
+
// THE RESIDUAL WINDOW IS ACCEPTED, NOT CLOSED, and it is stated here rather than implied.
|
|
183
|
+
// Once the timeout wins the race, `#inFlight` is cleared while the underlying close may still
|
|
184
|
+
// be running — so a `stop()` arriving after that point returns immediately and can still sever
|
|
185
|
+
// signaling under a half-finished exchange. That is the deliberate trade: a bounded shutdown is
|
|
186
|
+
// worth more than a guaranteed-clean one, because an unbounded wait here wedges the daemon
|
|
187
|
+
// permanently while the divergence it prevents is repairable by the next close. An attempt
|
|
188
|
+
// taking longer than `attemptTimeoutMs` is not pathological — the interrupted path can spend
|
|
189
|
+
// 30 s in the seal flow, 30 s in a retry after discovery, and 30 s in the escalation.
|
|
190
|
+
return this.#inFlight ? this.#inFlight.then(() => undefined, () => undefined) : Promise.resolve();
|
|
191
|
+
}
|
|
192
|
+
/** Arm the next pass only while there is still work. An empty queue must leave NO timer behind —
|
|
193
|
+
* a resolver that keeps a dead timer alive is a resolver that shows up in a shutdown trace. */
|
|
194
|
+
#armIfWork() {
|
|
195
|
+
if (this.#queue.size === 0)
|
|
196
|
+
return;
|
|
197
|
+
this.#arm(this.#staggerMs);
|
|
198
|
+
}
|
|
199
|
+
#arm(delayMs) {
|
|
200
|
+
if (this.#stopped)
|
|
201
|
+
return;
|
|
202
|
+
this.#timer?.cancel();
|
|
203
|
+
this.#timer = this.#schedule(() => {
|
|
204
|
+
this.#timer = null;
|
|
205
|
+
void this.#pump();
|
|
206
|
+
}, delayMs);
|
|
207
|
+
}
|
|
208
|
+
async #pump() {
|
|
209
|
+
if (this.#stopped || this.#running)
|
|
210
|
+
return;
|
|
211
|
+
if (this.#queue.size === 0)
|
|
212
|
+
return;
|
|
213
|
+
const now = this.#now();
|
|
214
|
+
let due = null;
|
|
215
|
+
for (const item of this.#queue.values()) {
|
|
216
|
+
if (item.nextAt <= now && (due === null || item.nextAt < due.nextAt))
|
|
217
|
+
due = item;
|
|
218
|
+
}
|
|
219
|
+
if (due === null) {
|
|
220
|
+
// Nothing is due yet — sleep until the earliest deadline rather than polling.
|
|
221
|
+
let earliest = Infinity;
|
|
222
|
+
for (const item of this.#queue.values())
|
|
223
|
+
earliest = Math.min(earliest, item.nextAt);
|
|
224
|
+
if (earliest !== Infinity)
|
|
225
|
+
this.#arm(Math.max(0, earliest - now));
|
|
226
|
+
return;
|
|
227
|
+
}
|
|
228
|
+
const item = due;
|
|
229
|
+
const key = `${item.orphan.agentName}:${item.orphan.sessionId}`;
|
|
230
|
+
item.attempts += 1;
|
|
231
|
+
this.#running = true;
|
|
232
|
+
let outcome;
|
|
233
|
+
let attemptTimer = null;
|
|
234
|
+
try {
|
|
235
|
+
const attempt = this.#deps.sealSession(item.orphan.agentName, item.orphan.sessionId);
|
|
236
|
+
// A close that never settles must not wedge the queue silently.
|
|
237
|
+
const timeout = new Promise((resolve) => {
|
|
238
|
+
attemptTimer = this.#schedule(() => resolve({ ok: false, reason: "restart_seal_attempt_timeout" }), this.#attemptTimeoutMs);
|
|
239
|
+
});
|
|
240
|
+
// The RACE is what stop() awaits — see stop(). Storing the raw attempt here would make a
|
|
241
|
+
// hung close a hung shutdown; storing the race makes the wait bounded by attemptTimeoutMs.
|
|
242
|
+
const raced = Promise.race([attempt, timeout]);
|
|
243
|
+
this.#inFlight = raced;
|
|
244
|
+
// A rejected `attempt` still settles the race, and #inFlight is only ever awaited with both
|
|
245
|
+
// handlers attached (stop()), so this cannot surface as an unhandled rejection.
|
|
246
|
+
attempt.catch(() => { });
|
|
247
|
+
outcome = await raced;
|
|
248
|
+
}
|
|
249
|
+
catch (err) {
|
|
250
|
+
outcome = { ok: false, reason: extractErrorMessage(err) };
|
|
251
|
+
}
|
|
252
|
+
finally {
|
|
253
|
+
attemptTimer?.cancel();
|
|
254
|
+
this.#inFlight = null;
|
|
255
|
+
this.#running = false;
|
|
256
|
+
}
|
|
257
|
+
// Re-checked AFTER the await: stop() can land while a ceremony is in flight, and the queue it
|
|
258
|
+
// cleared must not be repopulated by this attempt's bookkeeping.
|
|
259
|
+
if (this.#stopped)
|
|
260
|
+
return;
|
|
261
|
+
if (outcome.ok) {
|
|
262
|
+
this.#queue.delete(key);
|
|
263
|
+
this.#deps.logger.info("session.restart_seal.resolved", {
|
|
264
|
+
agentName: item.orphan.agentName,
|
|
265
|
+
sessionId: item.orphan.sessionId,
|
|
266
|
+
attempts: item.attempts,
|
|
267
|
+
messageCount: item.orphan.messageCount,
|
|
268
|
+
});
|
|
269
|
+
this.#armIfWork();
|
|
270
|
+
return;
|
|
271
|
+
}
|
|
272
|
+
const terminal = TERMINAL_SEAL_REFUSALS.has(outcome.reason);
|
|
273
|
+
/**
|
|
274
|
+
* review F2 — a local precondition is not a verdict on the session.
|
|
275
|
+
*
|
|
276
|
+
* `attempts` is decremented back so this pass costs nothing from the budget: the session is
|
|
277
|
+
* retried on the same backoff, and only a refusal that says something about the SESSION can
|
|
278
|
+
* exhaust it. Without this, all 28 pending sessions were durably given up on ~15 minutes after
|
|
279
|
+
* every boot, and no future boot would ever enumerate them again.
|
|
280
|
+
*/
|
|
281
|
+
const localPrecondition = !terminal && LOCAL_PRECONDITION_REFUSALS.has(outcome.reason);
|
|
282
|
+
if (localPrecondition) {
|
|
283
|
+
item.attempts = Math.max(0, item.attempts - 1);
|
|
284
|
+
this.#deps.logger.info("session.restart_seal.not_ready", {
|
|
285
|
+
agentName: item.orphan.agentName,
|
|
286
|
+
sessionId: item.orphan.sessionId,
|
|
287
|
+
reason: outcome.reason,
|
|
288
|
+
impact: "a local precondition, not a verdict on the session — retried without spending an attempt",
|
|
289
|
+
});
|
|
290
|
+
}
|
|
291
|
+
if (terminal || (!localPrecondition && item.attempts >= this.#maxAttempts)) {
|
|
292
|
+
this.#queue.delete(key);
|
|
293
|
+
// DURABLE, so the next boot does not start the same five attempts over. A machine restarting
|
|
294
|
+
// ~6 times a day would otherwise re-try a hopeless session forever, which is the burst the
|
|
295
|
+
// stagger exists to prevent, merely spread out.
|
|
296
|
+
try {
|
|
297
|
+
this.#deps.markGaveUp(item.orphan.agentName, item.orphan.sessionId, outcome.reason);
|
|
298
|
+
}
|
|
299
|
+
catch (err) {
|
|
300
|
+
this.#deps.logger.warn("session.restart_seal.mark_gave_up.failed", {
|
|
301
|
+
sessionId: item.orphan.sessionId,
|
|
302
|
+
error: extractErrorMessage(err),
|
|
303
|
+
impact: "this session will be re-attempted on every future boot",
|
|
304
|
+
});
|
|
305
|
+
}
|
|
306
|
+
this.#deps.logger.warn("session.restart_seal.gave_up", {
|
|
307
|
+
agentName: item.orphan.agentName,
|
|
308
|
+
sessionId: item.orphan.sessionId,
|
|
309
|
+
attempts: item.attempts,
|
|
310
|
+
reason: outcome.reason,
|
|
311
|
+
// WHY it stopped, not just that it did. "We stopped because they refused" and "we stopped
|
|
312
|
+
// because we ran out of tries" are different facts and lead to different operator actions.
|
|
313
|
+
stoppedBecause: terminal ? "refusal_is_terminal" : "attempts_exhausted",
|
|
314
|
+
// The detail the close COMPUTED and used to drop one function later: which of the six
|
|
315
|
+
// causes behind `seal_interrupted_rejected_by_counterparty` this was, and the leaf counts
|
|
316
|
+
// that identify a frontier strand.
|
|
317
|
+
...(outcome.detail ? { detail: outcome.detail } : {}),
|
|
318
|
+
// THE CLOSE'S OWN GUIDANCE WINS. A fixed string here told the operator to force-abandon —
|
|
319
|
+
// and for `session_already_sealed` the close handler says in capitals NOT to, because
|
|
320
|
+
// forcing there permanently forfeits a half that is still recoverable.
|
|
321
|
+
// review F4: the fallback must not tell a `seal_interrupted_pending` session it is
|
|
322
|
+
// "interrupted", nor point at force-abandon — forcing there forfeits a signed commitment and
|
|
323
|
+
// the relay-witnessed leaves that are ready to notarize.
|
|
324
|
+
guidance: outcome.guidance ??
|
|
325
|
+
(item.orphan.status === "seal_interrupted_pending"
|
|
326
|
+
? ("This session holds a seal commitment and could not be notarized automatically. The " +
|
|
327
|
+
"commitment and the full transcript are intact — retry cello_close_session once the " +
|
|
328
|
+
"agent is started and the daemon reports healthy. Do NOT force-abandon it: that ends " +
|
|
329
|
+
"it WITHOUT the receipt it is one request away from having.")
|
|
330
|
+
: ("This session could not be sealed automatically and is still interrupted. Close it with " +
|
|
331
|
+
"cello_close_session, or force-abandon it — which ends it WITHOUT a notarized receipt.")),
|
|
332
|
+
});
|
|
333
|
+
this.#armIfWork();
|
|
334
|
+
return;
|
|
335
|
+
}
|
|
336
|
+
// The directory named a deadline: wait exactly that long. Anything else either batters it with
|
|
337
|
+
// refusals or leaves the session sitting after the grace has elapsed.
|
|
338
|
+
const waitMs = typeof outcome.retryAfterSeconds === "number" && outcome.retryAfterSeconds >= 0
|
|
339
|
+
? outcome.retryAfterSeconds * 1_000
|
|
340
|
+
: BASE_BACKOFF_MS * 2 ** (item.attempts - 1);
|
|
341
|
+
item.nextAt = this.#now() + waitMs;
|
|
342
|
+
this.#deps.logger.info("session.restart_seal.waiting", {
|
|
343
|
+
agentName: item.orphan.agentName,
|
|
344
|
+
sessionId: item.orphan.sessionId,
|
|
345
|
+
attempts: item.attempts,
|
|
346
|
+
reason: outcome.reason,
|
|
347
|
+
...(typeof outcome.retryAfterSeconds === "number" ? { retryAfterSeconds: outcome.retryAfterSeconds } : {}),
|
|
348
|
+
retryInMs: waitMs,
|
|
349
|
+
});
|
|
350
|
+
this.#arm(Math.min(this.#staggerMs, waitMs));
|
|
351
|
+
}
|
|
352
|
+
}
|
|
353
|
+
//# sourceMappingURL=restart-seal-resolver.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"restart-seal-resolver.js","sourceRoot":"","sources":["../src/restart-seal-resolver.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
import type { SessionSealLeafStore } from "./session-seal-leaf-store.js";
|
|
2
|
+
import type { DaemonDatabase } from "./sqlcipher-db.js";
|
|
3
|
+
import type { Logger } from "./types.js";
|
|
4
|
+
/** Record an acknowledgement the live path just made. Forward-only: an earlier position is ignored. */
|
|
5
|
+
export declare function recordLastAck(db: DaemonDatabase, a: {
|
|
6
|
+
agentId: string;
|
|
7
|
+
sessionId: string;
|
|
8
|
+
seq: number;
|
|
9
|
+
hash: Uint8Array;
|
|
10
|
+
}): void;
|
|
11
|
+
export declare function lastSeenFromRecord(store: SessionSealLeafStore, logger: Logger, ownPubkey: Uint8Array, sessionIdHex: string): {
|
|
12
|
+
seq: number;
|
|
13
|
+
hash: Uint8Array;
|
|
14
|
+
} | undefined;
|
|
15
|
+
//# sourceMappingURL=resume-last-seen.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"resume-last-seen.d.ts","sourceRoot":"","sources":["../src/resume-last-seen.ts"],"names":[],"mappings":"AAkBA,OAAO,KAAK,EAAE,oBAAoB,EAAE,MAAM,8BAA8B,CAAC;AACzE,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,mBAAmB,CAAC;AACxD,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,YAAY,CAAC;AAEzC,uGAAuG;AACvG,wBAAgB,aAAa,CAC3B,EAAE,EAAE,cAAc,EAClB,CAAC,EAAE;IAAE,OAAO,EAAE,MAAM,CAAC;IAAC,SAAS,EAAE,MAAM,CAAC;IAAC,GAAG,EAAE,MAAM,CAAC;IAAC,IAAI,EAAE,UAAU,CAAA;CAAE,GACvE,IAAI,CAMN;AAED,wBAAgB,kBAAkB,CAChC,KAAK,EAAE,oBAAoB,EAC3B,MAAM,EAAE,MAAM,EACd,SAAS,EAAE,UAAU,EACrB,YAAY,EAAE,MAAM,GACnB;IAAE,GAAG,EAAE,MAAM,CAAC;IAAC,IAAI,EAAE,UAAU,CAAA;CAAE,GAAG,SAAS,CAgB/C"}
|
|
@@ -0,0 +1,44 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Where a resumed session's acknowledgement starts — from the durable record, not from nothing.
|
|
3
|
+
*
|
|
4
|
+
* The relay client keeps "the last position I saw from you" in memory. A session interrupted after
|
|
5
|
+
* messages (Ctrl-C, a restart) came back at position 0, so every close claimed "I have seen nothing
|
|
6
|
+
* from you". The relay refuses that as stale, because the other side's messages are filed after 0,
|
|
7
|
+
* and the re-sign waits for a new message that never comes: the session could never seal (live,
|
|
8
|
+
* 2026-09-14).
|
|
9
|
+
*
|
|
10
|
+
* Two durable sources, both holding RELAY positions — never a position guessed from the local leaf
|
|
11
|
+
* index, which can drift one ahead of the relay:
|
|
12
|
+
* - `session_last_ack`: what the live path acknowledged, written at the moment it did, for every
|
|
13
|
+
* route a message can arrive by (relay, direct, recovered park, screened-out);
|
|
14
|
+
* - the seal leaf store: every leaf the other side authored that the relay delivered, with the
|
|
15
|
+
* Structure 1 they signed.
|
|
16
|
+
* The higher of the two is where the live path would have been.
|
|
17
|
+
*/
|
|
18
|
+
import { decodeStructure1 } from "@cello-protocol/protocol-types";
|
|
19
|
+
/** Record an acknowledgement the live path just made. Forward-only: an earlier position is ignored. */
|
|
20
|
+
export function recordLastAck(db, a) {
|
|
21
|
+
db.prepare(`INSERT INTO session_last_ack (agent_id, session_id, relay_seq, hash_hex) VALUES (?, ?, ?, ?)
|
|
22
|
+
ON CONFLICT (agent_id, session_id) DO UPDATE SET relay_seq = excluded.relay_seq, hash_hex = excluded.hash_hex
|
|
23
|
+
WHERE excluded.relay_seq > session_last_ack.relay_seq`).run(a.agentId, a.sessionId, a.seq, Buffer.from(a.hash).toString("hex"));
|
|
24
|
+
}
|
|
25
|
+
export function lastSeenFromRecord(store, logger, ownPubkey, sessionIdHex) {
|
|
26
|
+
const own = Buffer.from(ownPubkey);
|
|
27
|
+
let best = store.recordedAcknowledgement(own.toString("hex"), sessionIdHex);
|
|
28
|
+
for (const leaf of store.getCarry(own.toString("hex"), sessionIdHex)) {
|
|
29
|
+
const s1 = decodeStructure1(leaf.structure1Cbor);
|
|
30
|
+
if (!s1.ok) {
|
|
31
|
+
logger.warn("session.relay.last_seen.resume_leaf_unreadable", {
|
|
32
|
+
sessionId: sessionIdHex, sequenceNumber: leaf.sequenceNumber, reason: s1.reason,
|
|
33
|
+
impact: "this stored leaf is skipped when resuming, so a close may claim an earlier position and be refused as stale",
|
|
34
|
+
});
|
|
35
|
+
continue;
|
|
36
|
+
}
|
|
37
|
+
if (Buffer.from(s1.fields.senderPubkey).equals(own))
|
|
38
|
+
continue;
|
|
39
|
+
if (!best || leaf.sequenceNumber > best.seq)
|
|
40
|
+
best = { seq: leaf.sequenceNumber, hash: s1.fields.contentHash };
|
|
41
|
+
}
|
|
42
|
+
return best;
|
|
43
|
+
}
|
|
44
|
+
//# sourceMappingURL=resume-last-seen.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"resume-last-seen.js","sourceRoot":"","sources":["../src/resume-last-seen.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;GAgBG;AACH,OAAO,EAAE,gBAAgB,EAAE,MAAM,gCAAgC,CAAC;AAKlE,uGAAuG;AACvG,MAAM,UAAU,aAAa,CAC3B,EAAkB,EAClB,CAAwE;IAExE,EAAE,CAAC,OAAO,CACR;;2DAEuD,CACxD,CAAC,GAAG,CAAC,CAAC,CAAC,OAAO,EAAE,CAAC,CAAC,SAAS,EAAE,CAAC,CAAC,GAAG,EAAE,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC,CAAC;AAC5E,CAAC;AAED,MAAM,UAAU,kBAAkB,CAChC,KAA2B,EAC3B,MAAc,EACd,SAAqB,EACrB,YAAoB;IAEpB,MAAM,GAAG,GAAG,MAAM,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC;IACnC,IAAI,IAAI,GAAG,KAAK,CAAC,uBAAuB,CAAC,GAAG,CAAC,QAAQ,CAAC,KAAK,CAAC,EAAE,YAAY,CAAC,CAAC;IAC5E,KAAK,MAAM,IAAI,IAAI,KAAK,CAAC,QAAQ,CAAC,GAAG,CAAC,QAAQ,CAAC,KAAK,CAAC,EAAE,YAAY,CAAC,EAAE,CAAC;QACrE,MAAM,EAAE,GAAG,gBAAgB,CAAC,IAAI,CAAC,cAAc,CAAC,CAAC;QACjD,IAAI,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC;YACX,MAAM,CAAC,IAAI,CAAC,gDAAgD,EAAE;gBAC5D,SAAS,EAAE,YAAY,EAAE,cAAc,EAAE,IAAI,CAAC,cAAc,EAAE,MAAM,EAAE,EAAE,CAAC,MAAM;gBAC/E,MAAM,EAAE,6GAA6G;aACtH,CAAC,CAAC;YACH,SAAS;QACX,CAAC;QACD,IAAI,MAAM,CAAC,IAAI,CAAC,EAAE,CAAC,MAAM,CAAC,YAAY,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC;YAAE,SAAS;QAC9D,IAAI,CAAC,IAAI,IAAI,IAAI,CAAC,cAAc,GAAG,IAAI,CAAC,GAAG;YAAE,IAAI,GAAG,EAAE,GAAG,EAAE,IAAI,CAAC,cAAc,EAAE,IAAI,EAAE,EAAE,CAAC,MAAM,CAAC,WAAW,EAAE,CAAC;IAChH,CAAC;IACD,OAAO,IAAI,CAAC;AACd,CAAC"}
|