@moltzap/client 2026.812.0 → 2026.902.1
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/LICENSE +202 -21
- package/NOTICE +19 -0
- package/README.md +50 -0
- package/bin/moltzapd +9 -0
- package/dist/client-runtime.d.ts +10 -0
- package/dist/client-runtime.d.ts.map +1 -0
- package/dist/client-runtime.js +218 -0
- package/dist/client-runtime.js.map +1 -0
- package/dist/contract.d.ts +338 -0
- package/dist/contract.d.ts.map +1 -0
- package/dist/contract.js +213 -0
- package/dist/contract.js.map +1 -0
- package/dist/contract.types-check.d.ts +99 -0
- package/dist/contract.types-check.d.ts.map +1 -0
- package/dist/contract.types-check.js +7 -0
- package/dist/contract.types-check.js.map +1 -0
- package/dist/daemon/configuration.d.ts +46 -0
- package/dist/daemon/configuration.d.ts.map +1 -0
- package/dist/daemon/configuration.js +69 -0
- package/dist/daemon/configuration.js.map +1 -0
- package/dist/daemon/management.d.ts +23 -0
- package/dist/daemon/management.d.ts.map +1 -0
- package/dist/daemon/management.js +489 -0
- package/dist/daemon/management.js.map +1 -0
- package/dist/daemon/registration.d.ts +72 -0
- package/dist/daemon/registration.d.ts.map +1 -0
- package/dist/daemon/registration.js +109 -0
- package/dist/daemon/registration.js.map +1 -0
- package/dist/daemon/runtime/activation.d.ts +95 -0
- package/dist/daemon/runtime/activation.d.ts.map +1 -0
- package/dist/daemon/runtime/activation.js +99 -0
- package/dist/daemon/runtime/activation.js.map +1 -0
- package/dist/daemon/runtime/controller.d.ts +34 -0
- package/dist/daemon/runtime/controller.d.ts.map +1 -0
- package/dist/daemon/runtime/controller.js +106 -0
- package/dist/daemon/runtime/controller.js.map +1 -0
- package/dist/daemon/runtime/history-export.d.ts +23 -0
- package/dist/daemon/runtime/history-export.d.ts.map +1 -0
- package/dist/daemon/runtime/history-export.js +47 -0
- package/dist/daemon/runtime/history-export.js.map +1 -0
- package/dist/daemon/runtime/index.d.ts +24 -0
- package/dist/daemon/runtime/index.d.ts.map +1 -0
- package/dist/daemon/runtime/index.js +65 -0
- package/dist/daemon/runtime/index.js.map +1 -0
- package/dist/daemon/runtime/protocol.d.ts +63 -0
- package/dist/daemon/runtime/protocol.d.ts.map +1 -0
- package/dist/daemon/runtime/protocol.js +133 -0
- package/dist/daemon/runtime/protocol.js.map +1 -0
- package/dist/endpoint/addressing/index.d.ts +39 -0
- package/dist/endpoint/addressing/index.d.ts.map +1 -0
- package/dist/endpoint/addressing/index.js +114 -0
- package/dist/endpoint/addressing/index.js.map +1 -0
- package/dist/endpoint/engine-dissemination.d.ts +11 -0
- package/dist/endpoint/engine-dissemination.d.ts.map +1 -0
- package/dist/endpoint/engine-dissemination.js +71 -0
- package/dist/endpoint/engine-dissemination.js.map +1 -0
- package/dist/endpoint/engine-durability.d.ts +69 -0
- package/dist/endpoint/engine-durability.d.ts.map +1 -0
- package/dist/endpoint/engine-durability.js +210 -0
- package/dist/endpoint/engine-durability.js.map +1 -0
- package/dist/endpoint/engine-send.d.ts +50 -0
- package/dist/endpoint/engine-send.d.ts.map +1 -0
- package/dist/endpoint/engine-send.js +422 -0
- package/dist/endpoint/engine-send.js.map +1 -0
- package/dist/endpoint/engine-types.d.ts +132 -0
- package/dist/endpoint/engine-types.d.ts.map +1 -0
- package/dist/endpoint/engine-types.js +13 -0
- package/dist/endpoint/engine-types.js.map +1 -0
- package/dist/endpoint/engine.d.ts +14 -0
- package/dist/endpoint/engine.d.ts.map +1 -0
- package/dist/endpoint/engine.js +280 -0
- package/dist/endpoint/engine.js.map +1 -0
- package/dist/endpoint/protocol/evidence.d.ts +37 -0
- package/dist/endpoint/protocol/evidence.d.ts.map +1 -0
- package/dist/endpoint/protocol/evidence.js +80 -0
- package/dist/endpoint/protocol/evidence.js.map +1 -0
- package/dist/endpoint/protocol/index.d.ts +26 -0
- package/dist/endpoint/protocol/index.d.ts.map +1 -0
- package/dist/endpoint/protocol/index.js +543 -0
- package/dist/endpoint/protocol/index.js.map +1 -0
- package/dist/endpoint/recovery/barrier.d.ts +23 -0
- package/dist/endpoint/recovery/barrier.d.ts.map +1 -0
- package/dist/endpoint/recovery/barrier.js +47 -0
- package/dist/endpoint/recovery/barrier.js.map +1 -0
- package/dist/endpoint/recovery/index.d.ts +29 -0
- package/dist/endpoint/recovery/index.d.ts.map +1 -0
- package/dist/endpoint/recovery/index.js +489 -0
- package/dist/endpoint/recovery/index.js.map +1 -0
- package/dist/endpoint/recovery/reanchor/empty.d.ts +22 -0
- package/dist/endpoint/recovery/reanchor/empty.d.ts.map +1 -0
- package/dist/endpoint/recovery/reanchor/empty.js +163 -0
- package/dist/endpoint/recovery/reanchor/empty.js.map +1 -0
- package/dist/endpoint/recovery/reanchor/index.d.ts +30 -0
- package/dist/endpoint/recovery/reanchor/index.d.ts.map +1 -0
- package/dist/endpoint/recovery/reanchor/index.js +479 -0
- package/dist/endpoint/recovery/reanchor/index.js.map +1 -0
- package/dist/endpoint/recovery/state.d.ts +130 -0
- package/dist/endpoint/recovery/state.d.ts.map +1 -0
- package/dist/endpoint/recovery/state.js +296 -0
- package/dist/endpoint/recovery/state.js.map +1 -0
- package/dist/endpoint/recovery/store-evidence.d.ts +17 -0
- package/dist/endpoint/recovery/store-evidence.d.ts.map +1 -0
- package/dist/endpoint/recovery/store-evidence.js +79 -0
- package/dist/endpoint/recovery/store-evidence.js.map +1 -0
- package/dist/endpoint/recovery/store.d.ts +56 -0
- package/dist/endpoint/recovery/store.d.ts.map +1 -0
- package/dist/endpoint/recovery/store.js +499 -0
- package/dist/endpoint/recovery/store.js.map +1 -0
- package/dist/endpoint/representation-canonical.d.ts +17 -0
- package/dist/endpoint/representation-canonical.d.ts.map +1 -0
- package/dist/endpoint/representation-canonical.js +48 -0
- package/dist/endpoint/representation-canonical.js.map +1 -0
- package/dist/endpoint/representation-codec.d.ts +51 -0
- package/dist/endpoint/representation-codec.d.ts.map +1 -0
- package/dist/endpoint/representation-codec.js +159 -0
- package/dist/endpoint/representation-codec.js.map +1 -0
- package/dist/endpoint/representation-schemas.d.ts +1831 -0
- package/dist/endpoint/representation-schemas.d.ts.map +1 -0
- package/dist/endpoint/representation-schemas.js +195 -0
- package/dist/endpoint/representation-schemas.js.map +1 -0
- package/dist/endpoint/representation-verification.d.ts +79 -0
- package/dist/endpoint/representation-verification.d.ts.map +1 -0
- package/dist/endpoint/representation-verification.js +420 -0
- package/dist/endpoint/representation-verification.js.map +1 -0
- package/dist/endpoint/representation.d.ts +6 -0
- package/dist/endpoint/representation.d.ts.map +1 -0
- package/dist/endpoint/representation.js +8 -0
- package/dist/endpoint/representation.js.map +1 -0
- package/dist/endpoint/router-worker/index.d.ts +16 -0
- package/dist/endpoint/router-worker/index.d.ts.map +1 -0
- package/dist/endpoint/router-worker/index.js +547 -0
- package/dist/endpoint/router-worker/index.js.map +1 -0
- package/dist/endpoint/router-worker/types.d.ts +183 -0
- package/dist/endpoint/router-worker/types.d.ts.map +1 -0
- package/dist/endpoint/router-worker/types.js +31 -0
- package/dist/endpoint/router-worker/types.js.map +1 -0
- package/dist/endpoint/store/anchors.d.ts +83 -0
- package/dist/endpoint/store/anchors.d.ts.map +1 -0
- package/dist/endpoint/store/anchors.js +471 -0
- package/dist/endpoint/store/anchors.js.map +1 -0
- package/dist/endpoint/store/database/index.d.ts +6 -0
- package/dist/endpoint/store/database/index.d.ts.map +1 -0
- package/dist/endpoint/store/database/index.js +6 -0
- package/dist/endpoint/store/database/index.js.map +1 -0
- package/dist/endpoint/store/database/schema.d.ts +44 -0
- package/dist/endpoint/store/database/schema.d.ts.map +1 -0
- package/dist/endpoint/store/database/schema.js +345 -0
- package/dist/endpoint/store/database/schema.js.map +1 -0
- package/dist/endpoint/store/database/values.d.ts +119 -0
- package/dist/endpoint/store/database/values.d.ts.map +1 -0
- package/dist/endpoint/store/database/values.js +194 -0
- package/dist/endpoint/store/database/values.js.map +1 -0
- package/dist/endpoint/store/deliveries.d.ts +38 -0
- package/dist/endpoint/store/deliveries.d.ts.map +1 -0
- package/dist/endpoint/store/deliveries.js +124 -0
- package/dist/endpoint/store/deliveries.js.map +1 -0
- package/dist/endpoint/store/dissemination.d.ts +27 -0
- package/dist/endpoint/store/dissemination.d.ts.map +1 -0
- package/dist/endpoint/store/dissemination.js +139 -0
- package/dist/endpoint/store/dissemination.js.map +1 -0
- package/dist/endpoint/store/index.d.ts +15 -0
- package/dist/endpoint/store/index.d.ts.map +1 -0
- package/dist/endpoint/store/index.js +76 -0
- package/dist/endpoint/store/index.js.map +1 -0
- package/dist/endpoint/store/management.d.ts +42 -0
- package/dist/endpoint/store/management.d.ts.map +1 -0
- package/dist/endpoint/store/management.js +259 -0
- package/dist/endpoint/store/management.js.map +1 -0
- package/dist/endpoint/store/outbound.d.ts +62 -0
- package/dist/endpoint/store/outbound.d.ts.map +1 -0
- package/dist/endpoint/store/outbound.js +278 -0
- package/dist/endpoint/store/outbound.js.map +1 -0
- package/dist/endpoint/store/records.d.ts +56 -0
- package/dist/endpoint/store/records.d.ts.map +1 -0
- package/dist/endpoint/store/records.js +352 -0
- package/dist/endpoint/store/records.js.map +1 -0
- package/dist/endpoint/store/rows/index.d.ts +138 -0
- package/dist/endpoint/store/rows/index.d.ts.map +1 -0
- package/dist/endpoint/store/rows/index.js +307 -0
- package/dist/endpoint/store/rows/index.js.map +1 -0
- package/dist/endpoint/store/types.d.ts +223 -0
- package/dist/endpoint/store/types.d.ts.map +1 -0
- package/dist/endpoint/store/types.js +15 -0
- package/dist/endpoint/store/types.js.map +1 -0
- package/dist/endpoint/store.d.ts +10 -0
- package/dist/endpoint/store.d.ts.map +1 -0
- package/dist/endpoint/store.js +6 -0
- package/dist/endpoint/store.js.map +1 -0
- package/dist/harness-mcp-contract.d.ts +101 -0
- package/dist/harness-mcp-contract.d.ts.map +1 -0
- package/dist/harness-mcp-contract.js +61 -0
- package/dist/harness-mcp-contract.js.map +1 -0
- package/dist/{harness-mcp-server.d.ts → harness-mcp-http.d.ts} +9 -8
- package/dist/harness-mcp-http.d.ts.map +1 -0
- package/dist/{harness-mcp-server.js → harness-mcp-http.js} +38 -60
- package/dist/harness-mcp-http.js.map +1 -0
- package/dist/harness-mcp-subscription.d.ts +12 -7
- package/dist/harness-mcp-subscription.d.ts.map +1 -1
- package/dist/harness-mcp-subscription.js +113 -100
- package/dist/harness-mcp-subscription.js.map +1 -1
- package/dist/harness-mcp-wire.d.ts +24 -49
- package/dist/harness-mcp-wire.d.ts.map +1 -1
- package/dist/harness-mcp-wire.js +381 -124
- package/dist/harness-mcp-wire.js.map +1 -1
- package/dist/index.d.ts +4 -10
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +6 -10
- package/dist/index.js.map +1 -1
- package/dist/management-runtime.d.ts +217 -0
- package/dist/management-runtime.d.ts.map +1 -0
- package/dist/management-runtime.js +127 -0
- package/dist/management-runtime.js.map +1 -0
- package/dist/server.d.ts +16 -0
- package/dist/server.d.ts.map +1 -0
- package/dist/server.js +46 -0
- package/dist/server.js.map +1 -0
- package/dist/server.types-check.d.ts +23 -0
- package/dist/server.types-check.d.ts.map +1 -0
- package/dist/server.types-check.js +7 -0
- package/dist/server.types-check.js.map +1 -0
- package/package.json +24 -52
- package/dist/agent-client.d.ts +0 -5
- package/dist/agent-client.d.ts.map +0 -1
- package/dist/agent-client.js +0 -3
- package/dist/agent-client.js.map +0 -1
- package/dist/auth.d.ts +0 -37
- package/dist/auth.d.ts.map +0 -1
- package/dist/auth.js +0 -79
- package/dist/auth.js.map +0 -1
- package/dist/bounded-map.d.ts +0 -32
- package/dist/bounded-map.d.ts.map +0 -1
- package/dist/bounded-map.js +0 -79
- package/dist/bounded-map.js.map +0 -1
- package/dist/channel-base/format-cross-conv.d.ts +0 -43
- package/dist/channel-base/format-cross-conv.d.ts.map +0 -1
- package/dist/channel-base/format-cross-conv.js +0 -65
- package/dist/channel-base/format-cross-conv.js.map +0 -1
- package/dist/channel-base/format-group-block.d.ts +0 -48
- package/dist/channel-base/format-group-block.d.ts.map +0 -1
- package/dist/channel-base/format-group-block.js +0 -62
- package/dist/channel-base/format-group-block.js.map +0 -1
- package/dist/channel-base/index.d.ts +0 -12
- package/dist/channel-base/index.d.ts.map +0 -1
- package/dist/channel-base/index.js +0 -16
- package/dist/channel-base/index.js.map +0 -1
- package/dist/channel-core-enrichment.d.ts +0 -38
- package/dist/channel-core-enrichment.d.ts.map +0 -1
- package/dist/channel-core-enrichment.js +0 -217
- package/dist/channel-core-enrichment.js.map +0 -1
- package/dist/channel-core-test-support.d.ts +0 -75
- package/dist/channel-core-test-support.d.ts.map +0 -1
- package/dist/channel-core-test-support.js +0 -74
- package/dist/channel-core-test-support.js.map +0 -1
- package/dist/channel-core.d.ts +0 -306
- package/dist/channel-core.d.ts.map +0 -1
- package/dist/channel-core.js +0 -365
- package/dist/channel-core.js.map +0 -1
- package/dist/config.d.ts +0 -33
- package/dist/config.d.ts.map +0 -1
- package/dist/config.js +0 -51
- package/dist/config.js.map +0 -1
- package/dist/config.test-utils.d.ts +0 -24
- package/dist/config.test-utils.d.ts.map +0 -1
- package/dist/config.test-utils.js +0 -57
- package/dist/config.test-utils.js.map +0 -1
- package/dist/harness/client-runtime.d.ts +0 -31
- package/dist/harness/client-runtime.d.ts.map +0 -1
- package/dist/harness/client-runtime.js +0 -121
- package/dist/harness/client-runtime.js.map +0 -1
- package/dist/harness/index.d.ts +0 -5
- package/dist/harness/index.d.ts.map +0 -1
- package/dist/harness/index.js +0 -5
- package/dist/harness/index.js.map +0 -1
- package/dist/harness/runtime.d.ts +0 -301
- package/dist/harness/runtime.d.ts.map +0 -1
- package/dist/harness/runtime.js +0 -165
- package/dist/harness/runtime.js.map +0 -1
- package/dist/harness-client.d.ts +0 -47
- package/dist/harness-client.d.ts.map +0 -1
- package/dist/harness-client.js +0 -76
- package/dist/harness-client.js.map +0 -1
- package/dist/harness-context-projection.d.ts +0 -35
- package/dist/harness-context-projection.d.ts.map +0 -1
- package/dist/harness-context-projection.js +0 -123
- package/dist/harness-context-projection.js.map +0 -1
- package/dist/harness-mcp-server.d.ts.map +0 -1
- package/dist/harness-mcp-server.js.map +0 -1
- package/dist/local-paths.d.ts +0 -11
- package/dist/local-paths.d.ts.map +0 -1
- package/dist/local-paths.js +0 -21
- package/dist/local-paths.js.map +0 -1
- package/dist/message-rendering.d.ts +0 -4
- package/dist/message-rendering.d.ts.map +0 -1
- package/dist/message-rendering.js +0 -8
- package/dist/message-rendering.js.map +0 -1
- package/dist/moltzapd-catalog.d.ts +0 -35
- package/dist/moltzapd-catalog.d.ts.map +0 -1
- package/dist/moltzapd-catalog.js +0 -117
- package/dist/moltzapd-catalog.js.map +0 -1
- package/dist/moltzapd-child-ipc.d.ts +0 -26
- package/dist/moltzapd-child-ipc.d.ts.map +0 -1
- package/dist/moltzapd-child-ipc.js +0 -31
- package/dist/moltzapd-child-ipc.js.map +0 -1
- package/dist/moltzapd-child.d.ts +0 -55
- package/dist/moltzapd-child.d.ts.map +0 -1
- package/dist/moltzapd-child.js +0 -225
- package/dist/moltzapd-child.js.map +0 -1
- package/dist/moltzapd-main.d.ts +0 -3
- package/dist/moltzapd-main.d.ts.map +0 -1
- package/dist/moltzapd-main.js +0 -18
- package/dist/moltzapd-main.js.map +0 -1
- package/dist/moltzapd-registration.d.ts +0 -40
- package/dist/moltzapd-registration.d.ts.map +0 -1
- package/dist/moltzapd-registration.js +0 -59
- package/dist/moltzapd-registration.js.map +0 -1
- package/dist/moltzapd.d.ts +0 -85
- package/dist/moltzapd.d.ts.map +0 -1
- package/dist/moltzapd.js +0 -150
- package/dist/moltzapd.js.map +0 -1
- package/dist/notification/__tests__/subscribe-signatures.types-check.d.ts +0 -53
- package/dist/notification/__tests__/subscribe-signatures.types-check.d.ts.map +0 -1
- package/dist/notification/__tests__/subscribe-signatures.types-check.js +0 -29
- package/dist/notification/__tests__/subscribe-signatures.types-check.js.map +0 -1
- package/dist/notification/errors.d.ts +0 -41
- package/dist/notification/errors.d.ts.map +0 -1
- package/dist/notification/errors.js +0 -24
- package/dist/notification/errors.js.map +0 -1
- package/dist/notification/index.d.ts +0 -6
- package/dist/notification/index.d.ts.map +0 -1
- package/dist/notification/index.js +0 -6
- package/dist/notification/index.js.map +0 -1
- package/dist/notification/stream.d.ts +0 -75
- package/dist/notification/stream.d.ts.map +0 -1
- package/dist/notification/stream.js +0 -30
- package/dist/notification/stream.js.map +0 -1
- package/dist/notification/trace.d.ts +0 -10
- package/dist/notification/trace.d.ts.map +0 -1
- package/dist/notification/trace.js +0 -34
- package/dist/notification/trace.js.map +0 -1
- package/dist/pagination.d.ts +0 -52
- package/dist/pagination.d.ts.map +0 -1
- package/dist/pagination.js +0 -51
- package/dist/pagination.js.map +0 -1
- package/dist/presentation/index.d.ts +0 -3
- package/dist/presentation/index.d.ts.map +0 -1
- package/dist/presentation/index.js +0 -3
- package/dist/presentation/index.js.map +0 -1
- package/dist/presentation/state.d.ts +0 -77
- package/dist/presentation/state.d.ts.map +0 -1
- package/dist/presentation/state.js +0 -211
- package/dist/presentation/state.js.map +0 -1
- package/dist/profile.d.ts +0 -106
- package/dist/profile.d.ts.map +0 -1
- package/dist/profile.js +0 -171
- package/dist/profile.js.map +0 -1
- package/dist/service-event-trace.d.ts +0 -15
- package/dist/service-event-trace.d.ts.map +0 -1
- package/dist/service-event-trace.js +0 -35
- package/dist/service-event-trace.js.map +0 -1
- package/dist/service.d.ts +0 -228
- package/dist/service.d.ts.map +0 -1
- package/dist/service.js +0 -485
- package/dist/service.js.map +0 -1
- package/dist/test-utils/channel-service-fixture.d.ts +0 -53
- package/dist/test-utils/channel-service-fixture.d.ts.map +0 -1
- package/dist/test-utils/channel-service-fixture.js +0 -178
- package/dist/test-utils/channel-service-fixture.js.map +0 -1
- package/dist/test-utils/fake-service.d.ts +0 -82
- package/dist/test-utils/fake-service.d.ts.map +0 -1
- package/dist/test-utils/fake-service.js +0 -108
- package/dist/test-utils/fake-service.js.map +0 -1
- package/dist/test-utils/harness.d.ts +0 -27
- package/dist/test-utils/harness.d.ts.map +0 -1
- package/dist/test-utils/harness.js +0 -33
- package/dist/test-utils/harness.js.map +0 -1
- package/dist/test-utils/ids.d.ts +0 -21
- package/dist/test-utils/ids.d.ts.map +0 -1
- package/dist/test-utils/ids.js +0 -68
- package/dist/test-utils/ids.js.map +0 -1
- package/dist/test-utils/index.d.ts +0 -56
- package/dist/test-utils/index.d.ts.map +0 -1
- package/dist/test-utils/index.js +0 -67
- package/dist/test-utils/index.js.map +0 -1
- package/dist/test-utils/process/reserve-port.d.ts +0 -20
- package/dist/test-utils/process/reserve-port.d.ts.map +0 -1
- package/dist/test-utils/process/reserve-port.js +0 -41
- package/dist/test-utils/process/reserve-port.js.map +0 -1
- package/dist/test-utils/standalone-provisioning.d.ts +0 -22
- package/dist/test-utils/standalone-provisioning.d.ts.map +0 -1
- package/dist/test-utils/standalone-provisioning.js +0 -17
- package/dist/test-utils/standalone-provisioning.js.map +0 -1
- package/dist/tsconfig.tsbuildinfo +0 -1
|
@@ -0,0 +1,109 @@
|
|
|
1
|
+
/** @file Crash-recoverable daemon identity binding over Registry and endpoint storage. */
|
|
2
|
+
import { AgentCard, AgentName, PrincipalId, } from "@moltzap/identity";
|
|
3
|
+
import { OperationId, Registry, RegistryRegisterRequest, } from "@moltzap/identity/registry";
|
|
4
|
+
import { Data, Effect, Schema } from "effect";
|
|
5
|
+
import { decodeCanonical, encodeCanonical, } from "../endpoint/representation.js";
|
|
6
|
+
const exactOptions = {
|
|
7
|
+
exact: true,
|
|
8
|
+
onExcessProperty: "error",
|
|
9
|
+
};
|
|
10
|
+
const exactStruct = (fields) => Schema.Struct(fields).annotations({ parseOptions: exactOptions });
|
|
11
|
+
/** Closed caller-supplied portion of one Registry bootstrap request. */
|
|
12
|
+
export const daemonRegistrationRequestSchema = exactStruct({
|
|
13
|
+
operationId: OperationId,
|
|
14
|
+
principalId: PrincipalId,
|
|
15
|
+
agentName: AgentName,
|
|
16
|
+
});
|
|
17
|
+
/** Registry transport or service failure without upstream implementation detail. */
|
|
18
|
+
export class DaemonRegistrationUpstreamError extends Data.TaggedError("DaemonRegistrationUpstreamError") {
|
|
19
|
+
}
|
|
20
|
+
/** Endpoint identity state could not be read or atomically committed. */
|
|
21
|
+
export class DaemonRegistrationPersistenceError extends Data.TaggedError("DaemonRegistrationPersistenceError") {
|
|
22
|
+
}
|
|
23
|
+
/** Configured or durable identity bytes disagree with their closed bindings. */
|
|
24
|
+
export class DaemonRegistrationRepresentationError extends Data.TaggedError("DaemonRegistrationRepresentationError") {
|
|
25
|
+
}
|
|
26
|
+
const persistenceFailure = () => new DaemonRegistrationPersistenceError();
|
|
27
|
+
const representationFailure = () => new DaemonRegistrationRepresentationError();
|
|
28
|
+
const upstreamFailure = () => new DaemonRegistrationUpstreamError();
|
|
29
|
+
const readBoundCard = (input) => Effect.gen(function* () {
|
|
30
|
+
const encodedCard = yield* decodeCanonical(AgentCard, input.binding.canonicalAgentCard).pipe(Effect.mapError(representationFailure));
|
|
31
|
+
const agentCard = yield* AgentCard.verify({
|
|
32
|
+
agentCard: encodedCard,
|
|
33
|
+
registrySignerPublicKey: input.bootstrap.configuration.registrySignerPublicKey,
|
|
34
|
+
}).pipe(Effect.mapError(representationFailure));
|
|
35
|
+
if (input.binding.agentId !== agentCard.agentId ||
|
|
36
|
+
input.bootstrap.agentPublicKey.x !== agentCard.publicKey.x) {
|
|
37
|
+
return yield* representationFailure();
|
|
38
|
+
}
|
|
39
|
+
return agentCard;
|
|
40
|
+
});
|
|
41
|
+
/**
|
|
42
|
+
* Reads startup identity state and re-verifies any durable binding.
|
|
43
|
+
*
|
|
44
|
+
* @param input Startup identity dependencies.
|
|
45
|
+
* @param input.store Minimal durable identity store.
|
|
46
|
+
* @param input.bootstrap Configured Registry and agent key authority.
|
|
47
|
+
* @returns Either the sole unregistered state or one verified active card.
|
|
48
|
+
*/
|
|
49
|
+
export const readDaemonRegistrationState = (input) => Effect.gen(function* () {
|
|
50
|
+
const binding = yield* input.store
|
|
51
|
+
.readIdentity()
|
|
52
|
+
.pipe(Effect.mapError(persistenceFailure));
|
|
53
|
+
if (binding === undefined) {
|
|
54
|
+
return Object.freeze({
|
|
55
|
+
kind: "unregistered",
|
|
56
|
+
});
|
|
57
|
+
}
|
|
58
|
+
const agentCard = yield* readBoundCard({
|
|
59
|
+
binding,
|
|
60
|
+
bootstrap: input.bootstrap,
|
|
61
|
+
});
|
|
62
|
+
return Object.freeze({
|
|
63
|
+
kind: "active",
|
|
64
|
+
agentCard,
|
|
65
|
+
});
|
|
66
|
+
}).pipe(Effect.withSpan("readDaemonRegistrationState"));
|
|
67
|
+
const makeRegistryRequest = (input) => Schema.decodeUnknown(RegistryRegisterRequest)({
|
|
68
|
+
operationId: input.request.operationId,
|
|
69
|
+
principalId: input.request.principalId,
|
|
70
|
+
agentName: input.request.agentName,
|
|
71
|
+
publicKey: input.bootstrap.agentPublicKey,
|
|
72
|
+
}, exactOptions).pipe(Effect.mapError(representationFailure));
|
|
73
|
+
const registrationMatches = (result, request, bootstrap) => result.agentCard.principalId === request.principalId &&
|
|
74
|
+
result.agentCard.agentName === request.agentName &&
|
|
75
|
+
result.agentCard.publicKey.x === bootstrap.agentPublicKey.x;
|
|
76
|
+
const bindRegisteredIdentity = (input) => Effect.gen(function* () {
|
|
77
|
+
if (!registrationMatches(input.result, input.request, input.bootstrap)) {
|
|
78
|
+
return yield* representationFailure();
|
|
79
|
+
}
|
|
80
|
+
const canonicalAgentCard = yield* encodeCanonical(AgentCard, input.result.agentCard).pipe(Effect.mapError(representationFailure));
|
|
81
|
+
yield* input.store
|
|
82
|
+
.bindIdentity({
|
|
83
|
+
agentId: input.result.agentCard.agentId,
|
|
84
|
+
canonicalAgentCard,
|
|
85
|
+
})
|
|
86
|
+
.pipe(Effect.mapError(persistenceFailure));
|
|
87
|
+
});
|
|
88
|
+
/**
|
|
89
|
+
* Registers through Identity and commits a successful binding before return.
|
|
90
|
+
*
|
|
91
|
+
* @param input Complete registration dependencies.
|
|
92
|
+
* @param input.request Closed caller-supplied registration fields.
|
|
93
|
+
* @param input.store Minimal durable identity store.
|
|
94
|
+
* @param input.bootstrap Configured public key, signer, and admission value.
|
|
95
|
+
* @returns The exact Registry result after any successful binding is durable.
|
|
96
|
+
*/
|
|
97
|
+
export const registerDaemonIdentity = (input) => Effect.gen(function* () {
|
|
98
|
+
const request = yield* makeRegistryRequest(input);
|
|
99
|
+
const result = yield* Registry.register({
|
|
100
|
+
request,
|
|
101
|
+
admissionCredential: input.bootstrap.admissionCredential,
|
|
102
|
+
signingAuthority: input.bootstrap.signingAuthority,
|
|
103
|
+
}).pipe(Effect.mapError(upstreamFailure));
|
|
104
|
+
if (result.kind === "registered") {
|
|
105
|
+
yield* bindRegisteredIdentity({ ...input, result });
|
|
106
|
+
}
|
|
107
|
+
return result;
|
|
108
|
+
}).pipe(Effect.withSpan("registerDaemonIdentity"));
|
|
109
|
+
//# sourceMappingURL=registration.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"registration.js","sourceRoot":"","sources":["../../src/daemon/registration.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,95 @@
|
|
|
1
|
+
/** @file Private daemon activation, recovery, and registration preparation. */
|
|
2
|
+
import type { Registry } from "@moltzap/identity/registry";
|
|
3
|
+
import type { Router } from "@moltzap/router";
|
|
4
|
+
import { type VerifiedAgentCard } from "@moltzap/identity";
|
|
5
|
+
import { Deferred, Effect, type Scope } from "effect";
|
|
6
|
+
import type { HistoryExportPort } from "../../endpoint/engine-types.js";
|
|
7
|
+
import type { EndpointEngine, EndpointEngineInput, EngineInitializationError } from "../../endpoint/engine.js";
|
|
8
|
+
import type { RouterWorker, RouterWorkerInput, RouterWorkerProtocolError, RouterWorkerTransportError } from "../../endpoint/router-worker/index.js";
|
|
9
|
+
import type { EndpointStore } from "../../endpoint/store.js";
|
|
10
|
+
import type { HarnessMessageReadyEvent } from "../../harness-mcp-contract.js";
|
|
11
|
+
import type { HarnessMcpSubscriptionHandler } from "../../harness-mcp-subscription.js";
|
|
12
|
+
import type { makeHarnessMcpHttpHandler } from "../../harness-mcp-wire.js";
|
|
13
|
+
import type { DaemonBootstrap } from "../configuration.js";
|
|
14
|
+
import { type DaemonManagementOperations } from "../management.js";
|
|
15
|
+
import { type DaemonRegistrationState } from "../registration.js";
|
|
16
|
+
type SubscriptionHandler = HarnessMcpSubscriptionHandler<HarnessMessageReadyEvent>;
|
|
17
|
+
declare const DaemonRuntimeError_base: new <A extends Record<string, any> = {}>(args: import("effect/Types").VoidIfEmpty<{ readonly [P in keyof A as P extends "_tag" ? never : P]: A[P]; }>) => import("effect/Cause").YieldableError & {
|
|
18
|
+
readonly _tag: "DaemonRuntimeError";
|
|
19
|
+
} & Readonly<A>;
|
|
20
|
+
/** Closed private daemon failure projected onto the public startup phases. */
|
|
21
|
+
export declare class DaemonRuntimeError extends DaemonRuntimeError_base<{
|
|
22
|
+
readonly phase: "storage" | "listener";
|
|
23
|
+
}> {
|
|
24
|
+
}
|
|
25
|
+
declare const DaemonActivationError_base: new <A extends Record<string, any> = {}>(args: import("effect/Types").VoidIfEmpty<{ readonly [P in keyof A as P extends "_tag" ? never : P]: A[P]; }>) => import("effect/Cause").YieldableError & {
|
|
26
|
+
readonly _tag: "DaemonActivationError";
|
|
27
|
+
} & Readonly<A>;
|
|
28
|
+
/** Closed activation failure retained behind the daemon runtime boundary. */
|
|
29
|
+
export declare class DaemonActivationError extends DaemonActivationError_base<{
|
|
30
|
+
readonly reason: "upstream" | "persistence" | "representation";
|
|
31
|
+
}> {
|
|
32
|
+
}
|
|
33
|
+
/** Replaceable process edges used only by focused lifecycle tests. */
|
|
34
|
+
export interface DaemonRuntimeDependencies {
|
|
35
|
+
readonly makeWorker: (input: RouterWorkerInput) => Effect.Effect<RouterWorker, RouterWorkerTransportError | RouterWorkerProtocolError, Registry | Router>;
|
|
36
|
+
readonly makeEngine: (input: EndpointEngineInput) => Effect.Effect<EndpointEngine, EngineInitializationError, Scope.Scope>;
|
|
37
|
+
readonly makeHandler: typeof makeHarnessMcpHttpHandler;
|
|
38
|
+
readonly acquireListener: (input: {
|
|
39
|
+
readonly port: number;
|
|
40
|
+
readonly handler: SubscriptionHandler;
|
|
41
|
+
}) => Effect.Effect<void, Error, Scope.Scope>;
|
|
42
|
+
/** Opens the operator-configured history export against one file. */
|
|
43
|
+
readonly makeHistoryExport: (path: string) => Effect.Effect<HistoryExportPort>;
|
|
44
|
+
}
|
|
45
|
+
/** Management and durable identity state acquired before protocol startup. */
|
|
46
|
+
export interface DaemonActivationPreparation {
|
|
47
|
+
readonly management: DaemonManagementOperations;
|
|
48
|
+
readonly registration: DaemonRegistrationState;
|
|
49
|
+
}
|
|
50
|
+
/** Protocol initializer serialized by the daemon controller. */
|
|
51
|
+
export type InitializeProtocol = (agentCard: VerifiedAgentCard) => Effect.Effect<void, DaemonActivationError>;
|
|
52
|
+
/** Completed management registration result passed through after activation. */
|
|
53
|
+
export type RegistrationResult = Effect.Effect.Success<ReturnType<DaemonManagementOperations["register"]>>;
|
|
54
|
+
/**
|
|
55
|
+
* Recover the unique canonical sender cards pinned by durable memberships.
|
|
56
|
+
* @param input Durable store, configured Registry authority, and local card.
|
|
57
|
+
* @param input.store Durable endpoint state containing recovered memberships.
|
|
58
|
+
* @param input.localAgentCard Verified card configured for this daemon.
|
|
59
|
+
* @param input.bootstrap Fixed Registry authority used to verify memberships.
|
|
60
|
+
* @returns Canonically sorted cards ready for Router worker acquisition.
|
|
61
|
+
*/
|
|
62
|
+
export declare const recoverPinnedSenderCards: (input: {
|
|
63
|
+
readonly store: EndpointStore;
|
|
64
|
+
readonly localAgentCard: VerifiedAgentCard;
|
|
65
|
+
readonly bootstrap: DaemonBootstrap;
|
|
66
|
+
}) => Effect.Effect<readonly VerifiedAgentCard[], DaemonActivationError>;
|
|
67
|
+
/**
|
|
68
|
+
* Complete activation after a successful management registration.
|
|
69
|
+
* @param input Durable identity dependencies, fatal channel, and initializer.
|
|
70
|
+
* @param input.store Durable endpoint identity state.
|
|
71
|
+
* @param input.bootstrap Fixed Registry and signing authority.
|
|
72
|
+
* @param input.fatal Daemon-wide supervised failure channel.
|
|
73
|
+
* @param input.initialize Serialized protocol initializer.
|
|
74
|
+
* @param result Closed management registration result to pass through.
|
|
75
|
+
* @returns The original result after any required protocol activation.
|
|
76
|
+
*/
|
|
77
|
+
export declare const finishRegistration: (input: {
|
|
78
|
+
readonly store: EndpointStore;
|
|
79
|
+
readonly bootstrap: DaemonBootstrap;
|
|
80
|
+
readonly fatal: Deferred.Deferred<never, DaemonRuntimeError>;
|
|
81
|
+
readonly initialize: InitializeProtocol;
|
|
82
|
+
}, result: RegistrationResult) => Effect.Effect<RegistrationResult, DaemonActivationError>;
|
|
83
|
+
/**
|
|
84
|
+
* Acquire management operations and the verified durable startup identity.
|
|
85
|
+
* @param input Daemon-owned persistence and fixed endpoint configuration.
|
|
86
|
+
* @param input.store Durable endpoint identity state.
|
|
87
|
+
* @param input.bootstrap Fixed Registry and signing authority.
|
|
88
|
+
* @returns Management operations paired with the current registration state.
|
|
89
|
+
*/
|
|
90
|
+
export declare const prepareDaemonActivation: (input: {
|
|
91
|
+
readonly store: EndpointStore;
|
|
92
|
+
readonly bootstrap: DaemonBootstrap;
|
|
93
|
+
}) => Effect.Effect<DaemonActivationPreparation, DaemonRuntimeError, Registry>;
|
|
94
|
+
export {};
|
|
95
|
+
//# sourceMappingURL=activation.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"activation.d.ts","sourceRoot":"","sources":["../../../src/daemon/runtime/activation.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,99 @@
|
|
|
1
|
+
/** @file Private daemon activation, recovery, and registration preparation. */
|
|
2
|
+
import { AgentCard, } from "@moltzap/identity";
|
|
3
|
+
import { Data, Deferred, Effect } from "effect";
|
|
4
|
+
import { decodeCanonical, encodeCanonical, MembershipDescriptor, verifyMembershipDescriptor, } from "../../endpoint/representation.js";
|
|
5
|
+
import { makeDaemonManagementOperations, } from "../management.js";
|
|
6
|
+
import { readDaemonRegistrationState, } from "../registration.js";
|
|
7
|
+
/** Closed private daemon failure projected onto the public startup phases. */
|
|
8
|
+
export class DaemonRuntimeError extends Data.TaggedError("DaemonRuntimeError") {
|
|
9
|
+
}
|
|
10
|
+
/** Closed activation failure retained behind the daemon runtime boundary. */
|
|
11
|
+
export class DaemonActivationError extends Data.TaggedError("DaemonActivationError") {
|
|
12
|
+
}
|
|
13
|
+
const sameBytes = (left, right) => left.length === right.length &&
|
|
14
|
+
left.every((byte, index) => byte === right[index]);
|
|
15
|
+
const activationFailure = (reason) => new DaemonActivationError({ reason });
|
|
16
|
+
const runtimeFailure = (phase) => new DaemonRuntimeError({ phase });
|
|
17
|
+
const activationRuntimeFailure = (error) => runtimeFailure(error.reason === "upstream" ? "listener" : "storage");
|
|
18
|
+
const encodeCard = (card) => encodeCanonical(AgentCard, card).pipe(Effect.mapError(() => activationFailure("representation")));
|
|
19
|
+
const retainPinnedCard = (pinned, card) => Effect.gen(function* () {
|
|
20
|
+
const canonical = yield* encodeCard(card);
|
|
21
|
+
const existing = pinned.representations.get(card.agentId);
|
|
22
|
+
if (existing !== undefined && !sameBytes(existing, canonical)) {
|
|
23
|
+
return yield* Effect.fail(activationFailure("representation"));
|
|
24
|
+
}
|
|
25
|
+
pinned.cards.set(card.agentId, card);
|
|
26
|
+
pinned.representations.set(card.agentId, canonical);
|
|
27
|
+
});
|
|
28
|
+
const retainMembershipCards = (input, stored) => Effect.gen(function* () {
|
|
29
|
+
const membership = yield* decodeCanonical(MembershipDescriptor, stored.canonicalMembership).pipe(Effect.mapError(() => activationFailure("representation")));
|
|
30
|
+
const verified = yield* verifyMembershipDescriptor(membership, input.bootstrap.configuration.registrySignerPublicKey).pipe(Effect.mapError(() => activationFailure("representation")));
|
|
31
|
+
if (membership.conversationId !== stored.conversationId ||
|
|
32
|
+
verified.hash !== stored.membershipHash) {
|
|
33
|
+
return yield* Effect.fail(activationFailure("representation"));
|
|
34
|
+
}
|
|
35
|
+
yield* Effect.forEach(verified.members, (card) => retainPinnedCard(input.pinned, card), { concurrency: 1, discard: true });
|
|
36
|
+
});
|
|
37
|
+
const compareAgentCards = (left, right) => {
|
|
38
|
+
if (left.agentId === right.agentId) {
|
|
39
|
+
return 0;
|
|
40
|
+
}
|
|
41
|
+
return left.agentId < right.agentId ? -1 : 1;
|
|
42
|
+
};
|
|
43
|
+
/**
|
|
44
|
+
* Recover the unique canonical sender cards pinned by durable memberships.
|
|
45
|
+
* @param input Durable store, configured Registry authority, and local card.
|
|
46
|
+
* @param input.store Durable endpoint state containing recovered memberships.
|
|
47
|
+
* @param input.localAgentCard Verified card configured for this daemon.
|
|
48
|
+
* @param input.bootstrap Fixed Registry authority used to verify memberships.
|
|
49
|
+
* @returns Canonically sorted cards ready for Router worker acquisition.
|
|
50
|
+
*/
|
|
51
|
+
export const recoverPinnedSenderCards = (input) => Effect.gen(function* () {
|
|
52
|
+
const recovery = yield* input.store
|
|
53
|
+
.recover()
|
|
54
|
+
.pipe(Effect.mapError(() => activationFailure("persistence")));
|
|
55
|
+
const pinned = {
|
|
56
|
+
cards: new Map(),
|
|
57
|
+
representations: new Map(),
|
|
58
|
+
};
|
|
59
|
+
yield* retainPinnedCard(pinned, input.localAgentCard);
|
|
60
|
+
yield* Effect.forEach(recovery.memberships, (stored) => retainMembershipCards({ bootstrap: input.bootstrap, pinned }, stored), { concurrency: 1, discard: true });
|
|
61
|
+
return [...pinned.cards.values()].sort(compareAgentCards);
|
|
62
|
+
}).pipe(Effect.withSpan("recoverPinnedSenderCards"));
|
|
63
|
+
const initializeRegistrationState = (initialize, state) => {
|
|
64
|
+
if (state.kind !== "active") {
|
|
65
|
+
return Effect.fail(activationFailure("persistence"));
|
|
66
|
+
}
|
|
67
|
+
return initialize(state.agentCard);
|
|
68
|
+
};
|
|
69
|
+
/**
|
|
70
|
+
* Complete activation after a successful management registration.
|
|
71
|
+
* @param input Durable identity dependencies, fatal channel, and initializer.
|
|
72
|
+
* @param input.store Durable endpoint identity state.
|
|
73
|
+
* @param input.bootstrap Fixed Registry and signing authority.
|
|
74
|
+
* @param input.fatal Daemon-wide supervised failure channel.
|
|
75
|
+
* @param input.initialize Serialized protocol initializer.
|
|
76
|
+
* @param result Closed management registration result to pass through.
|
|
77
|
+
* @returns The original result after any required protocol activation.
|
|
78
|
+
*/
|
|
79
|
+
export const finishRegistration = (input, result) => {
|
|
80
|
+
if (result.kind !== "registered") {
|
|
81
|
+
return Effect.succeed(result);
|
|
82
|
+
}
|
|
83
|
+
return readDaemonRegistrationState(input).pipe(Effect.mapError((error) => activationFailure(error._tag === "DaemonRegistrationPersistenceError"
|
|
84
|
+
? "persistence"
|
|
85
|
+
: "representation")), Effect.flatMap((state) => initializeRegistrationState(input.initialize, state)), Effect.tapError((error) => Deferred.fail(input.fatal, activationRuntimeFailure(error))), Effect.as(result));
|
|
86
|
+
};
|
|
87
|
+
/**
|
|
88
|
+
* Acquire management operations and the verified durable startup identity.
|
|
89
|
+
* @param input Daemon-owned persistence and fixed endpoint configuration.
|
|
90
|
+
* @param input.store Durable endpoint identity state.
|
|
91
|
+
* @param input.bootstrap Fixed Registry and signing authority.
|
|
92
|
+
* @returns Management operations paired with the current registration state.
|
|
93
|
+
*/
|
|
94
|
+
export const prepareDaemonActivation = (input) => Effect.gen(function* () {
|
|
95
|
+
const management = yield* makeDaemonManagementOperations(input);
|
|
96
|
+
const registration = yield* readDaemonRegistrationState(input).pipe(Effect.mapError(() => runtimeFailure("storage")));
|
|
97
|
+
return { management, registration };
|
|
98
|
+
}).pipe(Effect.withSpan("prepareDaemonActivation"));
|
|
99
|
+
//# sourceMappingURL=activation.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"activation.js","sourceRoot":"","sources":["../../../src/daemon/runtime/activation.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,34 @@
|
|
|
1
|
+
/** @file MCP operations and subscription state for one daemon controller. */
|
|
2
|
+
import { Registry } from "@moltzap/identity/registry";
|
|
3
|
+
import { Router } from "@moltzap/router";
|
|
4
|
+
import { Effect, Scope } from "effect";
|
|
5
|
+
import type { HistoryExportPort } from "../../endpoint/engine-types.js";
|
|
6
|
+
import type { EndpointStore } from "../../endpoint/store.js";
|
|
7
|
+
import type { HarnessMcpOperations } from "../../harness-mcp-wire.js";
|
|
8
|
+
import type { DaemonBootstrap } from "../configuration.js";
|
|
9
|
+
import { type DaemonActivationPreparation, type DaemonRuntimeDependencies, DaemonRuntimeError } from "./activation.js";
|
|
10
|
+
import { type RuntimeSubscriptionHandler } from "./protocol.js";
|
|
11
|
+
interface DaemonControllerInput {
|
|
12
|
+
readonly store: EndpointStore;
|
|
13
|
+
readonly bootstrap: DaemonBootstrap;
|
|
14
|
+
readonly historyExport: HistoryExportPort;
|
|
15
|
+
readonly management: DaemonActivationPreparation["management"];
|
|
16
|
+
readonly dependencies: DaemonRuntimeDependencies;
|
|
17
|
+
}
|
|
18
|
+
/** Controller operations consumed by the daemon composition root. */
|
|
19
|
+
export interface DaemonController {
|
|
20
|
+
readonly operations: HarnessMcpOperations;
|
|
21
|
+
readonly subscriptionChanged: (active: boolean) => void;
|
|
22
|
+
readonly installHandler: (handler: RuntimeSubscriptionHandler) => Effect.Effect<void>;
|
|
23
|
+
readonly runSubscriptions: Effect.Effect<never, DaemonRuntimeError>;
|
|
24
|
+
readonly awaitFailure: Effect.Effect<never, DaemonRuntimeError>;
|
|
25
|
+
readonly initializeAtStart: (state: DaemonActivationPreparation["registration"]) => Effect.Effect<void, DaemonRuntimeError>;
|
|
26
|
+
}
|
|
27
|
+
/**
|
|
28
|
+
* Acquire the daemon's protocol controller without starting the MCP listener.
|
|
29
|
+
* @param input Durable store, bootstrap configuration, and process dependencies.
|
|
30
|
+
* @returns Controller operations and supervised lifecycle effects.
|
|
31
|
+
*/
|
|
32
|
+
export declare const makeDaemonController: (input: DaemonControllerInput) => Effect.Effect<DaemonController, never, Registry | Router | Scope.Scope>;
|
|
33
|
+
export {};
|
|
34
|
+
//# sourceMappingURL=controller.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"controller.d.ts","sourceRoot":"","sources":["../../../src/daemon/runtime/controller.ts"],"names":[],"mappings":"AAAA,6EAA6E;AAG7E,OAAO,EAAE,QAAQ,EAAE,MAAM,4BAA4B,CAAC;AACtD,OAAO,EAAE,MAAM,EAAE,MAAM,iBAAiB,CAAC;AACzC,OAAO,EAAY,MAAM,EAAS,KAAK,EAAE,MAAM,QAAQ,CAAC;AACxD,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,gCAAgC,CAAC;AACxE,OAAO,KAAK,EAAiB,aAAa,EAAE,MAAM,yBAAyB,CAAC;AAC5E,OAAO,KAAK,EAAE,oBAAoB,EAAE,MAAM,2BAA2B,CAAC;AACtE,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,qBAAqB,CAAC;AAE3D,OAAO,EAEL,KAAK,2BAA2B,EAChC,KAAK,yBAAyB,EAC9B,kBAAkB,EAGnB,MAAM,iBAAiB,CAAC;AACzB,OAAO,EAML,KAAK,0BAA0B,EAChC,MAAM,eAAe,CAAC;AAEvB,UAAU,qBAAqB;IAC7B,QAAQ,CAAC,KAAK,EAAE,aAAa,CAAC;IAC9B,QAAQ,CAAC,SAAS,EAAE,eAAe,CAAC;IACpC,QAAQ,CAAC,aAAa,EAAE,iBAAiB,CAAC;IAC1C,QAAQ,CAAC,UAAU,EAAE,2BAA2B,CAAC,YAAY,CAAC,CAAC;IAC/D,QAAQ,CAAC,YAAY,EAAE,yBAAyB,CAAC;CAClD;AAED,qEAAqE;AACrE,MAAM,WAAW,gBAAgB;IAC/B,QAAQ,CAAC,UAAU,EAAE,oBAAoB,CAAC;IAC1C,QAAQ,CAAC,mBAAmB,EAAE,CAAC,MAAM,EAAE,OAAO,KAAK,IAAI,CAAC;IACxD,QAAQ,CAAC,cAAc,EAAE,CACvB,OAAO,EAAE,0BAA0B,KAChC,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC;IACzB,QAAQ,CAAC,gBAAgB,EAAE,MAAM,CAAC,MAAM,CAAC,KAAK,EAAE,kBAAkB,CAAC,CAAC;IACpE,QAAQ,CAAC,YAAY,EAAE,MAAM,CAAC,MAAM,CAAC,KAAK,EAAE,kBAAkB,CAAC,CAAC;IAChE,QAAQ,CAAC,iBAAiB,EAAE,CAC1B,KAAK,EAAE,2BAA2B,CAAC,cAAc,CAAC,KAC/C,MAAM,CAAC,MAAM,CAAC,IAAI,EAAE,kBAAkB,CAAC,CAAC;CAC9C;AAmJD;;;;GAIG;AACH,eAAO,MAAM,oBAAoB,UACxB,qBAAqB,KAC3B,MAAM,CAAC,MAAM,CAAC,gBAAgB,EAAE,KAAK,EAAE,QAAQ,GAAG,MAAM,GAAG,KAAK,CAAC,KAAK,CAmCvB,CAAC"}
|
|
@@ -0,0 +1,106 @@
|
|
|
1
|
+
/** @file MCP operations and subscription state for one daemon controller. */
|
|
2
|
+
import { Registry } from "@moltzap/identity/registry";
|
|
3
|
+
import { Router } from "@moltzap/router";
|
|
4
|
+
import { Deferred, Effect, Queue, Scope } from "effect";
|
|
5
|
+
import { DeliveryAcknowledgeError, SendError } from "../../contract.js";
|
|
6
|
+
import { DaemonRuntimeError, finishRegistration, } from "./activation.js";
|
|
7
|
+
import { failFromBackgroundCause, initializeProtocol, publishPendingMessages, } from "./protocol.js";
|
|
8
|
+
const runtimeFailure = (phase) => new DaemonRuntimeError({ phase });
|
|
9
|
+
const activationRuntimeFailure = (error) => runtimeFailure(error.reason === "upstream" ? "listener" : "storage");
|
|
10
|
+
const makeRegisterOperation = (environment, management, initialize) => (request) => Effect.uninterruptible(management.register(request).pipe(Effect.flatMap((result) => finishRegistration({
|
|
11
|
+
store: environment.store,
|
|
12
|
+
bootstrap: environment.bootstrap,
|
|
13
|
+
fatal: environment.fatal,
|
|
14
|
+
initialize,
|
|
15
|
+
}, result))));
|
|
16
|
+
const makeSendOperation = (state) => (request) => Effect.suspend(() => {
|
|
17
|
+
const protocol = state.activeProtocol;
|
|
18
|
+
if (protocol === undefined) {
|
|
19
|
+
return Effect.fail(new SendError({ reason: "not-registered" }));
|
|
20
|
+
}
|
|
21
|
+
return protocol.engine.send(request);
|
|
22
|
+
});
|
|
23
|
+
const forgetPublishedDelivery = (state, deliveryToken) => Effect.sync(() => {
|
|
24
|
+
state.publishedDeliveries.delete(deliveryToken);
|
|
25
|
+
});
|
|
26
|
+
const makeAcknowledgeDeliveryOperation = (state, deliveryGate) => (deliveryToken) => deliveryGate.withPermits(1)(Effect.suspend(() => {
|
|
27
|
+
const protocol = state.activeProtocol;
|
|
28
|
+
if (protocol === undefined) {
|
|
29
|
+
return Effect.fail(new DeliveryAcknowledgeError({ reason: "unknown-delivery" }));
|
|
30
|
+
}
|
|
31
|
+
return protocol.engine
|
|
32
|
+
.acknowledgeMessage(deliveryToken)
|
|
33
|
+
.pipe(Effect.tap(() => forgetPublishedDelivery(state, deliveryToken)));
|
|
34
|
+
}));
|
|
35
|
+
const runSubscriptionChanges = (environment, changes, reconciler) => Queue.take(changes).pipe(Effect.flatMap((active) => Effect.sync(() => {
|
|
36
|
+
environment.state.subscriptionActive = active;
|
|
37
|
+
if (!active) {
|
|
38
|
+
environment.state.publishedDeliveries.clear();
|
|
39
|
+
}
|
|
40
|
+
}).pipe(Effect.zipRight(reconciler))), Effect.forever, Effect.catchAllCause((cause) => failFromBackgroundCause(environment.fatal, cause)));
|
|
41
|
+
const initializeAtStart = (initialize, state) => {
|
|
42
|
+
if (state.kind === "unregistered") {
|
|
43
|
+
return Effect.void;
|
|
44
|
+
}
|
|
45
|
+
return initialize(state.agentCard).pipe(Effect.mapError(activationRuntimeFailure));
|
|
46
|
+
};
|
|
47
|
+
const assembleDaemonController = (input) => {
|
|
48
|
+
const register = makeRegisterOperation(input.environment, input.management, input.initialize);
|
|
49
|
+
return {
|
|
50
|
+
operations: Object.freeze({
|
|
51
|
+
...input.management,
|
|
52
|
+
register,
|
|
53
|
+
send: makeSendOperation(input.environment.state),
|
|
54
|
+
acknowledgeDelivery: makeAcknowledgeDeliveryOperation(input.environment.state, input.deliveryGate),
|
|
55
|
+
}),
|
|
56
|
+
subscriptionChanged: (active) => {
|
|
57
|
+
input.changes.unsafeOffer(active);
|
|
58
|
+
},
|
|
59
|
+
installHandler: (handler) => Effect.sync(() => {
|
|
60
|
+
input.environment.state.handler = handler;
|
|
61
|
+
}),
|
|
62
|
+
runSubscriptions: runSubscriptionChanges(input.environment, input.changes, input.reconciler),
|
|
63
|
+
awaitFailure: Deferred.await(input.environment.fatal),
|
|
64
|
+
initializeAtStart: (state) => initializeAtStart(input.initialize, state),
|
|
65
|
+
};
|
|
66
|
+
};
|
|
67
|
+
/**
|
|
68
|
+
* Acquire the daemon's protocol controller without starting the MCP listener.
|
|
69
|
+
* @param input Durable store, bootstrap configuration, and process dependencies.
|
|
70
|
+
* @returns Controller operations and supervised lifecycle effects.
|
|
71
|
+
*/
|
|
72
|
+
export const makeDaemonController = (input) => Effect.gen(function* () {
|
|
73
|
+
const registry = yield* Registry;
|
|
74
|
+
const router = yield* Router;
|
|
75
|
+
const daemonScope = yield* Scope.Scope;
|
|
76
|
+
const activationGate = yield* Effect.makeSemaphore(1);
|
|
77
|
+
const deliveryGate = yield* Effect.makeSemaphore(1);
|
|
78
|
+
const changes = yield* Queue.unbounded();
|
|
79
|
+
const fatal = yield* Deferred.make();
|
|
80
|
+
const state = {
|
|
81
|
+
subscriptionActive: false,
|
|
82
|
+
publishedDeliveries: new Set(),
|
|
83
|
+
};
|
|
84
|
+
const environment = {
|
|
85
|
+
store: input.store,
|
|
86
|
+
bootstrap: input.bootstrap,
|
|
87
|
+
historyExport: input.historyExport,
|
|
88
|
+
dependencies: input.dependencies,
|
|
89
|
+
registry,
|
|
90
|
+
router,
|
|
91
|
+
daemonScope,
|
|
92
|
+
fatal,
|
|
93
|
+
state,
|
|
94
|
+
};
|
|
95
|
+
const reconciler = publishPendingMessages(environment, deliveryGate);
|
|
96
|
+
const initialize = (agentCard) => initializeProtocol(environment, activationGate, reconciler, agentCard);
|
|
97
|
+
return assembleDaemonController({
|
|
98
|
+
environment,
|
|
99
|
+
management: input.management,
|
|
100
|
+
changes,
|
|
101
|
+
deliveryGate,
|
|
102
|
+
reconciler,
|
|
103
|
+
initialize,
|
|
104
|
+
});
|
|
105
|
+
}).pipe(Effect.withSpan("makeDaemonController"));
|
|
106
|
+
//# sourceMappingURL=controller.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"controller.js","sourceRoot":"","sources":["../../../src/daemon/runtime/controller.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
/** @file Append-only export of what one daemon delivered and sent. */
|
|
2
|
+
import { FileSystem } from "@effect/platform";
|
|
3
|
+
import { Effect } from "effect";
|
|
4
|
+
import type { HistoryExportPort } from "../../endpoint/engine-types.js";
|
|
5
|
+
/**
|
|
6
|
+
* Open the daemon's history export against one file.
|
|
7
|
+
*
|
|
8
|
+
* Recording completes only once the line is on disk: an inbound record lands
|
|
9
|
+
* before its message becomes visible to the agent and an outbound record
|
|
10
|
+
* before the send returns, so a transcript harvested the moment a program
|
|
11
|
+
* ends holds every delivery and send that program could have observed. That
|
|
12
|
+
* costs one append inside the delivery path, accepted for an opt-in evidence
|
|
13
|
+
* file whose worth is its completeness. Lines are appended one at a time
|
|
14
|
+
* under a gate, so two records never interleave. The first append that fails
|
|
15
|
+
* ends the export: one `export-failed` line is written on a best-effort
|
|
16
|
+
* basis, every later record is dropped, and the daemon goes on serving the
|
|
17
|
+
* agent. An experiment must not die because its transcript file did, and the
|
|
18
|
+
* truncation is explicit in the file rather than silent.
|
|
19
|
+
*
|
|
20
|
+
* The file is created on the first write.
|
|
21
|
+
*/
|
|
22
|
+
export declare function makeHistoryExport(path: string): Effect.Effect<HistoryExportPort, never, FileSystem.FileSystem>;
|
|
23
|
+
//# sourceMappingURL=history-export.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"history-export.d.ts","sourceRoot":"","sources":["../../../src/daemon/runtime/history-export.ts"],"names":[],"mappings":"AAAA,sEAAsE;AAEtE,OAAO,EAAE,UAAU,EAAE,MAAM,kBAAkB,CAAC;AAC9C,OAAO,EAAY,MAAM,EAAU,MAAM,QAAQ,CAAC;AAClD,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,gCAAgC,CAAC;AAOxE;;;;;;;;;;;;;;;;GAgBG;AACH,wBAAgB,iBAAiB,CAC/B,IAAI,EAAE,MAAM,GACX,MAAM,CAAC,MAAM,CAAC,iBAAiB,EAAE,KAAK,EAAE,UAAU,CAAC,UAAU,CAAC,CAiChE"}
|
|
@@ -0,0 +1,47 @@
|
|
|
1
|
+
/** @file Append-only export of what one daemon delivered and sent. */
|
|
2
|
+
import { FileSystem } from "@effect/platform";
|
|
3
|
+
import { DateTime, Effect, Schema } from "effect";
|
|
4
|
+
import { HistoryExportRecord } from "../../contract.js";
|
|
5
|
+
// safer-arch-ignore no-trivial-sink-file: The export writer is one replaceable process edge, kept beside the runtime that installs it rather than inside it so lifecycle composition stays free of file handling.
|
|
6
|
+
const encodeLine = Schema.encode(Schema.parseJson(HistoryExportRecord));
|
|
7
|
+
/**
|
|
8
|
+
* Open the daemon's history export against one file.
|
|
9
|
+
*
|
|
10
|
+
* Recording completes only once the line is on disk: an inbound record lands
|
|
11
|
+
* before its message becomes visible to the agent and an outbound record
|
|
12
|
+
* before the send returns, so a transcript harvested the moment a program
|
|
13
|
+
* ends holds every delivery and send that program could have observed. That
|
|
14
|
+
* costs one append inside the delivery path, accepted for an opt-in evidence
|
|
15
|
+
* file whose worth is its completeness. Lines are appended one at a time
|
|
16
|
+
* under a gate, so two records never interleave. The first append that fails
|
|
17
|
+
* ends the export: one `export-failed` line is written on a best-effort
|
|
18
|
+
* basis, every later record is dropped, and the daemon goes on serving the
|
|
19
|
+
* agent. An experiment must not die because its transcript file did, and the
|
|
20
|
+
* truncation is explicit in the file rather than silent.
|
|
21
|
+
*
|
|
22
|
+
* The file is created on the first write.
|
|
23
|
+
*/
|
|
24
|
+
export function makeHistoryExport(path) {
|
|
25
|
+
return Effect.gen(function* () {
|
|
26
|
+
const fileSystem = yield* FileSystem.FileSystem;
|
|
27
|
+
const gate = yield* Effect.makeSemaphore(1);
|
|
28
|
+
let enabled = true;
|
|
29
|
+
const append = (record) => encodeLine(record).pipe(Effect.flatMap((line) => fileSystem.writeFileString(path, `${line}\n`, { flag: "a" })));
|
|
30
|
+
const disable = (cause) => Effect.gen(function* () {
|
|
31
|
+
enabled = false;
|
|
32
|
+
yield* Effect.logWarning(`history export stopped: ${cause.message}`);
|
|
33
|
+
const at = yield* DateTime.now;
|
|
34
|
+
yield* append({
|
|
35
|
+
kind: "export-failed",
|
|
36
|
+
reason: cause.message,
|
|
37
|
+
at,
|
|
38
|
+
}).pipe(Effect.ignore);
|
|
39
|
+
});
|
|
40
|
+
return {
|
|
41
|
+
record: (record) => gate.withPermits(1)(Effect.suspend(() => enabled
|
|
42
|
+
? append(record).pipe(Effect.catchAll(disable))
|
|
43
|
+
: Effect.void)),
|
|
44
|
+
};
|
|
45
|
+
}).pipe(Effect.withSpan("makeHistoryExport"));
|
|
46
|
+
}
|
|
47
|
+
//# sourceMappingURL=history-export.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"history-export.js","sourceRoot":"","sources":["../../../src/daemon/runtime/history-export.ts"],"names":[],"mappings":"AAAA,sEAAsE;AAEtE,OAAO,EAAE,UAAU,EAAE,MAAM,kBAAkB,CAAC;AAC9C,OAAO,EAAE,QAAQ,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,QAAQ,CAAC;AAElD,OAAO,EAAE,mBAAmB,EAAE,MAAM,mBAAmB,CAAC;AAExD,kNAAkN;AAElN,MAAM,UAAU,GAAG,MAAM,CAAC,MAAM,CAAC,MAAM,CAAC,SAAS,CAAC,mBAAmB,CAAC,CAAC,CAAC;AAExE;;;;;;;;;;;;;;;;GAgBG;AACH,MAAM,UAAU,iBAAiB,CAC/B,IAAY;IAEZ,OAAO,MAAM,CAAC,GAAG,CAAC,QAAQ,CAAC;QACzB,MAAM,UAAU,GAAG,KAAK,CAAC,CAAC,UAAU,CAAC,UAAU,CAAC;QAChD,MAAM,IAAI,GAAG,KAAK,CAAC,CAAC,MAAM,CAAC,aAAa,CAAC,CAAC,CAAC,CAAC;QAC5C,IAAI,OAAO,GAAG,IAAI,CAAC;QACnB,MAAM,MAAM,GAAG,CAAC,MAA2B,EAAE,EAAE,CAC7C,UAAU,CAAC,MAAM,CAAC,CAAC,IAAI,CACrB,MAAM,CAAC,OAAO,CAAC,CAAC,IAAI,EAAE,EAAE,CACtB,UAAU,CAAC,eAAe,CAAC,IAAI,EAAE,GAAG,IAAI,IAAI,EAAE,EAAE,IAAI,EAAE,GAAG,EAAE,CAAC,CAC7D,CACF,CAAC;QACJ,MAAM,OAAO,GAAG,CAAC,KAAmC,EAAE,EAAE,CACtD,MAAM,CAAC,GAAG,CAAC,QAAQ,CAAC;YAClB,OAAO,GAAG,KAAK,CAAC;YAChB,KAAK,CAAC,CAAC,MAAM,CAAC,UAAU,CAAC,2BAA2B,KAAK,CAAC,OAAO,EAAE,CAAC,CAAC;YACrE,MAAM,EAAE,GAAG,KAAK,CAAC,CAAC,QAAQ,CAAC,GAAG,CAAC;YAC/B,KAAK,CAAC,CAAC,MAAM,CAAC;gBACZ,IAAI,EAAE,eAAe;gBACrB,MAAM,EAAE,KAAK,CAAC,OAAO;gBACrB,EAAE;aACH,CAAC,CAAC,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC;QACzB,CAAC,CAAC,CAAC;QACL,OAAO;YACL,MAAM,EAAE,CAAC,MAA2B,EAAE,EAAE,CACtC,IAAI,CAAC,WAAW,CAAC,CAAC,CAAC,CACjB,MAAM,CAAC,OAAO,CAAC,GAAG,EAAE,CAClB,OAAO;gBACL,CAAC,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,OAAO,CAAC,CAAC;gBAC/C,CAAC,CAAC,MAAM,CAAC,IAAI,CAChB,CACF;SACJ,CAAC;IACJ,CAAC,CAAC,CAAC,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,mBAAmB,CAAC,CAAC,CAAC;AAChD,CAAC"}
|
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
/** @file Private lifecycle composition for one registered endpoint daemon. */
|
|
2
|
+
import type { Registry } from "@moltzap/identity/registry";
|
|
3
|
+
import type { Router } from "@moltzap/router";
|
|
4
|
+
import { Effect, type Scope } from "effect";
|
|
5
|
+
import type { EndpointStore } from "../../endpoint/store.js";
|
|
6
|
+
import type { DaemonBootstrap } from "../configuration.js";
|
|
7
|
+
import { type DaemonRuntimeDependencies, DaemonRuntimeError } from "./activation.js";
|
|
8
|
+
/** Closed daemon startup and supervision failure. */
|
|
9
|
+
export { DaemonRuntimeError };
|
|
10
|
+
/** Replaceable process edges used by focused lifecycle tests. */
|
|
11
|
+
export type { DaemonRuntimeDependencies };
|
|
12
|
+
/**
|
|
13
|
+
* Run all daemon-owned protocol and MCP resources until a supervised failure.
|
|
14
|
+
* @param input Daemon-owned persistence and fixed endpoint configuration.
|
|
15
|
+
* @param input.store Durable endpoint store owned by this daemon process.
|
|
16
|
+
* @param input.bootstrap Validated identity, network, and listener configuration.
|
|
17
|
+
* @param dependencies Replaceable process edges used by focused lifecycle tests.
|
|
18
|
+
* @returns A scoped process effect that ends only when a supervised resource fails.
|
|
19
|
+
*/
|
|
20
|
+
export declare const runDaemonRuntime: (input: {
|
|
21
|
+
readonly store: EndpointStore;
|
|
22
|
+
readonly bootstrap: DaemonBootstrap;
|
|
23
|
+
}, dependencies?: DaemonRuntimeDependencies) => Effect.Effect<never, DaemonRuntimeError, Registry | Router | Scope.Scope>;
|
|
24
|
+
//# sourceMappingURL=index.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/daemon/runtime/index.ts"],"names":[],"mappings":"AAAA,8EAA8E;AAG9E,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,4BAA4B,CAAC;AAC3D,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,iBAAiB,CAAC;AAE9C,OAAO,EAAE,MAAM,EAAE,KAAK,KAAK,EAAE,MAAM,QAAQ,CAAC;AAC5C,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,yBAAyB,CAAC;AAC7D,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,qBAAqB,CAAC;AAO3D,OAAO,EACL,KAAK,yBAAyB,EAC9B,kBAAkB,EAEnB,MAAM,iBAAiB,CAAC;AAuBzB,qDAAqD;AACrD,OAAO,EAAE,kBAAkB,EAAE,CAAC;AAC9B,iEAAiE;AACjE,YAAY,EAAE,yBAAyB,EAAE,CAAC;AAE1C;;;;;;;GAOG;AACH,eAAO,MAAM,gBAAgB,UACpB;IACL,QAAQ,CAAC,KAAK,EAAE,aAAa,CAAC;IAC9B,QAAQ,CAAC,SAAS,EAAE,eAAe,CAAC;CACrC,iBACa,yBAAyB,KACtC,MAAM,CAAC,MAAM,CAAC,KAAK,EAAE,kBAAkB,EAAE,QAAQ,GAAG,MAAM,GAAG,KAAK,CAAC,KAAK,CA+B7B,CAAC"}
|