effect 4.0.0-beta.99 → 4.0.0-rc.109
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/AGENTS.md +395 -0
- package/CLAUDE.md +395 -0
- package/README.md +19 -23
- package/ai-docs/README.md +44 -0
- package/ai-docs/package.json +36 -0
- package/ai-docs/src/01_effect/01_basics/01_effect-gen.ts +30 -0
- package/ai-docs/src/01_effect/01_basics/02_effect-fn.ts +39 -0
- package/ai-docs/src/01_effect/01_basics/10_creating-effects.ts +74 -0
- package/ai-docs/src/01_effect/01_basics/index.md +5 -0
- package/ai-docs/src/01_effect/02_schema/10_schema-basics.ts +43 -0
- package/ai-docs/src/01_effect/02_schema/index.md +7 -0
- package/ai-docs/src/01_effect/03_services/01_service.ts +45 -0
- package/ai-docs/src/01_effect/03_services/10_reference.ts +10 -0
- package/ai-docs/src/01_effect/03_services/20_layer-composition.ts +70 -0
- package/ai-docs/src/01_effect/03_services/20_layer-unwrap.ts +66 -0
- package/ai-docs/src/01_effect/03_services/index.md +5 -0
- package/ai-docs/src/01_effect/04_errors/01_error-handling.ts +30 -0
- package/ai-docs/src/01_effect/04_errors/10_catch-tags.ts +24 -0
- package/ai-docs/src/01_effect/04_errors/20_reason-errors.ts +64 -0
- package/ai-docs/src/01_effect/04_errors/index.md +1 -0
- package/ai-docs/src/01_effect/05_resources/10_acquire-release.ts +105 -0
- package/ai-docs/src/01_effect/05_resources/20_layer-side-effects.ts +31 -0
- package/ai-docs/src/01_effect/05_resources/30_layer-map.ts +86 -0
- package/ai-docs/src/01_effect/05_resources/index.md +3 -0
- package/ai-docs/src/01_effect/06_running/10_run-main.ts +30 -0
- package/ai-docs/src/01_effect/06_running/20_layer-launch.ts +27 -0
- package/ai-docs/src/01_effect/06_running/index.md +1 -0
- package/ai-docs/src/01_effect/07_pubsub/10_pubsub.ts +56 -0
- package/ai-docs/src/01_effect/07_pubsub/index.md +3 -0
- package/ai-docs/src/03_stream/10_creating-streams.ts +103 -0
- package/ai-docs/src/03_stream/20_consuming-streams.ts +137 -0
- package/ai-docs/src/03_stream/30_encoding.ts +165 -0
- package/ai-docs/src/03_stream/index.md +4 -0
- package/ai-docs/src/04_integration/10_managed-runtime.ts +129 -0
- package/ai-docs/src/04_integration/index.md +5 -0
- package/ai-docs/src/05_batching/10_request-resolver.ts +89 -0
- package/ai-docs/src/05_batching/index.md +3 -0
- package/ai-docs/src/06_schedule/10_schedules.ts +110 -0
- package/ai-docs/src/06_schedule/index.md +3 -0
- package/ai-docs/src/07_datetime/10_creating-and-formatting.ts +30 -0
- package/ai-docs/src/07_datetime/20_time-zones.ts +44 -0
- package/ai-docs/src/07_datetime/index.md +5 -0
- package/ai-docs/src/08_observability/10_logging.ts +66 -0
- package/ai-docs/src/08_observability/20_otlp-tracing.ts +95 -0
- package/ai-docs/src/08_observability/index.md +7 -0
- package/ai-docs/src/09_testing/10_effect-tests.ts +55 -0
- package/ai-docs/src/09_testing/20_layer-tests.ts +138 -0
- package/ai-docs/src/09_testing/index.md +1 -0
- package/ai-docs/src/10_predicate/01_basics.ts +14 -0
- package/ai-docs/src/10_predicate/index.md +9 -0
- package/ai-docs/src/40_sql/10_basics.ts +175 -0
- package/ai-docs/src/40_sql/index.md +6 -0
- package/ai-docs/src/50_http-client/10_basics.ts +102 -0
- package/ai-docs/src/50_http-client/index.md +3 -0
- package/ai-docs/src/51_http-server/10_basics.ts +118 -0
- package/ai-docs/src/51_http-server/20_testing.ts +100 -0
- package/ai-docs/src/51_http-server/fixtures/api/Api.ts +14 -0
- package/ai-docs/src/51_http-server/fixtures/api/Authorization.ts +36 -0
- package/ai-docs/src/51_http-server/fixtures/api/System.ts +10 -0
- package/ai-docs/src/51_http-server/fixtures/api/Users.ts +107 -0
- package/ai-docs/src/51_http-server/fixtures/domain/User.ts +21 -0
- package/ai-docs/src/51_http-server/fixtures/domain/UserErrors.ts +22 -0
- package/ai-docs/src/51_http-server/fixtures/server/Authorization.ts +37 -0
- package/ai-docs/src/51_http-server/fixtures/server/Users/http.ts +80 -0
- package/ai-docs/src/51_http-server/fixtures/server/Users.ts +183 -0
- package/ai-docs/src/51_http-server/index.md +3 -0
- package/ai-docs/src/60_child-process/10_working-with-child-processes.ts +117 -0
- package/ai-docs/src/60_child-process/index.md +3 -0
- package/ai-docs/src/70_cli/10_basics.ts +160 -0
- package/ai-docs/src/70_cli/index.md +5 -0
- package/ai-docs/src/71_ai/10_language-model.ts +156 -0
- package/ai-docs/src/71_ai/20_tools.ts +226 -0
- package/ai-docs/src/71_ai/30_chat.ts +158 -0
- package/ai-docs/src/71_ai/fixtures/domain/LaunchPlan.ts +9 -0
- package/ai-docs/src/71_ai/index.md +5 -0
- package/ai-docs/src/80_cluster/10_entities.ts +97 -0
- package/ai-docs/src/80_cluster/index.md +4 -0
- package/ai-docs/src/index.md +10 -0
- package/ai-docs/tsconfig.json +24 -0
- package/dist/Array.d.ts +971 -1037
- package/dist/Array.d.ts.map +1 -1
- package/dist/Array.js +462 -412
- package/dist/Array.js.map +1 -1
- package/dist/BigDecimal.d.ts +433 -756
- package/dist/BigDecimal.d.ts.map +1 -1
- package/dist/BigDecimal.js +200 -325
- package/dist/BigDecimal.js.map +1 -1
- package/dist/BigInt.d.ts +207 -267
- package/dist/BigInt.d.ts.map +1 -1
- package/dist/BigInt.js +107 -135
- package/dist/BigInt.js.map +1 -1
- package/dist/Boolean.d.ts +146 -188
- package/dist/Boolean.d.ts.map +1 -1
- package/dist/Boolean.js +64 -84
- package/dist/Boolean.js.map +1 -1
- package/dist/Brand.d.ts +3 -3
- package/dist/Brand.d.ts.map +1 -1
- package/dist/Brand.js +4 -3
- package/dist/Brand.js.map +1 -1
- package/dist/Cache.d.ts +409 -256
- package/dist/Cache.d.ts.map +1 -1
- package/dist/Cache.js +213 -134
- package/dist/Cache.js.map +1 -1
- package/dist/Cause.d.ts +167 -277
- package/dist/Cause.d.ts.map +1 -1
- package/dist/Cause.js +122 -176
- package/dist/Cause.js.map +1 -1
- package/dist/Channel.d.ts +756 -769
- package/dist/Channel.d.ts.map +1 -1
- package/dist/Channel.js +588 -449
- package/dist/Channel.js.map +1 -1
- package/dist/ChannelSchema.d.ts +1 -1
- package/dist/ChannelSchema.d.ts.map +1 -1
- package/dist/ChannelSchema.js.map +1 -1
- package/dist/Chunk.d.ts +834 -1173
- package/dist/Chunk.d.ts.map +1 -1
- package/dist/Chunk.js +326 -439
- package/dist/Chunk.js.map +1 -1
- package/dist/Clock.d.ts +180 -49
- package/dist/Clock.d.ts.map +1 -1
- package/dist/Clock.js +96 -31
- package/dist/Clock.js.map +1 -1
- package/dist/Combiner.d.ts +20 -33
- package/dist/Combiner.d.ts.map +1 -1
- package/dist/Combiner.js +18 -30
- package/dist/Combiner.js.map +1 -1
- package/dist/Config.d.ts +226 -174
- package/dist/Config.d.ts.map +1 -1
- package/dist/Config.js +361 -267
- package/dist/Config.js.map +1 -1
- package/dist/ConfigProvider.d.ts +229 -71
- package/dist/ConfigProvider.d.ts.map +1 -1
- package/dist/ConfigProvider.js +164 -95
- package/dist/ConfigProvider.js.map +1 -1
- package/dist/Console.d.ts +233 -33
- package/dist/Console.d.ts.map +1 -1
- package/dist/Console.js +232 -32
- package/dist/Console.js.map +1 -1
- package/dist/Context.d.ts +160 -277
- package/dist/Context.d.ts.map +1 -1
- package/dist/Context.js +179 -236
- package/dist/Context.js.map +1 -1
- package/dist/Cron.d.ts +144 -176
- package/dist/Cron.d.ts.map +1 -1
- package/dist/Cron.js +227 -162
- package/dist/Cron.js.map +1 -1
- package/dist/Crypto.d.ts +13 -15
- package/dist/Crypto.d.ts.map +1 -1
- package/dist/Crypto.js +24 -39
- package/dist/Crypto.js.map +1 -1
- package/dist/Data.d.ts +60 -80
- package/dist/Data.d.ts.map +1 -1
- package/dist/Data.js +18 -24
- package/dist/Data.js.map +1 -1
- package/dist/DateTime.d.ts +562 -660
- package/dist/DateTime.d.ts.map +1 -1
- package/dist/DateTime.js +307 -362
- package/dist/DateTime.js.map +1 -1
- package/dist/Deferred.d.ts +253 -256
- package/dist/Deferred.d.ts.map +1 -1
- package/dist/Deferred.js +110 -98
- package/dist/Deferred.js.map +1 -1
- package/dist/Duration.d.ts +216 -308
- package/dist/Duration.d.ts.map +1 -1
- package/dist/Duration.js +157 -188
- package/dist/Duration.js.map +1 -1
- package/dist/Effect.d.ts +3157 -3360
- package/dist/Effect.d.ts.map +1 -1
- package/dist/Effect.js +1457 -1574
- package/dist/Effect.js.map +1 -1
- package/dist/Effectable.js.map +1 -1
- package/dist/Encoding.d.ts +22 -40
- package/dist/Encoding.d.ts.map +1 -1
- package/dist/Encoding.js +22 -40
- package/dist/Encoding.js.map +1 -1
- package/dist/Equal.d.ts +33 -37
- package/dist/Equal.d.ts.map +1 -1
- package/dist/Equal.js +39 -23
- package/dist/Equal.js.map +1 -1
- package/dist/Equivalence.d.ts +103 -105
- package/dist/Equivalence.d.ts.map +1 -1
- package/dist/Equivalence.js +77 -79
- package/dist/Equivalence.js.map +1 -1
- package/dist/ErrorReporter.d.ts +52 -28
- package/dist/ErrorReporter.d.ts.map +1 -1
- package/dist/ErrorReporter.js +51 -27
- package/dist/ErrorReporter.js.map +1 -1
- package/dist/ExecutionPlan.d.ts +86 -55
- package/dist/ExecutionPlan.d.ts.map +1 -1
- package/dist/ExecutionPlan.js +8 -29
- package/dist/ExecutionPlan.js.map +1 -1
- package/dist/Exit.d.ts +116 -192
- package/dist/Exit.d.ts.map +1 -1
- package/dist/Exit.js +82 -130
- package/dist/Exit.js.map +1 -1
- package/dist/Fiber.d.ts +83 -147
- package/dist/Fiber.d.ts.map +1 -1
- package/dist/Fiber.js +48 -87
- package/dist/Fiber.js.map +1 -1
- package/dist/FiberHandle.d.ts +152 -105
- package/dist/FiberHandle.d.ts.map +1 -1
- package/dist/FiberHandle.js +109 -75
- package/dist/FiberHandle.js.map +1 -1
- package/dist/FiberMap.d.ts +213 -168
- package/dist/FiberMap.d.ts.map +1 -1
- package/dist/FiberMap.js +114 -89
- package/dist/FiberMap.js.map +1 -1
- package/dist/FiberSet.d.ts +123 -81
- package/dist/FiberSet.d.ts.map +1 -1
- package/dist/FiberSet.js +86 -60
- package/dist/FiberSet.js.map +1 -1
- package/dist/FileSystem.d.ts +154 -265
- package/dist/FileSystem.d.ts.map +1 -1
- package/dist/FileSystem.js +42 -147
- package/dist/FileSystem.js.map +1 -1
- package/dist/Filter.d.ts +61 -33
- package/dist/Filter.d.ts.map +1 -1
- package/dist/Filter.js +26 -15
- package/dist/Filter.js.map +1 -1
- package/dist/Formatter.d.ts +24 -32
- package/dist/Formatter.d.ts.map +1 -1
- package/dist/Formatter.js +55 -60
- package/dist/Formatter.js.map +1 -1
- package/dist/Function.d.ts +106 -148
- package/dist/Function.d.ts.map +1 -1
- package/dist/Function.js +81 -62
- package/dist/Function.js.map +1 -1
- package/dist/Graph.d.ts +360 -714
- package/dist/Graph.d.ts.map +1 -1
- package/dist/Graph.js +168 -297
- package/dist/Graph.js.map +1 -1
- package/dist/HKT.d.ts +12 -6
- package/dist/HKT.d.ts.map +1 -1
- package/dist/Hash.d.ts +47 -83
- package/dist/Hash.d.ts.map +1 -1
- package/dist/Hash.js +46 -68
- package/dist/Hash.js.map +1 -1
- package/dist/HashMap.d.ts +319 -411
- package/dist/HashMap.d.ts.map +1 -1
- package/dist/HashMap.js +122 -166
- package/dist/HashMap.js.map +1 -1
- package/dist/HashRing.d.ts.map +1 -1
- package/dist/HashRing.js +1 -0
- package/dist/HashRing.js.map +1 -1
- package/dist/HashSet.d.ts +177 -284
- package/dist/HashSet.d.ts.map +1 -1
- package/dist/HashSet.js +68 -109
- package/dist/HashSet.js.map +1 -1
- package/dist/Inspectable.d.ts +19 -18
- package/dist/Inspectable.d.ts.map +1 -1
- package/dist/Inspectable.js +20 -16
- package/dist/Inspectable.js.map +1 -1
- package/dist/Iterable.d.ts +620 -786
- package/dist/Iterable.d.ts.map +1 -1
- package/dist/Iterable.js +241 -317
- package/dist/Iterable.js.map +1 -1
- package/dist/JsonPatch.d.ts +11 -13
- package/dist/JsonPatch.d.ts.map +1 -1
- package/dist/JsonPatch.js +46 -103
- package/dist/JsonPatch.js.map +1 -1
- package/dist/JsonPointer.d.ts +8 -8
- package/dist/JsonPointer.js +8 -8
- package/dist/JsonPointer.js.map +1 -1
- package/dist/JsonSchema.d.ts +98 -44
- package/dist/JsonSchema.d.ts.map +1 -1
- package/dist/JsonSchema.js +319 -241
- package/dist/JsonSchema.js.map +1 -1
- package/dist/Latch.d.ts +23 -35
- package/dist/Latch.d.ts.map +1 -1
- package/dist/Latch.js +16 -28
- package/dist/Latch.js.map +1 -1
- package/dist/Layer.d.ts +362 -263
- package/dist/Layer.d.ts.map +1 -1
- package/dist/Layer.js +203 -181
- package/dist/Layer.js.map +1 -1
- package/dist/LayerMap.d.ts +42 -29
- package/dist/LayerMap.d.ts.map +1 -1
- package/dist/LayerMap.js +31 -21
- package/dist/LayerMap.js.map +1 -1
- package/dist/LayerRef.d.ts +6 -2
- package/dist/LayerRef.d.ts.map +1 -1
- package/dist/LayerRef.js +6 -2
- package/dist/LayerRef.js.map +1 -1
- package/dist/LogLevel.d.ts +114 -214
- package/dist/LogLevel.d.ts.map +1 -1
- package/dist/LogLevel.js +41 -76
- package/dist/LogLevel.js.map +1 -1
- package/dist/Logger.d.ts +219 -468
- package/dist/Logger.d.ts.map +1 -1
- package/dist/Logger.js +209 -454
- package/dist/Logger.js.map +1 -1
- package/dist/ManagedRuntime.d.ts +16 -5
- package/dist/ManagedRuntime.d.ts.map +1 -1
- package/dist/ManagedRuntime.js +10 -5
- package/dist/ManagedRuntime.js.map +1 -1
- package/dist/Match.d.ts +217 -252
- package/dist/Match.d.ts.map +1 -1
- package/dist/Match.js +150 -183
- package/dist/Match.js.map +1 -1
- package/dist/Metric.d.ts +442 -993
- package/dist/Metric.d.ts.map +1 -1
- package/dist/Metric.js +202 -645
- package/dist/Metric.js.map +1 -1
- package/dist/MutableHashMap.d.ts +144 -173
- package/dist/MutableHashMap.d.ts.map +1 -1
- package/dist/MutableHashMap.js +68 -79
- package/dist/MutableHashMap.js.map +1 -1
- package/dist/MutableHashSet.d.ts +84 -89
- package/dist/MutableHashSet.d.ts.map +1 -1
- package/dist/MutableHashSet.js +44 -47
- package/dist/MutableHashSet.js.map +1 -1
- package/dist/MutableList.d.ts +71 -370
- package/dist/MutableList.d.ts.map +1 -1
- package/dist/MutableList.js +63 -284
- package/dist/MutableList.js.map +1 -1
- package/dist/MutableRef.d.ts +420 -243
- package/dist/MutableRef.d.ts.map +1 -1
- package/dist/MutableRef.js +209 -120
- package/dist/MutableRef.js.map +1 -1
- package/dist/Newtype.d.ts +21 -14
- package/dist/Newtype.d.ts.map +1 -1
- package/dist/Newtype.js +15 -13
- package/dist/Newtype.js.map +1 -1
- package/dist/NonEmptyIterable.d.ts +7 -137
- package/dist/NonEmptyIterable.d.ts.map +1 -1
- package/dist/NonEmptyIterable.js +5 -93
- package/dist/NonEmptyIterable.js.map +1 -1
- package/dist/Number.d.ts +196 -233
- package/dist/Number.d.ts.map +1 -1
- package/dist/Number.js +90 -109
- package/dist/Number.js.map +1 -1
- package/dist/Optic.d.ts +132 -210
- package/dist/Optic.d.ts.map +1 -1
- package/dist/Optic.js +221 -324
- package/dist/Optic.js.map +1 -1
- package/dist/Option.d.ts +447 -812
- package/dist/Option.d.ts.map +1 -1
- package/dist/Option.js +213 -393
- package/dist/Option.js.map +1 -1
- package/dist/Order.d.ts +109 -109
- package/dist/Order.js +91 -91
- package/dist/Order.js.map +1 -1
- package/dist/Ordering.d.ts +20 -23
- package/dist/Ordering.d.ts.map +1 -1
- package/dist/Ordering.js +8 -9
- package/dist/Ordering.js.map +1 -1
- package/dist/PartitionedSemaphore.d.ts.map +1 -1
- package/dist/PartitionedSemaphore.js +1 -4
- package/dist/PartitionedSemaphore.js.map +1 -1
- package/dist/Path.d.ts +38 -41
- package/dist/Path.d.ts.map +1 -1
- package/dist/Path.js +3 -4
- package/dist/Path.js.map +1 -1
- package/dist/Pipeable.d.ts +6 -5
- package/dist/Pipeable.d.ts.map +1 -1
- package/dist/Pipeable.js +2 -2
- package/dist/Pipeable.js.map +1 -1
- package/dist/PlatformError.d.ts +4 -4
- package/dist/PlatformError.js +3 -3
- package/dist/PlatformError.js.map +1 -1
- package/dist/Pool.d.ts +4 -2
- package/dist/Pool.d.ts.map +1 -1
- package/dist/Pool.js +4 -2
- package/dist/Pool.js.map +1 -1
- package/dist/Predicate.d.ts +200 -181
- package/dist/Predicate.d.ts.map +1 -1
- package/dist/Predicate.js +100 -108
- package/dist/Predicate.js.map +1 -1
- package/dist/PrimaryKey.d.ts +7 -7
- package/dist/PrimaryKey.js +5 -5
- package/dist/PrimaryKey.js.map +1 -1
- package/dist/PubSub.d.ts +425 -494
- package/dist/PubSub.d.ts.map +1 -1
- package/dist/PubSub.js +373 -362
- package/dist/PubSub.js.map +1 -1
- package/dist/Pull.d.ts +24 -18
- package/dist/Pull.d.ts.map +1 -1
- package/dist/Pull.js +11 -9
- package/dist/Pull.js.map +1 -1
- package/dist/Queue.d.ts +200 -159
- package/dist/Queue.d.ts.map +1 -1
- package/dist/Queue.js +166 -138
- package/dist/Queue.js.map +1 -1
- package/dist/Random.d.ts +49 -74
- package/dist/Random.d.ts.map +1 -1
- package/dist/Random.js +35 -54
- package/dist/Random.js.map +1 -1
- package/dist/RcMap.d.ts +121 -63
- package/dist/RcMap.d.ts.map +1 -1
- package/dist/RcMap.js +42 -21
- package/dist/RcMap.js.map +1 -1
- package/dist/RcRef.d.ts +24 -13
- package/dist/RcRef.d.ts.map +1 -1
- package/dist/RcRef.js +15 -9
- package/dist/RcRef.js.map +1 -1
- package/dist/Record.d.ts +361 -466
- package/dist/Record.d.ts.map +1 -1
- package/dist/Record.js +163 -216
- package/dist/Record.js.map +1 -1
- package/dist/Redactable.d.ts +6 -2
- package/dist/Redactable.d.ts.map +1 -1
- package/dist/Redactable.js +7 -2
- package/dist/Redactable.js.map +1 -1
- package/dist/Redacted.d.ts +25 -25
- package/dist/Redacted.d.ts.map +1 -1
- package/dist/Redacted.js +19 -20
- package/dist/Redacted.js.map +1 -1
- package/dist/Reducer.d.ts +8 -15
- package/dist/Reducer.d.ts.map +1 -1
- package/dist/Reducer.js +6 -12
- package/dist/Reducer.js.map +1 -1
- package/dist/Ref.d.ts +95 -165
- package/dist/Ref.d.ts.map +1 -1
- package/dist/Ref.js +75 -122
- package/dist/Ref.js.map +1 -1
- package/dist/References.d.ts +102 -213
- package/dist/References.d.ts.map +1 -1
- package/dist/References.js +102 -213
- package/dist/References.js.map +1 -1
- package/dist/RegExp.d.ts +10 -14
- package/dist/RegExp.d.ts.map +1 -1
- package/dist/RegExp.js +10 -14
- package/dist/RegExp.js.map +1 -1
- package/dist/Request.d.ts +31 -21
- package/dist/Request.d.ts.map +1 -1
- package/dist/Request.js +25 -19
- package/dist/Request.js.map +1 -1
- package/dist/RequestResolver.d.ts +201 -90
- package/dist/RequestResolver.d.ts.map +1 -1
- package/dist/RequestResolver.js +87 -41
- package/dist/RequestResolver.js.map +1 -1
- package/dist/Resource.js.map +1 -1
- package/dist/Result.d.ts +302 -470
- package/dist/Result.d.ts.map +1 -1
- package/dist/Result.js +135 -218
- package/dist/Result.js.map +1 -1
- package/dist/Runtime.d.ts +50 -75
- package/dist/Runtime.d.ts.map +1 -1
- package/dist/Runtime.js +39 -60
- package/dist/Runtime.js.map +1 -1
- package/dist/Schedule.d.ts +292 -1638
- package/dist/Schedule.d.ts.map +1 -1
- package/dist/Schedule.js +164 -805
- package/dist/Schedule.js.map +1 -1
- package/dist/Scheduler.d.ts +5 -5
- package/dist/Scheduler.d.ts.map +1 -1
- package/dist/Scheduler.js +18 -6
- package/dist/Scheduler.js.map +1 -1
- package/dist/Schema.d.ts +2056 -1269
- package/dist/Schema.d.ts.map +1 -1
- package/dist/Schema.js +2868 -1135
- package/dist/Schema.js.map +1 -1
- package/dist/SchemaAST.d.ts +64 -72
- package/dist/SchemaAST.d.ts.map +1 -1
- package/dist/SchemaAST.js +698 -468
- package/dist/SchemaAST.js.map +1 -1
- package/dist/SchemaGetter.d.ts +236 -188
- package/dist/SchemaGetter.d.ts.map +1 -1
- package/dist/SchemaGetter.js +281 -234
- package/dist/SchemaGetter.js.map +1 -1
- package/dist/SchemaIssue.d.ts +219 -190
- package/dist/SchemaIssue.d.ts.map +1 -1
- package/dist/SchemaIssue.js +303 -309
- package/dist/SchemaIssue.js.map +1 -1
- package/dist/SchemaParser.d.ts +32 -2
- package/dist/SchemaParser.d.ts.map +1 -1
- package/dist/SchemaParser.js +170 -118
- package/dist/SchemaParser.js.map +1 -1
- package/dist/SchemaRepresentation.d.ts +433 -1511
- package/dist/SchemaRepresentation.d.ts.map +1 -1
- package/dist/SchemaRepresentation.js +301 -2854
- package/dist/SchemaRepresentation.js.map +1 -1
- package/dist/SchemaTransformation.d.ts +117 -77
- package/dist/SchemaTransformation.d.ts.map +1 -1
- package/dist/SchemaTransformation.js +139 -104
- package/dist/SchemaTransformation.js.map +1 -1
- package/dist/Scope.d.ts +123 -151
- package/dist/Scope.d.ts.map +1 -1
- package/dist/Scope.js +72 -92
- package/dist/Scope.js.map +1 -1
- package/dist/ScopedCache.js +1 -1
- package/dist/ScopedCache.js.map +1 -1
- package/dist/ScopedRef.d.ts +3 -3
- package/dist/ScopedRef.d.ts.map +1 -1
- package/dist/ScopedRef.js +2 -2
- package/dist/ScopedRef.js.map +1 -1
- package/dist/Semaphore.d.ts +101 -13
- package/dist/Semaphore.d.ts.map +1 -1
- package/dist/Semaphore.js +78 -39
- package/dist/Semaphore.js.map +1 -1
- package/dist/Sink.d.ts +118 -108
- package/dist/Sink.d.ts.map +1 -1
- package/dist/Sink.js +107 -100
- package/dist/Sink.js.map +1 -1
- package/dist/Stdio.d.ts +18 -5
- package/dist/Stdio.d.ts.map +1 -1
- package/dist/Stdio.js +6 -3
- package/dist/Stdio.js.map +1 -1
- package/dist/Stream.d.ts +2467 -2962
- package/dist/Stream.d.ts.map +1 -1
- package/dist/Stream.js +1154 -1413
- package/dist/Stream.js.map +1 -1
- package/dist/String.d.ts +262 -308
- package/dist/String.d.ts.map +1 -1
- package/dist/String.js +184 -215
- package/dist/String.js.map +1 -1
- package/dist/Struct.d.ts +109 -114
- package/dist/Struct.d.ts.map +1 -1
- package/dist/Struct.js +46 -54
- package/dist/Struct.js.map +1 -1
- package/dist/SubscriptionRef.d.ts +282 -250
- package/dist/SubscriptionRef.d.ts.map +1 -1
- package/dist/SubscriptionRef.js +104 -92
- package/dist/SubscriptionRef.js.map +1 -1
- package/dist/Symbol.d.ts +3 -3
- package/dist/Symbol.js +3 -3
- package/dist/Symbol.js.map +1 -1
- package/dist/SynchronizedRef.js +1 -1
- package/dist/SynchronizedRef.js.map +1 -1
- package/dist/Take.js.map +1 -1
- package/dist/Terminal.d.ts +2 -2
- package/dist/Terminal.js +2 -2
- package/dist/Terminal.js.map +1 -1
- package/dist/Tracer.d.ts +100 -54
- package/dist/Tracer.d.ts.map +1 -1
- package/dist/Tracer.js +41 -24
- package/dist/Tracer.js.map +1 -1
- package/dist/Trie.d.ts +287 -679
- package/dist/Trie.d.ts.map +1 -1
- package/dist/Trie.js +109 -251
- package/dist/Trie.js.map +1 -1
- package/dist/Tuple.d.ts +98 -131
- package/dist/Tuple.d.ts.map +1 -1
- package/dist/Tuple.js +42 -57
- package/dist/Tuple.js.map +1 -1
- package/dist/TxChunk.d.ts +201 -121
- package/dist/TxChunk.d.ts.map +1 -1
- package/dist/TxChunk.js +85 -56
- package/dist/TxChunk.js.map +1 -1
- package/dist/TxDeferred.d.ts +62 -46
- package/dist/TxDeferred.d.ts.map +1 -1
- package/dist/TxDeferred.js +30 -22
- package/dist/TxDeferred.js.map +1 -1
- package/dist/TxHashMap.d.ts +631 -779
- package/dist/TxHashMap.d.ts.map +1 -1
- package/dist/TxHashMap.js +268 -330
- package/dist/TxHashMap.js.map +1 -1
- package/dist/TxHashSet.d.ts +297 -236
- package/dist/TxHashSet.d.ts.map +1 -1
- package/dist/TxHashSet.js +130 -100
- package/dist/TxHashSet.js.map +1 -1
- package/dist/TxPriorityQueue.d.ts +126 -95
- package/dist/TxPriorityQueue.d.ts.map +1 -1
- package/dist/TxPriorityQueue.js +74 -56
- package/dist/TxPriorityQueue.js.map +1 -1
- package/dist/TxPubSub.d.ts +101 -88
- package/dist/TxPubSub.d.ts.map +1 -1
- package/dist/TxPubSub.js +87 -66
- package/dist/TxPubSub.js.map +1 -1
- package/dist/TxQueue.d.ts +200 -180
- package/dist/TxQueue.d.ts.map +1 -1
- package/dist/TxQueue.js +161 -137
- package/dist/TxQueue.js.map +1 -1
- package/dist/TxReentrantLock.d.ts +89 -114
- package/dist/TxReentrantLock.d.ts.map +1 -1
- package/dist/TxReentrantLock.js +75 -53
- package/dist/TxReentrantLock.js.map +1 -1
- package/dist/TxRef.d.ts +51 -32
- package/dist/TxRef.d.ts.map +1 -1
- package/dist/TxRef.js +23 -15
- package/dist/TxRef.js.map +1 -1
- package/dist/TxSemaphore.d.ts +129 -95
- package/dist/TxSemaphore.d.ts.map +1 -1
- package/dist/TxSemaphore.js +85 -70
- package/dist/TxSemaphore.js.map +1 -1
- package/dist/TxSubscriptionRef.d.ts +97 -70
- package/dist/TxSubscriptionRef.d.ts.map +1 -1
- package/dist/TxSubscriptionRef.js +44 -34
- package/dist/TxSubscriptionRef.js.map +1 -1
- package/dist/Types.d.ts +127 -70
- package/dist/Types.d.ts.map +1 -1
- package/dist/UndefinedOr.js.map +1 -1
- package/dist/Unify.d.ts +45 -65
- package/dist/Unify.d.ts.map +1 -1
- package/dist/Unify.js +6 -9
- package/dist/Unify.js.map +1 -1
- package/dist/Utils.d.ts +23 -16
- package/dist/Utils.d.ts.map +1 -1
- package/dist/Utils.js +3 -7
- package/dist/Utils.js.map +1 -1
- package/dist/index.d.ts +0 -8
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +0 -8
- package/dist/index.js.map +1 -1
- package/dist/internal/array.js.map +1 -1
- package/dist/internal/core.js +4 -3
- package/dist/internal/core.js.map +1 -1
- package/dist/internal/dateTime.js +5 -1
- package/dist/internal/dateTime.js.map +1 -1
- package/dist/internal/doNotation.js.map +1 -1
- package/dist/internal/effect.js +254 -114
- package/dist/internal/effect.js.map +1 -1
- package/dist/internal/equal.js.map +1 -1
- package/dist/internal/errors.js.map +1 -1
- package/dist/internal/executionPlan.js +52 -3
- package/dist/internal/executionPlan.js.map +1 -1
- package/dist/internal/hashMap.js +12 -8
- package/dist/internal/hashMap.js.map +1 -1
- package/dist/internal/hashSet.js.map +1 -1
- package/dist/internal/layer.js.map +1 -1
- package/dist/internal/matcher.js +2 -2
- package/dist/internal/matcher.js.map +1 -1
- package/dist/internal/metric.js.map +1 -1
- package/dist/internal/option.js.map +1 -1
- package/dist/internal/persistence.d.ts +2 -0
- package/dist/internal/persistence.d.ts.map +1 -0
- package/dist/internal/persistence.js +3 -0
- package/dist/internal/persistence.js.map +1 -0
- package/dist/internal/random.js.map +1 -1
- package/dist/internal/rcRef.js +18 -13
- package/dist/internal/rcRef.js.map +1 -1
- package/dist/internal/record.d.ts +0 -3
- package/dist/internal/record.d.ts.map +1 -1
- package/dist/internal/record.js +10 -5
- package/dist/internal/record.js.map +1 -1
- package/dist/internal/redacted.js.map +1 -1
- package/dist/internal/references.js +3 -4
- package/dist/internal/references.js.map +1 -1
- package/dist/internal/request.js.map +1 -1
- package/dist/internal/result.js.map +1 -1
- package/dist/internal/schedule.js.map +1 -1
- package/dist/internal/schema/annotations.js +15 -1
- package/dist/internal/schema/annotations.js.map +1 -1
- package/dist/internal/schema/cause.js.map +1 -1
- package/dist/internal/schema/fromJsonSchemaDocument.d.ts +2 -0
- package/dist/internal/schema/fromJsonSchemaDocument.d.ts.map +1 -0
- package/dist/internal/schema/fromJsonSchemaDocument.js +761 -0
- package/dist/internal/schema/fromJsonSchemaDocument.js.map +1 -0
- package/dist/internal/schema/fromRepresentation.d.ts +2 -0
- package/dist/internal/schema/fromRepresentation.d.ts.map +1 -0
- package/dist/internal/schema/fromRepresentation.js +245 -0
- package/dist/internal/schema/fromRepresentation.js.map +1 -0
- package/dist/internal/schema/parser.d.ts +14 -0
- package/dist/internal/schema/parser.d.ts.map +1 -0
- package/dist/internal/schema/parser.js +13 -0
- package/dist/internal/schema/parser.js.map +1 -0
- package/dist/internal/schema/schema.js +29 -49
- package/dist/internal/schema/schema.js.map +1 -1
- package/dist/internal/schema/toArbitrary.d.ts +2 -0
- package/dist/internal/schema/toArbitrary.d.ts.map +1 -0
- package/dist/internal/schema/{arbitrary.js → toArbitrary.js} +8 -83
- package/dist/internal/schema/toArbitrary.js.map +1 -0
- package/dist/internal/schema/toCodeDocument.d.ts +2 -0
- package/dist/internal/schema/toCodeDocument.d.ts.map +1 -0
- package/dist/internal/schema/toCodeDocument.js +438 -0
- package/dist/internal/schema/toCodeDocument.js.map +1 -0
- package/dist/internal/schema/toEquivalence.d.ts +2 -0
- package/dist/internal/schema/toEquivalence.d.ts.map +1 -0
- package/dist/internal/schema/{equivalence.js → toEquivalence.js} +15 -13
- package/dist/internal/schema/toEquivalence.js.map +1 -0
- package/dist/internal/schema/toJsonSchemaDocument.d.ts +2 -0
- package/dist/internal/schema/toJsonSchemaDocument.d.ts.map +1 -0
- package/dist/internal/schema/toJsonSchemaDocument.js +522 -0
- package/dist/internal/schema/toJsonSchemaDocument.js.map +1 -0
- package/dist/internal/schema/toRepresentation.d.ts +2 -0
- package/dist/internal/schema/toRepresentation.d.ts.map +1 -0
- package/dist/internal/schema/toRepresentation.js +351 -0
- package/dist/internal/schema/toRepresentation.js.map +1 -0
- package/dist/internal/stackTraceLimit.js +3 -6
- package/dist/internal/stackTraceLimit.js.map +1 -1
- package/dist/internal/stream.js.map +1 -1
- package/dist/internal/tracer.js.map +1 -1
- package/dist/internal/trie.js +24 -10
- package/dist/internal/trie.js.map +1 -1
- package/dist/internal/uuid.d.ts +3 -0
- package/dist/internal/uuid.d.ts.map +1 -0
- package/dist/internal/uuid.js +30 -0
- package/dist/internal/uuid.js.map +1 -0
- package/dist/testing/FastCheck.d.ts +8 -7
- package/dist/testing/FastCheck.d.ts.map +1 -1
- package/dist/testing/FastCheck.js +8 -7
- package/dist/testing/FastCheck.js.map +1 -1
- package/dist/testing/TestClock.d.ts +58 -29
- package/dist/testing/TestClock.d.ts.map +1 -1
- package/dist/testing/TestClock.js +79 -24
- package/dist/testing/TestClock.js.map +1 -1
- package/dist/testing/TestConsole.d.ts +32 -31
- package/dist/testing/TestConsole.d.ts.map +1 -1
- package/dist/testing/TestConsole.js +24 -22
- package/dist/testing/TestConsole.js.map +1 -1
- package/dist/testing/TestSchema.d.ts +31 -31
- package/dist/testing/TestSchema.d.ts.map +1 -1
- package/dist/testing/TestSchema.js +35 -34
- package/dist/testing/TestSchema.js.map +1 -1
- package/dist/testing/index.js.map +1 -1
- package/dist/unstable/ai/AiError.d.ts +121 -144
- package/dist/unstable/ai/AiError.d.ts.map +1 -1
- package/dist/unstable/ai/AiError.js +118 -140
- package/dist/unstable/ai/AiError.js.map +1 -1
- package/dist/unstable/ai/AnthropicStructuredOutput.d.ts +22 -7
- package/dist/unstable/ai/AnthropicStructuredOutput.d.ts.map +1 -1
- package/dist/unstable/ai/AnthropicStructuredOutput.js +87 -317
- package/dist/unstable/ai/AnthropicStructuredOutput.js.map +1 -1
- package/dist/unstable/ai/Chat.d.ts +132 -97
- package/dist/unstable/ai/Chat.d.ts.map +1 -1
- package/dist/unstable/ai/Chat.js +56 -52
- package/dist/unstable/ai/Chat.js.map +1 -1
- package/dist/unstable/ai/EmbeddingModel.d.ts +1 -1
- package/dist/unstable/ai/EmbeddingModel.js +1 -1
- package/dist/unstable/ai/EmbeddingModel.js.map +1 -1
- package/dist/unstable/ai/IdGenerator.d.ts +32 -28
- package/dist/unstable/ai/IdGenerator.d.ts.map +1 -1
- package/dist/unstable/ai/IdGenerator.js +26 -21
- package/dist/unstable/ai/IdGenerator.js.map +1 -1
- package/dist/unstable/ai/LanguageModel.d.ts +111 -68
- package/dist/unstable/ai/LanguageModel.d.ts.map +1 -1
- package/dist/unstable/ai/LanguageModel.js +127 -83
- package/dist/unstable/ai/LanguageModel.js.map +1 -1
- package/dist/unstable/ai/McpProtocol.d.ts +116 -0
- package/dist/unstable/ai/McpProtocol.d.ts.map +1 -0
- package/dist/unstable/ai/McpProtocol.js +32 -0
- package/dist/unstable/ai/McpProtocol.js.map +1 -0
- package/dist/unstable/ai/McpSchema.d.ts +378 -223
- package/dist/unstable/ai/McpSchema.d.ts.map +1 -1
- package/dist/unstable/ai/McpSchema.js +135 -87
- package/dist/unstable/ai/McpSchema.js.map +1 -1
- package/dist/unstable/ai/McpServer.d.ts +89 -100
- package/dist/unstable/ai/McpServer.d.ts.map +1 -1
- package/dist/unstable/ai/McpServer.js +1037 -361
- package/dist/unstable/ai/McpServer.js.map +1 -1
- package/dist/unstable/ai/Model.d.ts +8 -19
- package/dist/unstable/ai/Model.d.ts.map +1 -1
- package/dist/unstable/ai/Model.js +9 -20
- package/dist/unstable/ai/Model.js.map +1 -1
- package/dist/unstable/ai/OpenAiStructuredOutput.d.ts +33 -11
- package/dist/unstable/ai/OpenAiStructuredOutput.d.ts.map +1 -1
- package/dist/unstable/ai/OpenAiStructuredOutput.js +194 -378
- package/dist/unstable/ai/OpenAiStructuredOutput.js.map +1 -1
- package/dist/unstable/ai/Prompt.d.ts +131 -44
- package/dist/unstable/ai/Prompt.d.ts.map +1 -1
- package/dist/unstable/ai/Prompt.js +100 -36
- package/dist/unstable/ai/Prompt.js.map +1 -1
- package/dist/unstable/ai/Response.d.ts +47 -33
- package/dist/unstable/ai/Response.d.ts.map +1 -1
- package/dist/unstable/ai/Response.js +23 -18
- package/dist/unstable/ai/Response.js.map +1 -1
- package/dist/unstable/ai/ResponseIdTracker.js.map +1 -1
- package/dist/unstable/ai/Telemetry.d.ts +46 -13
- package/dist/unstable/ai/Telemetry.d.ts.map +1 -1
- package/dist/unstable/ai/Telemetry.js +18 -7
- package/dist/unstable/ai/Telemetry.js.map +1 -1
- package/dist/unstable/ai/Tokenizer.d.ts +14 -3
- package/dist/unstable/ai/Tokenizer.d.ts.map +1 -1
- package/dist/unstable/ai/Tokenizer.js +10 -2
- package/dist/unstable/ai/Tokenizer.js.map +1 -1
- package/dist/unstable/ai/Tool.d.ts +63 -44
- package/dist/unstable/ai/Tool.d.ts.map +1 -1
- package/dist/unstable/ai/Tool.js +59 -42
- package/dist/unstable/ai/Tool.js.map +1 -1
- package/dist/unstable/ai/Toolkit.d.ts +35 -9
- package/dist/unstable/ai/Toolkit.d.ts.map +1 -1
- package/dist/unstable/ai/Toolkit.js +32 -14
- package/dist/unstable/ai/Toolkit.js.map +1 -1
- package/dist/unstable/ai/index.d.ts +4 -0
- package/dist/unstable/ai/index.d.ts.map +1 -1
- package/dist/unstable/ai/index.js +4 -0
- package/dist/unstable/ai/index.js.map +1 -1
- package/dist/unstable/ai/internal/codec-transformer.js +15 -12
- package/dist/unstable/ai/internal/codec-transformer.js.map +1 -1
- package/dist/unstable/ai/internal/mcpCore.d.ts +7 -0
- package/dist/unstable/ai/internal/mcpCore.d.ts.map +1 -0
- package/dist/unstable/ai/internal/mcpCore.js +152 -0
- package/dist/unstable/ai/internal/mcpCore.js.map +1 -0
- package/dist/unstable/ai/internal/mcpProtocol/v2024_11_05.d.ts +2 -0
- package/dist/unstable/ai/internal/mcpProtocol/v2024_11_05.d.ts.map +1 -0
- package/dist/unstable/ai/internal/mcpProtocol/v2024_11_05.js +259 -0
- package/dist/unstable/ai/internal/mcpProtocol/v2024_11_05.js.map +1 -0
- package/dist/unstable/ai/internal/mcpProtocol/v2025_03_26.d.ts +2 -0
- package/dist/unstable/ai/internal/mcpProtocol/v2025_03_26.d.ts.map +1 -0
- package/dist/unstable/ai/internal/mcpProtocol/v2025_03_26.js +279 -0
- package/dist/unstable/ai/internal/mcpProtocol/v2025_03_26.js.map +1 -0
- package/dist/unstable/ai/internal/mcpProtocol/v2025_06_18.d.ts +2 -0
- package/dist/unstable/ai/internal/mcpProtocol/v2025_06_18.d.ts.map +1 -0
- package/dist/unstable/ai/internal/mcpProtocol/v2025_06_18.js +281 -0
- package/dist/unstable/ai/internal/mcpProtocol/v2025_06_18.js.map +1 -0
- package/dist/unstable/ai/internal/mcpProtocol.d.ts +2 -0
- package/dist/unstable/ai/internal/mcpProtocol.d.ts.map +1 -0
- package/dist/unstable/ai/internal/mcpProtocol.js +153 -0
- package/dist/unstable/ai/internal/mcpProtocol.js.map +1 -0
- package/dist/unstable/ai/internal/mcpProtocolRegistry.d.ts +2 -0
- package/dist/unstable/ai/internal/mcpProtocolRegistry.d.ts.map +1 -0
- package/dist/unstable/ai/internal/mcpProtocolRegistry.js +47 -0
- package/dist/unstable/ai/internal/mcpProtocolRegistry.js.map +1 -0
- package/dist/unstable/ai/internal/mcpSchema/v2024_11_05.d.ts +1185 -0
- package/dist/unstable/ai/internal/mcpSchema/v2024_11_05.d.ts.map +1 -0
- package/dist/unstable/ai/internal/mcpSchema/v2024_11_05.js +404 -0
- package/dist/unstable/ai/internal/mcpSchema/v2024_11_05.js.map +1 -0
- package/dist/unstable/ai/internal/mcpSchema/v2025_03_26.d.ts +825 -0
- package/dist/unstable/ai/internal/mcpSchema/v2025_03_26.d.ts.map +1 -0
- package/dist/unstable/ai/internal/mcpSchema/v2025_03_26.js +138 -0
- package/dist/unstable/ai/internal/mcpSchema/v2025_03_26.js.map +1 -0
- package/dist/unstable/ai/internal/mcpSchema/v2025_06_18.d.ts +1462 -0
- package/dist/unstable/ai/internal/mcpSchema/v2025_06_18.d.ts.map +1 -0
- package/dist/unstable/ai/internal/mcpSchema/v2025_06_18.js +309 -0
- package/dist/unstable/ai/internal/mcpSchema/v2025_06_18.js.map +1 -0
- package/dist/unstable/ai/internal/structured-output.d.ts +2 -0
- package/dist/unstable/ai/internal/structured-output.d.ts.map +1 -0
- package/dist/unstable/ai/internal/structured-output.js +315 -0
- package/dist/unstable/ai/internal/structured-output.js.map +1 -0
- package/dist/unstable/cli/Argument.d.ts +279 -72
- package/dist/unstable/cli/Argument.d.ts.map +1 -1
- package/dist/unstable/cli/Argument.js +113 -34
- package/dist/unstable/cli/Argument.js.map +1 -1
- package/dist/unstable/cli/CliConfig.js.map +1 -1
- package/dist/unstable/cli/CliError.d.ts +126 -76
- package/dist/unstable/cli/CliError.d.ts.map +1 -1
- package/dist/unstable/cli/CliError.js +136 -76
- package/dist/unstable/cli/CliError.js.map +1 -1
- package/dist/unstable/cli/CliOutput.d.ts +35 -54
- package/dist/unstable/cli/CliOutput.d.ts.map +1 -1
- package/dist/unstable/cli/CliOutput.js +26 -42
- package/dist/unstable/cli/CliOutput.js.map +1 -1
- package/dist/unstable/cli/Command.d.ts +736 -115
- package/dist/unstable/cli/Command.d.ts.map +1 -1
- package/dist/unstable/cli/Command.js +282 -56
- package/dist/unstable/cli/Command.js.map +1 -1
- package/dist/unstable/cli/Completions.js.map +1 -1
- package/dist/unstable/cli/Flag.d.ts +418 -138
- package/dist/unstable/cli/Flag.d.ts.map +1 -1
- package/dist/unstable/cli/Flag.js +197 -71
- package/dist/unstable/cli/Flag.js.map +1 -1
- package/dist/unstable/cli/GlobalFlag.d.ts +1 -1
- package/dist/unstable/cli/GlobalFlag.js.map +1 -1
- package/dist/unstable/cli/HelpDoc.d.ts +12 -4
- package/dist/unstable/cli/HelpDoc.d.ts.map +1 -1
- package/dist/unstable/cli/Param.d.ts +299 -83
- package/dist/unstable/cli/Param.d.ts.map +1 -1
- package/dist/unstable/cli/Param.js +146 -60
- package/dist/unstable/cli/Param.js.map +1 -1
- package/dist/unstable/cli/Primitive.d.ts +370 -149
- package/dist/unstable/cli/Primitive.d.ts.map +1 -1
- package/dist/unstable/cli/Primitive.js +377 -162
- package/dist/unstable/cli/Primitive.js.map +1 -1
- package/dist/unstable/cli/Prompt.d.ts +23 -14
- package/dist/unstable/cli/Prompt.d.ts.map +1 -1
- package/dist/unstable/cli/Prompt.js +54 -31
- package/dist/unstable/cli/Prompt.js.map +1 -1
- package/dist/unstable/cli/index.js.map +1 -1
- package/dist/unstable/cli/internal/ansi.js +2 -2
- package/dist/unstable/cli/internal/ansi.js.map +1 -1
- package/dist/unstable/cli/internal/auto-suggest.js.map +1 -1
- package/dist/unstable/cli/internal/command.d.ts +5 -3
- package/dist/unstable/cli/internal/command.d.ts.map +1 -1
- package/dist/unstable/cli/internal/command.js +21 -13
- package/dist/unstable/cli/internal/command.js.map +1 -1
- package/dist/unstable/cli/internal/completions/bash.js +69 -9
- package/dist/unstable/cli/internal/completions/bash.js.map +1 -1
- package/dist/unstable/cli/internal/completions/descriptor.js +24 -18
- package/dist/unstable/cli/internal/completions/descriptor.js.map +1 -1
- package/dist/unstable/cli/internal/completions/fish.js +5 -5
- package/dist/unstable/cli/internal/completions/fish.js.map +1 -1
- package/dist/unstable/cli/internal/completions/zsh.js.map +1 -1
- package/dist/unstable/cli/internal/config.d.ts +0 -48
- package/dist/unstable/cli/internal/config.d.ts.map +1 -1
- package/dist/unstable/cli/internal/config.js +8 -10
- package/dist/unstable/cli/internal/config.js.map +1 -1
- package/dist/unstable/cli/internal/help.d.ts.map +1 -1
- package/dist/unstable/cli/internal/help.js +4 -2
- package/dist/unstable/cli/internal/help.js.map +1 -1
- package/dist/unstable/cli/internal/lexer.js +17 -7
- package/dist/unstable/cli/internal/lexer.js.map +1 -1
- package/dist/unstable/cli/internal/parser.js +5 -5
- package/dist/unstable/cli/internal/parser.js.map +1 -1
- package/dist/unstable/cli/internal/wizard.js +2 -2
- package/dist/unstable/cli/internal/wizard.js.map +1 -1
- package/dist/unstable/cluster/ClusterCron.js.map +1 -1
- package/dist/unstable/cluster/ClusterError.d.ts +3 -1
- package/dist/unstable/cluster/ClusterError.d.ts.map +1 -1
- package/dist/unstable/cluster/ClusterError.js +10 -8
- package/dist/unstable/cluster/ClusterError.js.map +1 -1
- package/dist/unstable/cluster/ClusterMetrics.js.map +1 -1
- package/dist/unstable/cluster/ClusterSchema.d.ts +8 -8
- package/dist/unstable/cluster/ClusterSchema.js +8 -8
- package/dist/unstable/cluster/ClusterSchema.js.map +1 -1
- package/dist/unstable/cluster/ClusterWorkflowEngine.d.ts.map +1 -1
- package/dist/unstable/cluster/ClusterWorkflowEngine.js +43 -21
- package/dist/unstable/cluster/ClusterWorkflowEngine.js.map +1 -1
- package/dist/unstable/cluster/DeliverAt.js.map +1 -1
- package/dist/unstable/cluster/Entity.d.ts +12 -12
- package/dist/unstable/cluster/Entity.d.ts.map +1 -1
- package/dist/unstable/cluster/Entity.js +9 -9
- package/dist/unstable/cluster/Entity.js.map +1 -1
- package/dist/unstable/cluster/EntityAddress.js.map +1 -1
- package/dist/unstable/cluster/EntityId.js.map +1 -1
- package/dist/unstable/cluster/EntityProxy.d.ts +7 -5
- package/dist/unstable/cluster/EntityProxy.d.ts.map +1 -1
- package/dist/unstable/cluster/EntityProxy.js +8 -5
- package/dist/unstable/cluster/EntityProxy.js.map +1 -1
- package/dist/unstable/cluster/EntityProxyServer.js.map +1 -1
- package/dist/unstable/cluster/EntityResource.d.ts +4 -4
- package/dist/unstable/cluster/EntityResource.d.ts.map +1 -1
- package/dist/unstable/cluster/EntityResource.js +14 -2
- package/dist/unstable/cluster/EntityResource.js.map +1 -1
- package/dist/unstable/cluster/EntityType.js.map +1 -1
- package/dist/unstable/cluster/Envelope.d.ts +3 -3
- package/dist/unstable/cluster/Envelope.d.ts.map +1 -1
- package/dist/unstable/cluster/Envelope.js +5 -4
- package/dist/unstable/cluster/Envelope.js.map +1 -1
- package/dist/unstable/cluster/HttpRunner.d.ts +2 -2
- package/dist/unstable/cluster/HttpRunner.d.ts.map +1 -1
- package/dist/unstable/cluster/HttpRunner.js +6 -4
- package/dist/unstable/cluster/HttpRunner.js.map +1 -1
- package/dist/unstable/cluster/K8sHttpClient.d.ts +2 -2
- package/dist/unstable/cluster/K8sHttpClient.d.ts.map +1 -1
- package/dist/unstable/cluster/K8sHttpClient.js +8 -0
- package/dist/unstable/cluster/K8sHttpClient.js.map +1 -1
- package/dist/unstable/cluster/K8sTypes.d.ts +2327 -0
- package/dist/unstable/cluster/K8sTypes.d.ts.map +1 -0
- package/dist/unstable/cluster/K8sTypes.js +29 -0
- package/dist/unstable/cluster/K8sTypes.js.map +1 -0
- package/dist/unstable/cluster/MachineId.js.map +1 -1
- package/dist/unstable/cluster/Message.d.ts +9 -9
- package/dist/unstable/cluster/Message.js +6 -6
- package/dist/unstable/cluster/Message.js.map +1 -1
- package/dist/unstable/cluster/MessageStorage.d.ts +66 -22
- package/dist/unstable/cluster/MessageStorage.d.ts.map +1 -1
- package/dist/unstable/cluster/MessageStorage.js +56 -13
- package/dist/unstable/cluster/MessageStorage.js.map +1 -1
- package/dist/unstable/cluster/Reply.d.ts +8 -0
- package/dist/unstable/cluster/Reply.d.ts.map +1 -1
- package/dist/unstable/cluster/Reply.js +17 -5
- package/dist/unstable/cluster/Reply.js.map +1 -1
- package/dist/unstable/cluster/Runner.d.ts +1 -1
- package/dist/unstable/cluster/Runner.js +1 -1
- package/dist/unstable/cluster/Runner.js.map +1 -1
- package/dist/unstable/cluster/RunnerAddress.d.ts +1 -1
- package/dist/unstable/cluster/RunnerAddress.js +1 -1
- package/dist/unstable/cluster/RunnerAddress.js.map +1 -1
- package/dist/unstable/cluster/RunnerHealth.d.ts +1 -1
- package/dist/unstable/cluster/RunnerHealth.js +1 -1
- package/dist/unstable/cluster/RunnerHealth.js.map +1 -1
- package/dist/unstable/cluster/RunnerServer.d.ts +2 -1
- package/dist/unstable/cluster/RunnerServer.d.ts.map +1 -1
- package/dist/unstable/cluster/RunnerServer.js +29 -23
- package/dist/unstable/cluster/RunnerServer.js.map +1 -1
- package/dist/unstable/cluster/RunnerStorage.d.ts +3 -4
- package/dist/unstable/cluster/RunnerStorage.d.ts.map +1 -1
- package/dist/unstable/cluster/RunnerStorage.js +8 -7
- package/dist/unstable/cluster/RunnerStorage.js.map +1 -1
- package/dist/unstable/cluster/Runners.d.ts +11 -15
- package/dist/unstable/cluster/Runners.d.ts.map +1 -1
- package/dist/unstable/cluster/Runners.js +32 -22
- package/dist/unstable/cluster/Runners.js.map +1 -1
- package/dist/unstable/cluster/ShardId.js +1 -1
- package/dist/unstable/cluster/ShardId.js.map +1 -1
- package/dist/unstable/cluster/Sharding.d.ts +2 -2
- package/dist/unstable/cluster/Sharding.d.ts.map +1 -1
- package/dist/unstable/cluster/Sharding.js +293 -46
- package/dist/unstable/cluster/Sharding.js.map +1 -1
- package/dist/unstable/cluster/ShardingConfig.d.ts +57 -5
- package/dist/unstable/cluster/ShardingConfig.d.ts.map +1 -1
- package/dist/unstable/cluster/ShardingConfig.js +11 -3
- package/dist/unstable/cluster/ShardingConfig.js.map +1 -1
- package/dist/unstable/cluster/ShardingRegistrationEvent.js.map +1 -1
- package/dist/unstable/cluster/SingleRunner.d.ts +4 -2
- package/dist/unstable/cluster/SingleRunner.d.ts.map +1 -1
- package/dist/unstable/cluster/SingleRunner.js +2 -1
- package/dist/unstable/cluster/SingleRunner.js.map +1 -1
- package/dist/unstable/cluster/Singleton.js.map +1 -1
- package/dist/unstable/cluster/SingletonAddress.d.ts +1 -1
- package/dist/unstable/cluster/SingletonAddress.js +1 -1
- package/dist/unstable/cluster/SingletonAddress.js.map +1 -1
- package/dist/unstable/cluster/Snowflake.d.ts +8 -8
- package/dist/unstable/cluster/Snowflake.js +8 -8
- package/dist/unstable/cluster/Snowflake.js.map +1 -1
- package/dist/unstable/cluster/SocketRunner.js.map +1 -1
- package/dist/unstable/cluster/SqlMessageStorage.d.ts +21 -9
- package/dist/unstable/cluster/SqlMessageStorage.d.ts.map +1 -1
- package/dist/unstable/cluster/SqlMessageStorage.js +130 -43
- package/dist/unstable/cluster/SqlMessageStorage.js.map +1 -1
- package/dist/unstable/cluster/SqlRunnerStorage.d.ts.map +1 -1
- package/dist/unstable/cluster/SqlRunnerStorage.js +141 -79
- package/dist/unstable/cluster/SqlRunnerStorage.js.map +1 -1
- package/dist/unstable/cluster/TestRunner.js.map +1 -1
- package/dist/unstable/cluster/index.d.ts +4 -0
- package/dist/unstable/cluster/index.d.ts.map +1 -1
- package/dist/unstable/cluster/index.js +4 -0
- package/dist/unstable/cluster/index.js.map +1 -1
- package/dist/unstable/cluster/internal/entityManager.js +33 -13
- package/dist/unstable/cluster/internal/entityManager.js.map +1 -1
- package/dist/unstable/cluster/internal/entityReaper.js.map +1 -1
- package/dist/unstable/cluster/internal/hash.js.map +1 -1
- package/dist/unstable/cluster/internal/interruptors.js.map +1 -1
- package/dist/unstable/cluster/internal/resourceMap.js +8 -2
- package/dist/unstable/cluster/internal/resourceMap.js.map +1 -1
- package/dist/unstable/cluster/internal/resourceRef.js +17 -0
- package/dist/unstable/cluster/internal/resourceRef.js.map +1 -1
- package/dist/unstable/cluster/internal/shardLock.d.ts +2 -0
- package/dist/unstable/cluster/internal/shardLock.d.ts.map +1 -0
- package/dist/unstable/cluster/internal/shardLock.js +4 -0
- package/dist/unstable/cluster/internal/shardLock.js.map +1 -0
- package/dist/unstable/devtools/DevTools.js.map +1 -1
- package/dist/unstable/devtools/DevToolsClient.d.ts.map +1 -1
- package/dist/unstable/devtools/DevToolsClient.js +7 -2
- package/dist/unstable/devtools/DevToolsClient.js.map +1 -1
- package/dist/unstable/devtools/DevToolsSchema.d.ts +20 -20
- package/dist/unstable/devtools/DevToolsSchema.d.ts.map +1 -1
- package/dist/unstable/devtools/DevToolsSchema.js +8 -5
- package/dist/unstable/devtools/DevToolsSchema.js.map +1 -1
- package/dist/unstable/devtools/DevToolsServer.js.map +1 -1
- package/dist/unstable/devtools/index.js.map +1 -1
- package/dist/unstable/encoding/Ini.d.ts +20 -0
- package/dist/unstable/encoding/Ini.d.ts.map +1 -0
- package/dist/unstable/encoding/Ini.js +153 -0
- package/dist/unstable/encoding/Ini.js.map +1 -0
- package/dist/unstable/encoding/Msgpack.d.ts +2 -1
- package/dist/unstable/encoding/Msgpack.d.ts.map +1 -1
- package/dist/unstable/encoding/Msgpack.js +31 -19
- package/dist/unstable/encoding/Msgpack.js.map +1 -1
- package/dist/unstable/encoding/Ndjson.d.ts.map +1 -1
- package/dist/unstable/encoding/Ndjson.js +7 -1
- package/dist/unstable/encoding/Ndjson.js.map +1 -1
- package/dist/unstable/encoding/Sse.d.ts +72 -8
- package/dist/unstable/encoding/Sse.d.ts.map +1 -1
- package/dist/unstable/encoding/Sse.js +72 -31
- package/dist/unstable/encoding/Sse.js.map +1 -1
- package/dist/unstable/encoding/Toml.d.ts +19 -0
- package/dist/unstable/encoding/Toml.d.ts.map +1 -0
- package/dist/unstable/encoding/Toml.js +434 -0
- package/dist/unstable/encoding/Toml.js.map +1 -0
- package/dist/unstable/encoding/Yaml.d.ts +19 -0
- package/dist/unstable/encoding/Yaml.d.ts.map +1 -0
- package/dist/unstable/encoding/Yaml.js +461 -0
- package/dist/unstable/encoding/Yaml.js.map +1 -0
- package/dist/unstable/encoding/index.d.ts +12 -0
- package/dist/unstable/encoding/index.d.ts.map +1 -1
- package/dist/unstable/encoding/index.js +12 -0
- package/dist/unstable/encoding/index.js.map +1 -1
- package/dist/unstable/eventlog/Event.d.ts +20 -20
- package/dist/unstable/eventlog/Event.js.map +1 -1
- package/dist/unstable/eventlog/EventGroup.d.ts +4 -4
- package/dist/unstable/eventlog/EventGroup.js.map +1 -1
- package/dist/unstable/eventlog/EventJournal.d.ts +30 -17
- package/dist/unstable/eventlog/EventJournal.d.ts.map +1 -1
- package/dist/unstable/eventlog/EventJournal.js +30 -35
- package/dist/unstable/eventlog/EventJournal.js.map +1 -1
- package/dist/unstable/eventlog/EventLog.d.ts +3 -3
- package/dist/unstable/eventlog/EventLog.d.ts.map +1 -1
- package/dist/unstable/eventlog/EventLog.js +18 -14
- package/dist/unstable/eventlog/EventLog.js.map +1 -1
- package/dist/unstable/eventlog/EventLogEncryption.d.ts +8 -7
- package/dist/unstable/eventlog/EventLogEncryption.d.ts.map +1 -1
- package/dist/unstable/eventlog/EventLogEncryption.js +16 -14
- package/dist/unstable/eventlog/EventLogEncryption.js.map +1 -1
- package/dist/unstable/eventlog/EventLogMessage.d.ts +31 -31
- package/dist/unstable/eventlog/EventLogMessage.d.ts.map +1 -1
- package/dist/unstable/eventlog/EventLogMessage.js +12 -8
- package/dist/unstable/eventlog/EventLogMessage.js.map +1 -1
- package/dist/unstable/eventlog/EventLogRemote.d.ts +15 -15
- package/dist/unstable/eventlog/EventLogRemote.js +5 -5
- package/dist/unstable/eventlog/EventLogRemote.js.map +1 -1
- package/dist/unstable/eventlog/EventLogServer.d.ts +11 -2
- package/dist/unstable/eventlog/EventLogServer.d.ts.map +1 -1
- package/dist/unstable/eventlog/EventLogServer.js +45 -21
- package/dist/unstable/eventlog/EventLogServer.js.map +1 -1
- package/dist/unstable/eventlog/EventLogServerEncrypted.d.ts +4 -4
- package/dist/unstable/eventlog/EventLogServerEncrypted.d.ts.map +1 -1
- package/dist/unstable/eventlog/EventLogServerEncrypted.js +17 -8
- package/dist/unstable/eventlog/EventLogServerEncrypted.js.map +1 -1
- package/dist/unstable/eventlog/EventLogServerUnencrypted.d.ts +5 -5
- package/dist/unstable/eventlog/EventLogServerUnencrypted.d.ts.map +1 -1
- package/dist/unstable/eventlog/EventLogServerUnencrypted.js +15 -7
- package/dist/unstable/eventlog/EventLogServerUnencrypted.js.map +1 -1
- package/dist/unstable/eventlog/EventLogSessionAuth.d.ts +1 -1
- package/dist/unstable/eventlog/EventLogSessionAuth.js +1 -1
- package/dist/unstable/eventlog/EventLogSessionAuth.js.map +1 -1
- package/dist/unstable/eventlog/SqlEventJournal.d.ts +10 -0
- package/dist/unstable/eventlog/SqlEventJournal.d.ts.map +1 -1
- package/dist/unstable/eventlog/SqlEventJournal.js +4 -7
- package/dist/unstable/eventlog/SqlEventJournal.js.map +1 -1
- package/dist/unstable/eventlog/SqlEventLogServerEncrypted.js +1 -1
- package/dist/unstable/eventlog/SqlEventLogServerEncrypted.js.map +1 -1
- package/dist/unstable/eventlog/SqlEventLogServerUnencrypted.js +3 -3
- package/dist/unstable/eventlog/SqlEventLogServerUnencrypted.js.map +1 -1
- package/dist/unstable/eventlog/index.js.map +1 -1
- package/dist/unstable/eventlog/internal/identityRootSecretDerivation.js.map +1 -1
- package/dist/unstable/http/Cookies.d.ts +2 -2
- package/dist/unstable/http/Cookies.d.ts.map +1 -1
- package/dist/unstable/http/Cookies.js +54 -40
- package/dist/unstable/http/Cookies.js.map +1 -1
- package/dist/unstable/http/Etag.d.ts +1 -1
- package/dist/unstable/http/Etag.js +1 -1
- package/dist/unstable/http/Etag.js.map +1 -1
- package/dist/unstable/http/FetchHttpClient.d.ts.map +1 -1
- package/dist/unstable/http/FetchHttpClient.js +1 -1
- package/dist/unstable/http/FetchHttpClient.js.map +1 -1
- package/dist/unstable/http/FindMyWay/internal/queryString.d.ts +11 -0
- package/dist/unstable/http/FindMyWay/internal/queryString.d.ts.map +1 -0
- package/dist/unstable/http/FindMyWay/internal/queryString.js +259 -0
- package/dist/unstable/http/FindMyWay/internal/queryString.js.map +1 -0
- package/dist/unstable/http/FindMyWay/internal/router.d.ts +2 -0
- package/dist/unstable/http/FindMyWay/internal/router.d.ts.map +1 -0
- package/dist/unstable/http/FindMyWay/internal/router.js +665 -0
- package/dist/unstable/http/FindMyWay/internal/router.js.map +1 -0
- package/dist/unstable/http/FindMyWay.d.ts +33 -8
- package/dist/unstable/http/FindMyWay.d.ts.map +1 -1
- package/dist/unstable/http/FindMyWay.js +4 -7
- package/dist/unstable/http/FindMyWay.js.map +1 -1
- package/dist/unstable/http/Headers.d.ts +2 -2
- package/dist/unstable/http/Headers.js +10 -10
- package/dist/unstable/http/Headers.js.map +1 -1
- package/dist/unstable/http/HttpBody.d.ts +5 -3
- package/dist/unstable/http/HttpBody.d.ts.map +1 -1
- package/dist/unstable/http/HttpBody.js +11 -5
- package/dist/unstable/http/HttpBody.js.map +1 -1
- package/dist/unstable/http/HttpClient.d.ts +110 -47
- package/dist/unstable/http/HttpClient.d.ts.map +1 -1
- package/dist/unstable/http/HttpClient.js +79 -36
- package/dist/unstable/http/HttpClient.js.map +1 -1
- package/dist/unstable/http/HttpClientError.js +1 -1
- package/dist/unstable/http/HttpClientError.js.map +1 -1
- package/dist/unstable/http/HttpClientRequest.d.ts +44 -0
- package/dist/unstable/http/HttpClientRequest.d.ts.map +1 -1
- package/dist/unstable/http/HttpClientRequest.js +16 -12
- package/dist/unstable/http/HttpClientRequest.js.map +1 -1
- package/dist/unstable/http/HttpClientResponse.d.ts +4 -4
- package/dist/unstable/http/HttpClientResponse.js +3 -18
- package/dist/unstable/http/HttpClientResponse.js.map +1 -1
- package/dist/unstable/http/HttpEffect.d.ts +7 -9
- package/dist/unstable/http/HttpEffect.d.ts.map +1 -1
- package/dist/unstable/http/HttpEffect.js +14 -15
- package/dist/unstable/http/HttpEffect.js.map +1 -1
- package/dist/unstable/http/HttpIncomingMessage.js.map +1 -1
- package/dist/unstable/http/HttpMethod.d.ts +6 -9
- package/dist/unstable/http/HttpMethod.d.ts.map +1 -1
- package/dist/unstable/http/HttpMethod.js +6 -9
- package/dist/unstable/http/HttpMethod.js.map +1 -1
- package/dist/unstable/http/HttpMiddleware.d.ts +75 -9
- package/dist/unstable/http/HttpMiddleware.d.ts.map +1 -1
- package/dist/unstable/http/HttpMiddleware.js +164 -39
- package/dist/unstable/http/HttpMiddleware.js.map +1 -1
- package/dist/unstable/http/HttpPlatform.d.ts +76 -0
- package/dist/unstable/http/HttpPlatform.d.ts.map +1 -1
- package/dist/unstable/http/HttpPlatform.js +53 -3
- package/dist/unstable/http/HttpPlatform.js.map +1 -1
- package/dist/unstable/http/HttpRouter.d.ts +91 -92
- package/dist/unstable/http/HttpRouter.d.ts.map +1 -1
- package/dist/unstable/http/HttpRouter.js +79 -80
- package/dist/unstable/http/HttpRouter.js.map +1 -1
- package/dist/unstable/http/HttpServer.d.ts +13 -13
- package/dist/unstable/http/HttpServer.js +6 -6
- package/dist/unstable/http/HttpServer.js.map +1 -1
- package/dist/unstable/http/HttpServerError.d.ts +2 -2
- package/dist/unstable/http/HttpServerError.js +2 -2
- package/dist/unstable/http/HttpServerError.js.map +1 -1
- package/dist/unstable/http/HttpServerRequest.d.ts +4 -4
- package/dist/unstable/http/HttpServerRequest.d.ts.map +1 -1
- package/dist/unstable/http/HttpServerRequest.js +23 -15
- package/dist/unstable/http/HttpServerRequest.js.map +1 -1
- package/dist/unstable/http/HttpServerRespondable.js.map +1 -1
- package/dist/unstable/http/HttpServerResponse.d.ts +22 -0
- package/dist/unstable/http/HttpServerResponse.d.ts.map +1 -1
- package/dist/unstable/http/HttpServerResponse.js +17 -5
- package/dist/unstable/http/HttpServerResponse.js.map +1 -1
- package/dist/unstable/http/HttpStaticServer.d.ts +35 -7
- package/dist/unstable/http/HttpStaticServer.d.ts.map +1 -1
- package/dist/unstable/http/HttpStaticServer.js +35 -7
- package/dist/unstable/http/HttpStaticServer.js.map +1 -1
- package/dist/unstable/http/HttpStatus.d.ts +99 -0
- package/dist/unstable/http/HttpStatus.d.ts.map +1 -0
- package/dist/unstable/http/HttpStatus.js +91 -0
- package/dist/unstable/http/HttpStatus.js.map +1 -0
- package/dist/unstable/http/HttpTraceContext.js.map +1 -1
- package/dist/unstable/http/Multipart.d.ts +28 -9
- package/dist/unstable/http/Multipart.d.ts.map +1 -1
- package/dist/unstable/http/Multipart.js +65 -35
- package/dist/unstable/http/Multipart.js.map +1 -1
- package/dist/unstable/http/MultipartParser/HeadersParser.d.ts +53 -0
- package/dist/unstable/http/MultipartParser/HeadersParser.d.ts.map +1 -0
- package/dist/unstable/http/MultipartParser/HeadersParser.js +14 -0
- package/dist/unstable/http/MultipartParser/HeadersParser.js.map +1 -0
- package/dist/unstable/http/MultipartParser/Search.d.ts +11 -0
- package/dist/unstable/http/MultipartParser/Search.d.ts.map +1 -0
- package/dist/unstable/http/MultipartParser/Search.js +14 -0
- package/dist/unstable/http/MultipartParser/Search.js.map +1 -0
- package/dist/unstable/http/MultipartParser/internal/contentType.d.ts +5 -0
- package/dist/unstable/http/MultipartParser/internal/contentType.d.ts.map +1 -0
- package/dist/unstable/http/MultipartParser/internal/contentType.js +82 -0
- package/dist/unstable/http/MultipartParser/internal/contentType.js.map +1 -0
- package/dist/unstable/http/MultipartParser/internal/headers.d.ts +3 -0
- package/dist/unstable/http/MultipartParser/internal/headers.d.ts.map +1 -0
- package/dist/unstable/http/MultipartParser/internal/headers.js +208 -0
- package/dist/unstable/http/MultipartParser/internal/headers.js.map +1 -0
- package/dist/unstable/http/MultipartParser/internal/multipart.d.ts +8 -0
- package/dist/unstable/http/MultipartParser/internal/multipart.d.ts.map +1 -0
- package/dist/unstable/http/MultipartParser/internal/multipart.js +241 -0
- package/dist/unstable/http/MultipartParser/internal/multipart.js.map +1 -0
- package/dist/unstable/http/MultipartParser/internal/search.d.ts +5 -0
- package/dist/unstable/http/MultipartParser/internal/search.d.ts.map +1 -0
- package/dist/unstable/http/MultipartParser/internal/search.js +120 -0
- package/dist/unstable/http/MultipartParser/internal/search.js.map +1 -0
- package/dist/unstable/http/MultipartParser.d.ts +98 -0
- package/dist/unstable/http/MultipartParser.d.ts.map +1 -0
- package/dist/unstable/http/MultipartParser.js +23 -0
- package/dist/unstable/http/MultipartParser.js.map +1 -0
- package/dist/unstable/http/Template.d.ts.map +1 -1
- package/dist/unstable/http/Template.js +3 -3
- package/dist/unstable/http/Template.js.map +1 -1
- package/dist/unstable/http/Url.d.ts +33 -63
- package/dist/unstable/http/Url.d.ts.map +1 -1
- package/dist/unstable/http/Url.js +14 -28
- package/dist/unstable/http/Url.js.map +1 -1
- package/dist/unstable/http/UrlParams.d.ts +10 -18
- package/dist/unstable/http/UrlParams.d.ts.map +1 -1
- package/dist/unstable/http/UrlParams.js +26 -31
- package/dist/unstable/http/UrlParams.js.map +1 -1
- package/dist/unstable/http/index.d.ts +5 -1
- package/dist/unstable/http/index.d.ts.map +1 -1
- package/dist/unstable/http/index.js +5 -1
- package/dist/unstable/http/index.js.map +1 -1
- package/dist/unstable/http/internal/compression.d.ts +2 -0
- package/dist/unstable/http/internal/compression.d.ts.map +1 -0
- package/dist/unstable/http/internal/compression.js +155 -0
- package/dist/unstable/http/internal/compression.js.map +1 -0
- package/dist/unstable/http/internal/httpBody.d.ts +2 -0
- package/dist/unstable/http/internal/httpBody.d.ts.map +1 -0
- package/dist/unstable/http/internal/httpBody.js +10 -0
- package/dist/unstable/http/internal/httpBody.js.map +1 -0
- package/dist/unstable/http/internal/preResponseHandler.js.map +1 -1
- package/dist/unstable/httpapi/HttpApi.d.ts.map +1 -1
- package/dist/unstable/httpapi/HttpApi.js +9 -9
- package/dist/unstable/httpapi/HttpApi.js.map +1 -1
- package/dist/unstable/httpapi/HttpApiBuilder.d.ts +1 -1
- package/dist/unstable/httpapi/HttpApiBuilder.d.ts.map +1 -1
- package/dist/unstable/httpapi/HttpApiBuilder.js +82 -30
- package/dist/unstable/httpapi/HttpApiBuilder.js.map +1 -1
- package/dist/unstable/httpapi/HttpApiClient.d.ts +4 -5
- package/dist/unstable/httpapi/HttpApiClient.d.ts.map +1 -1
- package/dist/unstable/httpapi/HttpApiClient.js +89 -51
- package/dist/unstable/httpapi/HttpApiClient.js.map +1 -1
- package/dist/unstable/httpapi/HttpApiEndpoint.d.ts +48 -46
- package/dist/unstable/httpapi/HttpApiEndpoint.d.ts.map +1 -1
- package/dist/unstable/httpapi/HttpApiEndpoint.js +73 -16
- package/dist/unstable/httpapi/HttpApiEndpoint.js.map +1 -1
- package/dist/unstable/httpapi/HttpApiError.d.ts +18 -18
- package/dist/unstable/httpapi/HttpApiError.d.ts.map +1 -1
- package/dist/unstable/httpapi/HttpApiError.js +30 -30
- package/dist/unstable/httpapi/HttpApiError.js.map +1 -1
- package/dist/unstable/httpapi/HttpApiGroup.d.ts +15 -15
- package/dist/unstable/httpapi/HttpApiGroup.js +2 -2
- package/dist/unstable/httpapi/HttpApiGroup.js.map +1 -1
- package/dist/unstable/httpapi/HttpApiMiddleware.d.ts +71 -24
- package/dist/unstable/httpapi/HttpApiMiddleware.d.ts.map +1 -1
- package/dist/unstable/httpapi/HttpApiMiddleware.js +57 -10
- package/dist/unstable/httpapi/HttpApiMiddleware.js.map +1 -1
- package/dist/unstable/httpapi/HttpApiScalar.d.ts +0 -12
- package/dist/unstable/httpapi/HttpApiScalar.d.ts.map +1 -1
- package/dist/unstable/httpapi/HttpApiScalar.js.map +1 -1
- package/dist/unstable/httpapi/HttpApiSchema.d.ts +227 -71
- package/dist/unstable/httpapi/HttpApiSchema.d.ts.map +1 -1
- package/dist/unstable/httpapi/HttpApiSchema.js +176 -69
- package/dist/unstable/httpapi/HttpApiSchema.js.map +1 -1
- package/dist/unstable/httpapi/HttpApiSecurity.js.map +1 -1
- package/dist/unstable/httpapi/HttpApiSwagger.js.map +1 -1
- package/dist/unstable/httpapi/HttpApiTest.js.map +1 -1
- package/dist/unstable/httpapi/OpenApi.d.ts +21 -13
- package/dist/unstable/httpapi/OpenApi.d.ts.map +1 -1
- package/dist/unstable/httpapi/OpenApi.js +110 -57
- package/dist/unstable/httpapi/OpenApi.js.map +1 -1
- package/dist/unstable/httpapi/index.js.map +1 -1
- package/dist/unstable/httpapi/internal/html.js.map +1 -1
- package/dist/unstable/httpapi/internal/httpApiScalar.js.map +1 -1
- package/dist/unstable/httpapi/internal/httpApiSwagger.js.map +1 -1
- package/dist/unstable/httpapi/internal/mediaType.js.map +1 -1
- package/dist/unstable/observability/Otlp.js.map +1 -1
- package/dist/unstable/observability/OtlpExporter.d.ts +71 -2
- package/dist/unstable/observability/OtlpExporter.d.ts.map +1 -1
- package/dist/unstable/observability/OtlpExporter.js +86 -7
- package/dist/unstable/observability/OtlpExporter.js.map +1 -1
- package/dist/unstable/observability/OtlpLogger.d.ts +4 -3
- package/dist/unstable/observability/OtlpLogger.d.ts.map +1 -1
- package/dist/unstable/observability/OtlpLogger.js +4 -4
- package/dist/unstable/observability/OtlpLogger.js.map +1 -1
- package/dist/unstable/observability/OtlpMetrics.d.ts +11 -4
- package/dist/unstable/observability/OtlpMetrics.d.ts.map +1 -1
- package/dist/unstable/observability/OtlpMetrics.js +31 -15
- package/dist/unstable/observability/OtlpMetrics.js.map +1 -1
- package/dist/unstable/observability/OtlpResource.d.ts +16 -7
- package/dist/unstable/observability/OtlpResource.d.ts.map +1 -1
- package/dist/unstable/observability/OtlpResource.js +21 -12
- package/dist/unstable/observability/OtlpResource.js.map +1 -1
- package/dist/unstable/observability/OtlpSerialization.js.map +1 -1
- package/dist/unstable/observability/OtlpTracer.d.ts +4 -3
- package/dist/unstable/observability/OtlpTracer.d.ts.map +1 -1
- package/dist/unstable/observability/OtlpTracer.js +3 -3
- package/dist/unstable/observability/OtlpTracer.js.map +1 -1
- package/dist/unstable/observability/PrometheusMetrics.d.ts +13 -4
- package/dist/unstable/observability/PrometheusMetrics.d.ts.map +1 -1
- package/dist/unstable/observability/PrometheusMetrics.js +10 -3
- package/dist/unstable/observability/PrometheusMetrics.js.map +1 -1
- package/dist/unstable/observability/index.js.map +1 -1
- package/dist/unstable/observability/internal/otlpEnv.js +1 -1
- package/dist/unstable/observability/internal/otlpEnv.js.map +1 -1
- package/dist/unstable/observability/internal/otlpProtobuf.js.map +1 -1
- package/dist/unstable/observability/internal/protobuf.js +3 -0
- package/dist/unstable/observability/internal/protobuf.js.map +1 -1
- package/dist/unstable/persistence/KeyValueStore.d.ts +8 -3
- package/dist/unstable/persistence/KeyValueStore.d.ts.map +1 -1
- package/dist/unstable/persistence/KeyValueStore.js +22 -13
- package/dist/unstable/persistence/KeyValueStore.js.map +1 -1
- package/dist/unstable/persistence/Persistable.d.ts +8 -8
- package/dist/unstable/persistence/Persistable.d.ts.map +1 -1
- package/dist/unstable/persistence/Persistable.js +2 -1
- package/dist/unstable/persistence/Persistable.js.map +1 -1
- package/dist/unstable/persistence/PersistedCache.js.map +1 -1
- package/dist/unstable/persistence/PersistedQueue.d.ts +6 -6
- package/dist/unstable/persistence/PersistedQueue.d.ts.map +1 -1
- package/dist/unstable/persistence/PersistedQueue.js +97 -86
- package/dist/unstable/persistence/PersistedQueue.js.map +1 -1
- package/dist/unstable/persistence/Persistence.d.ts +3 -3
- package/dist/unstable/persistence/Persistence.d.ts.map +1 -1
- package/dist/unstable/persistence/Persistence.js +108 -22
- package/dist/unstable/persistence/Persistence.js.map +1 -1
- package/dist/unstable/persistence/RateLimiter.d.ts +47 -26
- package/dist/unstable/persistence/RateLimiter.d.ts.map +1 -1
- package/dist/unstable/persistence/RateLimiter.js +31 -47
- package/dist/unstable/persistence/RateLimiter.js.map +1 -1
- package/dist/unstable/persistence/Redis.d.ts +2 -2
- package/dist/unstable/persistence/Redis.d.ts.map +1 -1
- package/dist/unstable/persistence/Redis.js +4 -4
- package/dist/unstable/persistence/Redis.js.map +1 -1
- package/dist/unstable/persistence/index.js.map +1 -1
- package/dist/unstable/process/ChildProcess.d.ts +72 -21
- package/dist/unstable/process/ChildProcess.d.ts.map +1 -1
- package/dist/unstable/process/ChildProcess.js +14 -5
- package/dist/unstable/process/ChildProcess.js.map +1 -1
- package/dist/unstable/process/ChildProcessSpawner.d.ts +21 -10
- package/dist/unstable/process/ChildProcessSpawner.d.ts.map +1 -1
- package/dist/unstable/process/ChildProcessSpawner.js +4 -2
- package/dist/unstable/process/ChildProcessSpawner.js.map +1 -1
- package/dist/unstable/process/index.js.map +1 -1
- package/dist/unstable/reactivity/AsyncResult.d.ts +8 -8
- package/dist/unstable/reactivity/AsyncResult.d.ts.map +1 -1
- package/dist/unstable/reactivity/AsyncResult.js +14 -13
- package/dist/unstable/reactivity/AsyncResult.js.map +1 -1
- package/dist/unstable/reactivity/Atom.d.ts +131 -30
- package/dist/unstable/reactivity/Atom.d.ts.map +1 -1
- package/dist/unstable/reactivity/Atom.js +55 -43
- package/dist/unstable/reactivity/Atom.js.map +1 -1
- package/dist/unstable/reactivity/AtomHttpApi.d.ts +1 -1
- package/dist/unstable/reactivity/AtomHttpApi.d.ts.map +1 -1
- package/dist/unstable/reactivity/AtomHttpApi.js +4 -1
- package/dist/unstable/reactivity/AtomHttpApi.js.map +1 -1
- package/dist/unstable/reactivity/AtomRef.js.map +1 -1
- package/dist/unstable/reactivity/AtomRegistry.js +25 -4
- package/dist/unstable/reactivity/AtomRegistry.js.map +1 -1
- package/dist/unstable/reactivity/AtomRpc.d.ts +1 -1
- package/dist/unstable/reactivity/AtomRpc.d.ts.map +1 -1
- package/dist/unstable/reactivity/AtomRpc.js +4 -1
- package/dist/unstable/reactivity/AtomRpc.js.map +1 -1
- package/dist/unstable/reactivity/Hydration.d.ts +1 -1
- package/dist/unstable/reactivity/Hydration.js +1 -1
- package/dist/unstable/reactivity/Hydration.js.map +1 -1
- package/dist/unstable/reactivity/Reactivity.js +1 -1
- package/dist/unstable/reactivity/Reactivity.js.map +1 -1
- package/dist/unstable/reactivity/index.js.map +1 -1
- package/dist/unstable/rpc/Rpc.d.ts +35 -33
- package/dist/unstable/rpc/Rpc.d.ts.map +1 -1
- package/dist/unstable/rpc/Rpc.js +4 -2
- package/dist/unstable/rpc/Rpc.js.map +1 -1
- package/dist/unstable/rpc/RpcClient.d.ts +26 -12
- package/dist/unstable/rpc/RpcClient.d.ts.map +1 -1
- package/dist/unstable/rpc/RpcClient.js +41 -23
- package/dist/unstable/rpc/RpcClient.js.map +1 -1
- package/dist/unstable/rpc/RpcClientError.js +2 -2
- package/dist/unstable/rpc/RpcClientError.js.map +1 -1
- package/dist/unstable/rpc/RpcGroup.d.ts +8 -8
- package/dist/unstable/rpc/RpcGroup.js +2 -2
- package/dist/unstable/rpc/RpcGroup.js.map +1 -1
- package/dist/unstable/rpc/RpcMessage.d.ts +31 -30
- package/dist/unstable/rpc/RpcMessage.d.ts.map +1 -1
- package/dist/unstable/rpc/RpcMessage.js +6 -6
- package/dist/unstable/rpc/RpcMessage.js.map +1 -1
- package/dist/unstable/rpc/RpcMiddleware.d.ts +10 -10
- package/dist/unstable/rpc/RpcMiddleware.js +1 -1
- package/dist/unstable/rpc/RpcMiddleware.js.map +1 -1
- package/dist/unstable/rpc/RpcSchema.d.ts +4 -4
- package/dist/unstable/rpc/RpcSchema.js +3 -3
- package/dist/unstable/rpc/RpcSchema.js.map +1 -1
- package/dist/unstable/rpc/RpcSerialization.d.ts +58 -7
- package/dist/unstable/rpc/RpcSerialization.d.ts.map +1 -1
- package/dist/unstable/rpc/RpcSerialization.js +178 -97
- package/dist/unstable/rpc/RpcSerialization.js.map +1 -1
- package/dist/unstable/rpc/RpcServer.d.ts +13 -13
- package/dist/unstable/rpc/RpcServer.d.ts.map +1 -1
- package/dist/unstable/rpc/RpcServer.js +23 -18
- package/dist/unstable/rpc/RpcServer.js.map +1 -1
- package/dist/unstable/rpc/RpcTest.js.map +1 -1
- package/dist/unstable/rpc/RpcWorker.d.ts +5 -5
- package/dist/unstable/rpc/RpcWorker.js +4 -4
- package/dist/unstable/rpc/RpcWorker.js.map +1 -1
- package/dist/unstable/rpc/Utils.js.map +1 -1
- package/dist/unstable/rpc/index.js.map +1 -1
- package/dist/unstable/schema/Model.d.ts +66 -51
- package/dist/unstable/schema/Model.d.ts.map +1 -1
- package/dist/unstable/schema/Model.js +39 -52
- package/dist/unstable/schema/Model.js.map +1 -1
- package/dist/unstable/schema/VariantSchema.d.ts +11 -12
- package/dist/unstable/schema/VariantSchema.d.ts.map +1 -1
- package/dist/unstable/schema/VariantSchema.js +28 -17
- package/dist/unstable/schema/VariantSchema.js.map +1 -1
- package/dist/unstable/schema/index.js.map +1 -1
- package/dist/unstable/socket/Socket.d.ts +12 -4
- package/dist/unstable/socket/Socket.d.ts.map +1 -1
- package/dist/unstable/socket/Socket.js +38 -17
- package/dist/unstable/socket/Socket.js.map +1 -1
- package/dist/unstable/socket/SocketServer.js.map +1 -1
- package/dist/unstable/socket/index.js.map +1 -1
- package/dist/unstable/sql/Migrator.d.ts +9 -1
- package/dist/unstable/sql/Migrator.d.ts.map +1 -1
- package/dist/unstable/sql/Migrator.js +15 -2
- package/dist/unstable/sql/Migrator.js.map +1 -1
- package/dist/unstable/sql/SqlClient.d.ts +1 -1
- package/dist/unstable/sql/SqlClient.d.ts.map +1 -1
- package/dist/unstable/sql/SqlClient.js +11 -7
- package/dist/unstable/sql/SqlClient.js.map +1 -1
- package/dist/unstable/sql/SqlConnection.js.map +1 -1
- package/dist/unstable/sql/SqlError.d.ts +2 -2
- package/dist/unstable/sql/SqlError.js +15 -15
- package/dist/unstable/sql/SqlError.js.map +1 -1
- package/dist/unstable/sql/SqlModel.d.ts +2 -2
- package/dist/unstable/sql/SqlModel.js +2 -2
- package/dist/unstable/sql/SqlModel.js.map +1 -1
- package/dist/unstable/sql/SqlResolver.d.ts +5 -5
- package/dist/unstable/sql/SqlResolver.d.ts.map +1 -1
- package/dist/unstable/sql/SqlResolver.js +33 -26
- package/dist/unstable/sql/SqlResolver.js.map +1 -1
- package/dist/unstable/sql/SqlSchema.js.map +1 -1
- package/dist/unstable/sql/SqlStream.js.map +1 -1
- package/dist/unstable/sql/Statement.d.ts +6 -6
- package/dist/unstable/sql/Statement.d.ts.map +1 -1
- package/dist/unstable/sql/Statement.js +30 -27
- package/dist/unstable/sql/Statement.js.map +1 -1
- package/dist/unstable/sql/index.js.map +1 -1
- package/dist/unstable/workers/Transferable.d.ts +1 -1
- package/dist/unstable/workers/Transferable.js +1 -1
- package/dist/unstable/workers/Transferable.js.map +1 -1
- package/dist/unstable/workers/Worker.d.ts +2 -2
- package/dist/unstable/workers/Worker.d.ts.map +1 -1
- package/dist/unstable/workers/Worker.js +13 -14
- package/dist/unstable/workers/Worker.js.map +1 -1
- package/dist/unstable/workers/WorkerError.d.ts +7 -7
- package/dist/unstable/workers/WorkerError.js +11 -11
- package/dist/unstable/workers/WorkerError.js.map +1 -1
- package/dist/unstable/workers/WorkerRunner.d.ts +1 -1
- package/dist/unstable/workers/WorkerRunner.js +1 -1
- package/dist/unstable/workers/WorkerRunner.js.map +1 -1
- package/dist/unstable/workers/index.js.map +1 -1
- package/dist/unstable/workflow/Activity.d.ts +2 -2
- package/dist/unstable/workflow/Activity.js +2 -2
- package/dist/unstable/workflow/Activity.js.map +1 -1
- package/dist/unstable/workflow/DurableClock.d.ts +1 -1
- package/dist/unstable/workflow/DurableClock.js +1 -1
- package/dist/unstable/workflow/DurableClock.js.map +1 -1
- package/dist/unstable/workflow/DurableDeferred.d.ts +10 -10
- package/dist/unstable/workflow/DurableDeferred.d.ts.map +1 -1
- package/dist/unstable/workflow/DurableDeferred.js +13 -8
- package/dist/unstable/workflow/DurableDeferred.js.map +1 -1
- package/dist/unstable/workflow/DurableQueue.d.ts +22 -20
- package/dist/unstable/workflow/DurableQueue.d.ts.map +1 -1
- package/dist/unstable/workflow/DurableQueue.js +22 -20
- package/dist/unstable/workflow/DurableQueue.js.map +1 -1
- package/dist/unstable/workflow/Workflow.d.ts +21 -21
- package/dist/unstable/workflow/Workflow.d.ts.map +1 -1
- package/dist/unstable/workflow/Workflow.js +13 -14
- package/dist/unstable/workflow/Workflow.js.map +1 -1
- package/dist/unstable/workflow/WorkflowEngine.d.ts +26 -3
- package/dist/unstable/workflow/WorkflowEngine.d.ts.map +1 -1
- package/dist/unstable/workflow/WorkflowEngine.js +72 -6
- package/dist/unstable/workflow/WorkflowEngine.js.map +1 -1
- package/dist/unstable/workflow/WorkflowProxy.d.ts +4 -2
- package/dist/unstable/workflow/WorkflowProxy.d.ts.map +1 -1
- package/dist/unstable/workflow/WorkflowProxy.js +4 -2
- package/dist/unstable/workflow/WorkflowProxy.js.map +1 -1
- package/dist/unstable/workflow/WorkflowProxyServer.js.map +1 -1
- package/dist/unstable/workflow/index.js.map +1 -1
- package/dist/unstable/workflow/internal/crypto.js.map +1 -1
- package/package.json +10 -16
- package/src/Array.ts +1068 -1070
- package/src/BigDecimal.ts +433 -756
- package/src/BigInt.ts +213 -269
- package/src/Boolean.ts +146 -188
- package/src/Brand.ts +4 -4
- package/src/Cache.ts +469 -851
- package/src/Cause.ts +167 -277
- package/src/Channel.ts +982 -831
- package/src/ChannelSchema.ts +1 -1
- package/src/Chunk.ts +841 -1181
- package/src/Clock.ts +181 -49
- package/src/Combiner.ts +20 -33
- package/src/Config.ts +642 -335
- package/src/ConfigProvider.ts +267 -135
- package/src/Console.ts +289 -39
- package/src/Context.ts +336 -405
- package/src/Cron.ts +271 -219
- package/src/Crypto.ts +33 -63
- package/src/Data.ts +63 -82
- package/src/DateTime.ts +564 -660
- package/src/Deferred.ts +259 -258
- package/src/Duration.ts +244 -311
- package/src/Effect.ts +3241 -3410
- package/src/Encoding.ts +22 -40
- package/src/Equal.ts +59 -41
- package/src/Equivalence.ts +103 -105
- package/src/ErrorReporter.ts +52 -28
- package/src/ExecutionPlan.ts +91 -56
- package/src/Exit.ts +116 -192
- package/src/Fiber.ts +82 -149
- package/src/FiberHandle.ts +155 -107
- package/src/FiberMap.ts +225 -174
- package/src/FiberSet.ts +125 -83
- package/src/FileSystem.ts +156 -264
- package/src/Filter.ts +61 -33
- package/src/Formatter.ts +69 -76
- package/src/Function.ts +119 -151
- package/src/Graph.ts +416 -770
- package/src/HKT.ts +12 -6
- package/src/Hash.ts +52 -83
- package/src/HashMap.ts +319 -411
- package/src/HashRing.ts +1 -0
- package/src/HashSet.ts +177 -284
- package/src/Inspectable.ts +22 -20
- package/src/Iterable.ts +633 -797
- package/src/JsonPatch.ts +60 -113
- package/src/JsonPointer.ts +8 -8
- package/src/JsonSchema.ts +408 -251
- package/src/Latch.ts +23 -35
- package/src/Layer.ts +369 -268
- package/src/LayerMap.ts +49 -29
- package/src/LayerRef.ts +6 -2
- package/src/LogLevel.ts +114 -214
- package/src/Logger.ts +349 -701
- package/src/ManagedRuntime.ts +20 -5
- package/src/Match.ts +217 -252
- package/src/Metric.ts +520 -1092
- package/src/MutableHashMap.ts +218 -255
- package/src/MutableHashSet.ts +84 -89
- package/src/MutableList.ts +77 -370
- package/src/MutableRef.ts +420 -243
- package/src/Newtype.ts +21 -14
- package/src/NonEmptyIterable.ts +7 -137
- package/src/Number.ts +196 -233
- package/src/Optic.ts +303 -441
- package/src/Option.ts +449 -813
- package/src/Order.ts +109 -109
- package/src/Ordering.ts +20 -23
- package/src/PartitionedSemaphore.ts +1 -4
- package/src/Path.ts +38 -41
- package/src/Pipeable.ts +6 -5
- package/src/PlatformError.ts +4 -4
- package/src/Pool.ts +4 -2
- package/src/Predicate.ts +200 -181
- package/src/PrimaryKey.ts +7 -7
- package/src/PubSub.ts +526 -552
- package/src/Pull.ts +24 -18
- package/src/Queue.ts +204 -165
- package/src/Random.ts +49 -74
- package/src/RcMap.ts +121 -63
- package/src/RcRef.ts +24 -13
- package/src/Record.ts +387 -487
- package/src/Redactable.ts +10 -3
- package/src/Redacted.ts +25 -25
- package/src/Reducer.ts +8 -15
- package/src/Ref.ts +221 -361
- package/src/References.ts +102 -214
- package/src/RegExp.ts +10 -14
- package/src/Request.ts +36 -28
- package/src/RequestResolver.ts +202 -91
- package/src/Result.ts +314 -485
- package/src/Runtime.ts +50 -75
- package/src/Schedule.ts +311 -1737
- package/src/Scheduler.ts +20 -7
- package/src/Schema.ts +3475 -1913
- package/src/SchemaAST.ts +902 -573
- package/src/SchemaGetter.ts +351 -233
- package/src/SchemaIssue.ts +367 -334
- package/src/SchemaParser.ts +254 -148
- package/src/SchemaRepresentation.ts +732 -3414
- package/src/SchemaTransformation.ts +186 -97
- package/src/Scope.ts +123 -151
- package/src/ScopedCache.ts +1 -1
- package/src/ScopedRef.ts +6 -4
- package/src/Semaphore.ts +157 -54
- package/src/Sink.ts +129 -114
- package/src/Stdio.ts +24 -5
- package/src/Stream.ts +2745 -3173
- package/src/String.ts +275 -312
- package/src/Struct.ts +114 -118
- package/src/SubscriptionRef.ts +284 -252
- package/src/Symbol.ts +3 -3
- package/src/SynchronizedRef.ts +1 -1
- package/src/Terminal.ts +3 -3
- package/src/Tracer.ts +102 -55
- package/src/Trie.ts +287 -679
- package/src/Tuple.ts +99 -131
- package/src/TxChunk.ts +201 -121
- package/src/TxDeferred.ts +62 -46
- package/src/TxHashMap.ts +645 -799
- package/src/TxHashSet.ts +443 -356
- package/src/TxPriorityQueue.ts +130 -98
- package/src/TxPubSub.ts +107 -80
- package/src/TxQueue.ts +215 -184
- package/src/TxReentrantLock.ts +136 -101
- package/src/TxRef.ts +51 -32
- package/src/TxSemaphore.ts +129 -95
- package/src/TxSubscriptionRef.ts +97 -70
- package/src/Types.ts +127 -70
- package/src/Unify.ts +45 -65
- package/src/Utils.ts +23 -16
- package/src/index.ts +0 -10
- package/src/internal/core.ts +6 -5
- package/src/internal/dateTime.ts +7 -1
- package/src/internal/effect.ts +319 -149
- package/src/internal/executionPlan.ts +106 -10
- package/src/internal/hashMap.ts +20 -14
- package/src/internal/matcher.ts +3 -3
- package/src/internal/persistence.ts +2 -0
- package/src/internal/rcRef.ts +24 -16
- package/src/internal/record.ts +11 -7
- package/src/internal/references.ts +3 -7
- package/src/internal/schedule.ts +4 -4
- package/src/internal/schema/annotations.ts +48 -1
- package/src/internal/schema/fromJsonSchemaDocument.ts +977 -0
- package/src/internal/schema/fromRepresentation.ts +339 -0
- package/src/internal/schema/parser.ts +22 -0
- package/src/internal/schema/schema.ts +46 -63
- package/src/internal/schema/{arbitrary.ts → toArbitrary.ts} +9 -81
- package/src/internal/schema/toCodeDocument.ts +572 -0
- package/src/internal/schema/{equivalence.ts → toEquivalence.ts} +12 -7
- package/src/internal/schema/toJsonSchemaDocument.ts +549 -0
- package/src/internal/schema/toRepresentation.ts +404 -0
- package/src/internal/stackTraceLimit.ts +3 -7
- package/src/internal/trie.ts +21 -12
- package/src/internal/uuid.ts +51 -0
- package/src/testing/FastCheck.ts +8 -7
- package/src/testing/TestClock.ts +103 -36
- package/src/testing/TestConsole.ts +32 -31
- package/src/testing/TestSchema.ts +40 -40
- package/src/unstable/ai/AiError.ts +119 -141
- package/src/unstable/ai/AnthropicStructuredOutput.ts +103 -334
- package/src/unstable/ai/Chat.ts +133 -98
- package/src/unstable/ai/EmbeddingModel.ts +1 -1
- package/src/unstable/ai/IdGenerator.ts +32 -28
- package/src/unstable/ai/LanguageModel.ts +141 -97
- package/src/unstable/ai/McpProtocol.ts +137 -0
- package/src/unstable/ai/McpSchema.ts +199 -100
- package/src/unstable/ai/McpServer.ts +1360 -455
- package/src/unstable/ai/Model.ts +9 -20
- package/src/unstable/ai/OpenAiStructuredOutput.ts +231 -396
- package/src/unstable/ai/Prompt.ts +212 -63
- package/src/unstable/ai/Response.ts +52 -38
- package/src/unstable/ai/Telemetry.ts +46 -13
- package/src/unstable/ai/Tokenizer.ts +14 -3
- package/src/unstable/ai/Tool.ts +81 -48
- package/src/unstable/ai/Toolkit.ts +45 -15
- package/src/unstable/ai/index.ts +5 -0
- package/src/unstable/ai/internal/codec-transformer.ts +13 -7
- package/src/unstable/ai/internal/mcpCore.ts +457 -0
- package/src/unstable/ai/internal/mcpProtocol/v2024_11_05.ts +321 -0
- package/src/unstable/ai/internal/mcpProtocol/v2025_03_26.ts +347 -0
- package/src/unstable/ai/internal/mcpProtocol/v2025_06_18.ts +361 -0
- package/src/unstable/ai/internal/mcpProtocol.ts +336 -0
- package/src/unstable/ai/internal/mcpProtocolRegistry.ts +102 -0
- package/src/unstable/ai/internal/mcpSchema/v2024_11_05.ts +521 -0
- package/src/unstable/ai/internal/mcpSchema/v2025_03_26.ts +204 -0
- package/src/unstable/ai/internal/mcpSchema/v2025_06_18.ts +404 -0
- package/src/unstable/ai/internal/structured-output.ts +453 -0
- package/src/unstable/cli/Argument.ts +279 -72
- package/src/unstable/cli/CliError.ts +159 -91
- package/src/unstable/cli/CliOutput.ts +44 -58
- package/src/unstable/cli/Command.ts +764 -124
- package/src/unstable/cli/Flag.ts +418 -138
- package/src/unstable/cli/GlobalFlag.ts +1 -1
- package/src/unstable/cli/HelpDoc.ts +12 -4
- package/src/unstable/cli/Param.ts +336 -100
- package/src/unstable/cli/Primitive.ts +383 -156
- package/src/unstable/cli/Prompt.ts +64 -34
- package/src/unstable/cli/internal/ansi.ts +2 -2
- package/src/unstable/cli/internal/command.ts +28 -15
- package/src/unstable/cli/internal/completions/bash.ts +59 -9
- package/src/unstable/cli/internal/completions/descriptor.ts +14 -20
- package/src/unstable/cli/internal/completions/fish.ts +5 -7
- package/src/unstable/cli/internal/config.ts +8 -10
- package/src/unstable/cli/internal/help.ts +4 -2
- package/src/unstable/cli/internal/lexer.ts +8 -2
- package/src/unstable/cli/internal/parser.ts +5 -5
- package/src/unstable/cli/internal/wizard.ts +2 -2
- package/src/unstable/cluster/ClusterError.ts +10 -8
- package/src/unstable/cluster/ClusterSchema.ts +8 -8
- package/src/unstable/cluster/ClusterWorkflowEngine.ts +65 -39
- package/src/unstable/cluster/Entity.ts +23 -19
- package/src/unstable/cluster/EntityProxy.ts +16 -7
- package/src/unstable/cluster/EntityResource.ts +5 -5
- package/src/unstable/cluster/Envelope.ts +5 -4
- package/src/unstable/cluster/HttpRunner.ts +6 -4
- package/src/unstable/cluster/K8sHttpClient.ts +2 -2
- package/src/unstable/cluster/K8sTypes.ts +2467 -0
- package/src/unstable/cluster/Message.ts +9 -9
- package/src/unstable/cluster/MessageStorage.ts +106 -33
- package/src/unstable/cluster/Reply.ts +26 -7
- package/src/unstable/cluster/Runner.ts +1 -1
- package/src/unstable/cluster/RunnerAddress.ts +1 -1
- package/src/unstable/cluster/RunnerHealth.ts +1 -1
- package/src/unstable/cluster/RunnerServer.ts +45 -18
- package/src/unstable/cluster/RunnerStorage.ts +11 -9
- package/src/unstable/cluster/Runners.ts +48 -26
- package/src/unstable/cluster/ShardId.ts +1 -1
- package/src/unstable/cluster/Sharding.ts +360 -65
- package/src/unstable/cluster/ShardingConfig.ts +46 -4
- package/src/unstable/cluster/SingleRunner.ts +4 -2
- package/src/unstable/cluster/SingletonAddress.ts +1 -1
- package/src/unstable/cluster/Snowflake.ts +8 -8
- package/src/unstable/cluster/SqlMessageStorage.ts +212 -60
- package/src/unstable/cluster/SqlRunnerStorage.ts +223 -133
- package/src/unstable/cluster/index.ts +5 -0
- package/src/unstable/cluster/internal/entityManager.ts +72 -27
- package/src/unstable/cluster/internal/entityReaper.ts +2 -3
- package/src/unstable/cluster/internal/resourceMap.ts +13 -2
- package/src/unstable/cluster/internal/resourceRef.ts +27 -5
- package/src/unstable/cluster/internal/shardLock.ts +9 -0
- package/src/unstable/devtools/DevToolsClient.ts +3 -2
- package/src/unstable/devtools/DevToolsSchema.ts +10 -5
- package/src/unstable/encoding/Ini.ts +174 -0
- package/src/unstable/encoding/Msgpack.ts +61 -40
- package/src/unstable/encoding/Ndjson.ts +9 -1
- package/src/unstable/encoding/Sse.ts +109 -37
- package/src/unstable/encoding/Toml.ts +504 -0
- package/src/unstable/encoding/Yaml.ts +541 -0
- package/src/unstable/encoding/index.ts +15 -0
- package/src/unstable/eventlog/Event.ts +20 -20
- package/src/unstable/eventlog/EventGroup.ts +4 -4
- package/src/unstable/eventlog/EventJournal.ts +33 -25
- package/src/unstable/eventlog/EventLog.ts +24 -14
- package/src/unstable/eventlog/EventLogEncryption.ts +17 -18
- package/src/unstable/eventlog/EventLogMessage.ts +15 -9
- package/src/unstable/eventlog/EventLogRemote.ts +5 -5
- package/src/unstable/eventlog/EventLogServer.ts +41 -7
- package/src/unstable/eventlog/EventLogServerEncrypted.ts +16 -8
- package/src/unstable/eventlog/EventLogServerUnencrypted.ts +15 -7
- package/src/unstable/eventlog/EventLogSessionAuth.ts +1 -1
- package/src/unstable/eventlog/SqlEventJournal.ts +9 -7
- package/src/unstable/eventlog/SqlEventLogServerEncrypted.ts +1 -1
- package/src/unstable/eventlog/SqlEventLogServerUnencrypted.ts +6 -3
- package/src/unstable/http/Cookies.ts +64 -45
- package/src/unstable/http/Etag.ts +1 -1
- package/src/unstable/http/FetchHttpClient.ts +4 -2
- package/src/unstable/http/FindMyWay/internal/queryString.ts +420 -0
- package/src/unstable/http/FindMyWay/internal/router.ts +950 -0
- package/src/unstable/http/FindMyWay.ts +65 -6
- package/src/unstable/http/Headers.ts +10 -10
- package/src/unstable/http/HttpBody.ts +20 -5
- package/src/unstable/http/HttpClient.ts +215 -78
- package/src/unstable/http/HttpClientError.ts +1 -1
- package/src/unstable/http/HttpClientRequest.ts +59 -12
- package/src/unstable/http/HttpClientResponse.ts +5 -21
- package/src/unstable/http/HttpEffect.ts +27 -26
- package/src/unstable/http/HttpMethod.ts +6 -9
- package/src/unstable/http/HttpMiddleware.ts +202 -39
- package/src/unstable/http/HttpPlatform.ts +129 -6
- package/src/unstable/http/HttpRouter.ts +110 -102
- package/src/unstable/http/HttpServer.ts +13 -13
- package/src/unstable/http/HttpServerError.ts +2 -2
- package/src/unstable/http/HttpServerRequest.ts +31 -17
- package/src/unstable/http/HttpServerResponse.ts +38 -6
- package/src/unstable/http/HttpStaticServer.ts +35 -7
- package/src/unstable/http/HttpStatus.ts +100 -0
- package/src/unstable/http/Multipart.ts +67 -36
- package/src/unstable/http/MultipartParser/HeadersParser.ts +68 -0
- package/src/unstable/http/MultipartParser/Search.ts +17 -0
- package/src/unstable/http/MultipartParser/internal/contentType.ts +103 -0
- package/src/unstable/http/MultipartParser/internal/headers.ts +244 -0
- package/src/unstable/http/MultipartParser/internal/multipart.ts +279 -0
- package/src/unstable/http/MultipartParser/internal/search.ts +167 -0
- package/src/unstable/http/MultipartParser.ts +115 -0
- package/src/unstable/http/Template.ts +7 -6
- package/src/unstable/http/Url.ts +33 -63
- package/src/unstable/http/UrlParams.ts +27 -32
- package/src/unstable/http/index.ts +6 -1
- package/src/unstable/http/internal/compression.ts +196 -0
- package/src/unstable/http/internal/httpBody.ts +15 -0
- package/src/unstable/httpapi/HttpApi.ts +10 -11
- package/src/unstable/httpapi/HttpApiBuilder.ts +154 -33
- package/src/unstable/httpapi/HttpApiClient.ts +142 -61
- package/src/unstable/httpapi/HttpApiEndpoint.ts +159 -71
- package/src/unstable/httpapi/HttpApiError.ts +46 -52
- package/src/unstable/httpapi/HttpApiGroup.ts +17 -17
- package/src/unstable/httpapi/HttpApiMiddleware.ts +71 -24
- package/src/unstable/httpapi/HttpApiScalar.ts +0 -12
- package/src/unstable/httpapi/HttpApiSchema.ts +362 -73
- package/src/unstable/httpapi/OpenApi.ts +153 -62
- package/src/unstable/observability/OtlpExporter.ts +130 -12
- package/src/unstable/observability/OtlpLogger.ts +8 -6
- package/src/unstable/observability/OtlpMetrics.ts +42 -21
- package/src/unstable/observability/OtlpResource.ts +26 -17
- package/src/unstable/observability/OtlpTracer.ts +9 -5
- package/src/unstable/observability/PrometheusMetrics.ts +13 -4
- package/src/unstable/observability/internal/otlpEnv.ts +1 -1
- package/src/unstable/observability/internal/protobuf.ts +3 -0
- package/src/unstable/persistence/KeyValueStore.ts +72 -49
- package/src/unstable/persistence/Persistable.ts +11 -10
- package/src/unstable/persistence/PersistedQueue.ts +129 -108
- package/src/unstable/persistence/Persistence.ts +153 -26
- package/src/unstable/persistence/RateLimiter.ts +79 -45
- package/src/unstable/persistence/Redis.ts +5 -5
- package/src/unstable/process/ChildProcess.ts +72 -21
- package/src/unstable/process/ChildProcessSpawner.ts +22 -11
- package/src/unstable/reactivity/AsyncResult.ts +23 -18
- package/src/unstable/reactivity/Atom.ts +170 -56
- package/src/unstable/reactivity/AtomHttpApi.ts +5 -4
- package/src/unstable/reactivity/AtomRegistry.ts +25 -4
- package/src/unstable/reactivity/AtomRpc.ts +5 -4
- package/src/unstable/reactivity/Hydration.ts +1 -1
- package/src/unstable/reactivity/Reactivity.ts +1 -1
- package/src/unstable/rpc/Rpc.ts +35 -33
- package/src/unstable/rpc/RpcClient.ts +66 -30
- package/src/unstable/rpc/RpcClientError.ts +2 -2
- package/src/unstable/rpc/RpcGroup.ts +9 -9
- package/src/unstable/rpc/RpcMessage.ts +31 -30
- package/src/unstable/rpc/RpcMiddleware.ts +10 -10
- package/src/unstable/rpc/RpcSchema.ts +4 -4
- package/src/unstable/rpc/RpcSerialization.ts +168 -69
- package/src/unstable/rpc/RpcServer.ts +28 -22
- package/src/unstable/rpc/RpcWorker.ts +5 -5
- package/src/unstable/schema/Model.ts +60 -58
- package/src/unstable/schema/VariantSchema.ts +51 -43
- package/src/unstable/socket/Socket.ts +42 -19
- package/src/unstable/sql/Migrator.ts +22 -9
- package/src/unstable/sql/SqlClient.ts +71 -60
- package/src/unstable/sql/SqlError.ts +15 -15
- package/src/unstable/sql/SqlModel.ts +2 -2
- package/src/unstable/sql/SqlResolver.ts +44 -33
- package/src/unstable/sql/Statement.ts +44 -37
- package/src/unstable/workers/Transferable.ts +1 -1
- package/src/unstable/workers/Worker.ts +15 -16
- package/src/unstable/workers/WorkerError.ts +12 -12
- package/src/unstable/workers/WorkerRunner.ts +1 -1
- package/src/unstable/workflow/Activity.ts +2 -2
- package/src/unstable/workflow/DurableClock.ts +1 -1
- package/src/unstable/workflow/DurableDeferred.ts +18 -13
- package/src/unstable/workflow/DurableQueue.ts +22 -20
- package/src/unstable/workflow/Workflow.ts +23 -26
- package/src/unstable/workflow/WorkflowEngine.ts +111 -8
- package/src/unstable/workflow/WorkflowProxy.ts +4 -2
- package/dist/SchemaError.d.ts +0 -53
- package/dist/SchemaError.d.ts.map +0 -1
- package/dist/SchemaError.js +0 -61
- package/dist/SchemaError.js.map +0 -1
- package/dist/SchemaUtils.d.ts +0 -28
- package/dist/SchemaUtils.d.ts.map +0 -1
- package/dist/SchemaUtils.js +0 -45
- package/dist/SchemaUtils.js.map +0 -1
- package/dist/internal/schema/arbitrary.d.ts +0 -5
- package/dist/internal/schema/arbitrary.d.ts.map +0 -1
- package/dist/internal/schema/arbitrary.js.map +0 -1
- package/dist/internal/schema/equivalence.d.ts +0 -2
- package/dist/internal/schema/equivalence.d.ts.map +0 -1
- package/dist/internal/schema/equivalence.js.map +0 -1
- package/dist/internal/schema/representation.d.ts +0 -2
- package/dist/internal/schema/representation.d.ts.map +0 -1
- package/dist/internal/schema/representation.js +0 -865
- package/dist/internal/schema/representation.js.map +0 -1
- package/dist/internal/version.d.ts +0 -3
- package/dist/internal/version.d.ts.map +0 -1
- package/dist/internal/version.js +0 -2
- package/dist/internal/version.js.map +0 -1
- package/dist/unstable/http/Multipasta/HeadersParser.d.ts +0 -14
- package/dist/unstable/http/Multipasta/HeadersParser.d.ts.map +0 -1
- package/dist/unstable/http/Multipasta/HeadersParser.js +0 -14
- package/dist/unstable/http/Multipasta/HeadersParser.js.map +0 -1
- package/dist/unstable/http/Multipasta/Node.d.ts +0 -14
- package/dist/unstable/http/Multipasta/Node.d.ts.map +0 -1
- package/dist/unstable/http/Multipasta/Node.js +0 -14
- package/dist/unstable/http/Multipasta/Node.js.map +0 -1
- package/dist/unstable/http/Multipasta/Search.d.ts +0 -14
- package/dist/unstable/http/Multipasta/Search.d.ts.map +0 -1
- package/dist/unstable/http/Multipasta/Search.js +0 -14
- package/dist/unstable/http/Multipasta/Search.js.map +0 -1
- package/dist/unstable/http/Multipasta/Web.d.ts +0 -14
- package/dist/unstable/http/Multipasta/Web.d.ts.map +0 -1
- package/dist/unstable/http/Multipasta/Web.js +0 -14
- package/dist/unstable/http/Multipasta/Web.js.map +0 -1
- package/dist/unstable/http/Multipasta.d.ts +0 -15
- package/dist/unstable/http/Multipasta.d.ts.map +0 -1
- package/dist/unstable/http/Multipasta.js +0 -15
- package/dist/unstable/http/Multipasta.js.map +0 -1
- package/src/SchemaError.ts +0 -64
- package/src/SchemaUtils.ts +0 -51
- package/src/internal/schema/representation.ts +0 -795
- package/src/internal/version.ts +0 -2
- package/src/unstable/http/Multipasta/HeadersParser.ts +0 -14
- package/src/unstable/http/Multipasta/Node.ts +0 -14
- package/src/unstable/http/Multipasta/Search.ts +0 -14
- package/src/unstable/http/Multipasta/Web.ts +0 -14
- package/src/unstable/http/Multipasta.ts +0 -15
|
@@ -13,20 +13,23 @@
|
|
|
13
13
|
import * as Arr from "../../Array.ts"
|
|
14
14
|
import * as Cause from "../../Cause.ts"
|
|
15
15
|
import * as Context from "../../Context.ts"
|
|
16
|
+
import * as Data from "../../Data.ts"
|
|
16
17
|
import * as Effect from "../../Effect.ts"
|
|
17
18
|
import * as Exit from "../../Exit.ts"
|
|
18
19
|
import * as Fiber from "../../Fiber.ts"
|
|
19
20
|
import * as Layer from "../../Layer.ts"
|
|
21
|
+
import * as LogLevel from "../../LogLevel.ts"
|
|
20
22
|
import * as Option from "../../Option.ts"
|
|
23
|
+
import * as Predicate from "../../Predicate.ts"
|
|
21
24
|
import * as Queue from "../../Queue.ts"
|
|
22
25
|
import * as RcMap from "../../RcMap.ts"
|
|
23
26
|
import { CurrentLogLevel } from "../../References.ts"
|
|
27
|
+
import * as Result from "../../Result.ts"
|
|
24
28
|
import * as Schema from "../../Schema.ts"
|
|
25
29
|
import * as SchemaAST from "../../SchemaAST.ts"
|
|
26
30
|
import * as Sink from "../../Sink.ts"
|
|
27
31
|
import type { Stdio } from "../../Stdio.ts"
|
|
28
32
|
import * as Stream from "../../Stream.ts"
|
|
29
|
-
import type * as Types from "../../Types.ts"
|
|
30
33
|
import * as FindMyWay from "../http/FindMyWay.ts"
|
|
31
34
|
import * as Headers from "../http/Headers.ts"
|
|
32
35
|
import { appendPreResponseHandlerUnsafe } from "../http/HttpEffect.ts"
|
|
@@ -35,42 +38,46 @@ import * as HttpServerRequest from "../http/HttpServerRequest.ts"
|
|
|
35
38
|
import * as HttpServerResponse from "../http/HttpServerResponse.ts"
|
|
36
39
|
import * as Rpc from "../rpc/Rpc.ts"
|
|
37
40
|
import * as RpcClient from "../rpc/RpcClient.ts"
|
|
38
|
-
import
|
|
41
|
+
import * as RpcGroup from "../rpc/RpcGroup.ts"
|
|
39
42
|
import * as RpcMessage from "../rpc/RpcMessage.ts"
|
|
40
43
|
import * as RpcSerialization from "../rpc/RpcSerialization.ts"
|
|
41
44
|
import * as RpcServer from "../rpc/RpcServer.ts"
|
|
45
|
+
import * as AiError from "./AiError.ts"
|
|
46
|
+
import * as McpCore from "./internal/mcpCore.ts"
|
|
47
|
+
import * as McpProtocolInternal from "./internal/mcpProtocol.ts"
|
|
48
|
+
import * as McpProtocolRegistry from "./internal/mcpProtocolRegistry.ts"
|
|
49
|
+
import type * as McpProtocol from "./McpProtocol.ts"
|
|
50
|
+
import * as McpSchema from "./McpSchema.ts"
|
|
42
51
|
import {
|
|
43
52
|
CallToolResult,
|
|
44
|
-
ClientNotificationRpcs,
|
|
45
|
-
ClientRpcs,
|
|
46
|
-
CompleteResult,
|
|
47
53
|
Elicit,
|
|
48
54
|
ElicitationDeclined,
|
|
49
55
|
EnabledWhen,
|
|
50
56
|
GetPromptResult,
|
|
57
|
+
Initialize,
|
|
51
58
|
InternalError,
|
|
52
59
|
InvalidParams,
|
|
60
|
+
InvalidRequest,
|
|
53
61
|
isParam,
|
|
54
|
-
ListPromptsResult,
|
|
55
|
-
ListResourcesResult,
|
|
56
|
-
ListResourceTemplatesResult,
|
|
57
|
-
ListToolsResult,
|
|
58
62
|
McpServerClient,
|
|
59
63
|
McpServerClientMiddleware,
|
|
64
|
+
MethodNotFound,
|
|
65
|
+
Ping,
|
|
60
66
|
Prompt,
|
|
61
67
|
Resource,
|
|
62
68
|
ResourceTemplate,
|
|
63
69
|
ServerNotificationRpcs,
|
|
64
|
-
ServerRequestRpcs,
|
|
65
70
|
TextContent,
|
|
66
|
-
Tool as McpTool
|
|
71
|
+
Tool as McpTool,
|
|
72
|
+
ToolJsonSchema
|
|
67
73
|
} from "./McpSchema.ts"
|
|
68
74
|
import type {
|
|
69
75
|
CallTool,
|
|
70
76
|
ClientCapabilities,
|
|
71
77
|
Complete,
|
|
78
|
+
CompleteResult,
|
|
72
79
|
GetPrompt,
|
|
73
|
-
|
|
80
|
+
McpErrorBase,
|
|
74
81
|
Param,
|
|
75
82
|
PromptArgument,
|
|
76
83
|
PromptMessage,
|
|
@@ -80,6 +87,71 @@ import type {
|
|
|
80
87
|
import * as Tool from "./Tool.ts"
|
|
81
88
|
import type * as Toolkit from "./Toolkit.ts"
|
|
82
89
|
|
|
90
|
+
type CompletionContext = typeof Complete.payloadSchema.Type["context"]
|
|
91
|
+
|
|
92
|
+
const internalState = new WeakMap<object, {
|
|
93
|
+
readonly core: McpCore.McpCore
|
|
94
|
+
readonly notifications: Queue.Dequeue<McpCore.ServerNotification>
|
|
95
|
+
}>()
|
|
96
|
+
type ServerExtensions = NonNullable<typeof ServerCapabilities.Type["extensions"]>
|
|
97
|
+
type ServerNotificationRequest<
|
|
98
|
+
R extends Rpc.Any = RpcGroup.Rpcs<typeof ServerNotificationRpcs>
|
|
99
|
+
> = R extends Rpc.Any ? RpcMessage.Request<R> : never
|
|
100
|
+
|
|
101
|
+
const validateStructuredContent = (
|
|
102
|
+
toolName: string,
|
|
103
|
+
value: unknown
|
|
104
|
+
): Effect.Effect<Schema.Json, McpCore.ToolResultProjectionError> =>
|
|
105
|
+
Schema.is(Schema.Json)(value)
|
|
106
|
+
? Effect.succeed(value)
|
|
107
|
+
: Effect.fail(
|
|
108
|
+
new McpCore.ToolResultProjectionError({
|
|
109
|
+
name: toolName,
|
|
110
|
+
message: `Tool '${toolName}' returned structured content that is not valid JSON`
|
|
111
|
+
})
|
|
112
|
+
)
|
|
113
|
+
|
|
114
|
+
const toInternalServerNotification = (
|
|
115
|
+
message: ServerNotificationRequest
|
|
116
|
+
): McpCore.ServerNotification | undefined => {
|
|
117
|
+
switch (message.tag) {
|
|
118
|
+
case "notifications/cancelled":
|
|
119
|
+
return McpCore.ServerNotification.Cancelled({
|
|
120
|
+
requestId: message.payload.requestId,
|
|
121
|
+
reason: message.payload.reason,
|
|
122
|
+
metadata: message.payload._meta
|
|
123
|
+
})
|
|
124
|
+
case "notifications/progress":
|
|
125
|
+
return McpCore.ServerNotification.Progress({
|
|
126
|
+
progressToken: message.payload.progressToken,
|
|
127
|
+
progress: message.payload.progress,
|
|
128
|
+
total: message.payload.total,
|
|
129
|
+
message: message.payload.message,
|
|
130
|
+
metadata: message.payload._meta
|
|
131
|
+
})
|
|
132
|
+
case "notifications/message":
|
|
133
|
+
return McpCore.ServerNotification.LoggingMessage({
|
|
134
|
+
level: message.payload.level,
|
|
135
|
+
logger: message.payload.logger,
|
|
136
|
+
data: message.payload.data,
|
|
137
|
+
metadata: message.payload._meta
|
|
138
|
+
})
|
|
139
|
+
case "notifications/resources/updated":
|
|
140
|
+
return McpCore.ServerNotification.ResourceUpdated({
|
|
141
|
+
uri: message.payload.uri,
|
|
142
|
+
metadata: message.payload._meta
|
|
143
|
+
})
|
|
144
|
+
case "notifications/resources/list_changed":
|
|
145
|
+
return McpCore.ServerNotification.ResourcesChanged({ metadata: message.payload?._meta })
|
|
146
|
+
case "notifications/tools/list_changed":
|
|
147
|
+
return McpCore.ServerNotification.ToolsChanged({ metadata: message.payload?._meta })
|
|
148
|
+
case "notifications/prompts/list_changed":
|
|
149
|
+
return McpCore.ServerNotification.PromptsChanged({ metadata: message.payload?._meta })
|
|
150
|
+
default:
|
|
151
|
+
return undefined
|
|
152
|
+
}
|
|
153
|
+
}
|
|
154
|
+
|
|
83
155
|
/**
|
|
84
156
|
* Service that stores and serves an MCP server's registered tools, resources,
|
|
85
157
|
* prompts, completions, and outgoing notifications.
|
|
@@ -89,14 +161,12 @@ import type * as Toolkit from "./Toolkit.ts"
|
|
|
89
161
|
* Handlers use this service to register capabilities and resolve incoming MCP
|
|
90
162
|
* requests.
|
|
91
163
|
*
|
|
92
|
-
* @category
|
|
164
|
+
* @category services
|
|
93
165
|
* @since 4.0.0
|
|
94
166
|
*/
|
|
95
167
|
export class McpServer extends Context.Service<McpServer, {
|
|
96
168
|
readonly notifications: RpcClient.RpcClient<RpcGroup.Rpcs<typeof ServerNotificationRpcs>>
|
|
97
|
-
readonly notificationsQueue: Queue.Dequeue<RpcMessage.Request<any>>
|
|
98
169
|
readonly initializedClients: Set<number>
|
|
99
|
-
|
|
100
170
|
readonly tools: ReadonlyArray<{
|
|
101
171
|
readonly tool: McpTool
|
|
102
172
|
readonly annotations: Context.Context<never>
|
|
@@ -104,7 +174,7 @@ export class McpServer extends Context.Service<McpServer, {
|
|
|
104
174
|
readonly addTool: (options: {
|
|
105
175
|
readonly tool: McpTool
|
|
106
176
|
readonly annotations: Context.Context<never>
|
|
107
|
-
readonly handle: (payload: any) => Effect.Effect<CallToolResult,
|
|
177
|
+
readonly handle: (payload: any) => Effect.Effect<CallToolResult, InternalError | InvalidParams, McpServerClient>
|
|
108
178
|
}) => Effect.Effect<void>
|
|
109
179
|
readonly callTool: (
|
|
110
180
|
requests: typeof CallTool.payloadSchema.Type
|
|
@@ -129,17 +199,27 @@ export class McpServer extends Context.Service<McpServer, {
|
|
|
129
199
|
readonly template: ResourceTemplate
|
|
130
200
|
readonly annotations: Context.Context<never>
|
|
131
201
|
readonly routerPath: string
|
|
132
|
-
readonly completions: Record<
|
|
202
|
+
readonly completions: Record<
|
|
203
|
+
string,
|
|
204
|
+
(
|
|
205
|
+
input: string,
|
|
206
|
+
context: CompletionContext
|
|
207
|
+
) => Effect.Effect<CompleteResult, InternalError>
|
|
208
|
+
>
|
|
133
209
|
readonly handle: (
|
|
134
210
|
uri: string,
|
|
135
211
|
params: Array<string>
|
|
136
|
-
) => Effect.Effect<
|
|
212
|
+
) => Effect.Effect<
|
|
213
|
+
typeof ReadResourceResult.Type,
|
|
214
|
+
InvalidParams | InternalError,
|
|
215
|
+
McpServerClient
|
|
216
|
+
>
|
|
137
217
|
}
|
|
138
218
|
) => Effect.Effect<void>
|
|
139
219
|
|
|
140
220
|
readonly findResource: (
|
|
141
221
|
uri: string
|
|
142
|
-
) => Effect.Effect<typeof ReadResourceResult.Type, InvalidParams | InternalError, McpServerClient>
|
|
222
|
+
) => Effect.Effect<typeof ReadResourceResult.Type, McpErrorBase | InvalidParams | InternalError, McpServerClient>
|
|
143
223
|
|
|
144
224
|
readonly prompts: ReadonlyArray<{
|
|
145
225
|
readonly prompt: Prompt
|
|
@@ -150,7 +230,10 @@ export class McpServer extends Context.Service<McpServer, {
|
|
|
150
230
|
readonly annotations: Context.Context<never>
|
|
151
231
|
readonly completions: Record<
|
|
152
232
|
string,
|
|
153
|
-
(
|
|
233
|
+
(
|
|
234
|
+
input: string,
|
|
235
|
+
context: CompletionContext
|
|
236
|
+
) => Effect.Effect<CompleteResult, InternalError, McpServerClient>
|
|
154
237
|
>
|
|
155
238
|
readonly handle: (
|
|
156
239
|
params: Record<string, string>
|
|
@@ -162,7 +245,7 @@ export class McpServer extends Context.Service<McpServer, {
|
|
|
162
245
|
|
|
163
246
|
readonly completion: (
|
|
164
247
|
complete: typeof Complete.payloadSchema.Type
|
|
165
|
-
) => Effect.Effect<CompleteResult, InternalError, McpServerClient>
|
|
248
|
+
) => Effect.Effect<CompleteResult, InvalidParams | InternalError, McpServerClient>
|
|
166
249
|
}>()("effect/ai/McpServer") {
|
|
167
250
|
/**
|
|
168
251
|
* Builds an MCP server service from registered tools, prompts, resources, and completions.
|
|
@@ -170,23 +253,11 @@ export class McpServer extends Context.Service<McpServer, {
|
|
|
170
253
|
* @since 4.0.0
|
|
171
254
|
*/
|
|
172
255
|
static readonly make = Effect.gen(function*() {
|
|
173
|
-
const
|
|
174
|
-
{
|
|
175
|
-
readonly _tag: "ResourceTemplate"
|
|
176
|
-
readonly handle: (
|
|
177
|
-
uri: string,
|
|
178
|
-
params: Array<string>
|
|
179
|
-
) => Effect.Effect<typeof ReadResourceResult.Type, InternalError | InvalidParams, McpServerClient>
|
|
180
|
-
} | {
|
|
181
|
-
readonly _tag: "Resource"
|
|
182
|
-
readonly effect: Effect.Effect<typeof ReadResourceResult.Type, InternalError, McpServerClient>
|
|
183
|
-
}
|
|
184
|
-
>()
|
|
256
|
+
const internalCore = yield* McpCore.make
|
|
185
257
|
const tools = Arr.empty<{
|
|
186
258
|
readonly tool: McpTool
|
|
187
259
|
readonly annotations: Context.Context<never>
|
|
188
260
|
}>()
|
|
189
|
-
const toolMap = new Map<string, (payload: any) => Effect.Effect<CallToolResult, InternalError, McpServerClient>>()
|
|
190
261
|
const resources: Array<{
|
|
191
262
|
readonly resource: Resource
|
|
192
263
|
readonly annotations: Context.Context<never>
|
|
@@ -199,15 +270,7 @@ export class McpServer extends Context.Service<McpServer, {
|
|
|
199
270
|
readonly prompt: Prompt
|
|
200
271
|
readonly annotations: Context.Context<never>
|
|
201
272
|
}> = []
|
|
202
|
-
const
|
|
203
|
-
string,
|
|
204
|
-
(params: Record<string, string>) => Effect.Effect<GetPromptResult, InternalError | InvalidParams, McpServerClient>
|
|
205
|
-
>()
|
|
206
|
-
const completionsMap = new Map<
|
|
207
|
-
string,
|
|
208
|
-
(input: string) => Effect.Effect<CompleteResult, InternalError, McpServerClient>
|
|
209
|
-
>()
|
|
210
|
-
const notificationsQueue = yield* Queue.make<RpcMessage.Request<any>>()
|
|
273
|
+
const notificationsQueue = yield* Queue.make<McpCore.ServerNotification>()
|
|
211
274
|
const listChangedHandles = new Map<string, any>()
|
|
212
275
|
const notifications = yield* RpcClient.makeNoSerialization(ServerNotificationRpcs, {
|
|
213
276
|
spanPrefix: "McpServer/Notifications",
|
|
@@ -217,48 +280,114 @@ export class McpServer extends Context.Service<McpServer, {
|
|
|
217
280
|
if (message._tag !== "Request") {
|
|
218
281
|
return Effect.void
|
|
219
282
|
}
|
|
283
|
+
const notification = toInternalServerNotification(message)
|
|
284
|
+
if (notification === undefined) {
|
|
285
|
+
return Effect.void
|
|
286
|
+
}
|
|
220
287
|
if (message.tag.includes("list_changed")) {
|
|
221
288
|
if (!listChangedHandles.has(message.tag)) {
|
|
222
289
|
listChangedHandles.set(
|
|
223
290
|
message.tag,
|
|
224
291
|
setTimeout(() => {
|
|
225
|
-
Queue.offerUnsafe(notificationsQueue,
|
|
292
|
+
Queue.offerUnsafe(notificationsQueue, notification)
|
|
226
293
|
listChangedHandles.delete(message.tag)
|
|
227
294
|
}, 0)
|
|
228
295
|
)
|
|
229
296
|
}
|
|
230
297
|
} else {
|
|
231
|
-
Queue.offerUnsafe(notificationsQueue,
|
|
298
|
+
Queue.offerUnsafe(notificationsQueue, notification)
|
|
232
299
|
}
|
|
233
300
|
return notifications.write({
|
|
234
301
|
clientId: 0,
|
|
235
302
|
requestId: message.id,
|
|
236
303
|
_tag: "Exit",
|
|
237
|
-
exit: Exit.void
|
|
304
|
+
exit: Exit.void
|
|
238
305
|
})
|
|
239
306
|
})
|
|
240
307
|
})
|
|
241
308
|
|
|
242
|
-
|
|
309
|
+
const service = McpServer.of({
|
|
243
310
|
notifications: notifications.client,
|
|
244
|
-
notificationsQueue,
|
|
245
311
|
initializedClients: new Set(),
|
|
246
312
|
get tools() {
|
|
247
313
|
return tools
|
|
248
314
|
},
|
|
249
315
|
addTool: (options) =>
|
|
250
|
-
Effect.
|
|
251
|
-
tools.
|
|
252
|
-
|
|
253
|
-
|
|
316
|
+
Effect.gen(function*() {
|
|
317
|
+
const existingIndex = tools.findIndex(({ tool }) => tool.name === options.tool.name)
|
|
318
|
+
if (existingIndex === -1) {
|
|
319
|
+
tools.push(options)
|
|
320
|
+
} else {
|
|
321
|
+
tools[existingIndex] = options
|
|
322
|
+
}
|
|
323
|
+
const enabledWhen = Context.getOrUndefined(options.annotations, EnabledWhen)
|
|
324
|
+
yield* internalCore.tools.register({
|
|
325
|
+
descriptor: new McpTool({
|
|
326
|
+
...options.tool,
|
|
327
|
+
title: options.tool.title ?? options.tool.annotations?.title
|
|
328
|
+
}),
|
|
329
|
+
isVisible: (profile) =>
|
|
330
|
+
enabledWhen === undefined || enabledWhen(
|
|
331
|
+
{
|
|
332
|
+
protocolVersion: profile.protocolVersion,
|
|
333
|
+
capabilities: profile.clientCapabilities,
|
|
334
|
+
clientInfo: profile.clientInfo
|
|
335
|
+
}
|
|
336
|
+
),
|
|
337
|
+
handle: (call, invocation) =>
|
|
338
|
+
options.handle(call.arguments).pipe(
|
|
339
|
+
Effect.provideService(
|
|
340
|
+
McpServerClient,
|
|
341
|
+
invocation.requestContext
|
|
342
|
+
),
|
|
343
|
+
Effect.catchTags({
|
|
344
|
+
InternalError: (error) =>
|
|
345
|
+
Effect.fail(
|
|
346
|
+
new McpCore.ToolExecutionError({
|
|
347
|
+
name: options.tool.name,
|
|
348
|
+
message: error.message
|
|
349
|
+
})
|
|
350
|
+
),
|
|
351
|
+
InvalidParams: (error) =>
|
|
352
|
+
Effect.fail(
|
|
353
|
+
new McpCore.InvalidToolInput({
|
|
354
|
+
name: options.tool.name,
|
|
355
|
+
message: error.message
|
|
356
|
+
})
|
|
357
|
+
)
|
|
358
|
+
}),
|
|
359
|
+
Effect.flatMap((result) =>
|
|
360
|
+
result.structuredContent === undefined
|
|
361
|
+
? Effect.succeed(result)
|
|
362
|
+
: validateStructuredContent(options.tool.name, result.structuredContent).pipe(
|
|
363
|
+
Effect.as(result)
|
|
364
|
+
)
|
|
365
|
+
)
|
|
366
|
+
)
|
|
367
|
+
})
|
|
368
|
+
yield* notifications.client["notifications/tools/list_changed"]({})
|
|
254
369
|
}),
|
|
255
370
|
callTool: (request) =>
|
|
256
|
-
Effect.
|
|
257
|
-
const
|
|
258
|
-
|
|
259
|
-
|
|
260
|
-
|
|
261
|
-
|
|
371
|
+
Effect.gen(function*() {
|
|
372
|
+
const client = yield* McpServerClient
|
|
373
|
+
const result = yield* internalCore.tools.call(request, {
|
|
374
|
+
clientId: client.clientId,
|
|
375
|
+
protocol: {
|
|
376
|
+
protocolVersion: client.protocolVersion,
|
|
377
|
+
clientCapabilities: client.initializePayload.capabilities,
|
|
378
|
+
clientInfo: client.initializePayload.clientInfo
|
|
379
|
+
},
|
|
380
|
+
requestContext: client
|
|
381
|
+
}).pipe(
|
|
382
|
+
Effect.mapError((error) =>
|
|
383
|
+
new InvalidParams({
|
|
384
|
+
message: error._tag === "ToolNotFound"
|
|
385
|
+
? `Tool '${error.name}' not found`
|
|
386
|
+
: error.message
|
|
387
|
+
})
|
|
388
|
+
)
|
|
389
|
+
)
|
|
390
|
+
return result
|
|
262
391
|
}),
|
|
263
392
|
get resources() {
|
|
264
393
|
return resources
|
|
@@ -267,62 +396,179 @@ export class McpServer extends Context.Service<McpServer, {
|
|
|
267
396
|
return resourceTemplates
|
|
268
397
|
},
|
|
269
398
|
addResource: (options) =>
|
|
270
|
-
Effect.
|
|
271
|
-
resources.
|
|
272
|
-
|
|
273
|
-
|
|
399
|
+
Effect.gen(function*() {
|
|
400
|
+
const existingIndex = resources.findIndex(({ resource }) => resource.uri === options.resource.uri)
|
|
401
|
+
if (existingIndex === -1) {
|
|
402
|
+
resources.push(options)
|
|
403
|
+
} else {
|
|
404
|
+
resources[existingIndex] = options
|
|
405
|
+
}
|
|
406
|
+
yield* internalCore.resources.register({
|
|
407
|
+
descriptor: options.resource,
|
|
408
|
+
isVisible: (profile) => {
|
|
409
|
+
const enabledWhen = Context.getOrUndefined(options.annotations, EnabledWhen)
|
|
410
|
+
return enabledWhen === undefined || enabledWhen({
|
|
411
|
+
protocolVersion: profile.protocolVersion,
|
|
412
|
+
capabilities: profile.clientCapabilities,
|
|
413
|
+
clientInfo: profile.clientInfo
|
|
414
|
+
})
|
|
415
|
+
},
|
|
416
|
+
read: (invocation) =>
|
|
417
|
+
options.handle.pipe(
|
|
418
|
+
Effect.provideService(McpServerClient, invocation.requestContext)
|
|
419
|
+
)
|
|
420
|
+
})
|
|
421
|
+
yield* notifications.client["notifications/resources/list_changed"]({})
|
|
274
422
|
}),
|
|
275
423
|
addResourceTemplate: ({ annotations, completions, handle, routerPath, template }) =>
|
|
276
|
-
Effect.
|
|
277
|
-
resourceTemplates.
|
|
278
|
-
|
|
424
|
+
Effect.gen(function*() {
|
|
425
|
+
const existingIndex = resourceTemplates.findIndex(({ template: current }) =>
|
|
426
|
+
current.uriTemplate === template.uriTemplate
|
|
427
|
+
)
|
|
428
|
+
if (existingIndex === -1) {
|
|
429
|
+
resourceTemplates.push({ template, annotations })
|
|
430
|
+
} else {
|
|
431
|
+
resourceTemplates[existingIndex] = { template, annotations }
|
|
432
|
+
}
|
|
433
|
+
const templateMatcher = makeUriMatcher<true>()
|
|
434
|
+
templateMatcher.add(routerPath, true)
|
|
435
|
+
yield* internalCore.resources.registerTemplate({
|
|
436
|
+
descriptor: template,
|
|
437
|
+
isVisible: (profile) => {
|
|
438
|
+
const enabledWhen = Context.getOrUndefined(annotations, EnabledWhen)
|
|
439
|
+
return enabledWhen === undefined || enabledWhen({
|
|
440
|
+
protocolVersion: profile.protocolVersion,
|
|
441
|
+
capabilities: profile.clientCapabilities,
|
|
442
|
+
clientInfo: profile.clientInfo
|
|
443
|
+
})
|
|
444
|
+
},
|
|
445
|
+
match: (uri) => {
|
|
446
|
+
const match = templateMatcher.find(uri)
|
|
447
|
+
if (match === undefined) {
|
|
448
|
+
return undefined
|
|
449
|
+
}
|
|
450
|
+
const params: Array<string> = []
|
|
451
|
+
for (const key of Object.keys(match.params)) {
|
|
452
|
+
params[Number(key)] = match.params[key]!
|
|
453
|
+
}
|
|
454
|
+
return params
|
|
455
|
+
},
|
|
456
|
+
read: (uri, params, invocation) =>
|
|
457
|
+
handle(uri, Array.from(params)).pipe(
|
|
458
|
+
Effect.provideService(McpServerClient, invocation.requestContext)
|
|
459
|
+
)
|
|
460
|
+
})
|
|
279
461
|
for (const [param, handle] of Object.entries(completions)) {
|
|
280
|
-
|
|
462
|
+
yield* internalCore.completions.register(
|
|
463
|
+
`resource/${template.uriTemplate}/${param}`,
|
|
464
|
+
(request) =>
|
|
465
|
+
handle(request.argument.value, request.context).pipe(
|
|
466
|
+
Effect.map((result) => ({
|
|
467
|
+
values: result.completion.values,
|
|
468
|
+
total: result.completion.total,
|
|
469
|
+
hasMore: result.completion.hasMore,
|
|
470
|
+
metadata: result._meta
|
|
471
|
+
}))
|
|
472
|
+
)
|
|
473
|
+
)
|
|
281
474
|
}
|
|
282
|
-
|
|
475
|
+
yield* notifications.client["notifications/resources/list_changed"]({})
|
|
283
476
|
}),
|
|
284
477
|
findResource: (uri) =>
|
|
285
|
-
Effect.
|
|
286
|
-
const
|
|
287
|
-
|
|
288
|
-
|
|
289
|
-
|
|
290
|
-
|
|
291
|
-
|
|
292
|
-
|
|
293
|
-
|
|
294
|
-
|
|
295
|
-
|
|
296
|
-
|
|
478
|
+
Effect.gen(function*() {
|
|
479
|
+
const client = yield* McpServerClient
|
|
480
|
+
return yield* internalCore.resources.read(uri, {
|
|
481
|
+
clientId: client.clientId,
|
|
482
|
+
protocol: {
|
|
483
|
+
protocolVersion: client.protocolVersion,
|
|
484
|
+
clientCapabilities: client.clientCapabilities,
|
|
485
|
+
clientInfo: client.clientInfo,
|
|
486
|
+
requestMetadata: client.initializePayload._meta
|
|
487
|
+
},
|
|
488
|
+
requestContext: client
|
|
489
|
+
}).pipe(
|
|
490
|
+
Effect.catchTag("ResourceNotFound", (error) =>
|
|
491
|
+
Effect.fail(new InvalidParams({ message: `Resource '${error.uri}' not found` })))
|
|
492
|
+
)
|
|
297
493
|
}),
|
|
298
494
|
get prompts() {
|
|
299
495
|
return prompts
|
|
300
496
|
},
|
|
301
497
|
addPrompt: (options) =>
|
|
302
|
-
Effect.
|
|
303
|
-
prompts.
|
|
304
|
-
|
|
498
|
+
Effect.gen(function*() {
|
|
499
|
+
const existingIndex = prompts.findIndex(({ prompt }) => prompt.name === options.prompt.name)
|
|
500
|
+
if (existingIndex === -1) {
|
|
501
|
+
prompts.push(options)
|
|
502
|
+
} else {
|
|
503
|
+
prompts[existingIndex] = options
|
|
504
|
+
}
|
|
505
|
+
yield* internalCore.prompts.register({
|
|
506
|
+
descriptor: options.prompt,
|
|
507
|
+
isVisible: (profile) => {
|
|
508
|
+
const enabledWhen = Context.getOrUndefined(options.annotations, EnabledWhen)
|
|
509
|
+
return enabledWhen === undefined || enabledWhen({
|
|
510
|
+
protocolVersion: profile.protocolVersion,
|
|
511
|
+
capabilities: profile.clientCapabilities,
|
|
512
|
+
clientInfo: profile.clientInfo
|
|
513
|
+
})
|
|
514
|
+
},
|
|
515
|
+
get: (params, invocation) =>
|
|
516
|
+
options.handle(params).pipe(
|
|
517
|
+
Effect.provideService(McpServerClient, invocation.requestContext)
|
|
518
|
+
)
|
|
519
|
+
})
|
|
305
520
|
for (const [param, handle] of Object.entries(options.completions)) {
|
|
306
|
-
|
|
521
|
+
yield* internalCore.completions.register(
|
|
522
|
+
`prompt/${options.prompt.name}/${param}`,
|
|
523
|
+
(request, invocation) =>
|
|
524
|
+
handle(request.argument.value, request.context).pipe(
|
|
525
|
+
Effect.provideService(
|
|
526
|
+
McpServerClient,
|
|
527
|
+
invocation.requestContext
|
|
528
|
+
),
|
|
529
|
+
Effect.map((result) => ({
|
|
530
|
+
values: result.completion.values,
|
|
531
|
+
total: result.completion.total,
|
|
532
|
+
hasMore: result.completion.hasMore,
|
|
533
|
+
metadata: result._meta
|
|
534
|
+
}))
|
|
535
|
+
)
|
|
536
|
+
)
|
|
307
537
|
}
|
|
308
|
-
|
|
538
|
+
yield* notifications.client["notifications/prompts/list_changed"]({})
|
|
309
539
|
}),
|
|
310
540
|
getPromptResult: Effect.fnUntraced(function*({ arguments: params, name }) {
|
|
311
|
-
const
|
|
312
|
-
|
|
313
|
-
|
|
314
|
-
|
|
315
|
-
|
|
541
|
+
const client = yield* McpServerClient
|
|
542
|
+
return yield* internalCore.prompts.get(
|
|
543
|
+
name,
|
|
544
|
+
params ?? {},
|
|
545
|
+
McpProtocolInternal.invocationFromClient(client)
|
|
546
|
+
).pipe(
|
|
547
|
+
Effect.catchTag("PromptNotFound", () => new InvalidParams({ message: `Prompt '${name}' not found` }))
|
|
548
|
+
)
|
|
316
549
|
}),
|
|
317
550
|
completion: Effect.fnUntraced(function*(complete) {
|
|
551
|
+
const client = yield* McpServerClient
|
|
318
552
|
const ref = complete.ref
|
|
319
|
-
const
|
|
320
|
-
|
|
321
|
-
|
|
322
|
-
|
|
323
|
-
|
|
553
|
+
const result = yield* internalCore.completions.complete({
|
|
554
|
+
reference: ref.type === "ref/resource"
|
|
555
|
+
? { type: "resourceTemplate", uriTemplate: ref.uri }
|
|
556
|
+
: { type: "prompt", name: ref.name },
|
|
557
|
+
argument: complete.argument,
|
|
558
|
+
context: complete.context
|
|
559
|
+
}, McpProtocolInternal.invocationFromClient(client))
|
|
560
|
+
return {
|
|
561
|
+
_meta: result.metadata,
|
|
562
|
+
completion: {
|
|
563
|
+
values: result.values,
|
|
564
|
+
total: result.total,
|
|
565
|
+
hasMore: result.hasMore
|
|
566
|
+
}
|
|
567
|
+
}
|
|
324
568
|
})
|
|
325
569
|
})
|
|
570
|
+
internalState.set(service, { core: internalCore, notifications: notificationsQueue })
|
|
571
|
+
return service
|
|
326
572
|
})
|
|
327
573
|
|
|
328
574
|
/**
|
|
@@ -333,15 +579,57 @@ export class McpServer extends Context.Service<McpServer, {
|
|
|
333
579
|
static readonly layer: Layer.Layer<McpServer | McpServerClient> = Layer.effect(McpServer)(McpServer.make) as any
|
|
334
580
|
}
|
|
335
581
|
|
|
336
|
-
const
|
|
337
|
-
const
|
|
338
|
-
|
|
339
|
-
|
|
340
|
-
|
|
341
|
-
|
|
342
|
-
|
|
343
|
-
|
|
344
|
-
|
|
582
|
+
const MCP_SESSION_ID_HEADER = "mcp-session-id"
|
|
583
|
+
const MCP_PROTOCOL_VERSION_HEADER = "mcp-protocol-version"
|
|
584
|
+
const MCP_INVALID_BATCH_METHOD = "invalid/json-rpc-batch"
|
|
585
|
+
const requestKey = (requestId: string | number): string => `${typeof requestId}:${requestId}`
|
|
586
|
+
|
|
587
|
+
type SessionLogLevel =
|
|
588
|
+
| { readonly _tag: "Effect"; readonly level: LogLevel.LogLevel }
|
|
589
|
+
| { readonly _tag: "Mcp"; readonly level: McpSchema.LoggingLevel }
|
|
590
|
+
|
|
591
|
+
interface Session {
|
|
592
|
+
readonly initializePayload: typeof Initialize.payloadSchema.Type
|
|
593
|
+
readonly negotiatedProfile: McpCore.NegotiatedProtocolProfile
|
|
594
|
+
readonly protocol: McpProtocol.ProtocolAdapter
|
|
595
|
+
readonly resourceSubscriptions: Set<string> | undefined
|
|
596
|
+
logLevel: SessionLogLevel
|
|
597
|
+
}
|
|
598
|
+
|
|
599
|
+
interface Sessions {
|
|
600
|
+
readonly bySessionId: Map<string, Session>
|
|
601
|
+
readonly byClientId: Map<number, Session>
|
|
602
|
+
}
|
|
603
|
+
|
|
604
|
+
class McpClientKey extends Data.Class<{
|
|
605
|
+
readonly clientId: number
|
|
606
|
+
readonly profile: McpCore.NegotiatedProtocolProfile
|
|
607
|
+
}> {}
|
|
608
|
+
|
|
609
|
+
class McpProtocolState extends Context.Service<McpProtocolState, {
|
|
610
|
+
readonly sessions: Sessions
|
|
611
|
+
readonly protocolRegistry: McpProtocolRegistry.ProtocolRegistry<McpProtocol.ProtocolAdapter>
|
|
612
|
+
}>()("effect/ai/McpServer/McpProtocolState") {}
|
|
613
|
+
|
|
614
|
+
const makeMcpProtocolState = Effect.fnUntraced(function*(
|
|
615
|
+
protocols: Arr.NonEmptyReadonlyArray<McpProtocol.ProtocolAdapter>
|
|
616
|
+
) {
|
|
617
|
+
// TODO: Replace the shared session map with an adapter-owned lifecycle strategy
|
|
618
|
+
// before v2026-07-28. The strategy must let sessionful revisions pin a profile
|
|
619
|
+
// after initialize while stateless revisions select and derive it per request.
|
|
620
|
+
return McpProtocolState.of({
|
|
621
|
+
sessions: {
|
|
622
|
+
bySessionId: new Map(),
|
|
623
|
+
byClientId: new Map()
|
|
624
|
+
},
|
|
625
|
+
protocolRegistry: yield* McpProtocolRegistry.make(protocols)
|
|
626
|
+
})
|
|
627
|
+
})
|
|
628
|
+
|
|
629
|
+
const layerMcpProtocolState = (
|
|
630
|
+
protocols: Arr.NonEmptyReadonlyArray<McpProtocol.ProtocolAdapter>
|
|
631
|
+
): Layer.Layer<McpProtocolState, Cause.IllegalArgumentError> =>
|
|
632
|
+
Layer.effect(McpProtocolState)(makeMcpProtocolState(protocols))
|
|
345
633
|
|
|
346
634
|
/**
|
|
347
635
|
* Runs an MCP server over the current `RpcServer.Protocol`.
|
|
@@ -352,55 +640,76 @@ const mcpProtocolVersionHeader = "mcp-protocol-version"
|
|
|
352
640
|
* tools, resources, and prompts, and forwards queued server notifications to
|
|
353
641
|
* initialized clients.
|
|
354
642
|
*
|
|
355
|
-
* @category
|
|
643
|
+
* @category running
|
|
356
644
|
* @since 4.0.0
|
|
357
645
|
*/
|
|
358
646
|
export const run: (options: {
|
|
359
647
|
readonly name: string
|
|
360
648
|
readonly version: string
|
|
361
|
-
readonly
|
|
649
|
+
readonly protocols: Arr.NonEmptyReadonlyArray<McpProtocol.ProtocolAdapter>
|
|
650
|
+
readonly extensions?: ServerExtensions | undefined
|
|
362
651
|
}) => Effect.Effect<
|
|
363
652
|
never,
|
|
364
|
-
|
|
653
|
+
Cause.IllegalArgumentError,
|
|
365
654
|
McpServer | RpcServer.Protocol
|
|
366
655
|
> = Effect.fnUntraced(function*(options: {
|
|
367
656
|
readonly name: string
|
|
368
657
|
readonly version: string
|
|
658
|
+
readonly protocols: Arr.NonEmptyReadonlyArray<McpProtocol.ProtocolAdapter>
|
|
659
|
+
readonly extensions?: ServerExtensions | undefined
|
|
369
660
|
}) {
|
|
661
|
+
const protocolStateOption = yield* Effect.serviceOption(McpProtocolState)
|
|
662
|
+
const protocolState = Option.isSome(protocolStateOption)
|
|
663
|
+
? protocolStateOption.value
|
|
664
|
+
: yield* makeMcpProtocolState(options.protocols)
|
|
665
|
+
return yield* runWithProtocolState(options, protocolState)
|
|
666
|
+
})
|
|
667
|
+
|
|
668
|
+
const runWithProtocolState = Effect.fnUntraced(function*(options: {
|
|
669
|
+
readonly name: string
|
|
670
|
+
readonly version: string
|
|
671
|
+
readonly extensions?: ServerExtensions | undefined
|
|
672
|
+
}, protocolState: McpProtocolState["Service"]) {
|
|
673
|
+
const protocolRegistry = protocolState.protocolRegistry
|
|
674
|
+
const serverScope = yield* Effect.scope
|
|
370
675
|
const protocol = yield* RpcServer.Protocol
|
|
371
676
|
const server = yield* McpServer
|
|
677
|
+
const defaultLogLevel = yield* CurrentLogLevel
|
|
372
678
|
const isHttp = Option.isSome(yield* Effect.serviceOption(HttpRouter.HttpRouter))
|
|
373
|
-
const
|
|
374
|
-
const
|
|
679
|
+
const sessions = protocolState.sessions
|
|
680
|
+
const clientProtocols = new Map<number, McpProtocol.ProtocolAdapter>()
|
|
681
|
+
const activeRequests = new Map<number, Map<string, boolean>>()
|
|
682
|
+
const clientProfiles = new Map<number, McpCore.NegotiatedProtocolProfile>()
|
|
683
|
+
const handlers = yield* Layer.build(layerHandlers(options, {
|
|
684
|
+
sessions,
|
|
685
|
+
protocolRegistry
|
|
686
|
+
}))
|
|
375
687
|
|
|
376
688
|
const clients = yield* RcMap.make({
|
|
377
|
-
lookup: Effect.fnUntraced(function*(
|
|
689
|
+
lookup: Effect.fnUntraced(function*(key: McpClientKey) {
|
|
690
|
+
const selectedProtocol = protocolRegistry.select(key.profile.protocolVersion)
|
|
378
691
|
let write!: (message: RpcMessage.FromServerEncoded) => Effect.Effect<void>
|
|
379
|
-
const
|
|
380
|
-
|
|
381
|
-
|
|
382
|
-
|
|
383
|
-
|
|
384
|
-
|
|
385
|
-
|
|
386
|
-
|
|
387
|
-
|
|
388
|
-
|
|
389
|
-
|
|
390
|
-
|
|
391
|
-
|
|
392
|
-
|
|
393
|
-
|
|
394
|
-
|
|
395
|
-
|
|
396
|
-
|
|
397
|
-
|
|
398
|
-
|
|
399
|
-
|
|
400
|
-
supportsStructuredClone: false
|
|
401
|
-
}
|
|
402
|
-
}))
|
|
403
|
-
)
|
|
692
|
+
const reverseProtocol = yield* RpcClient.Protocol.make(Effect.fnUntraced(function*(writeResponse) {
|
|
693
|
+
let cid = 0
|
|
694
|
+
write = (message) => writeResponse(cid, message)
|
|
695
|
+
return {
|
|
696
|
+
send(id, request, _transferables) {
|
|
697
|
+
cid = id
|
|
698
|
+
return protocol.send(key.clientId, {
|
|
699
|
+
...request,
|
|
700
|
+
headers: undefined,
|
|
701
|
+
traceId: undefined,
|
|
702
|
+
spanId: undefined,
|
|
703
|
+
sampled: undefined
|
|
704
|
+
} as any)
|
|
705
|
+
},
|
|
706
|
+
supportsAck: true,
|
|
707
|
+
supportsTransferables: false,
|
|
708
|
+
supportsStructuredClone: false
|
|
709
|
+
}
|
|
710
|
+
}))
|
|
711
|
+
const client = yield* selectedProtocol.makeReverseClient(key.profile).pipe(
|
|
712
|
+
Effect.provideService(RpcClient.Protocol, reverseProtocol)
|
|
404
713
|
)
|
|
405
714
|
|
|
406
715
|
return { client, write } as const
|
|
@@ -408,109 +717,359 @@ export const run: (options: {
|
|
|
408
717
|
idleTimeToLive: 10000
|
|
409
718
|
})
|
|
410
719
|
|
|
411
|
-
const clientMiddleware = McpServerClientMiddleware.of((effect, { client, headers, rpc }) => {
|
|
412
|
-
const
|
|
413
|
-
const isInitialize = rpc._tag
|
|
414
|
-
if (!isInitialize && !
|
|
720
|
+
const clientMiddleware = McpServerClientMiddleware.of((effect, { client, headers, payload, rpc }) => {
|
|
721
|
+
const session = getClientSession(sessions, client.id, headers)
|
|
722
|
+
const isInitialize = rpc._tag.endsWith("/initialize")
|
|
723
|
+
if (!isInitialize && !session) {
|
|
415
724
|
const fiber = Fiber.getCurrent()!
|
|
416
725
|
const httpRequest = Context.getOrUndefined(fiber.context, HttpServerRequest.HttpServerRequest)
|
|
417
726
|
if (httpRequest) {
|
|
418
727
|
appendPreResponseHandlerUnsafe(
|
|
419
728
|
httpRequest,
|
|
420
|
-
() =>
|
|
729
|
+
() =>
|
|
730
|
+
Effect.succeed(
|
|
731
|
+
HttpServerResponse.empty({
|
|
732
|
+
status: headers[MCP_SESSION_ID_HEADER] === undefined ? 400 : 404
|
|
733
|
+
})
|
|
734
|
+
)
|
|
421
735
|
)
|
|
422
736
|
}
|
|
423
737
|
return Effect.die(new Error(`Mcp-Session-Id does not exist`))
|
|
424
738
|
}
|
|
739
|
+
const selectedProtocol = session?.protocol ?? protocolForInternalTag(protocolRegistry, rpc._tag)
|
|
740
|
+
// NOTE: RPC middleware erases the correlation between the initialize tag
|
|
741
|
+
// and its decoded payload. Restore it once after non-initialize requests
|
|
742
|
+
// without a session have been rejected above.
|
|
743
|
+
const initializePayload = session?.initializePayload ?? payload as typeof Initialize.payloadSchema.Type
|
|
744
|
+
const profile = session?.negotiatedProfile ?? {
|
|
745
|
+
protocolVersion: selectedProtocol.protocolVersion,
|
|
746
|
+
clientCapabilities: initializePayload.capabilities,
|
|
747
|
+
clientInfo: initializePayload.clientInfo
|
|
748
|
+
}
|
|
749
|
+
clientProfiles.set(client.id, profile)
|
|
425
750
|
return Effect.provideService(
|
|
426
|
-
|
|
427
|
-
|
|
428
|
-
|
|
429
|
-
|
|
430
|
-
|
|
431
|
-
|
|
432
|
-
|
|
433
|
-
|
|
434
|
-
|
|
751
|
+
Effect.provideService(
|
|
752
|
+
effect,
|
|
753
|
+
McpServerClient,
|
|
754
|
+
McpServerClient.of({
|
|
755
|
+
clientId: client.id,
|
|
756
|
+
protocolVersion: session?.negotiatedProfile.protocolVersion ?? selectedProtocol.protocolVersion,
|
|
757
|
+
clientCapabilities: profile.clientCapabilities,
|
|
758
|
+
clientInfo: profile.clientInfo,
|
|
759
|
+
initializePayload,
|
|
760
|
+
getClient: RcMap.get(
|
|
761
|
+
clients,
|
|
762
|
+
new McpClientKey({
|
|
763
|
+
clientId: client.id,
|
|
764
|
+
profile
|
|
765
|
+
})
|
|
766
|
+
).pipe(
|
|
767
|
+
Effect.map(({ client }) => client)
|
|
768
|
+
)
|
|
769
|
+
})
|
|
770
|
+
),
|
|
771
|
+
CurrentLogLevel,
|
|
772
|
+
effectLogLevel(session?.logLevel, defaultLogLevel)
|
|
435
773
|
)
|
|
436
774
|
})
|
|
437
775
|
|
|
438
776
|
const patchedProtocol = RpcServer.Protocol.of({
|
|
439
777
|
...protocol,
|
|
778
|
+
send: (clientId, response) => {
|
|
779
|
+
if (response._tag === "Exit") {
|
|
780
|
+
const requests = activeRequests.get(clientId)
|
|
781
|
+
const key = requestKey(response.requestId)
|
|
782
|
+
const cancelled = requests?.get(key)
|
|
783
|
+
if (requests !== undefined && requests.delete(key) && requests.size === 0) {
|
|
784
|
+
activeRequests.delete(clientId)
|
|
785
|
+
}
|
|
786
|
+
if (cancelled === true) {
|
|
787
|
+
return Effect.void
|
|
788
|
+
}
|
|
789
|
+
if (
|
|
790
|
+
response.exit._tag === "Failure" &&
|
|
791
|
+
!response.exit.cause.some((failure) => failure._tag === "Fail")
|
|
792
|
+
) {
|
|
793
|
+
return protocol.send(clientId, {
|
|
794
|
+
_tag: "Exit",
|
|
795
|
+
requestId: response.requestId,
|
|
796
|
+
exit: {
|
|
797
|
+
_tag: "Failure",
|
|
798
|
+
cause: [{
|
|
799
|
+
_tag: "Fail",
|
|
800
|
+
error: new InternalError({ message: "Internal error" })
|
|
801
|
+
}]
|
|
802
|
+
}
|
|
803
|
+
})
|
|
804
|
+
}
|
|
805
|
+
}
|
|
806
|
+
return protocol.send(clientId, response)
|
|
807
|
+
},
|
|
440
808
|
run: (f) =>
|
|
441
809
|
protocol.run((clientId, request_) => {
|
|
442
|
-
const
|
|
810
|
+
const fiber = Fiber.getCurrent()!
|
|
811
|
+
const request = request_ as unknown as
|
|
443
812
|
| RpcMessage.FromServerEncoded
|
|
444
813
|
| RpcMessage.FromClientEncoded
|
|
814
|
+
const httpRequest = isHttp
|
|
815
|
+
? Context.getOrUndefined(fiber.context, HttpServerRequest.HttpServerRequest)
|
|
816
|
+
: undefined
|
|
817
|
+
if (httpRequest !== undefined && request._tag !== "Eof") {
|
|
818
|
+
appendPreResponseHandlerUnsafe(httpRequest, (_, response) =>
|
|
819
|
+
Effect.succeed(
|
|
820
|
+
response.status === 200 &&
|
|
821
|
+
response.body._tag === "Uint8Array" &&
|
|
822
|
+
response.body.contentLength === 0
|
|
823
|
+
? HttpServerResponse.empty({
|
|
824
|
+
headers: Headers.remove(response.headers, "content-type"),
|
|
825
|
+
status: 202
|
|
826
|
+
})
|
|
827
|
+
: response
|
|
828
|
+
))
|
|
829
|
+
}
|
|
445
830
|
switch (request._tag) {
|
|
446
831
|
case "Request": {
|
|
832
|
+
const headers = isHttp
|
|
833
|
+
? Context.getUnsafe(
|
|
834
|
+
Fiber.getCurrent()!.context,
|
|
835
|
+
HttpServerRequest.HttpServerRequest
|
|
836
|
+
).headers
|
|
837
|
+
: Headers.fromInput(request.headers)
|
|
838
|
+
const session = getClientSession(sessions, clientId, headers)
|
|
839
|
+
const selectedProtocol = session?.protocol ??
|
|
840
|
+
(request.tag === "initialize"
|
|
841
|
+
? protocolRegistry.select(getOfferedProtocolVersion(request.payload))
|
|
842
|
+
: protocolRegistry.protocols[0])
|
|
843
|
+
// Selection happens before dated payload decoding. Once a
|
|
844
|
+
// session exists, all later messages reuse its pinned adapter.
|
|
845
|
+
clientProtocols.set(clientId, selectedProtocol)
|
|
846
|
+
if (request.tag === MCP_INVALID_BATCH_METHOD) {
|
|
847
|
+
return protocol.send(clientId, {
|
|
848
|
+
_tag: "Exit",
|
|
849
|
+
requestId: request.id,
|
|
850
|
+
exit: {
|
|
851
|
+
_tag: "Failure",
|
|
852
|
+
cause: [{
|
|
853
|
+
_tag: "Fail",
|
|
854
|
+
error: new InvalidRequest({ message: "JSON-RPC batches are not supported" })
|
|
855
|
+
}]
|
|
856
|
+
}
|
|
857
|
+
})
|
|
858
|
+
}
|
|
447
859
|
if (isHttp) {
|
|
448
860
|
const fiber = Fiber.getCurrent()!
|
|
449
861
|
const httpRequest = Context.getUnsafe(fiber.context, HttpServerRequest.HttpServerRequest)
|
|
450
|
-
|
|
451
|
-
if (client) {
|
|
862
|
+
if (session) {
|
|
452
863
|
appendPreResponseHandlerUnsafe(httpRequest, (_, res) =>
|
|
453
864
|
Effect.succeed(
|
|
454
|
-
HttpServerResponse.setHeader(
|
|
865
|
+
HttpServerResponse.setHeader(
|
|
866
|
+
res,
|
|
867
|
+
MCP_PROTOCOL_VERSION_HEADER,
|
|
868
|
+
session.protocol.protocolVersion
|
|
869
|
+
)
|
|
455
870
|
))
|
|
456
871
|
}
|
|
457
872
|
}
|
|
458
|
-
const
|
|
459
|
-
|
|
460
|
-
|
|
461
|
-
|
|
462
|
-
|
|
463
|
-
|
|
464
|
-
|
|
873
|
+
const routedRequest = protocolRegistry.routeClientRequest(selectedProtocol, request)
|
|
874
|
+
const rpc = protocolRegistry.clientRpcs.requests.get(routedRequest.tag)
|
|
875
|
+
if (
|
|
876
|
+
rpc &&
|
|
877
|
+
selectedProtocol.clientNotificationRpcs.requests.has(request.tag)
|
|
878
|
+
) {
|
|
879
|
+
if (!session) {
|
|
880
|
+
if (httpRequest) {
|
|
881
|
+
appendPreResponseHandlerUnsafe(
|
|
882
|
+
httpRequest,
|
|
883
|
+
() =>
|
|
884
|
+
Effect.succeed(
|
|
885
|
+
HttpServerResponse.empty({
|
|
886
|
+
status: headers[MCP_SESSION_ID_HEADER] === undefined ? 400 : 404
|
|
887
|
+
})
|
|
888
|
+
)
|
|
889
|
+
)
|
|
890
|
+
}
|
|
891
|
+
return Effect.void
|
|
465
892
|
}
|
|
466
|
-
const
|
|
467
|
-
return
|
|
468
|
-
|
|
469
|
-
|
|
470
|
-
|
|
471
|
-
|
|
472
|
-
|
|
473
|
-
|
|
474
|
-
|
|
893
|
+
const decode = selectedProtocol.payloadCodecs(rpc).decode(request.payload)
|
|
894
|
+
return decode.pipe(
|
|
895
|
+
Effect.flatMap((payload) => {
|
|
896
|
+
if (
|
|
897
|
+
request.tag === "notifications/roots/list_changed" &&
|
|
898
|
+
session.initializePayload.capabilities.roots?.listChanged === true &&
|
|
899
|
+
httpRequest === undefined
|
|
900
|
+
) {
|
|
901
|
+
return RcMap.get(
|
|
902
|
+
clients,
|
|
903
|
+
new McpClientKey({
|
|
904
|
+
clientId,
|
|
905
|
+
profile: session.negotiatedProfile
|
|
906
|
+
})
|
|
907
|
+
).pipe(
|
|
908
|
+
Effect.flatMap(({ client }) => client.listRoots()),
|
|
909
|
+
Effect.scoped,
|
|
910
|
+
Effect.ignoreCause,
|
|
911
|
+
Effect.forkIn(serverScope),
|
|
912
|
+
Effect.asVoid
|
|
913
|
+
)
|
|
914
|
+
}
|
|
915
|
+
if (request.tag === "notifications/cancelled") {
|
|
916
|
+
return selectedProtocol.normalizeCancellation(payload).pipe(
|
|
917
|
+
Effect.flatMap((cancellation) => {
|
|
918
|
+
const key = requestKey(cancellation.requestId)
|
|
919
|
+
const requests = activeRequests.get(clientId)
|
|
920
|
+
if (requests?.has(key) !== true) {
|
|
921
|
+
return Effect.void
|
|
922
|
+
}
|
|
923
|
+
requests.set(key, true)
|
|
924
|
+
return f(clientId, {
|
|
925
|
+
_tag: "Interrupt",
|
|
926
|
+
requestId: String(cancellation.requestId)
|
|
927
|
+
})
|
|
928
|
+
})
|
|
929
|
+
)
|
|
930
|
+
}
|
|
931
|
+
const handler = handlers.mapUnsafe.get(rpc.key) as Rpc.Handler<string> | undefined
|
|
932
|
+
return handler
|
|
933
|
+
? handler.handler(payload, {
|
|
934
|
+
rpc,
|
|
935
|
+
requestId: RpcMessage.RequestId(request.id),
|
|
936
|
+
client: new Rpc.ServerClient(clientId),
|
|
937
|
+
headers
|
|
938
|
+
}) as any as Effect.Effect<void>
|
|
939
|
+
: Effect.void
|
|
940
|
+
}),
|
|
941
|
+
Effect.ignoreCause
|
|
942
|
+
)
|
|
475
943
|
}
|
|
476
|
-
|
|
944
|
+
if (!rpc) {
|
|
945
|
+
if (request.isNotification) {
|
|
946
|
+
return Effect.void
|
|
947
|
+
}
|
|
948
|
+
return protocol.send(clientId, {
|
|
949
|
+
_tag: "Exit",
|
|
950
|
+
requestId: request.id,
|
|
951
|
+
exit: {
|
|
952
|
+
_tag: "Failure",
|
|
953
|
+
cause: [{ _tag: "Fail", error: new MethodNotFound({ message: `Method not found: ${request.tag}` }) }]
|
|
954
|
+
}
|
|
955
|
+
})
|
|
956
|
+
}
|
|
957
|
+
return selectedProtocol.payloadCodecs(rpc).decode(request.payload).pipe(
|
|
958
|
+
Effect.matchEffect({
|
|
959
|
+
onSuccess: () => {
|
|
960
|
+
if (request.isNotification !== true) {
|
|
961
|
+
const requests = activeRequests.get(clientId) ?? new Map<string, boolean>()
|
|
962
|
+
requests.set(requestKey(request.id), false)
|
|
963
|
+
activeRequests.set(clientId, requests)
|
|
964
|
+
}
|
|
965
|
+
return f(clientId, routedRequest)
|
|
966
|
+
},
|
|
967
|
+
onFailure: () =>
|
|
968
|
+
request.isNotification
|
|
969
|
+
? Effect.void
|
|
970
|
+
: protocol.send(clientId, {
|
|
971
|
+
_tag: "Exit",
|
|
972
|
+
requestId: request.id,
|
|
973
|
+
exit: {
|
|
974
|
+
_tag: "Failure",
|
|
975
|
+
cause: [{ _tag: "Fail", error: new InvalidParams({ message: "Invalid method parameters" }) }]
|
|
976
|
+
}
|
|
977
|
+
})
|
|
978
|
+
})
|
|
979
|
+
)
|
|
477
980
|
}
|
|
478
981
|
case "Ping":
|
|
479
982
|
case "Ack":
|
|
480
983
|
case "Interrupt":
|
|
984
|
+
return f(clientId, request)
|
|
481
985
|
case "Eof":
|
|
986
|
+
activeRequests.delete(clientId)
|
|
987
|
+
clientProtocols.delete(clientId)
|
|
988
|
+
clientProfiles.delete(clientId)
|
|
989
|
+
if (!isHttp) {
|
|
990
|
+
sessions.byClientId.delete(clientId)
|
|
991
|
+
}
|
|
482
992
|
return f(clientId, request)
|
|
483
993
|
case "Pong":
|
|
484
994
|
case "Exit":
|
|
485
995
|
case "Chunk":
|
|
486
996
|
case "ClientProtocolError":
|
|
487
|
-
case "Defect":
|
|
488
|
-
|
|
997
|
+
case "Defect": {
|
|
998
|
+
const selectedProtocol = getProtocolForClient(clientProtocols, clientId, protocolRegistry)
|
|
999
|
+
const profile = clientProfiles.get(clientId) ?? {
|
|
1000
|
+
protocolVersion: selectedProtocol.protocolVersion,
|
|
1001
|
+
clientCapabilities: {},
|
|
1002
|
+
clientInfo: { name: "unknown", version: "unknown" }
|
|
1003
|
+
}
|
|
1004
|
+
return RcMap.get(
|
|
1005
|
+
clients,
|
|
1006
|
+
new McpClientKey({
|
|
1007
|
+
clientId,
|
|
1008
|
+
profile
|
|
1009
|
+
})
|
|
1010
|
+
).pipe(
|
|
489
1011
|
Effect.flatMap(({ write }) => write(request)),
|
|
490
1012
|
Effect.scoped
|
|
491
1013
|
)
|
|
1014
|
+
}
|
|
492
1015
|
}
|
|
493
1016
|
})
|
|
494
1017
|
})
|
|
495
1018
|
|
|
496
|
-
|
|
497
|
-
|
|
498
|
-
)
|
|
499
|
-
yield* Queue.take(server.notificationsQueue).pipe(
|
|
500
|
-
Effect.flatMap(Effect.fnUntraced(function*(request) {
|
|
501
|
-
const encoded = yield* encodeNotification(request.payload)
|
|
502
|
-
const message: RpcMessage.RequestEncoded = {
|
|
503
|
-
_tag: "Request",
|
|
504
|
-
tag: request.tag,
|
|
505
|
-
payload: encoded
|
|
506
|
-
} as any
|
|
1019
|
+
yield* Queue.take(internalState.get(server)!.notifications).pipe(
|
|
1020
|
+
Effect.flatMap(Effect.fnUntraced(function*(notification) {
|
|
507
1021
|
const clientIds = yield* patchedProtocol.clientIds
|
|
1022
|
+
for (const clientId of clientProtocols.keys()) {
|
|
1023
|
+
if (!clientIds.has(clientId)) {
|
|
1024
|
+
clientProtocols.delete(clientId)
|
|
1025
|
+
clientProfiles.delete(clientId)
|
|
1026
|
+
// HTTP client IDs are request-scoped; their UUID sessions outlive them.
|
|
1027
|
+
if (!isHttp) {
|
|
1028
|
+
sessions.byClientId.delete(clientId)
|
|
1029
|
+
}
|
|
1030
|
+
}
|
|
1031
|
+
}
|
|
508
1032
|
for (const clientId of server.initializedClients.keys()) {
|
|
509
1033
|
if (!clientIds.has(clientId)) {
|
|
510
1034
|
server.initializedClients.delete(clientId)
|
|
511
1035
|
continue
|
|
512
1036
|
}
|
|
513
|
-
|
|
1037
|
+
const selectedProtocol = clientProtocols.get(clientId)
|
|
1038
|
+
if (!selectedProtocol) {
|
|
1039
|
+
continue
|
|
1040
|
+
}
|
|
1041
|
+
yield* Effect.gen(function*() {
|
|
1042
|
+
const projected = yield* selectedProtocol.projectNotification(notification)
|
|
1043
|
+
if (projected === undefined) {
|
|
1044
|
+
return
|
|
1045
|
+
}
|
|
1046
|
+
const session = sessions.byClientId.get(clientId)
|
|
1047
|
+
if (
|
|
1048
|
+
notification._tag === "LoggingMessage" &&
|
|
1049
|
+
!isMcpLogLevelEnabled(notification.level, session?.logLevel, defaultLogLevel)
|
|
1050
|
+
) {
|
|
1051
|
+
return
|
|
1052
|
+
}
|
|
1053
|
+
if (
|
|
1054
|
+
notification._tag === "ResourceUpdated" &&
|
|
1055
|
+
session?.resourceSubscriptions?.has(notification.uri) !== true
|
|
1056
|
+
) {
|
|
1057
|
+
return
|
|
1058
|
+
}
|
|
1059
|
+
const rpc = selectedProtocol.serverNotificationRpcs.requests.get(projected.tag)
|
|
1060
|
+
if (!rpc) {
|
|
1061
|
+
return
|
|
1062
|
+
}
|
|
1063
|
+
const encoded = yield* selectedProtocol.payloadCodecs(rpc).encode(projected.payload)
|
|
1064
|
+
// TODO: Extend RpcServer.Protocol's outbound message contract with server-originated
|
|
1065
|
+
// notifications so MCP does not need to treat this notification as an RPC response.
|
|
1066
|
+
const message: RpcMessage.RequestEncoded = {
|
|
1067
|
+
_tag: "Request",
|
|
1068
|
+
tag: projected.tag,
|
|
1069
|
+
payload: encoded
|
|
1070
|
+
} as any
|
|
1071
|
+
yield* patchedProtocol.send(clientId, message as any)
|
|
1072
|
+
}).pipe(Effect.catchCause(() => Effect.void))
|
|
514
1073
|
}
|
|
515
1074
|
})),
|
|
516
1075
|
Effect.catchCause(() => Effect.void),
|
|
@@ -518,7 +1077,7 @@ export const run: (options: {
|
|
|
518
1077
|
Effect.forkScoped
|
|
519
1078
|
)
|
|
520
1079
|
|
|
521
|
-
return yield* RpcServer.make(
|
|
1080
|
+
return yield* RpcServer.make(protocolRegistry.clientRpcs, {
|
|
522
1081
|
spanPrefix: "McpServer",
|
|
523
1082
|
disableFatalDefects: true
|
|
524
1083
|
}).pipe(
|
|
@@ -560,66 +1119,43 @@ export const run: (options: {
|
|
|
560
1119
|
export const layer = (options: {
|
|
561
1120
|
readonly name: string
|
|
562
1121
|
readonly version: string
|
|
563
|
-
readonly
|
|
564
|
-
|
|
565
|
-
|
|
1122
|
+
readonly protocols: Arr.NonEmptyReadonlyArray<McpProtocol.ProtocolAdapter>
|
|
1123
|
+
readonly extensions?: ServerExtensions | undefined
|
|
1124
|
+
}): Layer.Layer<McpServer | McpServerClient, Cause.IllegalArgumentError, RpcServer.Protocol> =>
|
|
1125
|
+
layerWithProtocolState(options).pipe(
|
|
1126
|
+
Layer.provide(layerMcpProtocolState(options.protocols))
|
|
1127
|
+
)
|
|
1128
|
+
|
|
1129
|
+
const layerWithProtocolState = (options: {
|
|
1130
|
+
readonly name: string
|
|
1131
|
+
readonly version: string
|
|
1132
|
+
readonly extensions?: ServerExtensions | undefined
|
|
1133
|
+
}): Layer.Layer<McpServer | McpServerClient, never, RpcServer.Protocol | McpProtocolState> =>
|
|
1134
|
+
Layer.effectDiscard(
|
|
1135
|
+
Effect.gen(function*() {
|
|
1136
|
+
const protocolState = yield* McpProtocolState
|
|
1137
|
+
yield* Effect.forkScoped(runWithProtocolState(options, protocolState))
|
|
1138
|
+
})
|
|
1139
|
+
).pipe(
|
|
566
1140
|
Layer.provideMerge(McpServer.layer)
|
|
567
1141
|
)
|
|
568
1142
|
|
|
569
1143
|
/**
|
|
570
|
-
*
|
|
571
|
-
*
|
|
572
|
-
* **Example** (Running an MCP server over stdio)
|
|
573
|
-
*
|
|
574
|
-
* ```ts
|
|
575
|
-
* import { Effect, Layer, Logger, Schema } from "effect"
|
|
576
|
-
* import { NodeRuntime, NodeStdio } from "@effect/platform-node"
|
|
577
|
-
* import { McpSchema, McpServer } from "effect/unstable/ai"
|
|
1144
|
+
* Creates a layer that runs an MCP server over standard input and output.
|
|
578
1145
|
*
|
|
579
|
-
*
|
|
1146
|
+
* **When to use**
|
|
580
1147
|
*
|
|
581
|
-
*
|
|
582
|
-
*
|
|
583
|
-
* name: "README Template",
|
|
584
|
-
* // You can add auto-completion for the ID parameter
|
|
585
|
-
* completion: {
|
|
586
|
-
* id: (_) => Effect.succeed([1, 2, 3, 4, 5])
|
|
587
|
-
* },
|
|
588
|
-
* content: Effect.fn(function*(_uri, id) {
|
|
589
|
-
* return `# MCP Server Demo - ID: ${id}`
|
|
590
|
-
* })
|
|
591
|
-
* })
|
|
1148
|
+
* Use when an MCP client launches the server as a subprocess and communicates
|
|
1149
|
+
* through newline-delimited JSON-RPC messages.
|
|
592
1150
|
*
|
|
593
|
-
*
|
|
594
|
-
* const TestPrompt = McpServer.prompt({
|
|
595
|
-
* name: "Test Prompt",
|
|
596
|
-
* description: "A test prompt to demonstrate MCP server capabilities",
|
|
597
|
-
* parameters: {
|
|
598
|
-
* flightNumber: Schema.String
|
|
599
|
-
* },
|
|
600
|
-
* completion: {
|
|
601
|
-
* flightNumber: () => Effect.succeed(["FL123", "FL456", "FL789"])
|
|
602
|
-
* },
|
|
603
|
-
* content: ({ flightNumber }) =>
|
|
604
|
-
* Effect.succeed(`Get the booking details for flight number: ${flightNumber}`)
|
|
605
|
-
* })
|
|
1151
|
+
* **Details**
|
|
606
1152
|
*
|
|
607
|
-
*
|
|
608
|
-
*
|
|
609
|
-
*
|
|
610
|
-
* TestPrompt
|
|
611
|
-
* ).pipe(
|
|
612
|
-
* // Provide the MCP server implementation
|
|
613
|
-
* Layer.provide(McpServer.layerStdio({
|
|
614
|
-
* name: "Demo Server",
|
|
615
|
-
* version: "1.0.0",
|
|
616
|
-
* })),
|
|
617
|
-
* Layer.provide(NodeStdio.layer),
|
|
618
|
-
* Layer.provide(Layer.succeed(Logger.LogToStderr)(true))
|
|
619
|
-
* )
|
|
1153
|
+
* The selected protocol adapter controls the dated RPC schemas and JSON-RPC
|
|
1154
|
+
* batch policy. The layer provides `McpServer` and `McpServerClient` and
|
|
1155
|
+
* requires `Stdio`.
|
|
620
1156
|
*
|
|
621
|
-
*
|
|
622
|
-
*
|
|
1157
|
+
* @see {@link layer} for running over an existing `RpcServer.Protocol`
|
|
1158
|
+
* @see {@link layerHttp} for the single-endpoint HTTP transport
|
|
623
1159
|
*
|
|
624
1160
|
* @category layers
|
|
625
1161
|
* @since 4.0.0
|
|
@@ -627,16 +1163,83 @@ export const layer = (options: {
|
|
|
627
1163
|
export const layerStdio = (options: {
|
|
628
1164
|
readonly name: string
|
|
629
1165
|
readonly version: string
|
|
630
|
-
readonly
|
|
631
|
-
|
|
1166
|
+
readonly protocols: Arr.NonEmptyReadonlyArray<McpProtocol.ProtocolAdapter>
|
|
1167
|
+
readonly extensions?: ServerExtensions | undefined
|
|
1168
|
+
}): Layer.Layer<McpServer | McpServerClient, Cause.IllegalArgumentError, Stdio> =>
|
|
632
1169
|
layer(options).pipe(
|
|
633
1170
|
Layer.provide(RpcServer.layerProtocolStdio),
|
|
634
|
-
Layer.provide(
|
|
1171
|
+
Layer.provide(Layer.succeed(
|
|
1172
|
+
RpcSerialization.RpcSerialization,
|
|
1173
|
+
mcpStdioSerialization(options.protocols)
|
|
1174
|
+
))
|
|
635
1175
|
)
|
|
636
1176
|
|
|
1177
|
+
const mcpStdioSerialization = (
|
|
1178
|
+
protocols: Arr.NonEmptyReadonlyArray<McpProtocol.ProtocolAdapter>
|
|
1179
|
+
): RpcSerialization.RpcSerialization["Service"] => {
|
|
1180
|
+
const serialization = RpcSerialization.jsonRpc({
|
|
1181
|
+
contentType: "application/json-rpc"
|
|
1182
|
+
})
|
|
1183
|
+
return RpcSerialization.RpcSerialization.of({
|
|
1184
|
+
contentType: serialization.contentType,
|
|
1185
|
+
includesFraming: true,
|
|
1186
|
+
makeUnsafe: () => {
|
|
1187
|
+
const frames = RpcSerialization.ndjson.makeUnsafe()
|
|
1188
|
+
const parser = serialization.makeUnsafe()
|
|
1189
|
+
let selectedProtocol: McpProtocol.ProtocolAdapter | undefined
|
|
1190
|
+
return {
|
|
1191
|
+
decode: (data) => {
|
|
1192
|
+
const decoded: Array<unknown> = []
|
|
1193
|
+
for (const frame of frames.decode(data)) {
|
|
1194
|
+
if (Array.isArray(frame)) {
|
|
1195
|
+
const acceptsBatch = selectedProtocol?.transport.acceptsJsonRpcBatches === true
|
|
1196
|
+
if (
|
|
1197
|
+
!acceptsBatch ||
|
|
1198
|
+
frame.length === 0 ||
|
|
1199
|
+
frame.some(isInitializeJsonRpcMessage)
|
|
1200
|
+
) {
|
|
1201
|
+
decoded.push({
|
|
1202
|
+
_tag: "Request",
|
|
1203
|
+
id: null,
|
|
1204
|
+
tag: MCP_INVALID_BATCH_METHOD,
|
|
1205
|
+
payload: null,
|
|
1206
|
+
headers: []
|
|
1207
|
+
})
|
|
1208
|
+
continue
|
|
1209
|
+
}
|
|
1210
|
+
} else if (isInitializeJsonRpcMessage(frame)) {
|
|
1211
|
+
const offered = getJsonRpcProtocolVersion(frame)
|
|
1212
|
+
selectedProtocol = protocols.find((protocol) => protocol.protocolVersion === offered) ??
|
|
1213
|
+
protocols[0]
|
|
1214
|
+
}
|
|
1215
|
+
decoded.push(...parser.decode(JSON.stringify(frame)))
|
|
1216
|
+
}
|
|
1217
|
+
return decoded
|
|
1218
|
+
},
|
|
1219
|
+
encode: (response) => {
|
|
1220
|
+
const invalidBatchExit = decodeInvalidBatchExit(response)
|
|
1221
|
+
if (Result.isSuccess(invalidBatchExit)) {
|
|
1222
|
+
return JSON.stringify({
|
|
1223
|
+
jsonrpc: "2.0",
|
|
1224
|
+
id: null,
|
|
1225
|
+
error: {
|
|
1226
|
+
_tag: "Cause",
|
|
1227
|
+
code: McpSchema.INVALID_REQUEST_ERROR_CODE,
|
|
1228
|
+
message: "JSON-RPC batches are not supported",
|
|
1229
|
+
data: invalidBatchExit.success.exit.cause
|
|
1230
|
+
}
|
|
1231
|
+
}) + "\n"
|
|
1232
|
+
}
|
|
1233
|
+
const encoded = parser.encode(response)
|
|
1234
|
+
return encoded === undefined ? undefined : `${encoded}\n`
|
|
1235
|
+
}
|
|
1236
|
+
}
|
|
1237
|
+
}
|
|
1238
|
+
})
|
|
1239
|
+
}
|
|
1240
|
+
|
|
637
1241
|
/**
|
|
638
|
-
* Registers
|
|
639
|
-
* `HttpRouter`.
|
|
1242
|
+
* Registers a Streamable HTTP MCP endpoint at `options.path`.
|
|
640
1243
|
*
|
|
641
1244
|
* **When to use**
|
|
642
1245
|
*
|
|
@@ -644,8 +1247,18 @@ export const layerStdio = (options: {
|
|
|
644
1247
|
*
|
|
645
1248
|
* **Details**
|
|
646
1249
|
*
|
|
647
|
-
*
|
|
648
|
-
*
|
|
1250
|
+
* POST serves JSON-RPC and accepted notification-only requests return `202`.
|
|
1251
|
+
* Unsupported protocol versions return `400`; methods without MCP handlers
|
|
1252
|
+
* return `405`. Requests carrying an `Origin` header are rejected unless the
|
|
1253
|
+
* exact origin appears in `allowedOrigins`; Origin-less non-browser clients
|
|
1254
|
+
* remain valid. The surrounding HTTP server remains responsible for binding
|
|
1255
|
+
* to an appropriate interface and installing authentication.
|
|
1256
|
+
*
|
|
1257
|
+
* `layerHttp` always implements the single-endpoint Streamable HTTP topology.
|
|
1258
|
+
* Using `v2024_11_05` here is a custom compatibility transport for that
|
|
1259
|
+
* revision's schema. It does not implement the historical two-endpoint
|
|
1260
|
+
* HTTP+SSE transport, GET SSE, event resumption, session expiry, or client
|
|
1261
|
+
* session termination.
|
|
649
1262
|
*
|
|
650
1263
|
* @see {@link layerStdio} for exposing the server over stdio
|
|
651
1264
|
* @see {@link layer} for the base MCP server layer without a transport protocol
|
|
@@ -657,17 +1270,200 @@ export const layerHttp = (options: {
|
|
|
657
1270
|
readonly name: string
|
|
658
1271
|
readonly version: string
|
|
659
1272
|
readonly path: HttpRouter.PathInput
|
|
660
|
-
readonly
|
|
661
|
-
|
|
662
|
-
|
|
663
|
-
|
|
1273
|
+
readonly protocols: Arr.NonEmptyReadonlyArray<McpProtocol.ProtocolAdapter>
|
|
1274
|
+
readonly extensions?: ServerExtensions | undefined
|
|
1275
|
+
readonly allowedOrigins?: ReadonlyArray<string> | undefined
|
|
1276
|
+
}): Layer.Layer<McpServer | McpServerClient, Cause.IllegalArgumentError, HttpRouter.HttpRouter> => {
|
|
1277
|
+
const protocolState = layerMcpProtocolState(options.protocols)
|
|
1278
|
+
const methodNotAllowedResponse = HttpServerResponse.empty({
|
|
1279
|
+
status: 405,
|
|
1280
|
+
headers: { allow: "POST" }
|
|
1281
|
+
})
|
|
1282
|
+
const methodNotAllowed = (request: HttpServerRequest.HttpServerRequest) =>
|
|
1283
|
+
isAllowedMcpOrigin(request, options.allowedOrigins)
|
|
1284
|
+
? Effect.succeed(methodNotAllowedResponse)
|
|
1285
|
+
: Effect.succeed(HttpServerResponse.empty({ status: 403 }))
|
|
1286
|
+
const routes = Layer.mergeAll(
|
|
1287
|
+
HttpRouter.add("GET", options.path, methodNotAllowed),
|
|
1288
|
+
HttpRouter.add("PUT", options.path, methodNotAllowed),
|
|
1289
|
+
HttpRouter.add("PATCH", options.path, methodNotAllowed),
|
|
1290
|
+
HttpRouter.add("DELETE", options.path, methodNotAllowed),
|
|
1291
|
+
HttpRouter.add("OPTIONS", options.path, methodNotAllowed)
|
|
1292
|
+
)
|
|
1293
|
+
return Layer.merge(layerWithProtocolState(options), routes).pipe(
|
|
1294
|
+
Layer.provide(layerMcpProtocolHttp(options)),
|
|
1295
|
+
Layer.provide(protocolState),
|
|
664
1296
|
Layer.provide(RpcSerialization.layerJsonRpc())
|
|
665
1297
|
)
|
|
1298
|
+
}
|
|
1299
|
+
|
|
1300
|
+
const layerMcpProtocolHttp = (options: {
|
|
1301
|
+
readonly path: HttpRouter.PathInput
|
|
1302
|
+
readonly allowedOrigins?: ReadonlyArray<string> | undefined
|
|
1303
|
+
}): Layer.Layer<
|
|
1304
|
+
RpcServer.Protocol,
|
|
1305
|
+
never,
|
|
1306
|
+
McpProtocolState | RpcSerialization.RpcSerialization | HttpRouter.HttpRouter
|
|
1307
|
+
> =>
|
|
1308
|
+
Layer.effect(RpcServer.Protocol)(Effect.gen(function*() {
|
|
1309
|
+
const state = yield* McpProtocolState
|
|
1310
|
+
const { httpEffect, protocol } = yield* RpcServer.makeProtocolWithHttpEffect
|
|
1311
|
+
const router = yield* HttpRouter.HttpRouter
|
|
1312
|
+
yield* router.add("POST", options.path, (request) => {
|
|
1313
|
+
if (!isAllowedMcpOrigin(request, options.allowedOrigins)) {
|
|
1314
|
+
return Effect.succeed(HttpServerResponse.empty({ status: 403 }))
|
|
1315
|
+
}
|
|
1316
|
+
if (mcpMediaTypes(request.headers["content-type"])[0] !== "application/json") {
|
|
1317
|
+
return Effect.succeed(HttpServerResponse.empty({ status: 415 }))
|
|
1318
|
+
}
|
|
1319
|
+
const accepted = mcpMediaTypes(request.headers["accept"])
|
|
1320
|
+
if (!accepted.includes("application/json") || !accepted.includes("text/event-stream")) {
|
|
1321
|
+
return Effect.succeed(HttpServerResponse.empty({ status: 406 }))
|
|
1322
|
+
}
|
|
1323
|
+
const protocolVersion = request.headers[MCP_PROTOCOL_VERSION_HEADER]
|
|
1324
|
+
const sessionId = request.headers[MCP_SESSION_ID_HEADER]
|
|
1325
|
+
const session = sessionId === undefined
|
|
1326
|
+
? undefined
|
|
1327
|
+
: state.sessions.bySessionId.get(sessionId)
|
|
1328
|
+
if (sessionId !== undefined && session === undefined) {
|
|
1329
|
+
return Effect.succeed(HttpServerResponse.empty({ status: 404 }))
|
|
1330
|
+
}
|
|
1331
|
+
if (
|
|
1332
|
+
protocolVersion !== undefined &&
|
|
1333
|
+
!state.protocolRegistry.protocols.some((protocol) => protocol.protocolVersion === protocolVersion)
|
|
1334
|
+
) {
|
|
1335
|
+
return Effect.succeed(HttpServerResponse.empty({ status: 400 }))
|
|
1336
|
+
}
|
|
1337
|
+
if (
|
|
1338
|
+
session?.protocol.transport.requiresVersionHeader === true &&
|
|
1339
|
+
protocolVersion !== session.protocol.protocolVersion
|
|
1340
|
+
) {
|
|
1341
|
+
return Effect.succeed(HttpServerResponse.empty({ status: 400 }))
|
|
1342
|
+
}
|
|
1343
|
+
return request.text.pipe(
|
|
1344
|
+
Effect.matchEffect({
|
|
1345
|
+
onFailure: () =>
|
|
1346
|
+
Effect.succeed(HttpServerResponse.jsonUnsafe({
|
|
1347
|
+
jsonrpc: "2.0",
|
|
1348
|
+
id: null,
|
|
1349
|
+
error: new McpSchema.ParseError({ message: "Parse error" })
|
|
1350
|
+
})),
|
|
1351
|
+
onSuccess: (body) =>
|
|
1352
|
+
Effect.matchEffect(Schema.decodeUnknownEffect(Schema.UnknownFromJsonString)(body), {
|
|
1353
|
+
onFailure: () =>
|
|
1354
|
+
Effect.succeed(HttpServerResponse.jsonUnsafe({
|
|
1355
|
+
jsonrpc: "2.0",
|
|
1356
|
+
id: null,
|
|
1357
|
+
error: new McpSchema.ParseError({ message: "Parse error" })
|
|
1358
|
+
})),
|
|
1359
|
+
onSuccess: (input) => {
|
|
1360
|
+
if (!Array.isArray(input)) {
|
|
1361
|
+
const hasId = Predicate.hasProperty(input, "id")
|
|
1362
|
+
const id = hasId && (typeof input.id === "string" || typeof input.id === "number")
|
|
1363
|
+
? input.id
|
|
1364
|
+
: null
|
|
1365
|
+
const isJsonRpc = Predicate.hasProperty(input, "jsonrpc") && input.jsonrpc === "2.0"
|
|
1366
|
+
const hasValidRequestId = !hasId || typeof input.id === "string" || typeof input.id === "number"
|
|
1367
|
+
const isRequest = isJsonRpc && hasValidRequestId &&
|
|
1368
|
+
Predicate.hasProperty(input, "method") && typeof input.method === "string"
|
|
1369
|
+
const hasValidResponseId = hasId &&
|
|
1370
|
+
(typeof input.id === "string" || typeof input.id === "number" || input.id === null)
|
|
1371
|
+
const hasResult = Predicate.hasProperty(input, "result")
|
|
1372
|
+
const hasError = Predicate.hasProperty(input, "error")
|
|
1373
|
+
const isResponse = isJsonRpc && hasValidResponseId && hasResult !== hasError
|
|
1374
|
+
if (!isRequest && !isResponse) {
|
|
1375
|
+
return Effect.succeed(HttpServerResponse.jsonUnsafe({
|
|
1376
|
+
jsonrpc: "2.0",
|
|
1377
|
+
id,
|
|
1378
|
+
error: new InvalidRequest({ message: "Invalid Request" })
|
|
1379
|
+
}))
|
|
1380
|
+
}
|
|
1381
|
+
const isInitialize = isInitializeJsonRpcMessage(input)
|
|
1382
|
+
if (isInitialize && sessionId !== undefined) {
|
|
1383
|
+
return Effect.succeed(HttpServerResponse.empty({ status: 400 }))
|
|
1384
|
+
}
|
|
1385
|
+
if (!isInitialize && isRequest && sessionId === undefined) {
|
|
1386
|
+
return Effect.succeed(HttpServerResponse.empty({ status: 400 }))
|
|
1387
|
+
}
|
|
1388
|
+
return httpEffect
|
|
1389
|
+
}
|
|
1390
|
+
if (input.length === 0) {
|
|
1391
|
+
return Effect.succeed(HttpServerResponse.jsonUnsafe({
|
|
1392
|
+
jsonrpc: "2.0",
|
|
1393
|
+
id: null,
|
|
1394
|
+
error: new InvalidRequest({ message: "Invalid Request" })
|
|
1395
|
+
}, { status: 400 }))
|
|
1396
|
+
}
|
|
1397
|
+
if (input.some(isInitializeJsonRpcMessage) || session === undefined) {
|
|
1398
|
+
return Effect.succeed(HttpServerResponse.empty({ status: 400 }))
|
|
1399
|
+
}
|
|
1400
|
+
const selectedProtocol = session.protocol
|
|
1401
|
+
return selectedProtocol.transport.acceptsJsonRpcBatches
|
|
1402
|
+
? httpEffect
|
|
1403
|
+
: Effect.succeed(HttpServerResponse.empty({ status: 400 }))
|
|
1404
|
+
}
|
|
1405
|
+
})
|
|
1406
|
+
})
|
|
1407
|
+
)
|
|
1408
|
+
})
|
|
1409
|
+
return protocol
|
|
1410
|
+
}))
|
|
1411
|
+
|
|
1412
|
+
const isAllowedMcpOrigin = (
|
|
1413
|
+
request: HttpServerRequest.HttpServerRequest,
|
|
1414
|
+
allowedOrigins: ReadonlyArray<string> | undefined
|
|
1415
|
+
): boolean => {
|
|
1416
|
+
const origin = request.headers["origin"]
|
|
1417
|
+
return origin === undefined || (allowedOrigins ?? []).includes(origin)
|
|
1418
|
+
}
|
|
1419
|
+
|
|
1420
|
+
const mcpMediaTypes = (header: string | undefined): ReadonlyArray<string> =>
|
|
1421
|
+
header === undefined
|
|
1422
|
+
? []
|
|
1423
|
+
: header.split(",").flatMap((part) => {
|
|
1424
|
+
const [mediaType, ...parameters] = part.split(";")
|
|
1425
|
+
const quality = parameters
|
|
1426
|
+
.map((parameter) => parameter.trim().toLowerCase())
|
|
1427
|
+
.find((parameter) => parameter.startsWith("q="))
|
|
1428
|
+
if (quality !== undefined) {
|
|
1429
|
+
const value = Number(quality.slice(2))
|
|
1430
|
+
if (!Number.isFinite(value) || value <= 0 || value > 1) {
|
|
1431
|
+
return []
|
|
1432
|
+
}
|
|
1433
|
+
}
|
|
1434
|
+
return [mediaType.trim().toLowerCase()]
|
|
1435
|
+
})
|
|
1436
|
+
|
|
1437
|
+
const InitializeJsonRpcMessage = Schema.Struct({
|
|
1438
|
+
method: Schema.Literal("initialize")
|
|
1439
|
+
})
|
|
1440
|
+
|
|
1441
|
+
const isInitializeJsonRpcMessage = (message: unknown): boolean =>
|
|
1442
|
+
Result.isSuccess(Schema.decodeUnknownResult(InitializeJsonRpcMessage)(message))
|
|
1443
|
+
|
|
1444
|
+
const JsonRpcProtocolVersion = Schema.Struct({
|
|
1445
|
+
params: Schema.Struct({
|
|
1446
|
+
protocolVersion: Schema.String
|
|
1447
|
+
})
|
|
1448
|
+
})
|
|
1449
|
+
|
|
1450
|
+
const getJsonRpcProtocolVersion = (message: unknown): string | undefined => {
|
|
1451
|
+
const decoded = Schema.decodeUnknownResult(JsonRpcProtocolVersion)(message)
|
|
1452
|
+
return Result.isSuccess(decoded) ? decoded.success.params.protocolVersion : undefined
|
|
1453
|
+
}
|
|
1454
|
+
|
|
1455
|
+
const INTERNAL_TOOL_ERROR_MESSAGE = "Tool execution failed due to an internal server error."
|
|
1456
|
+
|
|
1457
|
+
const toolErrorResult = (message: string): CallToolResult =>
|
|
1458
|
+
new CallToolResult({
|
|
1459
|
+
isError: true,
|
|
1460
|
+
content: [{ type: "text", text: message }]
|
|
1461
|
+
})
|
|
666
1462
|
|
|
667
1463
|
/**
|
|
668
1464
|
* Registers a `Toolkit` with the `McpServer`.
|
|
669
1465
|
*
|
|
670
|
-
* @category
|
|
1466
|
+
* @category handlers
|
|
671
1467
|
* @since 4.0.0
|
|
672
1468
|
*/
|
|
673
1469
|
export const registerToolkit: <Tools extends Record<string, Tool.Any>>(
|
|
@@ -689,10 +1485,19 @@ export const registerToolkit: <Tools extends Record<string, Tool.Any>>(
|
|
|
689
1485
|
for (const tool of Object.values(built.tools)) {
|
|
690
1486
|
const annotations = tool.annotations
|
|
691
1487
|
const toolMeta = Context.getOrUndefined(annotations, Tool.Meta)
|
|
1488
|
+
const isDeclaredFailure = Schema.is(tool.failureSchema)
|
|
1489
|
+
const outputJsonSchema = Tool.getJsonSchemaFromSchema(tool.successSchema)
|
|
1490
|
+
const outputSchema = outputJsonSchema.type === "object"
|
|
1491
|
+
? yield* Schema.decodeUnknownEffect(ToolJsonSchema)(outputJsonSchema).pipe(Effect.orDie)
|
|
1492
|
+
: undefined
|
|
1493
|
+
const inputSchema = yield* Schema.decodeUnknownEffect(ToolJsonSchema)(
|
|
1494
|
+
Tool.getJsonSchema(tool)
|
|
1495
|
+
).pipe(Effect.orDie)
|
|
692
1496
|
const mcpTool = new McpTool({
|
|
693
1497
|
name: tool.name,
|
|
694
1498
|
description: Tool.getDescription(tool),
|
|
695
|
-
inputSchema
|
|
1499
|
+
inputSchema,
|
|
1500
|
+
...(outputSchema === undefined ? {} : { outputSchema }),
|
|
696
1501
|
annotations: {
|
|
697
1502
|
...(Context.getOption(tool.annotations, Tool.Title).pipe(
|
|
698
1503
|
Option.map((title) => ({ title })),
|
|
@@ -709,32 +1514,41 @@ export const registerToolkit: <Tools extends Record<string, Tool.Any>>(
|
|
|
709
1514
|
tool: mcpTool,
|
|
710
1515
|
annotations,
|
|
711
1516
|
handle(payload) {
|
|
712
|
-
return built.handle(tool.name as
|
|
1517
|
+
return built.handle(tool.name as keyof Tools, payload ?? {}).pipe(
|
|
713
1518
|
Stream.unwrap,
|
|
714
1519
|
Stream.run(Sink.last()),
|
|
715
1520
|
Effect.flatMap(Effect.fromOption),
|
|
716
|
-
Effect.provideContext(
|
|
717
|
-
|
|
718
|
-
|
|
719
|
-
|
|
720
|
-
|
|
721
|
-
|
|
722
|
-
|
|
723
|
-
|
|
724
|
-
|
|
725
|
-
|
|
726
|
-
|
|
727
|
-
|
|
728
|
-
|
|
729
|
-
|
|
730
|
-
|
|
731
|
-
|
|
732
|
-
|
|
733
|
-
|
|
734
|
-
|
|
1521
|
+
Effect.provideContext(
|
|
1522
|
+
services as Context.Context<Tool.HandlerServices<Tools[keyof Tools]>>
|
|
1523
|
+
),
|
|
1524
|
+
Effect.map((result) =>
|
|
1525
|
+
new CallToolResult({
|
|
1526
|
+
isError: false,
|
|
1527
|
+
structuredContent: typeof result.encodedResult === "object" ? result.encodedResult : undefined,
|
|
1528
|
+
content: result.encodedResult === undefined ? [] : [{
|
|
1529
|
+
type: "text",
|
|
1530
|
+
text: JSON.stringify(result.encodedResult)
|
|
1531
|
+
}]
|
|
1532
|
+
})
|
|
1533
|
+
),
|
|
1534
|
+
Effect.tapCause(Effect.logError),
|
|
1535
|
+
Effect.catch((error) => {
|
|
1536
|
+
if (AiError.isAiError(error)) {
|
|
1537
|
+
const reason = (error as AiError.AiError).reason
|
|
1538
|
+
return reason._tag === "ToolParameterValidationError"
|
|
1539
|
+
? Effect.fail(new InvalidParams({ message: reason.message }))
|
|
1540
|
+
: Effect.succeed(toolErrorResult(INTERNAL_TOOL_ERROR_MESSAGE))
|
|
1541
|
+
}
|
|
1542
|
+
if (isDeclaredFailure(error)) {
|
|
1543
|
+
const message = error instanceof Error
|
|
1544
|
+
? error.message
|
|
1545
|
+
: INTERNAL_TOOL_ERROR_MESSAGE
|
|
1546
|
+
return Effect.succeed(toolErrorResult(message))
|
|
1547
|
+
}
|
|
1548
|
+
return Effect.succeed(toolErrorResult(INTERNAL_TOOL_ERROR_MESSAGE))
|
|
735
1549
|
}),
|
|
736
|
-
Effect.
|
|
737
|
-
)
|
|
1550
|
+
Effect.catchDefect(() => Effect.succeed(toolErrorResult(INTERNAL_TOOL_ERROR_MESSAGE)))
|
|
1551
|
+
)
|
|
738
1552
|
}
|
|
739
1553
|
})
|
|
740
1554
|
}
|
|
@@ -743,7 +1557,7 @@ export const registerToolkit: <Tools extends Record<string, Tool.Any>>(
|
|
|
743
1557
|
/**
|
|
744
1558
|
* Registers an `AiToolkit` with the `McpServer`.
|
|
745
1559
|
*
|
|
746
|
-
* @category
|
|
1560
|
+
* @category layers
|
|
747
1561
|
* @since 4.0.0
|
|
748
1562
|
*/
|
|
749
1563
|
export const toolkit = <Tools extends Record<string, Tool.Any>>(
|
|
@@ -767,7 +1581,11 @@ export const toolkit = <Tools extends Record<string, Tool.Any>>(
|
|
|
767
1581
|
export type ValidateCompletions<Completions, Keys extends string> =
|
|
768
1582
|
& Completions
|
|
769
1583
|
& {
|
|
770
|
-
readonly [K in keyof Completions]: K extends Keys ? (
|
|
1584
|
+
readonly [K in keyof Completions]: K extends Keys ? (
|
|
1585
|
+
input: string,
|
|
1586
|
+
context: CompletionContext
|
|
1587
|
+
) => any
|
|
1588
|
+
: never
|
|
771
1589
|
}
|
|
772
1590
|
|
|
773
1591
|
/**
|
|
@@ -786,7 +1604,10 @@ export type ResourceCompletions<Schemas extends ReadonlyArray<Schema.Constraint>
|
|
|
786
1604
|
readonly [
|
|
787
1605
|
K in Extract<keyof Schemas, `${number}`> as Schemas[K] extends Param<infer Id, infer _S> ? Id
|
|
788
1606
|
: `param${K}`
|
|
789
|
-
]: (
|
|
1607
|
+
]: (
|
|
1608
|
+
input: string,
|
|
1609
|
+
context: CompletionContext
|
|
1610
|
+
) => Effect.Effect<Array<Schemas[K]["Type"]>, any, any>
|
|
790
1611
|
}
|
|
791
1612
|
|
|
792
1613
|
/**
|
|
@@ -800,7 +1621,7 @@ export type ResourceCompletions<Schemas extends ReadonlyArray<Schema.Constraint>
|
|
|
800
1621
|
*
|
|
801
1622
|
* @see {@link resource} for the layer-based resource registration wrapper
|
|
802
1623
|
*
|
|
803
|
-
* @category
|
|
1624
|
+
* @category handlers
|
|
804
1625
|
* @since 4.0.0
|
|
805
1626
|
*/
|
|
806
1627
|
export const registerResource: {
|
|
@@ -815,7 +1636,7 @@ export const registerResource: {
|
|
|
815
1636
|
*
|
|
816
1637
|
* @see {@link resource} for the layer-based resource registration wrapper
|
|
817
1638
|
*
|
|
818
|
-
* @category
|
|
1639
|
+
* @category handlers
|
|
819
1640
|
* @since 4.0.0
|
|
820
1641
|
*/
|
|
821
1642
|
<E, R>(
|
|
@@ -845,7 +1666,7 @@ export const registerResource: {
|
|
|
845
1666
|
*
|
|
846
1667
|
* @see {@link resource} for the layer-based resource registration wrapper
|
|
847
1668
|
*
|
|
848
|
-
* @category
|
|
1669
|
+
* @category handlers
|
|
849
1670
|
* @since 4.0.0
|
|
850
1671
|
*/
|
|
851
1672
|
<const Schemas extends ReadonlyArray<Schema.Constraint>>(segments: TemplateStringsArray, ...schemas: Schemas): <
|
|
@@ -923,7 +1744,15 @@ export const registerResource: {
|
|
|
923
1744
|
readonly mimeType?: string | undefined
|
|
924
1745
|
readonly audience?: ReadonlyArray<"user" | "assistant"> | undefined
|
|
925
1746
|
readonly priority?: number | undefined
|
|
926
|
-
readonly completion?:
|
|
1747
|
+
readonly completion?:
|
|
1748
|
+
| Record<
|
|
1749
|
+
string,
|
|
1750
|
+
(
|
|
1751
|
+
input: string,
|
|
1752
|
+
context: CompletionContext
|
|
1753
|
+
) => Effect.Effect<any>
|
|
1754
|
+
>
|
|
1755
|
+
| undefined
|
|
927
1756
|
readonly content: (uri: string, ...params: Array<any>) => Effect.Effect<
|
|
928
1757
|
typeof ReadResourceResult.Type | string | Uint8Array,
|
|
929
1758
|
E,
|
|
@@ -939,11 +1768,20 @@ export const registerResource: {
|
|
|
939
1768
|
uriTemplate: uriPath,
|
|
940
1769
|
annotations: options!
|
|
941
1770
|
})
|
|
942
|
-
const completions: Record<
|
|
1771
|
+
const completions: Record<
|
|
1772
|
+
string,
|
|
1773
|
+
(
|
|
1774
|
+
input: string,
|
|
1775
|
+
context: CompletionContext
|
|
1776
|
+
) => Effect.Effect<CompleteResult, InternalError>
|
|
1777
|
+
> = Object.create(null)
|
|
943
1778
|
for (const [param, handle] of Object.entries(options.completion ?? {})) {
|
|
944
1779
|
const encodeArray = Schema.encodeUnknownEffect(Schema.Array(params[param]))
|
|
945
|
-
const handler = (
|
|
946
|
-
|
|
1780
|
+
const handler = (
|
|
1781
|
+
input: string,
|
|
1782
|
+
context: CompletionContext
|
|
1783
|
+
) =>
|
|
1784
|
+
handle(input, context).pipe(
|
|
947
1785
|
Effect.flatMap(encodeArray),
|
|
948
1786
|
Effect.map((values) => ({
|
|
949
1787
|
completion: {
|
|
@@ -992,7 +1830,7 @@ export const registerResource: {
|
|
|
992
1830
|
*
|
|
993
1831
|
* @see {@link registerResource} for the Effect-level resource registration API
|
|
994
1832
|
*
|
|
995
|
-
* @category
|
|
1833
|
+
* @category layers
|
|
996
1834
|
* @since 4.0.0
|
|
997
1835
|
*/
|
|
998
1836
|
export const resource: {
|
|
@@ -1005,7 +1843,7 @@ export const resource: {
|
|
|
1005
1843
|
*
|
|
1006
1844
|
* @see {@link registerResource} for the Effect-level resource registration API
|
|
1007
1845
|
*
|
|
1008
|
-
* @category
|
|
1846
|
+
* @category layers
|
|
1009
1847
|
* @since 4.0.0
|
|
1010
1848
|
*/
|
|
1011
1849
|
<E, R>(
|
|
@@ -1032,7 +1870,7 @@ export const resource: {
|
|
|
1032
1870
|
*
|
|
1033
1871
|
* @see {@link registerResource} for the Effect-level resource registration API
|
|
1034
1872
|
*
|
|
1035
|
-
* @category
|
|
1873
|
+
* @category layers
|
|
1036
1874
|
* @since 4.0.0
|
|
1037
1875
|
*/
|
|
1038
1876
|
<const Schemas extends ReadonlyArray<Schema.Constraint>>(segments: TemplateStringsArray, ...schemas: Schemas): <
|
|
@@ -1091,7 +1929,7 @@ export const resource: {
|
|
|
1091
1929
|
*
|
|
1092
1930
|
* @see {@link prompt} for the layer-based prompt registration wrapper
|
|
1093
1931
|
*
|
|
1094
|
-
* @category
|
|
1932
|
+
* @category handlers
|
|
1095
1933
|
* @since 4.0.0
|
|
1096
1934
|
*/
|
|
1097
1935
|
export const registerPrompt = <
|
|
@@ -1099,7 +1937,10 @@ export const registerPrompt = <
|
|
|
1099
1937
|
R,
|
|
1100
1938
|
Params extends Schema.Struct.Fields = {},
|
|
1101
1939
|
const Completions extends {
|
|
1102
|
-
readonly [K in keyof Params]?: (
|
|
1940
|
+
readonly [K in keyof Params]?: (
|
|
1941
|
+
input: string,
|
|
1942
|
+
context: CompletionContext
|
|
1943
|
+
) => Effect.Effect<Array<Params[K]>, any, any>
|
|
1103
1944
|
} = {}
|
|
1104
1945
|
>(
|
|
1105
1946
|
options: {
|
|
@@ -1128,18 +1969,30 @@ export const registerPrompt = <
|
|
|
1128
1969
|
const decode = options.parameters
|
|
1129
1970
|
? Schema.decodeEffect(Schema.Struct(props))
|
|
1130
1971
|
: () => Effect.succeed({} as Params)
|
|
1131
|
-
const completion: Record<
|
|
1972
|
+
const completion: Record<
|
|
1973
|
+
string,
|
|
1974
|
+
(
|
|
1975
|
+
input: string,
|
|
1976
|
+
context: CompletionContext
|
|
1977
|
+
) => Effect.Effect<any>
|
|
1978
|
+
> = options.completion ?? {}
|
|
1132
1979
|
return Effect.gen(function*() {
|
|
1133
1980
|
const registry = yield* McpServer
|
|
1134
1981
|
const services = yield* Effect.context<Exclude<R | Schema.Struct.DecodingServices<Params>, McpServerClient>>()
|
|
1135
1982
|
const completions: Record<
|
|
1136
1983
|
string,
|
|
1137
|
-
(
|
|
1138
|
-
|
|
1984
|
+
(
|
|
1985
|
+
input: string,
|
|
1986
|
+
context: CompletionContext
|
|
1987
|
+
) => Effect.Effect<CompleteResult, InternalError, McpServerClient>
|
|
1988
|
+
> = Object.create(null)
|
|
1139
1989
|
for (const [param, handle] of Object.entries(completion)) {
|
|
1140
1990
|
const encodeArray = Schema.encodeEffect(Schema.Array(props[param]))
|
|
1141
|
-
const handler = (
|
|
1142
|
-
|
|
1991
|
+
const handler = (
|
|
1992
|
+
input: string,
|
|
1993
|
+
context: CompletionContext
|
|
1994
|
+
) =>
|
|
1995
|
+
handle(input, context).pipe(
|
|
1143
1996
|
Effect.flatMap(encodeArray),
|
|
1144
1997
|
Effect.map((values) => ({
|
|
1145
1998
|
completion: {
|
|
@@ -1163,7 +2016,14 @@ export const registerPrompt = <
|
|
|
1163
2016
|
handle: (params) =>
|
|
1164
2017
|
decode(params).pipe(
|
|
1165
2018
|
Effect.mapError((error) => new InvalidParams({ message: error.message })),
|
|
1166
|
-
Effect.flatMap((params) =>
|
|
2019
|
+
Effect.flatMap((params) =>
|
|
2020
|
+
options.content(params as any).pipe(
|
|
2021
|
+
Effect.catchCause((cause) => {
|
|
2022
|
+
const prettyError = Cause.prettyErrors(cause)[0]
|
|
2023
|
+
return Effect.fail(new InternalError({ message: prettyError.message }))
|
|
2024
|
+
})
|
|
2025
|
+
)
|
|
2026
|
+
),
|
|
1167
2027
|
Effect.map((messages) => {
|
|
1168
2028
|
messages = typeof messages === "string" ?
|
|
1169
2029
|
[{
|
|
@@ -1173,10 +2033,6 @@ export const registerPrompt = <
|
|
|
1173
2033
|
messages
|
|
1174
2034
|
return new GetPromptResult({ messages, description: prompt.description })
|
|
1175
2035
|
}),
|
|
1176
|
-
Effect.catchCause((cause) => {
|
|
1177
|
-
const prettyError = Cause.prettyErrors(cause)[0]
|
|
1178
|
-
return Effect.fail(new InternalError({ message: prettyError.message }))
|
|
1179
|
-
}),
|
|
1180
2036
|
Effect.provideContext(services as Context.Context<unknown>)
|
|
1181
2037
|
)
|
|
1182
2038
|
})
|
|
@@ -1198,7 +2054,7 @@ export const registerPrompt = <
|
|
|
1198
2054
|
*
|
|
1199
2055
|
* @see {@link registerPrompt} for the Effect-level prompt registration API
|
|
1200
2056
|
*
|
|
1201
|
-
* @category
|
|
2057
|
+
* @category layers
|
|
1202
2058
|
* @since 4.0.0
|
|
1203
2059
|
*/
|
|
1204
2060
|
export const prompt = <
|
|
@@ -1206,7 +2062,10 @@ export const prompt = <
|
|
|
1206
2062
|
R,
|
|
1207
2063
|
Params extends Schema.Struct.Fields = {},
|
|
1208
2064
|
const Completions extends {
|
|
1209
|
-
readonly [K in keyof Params]?: (
|
|
2065
|
+
readonly [K in keyof Params]?: (
|
|
2066
|
+
input: string,
|
|
2067
|
+
context: CompletionContext
|
|
2068
|
+
) => Effect.Effect<Array<Params[K]["Type"]>, any, any>
|
|
1210
2069
|
} = {}
|
|
1211
2070
|
>(
|
|
1212
2071
|
options: {
|
|
@@ -1233,7 +2092,7 @@ export const prompt = <
|
|
|
1233
2092
|
* Accepted content is decoded with the supplied schema, declined requests fail
|
|
1234
2093
|
* with `ElicitationDeclined`, and canceled requests interrupt the effect.
|
|
1235
2094
|
*
|
|
1236
|
-
* @category
|
|
2095
|
+
* @category accessors
|
|
1237
2096
|
* @since 4.0.0
|
|
1238
2097
|
*/
|
|
1239
2098
|
export const elicit: <S extends Schema.ConstraintEncoder<Record<string, unknown>, unknown>>(options: {
|
|
@@ -1254,7 +2113,7 @@ export const elicit: <S extends Schema.ConstraintEncoder<Record<string, unknown>
|
|
|
1254
2113
|
message: options.message,
|
|
1255
2114
|
requestedSchema: Tool.getJsonSchemaFromSchema(schema)
|
|
1256
2115
|
})
|
|
1257
|
-
const res = yield* client
|
|
2116
|
+
const res = yield* client.elicit(request).pipe(
|
|
1258
2117
|
Effect.catchCause((cause) => Effect.fail(new ElicitationDeclined({ cause: Cause.squash(cause), request })))
|
|
1259
2118
|
)
|
|
1260
2119
|
switch (res.action) {
|
|
@@ -1270,14 +2129,14 @@ export const elicit: <S extends Schema.ConstraintEncoder<Record<string, unknown>
|
|
|
1270
2129
|
/**
|
|
1271
2130
|
* Accesses the current client's capabilities.
|
|
1272
2131
|
*
|
|
1273
|
-
* @category
|
|
2132
|
+
* @category accessors
|
|
1274
2133
|
* @since 4.0.0
|
|
1275
2134
|
*/
|
|
1276
2135
|
export const clientCapabilities: Effect.Effect<
|
|
1277
2136
|
ClientCapabilities,
|
|
1278
2137
|
never,
|
|
1279
2138
|
McpServerClient
|
|
1280
|
-
> = McpServerClient.useSync((_) => _.
|
|
2139
|
+
> = McpServerClient.useSync((_) => _.clientCapabilities)
|
|
1281
2140
|
|
|
1282
2141
|
// -----------------------------------------------------------------------------
|
|
1283
2142
|
// Internal
|
|
@@ -1300,7 +2159,7 @@ const makeUriMatcher = <A>() => {
|
|
|
1300
2159
|
const compileUriTemplate = (segments: TemplateStringsArray, ...schemas: ReadonlyArray<Schema.Constraint>) => {
|
|
1301
2160
|
let routerPath = segments[0].replace(":", "::")
|
|
1302
2161
|
let uriPath = segments[0]
|
|
1303
|
-
const params: Record<string, Schema.Top> =
|
|
2162
|
+
const params: Record<string, Schema.Top> = Object.create(null)
|
|
1304
2163
|
let pathSchema = Schema.Tuple([]) as Schema.Top
|
|
1305
2164
|
if (schemas.length > 0) {
|
|
1306
2165
|
const arr: Array<Schema.Top> = []
|
|
@@ -1325,143 +2184,143 @@ const compileUriTemplate = (segments: TemplateStringsArray, ...schemas: Readonly
|
|
|
1325
2184
|
} as const
|
|
1326
2185
|
}
|
|
1327
2186
|
|
|
2187
|
+
const PingRpcs = RpcGroup.make(Ping).middleware(McpServerClientMiddleware)
|
|
1328
2188
|
const layerHandlers = (serverInfo: {
|
|
1329
2189
|
readonly name: string
|
|
1330
2190
|
readonly version: string
|
|
1331
|
-
readonly extensions?:
|
|
2191
|
+
readonly extensions?: ServerExtensions | undefined
|
|
1332
2192
|
}, options: {
|
|
1333
|
-
readonly
|
|
2193
|
+
readonly sessions: Sessions
|
|
2194
|
+
readonly protocolRegistry: McpProtocolRegistry.ProtocolRegistry<McpProtocol.ProtocolAdapter>
|
|
1334
2195
|
}) =>
|
|
1335
|
-
|
|
2196
|
+
Layer.effectContext(
|
|
1336
2197
|
Effect.gen(function*() {
|
|
1337
2198
|
const server = yield* McpServer
|
|
1338
|
-
|
|
1339
|
-
|
|
1340
|
-
|
|
1341
|
-
|
|
1342
|
-
|
|
1343
|
-
|
|
1344
|
-
|
|
1345
|
-
|
|
1346
|
-
|
|
1347
|
-
|
|
1348
|
-
|
|
1349
|
-
|
|
1350
|
-
|
|
1351
|
-
|
|
1352
|
-
|
|
1353
|
-
|
|
1354
|
-
|
|
1355
|
-
|
|
1356
|
-
|
|
1357
|
-
|
|
1358
|
-
|
|
1359
|
-
|
|
1360
|
-
|
|
1361
|
-
|
|
1362
|
-
|
|
1363
|
-
|
|
1364
|
-
|
|
1365
|
-
|
|
1366
|
-
|
|
1367
|
-
|
|
1368
|
-
|
|
1369
|
-
|
|
1370
|
-
|
|
1371
|
-
|
|
1372
|
-
|
|
1373
|
-
|
|
1374
|
-
|
|
1375
|
-
|
|
1376
|
-
|
|
1377
|
-
|
|
1378
|
-
|
|
1379
|
-
|
|
1380
|
-
|
|
1381
|
-
|
|
1382
|
-
|
|
2199
|
+
const defaultLogLevel = yield* CurrentLogLevel
|
|
2200
|
+
const contextMap = new Map<string, unknown>()
|
|
2201
|
+
const internalCore = internalState.get(server)!.core
|
|
2202
|
+
const handlerTarget = options.protocolRegistry.handlerTarget(contextMap)
|
|
2203
|
+
|
|
2204
|
+
for (const protocol of options.protocolRegistry.protocols) {
|
|
2205
|
+
const wireHandlers = PingRpcs.of({
|
|
2206
|
+
// Requests
|
|
2207
|
+
ping: () => Effect.succeed({})
|
|
2208
|
+
})
|
|
2209
|
+
yield* handlerTarget.install(protocol, PingRpcs, wireHandlers)
|
|
2210
|
+
const lifecycle: McpProtocolInternal.LifecycleRuntime = {
|
|
2211
|
+
initialize: Effect.fnUntraced(
|
|
2212
|
+
function*(protocolVersion, profile, clientId) {
|
|
2213
|
+
const presence = yield* internalCore.registrationPresence
|
|
2214
|
+
let capabilities: McpCore.CanonicalServerCapabilities = {
|
|
2215
|
+
completions: true,
|
|
2216
|
+
logging: true
|
|
2217
|
+
}
|
|
2218
|
+
if (presence.tools) {
|
|
2219
|
+
capabilities = { ...capabilities, tools: { listChanged: true } }
|
|
2220
|
+
}
|
|
2221
|
+
if (presence.resources) {
|
|
2222
|
+
capabilities = {
|
|
2223
|
+
...capabilities,
|
|
2224
|
+
resources: {
|
|
2225
|
+
listChanged: true,
|
|
2226
|
+
subscribe: true
|
|
2227
|
+
}
|
|
2228
|
+
}
|
|
2229
|
+
}
|
|
2230
|
+
if (presence.prompts) {
|
|
2231
|
+
capabilities = { ...capabilities, prompts: { listChanged: true } }
|
|
2232
|
+
}
|
|
2233
|
+
if (serverInfo.extensions) {
|
|
2234
|
+
capabilities = {
|
|
2235
|
+
...capabilities,
|
|
2236
|
+
extensions: serverInfo.extensions
|
|
2237
|
+
}
|
|
2238
|
+
}
|
|
2239
|
+
return yield* Effect.withFiber((fiber) => {
|
|
2240
|
+
const httpRequest = Context.getOrUndefined(fiber.context, HttpServerRequest.HttpServerRequest)
|
|
2241
|
+
if (httpRequest !== undefined && capabilities.resources !== undefined) {
|
|
2242
|
+
capabilities = {
|
|
2243
|
+
...capabilities,
|
|
2244
|
+
resources: { ...capabilities.resources, subscribe: false }
|
|
2245
|
+
}
|
|
2246
|
+
}
|
|
2247
|
+
const initializePayload = Initialize.payloadSchema.make({
|
|
2248
|
+
protocolVersion,
|
|
2249
|
+
capabilities: profile.clientCapabilities,
|
|
2250
|
+
clientInfo: profile.clientInfo,
|
|
2251
|
+
_meta: profile.requestMetadata
|
|
2252
|
+
})
|
|
2253
|
+
const session: Session = {
|
|
2254
|
+
initializePayload,
|
|
2255
|
+
negotiatedProfile: profile,
|
|
2256
|
+
protocol,
|
|
2257
|
+
resourceSubscriptions: httpRequest === undefined && capabilities.resources?.subscribe === true
|
|
2258
|
+
? new Set()
|
|
2259
|
+
: undefined,
|
|
2260
|
+
logLevel: { _tag: "Effect", level: defaultLogLevel }
|
|
2261
|
+
}
|
|
2262
|
+
if (httpRequest) {
|
|
2263
|
+
const sessionId = crypto.randomUUID()
|
|
2264
|
+
options.sessions.bySessionId.set(sessionId, session)
|
|
2265
|
+
appendPreResponseHandlerUnsafe(httpRequest, (_req, res) =>
|
|
2266
|
+
Effect.succeed(HttpServerResponse.setHeaders(res, {
|
|
2267
|
+
[MCP_SESSION_ID_HEADER]: sessionId,
|
|
2268
|
+
[MCP_PROTOCOL_VERSION_HEADER]: protocol.protocolVersion
|
|
2269
|
+
})))
|
|
2270
|
+
} else {
|
|
2271
|
+
options.sessions.byClientId.set(clientId, session)
|
|
2272
|
+
}
|
|
2273
|
+
return Effect.succeed({
|
|
2274
|
+
capabilities,
|
|
2275
|
+
serverInfo: {
|
|
2276
|
+
name: serverInfo.name,
|
|
2277
|
+
version: serverInfo.version
|
|
2278
|
+
}
|
|
2279
|
+
})
|
|
2280
|
+
})
|
|
1383
2281
|
}
|
|
1384
|
-
return Effect.succeed({
|
|
1385
|
-
capabilities,
|
|
1386
|
-
serverInfo,
|
|
1387
|
-
protocolVersion: requestedVersion
|
|
1388
|
-
})
|
|
1389
|
-
})
|
|
1390
|
-
},
|
|
1391
|
-
"completion/complete": (r) =>
|
|
1392
|
-
server.completion(r).pipe(
|
|
1393
|
-
Effect.provideService(CurrentLogLevel, currentLogLevel)
|
|
1394
2282
|
),
|
|
1395
|
-
|
|
1396
|
-
|
|
1397
|
-
|
|
1398
|
-
|
|
1399
|
-
case "info":
|
|
1400
|
-
currentLogLevel = "Info"
|
|
1401
|
-
break
|
|
1402
|
-
case "error":
|
|
1403
|
-
currentLogLevel = "Error"
|
|
1404
|
-
break
|
|
1405
|
-
case "debug":
|
|
1406
|
-
currentLogLevel = "Debug"
|
|
1407
|
-
break
|
|
1408
|
-
case "warning":
|
|
1409
|
-
currentLogLevel = "Warn"
|
|
1410
|
-
break
|
|
1411
|
-
case "critical":
|
|
1412
|
-
case "alert":
|
|
1413
|
-
case "emergency":
|
|
1414
|
-
currentLogLevel = "Fatal"
|
|
1415
|
-
break
|
|
2283
|
+
setLogLevel: Effect.fnUntraced(function*(level, clientId, headers) {
|
|
2284
|
+
const session = getClientSession(options.sessions, clientId, headers)
|
|
2285
|
+
if (session === undefined) {
|
|
2286
|
+
return
|
|
1416
2287
|
}
|
|
2288
|
+
session.logLevel = { _tag: "Mcp", level }
|
|
1417
2289
|
}),
|
|
1418
|
-
|
|
1419
|
-
|
|
1420
|
-
|
|
1421
|
-
|
|
1422
|
-
|
|
1423
|
-
|
|
1424
|
-
|
|
1425
|
-
|
|
1426
|
-
|
|
1427
|
-
"resources/list": (_, { client, headers }) =>
|
|
1428
|
-
Effect.sync(() => {
|
|
1429
|
-
const initialized = getInitializedClient(options.clientSessions, client.id, headers)
|
|
1430
|
-
return new ListResourcesResult({ resources: filterByClient(initialized, server.resources, "resource") })
|
|
1431
|
-
}),
|
|
1432
|
-
"resources/read": ({ uri }) =>
|
|
1433
|
-
server.findResource(uri).pipe(
|
|
1434
|
-
Effect.provideService(CurrentLogLevel, currentLogLevel)
|
|
1435
|
-
),
|
|
1436
|
-
"resources/subscribe": () =>
|
|
1437
|
-
InternalError.notImplemented,
|
|
1438
|
-
"resources/unsubscribe": () =>
|
|
1439
|
-
InternalError.notImplemented,
|
|
1440
|
-
"resources/templates/list": (_, { client, headers }) =>
|
|
1441
|
-
Effect.sync(() => {
|
|
1442
|
-
const initialized = getInitializedClient(options.clientSessions, client.id, headers)
|
|
1443
|
-
return new ListResourceTemplatesResult({
|
|
1444
|
-
resourceTemplates: filterByClient(initialized, server.resourceTemplates, "template")
|
|
1445
|
-
})
|
|
2290
|
+
subscribe: Effect.fnUntraced(function*(uri, clientId, headers) {
|
|
2291
|
+
const subscriptions = getClientSession(options.sessions, clientId, headers)?.resourceSubscriptions
|
|
2292
|
+
if (subscriptions === undefined) {
|
|
2293
|
+
return yield* new McpProtocolInternal.ProtocolError({
|
|
2294
|
+
code: McpSchema.METHOD_NOT_FOUND_ERROR_CODE,
|
|
2295
|
+
message: "Resource subscriptions are not supported"
|
|
2296
|
+
})
|
|
2297
|
+
}
|
|
2298
|
+
subscriptions.add(uri)
|
|
1446
2299
|
}),
|
|
1447
|
-
|
|
1448
|
-
|
|
1449
|
-
|
|
1450
|
-
|
|
1451
|
-
|
|
1452
|
-
|
|
1453
|
-
|
|
1454
|
-
|
|
1455
|
-
|
|
1456
|
-
})
|
|
2300
|
+
unsubscribe: Effect.fnUntraced(function*(uri, clientId, headers) {
|
|
2301
|
+
const subscriptions = getClientSession(options.sessions, clientId, headers)?.resourceSubscriptions
|
|
2302
|
+
if (subscriptions === undefined) {
|
|
2303
|
+
return yield* new McpProtocolInternal.ProtocolError({
|
|
2304
|
+
code: McpSchema.METHOD_NOT_FOUND_ERROR_CODE,
|
|
2305
|
+
message: "Resource subscriptions are not supported"
|
|
2306
|
+
})
|
|
2307
|
+
}
|
|
2308
|
+
subscriptions.delete(uri)
|
|
1457
2309
|
}),
|
|
1458
|
-
|
|
1459
|
-
|
|
1460
|
-
|
|
1461
|
-
|
|
1462
|
-
|
|
1463
|
-
|
|
1464
|
-
|
|
2310
|
+
clientNotification: Effect.fnUntraced(function*(notification, clientId) {
|
|
2311
|
+
if (notification._tag === "Initialized") {
|
|
2312
|
+
server.initializedClients.add(clientId)
|
|
2313
|
+
}
|
|
2314
|
+
return
|
|
2315
|
+
})
|
|
2316
|
+
}
|
|
2317
|
+
yield* protocol.installHandlers(
|
|
2318
|
+
internalCore,
|
|
2319
|
+
lifecycle,
|
|
2320
|
+
handlerTarget
|
|
2321
|
+
)
|
|
2322
|
+
}
|
|
2323
|
+
return Context.makeUnsafe(contextMap)
|
|
1465
2324
|
})
|
|
1466
2325
|
)
|
|
1467
2326
|
|
|
@@ -1487,38 +2346,84 @@ const resolveResourceContent = (
|
|
|
1487
2346
|
return content
|
|
1488
2347
|
}
|
|
1489
2348
|
|
|
1490
|
-
const
|
|
1491
|
-
|
|
1492
|
-
readonly annotations: Context.Context<never>
|
|
1493
|
-
},
|
|
1494
|
-
P extends keyof A
|
|
1495
|
-
>(
|
|
1496
|
-
client: typeof Initialize.payloadSchema.Type | undefined,
|
|
1497
|
-
items: ReadonlyArray<A>,
|
|
1498
|
-
prop: P
|
|
1499
|
-
): Array<A[P]> => {
|
|
1500
|
-
if (!client) {
|
|
1501
|
-
return items.map((item) => item[prop])
|
|
1502
|
-
}
|
|
1503
|
-
const out = Arr.empty<A[P]>()
|
|
1504
|
-
for (let i = 0; i < items.length; i++) {
|
|
1505
|
-
const item = items[i]
|
|
1506
|
-
const enabledWhen = Context.getOrUndefined(item.annotations, EnabledWhen)
|
|
1507
|
-
if (!enabledWhen || enabledWhen(client)) {
|
|
1508
|
-
out.push(item[prop])
|
|
1509
|
-
}
|
|
1510
|
-
}
|
|
1511
|
-
return out
|
|
1512
|
-
}
|
|
1513
|
-
|
|
1514
|
-
const getInitializedClient = (
|
|
1515
|
-
sessions: Map<string, typeof Initialize.payloadSchema.Type>,
|
|
2349
|
+
const getClientSession = (
|
|
2350
|
+
sessions: Sessions,
|
|
1516
2351
|
clientId: number,
|
|
1517
2352
|
headers: Headers.Headers
|
|
1518
2353
|
) => {
|
|
1519
|
-
const sessionId = headers[
|
|
2354
|
+
const sessionId = headers[MCP_SESSION_ID_HEADER]
|
|
1520
2355
|
if (sessionId === undefined) {
|
|
1521
|
-
return sessions.get(
|
|
2356
|
+
return sessions.byClientId.get(clientId)
|
|
1522
2357
|
}
|
|
1523
|
-
return sessions.get(sessionId)
|
|
2358
|
+
return sessions.bySessionId.get(sessionId)
|
|
1524
2359
|
}
|
|
2360
|
+
|
|
2361
|
+
const InvalidBatchExit = Schema.Struct({
|
|
2362
|
+
_tag: Schema.Literal("Exit"),
|
|
2363
|
+
requestId: Schema.Null,
|
|
2364
|
+
exit: Schema.Struct({
|
|
2365
|
+
_tag: Schema.Literal("Failure"),
|
|
2366
|
+
cause: Schema.Unknown
|
|
2367
|
+
})
|
|
2368
|
+
})
|
|
2369
|
+
|
|
2370
|
+
const decodeInvalidBatchExit = Schema.decodeUnknownResult(InvalidBatchExit)
|
|
2371
|
+
|
|
2372
|
+
const mcpLogLevels: Record<McpSchema.LoggingLevel, { readonly effect: LogLevel.LogLevel; readonly order: number }> = {
|
|
2373
|
+
debug: { effect: "Debug", order: 0 },
|
|
2374
|
+
info: { effect: "Info", order: 1 },
|
|
2375
|
+
notice: { effect: "Info", order: 2 },
|
|
2376
|
+
warning: { effect: "Warn", order: 3 },
|
|
2377
|
+
error: { effect: "Error", order: 4 },
|
|
2378
|
+
critical: { effect: "Fatal", order: 5 },
|
|
2379
|
+
alert: { effect: "Fatal", order: 6 },
|
|
2380
|
+
emergency: { effect: "Fatal", order: 7 }
|
|
2381
|
+
}
|
|
2382
|
+
|
|
2383
|
+
const effectLogLevel = (logLevel: SessionLogLevel | undefined, fallback: LogLevel.LogLevel): LogLevel.LogLevel =>
|
|
2384
|
+
logLevel?._tag === "Mcp" ? mcpLogLevels[logLevel.level].effect : logLevel?.level ?? fallback
|
|
2385
|
+
|
|
2386
|
+
const isMcpLogLevelEnabled = (
|
|
2387
|
+
level: McpSchema.LoggingLevel,
|
|
2388
|
+
minimum: SessionLogLevel | undefined,
|
|
2389
|
+
fallback: LogLevel.LogLevel
|
|
2390
|
+
): boolean =>
|
|
2391
|
+
minimum?._tag === "Mcp"
|
|
2392
|
+
? mcpLogLevels[level].order >= mcpLogLevels[minimum.level].order
|
|
2393
|
+
: LogLevel.isGreaterThanOrEqualTo(mcpLogLevels[level].effect, minimum?.level ?? fallback)
|
|
2394
|
+
|
|
2395
|
+
const OfferedProtocolVersion = Schema.Struct({
|
|
2396
|
+
protocolVersion: Schema.String
|
|
2397
|
+
})
|
|
2398
|
+
|
|
2399
|
+
const getOfferedProtocolVersion = (payload: unknown): string => {
|
|
2400
|
+
const decoded = Schema.decodeUnknownResult(OfferedProtocolVersion)(payload)
|
|
2401
|
+
return Result.isSuccess(decoded) ? decoded.success.protocolVersion : ""
|
|
2402
|
+
}
|
|
2403
|
+
|
|
2404
|
+
const protocolForInternalTag = (
|
|
2405
|
+
registry: McpProtocolRegistry.ProtocolRegistry<McpProtocol.ProtocolAdapter>,
|
|
2406
|
+
tag: string
|
|
2407
|
+
): McpProtocol.ProtocolAdapter => {
|
|
2408
|
+
for (const protocol of registry.protocols) {
|
|
2409
|
+
const routed = registry.routeClientRequest(protocol, {
|
|
2410
|
+
_tag: "Request",
|
|
2411
|
+
id: 0,
|
|
2412
|
+
tag: "",
|
|
2413
|
+
payload: undefined,
|
|
2414
|
+
headers: []
|
|
2415
|
+
})
|
|
2416
|
+
if (tag.startsWith(routed.tag)) {
|
|
2417
|
+
return protocol
|
|
2418
|
+
}
|
|
2419
|
+
}
|
|
2420
|
+
return registry.protocols[0]
|
|
2421
|
+
}
|
|
2422
|
+
|
|
2423
|
+
const getProtocolForClient = (
|
|
2424
|
+
clientProtocols: Map<number, McpProtocol.ProtocolAdapter>,
|
|
2425
|
+
clientId: number,
|
|
2426
|
+
registry: McpProtocolRegistry.ProtocolRegistry<McpProtocol.ProtocolAdapter>
|
|
2427
|
+
): McpProtocol.ProtocolAdapter =>
|
|
2428
|
+
clientProtocols.get(clientId) ??
|
|
2429
|
+
registry.protocols[0]
|