@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,604 @@
|
|
|
1
|
+
import { MONIKER_RE, validateMoniker, buildAgentRevocationTbs } from "@cello-protocol/protocol-types";
|
|
2
|
+
import { DbIdentityStore, DbRegistrationPersistence } from "./db-identity-store.js";
|
|
3
|
+
import { generateKLocalSeed, InMemoryKeyProvider } from "@cello-protocol/crypto";
|
|
4
|
+
import { TrustSignalStore } from "./trust-signal-store.js";
|
|
5
|
+
import { countAttendance } from "./co-attendance.js";
|
|
6
|
+
import { noAgentsGuidance } from "./onboarding-guidance.js";
|
|
7
|
+
import { extractErrorMessage } from "./error-message.js";
|
|
8
|
+
export function registerAgentHandlers(deps) {
|
|
9
|
+
const { handlers, logger, sessionNodeManager, agents, onlineAgents, explicitlyOfflineAgents, getNotificationDispatcher, getConnState, perConnectionState, getAgentsForConnection, startAgentInternal, dropAgentSignaling, stopSweepTick, awayAckSent, keyProviders, loadedAgents, getAgentSignaling, waitForSignalingConnected, perAgentSignaling, } = deps;
|
|
10
|
+
// ─── MCP-001: cello_start_agent handler ───
|
|
11
|
+
// Bring a registered agent online WITHOUT claiming it as this connection's current agent.
|
|
12
|
+
handlers.set("cello_start_agent", async (params, _connectionId) => {
|
|
13
|
+
const name = params?.name;
|
|
14
|
+
if (!name) {
|
|
15
|
+
return { ok: false, reason: "missing_params", guidance: "Provide 'name' parameter with the agent name to start." };
|
|
16
|
+
}
|
|
17
|
+
return startAgentInternal(name);
|
|
18
|
+
});
|
|
19
|
+
// ─── PERSIST-002 (AC-004): cello_create_agent handler ───
|
|
20
|
+
// The explicit agent-creation path: generate a fresh K_local seed, write it as an `agents` row in
|
|
21
|
+
// the encrypted DB (NO key file), and wire the agent into the live daemon so it can be registered
|
|
22
|
+
// and used WITHOUT a restart. Creation is explicit — cello_start_agent never auto-creates on a typo.
|
|
23
|
+
handlers.set("cello_create_agent", async (params, _connectionId) => {
|
|
24
|
+
const name = validateMoniker(params?.name);
|
|
25
|
+
if (name === null) {
|
|
26
|
+
return { ok: false, reason: "invalid_agent_name", guidance: `Provide a 'name' (1-64 chars: letters, digits, '-' or '_'; regex ${MONIKER_RE.source}) for the new agent.` };
|
|
27
|
+
}
|
|
28
|
+
const store = new DbIdentityStore(sessionNodeManager.getDb(), logger);
|
|
29
|
+
if (store.hasActiveAgent(name) || agents.some((a) => a.name === name)) {
|
|
30
|
+
return { ok: false, reason: "agent_already_exists", guidance: `Agent '${name}' already exists. Choose a different name, or see cello_agents.` };
|
|
31
|
+
}
|
|
32
|
+
let pubkeyHex;
|
|
33
|
+
let agentId;
|
|
34
|
+
try {
|
|
35
|
+
const seed = generateKLocalSeed();
|
|
36
|
+
const keyProvider = new InMemoryKeyProvider(seed);
|
|
37
|
+
pubkeyHex = Buffer.from(await keyProvider.getPublicKey()).toString("hex");
|
|
38
|
+
// SI-001: createAgent stores the seed in the encrypted DB and logs only the pubkey + agent_id.
|
|
39
|
+
agentId = store.createAgent(name, seed, pubkeyHex);
|
|
40
|
+
// Runtime-add: make the agent immediately registrable/usable (the register handler resolves
|
|
41
|
+
// identity from keyProviders/loadedAgents; per-agent signaling is created lazily on register).
|
|
42
|
+
keyProviders.set(name, keyProvider);
|
|
43
|
+
const loaded = { name, pubkey: pubkeyHex, keyProvider };
|
|
44
|
+
loadedAgents.push(loaded);
|
|
45
|
+
// The LOAD outcome, not the operator-facing state — that is derived per call by
|
|
46
|
+
// resolveAgentState. This agent has just been created and has no FROST share, so it derives as
|
|
47
|
+
// `unregistered` until `cello register-agent` runs. It used to be recorded as "registered"
|
|
48
|
+
// here, which was false at the moment it was written: nobody could reach this agent yet.
|
|
49
|
+
agents.push({ name, state: "stopped", pubkey: pubkeyHex });
|
|
50
|
+
// CELLO-M7-CONN-001 (DOD-CONN-1, supersedes ONBOARD-001 keystone election): on a fresh install
|
|
51
|
+
// the daemon started with zero agents, so there were no directory connections. Bring up THIS
|
|
52
|
+
// agent's OWN directory connection now (production: getAgentSignaling creates + connects a
|
|
53
|
+
// dedicated manager authenticated as this agent; the directory door becomes active with no
|
|
54
|
+
// restart). There is no shared keystone to elect into. In the test path getAgentSignaling returns
|
|
55
|
+
// the already-present shared manager (no-op).
|
|
56
|
+
getAgentSignaling(name, keyProvider, pubkeyHex);
|
|
57
|
+
// "initiated" not "established": getAgentSignaling starts the connection but does not await it
|
|
58
|
+
// (the SignalingManager emits directory.signaling.connected on the state transition; the
|
|
59
|
+
// handshake itself is directory.signaling.authenticated — 058-LOGNAME).
|
|
60
|
+
logger.info("agent.directory.connection.initiated", { agentName: name, agentPubkey: pubkeyHex });
|
|
61
|
+
}
|
|
62
|
+
catch (err) {
|
|
63
|
+
logger.error("persist.identity.persist.failed", { agentName: name, error: extractErrorMessage(err) });
|
|
64
|
+
return { ok: false, reason: "agent_create_failed", guidance: "Could not create the agent. Check the daemon log and that the CELLO directory is writable, then retry." };
|
|
65
|
+
}
|
|
66
|
+
// Creation is not an online/offline transition — the agent appears (cello_list_agents) but is
|
|
67
|
+
// not online until cello_start_agent. Just record it.
|
|
68
|
+
logger.info("agent.created", { agentName: name, agentId, agentPubkey: pubkeyHex });
|
|
69
|
+
return { ok: true, name, pubkey: pubkeyHex, agentId };
|
|
70
|
+
});
|
|
71
|
+
// ─── CELLO-M7-REMOVE-001 (DOD-REMOVE-1): cello_remove_agent handler ───
|
|
72
|
+
// RETIRE-AND-KEEP: flip the agent's local row to state='retired' (its row, keys, and history are
|
|
73
|
+
// KEPT for accountability — never hard-deleted, SI-002) and FREE the human name for reuse. Purge the
|
|
74
|
+
// retired identity from the live runtime so it stops operating and the name is immediately available
|
|
75
|
+
// to a NEW `cello_create_agent`. One-way. (DEC-4: the signed DIRECTORY revocation is DOD-REMOVE-2 —
|
|
76
|
+
// not built here; this unit is the local record shape only.)
|
|
77
|
+
// CELLO-M7-REMOVE-001 (DOD-REMOVE-2): build + self-sign an agent revocation and submit it to the
|
|
78
|
+
// directory on the agent's K_local-authenticated signaling stream. Self-authorized — the directory
|
|
79
|
+
// verifies the signature against the agent's registered K_local before appending. Best-effort: returns
|
|
80
|
+
// { recorded:false, reason } if the directory is unreachable / rejects (DB-001 — the caller still
|
|
81
|
+
// applies the one-way local retire and surfaces a distinct status).
|
|
82
|
+
async function submitAgentRevocation(opts) {
|
|
83
|
+
const { agentName, signer, kLocalPubkeyHex, regAgentId } = opts;
|
|
84
|
+
const epochId = "";
|
|
85
|
+
const reason = "voluntary";
|
|
86
|
+
const revokedAt = Date.now();
|
|
87
|
+
const tbs = buildAgentRevocationTbs(regAgentId, kLocalPubkeyHex, epochId, reason, revokedAt);
|
|
88
|
+
const sigHex = Buffer.from(await signer.sign(tbs)).toString("hex");
|
|
89
|
+
// If the agent has no live signaling (e.g. a re-push of an already-retired agent), getAgentSignaling
|
|
90
|
+
// lazily creates a dedicated manager — drop it again afterwards so we don't leak a reconnect loop.
|
|
91
|
+
const hadSignaling = perAgentSignaling.has(agentName);
|
|
92
|
+
const { signaling } = getAgentSignaling(agentName, signer, kLocalPubkeyHex);
|
|
93
|
+
// createdSignaling is true only when this call lazily created a NEW per-agent manager (production);
|
|
94
|
+
// on the shared test path perAgentSignaling stays empty, so it is false and dropAgentSignaling no-ops.
|
|
95
|
+
const createdSignaling = !hadSignaling && perAgentSignaling.has(agentName);
|
|
96
|
+
try {
|
|
97
|
+
const connected = await waitForSignalingConnected(signaling, 10_000);
|
|
98
|
+
if (!connected)
|
|
99
|
+
return { recorded: false, reason: "directory_unreachable" };
|
|
100
|
+
let resolveFrame;
|
|
101
|
+
const pending = new Promise((r) => { resolveFrame = r; });
|
|
102
|
+
// Match the reply by agent_id so a revocation on a shared signaling stream is never cross-wired.
|
|
103
|
+
const unregister = signaling.registerInboundHandler((frame) => {
|
|
104
|
+
const t = frame["type"];
|
|
105
|
+
if ((t === "agent_revocation_ack" || t === "agent_revocation_error") && frame["agent_id"] === regAgentId)
|
|
106
|
+
resolveFrame(frame);
|
|
107
|
+
});
|
|
108
|
+
try {
|
|
109
|
+
const sent = await signaling.sendRaw({ type: "revoke_agent", agent_id: regAgentId, epoch_id: epochId, reason, revoked_at: revokedAt, signature: sigHex });
|
|
110
|
+
if (!sent.ok)
|
|
111
|
+
return { recorded: false, reason: sent.reason ?? "directory_unreachable" };
|
|
112
|
+
let timer;
|
|
113
|
+
const timeoutP = new Promise((r) => { timer = setTimeout(() => r({ type: "__timeout__" }), 15_000); });
|
|
114
|
+
const frame = await Promise.race([pending, timeoutP]);
|
|
115
|
+
clearTimeout(timer);
|
|
116
|
+
if (frame["type"] === "__timeout__")
|
|
117
|
+
return { recorded: false, reason: "timeout" };
|
|
118
|
+
if (frame["type"] === "agent_revocation_error")
|
|
119
|
+
return { recorded: false, reason: String(frame["reason"] ?? "rejected") };
|
|
120
|
+
logger.info("agent.revocation.submitted", { agentName, agentId: regAgentId });
|
|
121
|
+
return { recorded: true };
|
|
122
|
+
}
|
|
123
|
+
finally {
|
|
124
|
+
unregister();
|
|
125
|
+
}
|
|
126
|
+
}
|
|
127
|
+
finally {
|
|
128
|
+
if (createdSignaling) {
|
|
129
|
+
await dropAgentSignaling(agentName).catch((err) => {
|
|
130
|
+
logger.warn("agent.revocation.signaling_teardown_failed", { agentName, error: extractErrorMessage(err) });
|
|
131
|
+
});
|
|
132
|
+
}
|
|
133
|
+
}
|
|
134
|
+
}
|
|
135
|
+
handlers.set("cello_remove_agent", async (params, _connectionId) => {
|
|
136
|
+
const name = validateMoniker(params?.name);
|
|
137
|
+
if (name === null) {
|
|
138
|
+
return { ok: false, reason: "invalid_agent_name", guidance: `Provide the 'name' of the agent to remove (1-64 chars: letters, digits, '-' or '_'; regex ${MONIKER_RE.source}).` };
|
|
139
|
+
}
|
|
140
|
+
const store = new DbIdentityStore(sessionNodeManager.getDb(), logger);
|
|
141
|
+
// The active row (a fresh removal) OR the most-recent retired row (a DB-001 re-push). Captured BEFORE
|
|
142
|
+
// any retire — the active-only accessors filter retired rows out once state is flipped.
|
|
143
|
+
const target = store.getAgentForRevocation(name);
|
|
144
|
+
if (!target) {
|
|
145
|
+
return { ok: false, reason: "agent_not_found", guidance: `No agent named '${name}'. Check cello_agents.` };
|
|
146
|
+
}
|
|
147
|
+
const wasActive = target.state !== "retired";
|
|
148
|
+
const agentId = target.localAgentId;
|
|
149
|
+
// An already-retired agent that was never registered has nothing to do — no local retire (one-way,
|
|
150
|
+
// already done) and no directory revocation to push. Treat a repeat removal as agent_not_found (a
|
|
151
|
+
// tombstone is never re-retired). A retired agent WITH a directory id falls through to the DB-001
|
|
152
|
+
// re-push below.
|
|
153
|
+
if (!wasActive && !target.regAgentId) {
|
|
154
|
+
return { ok: false, reason: "agent_not_found", guidance: `No active agent named '${name}'. Removal is one-way; '${name}' is already retired.` };
|
|
155
|
+
}
|
|
156
|
+
// DOD-REMOVE-2: build + self-sign + submit the directory revocation. Done for a fresh removal AND a
|
|
157
|
+
// re-push of an already-retired agent (DB-001). Skipped only if the agent was never registered (no
|
|
158
|
+
// directory-known id to revoke). The signer is re-derived from the kept K_local seed, so it works
|
|
159
|
+
// even for an already-retired agent whose runtime keyProvider was purged.
|
|
160
|
+
let directoryRevocation = "skipped";
|
|
161
|
+
let revocationReason;
|
|
162
|
+
if (target.regAgentId) {
|
|
163
|
+
const signer = new InMemoryKeyProvider(target.kLocalSeed);
|
|
164
|
+
const kLocalPubkeyHex = Buffer.from(await signer.getPublicKey()).toString("hex");
|
|
165
|
+
const res = await submitAgentRevocation({ agentName: name, signer, kLocalPubkeyHex, regAgentId: target.regAgentId });
|
|
166
|
+
directoryRevocation = res.recorded ? "recorded" : "deferred";
|
|
167
|
+
revocationReason = res.reason;
|
|
168
|
+
if (!res.recorded) {
|
|
169
|
+
logger.error("agent.removal.failed", { agentName: name, error: res.reason ?? "directory_unreachable" });
|
|
170
|
+
}
|
|
171
|
+
else {
|
|
172
|
+
logger.info("agent.revocation.recorded", { agentId: target.regAgentId });
|
|
173
|
+
}
|
|
174
|
+
}
|
|
175
|
+
else if (target.state === "registered") {
|
|
176
|
+
// Anomaly (fallback-finder MEDIUM): the agent is locally marked registered but has no
|
|
177
|
+
// directory-known id, so the revocation cannot be pushed. Do NOT report the benign "never
|
|
178
|
+
// registered" — surface it loudly so a registered-but-unrevocable agent is visible.
|
|
179
|
+
revocationReason = "registered_without_directory_id";
|
|
180
|
+
logger.error("agent.removal.failed", { agentName: name, error: "registered_without_directory_id" });
|
|
181
|
+
}
|
|
182
|
+
// Local retire (one-way) + runtime purge — only for a fresh removal. An already-retired re-push does
|
|
183
|
+
// not re-retire (and has nothing loaded to purge).
|
|
184
|
+
if (wasActive) {
|
|
185
|
+
store.retireAgent(name);
|
|
186
|
+
// Tear down the retired identity's live runtime so it can no longer receive or re-authenticate.
|
|
187
|
+
// AWAITED + LOGGED on failure (review HIGH-1 / fallback-finder MEDIUM): a teardown that didn't
|
|
188
|
+
// happen must be visible.
|
|
189
|
+
if (onlineAgents.has(name)) {
|
|
190
|
+
onlineAgents.delete(name);
|
|
191
|
+
await sessionNodeManager.removeStandingReceiverForAgent(name).catch((err) => {
|
|
192
|
+
logger.warn("agent.removal.receiver_teardown_failed", { agentName: name, agentId, error: extractErrorMessage(err) });
|
|
193
|
+
});
|
|
194
|
+
}
|
|
195
|
+
// Stop+forget the retired agent's dedicated per-agent signaling manager (review HIGH-1).
|
|
196
|
+
await dropAgentSignaling(name).catch((err) => {
|
|
197
|
+
logger.warn("agent.removal.signaling_teardown_failed", { agentName: name, agentId, error: extractErrorMessage(err) });
|
|
198
|
+
});
|
|
199
|
+
// 048-SWEEPTICK: and its collection tick, which would otherwise outlive the agent for the life
|
|
200
|
+
// of the daemon — skipping every five minutes for a name that no longer exists.
|
|
201
|
+
stopSweepTick(name);
|
|
202
|
+
keyProviders.delete(name);
|
|
203
|
+
const li = loadedAgents.findIndex((a) => a.name === name);
|
|
204
|
+
if (li >= 0)
|
|
205
|
+
loadedAgents.splice(li, 1);
|
|
206
|
+
const ai = agents.findIndex((a) => a.name === name);
|
|
207
|
+
if (ai >= 0)
|
|
208
|
+
agents.splice(ai, 1);
|
|
209
|
+
// CELLO-M7-CONN-001 (DOD-CONN-1): no keystone to clear — the agent's OWN per-agent directory
|
|
210
|
+
// connection was already torn down above (dropAgentSignaling). Removing any agent disturbs only
|
|
211
|
+
// its own connection; no other agent's connection, and no shared "keystone", is affected. This is
|
|
212
|
+
// the fix for the Demo1 bug (the keystone lingered authenticated as the removed agent).
|
|
213
|
+
logger.info("agent.directory.connection.dropped", { agentName: name, agentId, reason: "agent_removed" });
|
|
214
|
+
// Drop the retired agent as any connection's current agent.
|
|
215
|
+
for (const [connId, state] of perConnectionState) {
|
|
216
|
+
if (state.currentAgent === name) {
|
|
217
|
+
state.currentAgent = null;
|
|
218
|
+
state.clearedAgent = name; // this connection HAD an intent; do not guess a replacement
|
|
219
|
+
getNotificationDispatcher().setCurrentAgent(connId, null);
|
|
220
|
+
getNotificationDispatcher().dispatchAgentCurrentChanged(connId, name, null);
|
|
221
|
+
}
|
|
222
|
+
}
|
|
223
|
+
// agent.removal.retired (observability): never log key material — only the name + agent_id.
|
|
224
|
+
logger.info("agent.removal.retired", { agentName: name, agentId });
|
|
225
|
+
getNotificationDispatcher().dispatchAgentStateChanged(name, "offline", "removed");
|
|
226
|
+
}
|
|
227
|
+
const baseLine = wasActive
|
|
228
|
+
? "Agent retired. This is one-way: its identity and history are kept for accountability, but it can no longer connect. The name is now free to reuse with cello create-agent."
|
|
229
|
+
: "Agent was already retired locally.";
|
|
230
|
+
const dirLine = directoryRevocation === "recorded"
|
|
231
|
+
? " A signed revocation was recorded at the directory — peers will see it as revoked."
|
|
232
|
+
: directoryRevocation === "deferred"
|
|
233
|
+
? ` The directory could NOT be reached to record the revocation (${revocationReason ?? "directory_unreachable"}) — peers do not yet see it as revoked. Re-run 'cello remove-agent ${name}' when the directory is reachable to push it.`
|
|
234
|
+
: revocationReason === "registered_without_directory_id"
|
|
235
|
+
? " WARNING: this agent appears registered but has no directory id recorded locally, so its revocation could NOT be pushed — peers may still see it as reachable. Check the daemon logs (agent.removal.failed)."
|
|
236
|
+
: " It was never registered with a directory, so there is no directory revocation to record.";
|
|
237
|
+
return { ok: true, name, agentId, oneWay: true, directoryRevocation, guidance: baseLine + dirLine };
|
|
238
|
+
});
|
|
239
|
+
// ─── MCP-001: cello_set_agent_offline — renamed on BOTH the tool and the wire ───
|
|
240
|
+
//
|
|
241
|
+
// NO LEGACY WIRE ALIAS, and no second name for this anywhere. One operator, no install base:
|
|
242
|
+
// an alias is permanent debt bought for nobody, and a verb that exists under two names is how
|
|
243
|
+
// both humans and AI coders end up calling the wrong one. connect and daemon are promoted and
|
|
244
|
+
// reinstalled together, and the version gate an alias would have complemented does not even
|
|
245
|
+
// exist — cello-mcp.ts checks `ipc.connect` for a `version_mismatch` reason NOTHING here
|
|
246
|
+
// returns.
|
|
247
|
+
//
|
|
248
|
+
// A genuinely mismatched shim now fails loudly and correctly: `Unknown method:
|
|
249
|
+
// cello_set_agent_offline`, whose guidance already names the cause (shim/daemon version skew) and
|
|
250
|
+
// the fix (`cello logout && cello login`). Loud and fixable beats silent and permanent.
|
|
251
|
+
//
|
|
252
|
+
// The TOOL was renamed because the old name described the wrong axis and cost real confusion.
|
|
253
|
+
// There are two independent things an operator does to an agent:
|
|
254
|
+
//
|
|
255
|
+
// lifecycle — cello_start_agent / cello_set_agent_offline (offline ⇄ online)
|
|
256
|
+
// attendance — cello_use_agent / cello_stop_using_agent (who this connection drives)
|
|
257
|
+
//
|
|
258
|
+
// "stop_agent" reads as the opposite of "use_agent" — stop using it — but it is the opposite of
|
|
259
|
+
// "start_agent". An operator wanting to step away from an agent so its AWAY path could fire ran
|
|
260
|
+
// it and took the agent fully offline instead, at which point inbound sessions were refused with
|
|
261
|
+
// `counterparty_did_not_accept` and the away reply could never be produced. The two states look
|
|
262
|
+
// alike from outside (nobody is answering) and behave nothing alike.
|
|
263
|
+
//
|
|
264
|
+
// The deselect half genuinely did not exist: `cello_use_agent` requires a name, so a connection
|
|
265
|
+
// could SWITCH agents but never LET GO of one. The only way to clear a selection was to shut the
|
|
266
|
+
// agent down, which is why the two verbs collapsed into each other.
|
|
267
|
+
handlers.set("cello_set_agent_offline", async (params, _connectionId) => {
|
|
268
|
+
const name = params?.name;
|
|
269
|
+
if (!name) {
|
|
270
|
+
return { ok: false, reason: "missing_params", guidance: "Provide 'name' parameter with the agent name to stop." };
|
|
271
|
+
}
|
|
272
|
+
const agent = agents.find((a) => a.name === name);
|
|
273
|
+
if (!agent || agent.state === "load_failed") {
|
|
274
|
+
return { ok: false, reason: "agent_not_found", guidance: `Agent '${name}' does not exist. Check agent names with cello_agents.` };
|
|
275
|
+
}
|
|
276
|
+
// M12-P16: record the OPERATOR'S INTENT first, before any bookkeeping check can short-circuit.
|
|
277
|
+
// The idempotent early-return below keys on `onlineAgents`, which answers "was this agent started
|
|
278
|
+
// through cello_start_agent" — not "is it reachable". An agent serving traffic without ever
|
|
279
|
+
// entering that set (a standing receiver built directly, an auto-start path) would take the
|
|
280
|
+
// early return, report `ok: true`, and keep answering: the switch pressed, nothing switched off.
|
|
281
|
+
// Intent is not conditional on internal state.
|
|
282
|
+
explicitlyOfflineAgents.add(name);
|
|
283
|
+
if (!onlineAgents.has(name)) {
|
|
284
|
+
// Idempotent — already registered/offline, no event
|
|
285
|
+
return { ok: true };
|
|
286
|
+
}
|
|
287
|
+
onlineAgents.delete(name);
|
|
288
|
+
/**
|
|
289
|
+
* DOD-M15-AWAYSCOPE-1 — say OFFLINE before the sessions are torn down, not after.
|
|
290
|
+
*
|
|
291
|
+
* ⚠️ THE ORDERING IS THE WHOLE POINT. The teardown below destroys every session node for this
|
|
292
|
+
* agent, and the relay client rides on the node — announce afterwards and there is nothing left
|
|
293
|
+
* to announce through. The counterparty would be left reading the last thing they were told,
|
|
294
|
+
* which is 'unattended': "nobody is watching, it will be read later". That is the opposite of
|
|
295
|
+
* what an operator reaching for a kill switch means, and 'offline' exists as a third value
|
|
296
|
+
* precisely so the two cannot be confused.
|
|
297
|
+
*
|
|
298
|
+
* Best-effort, like every attendance notice — the send is not awaited and may lose the race with
|
|
299
|
+
* the teardown. The failure mode is the counterparty reading 'gone' once the relay loses the
|
|
300
|
+
* connection, which is true and is the next-best thing to hear.
|
|
301
|
+
*/
|
|
302
|
+
sessionNodeManager.announceAttendance(name, "offline");
|
|
303
|
+
// DOD-LOOP-1: tear down this agent's standing receiver. AWAITED and LOGGED, matching
|
|
304
|
+
// cello_remove_agent — a teardown that did not happen must be VISIBLE. Fire-and-forget with a
|
|
305
|
+
// swallowed catch reported the agent offline while its receiver could still be live and bound
|
|
306
|
+
// to it: a stopped agent that can still be handed an inbound session, with nothing in the log.
|
|
307
|
+
await sessionNodeManager.removeStandingReceiverForAgent(name).catch((err) => {
|
|
308
|
+
logger.warn("agent.stop.receiver_teardown_failed", { agentName: name, error: extractErrorMessage(err) });
|
|
309
|
+
});
|
|
310
|
+
// M12-P16: OFFLINE MEANS STOP TALKING.
|
|
311
|
+
//
|
|
312
|
+
// Tearing down the standing receiver only stops NEW inbound sessions. Direct delivery goes to
|
|
313
|
+
// the per-session node, so an agent reported `offline` kept accepting content on every session
|
|
314
|
+
// it already had, appending leaves, running its away logic and REPLYING. Measured live across
|
|
315
|
+
// two machines on 2026-08-05; the whole exchange is in the counterparty's transcript. The CLI's
|
|
316
|
+
// own help promises "It stops accepting anything until restarted", and an operator reaching for
|
|
317
|
+
// this is reaching for a kill switch — one that keeps answering while reporting success is worse
|
|
318
|
+
// than none at all.
|
|
319
|
+
//
|
|
320
|
+
// Scoped to THIS agent's sessions: another agent on the same daemon is still online and its
|
|
321
|
+
// conversations must not be collateral. `interrupted` is the honest status — this side stopped
|
|
322
|
+
// participating. Not `sealed` (nothing was agreed with the counterparty) and not `abandoned`
|
|
323
|
+
// (terminal, forfeits the receipt); an interrupted session can still be sealed later, which
|
|
324
|
+
// M12-P15 is what makes reliably possible.
|
|
325
|
+
const ownSessions = sessionNodeManager.getSessionsByStatus("active").filter((r) => r.agent_name === name);
|
|
326
|
+
for (const s of ownSessions) {
|
|
327
|
+
try {
|
|
328
|
+
await sessionNodeManager.destroySessionNode(name, s.session_id, "interrupted");
|
|
329
|
+
}
|
|
330
|
+
catch (err) {
|
|
331
|
+
// Never let one stuck session leave the agent half-offline: the others must still be torn
|
|
332
|
+
// down, and the failure must be visible rather than swallowed into a green `{ ok: true }`.
|
|
333
|
+
logger.error("agent.stop.session_teardown_failed", {
|
|
334
|
+
agentName: name, sessionId: s.session_id,
|
|
335
|
+
impact: "this session may still accept content from the counterparty while the agent reports offline",
|
|
336
|
+
error: extractErrorMessage(err),
|
|
337
|
+
});
|
|
338
|
+
}
|
|
339
|
+
}
|
|
340
|
+
if (ownSessions.length > 0) {
|
|
341
|
+
logger.info("agent.stop.sessions_interrupted", { agentName: name, count: ownSessions.length });
|
|
342
|
+
}
|
|
343
|
+
logger.info("agent.offline", { agentName: name, reason: "stopped" });
|
|
344
|
+
// MCP-002: Broadcast agent_state_changed to ALL connections
|
|
345
|
+
getNotificationDispatcher().dispatchAgentStateChanged(name, "offline", "stopped");
|
|
346
|
+
// Clear current agent for all connections that had this agent as current
|
|
347
|
+
for (const [connId, state] of perConnectionState) {
|
|
348
|
+
if (state.currentAgent === name) {
|
|
349
|
+
state.currentAgent = null;
|
|
350
|
+
state.clearedAgent = name; // this connection HAD an intent; do not guess a replacement
|
|
351
|
+
getNotificationDispatcher().setCurrentAgent(connId, null);
|
|
352
|
+
getNotificationDispatcher().dispatchAgentCurrentChanged(connId, name, null);
|
|
353
|
+
logger.info("agent.current.switched", { connectionId: connId, fromAgent: name, toAgent: null });
|
|
354
|
+
}
|
|
355
|
+
}
|
|
356
|
+
return { ok: true };
|
|
357
|
+
});
|
|
358
|
+
// ─── cello_stop_using_agent handler — the missing half of cello_use_agent ───
|
|
359
|
+
//
|
|
360
|
+
// `cello_use_agent` requires a name, so a connection could SWITCH agents but never LET GO of one.
|
|
361
|
+
// The only way to clear a selection was `cello_set_agent_offline`, which takes the agent OFFLINE —
|
|
362
|
+
// a different axis entirely, and the confusion that named this handler into existence.
|
|
363
|
+
//
|
|
364
|
+
// The gap was not cosmetic. An attended agent never sends its away reply (`isAttended` suppresses
|
|
365
|
+
// it), so an operator who wanted to step away had exactly two options: shut the agent down, which
|
|
366
|
+
// makes it unreachable and refuses inbound sessions outright, or select some OTHER agent — which
|
|
367
|
+
// is impossible if you only have one. A single-agent operator had no route to "away" at all.
|
|
368
|
+
//
|
|
369
|
+
// Releasing does NOT touch the agent's lifecycle: it stays online with its standing receiver, so
|
|
370
|
+
// it can still accept inbound sessions and answer them with its away message. That is the whole
|
|
371
|
+
// point — this is how an operator becomes reachable-but-absent rather than simply gone.
|
|
372
|
+
handlers.set("cello_stop_using_agent", async (_params, connectionId) => {
|
|
373
|
+
const connState = getConnState(connectionId);
|
|
374
|
+
if (!connState) {
|
|
375
|
+
return { ok: false, reason: "connection_not_registered", guidance: "Send ipc.connect frame before calling agent tools." };
|
|
376
|
+
}
|
|
377
|
+
const fromAgent = connState.currentAgent;
|
|
378
|
+
// CLEARED ON BOTH BRANCHES, including the one that releases nothing. `clearedAgent` means "this
|
|
379
|
+
// connection's choice was taken away from it, do not guess a replacement" — it is set when an
|
|
380
|
+
// agent is taken offline or removed UNDERNEATH a connection. A release is the opposite: the
|
|
381
|
+
// operator is deliberately choosing to hold nothing. Leaving the flag set would mean the one
|
|
382
|
+
// gesture that explicitly says "I hold nothing, on purpose" left the connection locked out of
|
|
383
|
+
// the sole-online fallback for the rest of the session, which only cello_use_agent could undo.
|
|
384
|
+
// (Review finding 6 — the original code cleared it on neither branch while its own comment
|
|
385
|
+
// argued it should.)
|
|
386
|
+
delete connState.clearedAgent;
|
|
387
|
+
if (!fromAgent) {
|
|
388
|
+
// Idempotent, and says so — releasing nothing is not an error worth failing a script over.
|
|
389
|
+
return { ok: true, released: null, guidance: "This connection was not attending any agent. Nothing to release." };
|
|
390
|
+
}
|
|
391
|
+
connState.currentAgent = null;
|
|
392
|
+
/**
|
|
393
|
+
* DOD-M15-AWAYSCOPE-1 — AND THE COUNTERPARTY IS TOLD. Review finding: this was the one gesture
|
|
394
|
+
* an operator makes ON PURPOSE to step away, and it announced nothing.
|
|
395
|
+
*
|
|
396
|
+
* The only other `unattended` producer is the socket closing. So an operator who finished a
|
|
397
|
+
* conversation, released the agent and left the terminal open left their counterparty reading
|
|
398
|
+
* `attended` — "a person is watching" — indefinitely. That is the exact false reassurance the
|
|
399
|
+
* three-value design exists to prevent, arriving from the most deliberate action of the three.
|
|
400
|
+
*
|
|
401
|
+
* Read AFTER the selection is cleared, for the same reason the disconnect path reads after
|
|
402
|
+
* `forgetConnection`: a co-attended agent is legitimate and permanent, and a count taken before
|
|
403
|
+
* would report an absence while a sibling connection is still reading.
|
|
404
|
+
*/
|
|
405
|
+
if (countAttendance(perConnectionState, fromAgent) === 0) {
|
|
406
|
+
sessionNodeManager.announceAttendance(fromAgent, "unattended");
|
|
407
|
+
}
|
|
408
|
+
getNotificationDispatcher().setCurrentAgent(connectionId, null);
|
|
409
|
+
getNotificationDispatcher().dispatchAgentCurrentChanged(connectionId, fromAgent, null);
|
|
410
|
+
logger.info("agent.current.released", { connectionId, fromAgent });
|
|
411
|
+
return {
|
|
412
|
+
ok: true,
|
|
413
|
+
released: fromAgent,
|
|
414
|
+
// The fallback caveat is stated because omitting it is how this tool would mislead the very
|
|
415
|
+
// operator it was built for. "Step away" reads as "nothing I do now acts as that agent" — but
|
|
416
|
+
// if it is the ONLY agent online, agent-scoped calls with no explicit `agent` still resolve to
|
|
417
|
+
// it via the sole-online fallback, and cello_send would happily send as them, ok:true.
|
|
418
|
+
guidance: `No longer attending '${fromAgent}'. It stays ONLINE and reachable — inbound sessions now get ` +
|
|
419
|
+
`its away message instead of a live reply. NOTE: if it is the only agent online, agent-scoped ` +
|
|
420
|
+
`calls without an explicit 'agent' still resolve to it; pass 'agent' explicitly, or take it ` +
|
|
421
|
+
`offline with cello_set_agent_offline if you want those calls to refuse.`,
|
|
422
|
+
};
|
|
423
|
+
});
|
|
424
|
+
// ─── MCP-001: cello_use_agent handler ───
|
|
425
|
+
handlers.set("cello_use_agent", async (params, connectionId) => {
|
|
426
|
+
const name = params?.name;
|
|
427
|
+
if (!name) {
|
|
428
|
+
return { ok: false, reason: "missing_params", guidance: "Provide 'name' parameter with the agent name to use." };
|
|
429
|
+
}
|
|
430
|
+
const agent = agents.find((a) => a.name === name);
|
|
431
|
+
if (!agent || agent.state === "load_failed") {
|
|
432
|
+
return { ok: false, reason: "agent_not_found", guidance: `Agent '${name}' does not exist. Create it with 'cello create-agent ${name}', register it, then retry — or check names with cello_agents.` };
|
|
433
|
+
}
|
|
434
|
+
const connState = getConnState(connectionId);
|
|
435
|
+
if (!connState) {
|
|
436
|
+
return { ok: false, reason: "connection_not_registered", guidance: "Send ipc.connect frame before calling agent tools." };
|
|
437
|
+
}
|
|
438
|
+
// M8C-AUTOSTART-1 (A1): auto-start the agent if it is not online, so the incantation collapses
|
|
439
|
+
// to `login → use_agent` (no separate cello_start_agent). On a start failure, return a
|
|
440
|
+
// structured agent_start_failed and leave the current selection UNCHANGED — no half-selected
|
|
441
|
+
// state (A3). cello_start_agent stays available for bring-online-without-claiming.
|
|
442
|
+
if (!onlineAgents.has(name)) {
|
|
443
|
+
logger.info("agent.autostart.attempted", { connectionId, agentName: name });
|
|
444
|
+
const startRes = startAgentInternal(name);
|
|
445
|
+
if (!startRes.ok) {
|
|
446
|
+
// Structured failure envelope (D6). Today `startAgentInternal` is permissive (D12) and its
|
|
447
|
+
// only failure — agent_not_found — is already caught by the existence pre-check above, so
|
|
448
|
+
// this branch is currently unreachable. It is the RESERVED structured-failure surface for
|
|
449
|
+
// when auto-start gains a synchronous failure mode (e.g. D12's reverse: a bounded
|
|
450
|
+
// waitForSignalingConnected making `directory_unreachable` a real start failure). Kept so
|
|
451
|
+
// that extension surfaces the reason + guidance here with the selection left unchanged.
|
|
452
|
+
// See M8C-DECISIONS D12 + BUILD-JOURNAL Entry 8.
|
|
453
|
+
logger.warn("agent.autostart.failed", { connectionId, agentName: name, reason: startRes.reason });
|
|
454
|
+
return {
|
|
455
|
+
ok: false,
|
|
456
|
+
reason: "agent_start_failed",
|
|
457
|
+
start_reason: startRes.reason,
|
|
458
|
+
guidance: `Could not start agent '${name}' to select it: ${startRes.guidance} Your current agent is unchanged.`,
|
|
459
|
+
};
|
|
460
|
+
}
|
|
461
|
+
}
|
|
462
|
+
if (connState.currentAgent === name) {
|
|
463
|
+
return { ok: false, reason: "agent_already_current", guidance: `Agent '${name}' is already the current agent for this connection. No action needed — you can proceed with session operations.` };
|
|
464
|
+
}
|
|
465
|
+
const fromAgent = connState.currentAgent;
|
|
466
|
+
connState.currentAgent = name;
|
|
467
|
+
// A fresh choice supersedes any earlier one that was taken away. Without this a connection that
|
|
468
|
+
// ever had an agent stopped under it would be refused the sole-online fallback forever, even
|
|
469
|
+
// after the operator selected again.
|
|
470
|
+
delete connState.clearedAgent;
|
|
471
|
+
// M8C-AWAY-1: this agent just became attended — clear its away-ack dedup entries so the NEXT
|
|
472
|
+
// away period (after this attended stretch ends) gets a fresh ack instead of staying silent.
|
|
473
|
+
for (const key of Array.from(awayAckSent)) {
|
|
474
|
+
if (key.startsWith(`${name}:`))
|
|
475
|
+
awayAckSent.delete(key);
|
|
476
|
+
}
|
|
477
|
+
/**
|
|
478
|
+
* DOD-M15-AWAYSCOPE-1 — and the COUNTERPARTY is told, out of band, that somebody arrived.
|
|
479
|
+
*
|
|
480
|
+
* This is the half that replaced the away reply. An unattended agent used to announce itself by
|
|
481
|
+
* sending its greeting INTO the conversation, which took a hash-chain leaf and destroyed the
|
|
482
|
+
* receipt. Attendance is a fact about the session, so it travels on the liveness frame instead:
|
|
483
|
+
* no leaf, no transcript row, and the far agent never sees a message it has to answer.
|
|
484
|
+
*
|
|
485
|
+
* Fired on the TRANSITION rather than on a timer. A poll would tell the counterparty the same
|
|
486
|
+
* thing repeatedly and still be late; the moment an operator attaches is the moment worth
|
|
487
|
+
* reporting, and the relay holds it until asked.
|
|
488
|
+
*/
|
|
489
|
+
sessionNodeManager.announceAttendance(name, "attended");
|
|
490
|
+
// MCP-002: Update dispatcher's routing table and send notification to this connection only
|
|
491
|
+
getNotificationDispatcher().setCurrentAgent(connectionId, name);
|
|
492
|
+
getNotificationDispatcher().dispatchAgentCurrentChanged(connectionId, fromAgent, name);
|
|
493
|
+
// DOD-AGENT-SELECTION-UNWARRANTED-1: WHO asked. The names were always logged; what was missing
|
|
494
|
+
// is that an operator's explicit selection and the shim's reconnect replay arrive here
|
|
495
|
+
// identically, so a switch nobody made could not be told apart from one they did. Two switches
|
|
496
|
+
// fired one second after a reconnect on 2026-08-09 and neither could be attributed.
|
|
497
|
+
//
|
|
498
|
+
// Whitelisted, not passed through: this is a caller-supplied string that lands in the log, and
|
|
499
|
+
// an unrecognised value is recorded as such rather than echoed.
|
|
500
|
+
const claimed = params?.trigger;
|
|
501
|
+
const trigger = claimed === undefined ? "explicit" : claimed === "replay" ? "replay" : "unrecognized";
|
|
502
|
+
logger.info("agent.current.switched", { connectionId, fromAgent, toAgent: name, trigger });
|
|
503
|
+
// ─── DOD-COATTEND-VISIBLE-1 AC4: you find out at ATTACH time that you are not alone ───
|
|
504
|
+
//
|
|
505
|
+
// Attach is NOT refused, and must never become refusable: exclusivity is rejected permanently
|
|
506
|
+
// (spec §3 — connections die constantly, so a refusal only relocates the hard part into a
|
|
507
|
+
// takeover protocol; it buys no cryptographic property; and it forecloses listener mode). The
|
|
508
|
+
// count is set AFTER the assignment above, so it includes this connection: joining a lone
|
|
509
|
+
// session reads 2, which is the number the operator can act on.
|
|
510
|
+
const attendance = countAttendance(perConnectionState, name);
|
|
511
|
+
if (attendance > 1) {
|
|
512
|
+
logger.info("agent.attend.coattended", { connectionId, agentName: name, attendance });
|
|
513
|
+
}
|
|
514
|
+
// M8C-AUTOSTART-1 (A3, D12): not_registered is a NON-BLOCKING warning — the agent is selected
|
|
515
|
+
// and usable locally, but it cannot establish directory sessions until registered. Surface the
|
|
516
|
+
// next step (ONBOARD-NEXTSTEP style) without stranding the selection. One-row read.
|
|
517
|
+
const result = { ok: true, attendance };
|
|
518
|
+
if (attendance > 1) {
|
|
519
|
+
// Says what is true and what to do about it, in that order — and does NOT tell the operator
|
|
520
|
+
// to go away, because co-attending is allowed. What they need to know is that a message can
|
|
521
|
+
// be delivered to the OTHER session, and where it will still be readable when it is.
|
|
522
|
+
// No separate `co_attendance: true` flag — `attendance > 1` already IS that boolean, and a
|
|
523
|
+
// second field carrying the same fact is one more thing that can drift out of agreement.
|
|
524
|
+
result["co_attendance_guidance"] =
|
|
525
|
+
`${attendance} sessions are attending '${name}' (including this one). That is allowed — but an ` +
|
|
526
|
+
`arriving message is delivered to whichever session reads it first, so cello_receive here may ` +
|
|
527
|
+
`return nothing while the other session gets it. Nothing is lost: cello_transcript shows every ` +
|
|
528
|
+
`message either session received. Use cello_stop_using_agent if you did not intend to share it.`;
|
|
529
|
+
}
|
|
530
|
+
try {
|
|
531
|
+
const reg = await new DbRegistrationPersistence({ db: sessionNodeManager.getDb(), agentName: name, logger }).loadRegistrationState();
|
|
532
|
+
if (!reg || reg.status !== "active") {
|
|
533
|
+
result["warning"] = "not_registered";
|
|
534
|
+
result["warning_guidance"] = `Agent '${name}' is now selected but is not registered with the directory — run 'cello register-agent ${name}' to enable sessions with peers. Run 'cello status' to watch registration complete.`;
|
|
535
|
+
}
|
|
536
|
+
}
|
|
537
|
+
catch (err) {
|
|
538
|
+
// A failed registration read must not break selection (the agent IS selected). Log the real
|
|
539
|
+
// reason, and surface a softer `registration_unknown` warning so the operator's surface is NOT
|
|
540
|
+
// falsely clean — we could not confirm registration, so don't imply it is fine (Finding 3).
|
|
541
|
+
logger.warn("agent.registration.read.failed", { agentName: name, reason: extractErrorMessage(err) });
|
|
542
|
+
result["warning"] = "registration_unknown";
|
|
543
|
+
result["warning_guidance"] = `Agent '${name}' is selected, but its registration status could not be read — run 'cello status' to check whether it is registered with the directory.`;
|
|
544
|
+
}
|
|
545
|
+
// ─── M10B / DOD-END-PENDING-1 — tell the operator a decision is waiting ────────────────────
|
|
546
|
+
// The clause: "on selecting an agent with pending items, the operator is told they are waiting."
|
|
547
|
+
//
|
|
548
|
+
// COUNT ONLY, and do NOT mark notified here. Marking on selection would mark them told about
|
|
549
|
+
// something they were never shown — the nudge says a number, the LIST is what shows the items,
|
|
550
|
+
// and `cello_attestation_consent_list` is what records that they saw it. The two lifetimes stay separate
|
|
551
|
+
// (M10B-D5): the notification goes quiet once seen, the ITEMS persist until decided.
|
|
552
|
+
//
|
|
553
|
+
// A failure here must NOT break selection, for the same reason the registration read above does
|
|
554
|
+
// not: the agent IS selected. But it must not read as "nothing pending" either — an unknown is
|
|
555
|
+
// surfaced as an unknown (§5a), because silence is exactly how an endorsement dies unnoticed.
|
|
556
|
+
try {
|
|
557
|
+
const rec = loadedAgents.find((a) => a.name === name);
|
|
558
|
+
if (rec) {
|
|
559
|
+
const pending = new TrustSignalStore(sessionNodeManager.getDb(), logger).countUnnotifiedConsent(rec.pubkey);
|
|
560
|
+
if (pending > 0) {
|
|
561
|
+
result["pending_consent"] = pending;
|
|
562
|
+
result["pending_consent_guidance"] =
|
|
563
|
+
`${pending} item${pending === 1 ? "" : "s"} awaiting your decision for '${name}'. ` +
|
|
564
|
+
`Run cello_attestation_consent_list to read ${pending === 1 ? "it" : "them"} and accept or refuse.`;
|
|
565
|
+
}
|
|
566
|
+
}
|
|
567
|
+
}
|
|
568
|
+
catch (err) {
|
|
569
|
+
logger.warn("signal.consent.count_failed", {
|
|
570
|
+
agentName: name, reason: extractErrorMessage(err),
|
|
571
|
+
});
|
|
572
|
+
result["pending_consent"] = "unknown";
|
|
573
|
+
result["pending_consent_guidance"] =
|
|
574
|
+
`Could not read pending consent items for '${name}' — run cello_attestation_consent_list to check directly.`;
|
|
575
|
+
}
|
|
576
|
+
return result;
|
|
577
|
+
});
|
|
578
|
+
// ─── MCP-001: cello_list_agents handler ───
|
|
579
|
+
handlers.set("cello_list_agents", async (_params, connectionId) => {
|
|
580
|
+
const agents = getAgentsForConnection(connectionId);
|
|
581
|
+
// An empty roster is the one answer that needs words rather than data. The CLI imports
|
|
582
|
+
// NO_AGENTS_GUIDANCE directly (cli depends on daemon), but `connect` depends on no
|
|
583
|
+
// @cello-protocol package at all — so the shim can only learn this over the wire, and an
|
|
584
|
+
// operator who never opens a terminal would otherwise get an empty list and no explanation
|
|
585
|
+
// of the cohort gate standing between them and a registration token.
|
|
586
|
+
if (agents.length === 0)
|
|
587
|
+
return { agents, onboarding: noAgentsGuidance() };
|
|
588
|
+
return { agents };
|
|
589
|
+
});
|
|
590
|
+
// ─── M7-REGISTRATION (Action 2): cello_register handler ───
|
|
591
|
+
// Registers a LOADED agent (one with a K_local `key` under ~/.cello/agents/<name>/)
|
|
592
|
+
// with the directory: ML-DSA keygen → register_request → FROST DKG → register_success,
|
|
593
|
+
// persisting the ML-DSA keypair, FROST share, registration state, and agent→user link.
|
|
594
|
+
// Always invoked with a pre-authorization ticket from the CELLO Operations Agent.
|
|
595
|
+
// Single-flight guard (M1): the directory's registration reply frames
|
|
596
|
+
// (dkg_ready / register_success / register_error) carry NO agent identifier, so
|
|
597
|
+
// two concurrent registrations over the one shared directory signaling stream
|
|
598
|
+
// would each arm a resolver and both receive the same reply — cross-wiring the
|
|
599
|
+
// ceremonies. Serialize registration daemon-wide (it is a rare, once-per-agent,
|
|
600
|
+
// human-initiated operation). This is the registration analogue of the
|
|
601
|
+
// sealInterruptedInProgress guard, but global rather than per-key because the
|
|
602
|
+
// frames are not agent-tagged.
|
|
603
|
+
}
|
|
604
|
+
//# sourceMappingURL=agent-handlers.js.map
|