@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,53 @@
|
|
|
1
|
+
import { type SecurityGatewayClient } from "@cello-protocol/gateway";
|
|
2
|
+
import type { IpcHandler } from "./ipc-server.js";
|
|
3
|
+
import type { SessionNodeManager } from "./session-node-manager.js";
|
|
4
|
+
import type { Logger } from "./types.js";
|
|
5
|
+
import type { LoadedAgent } from "./agent-loader.js";
|
|
6
|
+
import type { KeyProvider } from "@cello-protocol/crypto";
|
|
7
|
+
import type { SignalingManager } from "@cello-protocol/transport";
|
|
8
|
+
import type { NotificationDispatcher } from "./notification-dispatcher.js";
|
|
9
|
+
import type { DiscoveryOutcome } from "./cross-node-negotiation.js";
|
|
10
|
+
export interface DocumentWiringDeps {
|
|
11
|
+
logger: Logger;
|
|
12
|
+
sessionNodeManager: SessionNodeManager;
|
|
13
|
+
/** The LIVE registry — `cello_create_agent` pushes into it, so a new agent works without a restart. */
|
|
14
|
+
loadedAgents: ReadonlyArray<LoadedAgent>;
|
|
15
|
+
keyProviders: Map<string, KeyProvider>;
|
|
16
|
+
/** The gateway itself, not the config that holds it. */
|
|
17
|
+
securityGateway: SecurityGatewayClient;
|
|
18
|
+
/** Where the daemon keeps its data; documents live under it. */
|
|
19
|
+
celloDir: string;
|
|
20
|
+
deliveryOpens: {
|
|
21
|
+
begin: (openerPubkey: string, targetPubkey: string) => () => void;
|
|
22
|
+
};
|
|
23
|
+
pubkeyOfAgent: (name: string) => string;
|
|
24
|
+
openSessionFor: (agentName: string, opts: {
|
|
25
|
+
targetPubkey: string;
|
|
26
|
+
}) => Promise<unknown>;
|
|
27
|
+
perAgentSignaling: Map<string, {
|
|
28
|
+
signaling: SignalingManager;
|
|
29
|
+
}>;
|
|
30
|
+
runDiscoveryLookup: (signaling: SignalingManager, targetHex: string, timeoutMs: number, correlationId: string) => Promise<DiscoveryOutcome>;
|
|
31
|
+
/**
|
|
32
|
+
* ⚠️ A GETTER, NOT THE VALUE. The scheduler is constructed AFTER this wiring — it consumes the
|
|
33
|
+
* layer's sweep targets — so at the moment this module is built the binding is `undefined`.
|
|
34
|
+
* Passing the value captures that `undefined` for the life of the process and
|
|
35
|
+
* `reconcileScheduler?.noteRefusal(...)` becomes a permanent no-op: refusals still log, backoff
|
|
36
|
+
* never applies, and the sweep re-asks immediately. Measured cost of that state, from the
|
|
37
|
+
* scheduler's own notes: 321 attempts against two documents in 85 minutes, refused every time.
|
|
38
|
+
* Optional chaining makes it silent and the `| undefined` in the type makes it legal, so nothing
|
|
39
|
+
* but this comment and the test beside it stands between here and that behaviour.
|
|
40
|
+
*/
|
|
41
|
+
getReconcileScheduler: () => {
|
|
42
|
+
noteRefusal: (ownerAgentId: string, peerAgentId: string, terminal: boolean) => void;
|
|
43
|
+
} | undefined;
|
|
44
|
+
notificationDispatcher: NotificationDispatcher;
|
|
45
|
+
/** ONE other handler, not the map it lives in. */
|
|
46
|
+
getCloseSessionHandler: () => IpcHandler | undefined;
|
|
47
|
+
}
|
|
48
|
+
export declare function createDocumentWiring(deps: DocumentWiringDeps): {
|
|
49
|
+
documentLayer: import("./document-layer.js").DocumentLayer;
|
|
50
|
+
documentOwnerKeyFor: (agentName: string) => string | null;
|
|
51
|
+
documentTransportFor: (agentName: string) => import("./document-delivery-transport.js").DocumentDeliveryTransport;
|
|
52
|
+
};
|
|
53
|
+
//# sourceMappingURL=document-wiring.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"document-wiring.d.ts","sourceRoot":"","sources":["../src/document-wiring.ts"],"names":[],"mappings":"AAyBA,OAAO,EAA6B,KAAK,qBAAqB,EAAE,MAAM,yBAAyB,CAAC;AAChG,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,iBAAiB,CAAC;AAClD,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,2BAA2B,CAAC;AACpE,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,YAAY,CAAC;AACzC,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,mBAAmB,CAAC;AACrD,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,wBAAwB,CAAC;AAC1D,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,2BAA2B,CAAC;AAClE,OAAO,KAAK,EAAE,sBAAsB,EAAE,MAAM,8BAA8B,CAAC;AAC3E,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,6BAA6B,CAAC;AAEpE,MAAM,WAAW,kBAAkB;IACjC,MAAM,EAAE,MAAM,CAAC;IACf,kBAAkB,EAAE,kBAAkB,CAAC;IACvC,uGAAuG;IACvG,YAAY,EAAE,aAAa,CAAC,WAAW,CAAC,CAAC;IACzC,YAAY,EAAE,GAAG,CAAC,MAAM,EAAE,WAAW,CAAC,CAAC;IACvC,wDAAwD;IACxD,eAAe,EAAE,qBAAqB,CAAC;IACvC,gEAAgE;IAChE,QAAQ,EAAE,MAAM,CAAC;IACjB,aAAa,EAAE;QAAE,KAAK,EAAE,CAAC,YAAY,EAAE,MAAM,EAAE,YAAY,EAAE,MAAM,KAAK,MAAM,IAAI,CAAA;KAAE,CAAC;IACrF,aAAa,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,MAAM,CAAC;IACxC,cAAc,EAAE,CAAC,SAAS,EAAE,MAAM,EAAE,IAAI,EAAE;QAAE,YAAY,EAAE,MAAM,CAAA;KAAE,KAAK,OAAO,CAAC,OAAO,CAAC,CAAC;IACxF,iBAAiB,EAAE,GAAG,CAAC,MAAM,EAAE;QAAE,SAAS,EAAE,gBAAgB,CAAA;KAAE,CAAC,CAAC;IAChE,kBAAkB,EAAE,CAClB,SAAS,EAAE,gBAAgB,EAC3B,SAAS,EAAE,MAAM,EACjB,SAAS,EAAE,MAAM,EACjB,aAAa,EAAE,MAAM,KAClB,OAAO,CAAC,gBAAgB,CAAC,CAAC;IAC/B;;;;;;;;;OASG;IACH,qBAAqB,EAAE,MAAM;QAAE,WAAW,EAAE,CAAC,YAAY,EAAE,MAAM,EAAE,WAAW,EAAE,MAAM,EAAE,QAAQ,EAAE,OAAO,KAAK,IAAI,CAAA;KAAE,GAAG,SAAS,CAAC;IACjI,sBAAsB,EAAE,sBAAsB,CAAC;IAC/C,kDAAkD;IAClD,sBAAsB,EAAE,MAAM,UAAU,GAAG,SAAS,CAAC;CACtD;AAED,wBAAgB,oBAAoB,CAAC,IAAI,EAAE,kBAAkB;;qCAuBnB,MAAM,KAAG,MAAM,GAAG,IAAI;sCAgJrB,MAAM;EAqJhD"}
|
|
@@ -0,0 +1,323 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* The document layer, and the per-agent carrier that moves its frames.
|
|
3
|
+
*
|
|
4
|
+
* Built as ONE thing on purpose — every half-wiring is a distinct silent failure. An inbound path
|
|
5
|
+
* with no ack producer leaves the peer retrying until their document dies; a delivery worker with no
|
|
6
|
+
* inbound counterpart publishes envelopes nobody can answer. So this module returns the layer, the
|
|
7
|
+
* owner-key resolver and the transport factory together, or it returns nothing.
|
|
8
|
+
*
|
|
9
|
+
* ⚠️ FOURTEEN DEPENDENCIES, TWO OVER THE ORDER'S BOUND, RECORDED RATHER THAN HIDDEN — and the same
|
|
10
|
+
* answer as `signal-handlers.ts`. The seam a reader will look for is "inbound layer" versus
|
|
11
|
+
* "delivery transport", and it is not there: both need the session manager, the logger, the signing
|
|
12
|
+
* keys and the agent registry, so splitting produces two contexts of ten that share eight members.
|
|
13
|
+
* The order's own rule is that two modules needing the same values are one module.
|
|
14
|
+
*
|
|
15
|
+
* ⚠️ THREE VALUES WERE NARROWED ON THE WAY OUT, and each replaced a reach for something wider.
|
|
16
|
+
* `config.securityGateway` and `config.celloDir` became the two values themselves, so this module
|
|
17
|
+
* cannot read the rest of the daemon's configuration; and the handler map became
|
|
18
|
+
* `getCloseSessionHandler`, because the delivery path calls exactly one other handler and holding
|
|
19
|
+
* the whole map would let it call — or replace — any of them.
|
|
20
|
+
*/
|
|
21
|
+
import { join } from "node:path";
|
|
22
|
+
import { randomUUID } from "node:crypto";
|
|
23
|
+
import { createDocumentLayer, agentPublicKeyFromId } from "./document-layer.js";
|
|
24
|
+
import { isDocumentFrame } from "./document-frame-router.js";
|
|
25
|
+
import { createDocumentDeliveryTransport } from "./document-delivery-transport.js";
|
|
26
|
+
import { INBOUND_INJECTION_BLOCKED } from "@cello-protocol/gateway";
|
|
27
|
+
export function createDocumentWiring(deps) {
|
|
28
|
+
const { logger, sessionNodeManager, loadedAgents, keyProviders, securityGateway, celloDir, deliveryOpens, pubkeyOfAgent, openSessionFor, perAgentSignaling, runDiscoveryLookup, getReconcileScheduler, notificationDispatcher, getCloseSessionHandler, } = deps;
|
|
29
|
+
// M14 / DOD-DOC-INBOUND-2: the document layer, wired to the session content path.
|
|
30
|
+
//
|
|
31
|
+
// Built as ONE thing (see `document-layer.ts`): every half-wiring is a distinct silent failure —
|
|
32
|
+
// an inbound path with no ack producer leaves the peer retrying until their document stalls, a
|
|
33
|
+
// delivery worker with no inbound counterpart publishes envelopes nobody can answer.
|
|
34
|
+
//
|
|
35
|
+
// It shares the daemon's SQLCipher handle rather than opening its own. One encrypted database,
|
|
36
|
+
// one key, one file to back up — and a second opener is a second thing that has to agree about
|
|
37
|
+
// the key, which is how a store ends up plaintext.
|
|
38
|
+
// THE owner key. One function, used by the inbound router and the delivery sweep alike, because
|
|
39
|
+
// the two halves scoping differently is a silent-empty-query bug rather than a visible one.
|
|
40
|
+
//
|
|
41
|
+
// Reads `loadedAgents`, which is the live registry — `cello_create_agent` pushes into it at
|
|
42
|
+
// runtime — rather than the boot-time snapshot, so an agent registered after startup resolves
|
|
43
|
+
// without a restart. Lower-cased because the store compares owner keys as strings and a peer's
|
|
44
|
+
// id arrives off the wire in whatever case they sent.
|
|
45
|
+
const documentOwnerKeyFor = (agentName) => loadedAgents.find((a) => a.name === agentName)?.pubkey?.toLowerCase() ?? null;
|
|
46
|
+
const documentLayer = createDocumentLayer({
|
|
47
|
+
db: sessionNodeManager.getDb(),
|
|
48
|
+
logger,
|
|
49
|
+
// DOD-DOC-SCREEN-CONTENT-1 — the gateway, reached with TEXT for once.
|
|
50
|
+
//
|
|
51
|
+
// The same program that screens conversation messages, called from the document gate's shadow
|
|
52
|
+
// with the readable projected text instead of the signed binary envelope the wire carries.
|
|
53
|
+
//
|
|
54
|
+
// ── WHICH VERDICTS REFUSE, AND WHY IT IS NOT "ALL OF THEM" ────────────────────────────────
|
|
55
|
+
//
|
|
56
|
+
// ONLY the injection verdict. The gateway runs its whole inbound composition, and two of its
|
|
57
|
+
// other terminal blocks must not refuse a document:
|
|
58
|
+
//
|
|
59
|
+
// - the LANGUAGE ALLOWLIST (default: Latin only). A shared document written in Japanese,
|
|
60
|
+
// Arabic or Russian is ordinary use, and every update would be refused — permanently, since
|
|
61
|
+
// the same bytes are the same language on redelivery. The allowlist exists so a jailbreak
|
|
62
|
+
// phrased in a low-resource language cannot dodge English-trained screening; refusing a
|
|
63
|
+
// colleague's document outright is a far worse trade than that gap, and the character
|
|
64
|
+
// denylist still runs on every script.
|
|
65
|
+
// - the SIZE CAP, which is the sanitizer's per-message cap and not this path's limit. The
|
|
66
|
+
// gate already bounds an update and the whole document by its own numbers.
|
|
67
|
+
//
|
|
68
|
+
// A REDACT verdict is never honoured: rewriting one holder's replica is permanent divergence
|
|
69
|
+
// both sides converge on and neither can see.
|
|
70
|
+
//
|
|
71
|
+
// A TRANSIENT block means the gateway is DOWN or its screener faulted. The update is admitted —
|
|
72
|
+
// holding document convergence hostage to an optional layer breaks a layer that degrades by
|
|
73
|
+
// design — but it is LOGGED BY NAME, because a weaker guarantee that looks identical to the
|
|
74
|
+
// stronger one at every surface is how this whole class of defect survives.
|
|
75
|
+
screenProjected: async (text, ctx) => {
|
|
76
|
+
const verdict = await securityGateway.screenInbound(new TextEncoder().encode(text), {
|
|
77
|
+
direction: "inbound",
|
|
78
|
+
agentName: ctx.ownerAgentId,
|
|
79
|
+
sessionId: ctx.documentId,
|
|
80
|
+
...(ctx.correlationId !== undefined ? { correlationId: ctx.correlationId } : {}),
|
|
81
|
+
});
|
|
82
|
+
if (verdict.disposition !== "block")
|
|
83
|
+
return { block: false };
|
|
84
|
+
if (verdict.terminal !== true) {
|
|
85
|
+
logger.warn("document.inbound.screen.unavailable", {
|
|
86
|
+
documentId: ctx.documentId,
|
|
87
|
+
senderAgentId: ctx.senderAgentId,
|
|
88
|
+
reason: verdict.reason,
|
|
89
|
+
consequence: "the update was admitted WITHOUT a semantic screen",
|
|
90
|
+
correlationId: ctx.correlationId,
|
|
91
|
+
});
|
|
92
|
+
return { block: false };
|
|
93
|
+
}
|
|
94
|
+
if (verdict.reason !== INBOUND_INJECTION_BLOCKED) {
|
|
95
|
+
logger.info("document.inbound.screen.not_applicable", {
|
|
96
|
+
documentId: ctx.documentId,
|
|
97
|
+
senderAgentId: ctx.senderAgentId,
|
|
98
|
+
reason: verdict.reason,
|
|
99
|
+
consequence: "a terminal block this path does not apply to documents — admitted",
|
|
100
|
+
correlationId: ctx.correlationId,
|
|
101
|
+
});
|
|
102
|
+
return { block: false };
|
|
103
|
+
}
|
|
104
|
+
return { block: true, reason: verdict.reason };
|
|
105
|
+
},
|
|
106
|
+
// M14-D5: a remote agent's id IS its K_local pubkey hex, so this needs no lookup — and a lookup
|
|
107
|
+
// on the critical path of every signature check is precisely what it must not have.
|
|
108
|
+
publicKeyFor: agentPublicKeyFromId,
|
|
109
|
+
ownerKeyFor: documentOwnerKeyFor,
|
|
110
|
+
// Documents materialize as files under the operator's CELLO_DIR, alongside the database that
|
|
111
|
+
// is their source of truth. Not the current working directory: a daemon serves many agents and
|
|
112
|
+
// outlives any shell, so a relative root would scatter one operator's documents across
|
|
113
|
+
// wherever they happened to launch it from.
|
|
114
|
+
workspaceRoot: join(celloDir, "documents"),
|
|
115
|
+
// The ack's road to the peer — the same open-or-reuse-then-seal path every other document frame
|
|
116
|
+
// takes. Resolved from the owner KEY back to the agent name, because the transport is per agent.
|
|
117
|
+
sendFrame: async (ownerAgentId, peerAgentId, bytes, leafKind) => {
|
|
118
|
+
const agentName = loadedAgents.find((a) => a.pubkey?.toLowerCase() === ownerAgentId)?.name;
|
|
119
|
+
if (!agentName)
|
|
120
|
+
return { ok: false, reason: "document_ack_no_agent" };
|
|
121
|
+
const sent = await documentTransportFor(agentName).sendBytes({
|
|
122
|
+
peerAgentId,
|
|
123
|
+
documentId: "ack",
|
|
124
|
+
bytes,
|
|
125
|
+
correlationId: randomUUID(),
|
|
126
|
+
...(leafKind === undefined ? {} : { leafKind }),
|
|
127
|
+
});
|
|
128
|
+
return sent.ok ? { ok: true } : { ok: false, reason: sent.reason };
|
|
129
|
+
},
|
|
130
|
+
// Read LAZILY: the scheduler is constructed after this layer (it consumes the layer's sweep
|
|
131
|
+
// targets), so the binding must be resolved at call time rather than captured here.
|
|
132
|
+
onPeerRefusal: (ownerAgentId, peerAgentId, terminal) => getReconcileScheduler()?.noteRefusal(ownerAgentId, peerAgentId, terminal),
|
|
133
|
+
// ONE implementation, shared with the two-party test. It was a closure here, and that is exactly
|
|
134
|
+
// how the surface tests passed while the feature did nothing: the test wired this seam to
|
|
135
|
+
// `async () => ({ ok: true })`, which reported success, sent nothing, and agreed with whatever
|
|
136
|
+
// the near side did.
|
|
137
|
+
// DOD-DOC-WATCH-1 — the ONLY doorbell a document update can ring, and only for an agent that
|
|
138
|
+
// asked for it by naming the paths. §11.3's no-doorbell-on-update rule is otherwise untouched.
|
|
139
|
+
nudge: (ownerAgentId, documentId, paths) => {
|
|
140
|
+
const agentName = loadedAgents.find((a) => a.pubkey?.toLowerCase() === ownerAgentId)?.name;
|
|
141
|
+
if (!agentName)
|
|
142
|
+
return;
|
|
143
|
+
notificationDispatcher.dispatchDocumentWatch(agentName, documentId, paths);
|
|
144
|
+
},
|
|
145
|
+
sign: async (ownerAgentId, tbs) => {
|
|
146
|
+
// Signs as the OWNING agent, over the rejection's canonical preimage (DOD-DOC-REJECT-2).
|
|
147
|
+
//
|
|
148
|
+
// `ownerAgentId` here is the OWNER KEY — pubkey hex — because that is what the layer is
|
|
149
|
+
// scoped by, and `keyProviders` is keyed by agent NAME. This did `keyProviders.get(ownerAgentId)`
|
|
150
|
+
// and the comment above it asserted the two were the same thing. They are not: the lookup
|
|
151
|
+
// missed on every call, so every auto-rejection threw `document_rejection_unsigned` and NO
|
|
152
|
+
// rejection was ever signed or sent. A peer whose update we refused was never told why —
|
|
153
|
+
// their sender retried into a gate that would refuse it every time, until the document
|
|
154
|
+
// stalled for a reason neither operator could see.
|
|
155
|
+
//
|
|
156
|
+
// Invisible to every test: the unit and e2e fixtures alike wire `sign: (_o, tbs) => keys.sign(tbs)`,
|
|
157
|
+
// discarding the agent argument, so nothing could disagree about which key was resolved.
|
|
158
|
+
const agentName = loadedAgents.find((a) => a.pubkey?.toLowerCase() === ownerAgentId)?.name;
|
|
159
|
+
const provider = agentName ? keyProviders.get(agentName) : undefined;
|
|
160
|
+
if (!provider) {
|
|
161
|
+
// Still throws rather than substituting another agent's key — an earlier version took no
|
|
162
|
+
// agent at all and reached for whichever provider was first in the map, which is fabricated
|
|
163
|
+
// crypto wearing a real signature.
|
|
164
|
+
throw new Error(`document_rejection_unsigned: no key provider for owner ${ownerAgentId.slice(0, 16)}…, ` +
|
|
165
|
+
`so its rejection cannot be signed — refusing rather than writing an unsigned leaf ` +
|
|
166
|
+
`into an append-only log`);
|
|
167
|
+
}
|
|
168
|
+
return provider.sign(tbs);
|
|
169
|
+
},
|
|
170
|
+
});
|
|
171
|
+
// The classify-only half rides the same setter so the router and the ingest cannot disagree
|
|
172
|
+
// about what a document frame is (DOD-DOC-SCREEN-CLASSIFY-1).
|
|
173
|
+
sessionNodeManager.setOnDocumentFrame(documentLayer.onDocumentFrame, isDocumentFrame);
|
|
174
|
+
// M14 / DOD-DOC-DELIVERY-2 — the outbound half, wired only now that INBOUND-2 is. The ordering
|
|
175
|
+
// constraint on the DoD line is real and this is where it is honoured: a delivery worker with no
|
|
176
|
+
// inbound counterpart publishes envelopes nobody can answer, so every document would stall at the
|
|
177
|
+
// unacked ceiling.
|
|
178
|
+
//
|
|
179
|
+
// PER AGENT, because every capability below is: the signaling stream is authenticated as one
|
|
180
|
+
// agent, sessions belong to one agent, and `openSessionFor` signs as one agent. A single worker
|
|
181
|
+
// with an agent-shaped hole in it is how a delivery ends up sent under the wrong identity.
|
|
182
|
+
//
|
|
183
|
+
// The frame carrier, cached per agent (SYNC-P4: the delivery worker and its sweep are deleted —
|
|
184
|
+
// scheduling returns as the P5 reconcile triggers).
|
|
185
|
+
const documentTransports = new Map();
|
|
186
|
+
const documentTransportFor = (agentName) => {
|
|
187
|
+
const cached = documentTransports.get(agentName);
|
|
188
|
+
if (cached)
|
|
189
|
+
return cached;
|
|
190
|
+
const transport = createDocumentDeliveryTransport({
|
|
191
|
+
agentName,
|
|
192
|
+
logger,
|
|
193
|
+
// The SAME 3-state discovery answer cello_initiate_session uses, from the same closure —
|
|
194
|
+
// online / offline / unknown_agent, kept distinct from "the lookup itself failed". A second
|
|
195
|
+
// implementation of that distinction drifts until one of them reports a directory outage as
|
|
196
|
+
// the peer being offline.
|
|
197
|
+
lookupPeer: async (peerAgentId, correlationId) => {
|
|
198
|
+
const entry = perAgentSignaling.get(agentName);
|
|
199
|
+
if (!entry) {
|
|
200
|
+
// Our OWN stream is not up. A transport fault, never the peer being away — the
|
|
201
|
+
// reachability mapper turns this into a throw, which the worker logs as lookup_failed.
|
|
202
|
+
return { kind: "send_failed", reason: "signaling_unavailable" };
|
|
203
|
+
}
|
|
204
|
+
return runDiscoveryLookup(entry.signaling, peerAgentId, 10_000, correlationId);
|
|
205
|
+
},
|
|
206
|
+
// Most recent LAST — §16.4 reuses the most recent active session, and getSessionsForAgent
|
|
207
|
+
// returns newest first.
|
|
208
|
+
activeSessionsWith: (agent, peerAgentId) => sessionNodeManager
|
|
209
|
+
.getSessionsForAgent(agent)
|
|
210
|
+
.filter((row) => row.status === "active" && row.counterparty_pubkey === peerAgentId)
|
|
211
|
+
.map((row) => row.session_id)
|
|
212
|
+
.reverse(),
|
|
213
|
+
openSession: async (agent, peerAgentId, correlationId) => {
|
|
214
|
+
// DOD-M12B-DELIVERY-QUIET-1: THIS is the only place the delivery worker opens a session,
|
|
215
|
+
// so bracketing it is what makes "who opened this" knowable everywhere else. The window
|
|
216
|
+
// must cover the whole open — the inbound doorbell on a co-resident pair fires DURING
|
|
217
|
+
// negotiation, and the initiator-side reachability hook fires just before this returns.
|
|
218
|
+
// Released in `finally`: a throw that left the intent registered would silence this
|
|
219
|
+
// peer's doorbell for the life of the process, which is a worse outage than the storm.
|
|
220
|
+
const releaseDeliveryOpen = deliveryOpens.begin(pubkeyOfAgent(agent), peerAgentId);
|
|
221
|
+
try {
|
|
222
|
+
// The same path `cello_initiate_session` takes, now callable without an IPC connection.
|
|
223
|
+
const res = (await openSessionFor(agent, { targetPubkey: peerAgentId }));
|
|
224
|
+
if (res.ok !== true || typeof res.sessionId !== "string") {
|
|
225
|
+
return { ok: false, reason: res.reason ?? "session_open_failed", guidance: res.guidance };
|
|
226
|
+
}
|
|
227
|
+
logger.info("document.delivery.session_opened", { agent, peerAgentId, sessionId: res.sessionId, correlationId });
|
|
228
|
+
return { ok: true, sessionId: res.sessionId };
|
|
229
|
+
}
|
|
230
|
+
finally {
|
|
231
|
+
releaseDeliveryOpen();
|
|
232
|
+
}
|
|
233
|
+
},
|
|
234
|
+
sealSession: async (agent, sessionId, correlationId) => {
|
|
235
|
+
// §16.4: the autonomous session still carries the seal — the ceremony goes to zero, the
|
|
236
|
+
// seal does not. Only ever called for a session this worker OPENED; one it reused belongs
|
|
237
|
+
// to whoever started that conversation.
|
|
238
|
+
const close = getCloseSessionHandler();
|
|
239
|
+
if (!close) {
|
|
240
|
+
// Reported, not swallowed. The outcome of a missing handler is a live session node the
|
|
241
|
+
// operator never started, with no sealed record — the exact thing the seal exists to
|
|
242
|
+
// prevent, and previously indistinguishable from a clean seal.
|
|
243
|
+
logger.error("document.delivery.seal_failed", { agent, sessionId, reason: "close_handler_missing", correlationId });
|
|
244
|
+
return;
|
|
245
|
+
}
|
|
246
|
+
/**
|
|
247
|
+
* `wait_for_seal: true` — DOD-M15-CLOSEWAIT-1 review MEDIUM-5.
|
|
248
|
+
*
|
|
249
|
+
* This is NOT an IPC caller. It is an in-process worker awaiting the close for a session
|
|
250
|
+
* it opened itself, and the `ok !== true` check below is the only thing that ever reports
|
|
251
|
+
* a failed document-delivery seal. The new default answers `ok: true` at COMMITMENT, so
|
|
252
|
+
* without this flag that check could never fire for a ceremony failure again — §16.4's
|
|
253
|
+
* "the autonomous session still carries the seal" would rest on a detached task nobody
|
|
254
|
+
* awaited, retried or reported on.
|
|
255
|
+
*
|
|
256
|
+
* The whole point of answering early is that a human is watching a terminal. Nobody is
|
|
257
|
+
* watching this one, so it takes the blocking form — which also stops each delivery
|
|
258
|
+
* leaving a detached ceremony holding a visiting connection for up to eleven minutes,
|
|
259
|
+
* overlapping instead of serialising.
|
|
260
|
+
*/
|
|
261
|
+
const sealed = (await close({ session_id: sessionId, agent, wait_for_seal: true }, `doc-delivery-${correlationId}`));
|
|
262
|
+
if (sealed?.ok !== true) {
|
|
263
|
+
// `cello_close_session` has distinct failure codes — session_already_sealed,
|
|
264
|
+
// seal_interrupted_*, signaling_reconnecting — and every one of them landed nowhere.
|
|
265
|
+
logger.warn("document.delivery.seal_failed", { agent, sessionId, reason: sealed?.reason ?? "unknown", correlationId });
|
|
266
|
+
}
|
|
267
|
+
},
|
|
268
|
+
// `leafKind` IS LOAD-BEARING AND MUST BE FORWARDED. This adapter took five parameters and
|
|
269
|
+
// dropped the sixth, which TypeScript accepts without a word — a function of lower arity is
|
|
270
|
+
// assignable to one of higher arity, and the dep declares `leafKind?: number`. So the
|
|
271
|
+
// transport asked for 0x04, the composition root threw it away, and every document leaf
|
|
272
|
+
// still reached the relay as a MESSAGE. Verified on live traffic: daemon 0.0.145 shipped
|
|
273
|
+
// the fix everywhere except here and the wire was unchanged.
|
|
274
|
+
//
|
|
275
|
+
// ⚠️ AND `contentHashAlg` IS THE SECOND PARAMETER THIS ADAPTER MUST NOT DROP. The note above
|
|
276
|
+
// is about `leafKind`, which this wrapper silently swallowed while every other caller passed
|
|
277
|
+
// it — a thin pass-through is exactly where a new argument goes missing, because nothing
|
|
278
|
+
// about the call site looks wrong afterwards. B2b's failure mode if it happens again: the
|
|
279
|
+
// document path sends a salted hash labelled `sha256`, and every peer refuses it.
|
|
280
|
+
sendContent: (agent, sessionId, content, contentHash, correlationId, leafKind, contentHashAlg) => sessionNodeManager.sendContent(agent, sessionId, content, contentHash, correlationId, leafKind, contentHashAlg),
|
|
281
|
+
contentHashForSession: (agent, sessionId, content) => sessionNodeManager.contentHashForSession(agent, sessionId, content),
|
|
282
|
+
// The `0x04` doc leaf for a frame WE sent — the same step `cello_send` takes after its own
|
|
283
|
+
// successful send. See the comment at the call site for why this is delivery-critical and
|
|
284
|
+
// not audit bookkeeping.
|
|
285
|
+
appendLeaf: (agent, sessionId, contentHash, frameBytes, correlationId, assignedSeq) => {
|
|
286
|
+
// DOD-M12B-INDEX-1: a document leaf takes a position in the CONVERSATION's sequence space
|
|
287
|
+
// (deliberate — f75ea09), so it obeys the same discipline a message does — including
|
|
288
|
+
// being HELD when the position is ahead of the tail, which is why the real frame bytes
|
|
289
|
+
// have to travel with it.
|
|
290
|
+
const placed = sessionNodeManager.placeOwnLeaf(agent, sessionId, Buffer.from(contentHash).toString("hex"), frameBytes, assignedSeq, correlationId, "doc",
|
|
291
|
+
/**
|
|
292
|
+
* No proof — and the reason I first wrote here was FALSE, which review traced rather
|
|
293
|
+
* than read.
|
|
294
|
+
*
|
|
295
|
+
* ⚠️ IT SAID *"the document transport does not go through `sendContent`, so no Structure-1
|
|
296
|
+
* was signed."* Both halves are wrong. `document-delivery-transport.ts` calls
|
|
297
|
+
* `deps.sendContent(...)`, wired straight to `sessionNodeManager.sendContent` a few lines
|
|
298
|
+
* above this; and `session-relay-client.ts` signs the Structure-1 with no `leafKind` gate
|
|
299
|
+
* at all, so a `0x04` doc leaf is signed exactly like a message. **A proof exists and is
|
|
300
|
+
* discarded here.**
|
|
301
|
+
*
|
|
302
|
+
* That matters more than a wrong comment usually would, because this unit's whole thesis
|
|
303
|
+
* is *"`undefined` is a claim the author made rather than one the signature made for
|
|
304
|
+
* them"* — and the first claim made under the new signature was untrue.
|
|
305
|
+
*
|
|
306
|
+
* THE TRUE REASON, which is a better one: **no consumer.** A doc leaf released from a
|
|
307
|
+
* hold writes no transcript row — `#releaseHeld` skips `recordTranscriptMessage` for
|
|
308
|
+
* `kind === "doc"` — so there is nothing for the proof to reach. Discarding it is
|
|
309
|
+
* no-consumer-no-ship, deliberately.
|
|
310
|
+
*
|
|
311
|
+
* **If doc rows ever reach the transcript, `appendLeaf` needs an authorship parameter**
|
|
312
|
+
* and this `undefined` becomes a defect rather than a decision.
|
|
313
|
+
*/
|
|
314
|
+
undefined);
|
|
315
|
+
return { placed: placed.placed, leafIndex: placed.placed ? placed.leafIndex : null };
|
|
316
|
+
},
|
|
317
|
+
});
|
|
318
|
+
documentTransports.set(agentName, transport);
|
|
319
|
+
return transport;
|
|
320
|
+
};
|
|
321
|
+
return { documentLayer, documentOwnerKeyFor, documentTransportFor };
|
|
322
|
+
}
|
|
323
|
+
//# sourceMappingURL=document-wiring.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"document-wiring.js","sourceRoot":"","sources":["../src/document-wiring.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,66 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* DOD-DOC-STALE-WRITE-1 — telling an accidental deletion apart from a deliberate one.
|
|
3
|
+
*
|
|
4
|
+
* ── WHY THIS EXISTS ──────────────────────────────────────────────────────────────────────────────
|
|
5
|
+
*
|
|
6
|
+
* `cello_doc_write` takes the COMPLETE text, so anything absent from what you send is a deletion.
|
|
7
|
+
* That contract is deliberate and correct — a patch API means stale offsets, which in a CRDT is
|
|
8
|
+
* permanent corruption both sides converge on. What it cannot express is the difference between:
|
|
9
|
+
*
|
|
10
|
+
* - *"I read their paragraph and I do not want it"* — a real editorial act, and
|
|
11
|
+
* - *"their paragraph arrived while I was typing and I have never seen it"* — an accident.
|
|
12
|
+
*
|
|
13
|
+
* Both are the same bytes on the wire. Measured live on 2026-08-09 between two machines: a peer's
|
|
14
|
+
* paragraph was admitted at 12:35:41.807 and destroyed by a write published at 12:35:42.033. A 226ms
|
|
15
|
+
* window, hit on the first two-machine test anyone ran.
|
|
16
|
+
*
|
|
17
|
+
* **The lost text is the smaller harm.** The signed record cannot tell the two apart either, so an
|
|
18
|
+
* accident is permanently attributed to you as a deliberate rejection of your counterparty's work —
|
|
19
|
+
* in the one system whose selling point is that the trail cannot be disputed later.
|
|
20
|
+
*
|
|
21
|
+
* ── WHAT MAKES THE DISTINCTION AVAILABLE ─────────────────────────────────────────────────────────
|
|
22
|
+
*
|
|
23
|
+
* The read mark (`document_read_marks.seen_text`) stores the exact text you last read, durably. So
|
|
24
|
+
* the question "could you have seen this?" is answerable without asking you.
|
|
25
|
+
*
|
|
26
|
+
* ── THE RULE ─────────────────────────────────────────────────────────────────────────────────────
|
|
27
|
+
*
|
|
28
|
+
* **Refusal is conditioned on REMOVAL in every branch.** A write that only adds is never refused,
|
|
29
|
+
* whatever the read mark says — otherwise proposing a document and writing to it before reading it
|
|
30
|
+
* would be refused for no safety benefit.
|
|
31
|
+
*
|
|
32
|
+
* Given a removal: seen it → allowed, and recorded as deliberate. Not seen it (or no read mark at
|
|
33
|
+
* all) → refused, with what changed handed back.
|
|
34
|
+
*
|
|
35
|
+
* ── WHY LINES ────────────────────────────────────────────────────────────────────────────────────
|
|
36
|
+
*
|
|
37
|
+
* Both document roots project to canonical text — JSON through the deterministic serialiser, which
|
|
38
|
+
* sorts keys at every depth — so a removed key IS a removed line. One implementation covers both.
|
|
39
|
+
*
|
|
40
|
+
* Counted, not set-matched: a document with two identical lines that loses one has genuinely lost a
|
|
41
|
+
* line, and set logic would report nothing removed.
|
|
42
|
+
*/
|
|
43
|
+
/** What a proposed write would take out of the document, split by whether the author could have seen it. */
|
|
44
|
+
export interface RemovalVerdict {
|
|
45
|
+
/** Every line the write removes, seen or not. */
|
|
46
|
+
readonly removed: readonly string[];
|
|
47
|
+
/** Removed lines that were present in the text the author last read — a deliberate act. */
|
|
48
|
+
readonly deliberate: readonly string[];
|
|
49
|
+
/** Removed lines the author has no record of having seen — the accident. */
|
|
50
|
+
readonly unseen: readonly string[];
|
|
51
|
+
/** Whether the write must be refused. True exactly when `unseen` is non-empty. */
|
|
52
|
+
readonly refuse: boolean;
|
|
53
|
+
}
|
|
54
|
+
/**
|
|
55
|
+
* Decide whether `proposed` may replace `current`, given the text the author last read.
|
|
56
|
+
*
|
|
57
|
+
* `known` is every text this author demonstrably held — what they last read, what they last wrote,
|
|
58
|
+
* and what they were given at propose/accept. Empty means nothing is known, and every removal is
|
|
59
|
+
* treated as an accident.
|
|
60
|
+
*
|
|
61
|
+
* Whitespace-only lines are ignored throughout. Reflowing blank lines is not content destruction,
|
|
62
|
+
* and refusing a write over one would make the guard fire constantly on ordinary editing — a guard
|
|
63
|
+
* that cries wolf is a guard that gets worked around.
|
|
64
|
+
*/
|
|
65
|
+
export declare function classifyRemovals(current: string, proposed: string, known: readonly string[]): RemovalVerdict;
|
|
66
|
+
//# sourceMappingURL=document-write-guard.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"document-write-guard.d.ts","sourceRoot":"","sources":["../src/document-write-guard.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAyCG;AAEH,4GAA4G;AAC5G,MAAM,WAAW,cAAc;IAC7B,iDAAiD;IACjD,QAAQ,CAAC,OAAO,EAAE,SAAS,MAAM,EAAE,CAAC;IACpC,2FAA2F;IAC3F,QAAQ,CAAC,UAAU,EAAE,SAAS,MAAM,EAAE,CAAC;IACvC,4EAA4E;IAC5E,QAAQ,CAAC,MAAM,EAAE,SAAS,MAAM,EAAE,CAAC;IACnC,kFAAkF;IAClF,QAAQ,CAAC,MAAM,EAAE,OAAO,CAAC;CAC1B;AAaD;;;;;;;;;;GAUG;AACH,wBAAgB,gBAAgB,CAAC,OAAO,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,EAAE,KAAK,EAAE,SAAS,MAAM,EAAE,GAAG,cAAc,CA+B5G"}
|
|
@@ -0,0 +1,98 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* DOD-DOC-STALE-WRITE-1 — telling an accidental deletion apart from a deliberate one.
|
|
3
|
+
*
|
|
4
|
+
* ── WHY THIS EXISTS ──────────────────────────────────────────────────────────────────────────────
|
|
5
|
+
*
|
|
6
|
+
* `cello_doc_write` takes the COMPLETE text, so anything absent from what you send is a deletion.
|
|
7
|
+
* That contract is deliberate and correct — a patch API means stale offsets, which in a CRDT is
|
|
8
|
+
* permanent corruption both sides converge on. What it cannot express is the difference between:
|
|
9
|
+
*
|
|
10
|
+
* - *"I read their paragraph and I do not want it"* — a real editorial act, and
|
|
11
|
+
* - *"their paragraph arrived while I was typing and I have never seen it"* — an accident.
|
|
12
|
+
*
|
|
13
|
+
* Both are the same bytes on the wire. Measured live on 2026-08-09 between two machines: a peer's
|
|
14
|
+
* paragraph was admitted at 12:35:41.807 and destroyed by a write published at 12:35:42.033. A 226ms
|
|
15
|
+
* window, hit on the first two-machine test anyone ran.
|
|
16
|
+
*
|
|
17
|
+
* **The lost text is the smaller harm.** The signed record cannot tell the two apart either, so an
|
|
18
|
+
* accident is permanently attributed to you as a deliberate rejection of your counterparty's work —
|
|
19
|
+
* in the one system whose selling point is that the trail cannot be disputed later.
|
|
20
|
+
*
|
|
21
|
+
* ── WHAT MAKES THE DISTINCTION AVAILABLE ─────────────────────────────────────────────────────────
|
|
22
|
+
*
|
|
23
|
+
* The read mark (`document_read_marks.seen_text`) stores the exact text you last read, durably. So
|
|
24
|
+
* the question "could you have seen this?" is answerable without asking you.
|
|
25
|
+
*
|
|
26
|
+
* ── THE RULE ─────────────────────────────────────────────────────────────────────────────────────
|
|
27
|
+
*
|
|
28
|
+
* **Refusal is conditioned on REMOVAL in every branch.** A write that only adds is never refused,
|
|
29
|
+
* whatever the read mark says — otherwise proposing a document and writing to it before reading it
|
|
30
|
+
* would be refused for no safety benefit.
|
|
31
|
+
*
|
|
32
|
+
* Given a removal: seen it → allowed, and recorded as deliberate. Not seen it (or no read mark at
|
|
33
|
+
* all) → refused, with what changed handed back.
|
|
34
|
+
*
|
|
35
|
+
* ── WHY LINES ────────────────────────────────────────────────────────────────────────────────────
|
|
36
|
+
*
|
|
37
|
+
* Both document roots project to canonical text — JSON through the deterministic serialiser, which
|
|
38
|
+
* sorts keys at every depth — so a removed key IS a removed line. One implementation covers both.
|
|
39
|
+
*
|
|
40
|
+
* Counted, not set-matched: a document with two identical lines that loses one has genuinely lost a
|
|
41
|
+
* line, and set logic would report nothing removed.
|
|
42
|
+
*/
|
|
43
|
+
/** Line multiset. Blank and whitespace-only lines are excluded — see `classifyRemovals`. */
|
|
44
|
+
function lineCounts(text) {
|
|
45
|
+
const counts = new Map();
|
|
46
|
+
for (const raw of text.split("\n")) {
|
|
47
|
+
const line = raw.trim();
|
|
48
|
+
if (line.length === 0)
|
|
49
|
+
continue;
|
|
50
|
+
counts.set(line, (counts.get(line) ?? 0) + 1);
|
|
51
|
+
}
|
|
52
|
+
return counts;
|
|
53
|
+
}
|
|
54
|
+
/**
|
|
55
|
+
* Decide whether `proposed` may replace `current`, given the text the author last read.
|
|
56
|
+
*
|
|
57
|
+
* `known` is every text this author demonstrably held — what they last read, what they last wrote,
|
|
58
|
+
* and what they were given at propose/accept. Empty means nothing is known, and every removal is
|
|
59
|
+
* treated as an accident.
|
|
60
|
+
*
|
|
61
|
+
* Whitespace-only lines are ignored throughout. Reflowing blank lines is not content destruction,
|
|
62
|
+
* and refusing a write over one would make the guard fire constantly on ordinary editing — a guard
|
|
63
|
+
* that cries wolf is a guard that gets worked around.
|
|
64
|
+
*/
|
|
65
|
+
export function classifyRemovals(current, proposed, known) {
|
|
66
|
+
const before = lineCounts(current);
|
|
67
|
+
const after = lineCounts(proposed);
|
|
68
|
+
// EVERY text this author is known to have held, unioned. There is more than one source and
|
|
69
|
+
// omitting any of them refuses ordinary work:
|
|
70
|
+
// - what they last READ,
|
|
71
|
+
// - what they last WROTE (you have obviously seen your own text), and
|
|
72
|
+
// - what they were handed when they proposed or accepted the document.
|
|
73
|
+
// The first version took only the read, and refused every EDIT of an existing line by an author
|
|
74
|
+
// who had not called read — because changing a line removes the old line's text. Two existing
|
|
75
|
+
// tests caught it. A guard that fires on ordinary editing is worse than no guard: it gets removed.
|
|
76
|
+
const seenCounts = new Map();
|
|
77
|
+
for (const text of known) {
|
|
78
|
+
for (const [line, n] of lineCounts(text))
|
|
79
|
+
seenCounts.set(line, Math.max(seenCounts.get(line) ?? 0, n));
|
|
80
|
+
}
|
|
81
|
+
const removed = [];
|
|
82
|
+
const deliberate = [];
|
|
83
|
+
const unseen = [];
|
|
84
|
+
for (const [line, count] of before) {
|
|
85
|
+
const gone = count - (after.get(line) ?? 0);
|
|
86
|
+
if (gone <= 0)
|
|
87
|
+
continue;
|
|
88
|
+
removed.push(line);
|
|
89
|
+
// Seen ANY occurrence is enough. The author read this text; which copy of a duplicated line they
|
|
90
|
+
// meant to drop is not something the record can or should adjudicate.
|
|
91
|
+
if ((seenCounts.get(line) ?? 0) > 0)
|
|
92
|
+
deliberate.push(line);
|
|
93
|
+
else
|
|
94
|
+
unseen.push(line);
|
|
95
|
+
}
|
|
96
|
+
return { removed, deliberate, unseen, refuse: unseen.length > 0 };
|
|
97
|
+
}
|
|
98
|
+
//# sourceMappingURL=document-write-guard.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"document-write-guard.js","sourceRoot":"","sources":["../src/document-write-guard.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAyCG;AAcH,4FAA4F;AAC5F,SAAS,UAAU,CAAC,IAAY;IAC9B,MAAM,MAAM,GAAG,IAAI,GAAG,EAAkB,CAAC;IACzC,KAAK,MAAM,GAAG,IAAI,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC;QACnC,MAAM,IAAI,GAAG,GAAG,CAAC,IAAI,EAAE,CAAC;QACxB,IAAI,IAAI,CAAC,MAAM,KAAK,CAAC;YAAE,SAAS;QAChC,MAAM,CAAC,GAAG,CAAC,IAAI,EAAE,CAAC,MAAM,CAAC,GAAG,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC;IAChD,CAAC;IACD,OAAO,MAAM,CAAC;AAChB,CAAC;AAED;;;;;;;;;;GAUG;AACH,MAAM,UAAU,gBAAgB,CAAC,OAAe,EAAE,QAAgB,EAAE,KAAwB;IAC1F,MAAM,MAAM,GAAG,UAAU,CAAC,OAAO,CAAC,CAAC;IACnC,MAAM,KAAK,GAAG,UAAU,CAAC,QAAQ,CAAC,CAAC;IACnC,2FAA2F;IAC3F,8CAA8C;IAC9C,2BAA2B;IAC3B,wEAAwE;IACxE,yEAAyE;IACzE,gGAAgG;IAChG,8FAA8F;IAC9F,mGAAmG;IACnG,MAAM,UAAU,GAAG,IAAI,GAAG,EAAkB,CAAC;IAC7C,KAAK,MAAM,IAAI,IAAI,KAAK,EAAE,CAAC;QACzB,KAAK,MAAM,CAAC,IAAI,EAAE,CAAC,CAAC,IAAI,UAAU,CAAC,IAAI,CAAC;YAAE,UAAU,CAAC,GAAG,CAAC,IAAI,EAAE,IAAI,CAAC,GAAG,CAAC,UAAU,CAAC,GAAG,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC;IACzG,CAAC;IAED,MAAM,OAAO,GAAa,EAAE,CAAC;IAC7B,MAAM,UAAU,GAAa,EAAE,CAAC;IAChC,MAAM,MAAM,GAAa,EAAE,CAAC;IAE5B,KAAK,MAAM,CAAC,IAAI,EAAE,KAAK,CAAC,IAAI,MAAM,EAAE,CAAC;QACnC,MAAM,IAAI,GAAG,KAAK,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC;QAC5C,IAAI,IAAI,IAAI,CAAC;YAAE,SAAS;QACxB,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QACnB,iGAAiG;QACjG,sEAAsE;QACtE,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,GAAG,CAAC;YAAE,UAAU,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;;YACtD,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;IACzB,CAAC;IAED,OAAO,EAAE,OAAO,EAAE,UAAU,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;AACpE,CAAC"}
|