@moltzap/client 2026.1002.0 → 2026.1005.0
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/NOTICE +1 -6
- package/README.md +2 -2
- package/bin/moltzapd +2 -2
- package/dist/{harness-mcp-contract.d.ts → delivery/history-export.d.ts} +96 -136
- package/dist/delivery/history-export.d.ts.map +1 -0
- package/dist/{daemon/runtime → delivery}/history-export.js +36 -3
- package/dist/delivery/history-export.js.map +1 -0
- package/dist/delivery/host-delivery.d.ts +51 -0
- package/dist/delivery/host-delivery.d.ts.map +1 -0
- package/dist/delivery/host-delivery.js +109 -0
- package/dist/delivery/host-delivery.js.map +1 -0
- package/dist/delivery/inbox.d.ts +142 -0
- package/dist/delivery/inbox.d.ts.map +1 -0
- package/dist/delivery/inbox.js +130 -0
- package/dist/delivery/inbox.js.map +1 -0
- package/dist/delivery/index.d.ts +4 -0
- package/dist/delivery/index.d.ts.map +1 -0
- package/dist/delivery/index.js +4 -0
- package/dist/delivery/index.js.map +1 -0
- package/dist/delivery/operations.d.ts +787 -0
- package/dist/delivery/operations.d.ts.map +1 -0
- package/dist/delivery/operations.js +162 -0
- package/dist/delivery/operations.js.map +1 -0
- package/dist/delivery/pass.d.ts +91 -0
- package/dist/delivery/pass.d.ts.map +1 -0
- package/dist/{daemon/runtime/pending-delivery.js → delivery/pass.js} +61 -34
- package/dist/delivery/pass.js.map +1 -0
- package/dist/delivery/send-invocations.d.ts +106 -0
- package/dist/delivery/send-invocations.d.ts.map +1 -0
- package/dist/delivery/send-invocations.js +109 -0
- package/dist/delivery/send-invocations.js.map +1 -0
- package/dist/endpoint/harness-endpoint/capability.d.ts +39 -0
- package/dist/endpoint/harness-endpoint/capability.d.ts.map +1 -0
- package/dist/endpoint/harness-endpoint/capability.js +9 -0
- package/dist/endpoint/harness-endpoint/capability.js.map +1 -0
- package/dist/endpoint/harness-endpoint/events.d.ts +12 -0
- package/dist/endpoint/harness-endpoint/events.d.ts.map +1 -0
- package/dist/endpoint/harness-endpoint/events.js +199 -0
- package/dist/endpoint/harness-endpoint/events.js.map +1 -0
- package/dist/{client-runtime.d.ts → endpoint/harness-endpoint/index.d.ts} +4 -2
- package/dist/endpoint/harness-endpoint/index.d.ts.map +1 -0
- package/dist/{client-runtime.js → endpoint/harness-endpoint/index.js} +115 -115
- package/dist/endpoint/harness-endpoint/index.js.map +1 -0
- package/dist/endpoint/implementation.d.ts +4 -0
- package/dist/endpoint/implementation.d.ts.map +1 -0
- package/dist/endpoint/implementation.js +5 -0
- package/dist/endpoint/implementation.js.map +1 -0
- package/dist/endpoint/mcp/auth.d.ts +31 -0
- package/dist/endpoint/mcp/auth.d.ts.map +1 -0
- package/dist/endpoint/mcp/auth.js +42 -0
- package/dist/endpoint/mcp/auth.js.map +1 -0
- package/dist/endpoint/mcp/event-schemas.d.ts +151 -0
- package/dist/endpoint/mcp/event-schemas.d.ts.map +1 -0
- package/dist/endpoint/mcp/event-schemas.js +72 -0
- package/dist/endpoint/mcp/event-schemas.js.map +1 -0
- package/dist/endpoint/mcp/event-signing.d.ts +62 -0
- package/dist/endpoint/mcp/event-signing.d.ts.map +1 -0
- package/dist/endpoint/mcp/event-signing.js +185 -0
- package/dist/endpoint/mcp/event-signing.js.map +1 -0
- package/dist/endpoint/mcp/events.d.ts +45 -0
- package/dist/endpoint/mcp/events.d.ts.map +1 -0
- package/dist/endpoint/mcp/events.js +308 -0
- package/dist/endpoint/mcp/events.js.map +1 -0
- package/dist/{harness-mcp-http.d.ts → endpoint/mcp/http.d.ts} +1 -1
- package/dist/endpoint/mcp/http.d.ts.map +1 -0
- package/dist/{harness-mcp-http.js → endpoint/mcp/http.js} +1 -1
- package/dist/endpoint/mcp/http.js.map +1 -0
- package/dist/endpoint/mcp/index.d.ts +10 -0
- package/dist/endpoint/mcp/index.d.ts.map +1 -0
- package/dist/endpoint/mcp/index.js +8 -0
- package/dist/endpoint/mcp/index.js.map +1 -0
- package/dist/endpoint/mcp/names.d.ts +18 -0
- package/dist/endpoint/mcp/names.d.ts.map +1 -0
- package/dist/endpoint/mcp/names.js +18 -0
- package/dist/endpoint/mcp/names.js.map +1 -0
- package/dist/{management-runtime.d.ts → endpoint/mcp/owner-tools.d.ts} +7 -7
- package/dist/endpoint/mcp/owner-tools.d.ts.map +1 -0
- package/dist/{management-runtime.js → endpoint/mcp/owner-tools.js} +2 -4
- package/dist/endpoint/mcp/owner-tools.js.map +1 -0
- package/dist/endpoint/mcp/schemas.d.ts +42 -0
- package/dist/endpoint/mcp/schemas.d.ts.map +1 -0
- package/dist/endpoint/mcp/schemas.js +89 -0
- package/dist/endpoint/mcp/schemas.js.map +1 -0
- package/dist/{harness-mcp-wire.d.ts → endpoint/mcp/tools.d.ts} +17 -14
- package/dist/endpoint/mcp/tools.d.ts.map +1 -0
- package/dist/{harness-mcp-wire.js → endpoint/mcp/tools.js} +230 -110
- package/dist/endpoint/mcp/tools.js.map +1 -0
- package/dist/endpoint/mcp/webhook.d.ts +15 -0
- package/dist/endpoint/mcp/webhook.d.ts.map +1 -0
- package/dist/endpoint/mcp/webhook.js +359 -0
- package/dist/endpoint/mcp/webhook.js.map +1 -0
- package/dist/identity/credentials.d.ts +46 -0
- package/dist/identity/credentials.d.ts.map +1 -0
- package/dist/identity/credentials.js +55 -0
- package/dist/identity/credentials.js.map +1 -0
- package/dist/identity/index.d.ts +4 -0
- package/dist/identity/index.d.ts.map +1 -0
- package/dist/identity/index.js +4 -0
- package/dist/identity/index.js.map +1 -0
- package/dist/index.d.ts +21 -4
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +23 -5
- package/dist/index.js.map +1 -1
- package/dist/{contract.types-check.d.ts → index.types-check.d.ts} +12 -7
- package/dist/index.types-check.d.ts.map +1 -0
- package/dist/{contract.types-check.js → index.types-check.js} +6 -5
- package/dist/index.types-check.js.map +1 -0
- package/dist/{daemon/runtime/activation.d.ts → service/activation/index.d.ts} +11 -13
- package/dist/service/activation/index.d.ts.map +1 -0
- package/dist/{daemon/runtime/activation.js → service/activation/index.js} +3 -3
- package/dist/service/activation/index.js.map +1 -0
- package/dist/{daemon/configuration.d.ts → service/bootstrap.d.ts} +9 -17
- package/dist/service/bootstrap.d.ts.map +1 -0
- package/dist/service/bootstrap.js +6 -0
- package/dist/service/bootstrap.js.map +1 -0
- package/dist/service/configuration.d.ts +13 -0
- package/dist/service/configuration.d.ts.map +1 -0
- package/dist/service/configuration.js +75 -0
- package/dist/service/configuration.js.map +1 -0
- package/dist/{daemon/runtime → service}/controller.d.ts +9 -7
- package/dist/service/controller.d.ts.map +1 -0
- package/dist/service/controller.js +106 -0
- package/dist/service/controller.js.map +1 -0
- package/dist/{server.d.ts → service/index.d.ts} +7 -4
- package/dist/service/index.d.ts.map +1 -0
- package/dist/{server.js → service/index.js} +17 -15
- package/dist/service/index.js.map +1 -0
- package/dist/{server.types-check.d.ts → service/index.types-check.d.ts} +7 -7
- package/dist/service/index.types-check.d.ts.map +1 -0
- package/dist/{server.types-check.js → service/index.types-check.js} +1 -1
- package/dist/service/index.types-check.js.map +1 -0
- package/dist/{daemon/runtime/index.d.ts → service/lifecycle.d.ts} +4 -4
- package/dist/service/lifecycle.d.ts.map +1 -0
- package/dist/{daemon/runtime/index.js → service/lifecycle.js} +29 -26
- package/dist/service/lifecycle.js.map +1 -0
- package/dist/{daemon → service}/management.d.ts +3 -3
- package/dist/service/management.d.ts.map +1 -0
- package/dist/{daemon → service}/management.js +4 -14
- package/dist/service/management.js.map +1 -0
- package/dist/{daemon/registration.d.ts → service/registration/index.d.ts} +3 -3
- package/dist/service/registration/index.d.ts.map +1 -0
- package/dist/{daemon/registration.js → service/registration/index.js} +2 -3
- package/dist/service/registration/index.js.map +1 -0
- package/dist/{daemon/runtime/protocol.d.ts → service/supervision.d.ts} +17 -25
- package/dist/service/supervision.d.ts.map +1 -0
- package/dist/{daemon/runtime/protocol.js → service/supervision.js} +34 -37
- package/dist/service/supervision.js.map +1 -0
- package/dist/store/anchors.d.ts.map +1 -0
- package/dist/store/anchors.js.map +1 -0
- package/dist/store/database/index.d.ts.map +1 -0
- package/dist/store/database/index.js.map +1 -0
- package/dist/store/database/schema.d.ts.map +1 -0
- package/dist/{endpoint/store → store}/database/schema.js +42 -6
- package/dist/store/database/schema.js.map +1 -0
- package/dist/store/database/values.d.ts.map +1 -0
- package/dist/store/database/values.js.map +1 -0
- package/dist/store/inbox.d.ts +86 -0
- package/dist/store/inbox.d.ts.map +1 -0
- package/dist/store/inbox.js +269 -0
- package/dist/store/inbox.js.map +1 -0
- package/dist/store/index.d.ts +12 -0
- package/dist/store/index.d.ts.map +1 -0
- package/dist/store/index.js +8 -0
- package/dist/store/index.js.map +1 -0
- package/dist/{endpoint/store → store/queues}/deliveries.d.ts +9 -1
- package/dist/store/queues/deliveries.d.ts.map +1 -0
- package/dist/{endpoint/store → store/queues}/deliveries.js +19 -3
- package/dist/store/queues/deliveries.js.map +1 -0
- package/dist/{endpoint/store → store/queues}/dissemination.d.ts +4 -2
- package/dist/store/queues/dissemination.d.ts.map +1 -0
- package/dist/{endpoint/store → store/queues}/dissemination.js +5 -4
- package/dist/store/queues/dissemination.js.map +1 -0
- package/dist/store/queues/index.d.ts +5 -0
- package/dist/store/queues/index.d.ts.map +1 -0
- package/dist/store/queues/index.js +7 -0
- package/dist/store/queues/index.js.map +1 -0
- package/dist/{endpoint/store → store/queues}/outbound.d.ts +1 -1
- package/dist/store/queues/outbound.d.ts.map +1 -0
- package/dist/{endpoint/store → store/queues}/outbound.js +1 -1
- package/dist/store/queues/outbound.js.map +1 -0
- package/dist/{endpoint/store/management.d.ts → store/reads.d.ts} +1 -1
- package/dist/store/reads.d.ts.map +1 -0
- package/dist/{endpoint/store/management.js → store/reads.js} +2 -4
- package/dist/store/reads.js.map +1 -0
- package/dist/store/records.d.ts.map +1 -0
- package/dist/{endpoint/store → store}/records.js +1 -2
- package/dist/store/records.js.map +1 -0
- package/dist/store/rows/index.d.ts.map +1 -0
- package/dist/store/rows/index.js.map +1 -0
- package/dist/store/runtime-codec.d.ts +17 -0
- package/dist/store/runtime-codec.d.ts.map +1 -0
- package/dist/store/runtime-codec.js +32 -0
- package/dist/store/runtime-codec.js.map +1 -0
- package/dist/{endpoint/store/index.d.ts → store/store.d.ts} +2 -2
- package/dist/store/store.d.ts.map +1 -0
- package/dist/{endpoint/store/index.js → store/store.js} +34 -7
- package/dist/store/store.js.map +1 -0
- package/dist/{endpoint/store → store}/types.d.ts +41 -0
- package/dist/store/types.d.ts.map +1 -0
- package/dist/store/types.js.map +1 -0
- package/dist/transport/collectives/answer-formats.d.ts +21 -0
- package/dist/transport/collectives/answer-formats.d.ts.map +1 -0
- package/dist/transport/collectives/answer-formats.js +127 -0
- package/dist/transport/collectives/answer-formats.js.map +1 -0
- package/dist/transport/collectives/failures.d.ts +34 -0
- package/dist/transport/collectives/failures.d.ts.map +1 -0
- package/dist/transport/collectives/failures.js +40 -0
- package/dist/transport/collectives/failures.js.map +1 -0
- package/dist/transport/collectives/forms.d.ts +260 -0
- package/dist/transport/collectives/forms.d.ts.map +1 -0
- package/dist/transport/collectives/forms.js +214 -0
- package/dist/transport/collectives/forms.js.map +1 -0
- package/dist/transport/collectives/inbound.d.ts +129 -0
- package/dist/transport/collectives/inbound.d.ts.map +1 -0
- package/dist/transport/collectives/inbound.js +81 -0
- package/dist/transport/collectives/inbound.js.map +1 -0
- package/dist/transport/collectives/index.d.ts +10 -0
- package/dist/transport/collectives/index.d.ts.map +1 -0
- package/dist/transport/collectives/index.js +8 -0
- package/dist/transport/collectives/index.js.map +1 -0
- package/dist/{message-text.d.ts → transport/collectives/message-text.d.ts} +8 -4
- package/dist/transport/collectives/message-text.d.ts.map +1 -0
- package/dist/{message-text.js → transport/collectives/message-text.js} +23 -47
- package/dist/transport/collectives/message-text.js.map +1 -0
- package/dist/{endpoint/collective → transport/collectives}/operation.d.ts +35 -24
- package/dist/transport/collectives/operation.d.ts.map +1 -0
- package/dist/{endpoint/collective → transport/collectives}/operation.js +70 -105
- package/dist/transport/collectives/operation.js.map +1 -0
- package/dist/transport/collectives/part/grammar.d.ts +175 -0
- package/dist/transport/collectives/part/grammar.d.ts.map +1 -0
- package/dist/transport/collectives/part/grammar.js +222 -0
- package/dist/transport/collectives/part/grammar.js.map +1 -0
- package/dist/{endpoint/collective/wire.d.ts → transport/collectives/part/index.d.ts} +38 -51
- package/dist/transport/collectives/part/index.d.ts.map +1 -0
- package/dist/{endpoint/collective/wire.js → transport/collectives/part/index.js} +20 -122
- package/dist/transport/collectives/part/index.js.map +1 -0
- package/dist/{endpoint/collective → transport/collectives}/received-request.d.ts +2 -1
- package/dist/transport/collectives/received-request.d.ts.map +1 -0
- package/dist/transport/collectives/received-request.js.map +1 -0
- package/dist/transport/collectives/render.d.ts +40 -0
- package/dist/transport/collectives/render.d.ts.map +1 -0
- package/dist/transport/collectives/render.js +74 -0
- package/dist/transport/collectives/render.js.map +1 -0
- package/dist/{endpoint/collective → transport/collectives}/request-sends.d.ts +3 -2
- package/dist/transport/collectives/request-sends.d.ts.map +1 -0
- package/dist/transport/collectives/request-sends.js.map +1 -0
- package/dist/{endpoint/collective → transport/collectives}/shared-answers.d.ts +4 -3
- package/dist/transport/collectives/shared-answers.d.ts.map +1 -0
- package/dist/transport/collectives/shared-answers.js.map +1 -0
- package/dist/transport/collectives/validation.d.ts +31 -0
- package/dist/transport/collectives/validation.d.ts.map +1 -0
- package/dist/transport/collectives/validation.js +239 -0
- package/dist/transport/collectives/validation.js.map +1 -0
- package/dist/{endpoint/addressing/index.d.ts → transport/messaging/address.d.ts} +7 -4
- package/dist/transport/messaging/address.d.ts.map +1 -0
- package/dist/{endpoint/addressing/index.js → transport/messaging/address.js} +30 -26
- package/dist/transport/messaging/address.js.map +1 -0
- package/dist/{endpoint/protocol/index.d.ts → transport/messaging/certification.d.ts} +4 -4
- package/dist/transport/messaging/certification.d.ts.map +1 -0
- package/dist/{endpoint/protocol/index.js → transport/messaging/certification.js} +15 -10
- package/dist/transport/messaging/certification.js.map +1 -0
- package/dist/{endpoint/engine-dissemination.d.ts → transport/messaging/dissemination.d.ts} +3 -3
- package/dist/transport/messaging/dissemination.d.ts.map +1 -0
- package/dist/{endpoint/engine-dissemination.js → transport/messaging/dissemination.js} +7 -6
- package/dist/transport/messaging/dissemination.js.map +1 -0
- package/dist/transport/messaging/errors.d.ts +50 -0
- package/dist/transport/messaging/errors.d.ts.map +1 -0
- package/dist/transport/messaging/errors.js +64 -0
- package/dist/transport/messaging/errors.js.map +1 -0
- package/dist/{endpoint/protocol → transport/messaging}/evidence.d.ts +3 -3
- package/dist/transport/messaging/evidence.d.ts.map +1 -0
- package/dist/{endpoint/protocol → transport/messaging}/evidence.js +1 -1
- package/dist/transport/messaging/evidence.js.map +1 -0
- package/dist/{endpoint/engine.d.ts → transport/messaging/index.d.ts} +4 -4
- package/dist/transport/messaging/index.d.ts.map +1 -0
- package/dist/{endpoint/engine.js → transport/messaging/index.js} +25 -9
- package/dist/transport/messaging/index.js.map +1 -0
- package/dist/transport/messaging/message.d.ts +112 -0
- package/dist/transport/messaging/message.d.ts.map +1 -0
- package/dist/transport/messaging/message.js +38 -0
- package/dist/transport/messaging/message.js.map +1 -0
- package/dist/{endpoint/recovery → transport/messaging}/reanchor/empty.d.ts +5 -5
- package/dist/transport/messaging/reanchor/empty.d.ts.map +1 -0
- package/dist/{endpoint/recovery → transport/messaging}/reanchor/empty.js +3 -3
- package/dist/transport/messaging/reanchor/empty.js.map +1 -0
- package/dist/{endpoint/recovery → transport/messaging}/reanchor/index.d.ts +3 -3
- package/dist/transport/messaging/reanchor/index.d.ts.map +1 -0
- package/dist/{endpoint/recovery → transport/messaging}/reanchor/index.js +27 -12
- package/dist/transport/messaging/reanchor/index.js.map +1 -0
- package/dist/{endpoint/engine-durability.d.ts → transport/messaging/records/index.d.ts} +9 -6
- package/dist/transport/messaging/records/index.d.ts.map +1 -0
- package/dist/{endpoint/engine-durability.js → transport/messaging/records/index.js} +9 -15
- package/dist/transport/messaging/records/index.js.map +1 -0
- package/dist/{endpoint → transport/messaging}/recovery/barrier.d.ts +1 -1
- package/dist/transport/messaging/recovery/barrier.d.ts.map +1 -0
- package/dist/transport/messaging/recovery/barrier.js.map +1 -0
- package/dist/{endpoint/recovery/store-evidence.d.ts → transport/messaging/recovery/evidence.d.ts} +5 -5
- package/dist/transport/messaging/recovery/evidence.d.ts.map +1 -0
- package/dist/{endpoint/recovery/store-evidence.js → transport/messaging/recovery/evidence.js} +3 -3
- package/dist/transport/messaging/recovery/evidence.js.map +1 -0
- package/dist/{endpoint → transport/messaging}/recovery/index.d.ts +4 -4
- package/dist/transport/messaging/recovery/index.d.ts.map +1 -0
- package/dist/{endpoint → transport/messaging}/recovery/index.js +41 -32
- package/dist/transport/messaging/recovery/index.js.map +1 -0
- package/dist/{endpoint/recovery/store.d.ts → transport/messaging/recovery/persistence.d.ts} +5 -5
- package/dist/transport/messaging/recovery/persistence.d.ts.map +1 -0
- package/dist/{endpoint/recovery/store.js → transport/messaging/recovery/persistence.js} +4 -4
- package/dist/transport/messaging/recovery/persistence.js.map +1 -0
- package/dist/{endpoint/recovery/state.d.ts → transport/messaging/recovery-session/index.d.ts} +6 -6
- package/dist/transport/messaging/recovery-session/index.d.ts.map +1 -0
- package/dist/{endpoint/recovery/state.js → transport/messaging/recovery-session/index.js} +3 -3
- package/dist/transport/messaging/recovery-session/index.js.map +1 -0
- package/dist/{endpoint/engine-types.d.ts → transport/messaging/runtime/index.d.ts} +22 -5
- package/dist/transport/messaging/runtime/index.d.ts.map +1 -0
- package/dist/{endpoint/engine-types.js → transport/messaging/runtime/index.js} +1 -1
- package/dist/transport/messaging/runtime/index.js.map +1 -0
- package/dist/{endpoint/engine-send.d.ts → transport/messaging/send.d.ts} +5 -4
- package/dist/transport/messaging/send.d.ts.map +1 -0
- package/dist/{endpoint/engine-send.js → transport/messaging/send.js} +4 -4
- package/dist/transport/messaging/send.js.map +1 -0
- package/dist/transport/router/index.d.ts.map +1 -0
- package/dist/{endpoint/router-worker → transport/router}/index.js +1 -1
- package/dist/transport/router/index.js.map +1 -0
- package/dist/transport/router/outage.d.ts.map +1 -0
- package/dist/transport/router/outage.js.map +1 -0
- package/dist/{endpoint/router-worker → transport/router}/types.d.ts +3 -4
- package/dist/transport/router/types.d.ts.map +1 -0
- package/dist/transport/router/types.js.map +1 -0
- package/dist/{endpoint/representation-canonical.d.ts → transport/wire/encoding/canonical.d.ts} +1 -2
- package/dist/transport/wire/encoding/canonical.d.ts.map +1 -0
- package/dist/{endpoint/representation-canonical.js → transport/wire/encoding/canonical.js} +2 -2
- package/dist/transport/wire/encoding/canonical.js.map +1 -0
- package/dist/{endpoint/representation-codec.d.ts → transport/wire/encoding/codec.d.ts} +5 -9
- package/dist/transport/wire/encoding/codec.d.ts.map +1 -0
- package/dist/{endpoint/representation-codec.js → transport/wire/encoding/codec.js} +7 -27
- package/dist/transport/wire/encoding/codec.js.map +1 -0
- package/dist/transport/wire/encoding/index.d.ts +4 -0
- package/dist/transport/wire/encoding/index.d.ts.map +1 -0
- package/dist/transport/wire/encoding/index.js +6 -0
- package/dist/transport/wire/encoding/index.js.map +1 -0
- package/dist/transport/wire/index.d.ts +6 -0
- package/dist/transport/wire/index.d.ts.map +1 -0
- package/dist/transport/wire/index.js +9 -0
- package/dist/transport/wire/index.js.map +1 -0
- package/dist/{endpoint/representation-schemas.d.ts → transport/wire/schemas.d.ts} +76 -98
- package/dist/transport/wire/schemas.d.ts.map +1 -0
- package/dist/{endpoint/representation-schemas.js → transport/wire/schemas.js} +7 -19
- package/dist/transport/wire/schemas.js.map +1 -0
- package/dist/transport/wire/values.d.ts +114 -0
- package/dist/transport/wire/values.d.ts.map +1 -0
- package/dist/transport/wire/values.js +192 -0
- package/dist/transport/wire/values.js.map +1 -0
- package/dist/{endpoint/representation-verification.d.ts → transport/wire/verification.d.ts} +3 -4
- package/dist/transport/wire/verification.d.ts.map +1 -0
- package/dist/{endpoint/representation-verification.js → transport/wire/verification.js} +4 -4
- package/dist/transport/wire/verification.js.map +1 -0
- package/package.json +6 -6
- package/dist/client-runtime.d.ts.map +0 -1
- package/dist/client-runtime.js.map +0 -1
- package/dist/contract.d.ts +0 -721
- package/dist/contract.d.ts.map +0 -1
- package/dist/contract.js +0 -441
- package/dist/contract.js.map +0 -1
- package/dist/contract.types-check.d.ts.map +0 -1
- package/dist/contract.types-check.js.map +0 -1
- package/dist/daemon/configuration.d.ts.map +0 -1
- package/dist/daemon/configuration.js +0 -75
- package/dist/daemon/configuration.js.map +0 -1
- package/dist/daemon/management.d.ts.map +0 -1
- package/dist/daemon/management.js.map +0 -1
- package/dist/daemon/registration.d.ts.map +0 -1
- package/dist/daemon/registration.js.map +0 -1
- package/dist/daemon/runtime/activation.d.ts.map +0 -1
- package/dist/daemon/runtime/activation.js.map +0 -1
- package/dist/daemon/runtime/controller.d.ts.map +0 -1
- package/dist/daemon/runtime/controller.js +0 -138
- package/dist/daemon/runtime/controller.js.map +0 -1
- package/dist/daemon/runtime/history-export.d.ts +0 -33
- package/dist/daemon/runtime/history-export.d.ts.map +0 -1
- package/dist/daemon/runtime/history-export.js.map +0 -1
- package/dist/daemon/runtime/index.d.ts.map +0 -1
- package/dist/daemon/runtime/index.js.map +0 -1
- package/dist/daemon/runtime/pending-delivery.d.ts +0 -49
- package/dist/daemon/runtime/pending-delivery.d.ts.map +0 -1
- package/dist/daemon/runtime/pending-delivery.js.map +0 -1
- package/dist/daemon/runtime/protocol.d.ts.map +0 -1
- package/dist/daemon/runtime/protocol.js.map +0 -1
- package/dist/endpoint/addressing/index.d.ts.map +0 -1
- package/dist/endpoint/addressing/index.js.map +0 -1
- package/dist/endpoint/collective/operation.d.ts.map +0 -1
- package/dist/endpoint/collective/operation.js.map +0 -1
- package/dist/endpoint/collective/received-request.d.ts.map +0 -1
- package/dist/endpoint/collective/received-request.js.map +0 -1
- package/dist/endpoint/collective/request-sends.d.ts.map +0 -1
- package/dist/endpoint/collective/request-sends.js.map +0 -1
- package/dist/endpoint/collective/shared-answers.d.ts.map +0 -1
- package/dist/endpoint/collective/shared-answers.js.map +0 -1
- package/dist/endpoint/collective/validation.d.ts +0 -49
- package/dist/endpoint/collective/validation.d.ts.map +0 -1
- package/dist/endpoint/collective/validation.js +0 -97
- package/dist/endpoint/collective/validation.js.map +0 -1
- package/dist/endpoint/collective/wire.d.ts.map +0 -1
- package/dist/endpoint/collective/wire.js.map +0 -1
- package/dist/endpoint/engine-dissemination.d.ts.map +0 -1
- package/dist/endpoint/engine-dissemination.js.map +0 -1
- package/dist/endpoint/engine-durability.d.ts.map +0 -1
- package/dist/endpoint/engine-durability.js.map +0 -1
- package/dist/endpoint/engine-send.d.ts.map +0 -1
- package/dist/endpoint/engine-send.js.map +0 -1
- package/dist/endpoint/engine-types.d.ts.map +0 -1
- package/dist/endpoint/engine-types.js.map +0 -1
- package/dist/endpoint/engine.d.ts.map +0 -1
- package/dist/endpoint/engine.js.map +0 -1
- package/dist/endpoint/protocol/evidence.d.ts.map +0 -1
- package/dist/endpoint/protocol/evidence.js.map +0 -1
- package/dist/endpoint/protocol/index.d.ts.map +0 -1
- package/dist/endpoint/protocol/index.js.map +0 -1
- package/dist/endpoint/recovery/barrier.d.ts.map +0 -1
- package/dist/endpoint/recovery/barrier.js.map +0 -1
- package/dist/endpoint/recovery/index.d.ts.map +0 -1
- package/dist/endpoint/recovery/index.js.map +0 -1
- package/dist/endpoint/recovery/reanchor/empty.d.ts.map +0 -1
- package/dist/endpoint/recovery/reanchor/empty.js.map +0 -1
- package/dist/endpoint/recovery/reanchor/index.d.ts.map +0 -1
- package/dist/endpoint/recovery/reanchor/index.js.map +0 -1
- package/dist/endpoint/recovery/state.d.ts.map +0 -1
- package/dist/endpoint/recovery/state.js.map +0 -1
- package/dist/endpoint/recovery/store-evidence.d.ts.map +0 -1
- package/dist/endpoint/recovery/store-evidence.js.map +0 -1
- package/dist/endpoint/recovery/store.d.ts.map +0 -1
- package/dist/endpoint/recovery/store.js.map +0 -1
- package/dist/endpoint/representation-canonical.d.ts.map +0 -1
- package/dist/endpoint/representation-canonical.js.map +0 -1
- package/dist/endpoint/representation-codec.d.ts.map +0 -1
- package/dist/endpoint/representation-codec.js.map +0 -1
- package/dist/endpoint/representation-schemas.d.ts.map +0 -1
- package/dist/endpoint/representation-schemas.js.map +0 -1
- package/dist/endpoint/representation-verification.d.ts.map +0 -1
- package/dist/endpoint/representation-verification.js.map +0 -1
- package/dist/endpoint/representation.d.ts +0 -6
- package/dist/endpoint/representation.d.ts.map +0 -1
- package/dist/endpoint/representation.js +0 -8
- package/dist/endpoint/representation.js.map +0 -1
- package/dist/endpoint/router-worker/index.d.ts.map +0 -1
- package/dist/endpoint/router-worker/index.js.map +0 -1
- package/dist/endpoint/router-worker/outage.d.ts.map +0 -1
- package/dist/endpoint/router-worker/outage.js.map +0 -1
- package/dist/endpoint/router-worker/types.d.ts.map +0 -1
- package/dist/endpoint/router-worker/types.js.map +0 -1
- package/dist/endpoint/store/anchors.d.ts.map +0 -1
- package/dist/endpoint/store/anchors.js.map +0 -1
- package/dist/endpoint/store/database/index.d.ts.map +0 -1
- package/dist/endpoint/store/database/index.js.map +0 -1
- package/dist/endpoint/store/database/schema.d.ts.map +0 -1
- package/dist/endpoint/store/database/schema.js.map +0 -1
- package/dist/endpoint/store/database/values.d.ts.map +0 -1
- package/dist/endpoint/store/database/values.js.map +0 -1
- package/dist/endpoint/store/deliveries.d.ts.map +0 -1
- package/dist/endpoint/store/deliveries.js.map +0 -1
- package/dist/endpoint/store/dissemination.d.ts.map +0 -1
- package/dist/endpoint/store/dissemination.js.map +0 -1
- package/dist/endpoint/store/index.d.ts.map +0 -1
- package/dist/endpoint/store/index.js.map +0 -1
- package/dist/endpoint/store/management.d.ts.map +0 -1
- package/dist/endpoint/store/management.js.map +0 -1
- package/dist/endpoint/store/outbound.d.ts.map +0 -1
- package/dist/endpoint/store/outbound.js.map +0 -1
- package/dist/endpoint/store/records.d.ts.map +0 -1
- package/dist/endpoint/store/records.js.map +0 -1
- package/dist/endpoint/store/rows/index.d.ts.map +0 -1
- package/dist/endpoint/store/rows/index.js.map +0 -1
- package/dist/endpoint/store/types.d.ts.map +0 -1
- package/dist/endpoint/store/types.js.map +0 -1
- package/dist/endpoint/store.d.ts +0 -10
- package/dist/endpoint/store.d.ts.map +0 -1
- package/dist/endpoint/store.js +0 -6
- package/dist/endpoint/store.js.map +0 -1
- package/dist/harness-mcp-contract.d.ts.map +0 -1
- package/dist/harness-mcp-contract.js +0 -113
- package/dist/harness-mcp-contract.js.map +0 -1
- package/dist/harness-mcp-http.d.ts.map +0 -1
- package/dist/harness-mcp-http.js.map +0 -1
- package/dist/harness-mcp-subscription.d.ts +0 -30
- package/dist/harness-mcp-subscription.d.ts.map +0 -1
- package/dist/harness-mcp-subscription.js +0 -361
- package/dist/harness-mcp-subscription.js.map +0 -1
- package/dist/harness-mcp-wire.d.ts.map +0 -1
- package/dist/harness-mcp-wire.js.map +0 -1
- package/dist/management-runtime.d.ts.map +0 -1
- package/dist/management-runtime.js.map +0 -1
- package/dist/message-text.d.ts.map +0 -1
- package/dist/message-text.js.map +0 -1
- package/dist/server.d.ts.map +0 -1
- package/dist/server.js.map +0 -1
- package/dist/server.types-check.d.ts.map +0 -1
- package/dist/server.types-check.js.map +0 -1
- /package/dist/{endpoint/store → store}/anchors.d.ts +0 -0
- /package/dist/{endpoint/store → store}/anchors.js +0 -0
- /package/dist/{endpoint/store → store}/database/index.d.ts +0 -0
- /package/dist/{endpoint/store → store}/database/index.js +0 -0
- /package/dist/{endpoint/store → store}/database/schema.d.ts +0 -0
- /package/dist/{endpoint/store → store}/database/values.d.ts +0 -0
- /package/dist/{endpoint/store → store}/database/values.js +0 -0
- /package/dist/{endpoint/store → store}/records.d.ts +0 -0
- /package/dist/{endpoint/store → store}/rows/index.d.ts +0 -0
- /package/dist/{endpoint/store → store}/rows/index.js +0 -0
- /package/dist/{endpoint/store → store}/types.js +0 -0
- /package/dist/{endpoint/collective → transport/collectives}/received-request.js +0 -0
- /package/dist/{endpoint/collective → transport/collectives}/request-sends.js +0 -0
- /package/dist/{endpoint/collective → transport/collectives}/shared-answers.js +0 -0
- /package/dist/{endpoint → transport/messaging}/recovery/barrier.js +0 -0
- /package/dist/{endpoint/router-worker → transport/router}/index.d.ts +0 -0
- /package/dist/{endpoint/router-worker → transport/router}/outage.d.ts +0 -0
- /package/dist/{endpoint/router-worker → transport/router}/outage.js +0 -0
- /package/dist/{endpoint/router-worker → transport/router}/types.js +0 -0
|
@@ -0,0 +1,89 @@
|
|
|
1
|
+
/** @file MCP framing of the harness operations: send metadata and JSON Schema projections. */
|
|
2
|
+
import { Effect, JSONSchema, Schema, } from "effect";
|
|
3
|
+
import { harnessAcknowledgeDeliveryRequestSchema, harnessSendArgumentsSchema, harnessSendOptionsSchema, harnessSendResultSchema, inboxRequestSchema, inboxResultSchema, readSendRequestSchema, readSendResultSchema, } from "../../delivery/operations.js";
|
|
4
|
+
import { HARNESS_SEND_META_KEY } from "./names.js";
|
|
5
|
+
const exact = {
|
|
6
|
+
exact: true,
|
|
7
|
+
onExcessProperty: "error",
|
|
8
|
+
};
|
|
9
|
+
const exactEmptyObject = Schema.Record({
|
|
10
|
+
key: Schema.String,
|
|
11
|
+
value: Schema.Never,
|
|
12
|
+
}).annotations({ parseOptions: exact });
|
|
13
|
+
const harnessEmptyResultSchema = exactEmptyObject;
|
|
14
|
+
const harnessSendMetadataSchema = Schema.Struct({
|
|
15
|
+
[HARNESS_SEND_META_KEY]: Schema.optionalWith(harnessSendOptionsSchema, {
|
|
16
|
+
exact: true,
|
|
17
|
+
}),
|
|
18
|
+
});
|
|
19
|
+
/** JSON Schema for the runtime inbox pagination arguments. */
|
|
20
|
+
export const harnessReadInboxRequestJsonSchema = JSONSchema.make(inboxRequestSchema, { target: "jsonSchema2020-12" });
|
|
21
|
+
/** JSON Schema for classified inbox pages. */
|
|
22
|
+
export const harnessReadInboxResultJsonSchema = JSONSchema.make(inboxResultSchema, { target: "jsonSchema2020-12" });
|
|
23
|
+
/** JSON Schema for keyed send lookup. */
|
|
24
|
+
export const harnessReadSendRequestJsonSchema = JSONSchema.make(readSendRequestSchema, { target: "jsonSchema2020-12" });
|
|
25
|
+
/** JSON Schema for observed send state. */
|
|
26
|
+
export const harnessReadSendResultJsonSchema = JSONSchema.make(readSendResultSchema, { target: "jsonSchema2020-12" });
|
|
27
|
+
/**
|
|
28
|
+
* Validate semantic arguments separately from runtime-owned send options.
|
|
29
|
+
* Unrelated SDK metadata belongs to the transport and is not interpreted here.
|
|
30
|
+
* @param toolArguments Model-visible arguments.
|
|
31
|
+
* @param metadata The SDK request metadata, if supplied.
|
|
32
|
+
* @returns One validated invocation for the daemon's existing store.
|
|
33
|
+
*/
|
|
34
|
+
export function decodeHarnessSendCall(toolArguments, metadata) {
|
|
35
|
+
return Effect.gen(function* () {
|
|
36
|
+
const args = yield* Schema.decodeUnknown(harnessSendArgumentsSchema)(toolArguments);
|
|
37
|
+
const runtime = yield* Schema.decodeUnknown(harnessSendMetadataSchema)(metadata === undefined ? {} : metadata);
|
|
38
|
+
return { ...args, ...runtime[HARNESS_SEND_META_KEY] };
|
|
39
|
+
}).pipe(Effect.withSpan("decodeHarnessSendCall"));
|
|
40
|
+
}
|
|
41
|
+
/** JSON Schema advertised for the delivery acknowledgment operation. */
|
|
42
|
+
export const harnessAcknowledgeDeliveryRequestJsonSchema = JSONSchema.make(harnessAcknowledgeDeliveryRequestSchema, { target: "jsonSchema2020-12" });
|
|
43
|
+
/** JSON Schema advertised for `send_message` arguments. */
|
|
44
|
+
export const harnessSendArgumentsJsonSchema = JSONSchema.make(harnessSendArgumentsSchema, { target: "jsonSchema2020-12" });
|
|
45
|
+
/** JSON Schema advertised for `send_message` results. */
|
|
46
|
+
export const harnessSendResultJsonSchema = JSONSchema.make(harnessSendResultSchema, { target: "jsonSchema2020-12" });
|
|
47
|
+
/** JSON Schema advertised for empty adapter-operation results. */
|
|
48
|
+
export const harnessEmptyResultJsonSchema = JSONSchema.make(harnessEmptyResultSchema, { target: "jsonSchema2020-12" });
|
|
49
|
+
/** Closed wire failure vocabularies prevent internal diagnostics from escaping. */
|
|
50
|
+
export const harnessFailureReasons = {
|
|
51
|
+
RUNTIME_READ_REASONS: new Set([
|
|
52
|
+
"not-registered",
|
|
53
|
+
"invalid-continuation",
|
|
54
|
+
"invalid-event",
|
|
55
|
+
"unknown-event",
|
|
56
|
+
"persistence-failed",
|
|
57
|
+
]),
|
|
58
|
+
REGISTER_REASONS: new Set([
|
|
59
|
+
"dependency-unavailable",
|
|
60
|
+
"persistence-failed",
|
|
61
|
+
"incompatible-daemon",
|
|
62
|
+
]),
|
|
63
|
+
STATUS_REASONS: new Set(["persistence-failed", "incompatible-daemon"]),
|
|
64
|
+
SEARCH_AGENTS_REASONS: new Set([
|
|
65
|
+
"not-registered",
|
|
66
|
+
"dependency-unavailable",
|
|
67
|
+
"incompatible-daemon",
|
|
68
|
+
]),
|
|
69
|
+
SEARCH_CONVERSATIONS_REASONS: new Set([
|
|
70
|
+
"not-registered",
|
|
71
|
+
"invalid-address",
|
|
72
|
+
"persistence-failed",
|
|
73
|
+
]),
|
|
74
|
+
READ_CONVERSATION_REASONS: new Set([
|
|
75
|
+
"not-registered",
|
|
76
|
+
"invalid-address",
|
|
77
|
+
"unknown-agent",
|
|
78
|
+
"invalid-continuation",
|
|
79
|
+
"history-gap",
|
|
80
|
+
"persistence-failed",
|
|
81
|
+
]),
|
|
82
|
+
ACKNOWLEDGE_DELIVERY_REASONS: new Set([
|
|
83
|
+
"unknown-delivery",
|
|
84
|
+
"delivery-conflict",
|
|
85
|
+
"persistence-failed",
|
|
86
|
+
"transport-failed",
|
|
87
|
+
]),
|
|
88
|
+
};
|
|
89
|
+
//# sourceMappingURL=schemas.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"schemas.js","sourceRoot":"","sources":["../../../src/endpoint/mcp/schemas.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,25 +1,28 @@
|
|
|
1
1
|
/** @file Official MCP tool catalog and private Harness operation projection. */
|
|
2
|
-
import { type Implementation } from "@modelcontextprotocol/server";
|
|
2
|
+
import { type Implementation, type McpHttpHandler } from "@modelcontextprotocol/server";
|
|
3
3
|
import { Effect } from "effect";
|
|
4
|
-
import type
|
|
5
|
-
import type
|
|
6
|
-
import { type
|
|
7
|
-
import { type HarnessMcpSubscriptionHandler } from "./harness-mcp-subscription.js";
|
|
8
|
-
import { type ManagementReadConversationRequest, type ManagementReadConversationResult, type ManagementRegisterRequest, type ManagementRegisterResult, type ManagementSearchAgentsRequest, type ManagementSearchAgentsResult, type ManagementSearchConversationsRequest, type ManagementSearchConversationsResult, type ManagementStatusResult } from "./management-runtime.js";
|
|
4
|
+
import { type DeliveryOperations, type EventStore } from "../../delivery/operations.js";
|
|
5
|
+
import { type HarnessMcpCredentials } from "./auth.js";
|
|
6
|
+
import { type ManagementReadConversationRequest, type ManagementReadConversationResult, type ManagementRegisterRequest, type ManagementRegisterResult, type ManagementSearchAgentsRequest, type ManagementSearchAgentsResult, type ManagementSearchConversationsRequest, type ManagementSearchConversationsResult, type ManagementStatusResult } from "./owner-tools.js";
|
|
9
7
|
type ClosedOperationError = Readonly<{
|
|
10
8
|
readonly reason: string;
|
|
11
9
|
}>;
|
|
12
10
|
/** Structural daemon operations projected onto the loopback MCP boundary. */
|
|
13
|
-
export interface HarnessMcpOperations {
|
|
11
|
+
export interface HarnessMcpOperations extends DeliveryOperations {
|
|
14
12
|
readonly readStatus: () => Effect.Effect<ManagementStatusResult, ClosedOperationError>;
|
|
15
13
|
readonly register: (input: ManagementRegisterRequest) => Effect.Effect<ManagementRegisterResult, ClosedOperationError>;
|
|
16
14
|
readonly searchAgents: (input: ManagementSearchAgentsRequest) => Effect.Effect<ManagementSearchAgentsResult, ClosedOperationError>;
|
|
17
15
|
readonly searchConversations: (input: ManagementSearchConversationsRequest) => Effect.Effect<ManagementSearchConversationsResult, ClosedOperationError>;
|
|
18
16
|
readonly readConversation: (input: ManagementReadConversationRequest) => Effect.Effect<ManagementReadConversationResult, ClosedOperationError>;
|
|
19
|
-
|
|
20
|
-
|
|
17
|
+
}
|
|
18
|
+
/** Official handler with one content-free daemon notification edge. */
|
|
19
|
+
export interface HarnessMcpEventHandler extends McpHttpHandler {
|
|
20
|
+
readonly hasActiveSubscription: () => boolean;
|
|
21
|
+
readonly notifyPending: () => boolean;
|
|
21
22
|
}
|
|
22
23
|
interface HarnessMcpHandlerOptions {
|
|
24
|
+
readonly eventStore?: EventStore;
|
|
25
|
+
readonly credentials?: HarnessMcpCredentials;
|
|
23
26
|
readonly implementation: Implementation;
|
|
24
27
|
readonly operations: HarnessMcpOperations;
|
|
25
28
|
readonly onSubscriptionActiveChange?: (active: boolean) => void;
|
|
@@ -28,10 +31,10 @@ interface HarnessMcpHandlerOptions {
|
|
|
28
31
|
readonly keepAliveMillis?: number;
|
|
29
32
|
}
|
|
30
33
|
/**
|
|
31
|
-
* Create one
|
|
32
|
-
* @param options
|
|
33
|
-
* @returns Handler whose catalog
|
|
34
|
+
* Create one official MCP handler with explicit event resource ownership.
|
|
35
|
+
* @param options Daemon operations, optional credentials and callback persistence.
|
|
36
|
+
* @returns Handler whose catalog changes in place after registration.
|
|
34
37
|
*/
|
|
35
|
-
export declare const makeHarnessMcpHttpHandler: (options: HarnessMcpHandlerOptions) => Effect.Effect<
|
|
38
|
+
export declare const makeHarnessMcpHttpHandler: (options: HarnessMcpHandlerOptions) => Effect.Effect<HarnessMcpEventHandler, ClosedOperationError>;
|
|
36
39
|
export {};
|
|
37
|
-
//# sourceMappingURL=
|
|
40
|
+
//# sourceMappingURL=tools.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"tools.d.ts","sourceRoot":"","sources":["../../../src/endpoint/mcp/tools.ts"],"names":[],"mappings":"AAAA,gFAAgF;AAEhF,OAAO,EAGL,KAAK,cAAc,EAEnB,KAAK,cAAc,EAKpB,MAAM,8BAA8B,CAAC;AACtC,OAAO,EAEL,MAAM,EAQP,MAAM,QAAQ,CAAC;AAGhB,OAAO,EAEL,KAAK,kBAAkB,EACvB,KAAK,UAAU,EAYhB,MAAM,8BAA8B,CAAC;AACtC,OAAO,EAEL,KAAK,qBAAqB,EAG3B,MAAM,WAAW,CAAC;AAgBnB,OAAO,EACL,KAAK,iCAAiC,EAEtC,KAAK,gCAAgC,EAErC,KAAK,yBAAyB,EAE9B,KAAK,wBAAwB,EAE7B,KAAK,6BAA6B,EAElC,KAAK,4BAA4B,EAEjC,KAAK,oCAAoC,EAEzC,KAAK,mCAAmC,EAExC,KAAK,sBAAsB,EAE5B,MAAM,kBAAkB,CAAC;AAuB1B,KAAK,oBAAoB,GAAG,QAAQ,CAAC;IAAE,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAA;CAAE,CAAC,CAAC;AAElE,6EAA6E;AAC7E,MAAM,WAAW,oBAAqB,SAAQ,kBAAkB;IAC9D,QAAQ,CAAC,UAAU,EAAE,MAAM,MAAM,CAAC,MAAM,CACtC,sBAAsB,EACtB,oBAAoB,CACrB,CAAC;IACF,QAAQ,CAAC,QAAQ,EAAE,CACjB,KAAK,EAAE,yBAAyB,KAC7B,MAAM,CAAC,MAAM,CAAC,wBAAwB,EAAE,oBAAoB,CAAC,CAAC;IACnE,QAAQ,CAAC,YAAY,EAAE,CACrB,KAAK,EAAE,6BAA6B,KACjC,MAAM,CAAC,MAAM,CAAC,4BAA4B,EAAE,oBAAoB,CAAC,CAAC;IACvE,QAAQ,CAAC,mBAAmB,EAAE,CAC5B,KAAK,EAAE,oCAAoC,KACxC,MAAM,CAAC,MAAM,CAAC,mCAAmC,EAAE,oBAAoB,CAAC,CAAC;IAC9E,QAAQ,CAAC,gBAAgB,EAAE,CACzB,KAAK,EAAE,iCAAiC,KACrC,MAAM,CAAC,MAAM,CAAC,gCAAgC,EAAE,oBAAoB,CAAC,CAAC;CAC5E;AAED,uEAAuE;AACvE,MAAM,WAAW,sBAAuB,SAAQ,cAAc;IAC5D,QAAQ,CAAC,qBAAqB,EAAE,MAAM,OAAO,CAAC;IAC9C,QAAQ,CAAC,aAAa,EAAE,MAAM,OAAO,CAAC;CACvC;AAED,UAAU,wBAAwB;IAChC,QAAQ,CAAC,UAAU,CAAC,EAAE,UAAU,CAAC;IACjC,QAAQ,CAAC,WAAW,CAAC,EAAE,qBAAqB,CAAC;IAC7C,QAAQ,CAAC,cAAc,EAAE,cAAc,CAAC;IACxC,QAAQ,CAAC,UAAU,EAAE,oBAAoB,CAAC;IAC1C,QAAQ,CAAC,0BAA0B,CAAC,EAAE,CAAC,MAAM,EAAE,OAAO,KAAK,IAAI,CAAC;IAChE,QAAQ,CAAC,OAAO,CAAC,EAAE,CAAC,KAAK,EAAE,KAAK,KAAK,IAAI,CAAC;IAC1C,wEAAwE;IACxE,QAAQ,CAAC,eAAe,CAAC,EAAE,MAAM,CAAC;CACnC;AAk6BD;;;;GAIG;AACH,eAAO,MAAM,yBAAyB,YAC3B,wBAAwB,KAChC,MAAM,CAAC,MAAM,CAAC,sBAAsB,EAAE,oBAAoB,CASN,CAAC"}
|
|
@@ -1,9 +1,12 @@
|
|
|
1
1
|
/** @file Official MCP tool catalog and private Harness operation projection. */
|
|
2
2
|
import { createMcpHandler, fromJsonSchema, McpServer, ProtocolError, ProtocolErrorCode, } from "@modelcontextprotocol/server";
|
|
3
|
-
import { Cause, Effect, Exit, JSONSchema, Option, Schema } from "effect";
|
|
4
|
-
import {
|
|
5
|
-
import {
|
|
6
|
-
import {
|
|
3
|
+
import { Cause, Effect, Exit, JSONSchema, Layer, Option, Schema, Scope, } from "effect";
|
|
4
|
+
import { decodeHarnessReadSendRequest, readEventRequestSchema, readEventResultSchema, sendErrorData, } from "../../delivery/operations.js";
|
|
5
|
+
import { authenticateHarnessRequest, mayInvokeHarnessTool, } from "./auth.js";
|
|
6
|
+
import { makeHarnessEvents, makeWebhookEvents, runEventOperation, webhookHttpClientLayer, webhookStatusJsonSchema, } from "./events.js";
|
|
7
|
+
import { HARNESS_ACKNOWLEDGE_DELIVERY_TOOL, HARNESS_READ_EVENT_TOOL, HARNESS_READ_INBOX_TOOL, HARNESS_READ_SEND_TOOL, HARNESS_SEND_TOOL, } from "./names.js";
|
|
8
|
+
import { managementReadConversationRequestSchema, managementReadConversationResultSchema, managementRegisterRequestSchema, managementRegisterResultSchema, managementSearchAgentsRequestSchema, managementSearchAgentsResultSchema, managementSearchConversationsRequestSchema, managementSearchConversationsResultSchema, managementStatusResultSchema, } from "./owner-tools.js";
|
|
9
|
+
import { decodeHarnessSendCall, harnessAcknowledgeDeliveryRequestJsonSchema, harnessEmptyResultJsonSchema, harnessFailureReasons, harnessReadInboxRequestJsonSchema, harnessReadInboxResultJsonSchema, harnessReadSendRequestJsonSchema, harnessReadSendResultJsonSchema, harnessSendArgumentsJsonSchema, harnessSendResultJsonSchema, } from "./schemas.js";
|
|
7
10
|
/* eslint-disable agent-code-guard/async-keyword -- Official MCP factories and callbacks are Promise-native. */
|
|
8
11
|
const REGISTER_TOOL = "register";
|
|
9
12
|
const STATUS_TOOL = "status";
|
|
@@ -29,40 +32,17 @@ const searchConversationsInput = makeStandardSchema(makeJsonSchema(managementSea
|
|
|
29
32
|
const searchConversationsOutput = makeStandardSchema(makeJsonSchema(managementSearchConversationsResultSchema));
|
|
30
33
|
const readConversationInput = makeStandardSchema(makeJsonSchema(managementReadConversationRequestSchema));
|
|
31
34
|
const readConversationOutput = makeStandardSchema(makeJsonSchema(managementReadConversationResultSchema));
|
|
32
|
-
const sendInput = makeStandardSchema(
|
|
35
|
+
const sendInput = makeStandardSchema(harnessSendArgumentsJsonSchema);
|
|
33
36
|
const acknowledgeDeliveryInput = makeStandardSchema(harnessAcknowledgeDeliveryRequestJsonSchema);
|
|
34
37
|
const emptyOutput = makeStandardSchema(harnessEmptyResultJsonSchema);
|
|
35
38
|
const sendOutput = makeStandardSchema(harnessSendResultJsonSchema);
|
|
36
|
-
const
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
const
|
|
42
|
-
const SEARCH_AGENTS_REASONS =
|
|
43
|
-
"not-registered",
|
|
44
|
-
"dependency-unavailable",
|
|
45
|
-
"incompatible-daemon",
|
|
46
|
-
]);
|
|
47
|
-
const SEARCH_CONVERSATIONS_REASONS = new Set([
|
|
48
|
-
"not-registered",
|
|
49
|
-
"invalid-address",
|
|
50
|
-
"persistence-failed",
|
|
51
|
-
]);
|
|
52
|
-
const READ_CONVERSATION_REASONS = new Set([
|
|
53
|
-
"not-registered",
|
|
54
|
-
"invalid-address",
|
|
55
|
-
"unknown-agent",
|
|
56
|
-
"invalid-continuation",
|
|
57
|
-
"history-gap",
|
|
58
|
-
"persistence-failed",
|
|
59
|
-
]);
|
|
60
|
-
const ACKNOWLEDGE_DELIVERY_REASONS = new Set([
|
|
61
|
-
"unknown-delivery",
|
|
62
|
-
"delivery-conflict",
|
|
63
|
-
"persistence-failed",
|
|
64
|
-
"transport-failed",
|
|
65
|
-
]);
|
|
39
|
+
const readEventInput = makeStandardSchema(makeJsonSchema(readEventRequestSchema));
|
|
40
|
+
const readEventOutput = makeStandardSchema(makeJsonSchema(readEventResultSchema));
|
|
41
|
+
const readInboxInput = makeStandardSchema(harnessReadInboxRequestJsonSchema);
|
|
42
|
+
const readInboxOutput = makeStandardSchema(harnessReadInboxResultJsonSchema);
|
|
43
|
+
const readSendInput = makeStandardSchema(harnessReadSendRequestJsonSchema);
|
|
44
|
+
const readSendOutput = makeStandardSchema(harnessReadSendResultJsonSchema);
|
|
45
|
+
const { RUNTIME_READ_REASONS, REGISTER_REASONS, STATUS_REASONS, SEARCH_AGENTS_REASONS, SEARCH_CONVERSATIONS_REASONS, READ_CONVERSATION_REASONS, ACKNOWLEDGE_DELIVERY_REASONS, } = harnessFailureReasons;
|
|
66
46
|
const operationReason = (cause, allowed, fallback) => {
|
|
67
47
|
if (typeof cause !== "object" || cause === null || !("reason" in cause)) {
|
|
68
48
|
return fallback;
|
|
@@ -102,27 +82,6 @@ const runOperation = async (options) => {
|
|
|
102
82
|
}
|
|
103
83
|
return toolResult(outcome.value);
|
|
104
84
|
};
|
|
105
|
-
/**
|
|
106
|
-
* The error data a refused send carries: a collective failure keeps its id
|
|
107
|
-
* and the members or fields it names, so the loopback client rebuilds the
|
|
108
|
-
* same typed error the daemon raised.
|
|
109
|
-
*/
|
|
110
|
-
const sendErrorData = (error) => {
|
|
111
|
-
switch (error._tag) {
|
|
112
|
-
case "SendError":
|
|
113
|
-
return { reason: error.reason };
|
|
114
|
-
case "CollectiveError":
|
|
115
|
-
return {
|
|
116
|
-
reason: "collective-failed",
|
|
117
|
-
id: error.id,
|
|
118
|
-
failure: error.failure,
|
|
119
|
-
};
|
|
120
|
-
default: {
|
|
121
|
-
const exhaustive = error;
|
|
122
|
-
return exhaustive;
|
|
123
|
-
}
|
|
124
|
-
}
|
|
125
|
-
};
|
|
126
85
|
// #ignore-sloppy-code-next-line[async-keyword]: MCP tool handlers are Promise callbacks, so this edge awaits Effect before returning the SDK result.
|
|
127
86
|
const runSendOperation = async (operation, signal) => {
|
|
128
87
|
const outcome = await Effect.runPromiseExit(operation, { signal });
|
|
@@ -182,7 +141,7 @@ const registerRegistrationTool = (server, operations, state) => {
|
|
|
182
141
|
return result;
|
|
183
142
|
});
|
|
184
143
|
};
|
|
185
|
-
const
|
|
144
|
+
const registerSearchAgentsTool = (server, operations) => {
|
|
186
145
|
server.registerTool(SEARCH_AGENTS_TOOL, { inputSchema: searchAgentsInput, outputSchema: searchAgentsOutput }, (input, context) => runOperation({
|
|
187
146
|
operation: operations.searchAgents(input),
|
|
188
147
|
label: "Agent search",
|
|
@@ -190,6 +149,9 @@ const registerReadTools = (server, operations) => {
|
|
|
190
149
|
fallbackReason: "dependency-unavailable",
|
|
191
150
|
signal: context.mcpReq.signal,
|
|
192
151
|
}));
|
|
152
|
+
};
|
|
153
|
+
const registerReadTools = (server, operations) => {
|
|
154
|
+
registerSearchAgentsTool(server, operations);
|
|
193
155
|
server.registerTool(SEARCH_CONVERSATIONS_TOOL, {
|
|
194
156
|
inputSchema: searchConversationsInput,
|
|
195
157
|
outputSchema: searchConversationsOutput,
|
|
@@ -211,8 +173,44 @@ const registerReadTools = (server, operations) => {
|
|
|
211
173
|
signal: context.mcpReq.signal,
|
|
212
174
|
}));
|
|
213
175
|
};
|
|
176
|
+
function registerSendTool(server, operations) {
|
|
177
|
+
server.registerTool(HARNESS_SEND_TOOL, { inputSchema: sendInput, outputSchema: sendOutput }, (input, context) => handleSendToolCall({
|
|
178
|
+
name: HARNESS_SEND_TOOL,
|
|
179
|
+
toolArguments: input,
|
|
180
|
+
metadata: context.mcpReq._meta,
|
|
181
|
+
signal: context.mcpReq.signal,
|
|
182
|
+
}, operations));
|
|
183
|
+
}
|
|
184
|
+
const registerEventReadTool = (server, operations) => {
|
|
185
|
+
server.registerTool(HARNESS_READ_EVENT_TOOL, {
|
|
186
|
+
description: "Read the original full content of a MoltZap event by eventId. This read has no delivery or acknowledgment side effects.",
|
|
187
|
+
inputSchema: readEventInput,
|
|
188
|
+
outputSchema: readEventOutput,
|
|
189
|
+
}, (input, context) => runOperation({
|
|
190
|
+
operation: operations.readEvent(input),
|
|
191
|
+
label: "Event read",
|
|
192
|
+
allowedReasons: RUNTIME_READ_REASONS,
|
|
193
|
+
fallbackReason: "persistence-failed",
|
|
194
|
+
signal: context.mcpReq.signal,
|
|
195
|
+
}));
|
|
196
|
+
};
|
|
214
197
|
const registerAdapterTools = (server, operations) => {
|
|
215
|
-
server.registerTool(
|
|
198
|
+
server.registerTool(HARNESS_READ_INBOX_TOOL, { inputSchema: readInboxInput, outputSchema: readInboxOutput }, (input, context) => runOperation({
|
|
199
|
+
operation: operations.readInbox(input),
|
|
200
|
+
label: "Inbox read",
|
|
201
|
+
allowedReasons: RUNTIME_READ_REASONS,
|
|
202
|
+
fallbackReason: "persistence-failed",
|
|
203
|
+
signal: context.mcpReq.signal,
|
|
204
|
+
}));
|
|
205
|
+
server.registerTool(HARNESS_READ_SEND_TOOL, { inputSchema: readSendInput, outputSchema: readSendOutput }, (input, context) => runOperation({
|
|
206
|
+
operation: operations.readSend(input),
|
|
207
|
+
label: "Send lookup",
|
|
208
|
+
allowedReasons: RUNTIME_READ_REASONS,
|
|
209
|
+
fallbackReason: "persistence-failed",
|
|
210
|
+
signal: context.mcpReq.signal,
|
|
211
|
+
}));
|
|
212
|
+
registerSendTool(server, operations);
|
|
213
|
+
registerEventReadTool(server, operations);
|
|
216
214
|
server.registerTool(HARNESS_ACKNOWLEDGE_DELIVERY_TOOL, { inputSchema: acknowledgeDeliveryInput, outputSchema: emptyOutput }, (input, context) => runVoidOperation({
|
|
217
215
|
operation: operations.acknowledgeDelivery(input.deliveryToken),
|
|
218
216
|
label: "Delivery acknowledgment",
|
|
@@ -221,7 +219,13 @@ const registerAdapterTools = (server, operations) => {
|
|
|
221
219
|
signal: context.mcpReq.signal,
|
|
222
220
|
}));
|
|
223
221
|
};
|
|
224
|
-
const registerActiveTools = (server, operations) => {
|
|
222
|
+
const registerActiveTools = (server, operations, role) => {
|
|
223
|
+
if (role === "runtime") {
|
|
224
|
+
registerSearchAgentsTool(server, operations);
|
|
225
|
+
registerSendTool(server, operations);
|
|
226
|
+
registerEventReadTool(server, operations);
|
|
227
|
+
return;
|
|
228
|
+
}
|
|
225
229
|
registerReadTools(server, operations);
|
|
226
230
|
registerAdapterTools(server, operations);
|
|
227
231
|
};
|
|
@@ -293,11 +297,14 @@ const handleReadConversationToolCall = async (input, operations) => {
|
|
|
293
297
|
signal: input.signal,
|
|
294
298
|
});
|
|
295
299
|
};
|
|
300
|
+
const decodeInvocationInput = (input, signal) => runEventOperation(input.pipe(Effect.catchTag("ParseError", () => Effect.fail(new ProtocolError(-32602, "Invalid invocation arguments", {
|
|
301
|
+
reason: "content-invalid",
|
|
302
|
+
})))), signal);
|
|
296
303
|
// #ignore-sloppy-code-next-line[async-keyword]: The low-level MCP request handler awaits schema validation and the Promise-native operation bridge.
|
|
297
|
-
|
|
298
|
-
const decoded = await
|
|
304
|
+
async function handleSendToolCall(input, operations) {
|
|
305
|
+
const decoded = await decodeInvocationInput(decodeHarnessSendCall(input.toolArguments, input.metadata), input.signal);
|
|
299
306
|
return await validateToolOutput(sendOutput, await runSendOperation(operations.send(decoded), input.signal), input.name);
|
|
300
|
-
}
|
|
307
|
+
}
|
|
301
308
|
// #ignore-sloppy-code-next-line[async-keyword]: The low-level MCP request handler awaits schema validation and the Promise-native operation bridge.
|
|
302
309
|
const handleAcknowledgeDeliveryToolCall = async (input, operations) => {
|
|
303
310
|
const decoded = await decodeToolInput(acknowledgeDeliveryInput, input.toolArguments, input.name);
|
|
@@ -309,9 +316,43 @@ const handleAcknowledgeDeliveryToolCall = async (input, operations) => {
|
|
|
309
316
|
signal: input.signal,
|
|
310
317
|
});
|
|
311
318
|
};
|
|
319
|
+
// #ignore-sloppy-code-next-line[async-keyword]: Runtime read dispatch validates the selected MCP schema before invoking the operation.
|
|
320
|
+
const handleInboxReadToolCall = async (input, operations) => {
|
|
321
|
+
switch (input.name) {
|
|
322
|
+
case HARNESS_READ_EVENT_TOOL:
|
|
323
|
+
return await runValidatedOperation(readEventOutput, input.name, {
|
|
324
|
+
operation: operations.readEvent(await decodeToolInput(readEventInput, input.toolArguments, input.name)),
|
|
325
|
+
label: "Event read",
|
|
326
|
+
allowedReasons: RUNTIME_READ_REASONS,
|
|
327
|
+
fallbackReason: "persistence-failed",
|
|
328
|
+
signal: input.signal,
|
|
329
|
+
});
|
|
330
|
+
case HARNESS_READ_INBOX_TOOL:
|
|
331
|
+
return await runValidatedOperation(readInboxOutput, input.name, {
|
|
332
|
+
operation: operations.readInbox(await decodeToolInput(readInboxInput, input.toolArguments, input.name)),
|
|
333
|
+
label: "Inbox read",
|
|
334
|
+
allowedReasons: RUNTIME_READ_REASONS,
|
|
335
|
+
fallbackReason: "persistence-failed",
|
|
336
|
+
signal: input.signal,
|
|
337
|
+
});
|
|
338
|
+
default:
|
|
339
|
+
return toolNotFound(input.name);
|
|
340
|
+
}
|
|
341
|
+
};
|
|
312
342
|
// #ignore-sloppy-code-next-line[async-keyword]: Active tool dispatch returns the selected Promise-native MCP operation result.
|
|
313
343
|
const handleActiveToolCall = async (input, operations) => {
|
|
344
|
+
if ([HARNESS_READ_EVENT_TOOL, HARNESS_READ_INBOX_TOOL].includes(input.name)) {
|
|
345
|
+
return await handleInboxReadToolCall(input, operations);
|
|
346
|
+
}
|
|
314
347
|
switch (input.name) {
|
|
348
|
+
case HARNESS_READ_SEND_TOOL:
|
|
349
|
+
return await runValidatedOperation(readSendOutput, input.name, {
|
|
350
|
+
operation: operations.readSend(await decodeInvocationInput(decodeHarnessReadSendRequest(input.toolArguments), input.signal)),
|
|
351
|
+
label: "Send lookup",
|
|
352
|
+
allowedReasons: RUNTIME_READ_REASONS,
|
|
353
|
+
fallbackReason: "persistence-failed",
|
|
354
|
+
signal: input.signal,
|
|
355
|
+
});
|
|
315
356
|
case SEARCH_AGENTS_TOOL:
|
|
316
357
|
return await handleSearchAgentsToolCall(input, operations);
|
|
317
358
|
case SEARCH_CONVERSATIONS_TOOL:
|
|
@@ -334,7 +375,10 @@ const handleInactiveToolCall = async (input, operations, state) => {
|
|
|
334
375
|
return await handleRegistrationToolCall(input, operations, state);
|
|
335
376
|
};
|
|
336
377
|
// #ignore-sloppy-code-next-line[async-keyword]: The low-level MCP dispatcher awaits the selected state-dependent Promise callback.
|
|
337
|
-
const handleToolCall = async (input, operations, state) => {
|
|
378
|
+
const handleToolCall = async (input, operations, state, role) => {
|
|
379
|
+
if (!mayInvokeHarnessTool(role, input.name)) {
|
|
380
|
+
return toolNotFound(input.name);
|
|
381
|
+
}
|
|
338
382
|
if (input.name === STATUS_TOOL) {
|
|
339
383
|
return await handleStatusToolCall(input, operations);
|
|
340
384
|
}
|
|
@@ -343,61 +387,137 @@ const handleToolCall = async (input, operations, state) => {
|
|
|
343
387
|
}
|
|
344
388
|
return await handleActiveToolCall(input, operations);
|
|
345
389
|
};
|
|
346
|
-
|
|
347
|
-
|
|
348
|
-
|
|
349
|
-
|
|
350
|
-
|
|
351
|
-
|
|
352
|
-
|
|
353
|
-
|
|
354
|
-
|
|
355
|
-
|
|
356
|
-
|
|
357
|
-
|
|
358
|
-
|
|
359
|
-
|
|
360
|
-
|
|
361
|
-
|
|
362
|
-
|
|
390
|
+
const ownerEventDescriptions = {
|
|
391
|
+
event_subscription_status: "Inspect the runtime consumer and stalled delivery without exposing callback credentials.",
|
|
392
|
+
revoke_event_subscription: "Release the active runtime consumer. Pending inbox items remain unread.",
|
|
393
|
+
resume_event_subscription: "Resume transient callback retries. Terminal rejection requires revocation and reconfiguration.",
|
|
394
|
+
};
|
|
395
|
+
const ownerEventTools = [
|
|
396
|
+
"event_subscription_status",
|
|
397
|
+
"revoke_event_subscription",
|
|
398
|
+
"resume_event_subscription",
|
|
399
|
+
];
|
|
400
|
+
const ownerEventOperation = (events, name) => {
|
|
401
|
+
switch (name) {
|
|
402
|
+
case "event_subscription_status":
|
|
403
|
+
return events.status;
|
|
404
|
+
case "revoke_event_subscription":
|
|
405
|
+
return events.revoke.pipe(Effect.as({}));
|
|
406
|
+
case "resume_event_subscription":
|
|
407
|
+
return events.resume.pipe(Effect.as({}));
|
|
408
|
+
default:
|
|
409
|
+
return undefined;
|
|
410
|
+
}
|
|
411
|
+
};
|
|
412
|
+
// #ignore-sloppy-code-next-line[async-keyword]: The MCP edge validates its Promise-native tool schema before running the owner operation.
|
|
413
|
+
const handleOwnerOperation = async (operation, input) => {
|
|
414
|
+
await decodeToolInput(emptyInput, input.toolArguments, input.name);
|
|
415
|
+
return toolResult(await runEventOperation(operation, input.signal));
|
|
363
416
|
};
|
|
364
|
-
|
|
365
|
-
|
|
366
|
-
|
|
367
|
-
|
|
368
|
-
|
|
369
|
-
},
|
|
370
|
-
|
|
417
|
+
/** Schema failures and refused operations stay on the JSON-RPC error channel. */
|
|
418
|
+
const installToolCallHandler = (server, operations, state, authority) => {
|
|
419
|
+
server.server.setRequestHandler("tools/call", (request, context) => {
|
|
420
|
+
const input = {
|
|
421
|
+
name: request.params.name,
|
|
422
|
+
toolArguments: request.params.arguments ?? {},
|
|
423
|
+
metadata: context.mcpReq._meta,
|
|
424
|
+
signal: context.mcpReq.signal,
|
|
425
|
+
};
|
|
426
|
+
const ownerOperation = ownerEventOperation(authority.events, input.name);
|
|
427
|
+
if (authority.role === "owner" && ownerOperation !== undefined) {
|
|
428
|
+
return handleOwnerOperation(ownerOperation, input);
|
|
429
|
+
}
|
|
430
|
+
return handleToolCall(input, operations, state, authority.role);
|
|
371
431
|
});
|
|
372
|
-
|
|
432
|
+
};
|
|
433
|
+
const registerOwnerEvents = (server) => {
|
|
434
|
+
for (const name of ownerEventTools) {
|
|
435
|
+
server.registerTool(name, {
|
|
436
|
+
description: ownerEventDescriptions[name],
|
|
437
|
+
inputSchema: emptyInput,
|
|
438
|
+
...(name === "event_subscription_status"
|
|
439
|
+
? { outputSchema: makeStandardSchema(webhookStatusJsonSchema) }
|
|
440
|
+
: {}),
|
|
441
|
+
}, () => toolResult({}));
|
|
442
|
+
}
|
|
443
|
+
};
|
|
444
|
+
const runtimeOperations = (operations, events) => ({
|
|
445
|
+
...operations,
|
|
446
|
+
acknowledgeDelivery: (token) => operations
|
|
447
|
+
.acknowledgeDelivery(token)
|
|
448
|
+
.pipe(Effect.tap(() => Effect.sync(() => events.notifyPending()))),
|
|
449
|
+
});
|
|
450
|
+
const makeServer = (options, state, events, role) => {
|
|
451
|
+
const capabilities = { tools: {}, events: {} };
|
|
452
|
+
const server = new McpServer(options.implementation, { capabilities });
|
|
453
|
+
if (role !== "runtime") {
|
|
454
|
+
registerStatusTool(server, options.operations);
|
|
455
|
+
}
|
|
456
|
+
if (role === "owner") {
|
|
457
|
+
registerOwnerEvents(server);
|
|
458
|
+
}
|
|
373
459
|
if (state.active) {
|
|
374
|
-
registerActiveTools(server, options.operations);
|
|
460
|
+
registerActiveTools(server, options.operations, role);
|
|
375
461
|
}
|
|
376
|
-
else {
|
|
462
|
+
else if (role !== "runtime") {
|
|
377
463
|
registerRegistrationTool(server, options.operations, state);
|
|
378
464
|
}
|
|
379
|
-
installToolCallHandler(server, options.operations, state);
|
|
465
|
+
installToolCallHandler(server, runtimeOperations(options.operations, events), state, { role, events });
|
|
466
|
+
events.install(server.server, role === "local" ? undefined : role);
|
|
380
467
|
return server;
|
|
381
468
|
};
|
|
382
|
-
|
|
383
|
-
|
|
384
|
-
|
|
385
|
-
|
|
386
|
-
|
|
387
|
-
|
|
388
|
-
|
|
389
|
-
|
|
390
|
-
|
|
391
|
-
|
|
392
|
-
|
|
393
|
-
|
|
394
|
-
|
|
395
|
-
|
|
396
|
-
|
|
397
|
-
|
|
398
|
-
|
|
469
|
+
const officialHandler = (options, state, events) => createMcpHandler((context) => {
|
|
470
|
+
const request = context.requestInfo;
|
|
471
|
+
if (request === undefined) {
|
|
472
|
+
throw new ProtocolError(-32012, "Authentication required");
|
|
473
|
+
}
|
|
474
|
+
const role = authenticateHarnessRequest(request, options.credentials);
|
|
475
|
+
if (role === undefined) {
|
|
476
|
+
throw new ProtocolError(-32012, "Authentication required");
|
|
477
|
+
}
|
|
478
|
+
return makeServer(options, state, events, role);
|
|
479
|
+
}, { legacy: "reject", responseMode: "auto", onerror: options.onerror });
|
|
480
|
+
const guardedHandler = (options, delegate, events, scope) => ({
|
|
481
|
+
...delegate,
|
|
482
|
+
hasActiveSubscription: events.hasActiveSubscription,
|
|
483
|
+
notifyPending: events.notifyPending,
|
|
484
|
+
fetch: (request, requestOptions) => authenticateHarnessRequest(request, options.credentials) === undefined
|
|
485
|
+
? Promise.resolve(new Response("Unauthorized", {
|
|
486
|
+
status: 401,
|
|
487
|
+
headers: { "www-authenticate": "Bearer" },
|
|
488
|
+
}))
|
|
489
|
+
: delegate.fetch(request, requestOptions),
|
|
490
|
+
close: () => Effect.runPromise(events.close.pipe(Effect.ensuring(Effect.tryPromise(() => delegate.close()).pipe(Effect.ignore)), Effect.ensuring(Scope.close(scope, Exit.void)))),
|
|
491
|
+
});
|
|
492
|
+
const acquireWebhook = (options, scope, gate) => Effect.gen(function* () {
|
|
493
|
+
if (options.credentials === undefined || options.eventStore === undefined) {
|
|
494
|
+
return undefined;
|
|
495
|
+
}
|
|
496
|
+
const context = yield* Layer.buildWithScope(webhookHttpClientLayer, scope);
|
|
497
|
+
return yield* makeWebhookEvents(options.eventStore, gate).pipe(Effect.provide(context), Effect.mapError(() => ({ reason: "persistence-failed" })));
|
|
498
|
+
});
|
|
499
|
+
const acquireHandler = (options, state, scope) => Effect.gen(function* () {
|
|
500
|
+
const gate = yield* Effect.makeSemaphore(1);
|
|
501
|
+
const webhook = yield* acquireWebhook(options, scope, gate);
|
|
502
|
+
const events = yield* makeHarnessEvents({
|
|
503
|
+
...(webhook === undefined ? {} : { webhook }),
|
|
504
|
+
summary: options.operations.readInboxSummary,
|
|
505
|
+
registered: () => state.active,
|
|
506
|
+
gate,
|
|
399
507
|
keepAliveMillis: options.keepAliveMillis,
|
|
508
|
+
onActiveChange: options.onSubscriptionActiveChange,
|
|
400
509
|
});
|
|
401
|
-
|
|
510
|
+
return guardedHandler(options, officialHandler(options, state, events), events, scope);
|
|
511
|
+
});
|
|
512
|
+
/**
|
|
513
|
+
* Create one official MCP handler with explicit event resource ownership.
|
|
514
|
+
* @param options Daemon operations, optional credentials and callback persistence.
|
|
515
|
+
* @returns Handler whose catalog changes in place after registration.
|
|
516
|
+
*/
|
|
517
|
+
export const makeHarnessMcpHttpHandler = (options) => Effect.gen(function* () {
|
|
518
|
+
const status = yield* options.operations.readStatus();
|
|
519
|
+
const scope = yield* Scope.make();
|
|
520
|
+
return yield* acquireHandler(options, { active: status.kind === "active" }, scope).pipe(Effect.onError(() => Scope.close(scope, Exit.void)));
|
|
521
|
+
}).pipe(Effect.withSpan("makeHarnessMcpHttpHandler"));
|
|
402
522
|
/* eslint-enable agent-code-guard/async-keyword -- Restore repository defaults after the MCP boundary. */
|
|
403
|
-
//# sourceMappingURL=
|
|
523
|
+
//# sourceMappingURL=tools.js.map
|