@cello-protocol/daemon 0.0.227 → 0.0.228
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/agent-admin-handlers.d.ts +56 -0
- package/dist/agent-admin-handlers.d.ts.map +1 -0
- package/dist/agent-admin-handlers.js +73 -0
- package/dist/agent-admin-handlers.js.map +1 -0
- package/dist/agent-handlers.d.ts +72 -0
- package/dist/agent-handlers.d.ts.map +1 -0
- package/dist/agent-handlers.js +604 -0
- package/dist/agent-handlers.js.map +1 -0
- package/dist/agent-id-migration.d.ts +70 -0
- package/dist/agent-id-migration.d.ts.map +1 -0
- package/dist/agent-id-migration.js +468 -0
- package/dist/agent-id-migration.js.map +1 -0
- package/dist/agent-loader.d.ts +37 -0
- package/dist/agent-loader.d.ts.map +1 -0
- package/dist/agent-loader.js +37 -0
- package/dist/agent-loader.js.map +1 -0
- package/dist/agent-selection-root.d.ts +29 -0
- package/dist/agent-selection-root.d.ts.map +1 -0
- package/dist/agent-selection-root.js +126 -0
- package/dist/agent-selection-root.js.map +1 -0
- package/dist/agent-selection.d.ts +73 -0
- package/dist/agent-selection.d.ts.map +1 -0
- package/dist/agent-selection.js +80 -0
- package/dist/agent-selection.js.map +1 -0
- package/dist/agent-settings-keys.d.ts +52 -0
- package/dist/agent-settings-keys.d.ts.map +1 -0
- package/dist/agent-settings-keys.js +114 -0
- package/dist/agent-settings-keys.js.map +1 -0
- package/dist/agent-state.d.ts +67 -0
- package/dist/agent-state.d.ts.map +1 -0
- package/dist/agent-state.js +66 -0
- package/dist/agent-state.js.map +1 -0
- package/dist/assignment-verify.d.ts +90 -0
- package/dist/assignment-verify.d.ts.map +1 -0
- package/dist/assignment-verify.js +301 -0
- package/dist/assignment-verify.js.map +1 -0
- package/dist/attendance-wiring.d.ts +23 -0
- package/dist/attendance-wiring.d.ts.map +1 -0
- package/dist/attendance-wiring.js +248 -0
- package/dist/attendance-wiring.js.map +1 -0
- package/dist/attestation-body.d.ts +47 -0
- package/dist/attestation-body.d.ts.map +1 -0
- package/dist/attestation-body.js +71 -0
- package/dist/attestation-body.js.map +1 -0
- package/dist/authorship-verification.d.ts +91 -0
- package/dist/authorship-verification.d.ts.map +1 -0
- package/dist/authorship-verification.js +532 -0
- package/dist/authorship-verification.js.map +1 -0
- package/dist/away-detection.d.ts +139 -0
- package/dist/away-detection.d.ts.map +1 -0
- package/dist/away-detection.js +186 -0
- package/dist/away-detection.js.map +1 -0
- package/dist/away-inbox-oneshot.d.ts +40 -0
- package/dist/away-inbox-oneshot.d.ts.map +1 -0
- package/dist/away-inbox-oneshot.js +311 -0
- package/dist/away-inbox-oneshot.js.map +1 -0
- package/dist/backup-restore-handlers.d.ts +10 -0
- package/dist/backup-restore-handlers.d.ts.map +1 -0
- package/dist/backup-restore-handlers.js +82 -0
- package/dist/backup-restore-handlers.js.map +1 -0
- package/dist/backup-restore.d.ts +102 -0
- package/dist/backup-restore.d.ts.map +1 -0
- package/dist/backup-restore.js +341 -0
- package/dist/backup-restore.js.map +1 -0
- package/dist/bin/cello-daemon.d.ts +13 -0
- package/dist/bin/cello-daemon.d.ts.map +1 -0
- package/dist/bin/cello-daemon.js.map +1 -0
- package/dist/boot-agents.d.ts +64 -0
- package/dist/boot-agents.d.ts.map +1 -0
- package/dist/boot-agents.js +241 -0
- package/dist/boot-agents.js.map +1 -0
- package/dist/boot-connection-state.d.ts +38 -0
- package/dist/boot-connection-state.d.ts.map +1 -0
- package/dist/boot-connection-state.js +95 -0
- package/dist/boot-connection-state.js.map +1 -0
- package/dist/boot-core.d.ts +36 -0
- package/dist/boot-core.d.ts.map +1 -0
- package/dist/boot-core.js +293 -0
- package/dist/boot-core.js.map +1 -0
- package/dist/boot-parked-content.d.ts +34 -0
- package/dist/boot-parked-content.d.ts.map +1 -0
- package/dist/boot-parked-content.js +528 -0
- package/dist/boot-parked-content.js.map +1 -0
- package/dist/boot-sweeps.d.ts +22 -0
- package/dist/boot-sweeps.d.ts.map +1 -0
- package/dist/boot-sweeps.js +51 -0
- package/dist/boot-sweeps.js.map +1 -0
- package/dist/bundled-consortium-manifest.d.ts +47 -0
- package/dist/bundled-consortium-manifest.d.ts.map +1 -0
- package/dist/bundled-consortium-manifest.js +116 -0
- package/dist/bundled-consortium-manifest.js.map +1 -0
- package/dist/cbor-blob-migration.d.ts +8 -0
- package/dist/cbor-blob-migration.d.ts.map +1 -0
- package/dist/cbor-blob-migration.js +116 -0
- package/dist/cbor-blob-migration.js.map +1 -0
- package/dist/challenge-verifier.d.ts +12 -0
- package/dist/challenge-verifier.d.ts.map +1 -0
- package/dist/challenge-verifier.js +11 -0
- package/dist/challenge-verifier.js.map +1 -0
- package/dist/channel-log-store.d.ts +80 -0
- package/dist/channel-log-store.d.ts.map +1 -0
- package/dist/channel-log-store.js +290 -0
- package/dist/channel-log-store.js.map +1 -0
- package/dist/close-commitment.d.ts +67 -0
- package/dist/close-commitment.d.ts.map +1 -0
- package/dist/close-commitment.js +78 -0
- package/dist/close-commitment.js.map +1 -0
- package/dist/close-session-handler.d.ts +94 -0
- package/dist/close-session-handler.d.ts.map +1 -0
- package/dist/close-session-handler.js +1418 -0
- package/dist/close-session-handler.js.map +1 -0
- package/dist/co-attendance.d.ts +29 -0
- package/dist/co-attendance.d.ts.map +1 -0
- package/dist/co-attendance.js +32 -0
- package/dist/co-attendance.js.map +1 -0
- package/dist/column-birth.d.ts +40 -0
- package/dist/column-birth.d.ts.map +1 -0
- package/dist/column-birth.js +61 -0
- package/dist/column-birth.js.map +1 -0
- package/dist/connect-or-start.d.ts +25 -0
- package/dist/connect-or-start.d.ts.map +1 -0
- package/dist/connect-or-start.js +175 -0
- package/dist/connect-or-start.js.map +1 -0
- package/dist/connection-agents.d.ts +16 -0
- package/dist/connection-agents.d.ts.map +1 -0
- package/dist/connection-agents.js +68 -0
- package/dist/connection-agents.js.map +1 -0
- package/dist/consent-migration.d.ts +49 -0
- package/dist/consent-migration.d.ts.map +1 -0
- package/dist/consent-migration.js +128 -0
- package/dist/consent-migration.js.map +1 -0
- package/dist/consortium-bootstrap.d.ts +138 -0
- package/dist/consortium-bootstrap.d.ts.map +1 -0
- package/dist/consortium-bootstrap.js +339 -0
- package/dist/consortium-bootstrap.js.map +1 -0
- package/dist/consortium-fingerprint.d.ts +115 -0
- package/dist/consortium-fingerprint.d.ts.map +1 -0
- package/dist/consortium-fingerprint.js +175 -0
- package/dist/consortium-fingerprint.js.map +1 -0
- package/dist/contact-handlers.d.ts +59 -0
- package/dist/contact-handlers.d.ts.map +1 -0
- package/dist/contact-handlers.js +343 -0
- package/dist/contact-handlers.js.map +1 -0
- package/dist/contact-pubkey-case.d.ts +65 -0
- package/dist/contact-pubkey-case.d.ts.map +1 -0
- package/dist/contact-pubkey-case.js +136 -0
- package/dist/contact-pubkey-case.js.map +1 -0
- package/dist/contacts-tier-migration.d.ts +90 -0
- package/dist/contacts-tier-migration.d.ts.map +1 -0
- package/dist/contacts-tier-migration.js +150 -0
- package/dist/contacts-tier-migration.js.map +1 -0
- package/dist/content-encryption-status.d.ts +111 -0
- package/dist/content-encryption-status.d.ts.map +1 -0
- package/dist/content-encryption-status.js +158 -0
- package/dist/content-encryption-status.js.map +1 -0
- package/dist/content-park-client.d.ts +90 -0
- package/dist/content-park-client.d.ts.map +1 -0
- package/dist/content-park-client.js +362 -0
- package/dist/content-park-client.js.map +1 -0
- package/dist/content-park.d.ts +52 -0
- package/dist/content-park.d.ts.map +1 -0
- package/dist/content-park.js +1309 -0
- package/dist/content-park.js.map +1 -0
- package/dist/cross-node-negotiation.d.ts +44 -0
- package/dist/cross-node-negotiation.d.ts.map +1 -0
- package/dist/cross-node-negotiation.js +34 -0
- package/dist/cross-node-negotiation.js.map +1 -0
- package/dist/daemon-handle.d.ts +57 -0
- package/dist/daemon-handle.d.ts.map +1 -0
- package/dist/daemon-handle.js +2 -0
- package/dist/daemon-handle.js.map +1 -0
- package/dist/daemon-status-report.d.ts +50 -0
- package/dist/daemon-status-report.d.ts.map +1 -0
- package/dist/daemon-status-report.js +81 -0
- package/dist/daemon-status-report.js.map +1 -0
- package/dist/daemon.d.ts +45 -0
- package/dist/daemon.d.ts.map +1 -0
- package/dist/daemon.js +1177 -0
- package/dist/daemon.js.map +1 -0
- package/dist/db-identity-store.d.ts +159 -0
- package/dist/db-identity-store.d.ts.map +1 -0
- package/dist/db-identity-store.js +502 -0
- package/dist/db-identity-store.js.map +1 -0
- package/dist/delivery-open-registry.d.ts +92 -0
- package/dist/delivery-open-registry.d.ts.map +1 -0
- package/dist/delivery-open-registry.js +121 -0
- package/dist/delivery-open-registry.js.map +1 -0
- package/dist/delivery-session-suspects.d.ts +56 -0
- package/dist/delivery-session-suspects.d.ts.map +1 -0
- package/dist/delivery-session-suspects.js +94 -0
- package/dist/delivery-session-suspects.js.map +1 -0
- package/dist/directory-auth-posture.d.ts +87 -0
- package/dist/directory-auth-posture.d.ts.map +1 -0
- package/dist/directory-auth-posture.js +134 -0
- package/dist/directory-auth-posture.js.map +1 -0
- package/dist/directory-bootstrap.d.ts +310 -0
- package/dist/directory-bootstrap.d.ts.map +1 -0
- package/dist/directory-bootstrap.js +557 -0
- package/dist/directory-bootstrap.js.map +1 -0
- package/dist/directory-connect.d.ts +27 -0
- package/dist/directory-connect.d.ts.map +1 -0
- package/dist/directory-connect.js +106 -0
- package/dist/directory-connect.js.map +1 -0
- package/dist/disconnect-cleanup.d.ts +51 -0
- package/dist/disconnect-cleanup.d.ts.map +1 -0
- package/dist/disconnect-cleanup.js +72 -0
- package/dist/disconnect-cleanup.js.map +1 -0
- package/dist/document-amendment-store.d.ts +120 -0
- package/dist/document-amendment-store.d.ts.map +1 -0
- package/dist/document-amendment-store.js +266 -0
- package/dist/document-amendment-store.js.map +1 -0
- package/dist/document-delivery-transport.d.ts +168 -0
- package/dist/document-delivery-transport.d.ts.map +1 -0
- package/dist/document-delivery-transport.js +206 -0
- package/dist/document-delivery-transport.js.map +1 -0
- package/dist/document-engine.d.ts +134 -0
- package/dist/document-engine.d.ts.map +1 -0
- package/dist/document-engine.js +282 -0
- package/dist/document-engine.js.map +1 -0
- package/dist/document-flag.d.ts +58 -0
- package/dist/document-flag.d.ts.map +1 -0
- package/dist/document-flag.js +70 -0
- package/dist/document-flag.js.map +1 -0
- package/dist/document-frame-router.d.ts +245 -0
- package/dist/document-frame-router.d.ts.map +1 -0
- package/dist/document-frame-router.js +397 -0
- package/dist/document-frame-router.js.map +1 -0
- package/dist/document-gate-wiring.d.ts +61 -0
- package/dist/document-gate-wiring.d.ts.map +1 -0
- package/dist/document-gate-wiring.js +125 -0
- package/dist/document-gate-wiring.js.map +1 -0
- package/dist/document-gate.d.ts +149 -0
- package/dist/document-gate.d.ts.map +1 -0
- package/dist/document-gate.js +509 -0
- package/dist/document-gate.js.map +1 -0
- package/dist/document-handlers.d.ts +47 -0
- package/dist/document-handlers.d.ts.map +1 -0
- package/dist/document-handlers.js +2203 -0
- package/dist/document-handlers.js.map +1 -0
- package/dist/document-handshake.d.ts +176 -0
- package/dist/document-handshake.d.ts.map +1 -0
- package/dist/document-handshake.js +452 -0
- package/dist/document-handshake.js.map +1 -0
- package/dist/document-inbound.d.ts +162 -0
- package/dist/document-inbound.d.ts.map +1 -0
- package/dist/document-inbound.js +530 -0
- package/dist/document-inbound.js.map +1 -0
- package/dist/document-json.d.ts +120 -0
- package/dist/document-json.d.ts.map +1 -0
- package/dist/document-json.js +191 -0
- package/dist/document-json.js.map +1 -0
- package/dist/document-layer.d.ts +215 -0
- package/dist/document-layer.d.ts.map +1 -0
- package/dist/document-layer.js +1025 -0
- package/dist/document-layer.js.map +1 -0
- package/dist/document-lifecycle.d.ts +52 -0
- package/dist/document-lifecycle.d.ts.map +1 -0
- package/dist/document-lifecycle.js +134 -0
- package/dist/document-lifecycle.js.map +1 -0
- package/dist/document-live-docs.d.ts +58 -0
- package/dist/document-live-docs.d.ts.map +1 -0
- package/dist/document-live-docs.js +126 -0
- package/dist/document-live-docs.js.map +1 -0
- package/dist/document-notify.d.ts +228 -0
- package/dist/document-notify.d.ts.map +1 -0
- package/dist/document-notify.js +580 -0
- package/dist/document-notify.js.map +1 -0
- package/dist/document-profile.d.ts +61 -0
- package/dist/document-profile.d.ts.map +1 -0
- package/dist/document-profile.js +112 -0
- package/dist/document-profile.js.map +1 -0
- package/dist/document-publish.d.ts +87 -0
- package/dist/document-publish.d.ts.map +1 -0
- package/dist/document-publish.js +173 -0
- package/dist/document-publish.js.map +1 -0
- package/dist/document-reachability.d.ts +42 -0
- package/dist/document-reachability.d.ts.map +1 -0
- package/dist/document-reachability.js +80 -0
- package/dist/document-reachability.js.map +1 -0
- package/dist/document-reconcile-engine.d.ts +66 -0
- package/dist/document-reconcile-engine.d.ts.map +1 -0
- package/dist/document-reconcile-engine.js +225 -0
- package/dist/document-reconcile-engine.js.map +1 -0
- package/dist/document-reconcile-scheduler.d.ts +163 -0
- package/dist/document-reconcile-scheduler.d.ts.map +1 -0
- package/dist/document-reconcile-scheduler.js +303 -0
- package/dist/document-reconcile-scheduler.js.map +1 -0
- package/dist/document-rejection.d.ts +251 -0
- package/dist/document-rejection.d.ts.map +1 -0
- package/dist/document-rejection.js +435 -0
- package/dist/document-rejection.js.map +1 -0
- package/dist/document-screen.d.ts +114 -0
- package/dist/document-screen.d.ts.map +1 -0
- package/dist/document-screen.js +223 -0
- package/dist/document-screen.js.map +1 -0
- package/dist/document-store.d.ts +372 -0
- package/dist/document-store.d.ts.map +1 -0
- package/dist/document-store.js +931 -0
- package/dist/document-store.js.map +1 -0
- package/dist/document-surface.d.ts +32 -0
- package/dist/document-surface.d.ts.map +1 -0
- package/dist/document-surface.js +151 -0
- package/dist/document-surface.js.map +1 -0
- package/dist/document-types.d.ts +94 -0
- package/dist/document-types.d.ts.map +1 -0
- package/dist/document-types.js +90 -0
- package/dist/document-types.js.map +1 -0
- package/dist/document-watch.d.ts +69 -0
- package/dist/document-watch.d.ts.map +1 -0
- package/dist/document-watch.js +108 -0
- package/dist/document-watch.js.map +1 -0
- package/dist/document-wiring.d.ts +53 -0
- package/dist/document-wiring.d.ts.map +1 -0
- package/dist/document-wiring.js +323 -0
- package/dist/document-wiring.js.map +1 -0
- package/dist/document-write-guard.d.ts +66 -0
- package/dist/document-write-guard.d.ts.map +1 -0
- package/dist/document-write-guard.js +98 -0
- package/dist/document-write-guard.js.map +1 -0
- package/dist/document-write-path.d.ts +94 -0
- package/dist/document-write-path.d.ts.map +1 -0
- package/dist/document-write-path.js +530 -0
- package/dist/document-write-path.js.map +1 -0
- package/dist/error-message.d.ts +7 -0
- package/dist/error-message.d.ts.map +1 -0
- package/dist/error-message.js +19 -0
- package/dist/error-message.js.map +1 -0
- package/dist/file-manifest-provider.d.ts +37 -0
- package/dist/file-manifest-provider.d.ts.map +1 -0
- package/dist/file-manifest-provider.js +105 -0
- package/dist/file-manifest-provider.js.map +1 -0
- package/dist/frame-values.d.ts +3 -0
- package/dist/frame-values.d.ts.map +1 -0
- package/dist/frame-values.js +84 -0
- package/dist/frame-values.js.map +1 -0
- package/dist/frontier-mismatch.d.ts +73 -0
- package/dist/frontier-mismatch.d.ts.map +1 -0
- package/dist/frontier-mismatch.js +89 -0
- package/dist/frontier-mismatch.js.map +1 -0
- package/dist/gateway-config-handlers.d.ts +26 -0
- package/dist/gateway-config-handlers.d.ts.map +1 -0
- package/dist/gateway-config-handlers.js +429 -0
- package/dist/gateway-config-handlers.js.map +1 -0
- package/dist/held-content.d.ts +145 -0
- package/dist/held-content.d.ts.map +1 -0
- package/dist/held-content.js +389 -0
- package/dist/held-content.js.map +1 -0
- package/dist/http-manifest-poll.d.ts +67 -0
- package/dist/http-manifest-poll.d.ts.map +1 -0
- package/dist/http-manifest-poll.js +150 -0
- package/dist/http-manifest-poll.js.map +1 -0
- package/dist/identity-migration.d.ts +40 -0
- package/dist/identity-migration.d.ts.map +1 -0
- package/dist/identity-migration.js +461 -0
- package/dist/identity-migration.js.map +1 -0
- package/dist/inbound-refusals.d.ts +283 -0
- package/dist/inbound-refusals.d.ts.map +1 -0
- package/dist/inbound-refusals.js +919 -0
- package/dist/inbound-refusals.js.map +1 -0
- package/dist/inbound-seal-request.d.ts +32 -0
- package/dist/inbound-seal-request.d.ts.map +1 -0
- package/dist/inbound-seal-request.js +228 -0
- package/dist/inbound-seal-request.js.map +1 -0
- package/dist/inbound-sessions.d.ts +291 -0
- package/dist/inbound-sessions.d.ts.map +1 -0
- package/dist/inbound-sessions.js +1609 -0
- package/dist/inbound-sessions.js.map +1 -0
- package/dist/inclusion-proof-handlers.d.ts +43 -0
- package/dist/inclusion-proof-handlers.d.ts.map +1 -0
- package/dist/inclusion-proof-handlers.js +565 -0
- package/dist/inclusion-proof-handlers.js.map +1 -0
- package/dist/inclusion-proof.d.ts +151 -0
- package/dist/inclusion-proof.d.ts.map +1 -0
- package/dist/inclusion-proof.js +228 -0
- package/dist/inclusion-proof.js.map +1 -0
- package/dist/index.d.ts +32 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js.map +1 -0
- package/dist/initiate-session-handler.d.ts +55 -0
- package/dist/initiate-session-handler.d.ts.map +1 -0
- package/dist/initiate-session-handler.js +310 -0
- package/dist/initiate-session-handler.js.map +1 -0
- package/dist/ipc-client.d.ts +31 -0
- package/dist/ipc-client.d.ts.map +1 -0
- package/dist/ipc-client.js +113 -0
- package/dist/ipc-client.js.map +1 -0
- package/dist/ipc-server.d.ts +63 -0
- package/dist/ipc-server.d.ts.map +1 -0
- package/dist/ipc-server.js +429 -0
- package/dist/ipc-server.js.map +1 -0
- package/dist/ipc-surface.d.ts +44 -0
- package/dist/ipc-surface.d.ts.map +1 -0
- package/dist/ipc-surface.js +107 -0
- package/dist/ipc-surface.js.map +1 -0
- package/dist/line-lcs.d.ts +51 -0
- package/dist/line-lcs.d.ts.map +1 -0
- package/dist/line-lcs.js +71 -0
- package/dist/line-lcs.js.map +1 -0
- package/dist/lock-file.d.ts +39 -0
- package/dist/lock-file.d.ts.map +1 -0
- package/dist/lock-file.js +120 -0
- package/dist/lock-file.js.map +1 -0
- package/dist/log-collapse.d.ts +66 -0
- package/dist/log-collapse.d.ts.map +1 -0
- package/dist/log-collapse.js +244 -0
- package/dist/log-collapse.js.map +1 -0
- package/dist/log-rotate.d.ts +67 -0
- package/dist/log-rotate.d.ts.map +1 -0
- package/dist/log-rotate.js +134 -0
- package/dist/log-rotate.js.map +1 -0
- package/dist/manifest-deps.d.ts +25 -0
- package/dist/manifest-deps.d.ts.map +1 -0
- package/dist/manifest-deps.js +151 -0
- package/dist/manifest-deps.js.map +1 -0
- package/dist/manifest-poll-scheduler.d.ts +31 -0
- package/dist/manifest-poll-scheduler.d.ts.map +1 -0
- package/dist/manifest-poll-scheduler.js +59 -0
- package/dist/manifest-poll-scheduler.js.map +1 -0
- package/dist/manifest-validity.d.ts +153 -0
- package/dist/manifest-validity.d.ts.map +1 -0
- package/dist/manifest-validity.js +268 -0
- package/dist/manifest-validity.js.map +1 -0
- package/dist/manifest-version-store-db.d.ts +24 -0
- package/dist/manifest-version-store-db.d.ts.map +1 -0
- package/dist/manifest-version-store-db.js +58 -0
- package/dist/manifest-version-store-db.js.map +1 -0
- package/dist/manifest-version-store.d.ts +16 -0
- package/dist/manifest-version-store.d.ts.map +1 -0
- package/dist/manifest-version-store.js +15 -0
- package/dist/manifest-version-store.js.map +1 -0
- package/dist/network-directory-node.d.ts +136 -0
- package/dist/network-directory-node.d.ts.map +1 -0
- package/dist/network-directory-node.js +810 -0
- package/dist/network-directory-node.js.map +1 -0
- package/dist/nonce-dedup.d.ts +68 -0
- package/dist/nonce-dedup.d.ts.map +1 -0
- package/dist/nonce-dedup.js +205 -0
- package/dist/nonce-dedup.js.map +1 -0
- package/dist/notification-dispatcher.d.ts +92 -0
- package/dist/notification-dispatcher.d.ts.map +1 -0
- package/dist/notification-dispatcher.js +210 -0
- package/dist/notification-dispatcher.js.map +1 -0
- package/dist/notification-handlers.d.ts +53 -0
- package/dist/notification-handlers.d.ts.map +1 -0
- package/dist/notification-handlers.js +461 -0
- package/dist/notification-handlers.js.map +1 -0
- package/dist/onboarding-guidance.d.ts +79 -0
- package/dist/onboarding-guidance.d.ts.map +1 -0
- package/dist/onboarding-guidance.js +95 -0
- package/dist/onboarding-guidance.js.map +1 -0
- package/dist/operator-guidance.d.ts +25 -0
- package/dist/operator-guidance.d.ts.map +1 -0
- package/dist/operator-guidance.js +50 -0
- package/dist/operator-guidance.js.map +1 -0
- package/dist/orphan-triage.d.ts +130 -0
- package/dist/orphan-triage.d.ts.map +1 -0
- package/dist/orphan-triage.js +207 -0
- package/dist/orphan-triage.js.map +1 -0
- package/dist/outbound-sessions.d.ts +126 -0
- package/dist/outbound-sessions.d.ts.map +1 -0
- package/dist/outbound-sessions.js +1052 -0
- package/dist/outbound-sessions.js.map +1 -0
- package/dist/park-envelope.d.ts +329 -0
- package/dist/park-envelope.d.ts.map +1 -0
- package/dist/park-envelope.js +509 -0
- package/dist/park-envelope.js.map +1 -0
- package/dist/park-recovery.d.ts +273 -0
- package/dist/park-recovery.d.ts.map +1 -0
- package/dist/park-recovery.js +717 -0
- package/dist/park-recovery.js.map +1 -0
- package/dist/park-refusals.d.ts +147 -0
- package/dist/park-refusals.d.ts.map +1 -0
- package/dist/park-refusals.js +331 -0
- package/dist/park-refusals.js.map +1 -0
- package/dist/quarantine-framing.d.ts +92 -0
- package/dist/quarantine-framing.d.ts.map +1 -0
- package/dist/quarantine-framing.js +111 -0
- package/dist/quarantine-framing.js.map +1 -0
- package/dist/reconnect-drain.d.ts +22 -0
- package/dist/reconnect-drain.d.ts.map +1 -0
- package/dist/reconnect-drain.js +65 -0
- package/dist/reconnect-drain.js.map +1 -0
- package/dist/recovered-position.d.ts +14 -0
- package/dist/recovered-position.d.ts.map +1 -0
- package/dist/recovered-position.js +59 -0
- package/dist/recovered-position.js.map +1 -0
- package/dist/refusal-notices.d.ts +196 -0
- package/dist/refusal-notices.d.ts.map +1 -0
- package/dist/refusal-notices.js +516 -0
- package/dist/refusal-notices.js.map +1 -0
- package/dist/refusal-reasons.d.ts +245 -0
- package/dist/refusal-reasons.d.ts.map +1 -0
- package/dist/refusal-reasons.js +363 -0
- package/dist/refusal-reasons.js.map +1 -0
- package/dist/register-handler.d.ts +36 -0
- package/dist/register-handler.d.ts.map +1 -0
- package/dist/register-handler.js +285 -0
- package/dist/register-handler.js.map +1 -0
- package/dist/registration-context.d.ts +72 -0
- package/dist/registration-context.d.ts.map +1 -0
- package/dist/registration-context.js +126 -0
- package/dist/registration-context.js.map +1 -0
- package/dist/registration-manager.d.ts +94 -0
- package/dist/registration-manager.d.ts.map +1 -0
- package/dist/registration-manager.js +585 -0
- package/dist/registration-manager.js.map +1 -0
- package/dist/registration-persistence.d.ts +183 -0
- package/dist/registration-persistence.d.ts.map +1 -0
- package/dist/registration-persistence.js +263 -0
- package/dist/registration-persistence.js.map +1 -0
- package/dist/registry-poll.d.ts +52 -0
- package/dist/registry-poll.d.ts.map +1 -0
- package/dist/registry-poll.js +140 -0
- package/dist/registry-poll.js.map +1 -0
- package/dist/registry-version-store-db.d.ts +22 -0
- package/dist/registry-version-store-db.d.ts.map +1 -0
- package/dist/registry-version-store-db.js +50 -0
- package/dist/registry-version-store-db.js.map +1 -0
- package/dist/relay-endpoints.d.ts +18 -0
- package/dist/relay-endpoints.d.ts.map +1 -0
- package/dist/relay-endpoints.js +9 -0
- package/dist/relay-endpoints.js.map +1 -0
- package/dist/relay-only.d.ts +140 -0
- package/dist/relay-only.d.ts.map +1 -0
- package/dist/relay-only.js +193 -0
- package/dist/relay-only.js.map +1 -0
- package/dist/relay-receipt-store.d.ts +155 -0
- package/dist/relay-receipt-store.d.ts.map +1 -0
- package/dist/relay-receipt-store.js +284 -0
- package/dist/relay-receipt-store.js.map +1 -0
- package/dist/relay-reconnect.d.ts +32 -0
- package/dist/relay-reconnect.d.ts.map +1 -0
- package/dist/relay-reconnect.js +29 -0
- package/dist/relay-reconnect.js.map +1 -0
- package/dist/reply-lag.d.ts +11 -0
- package/dist/reply-lag.d.ts.map +1 -0
- package/dist/reply-lag.js +46 -0
- package/dist/reply-lag.js.map +1 -0
- package/dist/resolve-named-agent.d.ts +49 -0
- package/dist/resolve-named-agent.d.ts.map +1 -0
- package/dist/resolve-named-agent.js +77 -0
- package/dist/resolve-named-agent.js.map +1 -0
- package/dist/restart-seal-resolver.d.ts +110 -0
- package/dist/restart-seal-resolver.d.ts.map +1 -0
- package/dist/restart-seal-resolver.js +353 -0
- package/dist/restart-seal-resolver.js.map +1 -0
- package/dist/resume-last-seen.d.ts +15 -0
- package/dist/resume-last-seen.d.ts.map +1 -0
- package/dist/resume-last-seen.js +44 -0
- package/dist/resume-last-seen.js.map +1 -0
- package/dist/retry-queue.d.ts +203 -0
- package/dist/retry-queue.d.ts.map +1 -0
- package/dist/retry-queue.js +701 -0
- package/dist/retry-queue.js.map +1 -0
- package/dist/roster-freshness.d.ts +160 -0
- package/dist/roster-freshness.d.ts.map +1 -0
- package/dist/roster-freshness.js +250 -0
- package/dist/roster-freshness.js.map +1 -0
- package/dist/screening-status.d.ts +15 -0
- package/dist/screening-status.d.ts.map +1 -0
- package/dist/screening-status.js +65 -0
- package/dist/screening-status.js.map +1 -0
- package/dist/seal-carried-close.d.ts +37 -0
- package/dist/seal-carried-close.d.ts.map +1 -0
- package/dist/seal-carried-close.js +179 -0
- package/dist/seal-carried-close.js.map +1 -0
- package/dist/seal-certificate-pull.d.ts +79 -0
- package/dist/seal-certificate-pull.d.ts.map +1 -0
- package/dist/seal-certificate-pull.js +186 -0
- package/dist/seal-certificate-pull.js.map +1 -0
- package/dist/seal-certified-root-check.d.ts +37 -0
- package/dist/seal-certified-root-check.d.ts.map +1 -0
- package/dist/seal-certified-root-check.js +127 -0
- package/dist/seal-certified-root-check.js.map +1 -0
- package/dist/seal-coordinator.d.ts +118 -0
- package/dist/seal-coordinator.d.ts.map +1 -0
- package/dist/seal-coordinator.js +927 -0
- package/dist/seal-coordinator.js.map +1 -0
- package/dist/seal-escalation.d.ts +80 -0
- package/dist/seal-escalation.d.ts.map +1 -0
- package/dist/seal-escalation.js +283 -0
- package/dist/seal-escalation.js.map +1 -0
- package/dist/seal-evidence-root-check.d.ts +70 -0
- package/dist/seal-evidence-root-check.d.ts.map +1 -0
- package/dist/seal-evidence-root-check.js +199 -0
- package/dist/seal-evidence-root-check.js.map +1 -0
- package/dist/seal-failure-store.d.ts +139 -0
- package/dist/seal-failure-store.d.ts.map +1 -0
- package/dist/seal-failure-store.js +207 -0
- package/dist/seal-failure-store.js.map +1 -0
- package/dist/seal-flows.d.ts +107 -0
- package/dist/seal-flows.d.ts.map +1 -0
- package/dist/seal-flows.js +638 -0
- package/dist/seal-flows.js.map +1 -0
- package/dist/seal-frontier-verify.d.ts +103 -0
- package/dist/seal-frontier-verify.d.ts.map +1 -0
- package/dist/seal-frontier-verify.js +143 -0
- package/dist/seal-frontier-verify.js.map +1 -0
- package/dist/seal-leaf.d.ts +58 -0
- package/dist/seal-leaf.d.ts.map +1 -0
- package/dist/seal-leaf.js +112 -0
- package/dist/seal-leaf.js.map +1 -0
- package/dist/seal-legibility-tbs.d.ts +25 -0
- package/dist/seal-legibility-tbs.d.ts.map +1 -0
- package/dist/seal-legibility-tbs.js +77 -0
- package/dist/seal-legibility-tbs.js.map +1 -0
- package/dist/seal-local-terminus.d.ts +41 -0
- package/dist/seal-local-terminus.d.ts.map +1 -0
- package/dist/seal-local-terminus.js +170 -0
- package/dist/seal-local-terminus.js.map +1 -0
- package/dist/seal-receipt-upgrade.d.ts +30 -0
- package/dist/seal-receipt-upgrade.d.ts.map +1 -0
- package/dist/seal-receipt-upgrade.js +49 -0
- package/dist/seal-receipt-upgrade.js.map +1 -0
- package/dist/seal-relay-silence.d.ts +51 -0
- package/dist/seal-relay-silence.d.ts.map +1 -0
- package/dist/seal-relay-silence.js +76 -0
- package/dist/seal-relay-silence.js.map +1 -0
- package/dist/seal-settle.d.ts +38 -0
- package/dist/seal-settle.d.ts.map +1 -0
- package/dist/seal-settle.js +33 -0
- package/dist/seal-settle.js.map +1 -0
- package/dist/seal-upgrade.d.ts +107 -0
- package/dist/seal-upgrade.d.ts.map +1 -0
- package/dist/seal-upgrade.js +200 -0
- package/dist/seal-upgrade.js.map +1 -0
- package/dist/sealed-conversation.d.ts +36 -0
- package/dist/sealed-conversation.d.ts.map +1 -0
- package/dist/sealed-conversation.js +171 -0
- package/dist/sealed-conversation.js.map +1 -0
- package/dist/sealed-leaf-set.d.ts +92 -0
- package/dist/sealed-leaf-set.d.ts.map +1 -0
- package/dist/sealed-leaf-set.js +122 -0
- package/dist/sealed-leaf-set.js.map +1 -0
- package/dist/send-claims.d.ts +56 -0
- package/dist/send-claims.d.ts.map +1 -0
- package/dist/send-claims.js +50 -0
- package/dist/send-claims.js.map +1 -0
- package/dist/session-assignment-parser.d.ts +104 -0
- package/dist/session-assignment-parser.d.ts.map +1 -0
- package/dist/session-assignment-parser.js +345 -0
- package/dist/session-assignment-parser.js.map +1 -0
- package/dist/session-category.d.ts +19 -0
- package/dist/session-category.d.ts.map +1 -0
- package/dist/session-category.js +14 -0
- package/dist/session-category.js.map +1 -0
- package/dist/session-ceremony.d.ts +297 -0
- package/dist/session-ceremony.d.ts.map +1 -0
- package/dist/session-ceremony.js +964 -0
- package/dist/session-ceremony.js.map +1 -0
- package/dist/session-closed.d.ts +79 -0
- package/dist/session-closed.d.ts.map +1 -0
- package/dist/session-closed.js +189 -0
- package/dist/session-closed.js.map +1 -0
- package/dist/session-connection-gater.d.ts +148 -0
- package/dist/session-connection-gater.d.ts.map +1 -0
- package/dist/session-connection-gater.js +332 -0
- package/dist/session-connection-gater.js.map +1 -0
- package/dist/session-content-context.d.ts +162 -0
- package/dist/session-content-context.d.ts.map +1 -0
- package/dist/session-content-context.js +2 -0
- package/dist/session-content-context.js.map +1 -0
- package/dist/session-content-handlers.d.ts +82 -0
- package/dist/session-content-handlers.d.ts.map +1 -0
- package/dist/session-content-handlers.js +1382 -0
- package/dist/session-content-handlers.js.map +1 -0
- package/dist/session-content-ingest.d.ts +206 -0
- package/dist/session-content-ingest.d.ts.map +1 -0
- package/dist/session-content-ingest.js +2167 -0
- package/dist/session-content-ingest.js.map +1 -0
- package/dist/session-content-send.d.ts +191 -0
- package/dist/session-content-send.d.ts.map +1 -0
- package/dist/session-content-send.js +1360 -0
- package/dist/session-content-send.js.map +1 -0
- package/dist/session-delivery-acks.d.ts +169 -0
- package/dist/session-delivery-acks.d.ts.map +1 -0
- package/dist/session-delivery-acks.js +569 -0
- package/dist/session-delivery-acks.js.map +1 -0
- package/dist/session-ephemerals.d.ts +279 -0
- package/dist/session-ephemerals.d.ts.map +1 -0
- package/dist/session-ephemerals.js +591 -0
- package/dist/session-ephemerals.js.map +1 -0
- package/dist/session-leaf-records.d.ts +159 -0
- package/dist/session-leaf-records.d.ts.map +1 -0
- package/dist/session-leaf-records.js +408 -0
- package/dist/session-leaf-records.js.map +1 -0
- package/dist/session-lifecycle.d.ts +303 -0
- package/dist/session-lifecycle.d.ts.map +1 -0
- package/dist/session-lifecycle.js +1679 -0
- package/dist/session-lifecycle.js.map +1 -0
- package/dist/session-liveness.d.ts +135 -0
- package/dist/session-liveness.d.ts.map +1 -0
- package/dist/session-liveness.js +347 -0
- package/dist/session-liveness.js.map +1 -0
- package/dist/session-name.d.ts +35 -0
- package/dist/session-name.d.ts.map +1 -0
- package/dist/session-name.js +60 -0
- package/dist/session-name.js.map +1 -0
- package/dist/session-node-factory.d.ts +18 -0
- package/dist/session-node-factory.d.ts.map +1 -0
- package/dist/session-node-factory.js +182 -0
- package/dist/session-node-factory.js.map +1 -0
- package/dist/session-node-manager.d.ts +877 -0
- package/dist/session-node-manager.d.ts.map +1 -0
- package/dist/session-node-manager.js +2998 -0
- package/dist/session-node-manager.js.map +1 -0
- package/dist/session-node-types.d.ts +1057 -0
- package/dist/session-node-types.d.ts.map +1 -0
- package/dist/session-node-types.js +657 -0
- package/dist/session-node-types.js.map +1 -0
- package/dist/session-notify.d.ts +46 -0
- package/dist/session-notify.d.ts.map +1 -0
- package/dist/session-notify.js +116 -0
- package/dist/session-notify.js.map +1 -0
- package/dist/session-own-chain-store.d.ts +65 -0
- package/dist/session-own-chain-store.d.ts.map +1 -0
- package/dist/session-own-chain-store.js +75 -0
- package/dist/session-own-chain-store.js.map +1 -0
- package/dist/session-queries.d.ts +476 -0
- package/dist/session-queries.d.ts.map +1 -0
- package/dist/session-queries.js +1007 -0
- package/dist/session-queries.js.map +1 -0
- package/dist/session-read-handlers.d.ts +87 -0
- package/dist/session-read-handlers.d.ts.map +1 -0
- package/dist/session-read-handlers.js +689 -0
- package/dist/session-read-handlers.js.map +1 -0
- package/dist/session-records.d.ts +341 -0
- package/dist/session-records.d.ts.map +1 -0
- package/dist/session-records.js +858 -0
- package/dist/session-records.js.map +1 -0
- package/dist/session-relay-client.d.ts +659 -0
- package/dist/session-relay-client.d.ts.map +1 -0
- package/dist/session-relay-client.js +2876 -0
- package/dist/session-relay-client.js.map +1 -0
- package/dist/session-relay.d.ts +397 -0
- package/dist/session-relay.d.ts.map +1 -0
- package/dist/session-relay.js +1636 -0
- package/dist/session-relay.js.map +1 -0
- package/dist/session-salt-agreement.d.ts +331 -0
- package/dist/session-salt-agreement.d.ts.map +1 -0
- package/dist/session-salt-agreement.js +472 -0
- package/dist/session-salt-agreement.js.map +1 -0
- package/dist/session-salts.d.ts +432 -0
- package/dist/session-salts.d.ts.map +1 -0
- package/dist/session-salts.js +1540 -0
- package/dist/session-salts.js.map +1 -0
- package/dist/session-schema.d.ts +30 -0
- package/dist/session-schema.d.ts.map +1 -0
- package/dist/session-schema.js +877 -0
- package/dist/session-schema.js.map +1 -0
- package/dist/session-seal-leaf-store.d.ts +70 -0
- package/dist/session-seal-leaf-store.d.ts.map +1 -0
- package/dist/session-seal-leaf-store.js +105 -0
- package/dist/session-seal-leaf-store.js.map +1 -0
- package/dist/session-seal.d.ts +334 -0
- package/dist/session-seal.d.ts.map +1 -0
- package/dist/session-seal.js +1017 -0
- package/dist/session-seal.js.map +1 -0
- package/dist/session-terminal-refusal.d.ts +65 -0
- package/dist/session-terminal-refusal.d.ts.map +1 -0
- package/dist/session-terminal-refusal.js +87 -0
- package/dist/session-terminal-refusal.js.map +1 -0
- package/dist/session-tree.d.ts +110 -0
- package/dist/session-tree.d.ts.map +1 -0
- package/dist/session-tree.js +144 -0
- package/dist/session-tree.js.map +1 -0
- package/dist/session-views.d.ts +47 -0
- package/dist/session-views.d.ts.map +1 -0
- package/dist/session-views.js +278 -0
- package/dist/session-views.js.map +1 -0
- package/dist/signal-handlers.d.ts +63 -0
- package/dist/signal-handlers.d.ts.map +1 -0
- package/dist/signal-handlers.js +980 -0
- package/dist/signal-handlers.js.map +1 -0
- package/dist/signal-requirement-policy.d.ts +51 -0
- package/dist/signal-requirement-policy.d.ts.map +1 -0
- package/dist/signal-requirement-policy.js +89 -0
- package/dist/signal-requirement-policy.js.map +1 -0
- package/dist/signal-revocability.d.ts +49 -0
- package/dist/signal-revocability.d.ts.map +1 -0
- package/dist/signal-revocability.js +93 -0
- package/dist/signal-revocability.js.map +1 -0
- package/dist/signal-submission.d.ts +181 -0
- package/dist/signal-submission.d.ts.map +1 -0
- package/dist/signal-submission.js +368 -0
- package/dist/signal-submission.js.map +1 -0
- package/dist/signaling-connect.d.ts +118 -0
- package/dist/signaling-connect.d.ts.map +1 -0
- package/dist/signaling-connect.js +538 -0
- package/dist/signaling-connect.js.map +1 -0
- package/dist/signaling-wiring.d.ts +105 -0
- package/dist/signaling-wiring.d.ts.map +1 -0
- package/dist/signaling-wiring.js +393 -0
- package/dist/signaling-wiring.js.map +1 -0
- package/dist/singleton-lock.d.ts +85 -0
- package/dist/singleton-lock.d.ts.map +1 -0
- package/dist/singleton-lock.js +219 -0
- package/dist/singleton-lock.js.map +1 -0
- package/dist/sqlcipher-db.d.ts +139 -0
- package/dist/sqlcipher-db.d.ts.map +1 -0
- package/dist/sqlcipher-db.js +357 -0
- package/dist/sqlcipher-db.js.map +1 -0
- package/dist/standing-receivers.d.ts +319 -0
- package/dist/standing-receivers.d.ts.map +1 -0
- package/dist/standing-receivers.js +1295 -0
- package/dist/standing-receivers.js.map +1 -0
- package/dist/start-agent.d.ts +64 -0
- package/dist/start-agent.d.ts.map +1 -0
- package/dist/start-agent.js +136 -0
- package/dist/start-agent.js.map +1 -0
- package/dist/status-handler.d.ts +54 -0
- package/dist/status-handler.d.ts.map +1 -0
- package/dist/status-handler.js +61 -0
- package/dist/status-handler.js.map +1 -0
- package/dist/submission-retry.d.ts +208 -0
- package/dist/submission-retry.d.ts.map +1 -0
- package/dist/submission-retry.js +506 -0
- package/dist/submission-retry.js.map +1 -0
- package/dist/telegram-bot-client.d.ts +34 -0
- package/dist/telegram-bot-client.d.ts.map +1 -0
- package/dist/telegram-bot-client.js +36 -0
- package/dist/telegram-bot-client.js.map +1 -0
- package/dist/telegram-doorbell.d.ts +38 -0
- package/dist/telegram-doorbell.d.ts.map +1 -0
- package/dist/telegram-doorbell.js +140 -0
- package/dist/telegram-doorbell.js.map +1 -0
- package/dist/test-handlers.d.ts +62 -0
- package/dist/test-handlers.d.ts.map +1 -0
- package/dist/test-handlers.js +240 -0
- package/dist/test-handlers.js.map +1 -0
- package/dist/testing.d.ts +10 -0
- package/dist/testing.d.ts.map +1 -0
- package/dist/testing.js +10 -0
- package/dist/testing.js.map +1 -0
- package/dist/transport-composition.d.ts +31 -0
- package/dist/transport-composition.d.ts.map +1 -0
- package/dist/transport-composition.js +55 -0
- package/dist/transport-composition.js.map +1 -0
- package/dist/transport-selector.d.ts +202 -0
- package/dist/transport-selector.d.ts.map +1 -0
- package/dist/transport-selector.js +196 -0
- package/dist/transport-selector.js.map +1 -0
- package/dist/trust-signal-pickup-listener.d.ts +43 -0
- package/dist/trust-signal-pickup-listener.d.ts.map +1 -0
- package/dist/trust-signal-pickup-listener.js +48 -0
- package/dist/trust-signal-pickup-listener.js.map +1 -0
- package/dist/trust-signal-store.d.ts +406 -0
- package/dist/trust-signal-store.d.ts.map +1 -0
- package/dist/trust-signal-store.js +939 -0
- package/dist/trust-signal-store.js.map +1 -0
- package/dist/trust-signal-sweep-tick.d.ts +60 -0
- package/dist/trust-signal-sweep-tick.d.ts.map +1 -0
- package/dist/trust-signal-sweep-tick.js +101 -0
- package/dist/trust-signal-sweep-tick.js.map +1 -0
- package/dist/trust-signal-sweep.d.ts +94 -0
- package/dist/trust-signal-sweep.d.ts.map +1 -0
- package/dist/trust-signal-sweep.js +147 -0
- package/dist/trust-signal-sweep.js.map +1 -0
- package/dist/type-registry.d.ts +42 -0
- package/dist/type-registry.d.ts.map +1 -0
- package/dist/type-registry.js +37 -0
- package/dist/type-registry.js.map +1 -0
- package/dist/types.d.ts +746 -0
- package/dist/types.d.ts.map +1 -0
- package/dist/types.js +20 -0
- package/dist/types.js.map +1 -0
- package/dist/unresolved-nodes-report.d.ts +14 -0
- package/dist/unresolved-nodes-report.d.ts.map +1 -0
- package/dist/unresolved-nodes-report.js +96 -0
- package/dist/unresolved-nodes-report.js.map +1 -0
- package/dist/vocabulary.d.ts +150 -0
- package/dist/vocabulary.d.ts.map +1 -0
- package/dist/vocabulary.js +386 -0
- package/dist/vocabulary.js.map +1 -0
- package/dist/who-label.d.ts +28 -0
- package/dist/who-label.d.ts.map +1 -0
- package/dist/who-label.js +31 -0
- package/dist/who-label.js.map +1 -0
- package/dist/who-resolver.d.ts +15 -0
- package/dist/who-resolver.d.ts.map +1 -0
- package/dist/who-resolver.js +47 -0
- package/dist/who-resolver.js.map +1 -0
- package/dist/wire-content-hash.d.ts +93 -0
- package/dist/wire-content-hash.d.ts.map +1 -0
- package/dist/wire-content-hash.js +116 -0
- package/dist/wire-content-hash.js.map +1 -0
- package/dist/withheld-content.d.ts +13 -0
- package/dist/withheld-content.d.ts.map +1 -0
- package/dist/withheld-content.js +46 -0
- package/dist/withheld-content.js.map +1 -0
- package/dist/witness-alerts.d.ts +40 -0
- package/dist/witness-alerts.d.ts.map +1 -0
- package/dist/witness-alerts.js +102 -0
- package/dist/witness-alerts.js.map +1 -0
- package/package.json +5 -5
|
@@ -0,0 +1,284 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* CELLO Daemon — RelayReceiptStore (DOD-M15-ORDERPROOF-1, was M8B DOD-RELAYSIG-1)
|
|
3
|
+
*
|
|
4
|
+
* The relay is the ordering/witness authority: it assigns a canonical sequence number to each submitted
|
|
5
|
+
* content-hash leaf and signs an ATTESTATION over it (relay-node `buildRelayAckTbs`). This store is the
|
|
6
|
+
* client's IMMUTABLE record of those signed attestations — durable evidence that the relay assigned a
|
|
7
|
+
* specific sequence to a specific hash at a specific time. The receipt is what lets the client later prove
|
|
8
|
+
* (or dispute) the relay's ordering, and is the building block the client carries to the directory at seal
|
|
9
|
+
* time (OPTIONB-SEAL-1) instead of the directory dialing the relay.
|
|
10
|
+
*
|
|
11
|
+
* Verification is an Ed25519 check that MUST stay byte-compatible with the relay's signer.
|
|
12
|
+
*
|
|
13
|
+
* ⚠️ **THE KEY IT IS CHECKED AGAINST IS THE POINT — 069-ORDERPROOF.** This module used to verify the
|
|
14
|
+
* signature against `relay_id`, a key carried inside the very frame being checked, and its own comment
|
|
15
|
+
* called that "SELF-CONSISTENCY". It is not a check: anyone who can write the frame can mint a key, sign
|
|
16
|
+
* any ordering they like with it, and put the key in the field we verify against. The key now comes from
|
|
17
|
+
* `relay_id` on the **directory-signed `SessionAssignment`**, which is inside the FROST-signed TBS the
|
|
18
|
+
* client already verifies — something neither the relay nor either participant can rewrite.
|
|
19
|
+
*
|
|
20
|
+
* ⚠️ **AND ABSENT IS NOT FINE.** Missing, malformed and mismatched are ONE outcome (`refused`), because
|
|
21
|
+
* a party holding no attestation for a message is in exactly the state a corrupted one leaves them in.
|
|
22
|
+
* Whoever can cause the absence must not get a softer answer than whoever can cause the corruption — and
|
|
23
|
+
* the party who can cause the absence is the relay, the party the check exists to constrain.
|
|
24
|
+
*
|
|
25
|
+
* IMMUTABILITY (SI-003): the unique unit of a relay attestation is a POSITION — (agent, session, sequence)
|
|
26
|
+
* — not a content hash. The same plaintext ("ok") legitimately produces the same content hash at DIFFERENT
|
|
27
|
+
* sequences (per-session relay counter; repeated content within a session), so the table is keyed on the
|
|
28
|
+
* position with the hash as payload. `INSERT OR IGNORE` then defends the real threat — a relay rewriting the
|
|
29
|
+
* hash it recorded for an already-assigned (session, sequence) — while never dropping a legitimate
|
|
30
|
+
* attestation for repeated content (code review HIGH).
|
|
31
|
+
*
|
|
32
|
+
* Crypto: Ed25519 (RFC 8032), SHA-256 (FIPS 180-4). TBS = SHA-256(hash_bytes || seq_BE4 || ts_BE8).
|
|
33
|
+
*/
|
|
34
|
+
import { verify, buildRelayAckTbs } from "@cello-protocol/crypto";
|
|
35
|
+
import { decodeStructure1 } from "@cello-protocol/protocol-types";
|
|
36
|
+
/**
|
|
37
|
+
* Verify a relay ordering attestation against a relay pubkey the CALLER supplies — and the caller
|
|
38
|
+
* must have got it from the directory-signed assignment, never from the frame.
|
|
39
|
+
*
|
|
40
|
+
* Returns true iff every field is well-formed and the 64-byte Ed25519 signature verifies over
|
|
41
|
+
* TBS = SHA-256(DOMAIN ‖ session_id ‖ content_hash ‖ seq_BE4 ‖ running_root ‖ ts_BE8) — the same
|
|
42
|
+
* statement the relay signs. A forged sequence, a swapped session or a rewritten prefix all change
|
|
43
|
+
* the TBS, so each fails.
|
|
44
|
+
*
|
|
45
|
+
* A wrong-length field returns FALSE rather than throwing: these bytes come off a wire the relay
|
|
46
|
+
* controls, and a malformed length must refuse this attestation, not take down the frame handler.
|
|
47
|
+
*/
|
|
48
|
+
export function verifyRelayAck(sessionId, contentHash, sequenceNumber, runningRoot, timestamp, signature, relayPubkey) {
|
|
49
|
+
if (signature.length !== 64)
|
|
50
|
+
return false;
|
|
51
|
+
if (sessionId.length !== 16 || contentHash.length !== 32 || runningRoot.length !== 32)
|
|
52
|
+
return false;
|
|
53
|
+
const tbs = buildRelayAckTbs(sessionId, contentHash, sequenceNumber, runningRoot, timestamp);
|
|
54
|
+
return verify(relayPubkey, tbs, signature);
|
|
55
|
+
}
|
|
56
|
+
/**
|
|
57
|
+
* Read back the leaf we just submitted, so the relay's attestation has something to be checked
|
|
58
|
+
* against — the step BEFORE `evaluateRelayAck`, and the one that decides whether the check can run
|
|
59
|
+
* at all.
|
|
60
|
+
*
|
|
61
|
+
* ⚠️ "COULD NOT RUN THE CHECK" IS NOT "THE CHECK PASSED" — 069-ORDERPROOF.
|
|
62
|
+
*
|
|
63
|
+
* Both failures here used to be waved through by the caller, which settled the send `ok` having
|
|
64
|
+
* verified nothing: the absent-versus-verified collapse this unit exists to remove, reproduced at
|
|
65
|
+
* the one point where nothing was left to verify with. These are our OWN just-signed bytes, so a
|
|
66
|
+
* hostile relay cannot steer into either — unreachable in practice, which is a different claim from
|
|
67
|
+
* safe to wave through, and the distinction is the one that decays under later edits.
|
|
68
|
+
*
|
|
69
|
+
* `"none"` is the honest third answer: no submit was made, so no attestation is owed and none is
|
|
70
|
+
* missing. It is the only one of the three that does not reject.
|
|
71
|
+
*/
|
|
72
|
+
export function readSubmittedLeaf(structure1Cbor, seq) {
|
|
73
|
+
if (seq < 0)
|
|
74
|
+
return { kind: "none" };
|
|
75
|
+
if (!structure1Cbor)
|
|
76
|
+
return { kind: "unreadable", event: "relay.receipt.leaf_absent" };
|
|
77
|
+
// Structure 1 = [version, content_hash(32), sender_pubkey(32), session_id(16), last_seen_seq, ts],
|
|
78
|
+
// plus last_seen_hash(32) at index 6 on a v2 claim (020-ACKHASH). content_hash is index 1 and
|
|
79
|
+
// session_id index 3 in both.
|
|
80
|
+
const s1 = decodeStructure1(structure1Cbor);
|
|
81
|
+
// The reason is carried because "we cannot read what we just wrote" and "we wrote a layout we
|
|
82
|
+
// cannot name" are different faults with the same symptom.
|
|
83
|
+
if (!s1.ok)
|
|
84
|
+
return { kind: "unreadable", event: "relay.receipt.undecodable_leaf", reason: s1.reason };
|
|
85
|
+
return { kind: "ok", contentHash: s1.fields.contentHash, sessionId: s1.fields.sessionId };
|
|
86
|
+
}
|
|
87
|
+
/**
|
|
88
|
+
* Evaluate a relay ordering attestation: decide whether it yields a storable, signature-verified
|
|
89
|
+
* receipt. This is the verify-gates-store decision in isolation, so it is unit-testable without the
|
|
90
|
+
* relay stream.
|
|
91
|
+
*
|
|
92
|
+
* `expectedRelayPubkeyHex` is the anchor and it is REQUIRED in substance: `undefined` refuses. It
|
|
93
|
+
* must come from `relay_id` on an assignment whose FROST signature has been verified.
|
|
94
|
+
*/
|
|
95
|
+
export function evaluateRelayAck(params) {
|
|
96
|
+
const { sessionId, contentHash, runningRoot, sessionIdHex, agentPubkeyHex, expectedRelayPubkeyHex, relayId, relaySignature, timestamp, sequenceNumber, } = params;
|
|
97
|
+
if (!expectedRelayPubkeyHex || !/^[0-9a-fA-F]{64}$/.test(expectedRelayPubkeyHex)) {
|
|
98
|
+
return { kind: "refused", cause: "no_anchor" };
|
|
99
|
+
}
|
|
100
|
+
/**
|
|
101
|
+
* THE FRAME'S OWN CLAIM IS COMPARED, NEVER TRUSTED. The signature below is verified against the
|
|
102
|
+
* directory's key regardless, so this comparison adds no security on its own — what it adds is a
|
|
103
|
+
* NAMED cause. A relay that has been replaced mid-session produces a valid signature under a key
|
|
104
|
+
* the directory never named, and "this is not the relay you were assigned" is the sentence an
|
|
105
|
+
* operator can act on. `undefined` is not a mismatch: a relay omitting the field does not get to
|
|
106
|
+
* skip the check, it simply gets checked against the anchor with no label.
|
|
107
|
+
*/
|
|
108
|
+
if (relayId !== undefined) {
|
|
109
|
+
if (!/^[0-9a-fA-F]{64}$/.test(relayId))
|
|
110
|
+
return { kind: "refused", cause: "bad_relay_id" };
|
|
111
|
+
if (relayId.toLowerCase() !== expectedRelayPubkeyHex.toLowerCase()) {
|
|
112
|
+
return { kind: "refused", cause: "relay_not_assigned" };
|
|
113
|
+
}
|
|
114
|
+
}
|
|
115
|
+
if (!relaySignature || timestamp === undefined || !runningRoot) {
|
|
116
|
+
return { kind: "refused", cause: "attestation_absent" };
|
|
117
|
+
}
|
|
118
|
+
const relayPubkey = new Uint8Array(Buffer.from(expectedRelayPubkeyHex, "hex"));
|
|
119
|
+
if (!verifyRelayAck(sessionId, contentHash, sequenceNumber, runningRoot, timestamp, relaySignature, relayPubkey)) {
|
|
120
|
+
return { kind: "refused", cause: "signature_invalid" };
|
|
121
|
+
}
|
|
122
|
+
return {
|
|
123
|
+
kind: "store",
|
|
124
|
+
receipt: {
|
|
125
|
+
hashHex: Buffer.from(contentHash).toString("hex"),
|
|
126
|
+
agentPubkeyHex,
|
|
127
|
+
sessionIdHex,
|
|
128
|
+
relayId: expectedRelayPubkeyHex,
|
|
129
|
+
relayPubkeyHex: expectedRelayPubkeyHex,
|
|
130
|
+
sequenceNumber,
|
|
131
|
+
timestamp,
|
|
132
|
+
signatureHex: Buffer.from(relaySignature).toString("hex"),
|
|
133
|
+
runningRootHex: Buffer.from(runningRoot).toString("hex"),
|
|
134
|
+
},
|
|
135
|
+
};
|
|
136
|
+
}
|
|
137
|
+
const CREATE_RELAY_RECEIPTS_SQL = `
|
|
138
|
+
CREATE TABLE IF NOT EXISTS relay_ack_receipts (
|
|
139
|
+
agent_pubkey TEXT NOT NULL,
|
|
140
|
+
session_id TEXT NOT NULL,
|
|
141
|
+
sequence_number INTEGER NOT NULL,
|
|
142
|
+
hash_hex TEXT NOT NULL,
|
|
143
|
+
relay_id TEXT NOT NULL,
|
|
144
|
+
relay_pubkey_hex TEXT NOT NULL,
|
|
145
|
+
relay_timestamp INTEGER NOT NULL,
|
|
146
|
+
signature_hex TEXT NOT NULL,
|
|
147
|
+
stored_at INTEGER NOT NULL,
|
|
148
|
+
-- 069-ORDERPROOF: the running root the relay signed alongside the position (nullable — rows
|
|
149
|
+
-- written before this order have none, and they stay readable and sealable exactly as they are).
|
|
150
|
+
running_root_hex TEXT,
|
|
151
|
+
-- FED-OPTIONB-SEAL-001: per-leaf carry bytes for the unilateral-seal offline rebuild (nullable).
|
|
152
|
+
structure2_cbor BLOB,
|
|
153
|
+
structure1_cbor BLOB,
|
|
154
|
+
leaf_kind INTEGER,
|
|
155
|
+
PRIMARY KEY (agent_pubkey, session_id, sequence_number)
|
|
156
|
+
);
|
|
157
|
+
`;
|
|
158
|
+
export class RelayReceiptStore {
|
|
159
|
+
#db;
|
|
160
|
+
#logger;
|
|
161
|
+
constructor(db, logger) {
|
|
162
|
+
this.#db = db;
|
|
163
|
+
this.#logger = logger;
|
|
164
|
+
this.#db.exec(CREATE_RELAY_RECEIPTS_SQL);
|
|
165
|
+
this.#migrateSealCarryColumns();
|
|
166
|
+
}
|
|
167
|
+
/**
|
|
168
|
+
* FED-OPTIONB-SEAL-001: add the per-leaf carry columns to a relay_ack_receipts table created before the
|
|
169
|
+
* seal-carry feature (CREATE TABLE IF NOT EXISTS leaves an existing table untouched). Idempotent + safe:
|
|
170
|
+
* each column is added only if absent (checked via PRAGMA table_info), and all three are NULLABLE so the
|
|
171
|
+
* ALTER never rewrites or invalidates existing rows. Pre-migration receipts simply have no carry bytes
|
|
172
|
+
* (getSealLeaves omits them). No data is read/destroyed — pure additive schema evolution.
|
|
173
|
+
*/
|
|
174
|
+
#migrateSealCarryColumns() {
|
|
175
|
+
const cols = new Set(this.#db.prepare(`PRAGMA table_info(relay_ack_receipts)`).all().map((c) => c.name));
|
|
176
|
+
for (const [name, decl] of [
|
|
177
|
+
["structure2_cbor", "BLOB"],
|
|
178
|
+
["structure1_cbor", "BLOB"],
|
|
179
|
+
["leaf_kind", "INTEGER"],
|
|
180
|
+
// 069-ORDERPROOF. NULLABLE, like the three above: a session that predates this order keeps
|
|
181
|
+
// every receipt it already holds, opens, reads and seals unchanged, and simply has no root
|
|
182
|
+
// recorded for those positions.
|
|
183
|
+
["running_root_hex", "TEXT"],
|
|
184
|
+
]) {
|
|
185
|
+
if (!cols.has(name)) {
|
|
186
|
+
this.#db.exec(`ALTER TABLE relay_ack_receipts ADD COLUMN ${name} ${decl}`);
|
|
187
|
+
}
|
|
188
|
+
}
|
|
189
|
+
}
|
|
190
|
+
/**
|
|
191
|
+
* Persist a VERIFIED receipt. IMMUTABLE: keyed on the attestation POSITION (agent, session, sequence) —
|
|
192
|
+
* `INSERT OR IGNORE` keeps the FIRST hash recorded for a position, so a relay cannot rewrite the hash it
|
|
193
|
+
* already attested at that (session, sequence). Returns true if a new row was written, false if the
|
|
194
|
+
* position was already recorded (logged distinctly when the existing hash DIFFERS — a relay equivocation).
|
|
195
|
+
*/
|
|
196
|
+
store(receipt, storedAtMs) {
|
|
197
|
+
const existing = this.get(receipt.agentPubkeyHex, receipt.sessionIdHex, receipt.sequenceNumber);
|
|
198
|
+
const info = this.#db
|
|
199
|
+
.prepare(`INSERT OR IGNORE INTO relay_ack_receipts
|
|
200
|
+
(agent_pubkey, session_id, sequence_number, hash_hex, relay_id, relay_pubkey_hex, relay_timestamp, signature_hex, stored_at, structure2_cbor, structure1_cbor, leaf_kind, running_root_hex)
|
|
201
|
+
VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)`)
|
|
202
|
+
.run(receipt.agentPubkeyHex, receipt.sessionIdHex, receipt.sequenceNumber, receipt.hashHex, receipt.relayId, receipt.relayPubkeyHex, receipt.timestamp, receipt.signatureHex, storedAtMs,
|
|
203
|
+
// FED-OPTIONB-SEAL-001: carry bytes (null when absent — receipt-only rows).
|
|
204
|
+
receipt.structure2Cbor ? Buffer.from(receipt.structure2Cbor) : null, receipt.structure1Cbor ? Buffer.from(receipt.structure1Cbor) : null, receipt.leafKind ?? null, receipt.runningRootHex ?? null);
|
|
205
|
+
const wrote = Number(info.changes) > 0;
|
|
206
|
+
if (!wrote && existing && existing.hashHex !== receipt.hashHex) {
|
|
207
|
+
// EQUIVOCATION: a relay re-attesting a DIFFERENT hash at an already-recorded position. The first
|
|
208
|
+
// verified receipt stands; surface the conflict loudly (it is an attack/misbehavior signal).
|
|
209
|
+
this.#logger.warn("relay.receipt.equivocation", {
|
|
210
|
+
agentShort: receipt.agentPubkeyHex.slice(0, 16),
|
|
211
|
+
sessionShort: receipt.sessionIdHex.slice(0, 16),
|
|
212
|
+
seq: receipt.sequenceNumber,
|
|
213
|
+
recordedHashShort: existing.hashHex.slice(0, 16),
|
|
214
|
+
conflictingHashShort: receipt.hashHex.slice(0, 16),
|
|
215
|
+
});
|
|
216
|
+
}
|
|
217
|
+
return wrote;
|
|
218
|
+
}
|
|
219
|
+
/** The stored receipt at an attestation position (agent, session, sequence), or undefined. */
|
|
220
|
+
get(agentPubkeyHex, sessionIdHex, sequenceNumber) {
|
|
221
|
+
const row = this.#db
|
|
222
|
+
.prepare(`SELECT agent_pubkey, session_id, sequence_number, hash_hex, relay_id, relay_pubkey_hex, relay_timestamp, signature_hex, running_root_hex
|
|
223
|
+
FROM relay_ack_receipts WHERE agent_pubkey = ? AND session_id = ? AND sequence_number = ?`)
|
|
224
|
+
.get(agentPubkeyHex, sessionIdHex, sequenceNumber);
|
|
225
|
+
return row ? this.#rowToReceipt(row) : undefined;
|
|
226
|
+
}
|
|
227
|
+
/** All receipts for an agent (optionally a single session), in canonical sequence order (ascending). */
|
|
228
|
+
getAll(agentPubkeyHex, sessionIdHex) {
|
|
229
|
+
const rows = sessionIdHex
|
|
230
|
+
? this.#db
|
|
231
|
+
.prepare(`SELECT agent_pubkey, session_id, sequence_number, hash_hex, relay_id, relay_pubkey_hex, relay_timestamp, signature_hex, running_root_hex
|
|
232
|
+
FROM relay_ack_receipts WHERE agent_pubkey = ? AND session_id = ? ORDER BY sequence_number ASC`)
|
|
233
|
+
.all(agentPubkeyHex, sessionIdHex)
|
|
234
|
+
: this.#db
|
|
235
|
+
.prepare(`SELECT agent_pubkey, session_id, sequence_number, hash_hex, relay_id, relay_pubkey_hex, relay_timestamp, signature_hex, running_root_hex
|
|
236
|
+
FROM relay_ack_receipts WHERE agent_pubkey = ? ORDER BY session_id, sequence_number ASC`)
|
|
237
|
+
.all(agentPubkeyHex);
|
|
238
|
+
return rows.map((r) => this.#rowToReceipt(r));
|
|
239
|
+
}
|
|
240
|
+
/**
|
|
241
|
+
* FED-OPTIONB-SEAL-001: the complete carried leaf chain for a session's UNILATERAL seal — every receipt
|
|
242
|
+
* that has its Structure2/Structure1 carry bytes, ordered by canonical sequence. The directory rebuilds +
|
|
243
|
+
* verifies this tree OFFLINE (no directory→relay getSealLeaves dial). Rows without carry bytes
|
|
244
|
+
* (pre-migration / receipt-only) are omitted: the caller carries only what the directory can rebuild.
|
|
245
|
+
*/
|
|
246
|
+
getSealLeaves(agentPubkeyHex, sessionIdHex) {
|
|
247
|
+
const rows = this.#db
|
|
248
|
+
.prepare(`SELECT agent_pubkey, session_id, sequence_number, hash_hex, relay_id, relay_pubkey_hex, relay_timestamp, signature_hex, running_root_hex, structure2_cbor, structure1_cbor, leaf_kind
|
|
249
|
+
FROM relay_ack_receipts
|
|
250
|
+
WHERE agent_pubkey = ? AND session_id = ? AND structure2_cbor IS NOT NULL AND structure1_cbor IS NOT NULL AND leaf_kind IS NOT NULL
|
|
251
|
+
ORDER BY sequence_number ASC`)
|
|
252
|
+
.all(agentPubkeyHex, sessionIdHex);
|
|
253
|
+
return rows.map((r) => ({
|
|
254
|
+
...this.#rowToReceipt(r),
|
|
255
|
+
structure2Cbor: toU8(r.structure2_cbor),
|
|
256
|
+
structure1Cbor: toU8(r.structure1_cbor),
|
|
257
|
+
leafKind: r.leaf_kind,
|
|
258
|
+
}));
|
|
259
|
+
}
|
|
260
|
+
#rowToReceipt(row) {
|
|
261
|
+
return {
|
|
262
|
+
hashHex: row.hash_hex,
|
|
263
|
+
agentPubkeyHex: row.agent_pubkey,
|
|
264
|
+
sessionIdHex: row.session_id,
|
|
265
|
+
relayId: row.relay_id,
|
|
266
|
+
relayPubkeyHex: row.relay_pubkey_hex,
|
|
267
|
+
sequenceNumber: row.sequence_number,
|
|
268
|
+
timestamp: row.relay_timestamp,
|
|
269
|
+
signatureHex: row.signature_hex,
|
|
270
|
+
...(typeof row.running_root_hex === "string" ? { runningRootHex: row.running_root_hex } : {}),
|
|
271
|
+
};
|
|
272
|
+
}
|
|
273
|
+
}
|
|
274
|
+
/** Normalize a SQLite BLOB column (Buffer/Uint8Array/ArrayBuffer) to a Uint8Array. */
|
|
275
|
+
function toU8(v) {
|
|
276
|
+
if (v instanceof Uint8Array)
|
|
277
|
+
return v;
|
|
278
|
+
if (Buffer.isBuffer(v))
|
|
279
|
+
return new Uint8Array(v);
|
|
280
|
+
if (v instanceof ArrayBuffer)
|
|
281
|
+
return new Uint8Array(v);
|
|
282
|
+
return new Uint8Array();
|
|
283
|
+
}
|
|
284
|
+
//# sourceMappingURL=relay-receipt-store.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"relay-receipt-store.js","sourceRoot":"","sources":["../src/relay-receipt-store.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,32 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Keep re-dialling a lost relay stream while something still depends on it.
|
|
3
|
+
*
|
|
4
|
+
* The relay client made ONE reconnect attempt when its reader ended. Live 2026-09-15: a laptop woke,
|
|
5
|
+
* the reader ended, and that attempt ran before the network was back. Nothing dialled again — only
|
|
6
|
+
* a send re-dials, and a receiving agent has nothing to send — so three messages sent during the
|
|
7
|
+
* sleep never arrived as `leaf_deliver`. The delay doubles to a one-minute ceiling: one dial a minute
|
|
8
|
+
* per relay costs nothing, and a stream that never returns is a conversation that silently stops.
|
|
9
|
+
*
|
|
10
|
+
* A REFUSAL is not a network drop, and must not read like one. When the relay answered and said no,
|
|
11
|
+
* it is logged at error (once per distinct reason) and the loop drops straight to the ceiling. It
|
|
12
|
+
* does not stop: the commonest refusal is an expired online token, which the next signaling
|
|
13
|
+
* reconnect replaces, and the client reads the token fresh at every auth.
|
|
14
|
+
*/
|
|
15
|
+
import type { Logger } from "./types.js";
|
|
16
|
+
export declare const RELAY_RECONNECT_BASE_MS = 2000;
|
|
17
|
+
export declare const RELAY_RECONNECT_MAX_MS = 60000;
|
|
18
|
+
export declare function reconnectWithBackoff(opts: {
|
|
19
|
+
relayPeerId: string;
|
|
20
|
+
logger: Logger;
|
|
21
|
+
/** One pass over every node that could dial. True when the stream is back. */
|
|
22
|
+
connectOnce: () => Promise<boolean>;
|
|
23
|
+
/** The refusal the last attempt ended on, if the relay answered at all. */
|
|
24
|
+
refusal: () => {
|
|
25
|
+
reason: string;
|
|
26
|
+
advice: string;
|
|
27
|
+
} | null;
|
|
28
|
+
/** Closed, already connected, or no session left to deliver to. */
|
|
29
|
+
shouldStop: () => boolean;
|
|
30
|
+
baseMs: number;
|
|
31
|
+
}): Promise<void>;
|
|
32
|
+
//# sourceMappingURL=relay-reconnect.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"relay-reconnect.d.ts","sourceRoot":"","sources":["../src/relay-reconnect.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;GAaG;AACH,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,YAAY,CAAC;AAEzC,eAAO,MAAM,uBAAuB,OAAQ,CAAC;AAC7C,eAAO,MAAM,sBAAsB,QAAS,CAAC;AAE7C,wBAAsB,oBAAoB,CAAC,IAAI,EAAE;IAC/C,WAAW,EAAE,MAAM,CAAC;IACpB,MAAM,EAAE,MAAM,CAAC;IACf,8EAA8E;IAC9E,WAAW,EAAE,MAAM,OAAO,CAAC,OAAO,CAAC,CAAC;IACpC,2EAA2E;IAC3E,OAAO,EAAE,MAAM;QAAE,MAAM,EAAE,MAAM,CAAC;QAAC,MAAM,EAAE,MAAM,CAAA;KAAE,GAAG,IAAI,CAAC;IACzD,mEAAmE;IACnE,UAAU,EAAE,MAAM,OAAO,CAAC;IAC1B,MAAM,EAAE,MAAM,CAAC;CAChB,GAAG,OAAO,CAAC,IAAI,CAAC,CAuBhB"}
|
|
@@ -0,0 +1,29 @@
|
|
|
1
|
+
export const RELAY_RECONNECT_BASE_MS = 2_000;
|
|
2
|
+
export const RELAY_RECONNECT_MAX_MS = 60_000;
|
|
3
|
+
export async function reconnectWithBackoff(opts) {
|
|
4
|
+
const { relayPeerId, logger } = opts;
|
|
5
|
+
// Floored at 1ms: a zero base doubles to zero and the loop would spin flat out.
|
|
6
|
+
let delay = Math.max(opts.baseMs, 1);
|
|
7
|
+
let lastRefusal;
|
|
8
|
+
for (let attempt = 1; !opts.shouldStop(); attempt++) {
|
|
9
|
+
if (await opts.connectOnce())
|
|
10
|
+
return;
|
|
11
|
+
const refused = opts.refusal();
|
|
12
|
+
if (refused) {
|
|
13
|
+
if (refused.reason !== lastRefusal) {
|
|
14
|
+
logger.error("session.relay.reconnect.refused", {
|
|
15
|
+
relayPeerId, reason: refused.reason, advice: refused.advice,
|
|
16
|
+
impact: "the relay answered and refused, so this is not a network drop; retrying once a minute in case it clears",
|
|
17
|
+
});
|
|
18
|
+
}
|
|
19
|
+
lastRefusal = refused.reason;
|
|
20
|
+
delay = RELAY_RECONNECT_MAX_MS;
|
|
21
|
+
}
|
|
22
|
+
if (opts.shouldStop())
|
|
23
|
+
return;
|
|
24
|
+
logger.info("session.relay.reconnect.scheduled", { relayPeerId, attempt, retryInMs: delay });
|
|
25
|
+
await new Promise((r) => { setTimeout(r, delay).unref?.(); });
|
|
26
|
+
delay = Math.min(delay * 2, RELAY_RECONNECT_MAX_MS);
|
|
27
|
+
}
|
|
28
|
+
}
|
|
29
|
+
//# sourceMappingURL=relay-reconnect.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"relay-reconnect.js","sourceRoot":"","sources":["../src/relay-reconnect.ts"],"names":[],"mappings":"AAgBA,MAAM,CAAC,MAAM,uBAAuB,GAAG,KAAK,CAAC;AAC7C,MAAM,CAAC,MAAM,sBAAsB,GAAG,MAAM,CAAC;AAE7C,MAAM,CAAC,KAAK,UAAU,oBAAoB,CAAC,IAU1C;IACC,MAAM,EAAE,WAAW,EAAE,MAAM,EAAE,GAAG,IAAI,CAAC;IACrC,gFAAgF;IAChF,IAAI,KAAK,GAAG,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,MAAM,EAAE,CAAC,CAAC,CAAC;IACrC,IAAI,WAA+B,CAAC;IACpC,KAAK,IAAI,OAAO,GAAG,CAAC,EAAE,CAAC,IAAI,CAAC,UAAU,EAAE,EAAE,OAAO,EAAE,EAAE,CAAC;QACpD,IAAI,MAAM,IAAI,CAAC,WAAW,EAAE;YAAE,OAAO;QACrC,MAAM,OAAO,GAAG,IAAI,CAAC,OAAO,EAAE,CAAC;QAC/B,IAAI,OAAO,EAAE,CAAC;YACZ,IAAI,OAAO,CAAC,MAAM,KAAK,WAAW,EAAE,CAAC;gBACnC,MAAM,CAAC,KAAK,CAAC,iCAAiC,EAAE;oBAC9C,WAAW,EAAE,MAAM,EAAE,OAAO,CAAC,MAAM,EAAE,MAAM,EAAE,OAAO,CAAC,MAAM;oBAC3D,MAAM,EAAE,yGAAyG;iBAClH,CAAC,CAAC;YACL,CAAC;YACD,WAAW,GAAG,OAAO,CAAC,MAAM,CAAC;YAC7B,KAAK,GAAG,sBAAsB,CAAC;QACjC,CAAC;QACD,IAAI,IAAI,CAAC,UAAU,EAAE;YAAE,OAAO;QAC9B,MAAM,CAAC,IAAI,CAAC,mCAAmC,EAAE,EAAE,WAAW,EAAE,OAAO,EAAE,SAAS,EAAE,KAAK,EAAE,CAAC,CAAC;QAC7F,MAAM,IAAI,OAAO,CAAO,CAAC,CAAC,EAAE,EAAE,GAAG,UAAU,CAAC,CAAC,EAAE,KAAK,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC;QACpE,KAAK,GAAG,IAAI,CAAC,GAAG,CAAC,KAAK,GAAG,CAAC,EAAE,sBAAsB,CAAC,CAAC;IACtD,CAAC;AACH,CAAC"}
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
import type { DaemonDatabase } from "./sqlcipher-db.js";
|
|
2
|
+
export interface ReplyLag {
|
|
3
|
+
/** How many of their latest replies in a row were written before they saw your message. */
|
|
4
|
+
replies: number;
|
|
5
|
+
/** The last position those replies say they had seen. */
|
|
6
|
+
their_last_seen_seq: number;
|
|
7
|
+
/** Your newest message they had not seen. */
|
|
8
|
+
your_unseen_seq: number;
|
|
9
|
+
}
|
|
10
|
+
export declare function replyLag(db: DaemonDatabase, agentPubkeyHex: string, sessionIdHex: string): ReplyLag | undefined;
|
|
11
|
+
//# sourceMappingURL=reply-lag.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"reply-lag.d.ts","sourceRoot":"","sources":["../src/reply-lag.ts"],"names":[],"mappings":"AASA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,mBAAmB,CAAC;AAKxD,MAAM,WAAW,QAAQ;IACvB,2FAA2F;IAC3F,OAAO,EAAE,MAAM,CAAC;IAChB,yDAAyD;IACzD,mBAAmB,EAAE,MAAM,CAAC;IAC5B,6CAA6C;IAC7C,eAAe,EAAE,MAAM,CAAC;CACzB;AAED,wBAAgB,QAAQ,CAAC,EAAE,EAAE,cAAc,EAAE,cAAc,EAAE,MAAM,EAAE,YAAY,EAAE,MAAM,GAAG,QAAQ,GAAG,SAAS,CA4B/G"}
|
|
@@ -0,0 +1,46 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Is the other side replying to an old message?
|
|
3
|
+
*
|
|
4
|
+
* Every message signs the last position its author had seen. Reading the other side's latest
|
|
5
|
+
* replies against this side's newest message tells the operator, during the conversation, that they
|
|
6
|
+
* are answering something older. One crossed reply is ordinary back-and-forth; two in a row is the
|
|
7
|
+
* signal. Reads the seal leaf store, which holds both sides' signed Structure 1.
|
|
8
|
+
*/
|
|
9
|
+
import { decodeStructure1 } from "@cello-protocol/protocol-types";
|
|
10
|
+
const LEAF_KIND_MSG = 0;
|
|
11
|
+
const LAG_THRESHOLD = 2;
|
|
12
|
+
export function replyLag(db, agentPubkeyHex, sessionIdHex) {
|
|
13
|
+
if (db.prepare("SELECT 1 FROM sqlite_master WHERE type = 'table' AND name = 'session_seal_leaves'").get() === undefined)
|
|
14
|
+
return undefined;
|
|
15
|
+
const rows = db
|
|
16
|
+
.prepare(`SELECT sequence_number AS seq, structure1_cbor AS s1 FROM session_seal_leaves
|
|
17
|
+
WHERE agent_pubkey = ? AND session_id = ? AND leaf_kind = ? ORDER BY sequence_number ASC`)
|
|
18
|
+
.all(agentPubkeyHex, sessionIdHex, LEAF_KIND_MSG);
|
|
19
|
+
const mine = [];
|
|
20
|
+
const theirs = [];
|
|
21
|
+
for (const r of rows) {
|
|
22
|
+
const d = decodeStructure1(r.s1 instanceof Uint8Array ? r.s1 : new Uint8Array(r.s1));
|
|
23
|
+
if (!d.ok)
|
|
24
|
+
continue;
|
|
25
|
+
if (Buffer.from(d.fields.senderPubkey).toString("hex") === agentPubkeyHex)
|
|
26
|
+
mine.push(r.seq);
|
|
27
|
+
else
|
|
28
|
+
theirs.push({ seq: r.seq, lastSeen: d.fields.lastSeenSeq });
|
|
29
|
+
}
|
|
30
|
+
if (mine.length === 0 || theirs.length < LAG_THRESHOLD)
|
|
31
|
+
return undefined;
|
|
32
|
+
let replies = 0;
|
|
33
|
+
let unseen = 0;
|
|
34
|
+
for (let i = theirs.length - 1; i >= 0; i--) {
|
|
35
|
+
const t = theirs[i];
|
|
36
|
+
const newestMineBefore = mine.filter((m) => m < t.seq).at(-1);
|
|
37
|
+
if (newestMineBefore === undefined || t.lastSeen >= newestMineBefore)
|
|
38
|
+
break;
|
|
39
|
+
replies += 1;
|
|
40
|
+
unseen = Math.max(unseen, newestMineBefore);
|
|
41
|
+
}
|
|
42
|
+
if (replies < LAG_THRESHOLD)
|
|
43
|
+
return undefined;
|
|
44
|
+
return { replies, their_last_seen_seq: theirs[theirs.length - 1].lastSeen, your_unseen_seq: unseen };
|
|
45
|
+
}
|
|
46
|
+
//# sourceMappingURL=reply-lag.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"reply-lag.js","sourceRoot":"","sources":["../src/reply-lag.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AACH,OAAO,EAAE,gBAAgB,EAAE,MAAM,gCAAgC,CAAC;AAGlE,MAAM,aAAa,GAAG,CAAC,CAAC;AACxB,MAAM,aAAa,GAAG,CAAC,CAAC;AAWxB,MAAM,UAAU,QAAQ,CAAC,EAAkB,EAAE,cAAsB,EAAE,YAAoB;IACvF,IAAI,EAAE,CAAC,OAAO,CAAC,mFAAmF,CAAC,CAAC,GAAG,EAAE,KAAK,SAAS;QAAE,OAAO,SAAS,CAAC;IAC1I,MAAM,IAAI,GAAG,EAAE;SACZ,OAAO,CACN;iGAC2F,CAC5F;SACA,GAAG,CAAC,cAAc,EAAE,YAAY,EAAE,aAAa,CAA2C,CAAC;IAC9F,MAAM,IAAI,GAAa,EAAE,CAAC;IAC1B,MAAM,MAAM,GAA6C,EAAE,CAAC;IAC5D,KAAK,MAAM,CAAC,IAAI,IAAI,EAAE,CAAC;QACrB,MAAM,CAAC,GAAG,gBAAgB,CAAC,CAAC,CAAC,EAAE,YAAY,UAAU,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,IAAI,UAAU,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;QACrF,IAAI,CAAC,CAAC,CAAC,EAAE;YAAE,SAAS;QACpB,IAAI,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,MAAM,CAAC,YAAY,CAAC,CAAC,QAAQ,CAAC,KAAK,CAAC,KAAK,cAAc;YAAE,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC;;YACvF,MAAM,CAAC,IAAI,CAAC,EAAE,GAAG,EAAE,CAAC,CAAC,GAAG,EAAE,QAAQ,EAAE,CAAC,CAAC,MAAM,CAAC,WAAW,EAAE,CAAC,CAAC;IACnE,CAAC;IACD,IAAI,IAAI,CAAC,MAAM,KAAK,CAAC,IAAI,MAAM,CAAC,MAAM,GAAG,aAAa;QAAE,OAAO,SAAS,CAAC;IACzE,IAAI,OAAO,GAAG,CAAC,CAAC;IAChB,IAAI,MAAM,GAAG,CAAC,CAAC;IACf,KAAK,IAAI,CAAC,GAAG,MAAM,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC;QAC5C,MAAM,CAAC,GAAG,MAAM,CAAC,CAAC,CAAE,CAAC;QACrB,MAAM,gBAAgB,GAAG,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC;QAC9D,IAAI,gBAAgB,KAAK,SAAS,IAAI,CAAC,CAAC,QAAQ,IAAI,gBAAgB;YAAE,MAAM;QAC5E,OAAO,IAAI,CAAC,CAAC;QACb,MAAM,GAAG,IAAI,CAAC,GAAG,CAAC,MAAM,EAAE,gBAAgB,CAAC,CAAC;IAC9C,CAAC;IACD,IAAI,OAAO,GAAG,aAAa;QAAE,OAAO,SAAS,CAAC;IAC9C,OAAO,EAAE,OAAO,EAAE,mBAAmB,EAAE,MAAM,CAAC,MAAM,CAAC,MAAM,GAAG,CAAC,CAAE,CAAC,QAAQ,EAAE,eAAe,EAAE,MAAM,EAAE,CAAC;AACxG,CAAC"}
|
|
@@ -0,0 +1,49 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* One guard for "the caller named an agent" — shared, so the third copy never gets written.
|
|
3
|
+
*
|
|
4
|
+
* DOD-INBOX-AGENT-1 closed a defect where `cello_check_notifications` accepted an `agent` parameter
|
|
5
|
+
* and silently dropped it, answering as whatever agent the CONNECTION held. Reviewing that fix found
|
|
6
|
+
* the same shape in three more places, including the one next door in `contact-handlers.ts`, where
|
|
7
|
+
* it is worse because that path WRITES: `cello_contact_add({ agent: "", pubkey })` fell through to
|
|
8
|
+
* the connection's selection and filed the contact under the wrong desk, and `{ agent: "carol" }`
|
|
9
|
+
* with no carol wrote a row keyed to an agent that does not exist. Both `ok: true`.
|
|
10
|
+
*
|
|
11
|
+
* The three ways a named agent goes wrong, and why each must REFUSE rather than fall back:
|
|
12
|
+
*
|
|
13
|
+
* 1. **A non-string** (`{ agent: 123 }`). MCP callers are shielded by zod; direct-IPC callers are
|
|
14
|
+
* not. §5a is explicit that unreachability is a property of today's call graph, not of the code.
|
|
15
|
+
* 2. **An empty string.** `""` is falsy but not nullish, so a bare truthiness test reads it as "no
|
|
16
|
+
* name given" and runs as the connection's selection — the exact misroute, reintroduced through
|
|
17
|
+
* the guard meant to prevent it. `{ agent: someUnsetVar }` produces it, and so does an
|
|
18
|
+
* unsubstituted `<exact name>` placeholder in a prompt.
|
|
19
|
+
* 3. **A name that is not here.** Falling back answers a question about carol with alice's data.
|
|
20
|
+
*
|
|
21
|
+
* And one that is NOT "not found": an agent whose identity FAILED TO LOAD exists. Saying "does not
|
|
22
|
+
* exist" sends the operator to `cello_agents`, which filters `load_failed` out — so they see nothing,
|
|
23
|
+
* confirm the wrong diagnosis, and never reach `cello_status`, which would have shown the real error.
|
|
24
|
+
* That is an exit-point label standing in for the cause.
|
|
25
|
+
*/
|
|
26
|
+
export interface NamedAgentRefusal {
|
|
27
|
+
ok: false;
|
|
28
|
+
reason: "invalid_agent_value" | "missing_agent_value" | "agent_not_found" | "agent_load_failed";
|
|
29
|
+
guidance: string;
|
|
30
|
+
}
|
|
31
|
+
/** What the resolver needs to know about the agents on this machine. */
|
|
32
|
+
export interface KnownAgent {
|
|
33
|
+
name: string;
|
|
34
|
+
state?: string;
|
|
35
|
+
error?: string;
|
|
36
|
+
}
|
|
37
|
+
/**
|
|
38
|
+
* Validate an explicitly-named agent.
|
|
39
|
+
*
|
|
40
|
+
* Returns `{ ok: true, agent }` when the caller named a real agent, `{ ok: true, agent: null }` when
|
|
41
|
+
* the caller named NOTHING (so the caller should fall back to its own connection-scoped resolution),
|
|
42
|
+
* and a refusal otherwise. The three-way return is the point: "named nothing" and "named something
|
|
43
|
+
* unusable" are different, and collapsing them is the whole defect class.
|
|
44
|
+
*/
|
|
45
|
+
export declare function resolveNamedAgent(rawAgent: unknown, known: ReadonlyArray<KnownAgent>): {
|
|
46
|
+
ok: true;
|
|
47
|
+
agent: string | null;
|
|
48
|
+
} | NamedAgentRefusal;
|
|
49
|
+
//# sourceMappingURL=resolve-named-agent.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"resolve-named-agent.d.ts","sourceRoot":"","sources":["../src/resolve-named-agent.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;GAwBG;AAKH,MAAM,WAAW,iBAAiB;IAChC,EAAE,EAAE,KAAK,CAAC;IACV,MAAM,EAAE,qBAAqB,GAAG,qBAAqB,GAAG,iBAAiB,GAAG,mBAAmB,CAAC;IAChG,QAAQ,EAAE,MAAM,CAAC;CAClB;AAED,wEAAwE;AACxE,MAAM,WAAW,UAAU;IACzB,IAAI,EAAE,MAAM,CAAC;IACb,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB;AAOD;;;;;;;GAOG;AACH,wBAAgB,iBAAiB,CAC/B,QAAQ,EAAE,OAAO,EACjB,KAAK,EAAE,aAAa,CAAC,UAAU,CAAC,GAC/B;IAAE,EAAE,EAAE,IAAI,CAAC;IAAC,KAAK,EAAE,MAAM,GAAG,IAAI,CAAA;CAAE,GAAG,iBAAiB,CAwCxD"}
|
|
@@ -0,0 +1,77 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* One guard for "the caller named an agent" — shared, so the third copy never gets written.
|
|
3
|
+
*
|
|
4
|
+
* DOD-INBOX-AGENT-1 closed a defect where `cello_check_notifications` accepted an `agent` parameter
|
|
5
|
+
* and silently dropped it, answering as whatever agent the CONNECTION held. Reviewing that fix found
|
|
6
|
+
* the same shape in three more places, including the one next door in `contact-handlers.ts`, where
|
|
7
|
+
* it is worse because that path WRITES: `cello_contact_add({ agent: "", pubkey })` fell through to
|
|
8
|
+
* the connection's selection and filed the contact under the wrong desk, and `{ agent: "carol" }`
|
|
9
|
+
* with no carol wrote a row keyed to an agent that does not exist. Both `ok: true`.
|
|
10
|
+
*
|
|
11
|
+
* The three ways a named agent goes wrong, and why each must REFUSE rather than fall back:
|
|
12
|
+
*
|
|
13
|
+
* 1. **A non-string** (`{ agent: 123 }`). MCP callers are shielded by zod; direct-IPC callers are
|
|
14
|
+
* not. §5a is explicit that unreachability is a property of today's call graph, not of the code.
|
|
15
|
+
* 2. **An empty string.** `""` is falsy but not nullish, so a bare truthiness test reads it as "no
|
|
16
|
+
* name given" and runs as the connection's selection — the exact misroute, reintroduced through
|
|
17
|
+
* the guard meant to prevent it. `{ agent: someUnsetVar }` produces it, and so does an
|
|
18
|
+
* unsubstituted `<exact name>` placeholder in a prompt.
|
|
19
|
+
* 3. **A name that is not here.** Falling back answers a question about carol with alice's data.
|
|
20
|
+
*
|
|
21
|
+
* And one that is NOT "not found": an agent whose identity FAILED TO LOAD exists. Saying "does not
|
|
22
|
+
* exist" sends the operator to `cello_agents`, which filters `load_failed` out — so they see nothing,
|
|
23
|
+
* confirm the wrong diagnosis, and never reach `cello_status`, which would have shown the real error.
|
|
24
|
+
* That is an exit-point label standing in for the cause.
|
|
25
|
+
*/
|
|
26
|
+
/** Agent-name length cap, matching the moniker convention — the name is echoed back into guidance. */
|
|
27
|
+
const MAX_NAME_ECHO = 64;
|
|
28
|
+
/** Truncate a caller-supplied name before echoing it into an operator-facing string. */
|
|
29
|
+
function echoName(name) {
|
|
30
|
+
return name.length <= MAX_NAME_ECHO ? name : `${name.slice(0, MAX_NAME_ECHO)}…`;
|
|
31
|
+
}
|
|
32
|
+
/**
|
|
33
|
+
* Validate an explicitly-named agent.
|
|
34
|
+
*
|
|
35
|
+
* Returns `{ ok: true, agent }` when the caller named a real agent, `{ ok: true, agent: null }` when
|
|
36
|
+
* the caller named NOTHING (so the caller should fall back to its own connection-scoped resolution),
|
|
37
|
+
* and a refusal otherwise. The three-way return is the point: "named nothing" and "named something
|
|
38
|
+
* unusable" are different, and collapsing them is the whole defect class.
|
|
39
|
+
*/
|
|
40
|
+
export function resolveNamedAgent(rawAgent, known) {
|
|
41
|
+
if (rawAgent === undefined || rawAgent === null)
|
|
42
|
+
return { ok: true, agent: null };
|
|
43
|
+
if (typeof rawAgent !== "string") {
|
|
44
|
+
return {
|
|
45
|
+
ok: false,
|
|
46
|
+
reason: "invalid_agent_value",
|
|
47
|
+
guidance: `The 'agent' parameter must be an agent name (a string), but got ${Array.isArray(rawAgent) ? "an array" : typeof rawAgent}. Nothing was read or written. Pass the name, or omit 'agent' to use this connection's current agent.`,
|
|
48
|
+
};
|
|
49
|
+
}
|
|
50
|
+
if (rawAgent.trim() === "") {
|
|
51
|
+
return {
|
|
52
|
+
ok: false,
|
|
53
|
+
reason: "missing_agent_value",
|
|
54
|
+
guidance: "The 'agent' parameter was empty (an unset variable, or an unsubstituted placeholder?). Nothing was read or written — an empty name is NOT treated as 'no agent given', because that would silently run as whichever agent this connection happens to hold. Name an agent, or omit 'agent' entirely.",
|
|
55
|
+
};
|
|
56
|
+
}
|
|
57
|
+
const match = known.find((a) => a.name === rawAgent);
|
|
58
|
+
if (!match) {
|
|
59
|
+
return {
|
|
60
|
+
ok: false,
|
|
61
|
+
reason: "agent_not_found",
|
|
62
|
+
guidance: `Agent '${echoName(rawAgent)}' does not exist on this machine, so nothing was read or written. Check the name with cello_agents, or omit 'agent' to use this connection's current agent.`,
|
|
63
|
+
};
|
|
64
|
+
}
|
|
65
|
+
// It EXISTS but its identity could not be loaded. Reported as itself: cello_agents hides
|
|
66
|
+
// load_failed agents, so "does not exist" would send the operator to the one surface that
|
|
67
|
+
// confirms the wrong answer. cello_status shows the state and the underlying error.
|
|
68
|
+
if (match.state === "load_failed") {
|
|
69
|
+
return {
|
|
70
|
+
ok: false,
|
|
71
|
+
reason: "agent_load_failed",
|
|
72
|
+
guidance: `Agent '${echoName(rawAgent)}' exists but its identity failed to load, so nothing was read or written${match.error ? ` (${match.error})` : ""}. Run cello_status to see the error — note cello_agents omits agents in this state, so it will look like the agent is missing.`,
|
|
73
|
+
};
|
|
74
|
+
}
|
|
75
|
+
return { ok: true, agent: rawAgent };
|
|
76
|
+
}
|
|
77
|
+
//# sourceMappingURL=resolve-named-agent.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"resolve-named-agent.js","sourceRoot":"","sources":["../src/resolve-named-agent.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;GAwBG;AAEH,sGAAsG;AACtG,MAAM,aAAa,GAAG,EAAE,CAAC;AAezB,wFAAwF;AACxF,SAAS,QAAQ,CAAC,IAAY;IAC5B,OAAO,IAAI,CAAC,MAAM,IAAI,aAAa,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC,EAAE,aAAa,CAAC,GAAG,CAAC;AAClF,CAAC;AAED;;;;;;;GAOG;AACH,MAAM,UAAU,iBAAiB,CAC/B,QAAiB,EACjB,KAAgC;IAEhC,IAAI,QAAQ,KAAK,SAAS,IAAI,QAAQ,KAAK,IAAI;QAAE,OAAO,EAAE,EAAE,EAAE,IAAI,EAAE,KAAK,EAAE,IAAI,EAAE,CAAC;IAElF,IAAI,OAAO,QAAQ,KAAK,QAAQ,EAAE,CAAC;QACjC,OAAO;YACL,EAAE,EAAE,KAAK;YACT,MAAM,EAAE,qBAAqB;YAC7B,QAAQ,EAAE,mEAAmE,KAAK,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,UAAU,CAAC,CAAC,CAAC,OAAO,QAAQ,uGAAuG;SAC3O,CAAC;IACJ,CAAC;IAED,IAAI,QAAQ,CAAC,IAAI,EAAE,KAAK,EAAE,EAAE,CAAC;QAC3B,OAAO;YACL,EAAE,EAAE,KAAK;YACT,MAAM,EAAE,qBAAqB;YAC7B,QAAQ,EAAE,qSAAqS;SAChT,CAAC;IACJ,CAAC;IAED,MAAM,KAAK,GAAG,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,KAAK,QAAQ,CAAC,CAAC;IACrD,IAAI,CAAC,KAAK,EAAE,CAAC;QACX,OAAO;YACL,EAAE,EAAE,KAAK;YACT,MAAM,EAAE,iBAAiB;YACzB,QAAQ,EAAE,UAAU,QAAQ,CAAC,QAAQ,CAAC,6JAA6J;SACpM,CAAC;IACJ,CAAC;IAED,yFAAyF;IACzF,0FAA0F;IAC1F,oFAAoF;IACpF,IAAI,KAAK,CAAC,KAAK,KAAK,aAAa,EAAE,CAAC;QAClC,OAAO;YACL,EAAE,EAAE,KAAK;YACT,MAAM,EAAE,mBAAmB;YAC3B,QAAQ,EAAE,UAAU,QAAQ,CAAC,QAAQ,CAAC,2EAA2E,KAAK,CAAC,KAAK,CAAC,CAAC,CAAC,KAAK,KAAK,CAAC,KAAK,GAAG,CAAC,CAAC,CAAC,EAAE,gIAAgI;SACxR,CAAC;IACJ,CAAC;IAED,OAAO,EAAE,EAAE,EAAE,IAAI,EAAE,KAAK,EAAE,QAAQ,EAAE,CAAC;AACvC,CAAC"}
|