effect 4.0.0-beta.102 → 4.0.0-beta.103
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/Array.d.ts +971 -1037
- package/dist/Array.d.ts.map +1 -1
- package/dist/Array.js +381 -407
- 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.js.map +1 -1
- package/dist/Cache.d.ts +405 -254
- package/dist/Cache.d.ts.map +1 -1
- package/dist/Cache.js +166 -101
- 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 +729 -768
- package/dist/Channel.d.ts.map +1 -1
- package/dist/Channel.js +514 -440
- 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 +225 -173
- package/dist/Config.d.ts.map +1 -1
- package/dist/Config.js +336 -265
- package/dist/Config.js.map +1 -1
- package/dist/ConfigProvider.d.ts +194 -68
- package/dist/ConfigProvider.d.ts.map +1 -1
- package/dist/ConfigProvider.js +115 -80
- 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 +151 -274
- package/dist/Context.d.ts.map +1 -1
- package/dist/Context.js +171 -214
- package/dist/Context.js.map +1 -1
- package/dist/Cron.d.ts +68 -77
- package/dist/Cron.d.ts.map +1 -1
- package/dist/Cron.js +57 -66
- 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 +9 -10
- 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 +16 -23
- 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 +104 -96
- 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 +132 -186
- package/dist/Duration.js.map +1 -1
- package/dist/Effect.d.ts +2841 -3247
- package/dist/Effect.d.ts.map +1 -1
- package/dist/Effect.js +1322 -1546
- 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 +29 -21
- 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 +51 -27
- package/dist/ErrorReporter.d.ts.map +1 -1
- package/dist/ErrorReporter.js +50 -26
- package/dist/ErrorReporter.js.map +1 -1
- package/dist/ExecutionPlan.d.ts +13 -55
- package/dist/ExecutionPlan.d.ts.map +1 -1
- package/dist/ExecutionPlan.js +7 -28
- 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 +82 -146
- 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 +106 -73
- 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 +85 -59
- package/dist/FiberSet.js.map +1 -1
- package/dist/FileSystem.d.ts +153 -264
- 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 +25 -33
- package/dist/Formatter.d.ts.map +1 -1
- package/dist/Formatter.js +48 -49
- package/dist/Formatter.js.map +1 -1
- package/dist/Function.d.ts +76 -145
- package/dist/Function.d.ts.map +1 -1
- package/dist/Function.js +40 -57
- 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 +12 -12
- package/dist/Inspectable.js +8 -8
- 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 +228 -306
- 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 +44 -102
- 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 +297 -234
- 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 +359 -260
- package/dist/Layer.d.ts.map +1 -1
- package/dist/Layer.js +195 -175
- 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 +218 -467
- package/dist/Logger.d.ts.map +1 -1
- package/dist/Logger.js +204 -450
- package/dist/Logger.js.map +1 -1
- package/dist/ManagedRuntime.d.ts +7 -5
- package/dist/ManagedRuntime.d.ts.map +1 -1
- package/dist/ManagedRuntime.js +7 -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 +198 -642
- 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 +59 -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 +97 -189
- package/dist/Optic.d.ts.map +1 -1
- package/dist/Optic.js +187 -290
- 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 +211 -392
- 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.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 +162 -132
- 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 +291 -488
- package/dist/Record.d.ts.map +1 -1
- package/dist/Record.js +111 -202
- 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 -168
- package/dist/References.d.ts.map +1 -1
- package/dist/References.js +102 -168
- 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 +16 -13
- 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 +133 -217
- 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 +290 -1636
- package/dist/Schedule.d.ts.map +1 -1
- package/dist/Schedule.js +162 -803
- 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 +644 -642
- package/dist/Schema.d.ts.map +1 -1
- package/dist/Schema.js +491 -527
- package/dist/Schema.js.map +1 -1
- package/dist/SchemaAST.d.ts +27 -50
- package/dist/SchemaAST.d.ts.map +1 -1
- package/dist/SchemaAST.js +366 -279
- package/dist/SchemaAST.js.map +1 -1
- package/dist/SchemaError.d.ts +7 -6
- package/dist/SchemaError.d.ts.map +1 -1
- package/dist/SchemaError.js +7 -6
- package/dist/SchemaError.js.map +1 -1
- package/dist/SchemaGetter.d.ts +217 -174
- package/dist/SchemaGetter.d.ts.map +1 -1
- package/dist/SchemaGetter.js +218 -185
- package/dist/SchemaGetter.js.map +1 -1
- package/dist/SchemaIssue.d.ts +62 -190
- package/dist/SchemaIssue.d.ts.map +1 -1
- package/dist/SchemaIssue.js +73 -265
- package/dist/SchemaIssue.js.map +1 -1
- package/dist/SchemaParser.d.ts +2 -2
- package/dist/SchemaParser.d.ts.map +1 -1
- package/dist/SchemaParser.js +123 -75
- package/dist/SchemaParser.js.map +1 -1
- package/dist/SchemaRepresentation.d.ts +22 -36
- package/dist/SchemaRepresentation.d.ts.map +1 -1
- package/dist/SchemaRepresentation.js +20 -26
- package/dist/SchemaRepresentation.js.map +1 -1
- package/dist/SchemaTransformation.d.ts +114 -74
- package/dist/SchemaTransformation.d.ts.map +1 -1
- package/dist/SchemaTransformation.js +120 -85
- 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.map +1 -1
- package/dist/ScopedRef.d.ts +3 -3
- package/dist/ScopedRef.js +2 -2
- package/dist/ScopedRef.js.map +1 -1
- package/dist/Semaphore.d.ts +96 -10
- 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 +117 -107
- 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 +1 -1
- package/dist/Stdio.js.map +1 -1
- package/dist/Stream.d.ts +2415 -2949
- package/dist/Stream.d.ts.map +1 -1
- package/dist/Stream.js +1078 -1381
- 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 +41 -50
- 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.map +1 -1
- package/dist/Take.js.map +1 -1
- package/dist/Terminal.d.ts +2 -2
- package/dist/Terminal.js +1 -1
- 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 +92 -127
- 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 +160 -136
- package/dist/TxQueue.js.map +1 -1
- package/dist/TxReentrantLock.d.ts +97 -66
- package/dist/TxReentrantLock.d.ts.map +1 -1
- package/dist/TxReentrantLock.js +67 -45
- 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 +126 -67
- 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.js.map +1 -1
- package/dist/internal/array.js.map +1 -1
- package/dist/internal/core.js +1 -1
- package/dist/internal/core.js.map +1 -1
- package/dist/internal/dateTime.js +4 -0
- package/dist/internal/dateTime.js.map +1 -1
- package/dist/internal/doNotation.js.map +1 -1
- package/dist/internal/effect.js +77 -40
- 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.map +1 -1
- 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.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.map +1 -1
- package/dist/internal/record.js.map +1 -1
- package/dist/internal/redacted.js.map +1 -1
- package/dist/internal/references.js +3 -0
- 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.map +1 -1
- package/dist/internal/schema/cause.js.map +1 -1
- package/dist/internal/schema/fromJsonSchemaDocument.js +13 -11
- package/dist/internal/schema/fromJsonSchemaDocument.js.map +1 -1
- package/dist/internal/schema/fromRepresentation.js +8 -15
- package/dist/internal/schema/fromRepresentation.js.map +1 -1
- 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.map +1 -1
- package/dist/internal/schema/toArbitrary.js.map +1 -1
- package/dist/internal/schema/toCodeDocument.js.map +1 -1
- package/dist/internal/schema/toEquivalence.js.map +1 -1
- package/dist/internal/schema/toJsonSchemaDocument.js +48 -6
- package/dist/internal/schema/toJsonSchemaDocument.js.map +1 -1
- package/dist/internal/schema/toRepresentation.js +87 -107
- package/dist/internal/schema/toRepresentation.js.map +1 -1
- 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 +13 -9
- package/dist/internal/trie.js.map +1 -1
- 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 +57 -28
- package/dist/testing/TestClock.d.ts.map +1 -1
- package/dist/testing/TestClock.js +50 -18
- 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 +29 -29
- package/dist/testing/TestSchema.js +25 -25
- package/dist/testing/TestSchema.js.map +1 -1
- package/dist/testing/index.js.map +1 -1
- package/dist/unstable/ai/AiError.d.ts +95 -118
- package/dist/unstable/ai/AiError.d.ts.map +1 -1
- package/dist/unstable/ai/AiError.js +94 -117
- package/dist/unstable/ai/AiError.js.map +1 -1
- package/dist/unstable/ai/AnthropicStructuredOutput.d.ts +1 -1
- package/dist/unstable/ai/AnthropicStructuredOutput.js +1 -1
- 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 +55 -51
- package/dist/unstable/ai/Chat.js.map +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 +107 -67
- package/dist/unstable/ai/LanguageModel.d.ts.map +1 -1
- package/dist/unstable/ai/LanguageModel.js +104 -64
- package/dist/unstable/ai/LanguageModel.js.map +1 -1
- package/dist/unstable/ai/McpProtocol.d.ts +30 -0
- package/dist/unstable/ai/McpProtocol.d.ts.map +1 -0
- package/dist/unstable/ai/McpProtocol.js +20 -0
- package/dist/unstable/ai/McpProtocol.js.map +1 -0
- package/dist/unstable/ai/McpSchema.d.ts +141 -75
- package/dist/unstable/ai/McpSchema.d.ts.map +1 -1
- package/dist/unstable/ai/McpSchema.js +58 -50
- package/dist/unstable/ai/McpSchema.js.map +1 -1
- package/dist/unstable/ai/McpServer.d.ts +68 -59
- package/dist/unstable/ai/McpServer.d.ts.map +1 -1
- package/dist/unstable/ai/McpServer.js +694 -241
- 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 +1 -1
- package/dist/unstable/ai/OpenAiStructuredOutput.js +1 -1
- package/dist/unstable/ai/OpenAiStructuredOutput.js.map +1 -1
- package/dist/unstable/ai/Prompt.d.ts +112 -38
- package/dist/unstable/ai/Prompt.d.ts.map +1 -1
- package/dist/unstable/ai/Prompt.js +53 -17
- package/dist/unstable/ai/Prompt.js.map +1 -1
- package/dist/unstable/ai/Response.d.ts +28 -14
- package/dist/unstable/ai/Response.d.ts.map +1 -1
- package/dist/unstable/ai/Response.js +9 -4
- 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 +59 -44
- package/dist/unstable/ai/Tool.d.ts.map +1 -1
- package/dist/unstable/ai/Tool.js +48 -39
- package/dist/unstable/ai/Tool.js.map +1 -1
- package/dist/unstable/ai/Toolkit.d.ts +26 -8
- package/dist/unstable/ai/Toolkit.d.ts.map +1 -1
- package/dist/unstable/ai/Toolkit.js +18 -4
- 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.map +1 -1
- package/dist/unstable/ai/internal/mcpProtocol.d.ts +21 -0
- package/dist/unstable/ai/internal/mcpProtocol.d.ts.map +1 -0
- package/dist/unstable/ai/internal/mcpProtocol.js +22 -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 +32 -0
- package/dist/unstable/ai/internal/mcpProtocolRegistry.js.map +1 -0
- package/dist/unstable/ai/internal/structured-output.js +14 -15
- package/dist/unstable/ai/internal/structured-output.js.map +1 -1
- package/dist/unstable/cli/Argument.d.ts +273 -69
- package/dist/unstable/cli/Argument.d.ts.map +1 -1
- package/dist/unstable/cli/Argument.js +111 -33
- 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 +69 -76
- package/dist/unstable/cli/CliError.d.ts.map +1 -1
- package/dist/unstable/cli/CliError.js +57 -61
- 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 +705 -107
- package/dist/unstable/cli/Command.d.ts.map +1 -1
- package/dist/unstable/cli/Command.js +238 -42
- 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 +292 -78
- package/dist/unstable/cli/Param.d.ts.map +1 -1
- package/dist/unstable/cli/Param.js +128 -46
- 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 +344 -136
- 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 +23 -14
- 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.map +1 -1
- package/dist/unstable/cli/internal/auto-suggest.js.map +1 -1
- package/dist/unstable/cli/internal/command.js.map +1 -1
- package/dist/unstable/cli/internal/completions/bash.js.map +1 -1
- package/dist/unstable/cli/internal/completions/descriptor.js.map +1 -1
- 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.js.map +1 -1
- 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 +2 -2
- package/dist/unstable/cli/internal/parser.js.map +1 -1
- package/dist/unstable/cli/internal/wizard.js.map +1 -1
- package/dist/unstable/cluster/ClusterCron.js.map +1 -1
- 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 +5 -1
- 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 +10 -10
- package/dist/unstable/cluster/Entity.d.ts.map +1 -1
- package/dist/unstable/cluster/Entity.js +8 -8
- 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 +4 -2
- package/dist/unstable/cluster/EntityProxy.d.ts.map +1 -1
- package/dist/unstable/cluster/EntityProxy.js +4 -2
- 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 +2 -2
- package/dist/unstable/cluster/EntityResource.js +2 -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.js +3 -3
- 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.js.map +1 -1
- 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 +15 -15
- package/dist/unstable/cluster/MessageStorage.js +5 -5
- package/dist/unstable/cluster/MessageStorage.js.map +1 -1
- package/dist/unstable/cluster/Reply.d.ts.map +1 -1
- package/dist/unstable/cluster/Reply.js +4 -4
- package/dist/unstable/cluster/Reply.js.map +1 -1
- package/dist/unstable/cluster/Runner.js.map +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 +16 -16
- package/dist/unstable/cluster/RunnerServer.js.map +1 -1
- package/dist/unstable/cluster/RunnerStorage.d.ts +2 -2
- package/dist/unstable/cluster/RunnerStorage.js +1 -1
- package/dist/unstable/cluster/RunnerStorage.js.map +1 -1
- package/dist/unstable/cluster/Runners.d.ts +6 -6
- package/dist/unstable/cluster/Runners.d.ts.map +1 -1
- package/dist/unstable/cluster/Runners.js +19 -10
- package/dist/unstable/cluster/Runners.js.map +1 -1
- package/dist/unstable/cluster/ShardId.js.map +1 -1
- package/dist/unstable/cluster/Sharding.d.ts.map +1 -1
- package/dist/unstable/cluster/Sharding.js +3 -2
- package/dist/unstable/cluster/Sharding.js.map +1 -1
- package/dist/unstable/cluster/ShardingConfig.d.ts +3 -3
- package/dist/unstable/cluster/ShardingConfig.js +3 -3
- package/dist/unstable/cluster/ShardingConfig.js.map +1 -1
- package/dist/unstable/cluster/ShardingRegistrationEvent.js.map +1 -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.js +1 -1
- 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 +20 -5
- package/dist/unstable/cluster/SqlRunnerStorage.js.map +1 -1
- package/dist/unstable/cluster/TestRunner.js.map +1 -1
- package/dist/unstable/cluster/index.js.map +1 -1
- package/dist/unstable/cluster/internal/entityManager.js +5 -5
- 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.map +1 -1
- package/dist/unstable/cluster/internal/resourceRef.js.map +1 -1
- package/dist/unstable/cluster/internal/shardLock.js.map +1 -1
- package/dist/unstable/devtools/DevTools.js.map +1 -1
- package/dist/unstable/devtools/DevToolsClient.js.map +1 -1
- 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/Msgpack.d.ts.map +1 -1
- package/dist/unstable/encoding/Msgpack.js +6 -8
- package/dist/unstable/encoding/Msgpack.js.map +1 -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 +58 -8
- package/dist/unstable/encoding/Sse.js.map +1 -1
- 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 +15 -15
- package/dist/unstable/eventlog/EventJournal.js +13 -13
- package/dist/unstable/eventlog/EventJournal.js.map +1 -1
- package/dist/unstable/eventlog/EventLog.d.ts +3 -3
- package/dist/unstable/eventlog/EventLog.js +3 -3
- package/dist/unstable/eventlog/EventLog.js.map +1 -1
- package/dist/unstable/eventlog/EventLogEncryption.d.ts +1 -1
- package/dist/unstable/eventlog/EventLogEncryption.js +1 -1
- package/dist/unstable/eventlog/EventLogEncryption.js.map +1 -1
- package/dist/unstable/eventlog/EventLogMessage.d.ts +2 -2
- package/dist/unstable/eventlog/EventLogMessage.js +1 -1
- package/dist/unstable/eventlog/EventLogMessage.js.map +1 -1
- package/dist/unstable/eventlog/EventLogRemote.d.ts +15 -15
- package/dist/unstable/eventlog/EventLogRemote.js +1 -1
- 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 +13 -5
- 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 +14 -6
- 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.js.map +1 -1
- package/dist/unstable/eventlog/SqlEventLogServerEncrypted.js.map +1 -1
- 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 +30 -18
- 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.map +1 -1
- package/dist/unstable/http/Headers.d.ts +2 -2
- package/dist/unstable/http/Headers.js +2 -2
- 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 +51 -44
- package/dist/unstable/http/HttpClient.d.ts.map +1 -1
- package/dist/unstable/http/HttpClient.js +46 -17
- package/dist/unstable/http/HttpClient.js.map +1 -1
- package/dist/unstable/http/HttpClientError.js.map +1 -1
- package/dist/unstable/http/HttpClientRequest.d.ts.map +1 -1
- package/dist/unstable/http/HttpClientRequest.js +2 -0
- package/dist/unstable/http/HttpClientRequest.js.map +1 -1
- package/dist/unstable/http/HttpClientResponse.d.ts +4 -4
- package/dist/unstable/http/HttpClientResponse.js +2 -2
- package/dist/unstable/http/HttpClientResponse.js.map +1 -1
- package/dist/unstable/http/HttpEffect.d.ts +6 -6
- package/dist/unstable/http/HttpEffect.js +3 -3
- 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 +32 -0
- package/dist/unstable/http/HttpPlatform.js.map +1 -1
- package/dist/unstable/http/HttpRouter.d.ts +88 -89
- package/dist/unstable/http/HttpRouter.d.ts.map +1 -1
- package/dist/unstable/http/HttpRouter.js +78 -79
- 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.js +4 -4
- 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 +10 -0
- 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/HttpTraceContext.js.map +1 -1
- package/dist/unstable/http/Multipart.d.ts +6 -6
- package/dist/unstable/http/Multipart.js +5 -5
- package/dist/unstable/http/Multipart.js.map +1 -1
- 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 +9 -17
- package/dist/unstable/http/UrlParams.js.map +1 -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/preResponseHandler.js.map +1 -1
- 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 +10 -11
- 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 +11 -13
- package/dist/unstable/httpapi/HttpApiClient.js.map +1 -1
- package/dist/unstable/httpapi/HttpApiEndpoint.d.ts +42 -42
- package/dist/unstable/httpapi/HttpApiEndpoint.js.map +1 -1
- package/dist/unstable/httpapi/HttpApiError.d.ts +13 -13
- package/dist/unstable/httpapi/HttpApiError.js +13 -13
- package/dist/unstable/httpapi/HttpApiError.js.map +1 -1
- package/dist/unstable/httpapi/HttpApiGroup.d.ts +15 -15
- 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 +6 -6
- package/dist/unstable/httpapi/HttpApiSchema.js +4 -4
- 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 +13 -13
- package/dist/unstable/httpapi/OpenApi.js +13 -13
- 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 +12 -14
- package/dist/unstable/observability/OtlpExporter.d.ts.map +1 -1
- package/dist/unstable/observability/OtlpExporter.js +17 -4
- package/dist/unstable/observability/OtlpExporter.js.map +1 -1
- package/dist/unstable/observability/OtlpLogger.js.map +1 -1
- package/dist/unstable/observability/OtlpMetrics.d.ts +4 -1
- package/dist/unstable/observability/OtlpMetrics.d.ts.map +1 -1
- 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.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.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.js +6 -6
- 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 +91 -15
- package/dist/unstable/persistence/Persistence.js.map +1 -1
- package/dist/unstable/persistence/RateLimiter.d.ts +26 -15
- package/dist/unstable/persistence/RateLimiter.d.ts.map +1 -1
- package/dist/unstable/persistence/RateLimiter.js +24 -13
- package/dist/unstable/persistence/RateLimiter.js.map +1 -1
- package/dist/unstable/persistence/Redis.d.ts +2 -2
- package/dist/unstable/persistence/Redis.js +1 -1
- 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 +64 -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 +1 -1
- 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 +10 -10
- package/dist/unstable/reactivity/AsyncResult.js.map +1 -1
- package/dist/unstable/reactivity/Atom.d.ts +25 -22
- package/dist/unstable/reactivity/Atom.d.ts.map +1 -1
- package/dist/unstable/reactivity/Atom.js +14 -13
- 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 +24 -3
- 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.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 +12 -12
- package/dist/unstable/rpc/RpcClient.d.ts.map +1 -1
- package/dist/unstable/rpc/RpcClient.js +12 -11
- package/dist/unstable/rpc/RpcClient.js.map +1 -1
- package/dist/unstable/rpc/RpcClientError.js.map +1 -1
- package/dist/unstable/rpc/RpcGroup.d.ts +8 -8
- package/dist/unstable/rpc/RpcGroup.js +1 -1
- 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 +175 -96
- package/dist/unstable/rpc/RpcSerialization.js.map +1 -1
- package/dist/unstable/rpc/RpcServer.d.ts +13 -13
- package/dist/unstable/rpc/RpcServer.js +17 -13
- 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 +52 -50
- package/dist/unstable/schema/Model.d.ts.map +1 -1
- package/dist/unstable/schema/Model.js +35 -33
- package/dist/unstable/schema/Model.js.map +1 -1
- package/dist/unstable/schema/VariantSchema.d.ts +5 -5
- package/dist/unstable/schema/VariantSchema.js +2 -2
- 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 +11 -3
- package/dist/unstable/socket/Socket.d.ts.map +1 -1
- package/dist/unstable/socket/Socket.js +9 -4
- 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.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 +2 -2
- package/dist/unstable/sql/SqlClient.js.map +1 -1
- package/dist/unstable/sql/SqlConnection.js.map +1 -1
- 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.js +2 -2
- 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.js +15 -15
- 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.js +2 -2
- package/dist/unstable/workers/Worker.js.map +1 -1
- package/dist/unstable/workers/WorkerError.d.ts +7 -7
- package/dist/unstable/workers/WorkerError.js +6 -6
- 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.js +5 -5
- 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 +1 -1
- 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 +5 -6
- package/src/Array.ts +982 -1045
- package/src/BigDecimal.ts +433 -756
- package/src/BigInt.ts +213 -269
- package/src/Boolean.ts +146 -188
- package/src/Cache.ts +409 -255
- package/src/Cause.ts +167 -277
- package/src/Channel.ts +891 -816
- 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 +615 -332
- package/src/ConfigProvider.ts +214 -120
- package/src/Console.ts +289 -39
- package/src/Context.ts +319 -378
- package/src/Cron.ts +68 -77
- package/src/Crypto.ts +13 -15
- package/src/Data.ts +60 -80
- package/src/DateTime.ts +564 -660
- package/src/Deferred.ts +253 -256
- package/src/Duration.ts +216 -308
- package/src/Effect.ts +2893 -3279
- package/src/Encoding.ts +22 -40
- package/src/Equal.ts +49 -39
- package/src/Equivalence.ts +103 -105
- package/src/ErrorReporter.ts +51 -27
- package/src/ExecutionPlan.ts +13 -55
- package/src/Exit.ts +116 -192
- package/src/Fiber.ts +81 -148
- package/src/FiberHandle.ts +152 -105
- package/src/FiberMap.ts +225 -174
- package/src/FiberSet.ts +124 -82
- package/src/FileSystem.ts +155 -263
- package/src/Filter.ts +61 -33
- package/src/Formatter.ts +54 -56
- package/src/Function.ts +76 -145
- 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 +12 -12
- package/src/Iterable.ts +620 -786
- package/src/JsonPatch.ts +58 -112
- package/src/JsonPointer.ts +8 -8
- package/src/JsonSchema.ts +402 -244
- package/src/Latch.ts +23 -35
- package/src/Layer.ts +359 -260
- package/src/LayerMap.ts +49 -29
- package/src/LayerRef.ts +6 -2
- package/src/LogLevel.ts +114 -214
- package/src/Logger.ts +344 -697
- package/src/ManagedRuntime.ts +7 -5
- package/src/Match.ts +217 -252
- package/src/Metric.ts +516 -1089
- package/src/MutableHashMap.ts +218 -255
- package/src/MutableHashSet.ts +84 -89
- package/src/MutableList.ts +73 -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 +243 -383
- package/src/Option.ts +447 -812
- package/src/Order.ts +109 -109
- package/src/Ordering.ts +20 -23
- 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 +200 -159
- package/src/Random.ts +49 -74
- package/src/RcMap.ts +121 -63
- package/src/RcRef.ts +24 -13
- package/src/Record.ts +291 -488
- 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 -168
- package/src/RegExp.ts +10 -14
- package/src/Request.ts +31 -21
- package/src/RequestResolver.ts +202 -91
- package/src/Result.ts +312 -484
- package/src/Runtime.ts +50 -75
- package/src/Schedule.ts +308 -1734
- package/src/Scheduler.ts +20 -7
- package/src/Schema.ts +716 -745
- package/src/SchemaAST.ts +466 -358
- package/src/SchemaError.ts +7 -6
- package/src/SchemaGetter.ts +242 -190
- package/src/SchemaIssue.ts +89 -275
- package/src/SchemaParser.ts +180 -93
- package/src/SchemaRepresentation.ts +22 -40
- package/src/SchemaTransformation.ts +129 -88
- package/src/Scope.ts +123 -151
- package/src/ScopedRef.ts +4 -4
- package/src/Semaphore.ts +152 -51
- package/src/Sink.ts +128 -113
- package/src/Stdio.ts +1 -1
- package/src/Stream.ts +2602 -3123
- package/src/String.ts +275 -312
- package/src/Struct.ts +109 -114
- package/src/SubscriptionRef.ts +284 -252
- package/src/Symbol.ts +3 -3
- package/src/Terminal.ts +2 -2
- package/src/Tracer.ts +102 -55
- package/src/Trie.ts +287 -679
- package/src/Tuple.ts +92 -127
- 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 +214 -183
- package/src/TxReentrantLock.ts +97 -66
- package/src/TxRef.ts +51 -32
- package/src/TxSemaphore.ts +129 -95
- package/src/TxSubscriptionRef.ts +97 -70
- package/src/Types.ts +126 -67
- package/src/Unify.ts +45 -65
- package/src/Utils.ts +23 -16
- package/src/internal/core.ts +2 -2
- package/src/internal/dateTime.ts +6 -0
- package/src/internal/effect.ts +93 -48
- package/src/internal/persistence.ts +2 -0
- package/src/internal/references.ts +3 -2
- package/src/internal/schema/fromJsonSchemaDocument.ts +15 -13
- package/src/internal/schema/fromRepresentation.ts +10 -16
- package/src/internal/schema/parser.ts +22 -0
- package/src/internal/schema/toJsonSchemaDocument.ts +60 -6
- package/src/internal/schema/toRepresentation.ts +104 -119
- package/src/internal/trie.ts +10 -11
- package/src/testing/FastCheck.ts +8 -7
- package/src/testing/TestClock.ts +72 -30
- package/src/testing/TestConsole.ts +32 -31
- package/src/testing/TestSchema.ts +29 -29
- package/src/unstable/ai/AiError.ts +95 -118
- package/src/unstable/ai/AnthropicStructuredOutput.ts +1 -1
- package/src/unstable/ai/Chat.ts +132 -97
- package/src/unstable/ai/IdGenerator.ts +32 -28
- package/src/unstable/ai/LanguageModel.ts +107 -67
- package/src/unstable/ai/McpProtocol.ts +48 -0
- package/src/unstable/ai/McpSchema.ts +60 -50
- package/src/unstable/ai/McpServer.ts +930 -304
- package/src/unstable/ai/Model.ts +9 -20
- package/src/unstable/ai/OpenAiStructuredOutput.ts +1 -1
- package/src/unstable/ai/Prompt.ts +145 -43
- package/src/unstable/ai/Response.ts +28 -14
- package/src/unstable/ai/Telemetry.ts +46 -13
- package/src/unstable/ai/Tokenizer.ts +14 -3
- package/src/unstable/ai/Tool.ts +59 -44
- package/src/unstable/ai/Toolkit.ts +26 -8
- package/src/unstable/ai/index.ts +5 -0
- package/src/unstable/ai/internal/mcpProtocol.ts +85 -0
- package/src/unstable/ai/internal/mcpProtocolRegistry.ts +70 -0
- package/src/unstable/ai/internal/structured-output.ts +13 -18
- package/src/unstable/cli/Argument.ts +273 -69
- package/src/unstable/cli/CliError.ts +69 -76
- package/src/unstable/cli/CliOutput.ts +44 -58
- package/src/unstable/cli/Command.ts +705 -107
- 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 +292 -78
- package/src/unstable/cli/Primitive.ts +370 -149
- package/src/unstable/cli/Prompt.ts +28 -14
- package/src/unstable/cli/internal/lexer.ts +8 -2
- package/src/unstable/cli/internal/parser.ts +2 -2
- package/src/unstable/cluster/ClusterSchema.ts +8 -8
- package/src/unstable/cluster/ClusterWorkflowEngine.ts +5 -1
- package/src/unstable/cluster/Entity.ts +15 -16
- package/src/unstable/cluster/EntityProxy.ts +4 -2
- package/src/unstable/cluster/EntityResource.ts +2 -2
- package/src/unstable/cluster/Envelope.ts +3 -3
- package/src/unstable/cluster/HttpRunner.ts +6 -4
- package/src/unstable/cluster/Message.ts +9 -9
- package/src/unstable/cluster/MessageStorage.ts +15 -15
- package/src/unstable/cluster/Reply.ts +4 -6
- package/src/unstable/cluster/RunnerHealth.ts +1 -1
- package/src/unstable/cluster/RunnerServer.ts +41 -8
- package/src/unstable/cluster/RunnerStorage.ts +2 -2
- package/src/unstable/cluster/Runners.ts +23 -12
- package/src/unstable/cluster/Sharding.ts +7 -8
- package/src/unstable/cluster/ShardingConfig.ts +3 -3
- package/src/unstable/cluster/SingletonAddress.ts +1 -1
- package/src/unstable/cluster/Snowflake.ts +8 -8
- package/src/unstable/cluster/SqlMessageStorage.ts +1 -1
- package/src/unstable/cluster/SqlRunnerStorage.ts +21 -5
- package/src/unstable/cluster/internal/entityManager.ts +11 -15
- package/src/unstable/encoding/Msgpack.ts +6 -8
- package/src/unstable/encoding/Sse.ts +98 -16
- package/src/unstable/eventlog/Event.ts +20 -20
- package/src/unstable/eventlog/EventGroup.ts +4 -4
- package/src/unstable/eventlog/EventJournal.ts +15 -15
- package/src/unstable/eventlog/EventLog.ts +3 -3
- package/src/unstable/eventlog/EventLogEncryption.ts +1 -1
- package/src/unstable/eventlog/EventLogMessage.ts +2 -2
- package/src/unstable/eventlog/EventLogRemote.ts +1 -1
- package/src/unstable/eventlog/EventLogServer.ts +41 -7
- package/src/unstable/eventlog/EventLogServerEncrypted.ts +13 -5
- package/src/unstable/eventlog/EventLogServerUnencrypted.ts +14 -6
- package/src/unstable/eventlog/EventLogSessionAuth.ts +1 -1
- package/src/unstable/http/Cookies.ts +35 -21
- package/src/unstable/http/Etag.ts +1 -1
- package/src/unstable/http/FetchHttpClient.ts +3 -1
- package/src/unstable/http/Headers.ts +2 -2
- package/src/unstable/http/HttpBody.ts +20 -5
- package/src/unstable/http/HttpClient.ts +83 -55
- package/src/unstable/http/HttpClientRequest.ts +2 -0
- package/src/unstable/http/HttpClientResponse.ts +4 -4
- package/src/unstable/http/HttpEffect.ts +8 -8
- package/src/unstable/http/HttpMethod.ts +6 -9
- package/src/unstable/http/HttpMiddleware.ts +202 -39
- package/src/unstable/http/HttpPlatform.ts +95 -0
- package/src/unstable/http/HttpRouter.ts +102 -98
- package/src/unstable/http/HttpServer.ts +13 -13
- package/src/unstable/http/HttpServerError.ts +2 -2
- package/src/unstable/http/HttpServerRequest.ts +4 -4
- package/src/unstable/http/HttpServerResponse.ts +30 -0
- package/src/unstable/http/HttpStaticServer.ts +35 -7
- package/src/unstable/http/Multipart.ts +6 -6
- package/src/unstable/http/Url.ts +33 -63
- package/src/unstable/http/UrlParams.ts +10 -18
- package/src/unstable/http/internal/compression.ts +196 -0
- package/src/unstable/httpapi/HttpApiBuilder.ts +10 -9
- package/src/unstable/httpapi/HttpApiClient.ts +14 -14
- package/src/unstable/httpapi/HttpApiEndpoint.ts +42 -42
- package/src/unstable/httpapi/HttpApiError.ts +13 -13
- package/src/unstable/httpapi/HttpApiGroup.ts +15 -15
- package/src/unstable/httpapi/HttpApiMiddleware.ts +71 -24
- package/src/unstable/httpapi/HttpApiScalar.ts +0 -12
- package/src/unstable/httpapi/HttpApiSchema.ts +6 -6
- package/src/unstable/httpapi/OpenApi.ts +13 -13
- package/src/unstable/observability/OtlpExporter.ts +31 -19
- package/src/unstable/observability/OtlpMetrics.ts +4 -1
- package/src/unstable/observability/OtlpResource.ts +26 -17
- 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 +8 -8
- package/src/unstable/persistence/PersistedQueue.ts +6 -6
- package/src/unstable/persistence/Persistence.ts +126 -19
- package/src/unstable/persistence/RateLimiter.ts +26 -15
- package/src/unstable/persistence/Redis.ts +2 -2
- package/src/unstable/process/ChildProcess.ts +64 -21
- package/src/unstable/process/ChildProcessSpawner.ts +21 -10
- package/src/unstable/reactivity/AsyncResult.ts +12 -13
- package/src/unstable/reactivity/Atom.ts +28 -25
- package/src/unstable/reactivity/AtomHttpApi.ts +5 -4
- package/src/unstable/reactivity/AtomRegistry.ts +24 -3
- package/src/unstable/reactivity/AtomRpc.ts +5 -4
- package/src/unstable/reactivity/Hydration.ts +1 -1
- package/src/unstable/rpc/Rpc.ts +35 -33
- package/src/unstable/rpc/RpcClient.ts +16 -15
- package/src/unstable/rpc/RpcGroup.ts +8 -8
- 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 +167 -68
- package/src/unstable/rpc/RpcServer.ts +18 -15
- package/src/unstable/rpc/RpcWorker.ts +5 -5
- package/src/unstable/schema/Model.ts +52 -50
- package/src/unstable/schema/VariantSchema.ts +5 -5
- package/src/unstable/socket/Socket.ts +17 -4
- package/src/unstable/sql/SqlClient.ts +5 -6
- package/src/unstable/sql/SqlModel.ts +2 -2
- package/src/unstable/sql/SqlResolver.ts +5 -5
- package/src/unstable/sql/Statement.ts +24 -23
- package/src/unstable/workers/Transferable.ts +1 -1
- package/src/unstable/workers/Worker.ts +2 -2
- package/src/unstable/workers/WorkerError.ts +7 -7
- 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 +10 -10
- package/src/unstable/workflow/DurableQueue.ts +22 -20
- package/src/unstable/workflow/Workflow.ts +23 -23
- package/src/unstable/workflow/WorkflowEngine.ts +1 -1
- package/src/unstable/workflow/WorkflowProxy.ts +4 -2
- 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/src/internal/version.ts +0 -2
|
@@ -13,11 +13,14 @@
|
|
|
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"
|
|
@@ -40,29 +43,36 @@ 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"
|
|
42
45
|
import * as AiError from "./AiError.ts"
|
|
46
|
+
import * as McpProtocolRegistry from "./internal/mcpProtocolRegistry.ts"
|
|
47
|
+
import type * as McpProtocol from "./McpProtocol.ts"
|
|
43
48
|
import {
|
|
44
49
|
CallToolResult,
|
|
45
|
-
|
|
50
|
+
CancelledNotification,
|
|
46
51
|
ClientRpcs,
|
|
47
|
-
CompleteResult,
|
|
48
52
|
Elicit,
|
|
49
53
|
ElicitationDeclined,
|
|
50
54
|
EnabledWhen,
|
|
51
55
|
GetPromptResult,
|
|
52
56
|
InternalError,
|
|
57
|
+
INVALID_REQUEST_ERROR_CODE,
|
|
53
58
|
InvalidParams,
|
|
59
|
+
InvalidRequest,
|
|
54
60
|
isParam,
|
|
55
61
|
ListPromptsResult,
|
|
56
62
|
ListResourcesResult,
|
|
57
63
|
ListResourceTemplatesResult,
|
|
58
64
|
ListToolsResult,
|
|
65
|
+
LoggingMessageNotification,
|
|
66
|
+
McpErrorBase,
|
|
59
67
|
McpServerClient,
|
|
60
68
|
McpServerClientMiddleware,
|
|
69
|
+
MethodNotFound,
|
|
70
|
+
ParseError,
|
|
61
71
|
Prompt,
|
|
62
72
|
Resource,
|
|
63
73
|
ResourceTemplate,
|
|
74
|
+
ResourceUpdatedNotification,
|
|
64
75
|
ServerNotificationRpcs,
|
|
65
|
-
ServerRequestRpcs,
|
|
66
76
|
TextContent,
|
|
67
77
|
Tool as McpTool
|
|
68
78
|
} from "./McpSchema.ts"
|
|
@@ -70,8 +80,10 @@ import type {
|
|
|
70
80
|
CallTool,
|
|
71
81
|
ClientCapabilities,
|
|
72
82
|
Complete,
|
|
83
|
+
CompleteResult,
|
|
73
84
|
GetPrompt,
|
|
74
85
|
Initialize,
|
|
86
|
+
LoggingLevel,
|
|
75
87
|
Param,
|
|
76
88
|
PromptArgument,
|
|
77
89
|
PromptMessage,
|
|
@@ -81,6 +93,8 @@ import type {
|
|
|
81
93
|
import * as Tool from "./Tool.ts"
|
|
82
94
|
import type * as Toolkit from "./Toolkit.ts"
|
|
83
95
|
|
|
96
|
+
type CompletionContext = typeof Complete.payloadSchema.Type["context"]
|
|
97
|
+
|
|
84
98
|
/**
|
|
85
99
|
* Service that stores and serves an MCP server's registered tools, resources,
|
|
86
100
|
* prompts, completions, and outgoing notifications.
|
|
@@ -90,7 +104,7 @@ import type * as Toolkit from "./Toolkit.ts"
|
|
|
90
104
|
* Handlers use this service to register capabilities and resolve incoming MCP
|
|
91
105
|
* requests.
|
|
92
106
|
*
|
|
93
|
-
* @category
|
|
107
|
+
* @category services
|
|
94
108
|
* @since 4.0.0
|
|
95
109
|
*/
|
|
96
110
|
export class McpServer extends Context.Service<McpServer, {
|
|
@@ -105,7 +119,7 @@ export class McpServer extends Context.Service<McpServer, {
|
|
|
105
119
|
readonly addTool: (options: {
|
|
106
120
|
readonly tool: McpTool
|
|
107
121
|
readonly annotations: Context.Context<never>
|
|
108
|
-
readonly handle: (payload: any) => Effect.Effect<CallToolResult,
|
|
122
|
+
readonly handle: (payload: any) => Effect.Effect<CallToolResult, InternalError | InvalidParams, McpServerClient>
|
|
109
123
|
}) => Effect.Effect<void>
|
|
110
124
|
readonly callTool: (
|
|
111
125
|
requests: typeof CallTool.payloadSchema.Type
|
|
@@ -130,17 +144,27 @@ export class McpServer extends Context.Service<McpServer, {
|
|
|
130
144
|
readonly template: ResourceTemplate
|
|
131
145
|
readonly annotations: Context.Context<never>
|
|
132
146
|
readonly routerPath: string
|
|
133
|
-
readonly completions: Record<
|
|
147
|
+
readonly completions: Record<
|
|
148
|
+
string,
|
|
149
|
+
(
|
|
150
|
+
input: string,
|
|
151
|
+
context: CompletionContext
|
|
152
|
+
) => Effect.Effect<CompleteResult, InternalError>
|
|
153
|
+
>
|
|
134
154
|
readonly handle: (
|
|
135
155
|
uri: string,
|
|
136
156
|
params: Array<string>
|
|
137
|
-
) => Effect.Effect<
|
|
157
|
+
) => Effect.Effect<
|
|
158
|
+
typeof ReadResourceResult.Type,
|
|
159
|
+
InvalidParams | InternalError,
|
|
160
|
+
McpServerClient
|
|
161
|
+
>
|
|
138
162
|
}
|
|
139
163
|
) => Effect.Effect<void>
|
|
140
164
|
|
|
141
165
|
readonly findResource: (
|
|
142
166
|
uri: string
|
|
143
|
-
) => Effect.Effect<typeof ReadResourceResult.Type, InvalidParams | InternalError, McpServerClient>
|
|
167
|
+
) => Effect.Effect<typeof ReadResourceResult.Type, McpErrorBase | InvalidParams | InternalError, McpServerClient>
|
|
144
168
|
|
|
145
169
|
readonly prompts: ReadonlyArray<{
|
|
146
170
|
readonly prompt: Prompt
|
|
@@ -151,7 +175,10 @@ export class McpServer extends Context.Service<McpServer, {
|
|
|
151
175
|
readonly annotations: Context.Context<never>
|
|
152
176
|
readonly completions: Record<
|
|
153
177
|
string,
|
|
154
|
-
(
|
|
178
|
+
(
|
|
179
|
+
input: string,
|
|
180
|
+
context: CompletionContext
|
|
181
|
+
) => Effect.Effect<CompleteResult, InternalError, McpServerClient>
|
|
155
182
|
>
|
|
156
183
|
readonly handle: (
|
|
157
184
|
params: Record<string, string>
|
|
@@ -163,7 +190,7 @@ export class McpServer extends Context.Service<McpServer, {
|
|
|
163
190
|
|
|
164
191
|
readonly completion: (
|
|
165
192
|
complete: typeof Complete.payloadSchema.Type
|
|
166
|
-
) => Effect.Effect<CompleteResult, InternalError, McpServerClient>
|
|
193
|
+
) => Effect.Effect<CompleteResult, InvalidParams | InternalError, McpServerClient>
|
|
167
194
|
}>()("effect/ai/McpServer") {
|
|
168
195
|
/**
|
|
169
196
|
* Builds an MCP server service from registered tools, prompts, resources, and completions.
|
|
@@ -177,7 +204,11 @@ export class McpServer extends Context.Service<McpServer, {
|
|
|
177
204
|
readonly handle: (
|
|
178
205
|
uri: string,
|
|
179
206
|
params: Array<string>
|
|
180
|
-
) => Effect.Effect<
|
|
207
|
+
) => Effect.Effect<
|
|
208
|
+
typeof ReadResourceResult.Type,
|
|
209
|
+
InternalError | InvalidParams,
|
|
210
|
+
McpServerClient
|
|
211
|
+
>
|
|
181
212
|
} | {
|
|
182
213
|
readonly _tag: "Resource"
|
|
183
214
|
readonly effect: Effect.Effect<typeof ReadResourceResult.Type, InternalError, McpServerClient>
|
|
@@ -187,7 +218,10 @@ export class McpServer extends Context.Service<McpServer, {
|
|
|
187
218
|
readonly tool: McpTool
|
|
188
219
|
readonly annotations: Context.Context<never>
|
|
189
220
|
}>()
|
|
190
|
-
const toolMap = new Map<
|
|
221
|
+
const toolMap = new Map<
|
|
222
|
+
string,
|
|
223
|
+
(payload: any) => Effect.Effect<CallToolResult, InternalError | InvalidParams, McpServerClient>
|
|
224
|
+
>()
|
|
191
225
|
const resources: Array<{
|
|
192
226
|
readonly resource: Resource
|
|
193
227
|
readonly annotations: Context.Context<never>
|
|
@@ -206,7 +240,10 @@ export class McpServer extends Context.Service<McpServer, {
|
|
|
206
240
|
>()
|
|
207
241
|
const completionsMap = new Map<
|
|
208
242
|
string,
|
|
209
|
-
(
|
|
243
|
+
(
|
|
244
|
+
input: string,
|
|
245
|
+
context: CompletionContext
|
|
246
|
+
) => Effect.Effect<CompleteResult, InternalError, McpServerClient>
|
|
210
247
|
>()
|
|
211
248
|
const notificationsQueue = yield* Queue.make<RpcMessage.Request<any>>()
|
|
212
249
|
const listChangedHandles = new Map<string, any>()
|
|
@@ -259,7 +296,9 @@ export class McpServer extends Context.Service<McpServer, {
|
|
|
259
296
|
if (!handle) {
|
|
260
297
|
return Effect.fail(new InvalidParams({ message: `Tool '${request.name}' not found` }))
|
|
261
298
|
}
|
|
262
|
-
return handle(request.arguments)
|
|
299
|
+
return handle(request.arguments).pipe(
|
|
300
|
+
Effect.catchDefect(() => Effect.fail(new InternalError({ message: "Internal error" })))
|
|
301
|
+
)
|
|
263
302
|
}),
|
|
264
303
|
get resources() {
|
|
265
304
|
return resources
|
|
@@ -286,7 +325,7 @@ export class McpServer extends Context.Service<McpServer, {
|
|
|
286
325
|
Effect.suspend(() => {
|
|
287
326
|
const match = matcher.find(uri)
|
|
288
327
|
if (!match) {
|
|
289
|
-
return Effect.
|
|
328
|
+
return Effect.fail(new McpErrorBase({ code: -32002, message: `Resource '${uri}' not found` }))
|
|
290
329
|
} else if (match.handler._tag === "Resource") {
|
|
291
330
|
return match.handler.effect
|
|
292
331
|
}
|
|
@@ -321,7 +360,19 @@ export class McpServer extends Context.Service<McpServer, {
|
|
|
321
360
|
? `ref/resource/${ref.uri}/${complete.argument.name}`
|
|
322
361
|
: `ref/prompt/${ref.name}/${complete.argument.name}`
|
|
323
362
|
const handler = completionsMap.get(key)
|
|
324
|
-
|
|
363
|
+
if (!handler) {
|
|
364
|
+
return yield* new InvalidParams({ message: "Unknown completion reference or argument" })
|
|
365
|
+
}
|
|
366
|
+
const result = yield* handler(complete.argument.value, complete.context)
|
|
367
|
+
const values = Arr.take(result.completion.values, 100)
|
|
368
|
+
return {
|
|
369
|
+
completion: {
|
|
370
|
+
...result.completion,
|
|
371
|
+
values,
|
|
372
|
+
hasMore: result.completion.hasMore === true ||
|
|
373
|
+
values.length < result.completion.values.length
|
|
374
|
+
}
|
|
375
|
+
}
|
|
325
376
|
})
|
|
326
377
|
})
|
|
327
378
|
})
|
|
@@ -334,29 +385,63 @@ export class McpServer extends Context.Service<McpServer, {
|
|
|
334
385
|
static readonly layer: Layer.Layer<McpServer | McpServerClient> = Layer.effect(McpServer)(McpServer.make) as any
|
|
335
386
|
}
|
|
336
387
|
|
|
337
|
-
const LATEST_PROTOCOL_VERSION = "2025-06-18"
|
|
338
|
-
const SUPPORTED_PROTOCOL_VERSIONS = [
|
|
339
|
-
LATEST_PROTOCOL_VERSION,
|
|
340
|
-
"2025-03-26",
|
|
341
|
-
"2024-11-05",
|
|
342
|
-
"2024-10-07"
|
|
343
|
-
]
|
|
344
388
|
const MCP_SESSION_ID_HEADER = "mcp-session-id"
|
|
345
389
|
const MCP_PROTOCOL_VERSION_HEADER = "mcp-protocol-version"
|
|
390
|
+
const MCP_INVALID_BATCH_METHOD = "invalid/json-rpc-batch"
|
|
391
|
+
const decodeCancelledNotification = Schema.decodeUnknownEffect(
|
|
392
|
+
Schema.toCodecJson(CancelledNotification.payloadSchema)
|
|
393
|
+
)
|
|
394
|
+
|
|
395
|
+
const requestKey = (requestId: string | number): string => `${typeof requestId}:${requestId}`
|
|
396
|
+
|
|
397
|
+
type SessionLogLevel =
|
|
398
|
+
| {
|
|
399
|
+
readonly _tag: "Effect"
|
|
400
|
+
readonly level: LogLevel.LogLevel
|
|
401
|
+
}
|
|
402
|
+
| {
|
|
403
|
+
readonly _tag: "Mcp"
|
|
404
|
+
readonly level: LoggingLevel
|
|
405
|
+
}
|
|
406
|
+
|
|
407
|
+
interface Session {
|
|
408
|
+
readonly initializePayload: typeof Initialize.payloadSchema.Type
|
|
409
|
+
readonly protocol: McpProtocol.ProtocolAdapter
|
|
410
|
+
readonly resourceSubscriptions: Set<string> | undefined
|
|
411
|
+
logLevel: SessionLogLevel
|
|
412
|
+
}
|
|
413
|
+
|
|
414
|
+
interface Sessions {
|
|
415
|
+
readonly bySessionId: Map<string, Session>
|
|
416
|
+
readonly byClientId: Map<number, Session>
|
|
417
|
+
}
|
|
418
|
+
|
|
419
|
+
class McpClientKey extends Data.Class<{
|
|
420
|
+
readonly clientId: number
|
|
421
|
+
readonly protocolVersion: string
|
|
422
|
+
}> {}
|
|
346
423
|
|
|
347
424
|
class McpProtocolState extends Context.Service<McpProtocolState, {
|
|
348
|
-
readonly
|
|
349
|
-
readonly
|
|
350
|
-
readonly supportedProtocolVersions: ReadonlySet<string>
|
|
425
|
+
readonly sessions: Sessions
|
|
426
|
+
readonly protocolRegistry: McpProtocolRegistry.ProtocolRegistry<McpProtocol.ProtocolAdapter>
|
|
351
427
|
}>()("effect/ai/McpServer/McpProtocolState") {}
|
|
352
428
|
|
|
353
|
-
const makeMcpProtocolState = (
|
|
354
|
-
|
|
355
|
-
|
|
356
|
-
|
|
429
|
+
const makeMcpProtocolState = Effect.fnUntraced(function*(
|
|
430
|
+
protocols: Arr.NonEmptyReadonlyArray<McpProtocol.ProtocolAdapter>
|
|
431
|
+
) {
|
|
432
|
+
return McpProtocolState.of({
|
|
433
|
+
sessions: {
|
|
434
|
+
bySessionId: new Map(),
|
|
435
|
+
byClientId: new Map()
|
|
436
|
+
},
|
|
437
|
+
protocolRegistry: yield* McpProtocolRegistry.make(protocols)
|
|
438
|
+
})
|
|
357
439
|
})
|
|
358
440
|
|
|
359
|
-
const layerMcpProtocolState =
|
|
441
|
+
const layerMcpProtocolState = (
|
|
442
|
+
protocols: Arr.NonEmptyReadonlyArray<McpProtocol.ProtocolAdapter>
|
|
443
|
+
): Layer.Layer<McpProtocolState, Cause.IllegalArgumentError> =>
|
|
444
|
+
Layer.effect(McpProtocolState)(makeMcpProtocolState(protocols))
|
|
360
445
|
|
|
361
446
|
/**
|
|
362
447
|
* Runs an MCP server over the current `RpcServer.Protocol`.
|
|
@@ -367,38 +452,54 @@ const layerMcpProtocolState = Layer.sync(McpProtocolState, makeMcpProtocolState)
|
|
|
367
452
|
* tools, resources, and prompts, and forwards queued server notifications to
|
|
368
453
|
* initialized clients.
|
|
369
454
|
*
|
|
370
|
-
* @category
|
|
455
|
+
* @category running
|
|
371
456
|
* @since 4.0.0
|
|
372
457
|
*/
|
|
373
458
|
export const run: (options: {
|
|
374
459
|
readonly name: string
|
|
375
460
|
readonly version: string
|
|
461
|
+
readonly protocols: Arr.NonEmptyReadonlyArray<McpProtocol.ProtocolAdapter>
|
|
376
462
|
readonly extensions?: Record<`${string}/${string}`, unknown> | undefined
|
|
377
463
|
}) => Effect.Effect<
|
|
378
464
|
never,
|
|
379
|
-
|
|
465
|
+
Cause.IllegalArgumentError,
|
|
380
466
|
McpServer | RpcServer.Protocol
|
|
381
467
|
> = Effect.fnUntraced(function*(options: {
|
|
382
468
|
readonly name: string
|
|
383
469
|
readonly version: string
|
|
470
|
+
readonly protocols: Arr.NonEmptyReadonlyArray<McpProtocol.ProtocolAdapter>
|
|
384
471
|
readonly extensions?: Record<`${string}/${string}`, unknown> | undefined
|
|
385
472
|
}) {
|
|
386
|
-
const
|
|
387
|
-
|
|
388
|
-
|
|
389
|
-
|
|
473
|
+
const protocolStateOption = yield* Effect.serviceOption(McpProtocolState)
|
|
474
|
+
const protocolState = Option.isSome(protocolStateOption)
|
|
475
|
+
? protocolStateOption.value
|
|
476
|
+
: yield* makeMcpProtocolState(options.protocols)
|
|
477
|
+
return yield* runWithProtocolState(options, protocolState)
|
|
478
|
+
})
|
|
479
|
+
|
|
480
|
+
const runWithProtocolState = Effect.fnUntraced(function*(options: {
|
|
481
|
+
readonly name: string
|
|
482
|
+
readonly version: string
|
|
483
|
+
readonly extensions?: Record<`${string}/${string}`, unknown> | undefined
|
|
484
|
+
}, protocolState: McpProtocolState["Service"]) {
|
|
485
|
+
const serverScope = yield* Effect.scope
|
|
486
|
+
const protocolRegistry = protocolState.protocolRegistry
|
|
390
487
|
const protocol = yield* RpcServer.Protocol
|
|
391
488
|
const server = yield* McpServer
|
|
392
489
|
const isHttp = Option.isSome(yield* Effect.serviceOption(HttpRouter.HttpRouter))
|
|
393
|
-
const
|
|
394
|
-
const
|
|
395
|
-
|
|
396
|
-
|
|
490
|
+
const sessions = protocolState.sessions
|
|
491
|
+
const clientProtocols = new Map<number, McpProtocol.ProtocolAdapter>()
|
|
492
|
+
const cancelledRequests = new Map<number, Set<string>>()
|
|
493
|
+
const handlers = yield* Layer.build(layerHandlers(options, {
|
|
494
|
+
sessions,
|
|
495
|
+
protocolRegistry
|
|
496
|
+
}))
|
|
397
497
|
|
|
398
498
|
const clients = yield* RcMap.make({
|
|
399
|
-
lookup: Effect.fnUntraced(function*(
|
|
499
|
+
lookup: Effect.fnUntraced(function*(key: McpClientKey) {
|
|
500
|
+
const selectedProtocol = protocolRegistry.select(key.protocolVersion)
|
|
400
501
|
let write!: (message: RpcMessage.FromServerEncoded) => Effect.Effect<void>
|
|
401
|
-
const client = yield* RpcClient.make(
|
|
502
|
+
const client = yield* RpcClient.make(selectedProtocol.serverRequestRpcs, {
|
|
402
503
|
spanPrefix: "McpServer/Client"
|
|
403
504
|
}).pipe(
|
|
404
505
|
Effect.provideServiceEffect(
|
|
@@ -409,7 +510,7 @@ export const run: (options: {
|
|
|
409
510
|
return {
|
|
410
511
|
send(id, request, _transferables) {
|
|
411
512
|
cid = id
|
|
412
|
-
return protocol.send(clientId, {
|
|
513
|
+
return protocol.send(key.clientId, {
|
|
413
514
|
...request,
|
|
414
515
|
headers: undefined,
|
|
415
516
|
traceId: undefined,
|
|
@@ -430,35 +531,62 @@ export const run: (options: {
|
|
|
430
531
|
idleTimeToLive: 10000
|
|
431
532
|
})
|
|
432
533
|
|
|
433
|
-
const clientMiddleware = McpServerClientMiddleware.of((effect, { client, headers, rpc }) => {
|
|
434
|
-
const
|
|
435
|
-
const isInitialize = rpc._tag
|
|
436
|
-
if (!isInitialize && !
|
|
534
|
+
const clientMiddleware = McpServerClientMiddleware.of((effect, { client, headers, payload, rpc }) => {
|
|
535
|
+
const session = getClientSession(sessions, client.id, headers)
|
|
536
|
+
const isInitialize = rpc._tag.endsWith("/initialize")
|
|
537
|
+
if (!isInitialize && !session) {
|
|
437
538
|
const fiber = Fiber.getCurrent()!
|
|
438
539
|
const httpRequest = Context.getOrUndefined(fiber.context, HttpServerRequest.HttpServerRequest)
|
|
439
540
|
if (httpRequest) {
|
|
440
541
|
appendPreResponseHandlerUnsafe(
|
|
441
542
|
httpRequest,
|
|
442
|
-
() =>
|
|
543
|
+
() =>
|
|
544
|
+
Effect.succeed(
|
|
545
|
+
HttpServerResponse.empty({
|
|
546
|
+
status: headers[MCP_SESSION_ID_HEADER] === undefined ? 400 : 404
|
|
547
|
+
})
|
|
548
|
+
)
|
|
443
549
|
)
|
|
444
550
|
}
|
|
445
551
|
return Effect.die(new Error(`Mcp-Session-Id does not exist`))
|
|
446
552
|
}
|
|
447
|
-
|
|
448
|
-
|
|
449
|
-
|
|
450
|
-
|
|
451
|
-
|
|
452
|
-
|
|
453
|
-
|
|
454
|
-
|
|
455
|
-
|
|
456
|
-
|
|
553
|
+
const selectedProtocol = session?.protocol ?? protocolForInternalTag(protocolRegistry, rpc._tag)
|
|
554
|
+
return effect.pipe(
|
|
555
|
+
Effect.provideService(
|
|
556
|
+
McpServerClient,
|
|
557
|
+
McpServerClient.of({
|
|
558
|
+
clientId: client.id,
|
|
559
|
+
protocolVersion: selectedProtocol.protocolVersion,
|
|
560
|
+
initializePayload: session?.initializePayload ?? payload as typeof Initialize.payloadSchema.Type,
|
|
561
|
+
getClient: RcMap.get(
|
|
562
|
+
clients,
|
|
563
|
+
new McpClientKey({
|
|
564
|
+
clientId: client.id,
|
|
565
|
+
protocolVersion: selectedProtocol.protocolVersion
|
|
566
|
+
})
|
|
567
|
+
).pipe(
|
|
568
|
+
Effect.map(({ client }) => client)
|
|
569
|
+
)
|
|
570
|
+
})
|
|
571
|
+
),
|
|
572
|
+
Effect.provideService(CurrentLogLevel, effectLogLevel(session?.logLevel))
|
|
457
573
|
)
|
|
458
574
|
})
|
|
459
575
|
|
|
460
576
|
const patchedProtocol = RpcServer.Protocol.of({
|
|
461
577
|
...protocol,
|
|
578
|
+
send: (clientId, response) => {
|
|
579
|
+
if (response._tag === "Exit") {
|
|
580
|
+
const requests = cancelledRequests.get(clientId)
|
|
581
|
+
if (requests?.delete(requestKey(response.requestId)) === true) {
|
|
582
|
+
if (requests.size === 0) {
|
|
583
|
+
cancelledRequests.delete(clientId)
|
|
584
|
+
}
|
|
585
|
+
return Effect.void
|
|
586
|
+
}
|
|
587
|
+
}
|
|
588
|
+
return protocol.send(clientId, response)
|
|
589
|
+
},
|
|
462
590
|
run: (f) =>
|
|
463
591
|
protocol.run((clientId, request_) => {
|
|
464
592
|
const fiber = Fiber.getCurrent()!
|
|
@@ -483,56 +611,161 @@ export const run: (options: {
|
|
|
483
611
|
}
|
|
484
612
|
switch (request._tag) {
|
|
485
613
|
case "Request": {
|
|
486
|
-
|
|
487
|
-
|
|
488
|
-
|
|
614
|
+
const headers = isHttp
|
|
615
|
+
? Context.getUnsafe(
|
|
616
|
+
Fiber.getCurrent()!.context,
|
|
617
|
+
HttpServerRequest.HttpServerRequest
|
|
618
|
+
).headers
|
|
619
|
+
: Headers.fromInput(request.headers)
|
|
620
|
+
const session = getClientSession(sessions, clientId, headers)
|
|
621
|
+
const selectedProtocol = session?.protocol ??
|
|
622
|
+
(request.tag === "initialize"
|
|
623
|
+
? protocolRegistry.select(getOfferedProtocolVersion(request.payload))
|
|
624
|
+
: protocolRegistry.protocols[0])
|
|
625
|
+
clientProtocols.set(clientId, selectedProtocol)
|
|
626
|
+
if (request.tag === MCP_INVALID_BATCH_METHOD) {
|
|
627
|
+
return protocol.send(clientId, {
|
|
628
|
+
_tag: "Exit",
|
|
629
|
+
requestId: request.id,
|
|
630
|
+
exit: {
|
|
631
|
+
_tag: "Failure",
|
|
632
|
+
cause: [{
|
|
633
|
+
_tag: "Fail",
|
|
634
|
+
error: new InvalidRequest({ message: "JSON-RPC batches are not supported" })
|
|
635
|
+
}]
|
|
636
|
+
}
|
|
637
|
+
})
|
|
638
|
+
}
|
|
639
|
+
if (isHttp) {
|
|
640
|
+
const fiber = Fiber.getCurrent()!
|
|
641
|
+
const httpRequest = Context.getUnsafe(fiber.context, HttpServerRequest.HttpServerRequest)
|
|
642
|
+
if (session) {
|
|
489
643
|
appendPreResponseHandlerUnsafe(httpRequest, (_, res) =>
|
|
490
644
|
Effect.succeed(
|
|
491
|
-
HttpServerResponse.setHeader(
|
|
645
|
+
HttpServerResponse.setHeader(
|
|
646
|
+
res,
|
|
647
|
+
MCP_PROTOCOL_VERSION_HEADER,
|
|
648
|
+
session.protocol.protocolVersion
|
|
649
|
+
)
|
|
492
650
|
))
|
|
493
651
|
}
|
|
494
652
|
}
|
|
495
|
-
const
|
|
496
|
-
|
|
497
|
-
|
|
498
|
-
if (!
|
|
499
|
-
if (httpRequest
|
|
653
|
+
const routedRequest = protocolRegistry.routeClientRequest(selectedProtocol, request)
|
|
654
|
+
const rpc = protocolRegistry.clientRpcs.requests.get(routedRequest.tag)
|
|
655
|
+
if (rpc && selectedProtocol.clientNotificationRpcs.requests.has(request.tag)) {
|
|
656
|
+
if (!session) {
|
|
657
|
+
if (httpRequest) {
|
|
500
658
|
appendPreResponseHandlerUnsafe(
|
|
501
659
|
httpRequest,
|
|
502
|
-
() =>
|
|
660
|
+
() =>
|
|
661
|
+
Effect.succeed(
|
|
662
|
+
HttpServerResponse.empty({
|
|
663
|
+
status: headers[MCP_SESSION_ID_HEADER] === undefined ? 400 : 404
|
|
664
|
+
})
|
|
665
|
+
)
|
|
503
666
|
)
|
|
504
667
|
}
|
|
505
668
|
return Effect.void
|
|
506
669
|
}
|
|
507
670
|
if (request.tag === "notifications/cancelled") {
|
|
508
|
-
return
|
|
509
|
-
|
|
510
|
-
|
|
511
|
-
|
|
671
|
+
return decodeCancelledNotification(request.payload).pipe(
|
|
672
|
+
Effect.flatMap(({ requestId }) => {
|
|
673
|
+
const requests = cancelledRequests.get(clientId) ?? new Set<string>()
|
|
674
|
+
requests.add(requestKey(requestId))
|
|
675
|
+
cancelledRequests.set(clientId, requests)
|
|
676
|
+
return f(clientId, {
|
|
677
|
+
_tag: "Interrupt",
|
|
678
|
+
requestId: RpcMessage.RequestId(requestId)
|
|
679
|
+
})
|
|
680
|
+
}),
|
|
681
|
+
Effect.catchCause(() => Effect.void)
|
|
682
|
+
)
|
|
512
683
|
}
|
|
513
|
-
|
|
514
|
-
|
|
515
|
-
|
|
516
|
-
|
|
517
|
-
|
|
518
|
-
|
|
519
|
-
|
|
520
|
-
|
|
521
|
-
|
|
684
|
+
return selectedProtocol.payloadCodecs(rpc).decode(request.payload).pipe(
|
|
685
|
+
Effect.flatMap((payload) => {
|
|
686
|
+
if (
|
|
687
|
+
request.tag === "notifications/roots/list_changed" &&
|
|
688
|
+
session.initializePayload.capabilities.roots?.listChanged === true
|
|
689
|
+
) {
|
|
690
|
+
if (httpRequest !== undefined) {
|
|
691
|
+
return Effect.void
|
|
692
|
+
}
|
|
693
|
+
return RcMap.get(
|
|
694
|
+
clients,
|
|
695
|
+
new McpClientKey({
|
|
696
|
+
clientId,
|
|
697
|
+
protocolVersion: selectedProtocol.protocolVersion
|
|
698
|
+
})
|
|
699
|
+
).pipe(
|
|
700
|
+
Effect.flatMap(({ client }) => client["roots/list"](undefined)),
|
|
701
|
+
Effect.scoped,
|
|
702
|
+
Effect.ignoreCause,
|
|
703
|
+
Effect.forkIn(serverScope),
|
|
704
|
+
Effect.asVoid
|
|
705
|
+
)
|
|
706
|
+
}
|
|
707
|
+
const handler = handlers.mapUnsafe.get(rpc.key) as Rpc.Handler<string> | undefined
|
|
708
|
+
return handler
|
|
709
|
+
? handler.handler(payload, {
|
|
710
|
+
rpc,
|
|
711
|
+
requestId: RpcMessage.RequestId(request.id),
|
|
712
|
+
client: new Rpc.ServerClient(clientId),
|
|
713
|
+
headers
|
|
714
|
+
}) as any as Effect.Effect<void>
|
|
715
|
+
: Effect.void
|
|
716
|
+
}),
|
|
717
|
+
Effect.catchCause(() => Effect.void)
|
|
718
|
+
)
|
|
522
719
|
}
|
|
523
|
-
|
|
720
|
+
if (!rpc) {
|
|
721
|
+
if (request.isNotification) {
|
|
722
|
+
return Effect.void
|
|
723
|
+
}
|
|
724
|
+
return protocol.send(clientId, {
|
|
725
|
+
_tag: "Exit",
|
|
726
|
+
requestId: request.id,
|
|
727
|
+
exit: {
|
|
728
|
+
_tag: "Failure",
|
|
729
|
+
cause: [{ _tag: "Fail", error: new MethodNotFound({ message: `Method not found: ${request.tag}` }) }]
|
|
730
|
+
}
|
|
731
|
+
})
|
|
732
|
+
}
|
|
733
|
+
return selectedProtocol.payloadCodecs(rpc).decode(request.payload).pipe(
|
|
734
|
+
Effect.matchEffect({
|
|
735
|
+
onSuccess: () => f(clientId, routedRequest),
|
|
736
|
+
onFailure: () =>
|
|
737
|
+
request.isNotification
|
|
738
|
+
? Effect.void
|
|
739
|
+
: protocol.send(clientId, {
|
|
740
|
+
_tag: "Exit",
|
|
741
|
+
requestId: request.id,
|
|
742
|
+
exit: {
|
|
743
|
+
_tag: "Failure",
|
|
744
|
+
cause: [{ _tag: "Fail", error: new InvalidParams({ message: "Invalid method parameters" }) }]
|
|
745
|
+
}
|
|
746
|
+
})
|
|
747
|
+
})
|
|
748
|
+
)
|
|
524
749
|
}
|
|
525
750
|
case "Ping":
|
|
526
751
|
case "Ack":
|
|
527
752
|
case "Interrupt":
|
|
753
|
+
return f(clientId, request)
|
|
528
754
|
case "Eof":
|
|
755
|
+
cancelledRequests.delete(clientId)
|
|
529
756
|
return f(clientId, request)
|
|
530
757
|
case "Pong":
|
|
531
758
|
case "Exit":
|
|
532
759
|
case "Chunk":
|
|
533
760
|
case "ClientProtocolError":
|
|
534
761
|
case "Defect":
|
|
535
|
-
return RcMap.get(
|
|
762
|
+
return RcMap.get(
|
|
763
|
+
clients,
|
|
764
|
+
new McpClientKey({
|
|
765
|
+
clientId,
|
|
766
|
+
protocolVersion: getProtocolForClient(clientProtocols, clientId, protocolRegistry).protocolVersion
|
|
767
|
+
})
|
|
768
|
+
).pipe(
|
|
536
769
|
Effect.flatMap(({ write }) => write(request)),
|
|
537
770
|
Effect.scoped
|
|
538
771
|
)
|
|
@@ -540,23 +773,52 @@ export const run: (options: {
|
|
|
540
773
|
})
|
|
541
774
|
})
|
|
542
775
|
|
|
543
|
-
const encodeNotification = Schema.encodeUnknownEffect(
|
|
544
|
-
Schema.Union(Array.from(ServerNotificationRpcs.requests.values(), (rpc) => rpc.payloadSchema))
|
|
545
|
-
)
|
|
546
776
|
yield* Queue.take(server.notificationsQueue).pipe(
|
|
547
777
|
Effect.flatMap(Effect.fnUntraced(function*(request) {
|
|
548
|
-
const encoded = yield* encodeNotification(request.payload)
|
|
549
|
-
const message: RpcMessage.RequestEncoded = {
|
|
550
|
-
_tag: "Request",
|
|
551
|
-
tag: request.tag,
|
|
552
|
-
payload: encoded
|
|
553
|
-
} as any
|
|
554
778
|
const clientIds = yield* patchedProtocol.clientIds
|
|
779
|
+
for (const clientId of clientProtocols.keys()) {
|
|
780
|
+
if (!clientIds.has(clientId)) {
|
|
781
|
+
clientProtocols.delete(clientId)
|
|
782
|
+
sessions.byClientId.delete(clientId)
|
|
783
|
+
}
|
|
784
|
+
}
|
|
555
785
|
for (const clientId of server.initializedClients.keys()) {
|
|
556
786
|
if (!clientIds.has(clientId)) {
|
|
557
787
|
server.initializedClients.delete(clientId)
|
|
558
788
|
continue
|
|
559
789
|
}
|
|
790
|
+
const selectedProtocol = clientProtocols.get(clientId)
|
|
791
|
+
if (!selectedProtocol) {
|
|
792
|
+
continue
|
|
793
|
+
}
|
|
794
|
+
const rpc = selectedProtocol.serverNotificationRpcs.requests.get(request.tag)
|
|
795
|
+
if (!rpc) {
|
|
796
|
+
continue
|
|
797
|
+
}
|
|
798
|
+
if (request.tag === "notifications/message") {
|
|
799
|
+
const { level } = yield* Schema.decodeUnknownEffect(
|
|
800
|
+
LoggingMessageNotification.payloadSchema
|
|
801
|
+
)(request.payload)
|
|
802
|
+
if (!isMcpLogLevelEnabled(level, sessions.byClientId.get(clientId)?.logLevel)) {
|
|
803
|
+
continue
|
|
804
|
+
}
|
|
805
|
+
}
|
|
806
|
+
if (request.tag === "notifications/resources/updated") {
|
|
807
|
+
const { uri } = yield* Schema.decodeUnknownEffect(
|
|
808
|
+
ResourceUpdatedNotification.payloadSchema
|
|
809
|
+
)(request.payload)
|
|
810
|
+
if (sessions.byClientId.get(clientId)?.resourceSubscriptions?.has(uri) !== true) {
|
|
811
|
+
continue
|
|
812
|
+
}
|
|
813
|
+
}
|
|
814
|
+
const encoded = yield* selectedProtocol.payloadCodecs(rpc).encode(request.payload)
|
|
815
|
+
// TODO: Extend RpcServer.Protocol's outbound message contract with server-originated
|
|
816
|
+
// notifications so MCP does not need to treat this notification as an RPC response.
|
|
817
|
+
const message: RpcMessage.RequestEncoded = {
|
|
818
|
+
_tag: "Request",
|
|
819
|
+
tag: request.tag,
|
|
820
|
+
payload: encoded
|
|
821
|
+
} as any
|
|
560
822
|
yield* patchedProtocol.send(clientId, message as any)
|
|
561
823
|
}
|
|
562
824
|
})),
|
|
@@ -565,7 +827,7 @@ export const run: (options: {
|
|
|
565
827
|
Effect.forkScoped
|
|
566
828
|
)
|
|
567
829
|
|
|
568
|
-
return yield* RpcServer.make(
|
|
830
|
+
return yield* RpcServer.make(protocolRegistry.clientRpcs, {
|
|
569
831
|
spanPrefix: "McpServer",
|
|
570
832
|
disableFatalDefects: true
|
|
571
833
|
}).pipe(
|
|
@@ -607,10 +869,11 @@ export const run: (options: {
|
|
|
607
869
|
export const layer = (options: {
|
|
608
870
|
readonly name: string
|
|
609
871
|
readonly version: string
|
|
872
|
+
readonly protocols: Arr.NonEmptyReadonlyArray<McpProtocol.ProtocolAdapter>
|
|
610
873
|
readonly extensions?: Record<`${string}/${string}`, unknown> | undefined
|
|
611
|
-
}): Layer.Layer<McpServer | McpServerClient,
|
|
874
|
+
}): Layer.Layer<McpServer | McpServerClient, Cause.IllegalArgumentError, RpcServer.Protocol> =>
|
|
612
875
|
layerWithProtocolState(options).pipe(
|
|
613
|
-
Layer.provide(layerMcpProtocolState)
|
|
876
|
+
Layer.provide(layerMcpProtocolState(options.protocols))
|
|
614
877
|
)
|
|
615
878
|
|
|
616
879
|
const layerWithProtocolState = (options: {
|
|
@@ -618,63 +881,133 @@ const layerWithProtocolState = (options: {
|
|
|
618
881
|
readonly version: string
|
|
619
882
|
readonly extensions?: Record<`${string}/${string}`, unknown> | undefined
|
|
620
883
|
}): Layer.Layer<McpServer | McpServerClient, never, RpcServer.Protocol | McpProtocolState> =>
|
|
621
|
-
Layer.effectDiscard(
|
|
884
|
+
Layer.effectDiscard(
|
|
885
|
+
Effect.gen(function*() {
|
|
886
|
+
const protocolState = yield* McpProtocolState
|
|
887
|
+
yield* Effect.forkScoped(runWithProtocolState(options, protocolState))
|
|
888
|
+
})
|
|
889
|
+
).pipe(
|
|
622
890
|
Layer.provideMerge(McpServer.layer)
|
|
623
891
|
)
|
|
624
892
|
|
|
893
|
+
const StdioInitializeRequest = Schema.Struct({
|
|
894
|
+
method: Schema.Literal("initialize"),
|
|
895
|
+
params: Schema.Struct({
|
|
896
|
+
protocolVersion: Schema.String
|
|
897
|
+
})
|
|
898
|
+
})
|
|
899
|
+
|
|
900
|
+
const StdioInvalidBatchExit = Schema.Struct({
|
|
901
|
+
_tag: Schema.Literal("Exit"),
|
|
902
|
+
requestId: Schema.Null,
|
|
903
|
+
exit: Schema.Struct({
|
|
904
|
+
cause: Schema.Unknown
|
|
905
|
+
})
|
|
906
|
+
})
|
|
907
|
+
|
|
908
|
+
const decodeStdioInitializeRequest = Schema.decodeUnknownOption(StdioInitializeRequest)
|
|
909
|
+
const decodeStdioInvalidBatchExit = Schema.decodeUnknownOption(StdioInvalidBatchExit)
|
|
910
|
+
|
|
911
|
+
const makeStdioSerialization = (
|
|
912
|
+
protocols: Arr.NonEmptyReadonlyArray<McpProtocol.ProtocolAdapter>
|
|
913
|
+
): RpcSerialization.RpcSerialization["Service"] =>
|
|
914
|
+
RpcSerialization.RpcSerialization.of({
|
|
915
|
+
contentType: "application/json-rpc",
|
|
916
|
+
includesFraming: true,
|
|
917
|
+
makeUnsafe: () => {
|
|
918
|
+
const framing = RpcSerialization.ndjson.makeUnsafe()
|
|
919
|
+
const jsonRpc = RpcSerialization.jsonRpc().makeUnsafe()
|
|
920
|
+
const protocolsByVersion = new Map<string, McpProtocol.ProtocolAdapter>(
|
|
921
|
+
protocols.map((protocol) => [protocol.protocolVersion, protocol])
|
|
922
|
+
)
|
|
923
|
+
let selectedProtocol = protocols[0]
|
|
924
|
+
return {
|
|
925
|
+
decode: (data) => {
|
|
926
|
+
const frames = framing.decode(data)
|
|
927
|
+
const messages: Array<unknown> = []
|
|
928
|
+
for (const frame of frames) {
|
|
929
|
+
const entries = Array.isArray(frame) ? frame : [frame]
|
|
930
|
+
const initialize = Arr.findFirst(entries, (entry) => decodeStdioInitializeRequest(entry))
|
|
931
|
+
selectedProtocol = Option.match(initialize, {
|
|
932
|
+
onNone: () => selectedProtocol,
|
|
933
|
+
onSome: ({ params }) => protocolsByVersion.get(params.protocolVersion) ?? protocols[0]
|
|
934
|
+
})
|
|
935
|
+
if (Array.isArray(frame) && !selectedProtocol.transport.acceptsJsonRpcBatches) {
|
|
936
|
+
messages.push({
|
|
937
|
+
_tag: "Request",
|
|
938
|
+
id: null,
|
|
939
|
+
tag: MCP_INVALID_BATCH_METHOD,
|
|
940
|
+
payload: null,
|
|
941
|
+
headers: []
|
|
942
|
+
})
|
|
943
|
+
} else {
|
|
944
|
+
messages.push(...jsonRpc.decode(JSON.stringify(frame)))
|
|
945
|
+
}
|
|
946
|
+
}
|
|
947
|
+
return messages
|
|
948
|
+
},
|
|
949
|
+
encode: (response) => {
|
|
950
|
+
const invalidBatchExit = decodeStdioInvalidBatchExit(response)
|
|
951
|
+
if (Option.isSome(invalidBatchExit)) {
|
|
952
|
+
return framing.encode({
|
|
953
|
+
jsonrpc: "2.0",
|
|
954
|
+
id: null,
|
|
955
|
+
error: {
|
|
956
|
+
_tag: "Cause",
|
|
957
|
+
code: INVALID_REQUEST_ERROR_CODE,
|
|
958
|
+
message: "JSON-RPC batches are not supported",
|
|
959
|
+
data: invalidBatchExit.value.exit.cause
|
|
960
|
+
}
|
|
961
|
+
})
|
|
962
|
+
}
|
|
963
|
+
const encoded = jsonRpc.encode(response)
|
|
964
|
+
return encoded === undefined ? undefined : `${encoded}\n`
|
|
965
|
+
}
|
|
966
|
+
}
|
|
967
|
+
}
|
|
968
|
+
})
|
|
969
|
+
|
|
625
970
|
/**
|
|
626
971
|
* Runs the McpServer, using stdio for input and output.
|
|
627
972
|
*
|
|
628
|
-
* **Example** (
|
|
973
|
+
* **Example** (Configuring an MCP server over stdio)
|
|
629
974
|
*
|
|
630
|
-
* ```ts
|
|
631
|
-
* import { Effect, Layer,
|
|
632
|
-
* import {
|
|
633
|
-
* import { McpSchema, McpServer } from "effect/unstable/ai"
|
|
975
|
+
* ```ts import.meta.vitest
|
|
976
|
+
* import { Effect, Layer, Schema } from "effect"
|
|
977
|
+
* import { McpProtocol, McpSchema, McpServer } from "effect/unstable/ai"
|
|
634
978
|
*
|
|
635
979
|
* const idParam = McpSchema.param("id", Schema.Number)
|
|
636
980
|
*
|
|
637
|
-
* // Define a resource template for a README file
|
|
638
981
|
* const ReadmeTemplate = McpServer.resource`file://readme/${idParam}`({
|
|
639
982
|
* name: "README Template",
|
|
640
|
-
* // You can add auto-completion for the ID parameter
|
|
641
983
|
* completion: {
|
|
642
|
-
* id: (
|
|
984
|
+
* id: () => Effect.succeed([1, 2, 3])
|
|
643
985
|
* },
|
|
644
|
-
* content:
|
|
645
|
-
* return `# MCP Server Demo - ID: ${id}`
|
|
646
|
-
* })
|
|
986
|
+
* content: (_uri, id) => Effect.succeed(`# MCP Server Demo - ID: ${id}`)
|
|
647
987
|
* })
|
|
648
988
|
*
|
|
649
|
-
* // Define a test prompt with parameters
|
|
650
989
|
* const TestPrompt = McpServer.prompt({
|
|
651
990
|
* name: "Test Prompt",
|
|
652
|
-
* description: "
|
|
991
|
+
* description: "Looks up flight booking details",
|
|
653
992
|
* parameters: {
|
|
654
993
|
* flightNumber: Schema.String
|
|
655
994
|
* },
|
|
656
995
|
* completion: {
|
|
657
|
-
* flightNumber: () => Effect.succeed(["FL123", "FL456"
|
|
996
|
+
* flightNumber: () => Effect.succeed(["FL123", "FL456"])
|
|
658
997
|
* },
|
|
659
998
|
* content: ({ flightNumber }) =>
|
|
660
999
|
* Effect.succeed(`Get the booking details for flight number: ${flightNumber}`)
|
|
661
1000
|
* })
|
|
662
1001
|
*
|
|
663
|
-
*
|
|
664
|
-
* const ServerLayer = Layer.mergeAll(
|
|
665
|
-
* ReadmeTemplate,
|
|
666
|
-
* TestPrompt
|
|
667
|
-
* ).pipe(
|
|
668
|
-
* // Provide the MCP server implementation
|
|
1002
|
+
* const ServerLayer = Layer.mergeAll(ReadmeTemplate, TestPrompt).pipe(
|
|
669
1003
|
* Layer.provide(McpServer.layerStdio({
|
|
670
1004
|
* name: "Demo Server",
|
|
671
1005
|
* version: "1.0.0",
|
|
672
|
-
*
|
|
673
|
-
*
|
|
674
|
-
* Layer.provide(Layer.succeed(Logger.LogToStderr)(true))
|
|
1006
|
+
* protocols: [McpProtocol.v2025_06_18]
|
|
1007
|
+
* }))
|
|
675
1008
|
* )
|
|
676
1009
|
*
|
|
677
|
-
* Layer.
|
|
1010
|
+
* Layer.isLayer(ServerLayer) // => true
|
|
678
1011
|
* ```
|
|
679
1012
|
*
|
|
680
1013
|
* @category layers
|
|
@@ -683,11 +1016,14 @@ const layerWithProtocolState = (options: {
|
|
|
683
1016
|
export const layerStdio = (options: {
|
|
684
1017
|
readonly name: string
|
|
685
1018
|
readonly version: string
|
|
1019
|
+
readonly protocols: Arr.NonEmptyReadonlyArray<McpProtocol.ProtocolAdapter>
|
|
686
1020
|
readonly extensions?: Record<`${string}/${string}`, unknown> | undefined
|
|
687
|
-
}): Layer.Layer<McpServer | McpServerClient,
|
|
1021
|
+
}): Layer.Layer<McpServer | McpServerClient, Cause.IllegalArgumentError, Stdio> =>
|
|
688
1022
|
layer(options).pipe(
|
|
689
1023
|
Layer.provide(RpcServer.layerProtocolStdio),
|
|
690
|
-
Layer.provide(
|
|
1024
|
+
Layer.provide(
|
|
1025
|
+
Layer.succeed(RpcSerialization.RpcSerialization)(makeStdioSerialization(options.protocols))
|
|
1026
|
+
)
|
|
691
1027
|
)
|
|
692
1028
|
|
|
693
1029
|
/**
|
|
@@ -701,7 +1037,7 @@ export const layerStdio = (options: {
|
|
|
701
1037
|
*
|
|
702
1038
|
* POST serves JSON-RPC and accepted notification-only requests return `202`.
|
|
703
1039
|
* Unsupported protocol versions return `400`; methods without MCP handlers
|
|
704
|
-
* return `405`.
|
|
1040
|
+
* return `405`. Browser Origins are rejected unless listed in `allowedOrigins`.
|
|
705
1041
|
*
|
|
706
1042
|
* @see {@link layerStdio} for exposing the server over stdio
|
|
707
1043
|
* @see {@link layer} for the base MCP server layer without a transport protocol
|
|
@@ -713,18 +1049,28 @@ export const layerHttp = (options: {
|
|
|
713
1049
|
readonly name: string
|
|
714
1050
|
readonly version: string
|
|
715
1051
|
readonly path: HttpRouter.PathInput
|
|
1052
|
+
readonly protocols: Arr.NonEmptyReadonlyArray<McpProtocol.ProtocolAdapter>
|
|
1053
|
+
readonly allowedOrigins?: ReadonlyArray<string> | undefined
|
|
716
1054
|
readonly extensions?: Record<`${string}/${string}`, unknown> | undefined
|
|
717
|
-
}): Layer.Layer<McpServer | McpServerClient,
|
|
718
|
-
const protocolState = layerMcpProtocolState
|
|
1055
|
+
}): Layer.Layer<McpServer | McpServerClient, Cause.IllegalArgumentError, HttpRouter.HttpRouter> => {
|
|
1056
|
+
const protocolState = layerMcpProtocolState(options.protocols)
|
|
719
1057
|
const methodNotAllowedResponse = HttpServerResponse.empty({
|
|
720
1058
|
status: 405,
|
|
721
1059
|
headers: { allow: "POST" }
|
|
722
1060
|
})
|
|
1061
|
+
const methodNotAllowed = (request: HttpServerRequest.HttpServerRequest) =>
|
|
1062
|
+
Effect.succeed(
|
|
1063
|
+
request.headers.origin !== undefined &&
|
|
1064
|
+
!options.allowedOrigins?.includes(request.headers.origin)
|
|
1065
|
+
? HttpServerResponse.empty({ status: 403 })
|
|
1066
|
+
: methodNotAllowedResponse
|
|
1067
|
+
)
|
|
723
1068
|
const routes = Layer.mergeAll(
|
|
724
|
-
HttpRouter.add("GET", options.path,
|
|
725
|
-
HttpRouter.add("PUT", options.path,
|
|
726
|
-
HttpRouter.add("PATCH", options.path,
|
|
727
|
-
HttpRouter.add("DELETE", options.path,
|
|
1069
|
+
HttpRouter.add("GET", options.path, methodNotAllowed),
|
|
1070
|
+
HttpRouter.add("PUT", options.path, methodNotAllowed),
|
|
1071
|
+
HttpRouter.add("PATCH", options.path, methodNotAllowed),
|
|
1072
|
+
HttpRouter.add("DELETE", options.path, methodNotAllowed),
|
|
1073
|
+
HttpRouter.add("OPTIONS", options.path, methodNotAllowed)
|
|
728
1074
|
)
|
|
729
1075
|
return Layer.merge(layerWithProtocolState(options), routes).pipe(
|
|
730
1076
|
Layer.provide(layerMcpProtocolHttp(options)),
|
|
@@ -735,6 +1081,7 @@ export const layerHttp = (options: {
|
|
|
735
1081
|
|
|
736
1082
|
const layerMcpProtocolHttp = (options: {
|
|
737
1083
|
readonly path: HttpRouter.PathInput
|
|
1084
|
+
readonly allowedOrigins?: ReadonlyArray<string> | undefined
|
|
738
1085
|
}): Layer.Layer<
|
|
739
1086
|
RpcServer.Protocol,
|
|
740
1087
|
never,
|
|
@@ -745,14 +1092,142 @@ const layerMcpProtocolHttp = (options: {
|
|
|
745
1092
|
const { httpEffect, protocol } = yield* RpcServer.makeProtocolWithHttpEffect
|
|
746
1093
|
const router = yield* HttpRouter.HttpRouter
|
|
747
1094
|
yield* router.add("POST", options.path, (request) => {
|
|
1095
|
+
if (
|
|
1096
|
+
request.headers.origin !== undefined &&
|
|
1097
|
+
!options.allowedOrigins?.includes(request.headers.origin)
|
|
1098
|
+
) {
|
|
1099
|
+
return Effect.succeed(HttpServerResponse.empty({ status: 403 }))
|
|
1100
|
+
}
|
|
1101
|
+
const contentType = request.headers["content-type"]?.split(";", 1)[0]?.trim().toLowerCase()
|
|
1102
|
+
if (contentType !== "application/json") {
|
|
1103
|
+
return Effect.succeed(HttpServerResponse.empty({ status: 415 }))
|
|
1104
|
+
}
|
|
1105
|
+
const accepted = new Set<string>()
|
|
1106
|
+
for (const entry of request.headers.accept?.split(",") ?? []) {
|
|
1107
|
+
const [mediaType, ...parameters] = entry.split(";").map((part) => part.trim().toLowerCase())
|
|
1108
|
+
let quality = 1
|
|
1109
|
+
for (const parameter of parameters) {
|
|
1110
|
+
const [name, value] = parameter.split("=", 2).map((part) => part.trim())
|
|
1111
|
+
if (name === "q") {
|
|
1112
|
+
quality = value === undefined ? Number.NaN : Number(value)
|
|
1113
|
+
}
|
|
1114
|
+
}
|
|
1115
|
+
if (mediaType !== undefined && quality > 0 && quality <= 1) {
|
|
1116
|
+
accepted.add(mediaType)
|
|
1117
|
+
}
|
|
1118
|
+
}
|
|
1119
|
+
if (!accepted.has("application/json") || !accepted.has("text/event-stream")) {
|
|
1120
|
+
return Effect.succeed(HttpServerResponse.empty({ status: 406 }))
|
|
1121
|
+
}
|
|
748
1122
|
const protocolVersion = request.headers[MCP_PROTOCOL_VERSION_HEADER]
|
|
749
1123
|
if (
|
|
750
1124
|
protocolVersion !== undefined &&
|
|
751
|
-
!state.
|
|
1125
|
+
!state.protocolRegistry.protocols.some((protocol) => protocol.protocolVersion === protocolVersion)
|
|
752
1126
|
) {
|
|
753
1127
|
return Effect.succeed(HttpServerResponse.empty({ status: 400 }))
|
|
754
1128
|
}
|
|
755
|
-
return
|
|
1129
|
+
return request.text.pipe(
|
|
1130
|
+
Effect.matchEffect({
|
|
1131
|
+
onFailure: () =>
|
|
1132
|
+
Effect.succeed(
|
|
1133
|
+
HttpServerResponse.jsonUnsafe({
|
|
1134
|
+
jsonrpc: "2.0",
|
|
1135
|
+
id: null,
|
|
1136
|
+
error: new ParseError({
|
|
1137
|
+
message: "Parse error"
|
|
1138
|
+
})
|
|
1139
|
+
})
|
|
1140
|
+
),
|
|
1141
|
+
onSuccess: (body) => {
|
|
1142
|
+
return Effect.match(Schema.decodeUnknownEffect(Schema.UnknownFromJsonString)(body), {
|
|
1143
|
+
onFailure: () => ({
|
|
1144
|
+
_tag: "Error" as const,
|
|
1145
|
+
id: null,
|
|
1146
|
+
error: new ParseError({ message: "Parse error" })
|
|
1147
|
+
}),
|
|
1148
|
+
onSuccess: (input) => {
|
|
1149
|
+
if (Array.isArray(input)) {
|
|
1150
|
+
const sessionId = request.headers[MCP_SESSION_ID_HEADER]
|
|
1151
|
+
const session = sessionId === undefined ? undefined : state.sessions.bySessionId.get(sessionId)
|
|
1152
|
+
let selectedProtocol = session?.protocol ?? state.protocolRegistry.protocols[0]
|
|
1153
|
+
for (const entry of input) {
|
|
1154
|
+
if (
|
|
1155
|
+
Predicate.hasProperty(entry, "method") &&
|
|
1156
|
+
entry.method === "initialize" &&
|
|
1157
|
+
Predicate.hasProperty(entry, "params") &&
|
|
1158
|
+
Predicate.hasProperty(entry.params, "protocolVersion") &&
|
|
1159
|
+
typeof entry.params.protocolVersion === "string"
|
|
1160
|
+
) {
|
|
1161
|
+
selectedProtocol = state.protocolRegistry.select(entry.params.protocolVersion)
|
|
1162
|
+
break
|
|
1163
|
+
}
|
|
1164
|
+
}
|
|
1165
|
+
if (!selectedProtocol.transport.acceptsJsonRpcBatches) {
|
|
1166
|
+
return { _tag: "HttpError" as const, status: 400 }
|
|
1167
|
+
}
|
|
1168
|
+
}
|
|
1169
|
+
const hasId = Predicate.hasProperty(input, "id")
|
|
1170
|
+
const id = hasId && (typeof input.id === "string" || typeof input.id === "number")
|
|
1171
|
+
? input.id
|
|
1172
|
+
: null
|
|
1173
|
+
const isJsonRpc = Predicate.hasProperty(input, "jsonrpc") && input.jsonrpc === "2.0"
|
|
1174
|
+
const hasValidRequestId = hasId === false || typeof input.id === "string" ||
|
|
1175
|
+
typeof input.id === "number"
|
|
1176
|
+
const isRequest = isJsonRpc && hasValidRequestId &&
|
|
1177
|
+
Predicate.hasProperty(input, "method") && typeof input.method === "string"
|
|
1178
|
+
const hasValidResponseId = hasId &&
|
|
1179
|
+
(typeof input.id === "string" || typeof input.id === "number" || input.id === null)
|
|
1180
|
+
const hasResult = Predicate.hasProperty(input, "result")
|
|
1181
|
+
const hasError = Predicate.hasProperty(input, "error")
|
|
1182
|
+
const isResponse = isJsonRpc && hasValidResponseId && hasResult !== hasError
|
|
1183
|
+
const isInitialize = isRequest && input.method === "initialize"
|
|
1184
|
+
const sessionId = request.headers[MCP_SESSION_ID_HEADER]
|
|
1185
|
+
const session = sessionId === undefined ? undefined : state.sessions.bySessionId.get(sessionId)
|
|
1186
|
+
if (isInitialize && sessionId !== undefined) {
|
|
1187
|
+
return {
|
|
1188
|
+
_tag: "HttpError" as const,
|
|
1189
|
+
status: session === undefined ? 404 : 400
|
|
1190
|
+
}
|
|
1191
|
+
}
|
|
1192
|
+
if (!isInitialize && isRequest && session === undefined) {
|
|
1193
|
+
return {
|
|
1194
|
+
_tag: "HttpError" as const,
|
|
1195
|
+
status: sessionId === undefined ? 400 : 404
|
|
1196
|
+
}
|
|
1197
|
+
}
|
|
1198
|
+
if (
|
|
1199
|
+
session !== undefined &&
|
|
1200
|
+
session.protocol.transport.requiresVersionHeader &&
|
|
1201
|
+
protocolVersion !== session.protocol.protocolVersion
|
|
1202
|
+
) {
|
|
1203
|
+
return { _tag: "HttpError" as const, status: 400 }
|
|
1204
|
+
}
|
|
1205
|
+
return isRequest || isResponse
|
|
1206
|
+
? { _tag: "Success" as const }
|
|
1207
|
+
: {
|
|
1208
|
+
_tag: "Error" as const,
|
|
1209
|
+
id,
|
|
1210
|
+
error: new InvalidRequest({ message: "Invalid Request" })
|
|
1211
|
+
}
|
|
1212
|
+
}
|
|
1213
|
+
}).pipe(
|
|
1214
|
+
Effect.flatMap((decoded) =>
|
|
1215
|
+
decoded._tag === "HttpError"
|
|
1216
|
+
? Effect.succeed(HttpServerResponse.empty({ status: decoded.status }))
|
|
1217
|
+
: decoded._tag === "Error"
|
|
1218
|
+
? Effect.succeed(
|
|
1219
|
+
HttpServerResponse.jsonUnsafe({
|
|
1220
|
+
jsonrpc: "2.0",
|
|
1221
|
+
id: decoded.id,
|
|
1222
|
+
error: decoded.error
|
|
1223
|
+
})
|
|
1224
|
+
)
|
|
1225
|
+
: httpEffect
|
|
1226
|
+
)
|
|
1227
|
+
)
|
|
1228
|
+
}
|
|
1229
|
+
})
|
|
1230
|
+
)
|
|
756
1231
|
})
|
|
757
1232
|
return protocol
|
|
758
1233
|
}))
|
|
@@ -768,7 +1243,7 @@ const toolErrorResult = (message: string): CallToolResult =>
|
|
|
768
1243
|
/**
|
|
769
1244
|
* Registers a `Toolkit` with the `McpServer`.
|
|
770
1245
|
*
|
|
771
|
-
* @category
|
|
1246
|
+
* @category handlers
|
|
772
1247
|
* @since 4.0.0
|
|
773
1248
|
*/
|
|
774
1249
|
export const registerToolkit: <Tools extends Record<string, Tool.Any>>(
|
|
@@ -791,10 +1266,12 @@ export const registerToolkit: <Tools extends Record<string, Tool.Any>>(
|
|
|
791
1266
|
const annotations = tool.annotations
|
|
792
1267
|
const toolMeta = Context.getOrUndefined(annotations, Tool.Meta)
|
|
793
1268
|
const isDeclaredFailure = Schema.is(tool.failureSchema)
|
|
1269
|
+
const outputSchema = Tool.getJsonSchemaFromSchema(tool.successSchema)
|
|
794
1270
|
const mcpTool = new McpTool({
|
|
795
1271
|
name: tool.name,
|
|
796
1272
|
description: Tool.getDescription(tool),
|
|
797
1273
|
inputSchema: Tool.getJsonSchema(tool),
|
|
1274
|
+
...(outputSchema.type === "object" ? { outputSchema } : {}),
|
|
798
1275
|
annotations: {
|
|
799
1276
|
...(Context.getOption(tool.annotations, Tool.Title).pipe(
|
|
800
1277
|
Option.map((title) => ({ title })),
|
|
@@ -833,7 +1310,7 @@ export const registerToolkit: <Tools extends Record<string, Tool.Any>>(
|
|
|
833
1310
|
if (AiError.isAiError(error)) {
|
|
834
1311
|
const reason = (error as AiError.AiError).reason
|
|
835
1312
|
return reason._tag === "ToolParameterValidationError"
|
|
836
|
-
? Effect.
|
|
1313
|
+
? Effect.fail(new InvalidParams({ message: reason.message }))
|
|
837
1314
|
: Effect.succeed(toolErrorResult(INTERNAL_TOOL_ERROR_MESSAGE))
|
|
838
1315
|
}
|
|
839
1316
|
if (isDeclaredFailure(error)) {
|
|
@@ -854,7 +1331,7 @@ export const registerToolkit: <Tools extends Record<string, Tool.Any>>(
|
|
|
854
1331
|
/**
|
|
855
1332
|
* Registers an `AiToolkit` with the `McpServer`.
|
|
856
1333
|
*
|
|
857
|
-
* @category
|
|
1334
|
+
* @category layers
|
|
858
1335
|
* @since 4.0.0
|
|
859
1336
|
*/
|
|
860
1337
|
export const toolkit = <Tools extends Record<string, Tool.Any>>(
|
|
@@ -878,7 +1355,11 @@ export const toolkit = <Tools extends Record<string, Tool.Any>>(
|
|
|
878
1355
|
export type ValidateCompletions<Completions, Keys extends string> =
|
|
879
1356
|
& Completions
|
|
880
1357
|
& {
|
|
881
|
-
readonly [K in keyof Completions]: K extends Keys ? (
|
|
1358
|
+
readonly [K in keyof Completions]: K extends Keys ? (
|
|
1359
|
+
input: string,
|
|
1360
|
+
context: CompletionContext
|
|
1361
|
+
) => any
|
|
1362
|
+
: never
|
|
882
1363
|
}
|
|
883
1364
|
|
|
884
1365
|
/**
|
|
@@ -897,7 +1378,10 @@ export type ResourceCompletions<Schemas extends ReadonlyArray<Schema.Constraint>
|
|
|
897
1378
|
readonly [
|
|
898
1379
|
K in Extract<keyof Schemas, `${number}`> as Schemas[K] extends Param<infer Id, infer _S> ? Id
|
|
899
1380
|
: `param${K}`
|
|
900
|
-
]: (
|
|
1381
|
+
]: (
|
|
1382
|
+
input: string,
|
|
1383
|
+
context: CompletionContext
|
|
1384
|
+
) => Effect.Effect<Array<Schemas[K]["Type"]>, any, any>
|
|
901
1385
|
}
|
|
902
1386
|
|
|
903
1387
|
/**
|
|
@@ -911,7 +1395,7 @@ export type ResourceCompletions<Schemas extends ReadonlyArray<Schema.Constraint>
|
|
|
911
1395
|
*
|
|
912
1396
|
* @see {@link resource} for the layer-based resource registration wrapper
|
|
913
1397
|
*
|
|
914
|
-
* @category
|
|
1398
|
+
* @category handlers
|
|
915
1399
|
* @since 4.0.0
|
|
916
1400
|
*/
|
|
917
1401
|
export const registerResource: {
|
|
@@ -926,7 +1410,7 @@ export const registerResource: {
|
|
|
926
1410
|
*
|
|
927
1411
|
* @see {@link resource} for the layer-based resource registration wrapper
|
|
928
1412
|
*
|
|
929
|
-
* @category
|
|
1413
|
+
* @category handlers
|
|
930
1414
|
* @since 4.0.0
|
|
931
1415
|
*/
|
|
932
1416
|
<E, R>(
|
|
@@ -956,7 +1440,7 @@ export const registerResource: {
|
|
|
956
1440
|
*
|
|
957
1441
|
* @see {@link resource} for the layer-based resource registration wrapper
|
|
958
1442
|
*
|
|
959
|
-
* @category
|
|
1443
|
+
* @category handlers
|
|
960
1444
|
* @since 4.0.0
|
|
961
1445
|
*/
|
|
962
1446
|
<const Schemas extends ReadonlyArray<Schema.Constraint>>(segments: TemplateStringsArray, ...schemas: Schemas): <
|
|
@@ -1034,7 +1518,15 @@ export const registerResource: {
|
|
|
1034
1518
|
readonly mimeType?: string | undefined
|
|
1035
1519
|
readonly audience?: ReadonlyArray<"user" | "assistant"> | undefined
|
|
1036
1520
|
readonly priority?: number | undefined
|
|
1037
|
-
readonly completion?:
|
|
1521
|
+
readonly completion?:
|
|
1522
|
+
| Record<
|
|
1523
|
+
string,
|
|
1524
|
+
(
|
|
1525
|
+
input: string,
|
|
1526
|
+
context: CompletionContext
|
|
1527
|
+
) => Effect.Effect<any>
|
|
1528
|
+
>
|
|
1529
|
+
| undefined
|
|
1038
1530
|
readonly content: (uri: string, ...params: Array<any>) => Effect.Effect<
|
|
1039
1531
|
typeof ReadResourceResult.Type | string | Uint8Array,
|
|
1040
1532
|
E,
|
|
@@ -1050,13 +1542,20 @@ export const registerResource: {
|
|
|
1050
1542
|
uriTemplate: uriPath,
|
|
1051
1543
|
annotations: options!
|
|
1052
1544
|
})
|
|
1053
|
-
const completions: Record<
|
|
1054
|
-
|
|
1055
|
-
|
|
1545
|
+
const completions: Record<
|
|
1546
|
+
string,
|
|
1547
|
+
(
|
|
1548
|
+
input: string,
|
|
1549
|
+
context: CompletionContext
|
|
1550
|
+
) => Effect.Effect<CompleteResult, InternalError>
|
|
1551
|
+
> = Object.create(null)
|
|
1056
1552
|
for (const [param, handle] of Object.entries(options.completion ?? {})) {
|
|
1057
1553
|
const encodeArray = Schema.encodeUnknownEffect(Schema.Array(params[param]))
|
|
1058
|
-
const handler = (
|
|
1059
|
-
|
|
1554
|
+
const handler = (
|
|
1555
|
+
input: string,
|
|
1556
|
+
context: CompletionContext
|
|
1557
|
+
) =>
|
|
1558
|
+
handle(input, context).pipe(
|
|
1060
1559
|
Effect.flatMap(encodeArray),
|
|
1061
1560
|
Effect.map((values) => ({
|
|
1062
1561
|
completion: {
|
|
@@ -1105,7 +1604,7 @@ export const registerResource: {
|
|
|
1105
1604
|
*
|
|
1106
1605
|
* @see {@link registerResource} for the Effect-level resource registration API
|
|
1107
1606
|
*
|
|
1108
|
-
* @category
|
|
1607
|
+
* @category layers
|
|
1109
1608
|
* @since 4.0.0
|
|
1110
1609
|
*/
|
|
1111
1610
|
export const resource: {
|
|
@@ -1118,7 +1617,7 @@ export const resource: {
|
|
|
1118
1617
|
*
|
|
1119
1618
|
* @see {@link registerResource} for the Effect-level resource registration API
|
|
1120
1619
|
*
|
|
1121
|
-
* @category
|
|
1620
|
+
* @category layers
|
|
1122
1621
|
* @since 4.0.0
|
|
1123
1622
|
*/
|
|
1124
1623
|
<E, R>(
|
|
@@ -1145,7 +1644,7 @@ export const resource: {
|
|
|
1145
1644
|
*
|
|
1146
1645
|
* @see {@link registerResource} for the Effect-level resource registration API
|
|
1147
1646
|
*
|
|
1148
|
-
* @category
|
|
1647
|
+
* @category layers
|
|
1149
1648
|
* @since 4.0.0
|
|
1150
1649
|
*/
|
|
1151
1650
|
<const Schemas extends ReadonlyArray<Schema.Constraint>>(segments: TemplateStringsArray, ...schemas: Schemas): <
|
|
@@ -1204,7 +1703,7 @@ export const resource: {
|
|
|
1204
1703
|
*
|
|
1205
1704
|
* @see {@link prompt} for the layer-based prompt registration wrapper
|
|
1206
1705
|
*
|
|
1207
|
-
* @category
|
|
1706
|
+
* @category handlers
|
|
1208
1707
|
* @since 4.0.0
|
|
1209
1708
|
*/
|
|
1210
1709
|
export const registerPrompt = <
|
|
@@ -1212,7 +1711,10 @@ export const registerPrompt = <
|
|
|
1212
1711
|
R,
|
|
1213
1712
|
Params extends Schema.Struct.Fields = {},
|
|
1214
1713
|
const Completions extends {
|
|
1215
|
-
readonly [K in keyof Params]?: (
|
|
1714
|
+
readonly [K in keyof Params]?: (
|
|
1715
|
+
input: string,
|
|
1716
|
+
context: CompletionContext
|
|
1717
|
+
) => Effect.Effect<Array<Params[K]>, any, any>
|
|
1216
1718
|
} = {}
|
|
1217
1719
|
>(
|
|
1218
1720
|
options: {
|
|
@@ -1241,18 +1743,30 @@ export const registerPrompt = <
|
|
|
1241
1743
|
const decode = options.parameters
|
|
1242
1744
|
? Schema.decodeEffect(Schema.Struct(props))
|
|
1243
1745
|
: () => Effect.succeed({} as Params)
|
|
1244
|
-
const completion: Record<
|
|
1746
|
+
const completion: Record<
|
|
1747
|
+
string,
|
|
1748
|
+
(
|
|
1749
|
+
input: string,
|
|
1750
|
+
context: CompletionContext
|
|
1751
|
+
) => Effect.Effect<any>
|
|
1752
|
+
> = options.completion ?? {}
|
|
1245
1753
|
return Effect.gen(function*() {
|
|
1246
1754
|
const registry = yield* McpServer
|
|
1247
1755
|
const services = yield* Effect.context<Exclude<R | Schema.Struct.DecodingServices<Params>, McpServerClient>>()
|
|
1248
1756
|
const completions: Record<
|
|
1249
1757
|
string,
|
|
1250
|
-
(
|
|
1758
|
+
(
|
|
1759
|
+
input: string,
|
|
1760
|
+
context: CompletionContext
|
|
1761
|
+
) => Effect.Effect<CompleteResult, InternalError, McpServerClient>
|
|
1251
1762
|
> = Object.create(null)
|
|
1252
1763
|
for (const [param, handle] of Object.entries(completion)) {
|
|
1253
1764
|
const encodeArray = Schema.encodeEffect(Schema.Array(props[param]))
|
|
1254
|
-
const handler = (
|
|
1255
|
-
|
|
1765
|
+
const handler = (
|
|
1766
|
+
input: string,
|
|
1767
|
+
context: CompletionContext
|
|
1768
|
+
) =>
|
|
1769
|
+
handle(input, context).pipe(
|
|
1256
1770
|
Effect.flatMap(encodeArray),
|
|
1257
1771
|
Effect.map((values) => ({
|
|
1258
1772
|
completion: {
|
|
@@ -1276,20 +1790,23 @@ export const registerPrompt = <
|
|
|
1276
1790
|
handle: (params) =>
|
|
1277
1791
|
decode(params).pipe(
|
|
1278
1792
|
Effect.mapError((error) => new InvalidParams({ message: error.message })),
|
|
1279
|
-
Effect.flatMap((params) =>
|
|
1280
|
-
|
|
1281
|
-
|
|
1282
|
-
|
|
1283
|
-
|
|
1284
|
-
|
|
1285
|
-
|
|
1286
|
-
|
|
1287
|
-
|
|
1288
|
-
|
|
1289
|
-
|
|
1290
|
-
|
|
1291
|
-
|
|
1292
|
-
|
|
1793
|
+
Effect.flatMap((params) =>
|
|
1794
|
+
options.content(params as any).pipe(
|
|
1795
|
+
Effect.map((messages) => {
|
|
1796
|
+
messages = typeof messages === "string" ?
|
|
1797
|
+
[{
|
|
1798
|
+
role: "user",
|
|
1799
|
+
content: TextContent.make({ text: messages })
|
|
1800
|
+
}] :
|
|
1801
|
+
messages
|
|
1802
|
+
return new GetPromptResult({ messages, description: prompt.description })
|
|
1803
|
+
}),
|
|
1804
|
+
Effect.catchCause((cause) => {
|
|
1805
|
+
const prettyError = Cause.prettyErrors(cause)[0]
|
|
1806
|
+
return Effect.fail(new InternalError({ message: prettyError.message }))
|
|
1807
|
+
})
|
|
1808
|
+
)
|
|
1809
|
+
),
|
|
1293
1810
|
Effect.provideContext(services as Context.Context<unknown>)
|
|
1294
1811
|
)
|
|
1295
1812
|
})
|
|
@@ -1311,7 +1828,7 @@ export const registerPrompt = <
|
|
|
1311
1828
|
*
|
|
1312
1829
|
* @see {@link registerPrompt} for the Effect-level prompt registration API
|
|
1313
1830
|
*
|
|
1314
|
-
* @category
|
|
1831
|
+
* @category layers
|
|
1315
1832
|
* @since 4.0.0
|
|
1316
1833
|
*/
|
|
1317
1834
|
export const prompt = <
|
|
@@ -1319,7 +1836,10 @@ export const prompt = <
|
|
|
1319
1836
|
R,
|
|
1320
1837
|
Params extends Schema.Struct.Fields = {},
|
|
1321
1838
|
const Completions extends {
|
|
1322
|
-
readonly [K in keyof Params]?: (
|
|
1839
|
+
readonly [K in keyof Params]?: (
|
|
1840
|
+
input: string,
|
|
1841
|
+
context: CompletionContext
|
|
1842
|
+
) => Effect.Effect<Array<Params[K]["Type"]>, any, any>
|
|
1323
1843
|
} = {}
|
|
1324
1844
|
>(
|
|
1325
1845
|
options: {
|
|
@@ -1346,7 +1866,7 @@ export const prompt = <
|
|
|
1346
1866
|
* Accepted content is decoded with the supplied schema, declined requests fail
|
|
1347
1867
|
* with `ElicitationDeclined`, and canceled requests interrupt the effect.
|
|
1348
1868
|
*
|
|
1349
|
-
* @category
|
|
1869
|
+
* @category accessors
|
|
1350
1870
|
* @since 4.0.0
|
|
1351
1871
|
*/
|
|
1352
1872
|
export const elicit: <S extends Schema.ConstraintEncoder<Record<string, unknown>, unknown>>(options: {
|
|
@@ -1383,7 +1903,7 @@ export const elicit: <S extends Schema.ConstraintEncoder<Record<string, unknown>
|
|
|
1383
1903
|
/**
|
|
1384
1904
|
* Accesses the current client's capabilities.
|
|
1385
1905
|
*
|
|
1386
|
-
* @category
|
|
1906
|
+
* @category accessors
|
|
1387
1907
|
* @since 4.0.0
|
|
1388
1908
|
*/
|
|
1389
1909
|
export const clientCapabilities: Effect.Effect<
|
|
@@ -1442,145 +1962,191 @@ const layerHandlers = (serverInfo: {
|
|
|
1442
1962
|
readonly name: string
|
|
1443
1963
|
readonly version: string
|
|
1444
1964
|
readonly extensions?: Record<`${string}/${string}`, unknown> | undefined
|
|
1965
|
+
}, options: {
|
|
1966
|
+
readonly sessions: Sessions
|
|
1967
|
+
readonly protocolRegistry: McpProtocolRegistry.ProtocolRegistry<McpProtocol.ProtocolAdapter>
|
|
1445
1968
|
}) =>
|
|
1446
|
-
|
|
1969
|
+
Layer.effectContext(
|
|
1447
1970
|
Effect.gen(function*() {
|
|
1448
1971
|
const server = yield* McpServer
|
|
1449
|
-
const
|
|
1450
|
-
const
|
|
1451
|
-
|
|
1452
|
-
|
|
1453
|
-
|
|
1454
|
-
|
|
1455
|
-
|
|
1456
|
-
|
|
1457
|
-
|
|
1458
|
-
|
|
1459
|
-
|
|
1460
|
-
|
|
1461
|
-
params = {
|
|
1462
|
-
...params,
|
|
1463
|
-
protocolVersion: requestedVersion
|
|
1972
|
+
const currentLogLevel = yield* CurrentLogLevel
|
|
1973
|
+
const contextMap = new Map<string, unknown>()
|
|
1974
|
+
|
|
1975
|
+
for (const protocol of options.protocolRegistry.protocols) {
|
|
1976
|
+
const selectedProtocol = protocol
|
|
1977
|
+
const wireHandlers = ClientRpcs.of({
|
|
1978
|
+
// Requests
|
|
1979
|
+
ping: () => Effect.succeed({}),
|
|
1980
|
+
initialize(params, { client }) {
|
|
1981
|
+
const capabilities: Types.DeepMutable<typeof ServerCapabilities.Type> = {
|
|
1982
|
+
completions: {},
|
|
1983
|
+
logging: {}
|
|
1464
1984
|
}
|
|
1465
|
-
|
|
1466
|
-
|
|
1467
|
-
completions: {}
|
|
1468
|
-
}
|
|
1469
|
-
if (server.tools.length > 0) {
|
|
1470
|
-
capabilities.tools = { listChanged: true }
|
|
1471
|
-
}
|
|
1472
|
-
if (server.resources.length > 0 || server.resourceTemplates.length > 0) {
|
|
1473
|
-
capabilities.resources = {
|
|
1474
|
-
listChanged: true,
|
|
1475
|
-
subscribe: false
|
|
1985
|
+
if (server.tools.length > 0) {
|
|
1986
|
+
capabilities.tools = { listChanged: true }
|
|
1476
1987
|
}
|
|
1477
|
-
|
|
1478
|
-
|
|
1479
|
-
|
|
1480
|
-
|
|
1481
|
-
|
|
1482
|
-
capabilities.extensions = serverInfo.extensions as any
|
|
1483
|
-
}
|
|
1484
|
-
return Effect.withFiber((fiber) => {
|
|
1485
|
-
const httpRequest = Context.getOrUndefined(fiber.context, HttpServerRequest.HttpServerRequest)
|
|
1486
|
-
if (httpRequest) {
|
|
1487
|
-
const sessionId = crypto.randomUUID()
|
|
1488
|
-
clientSessions.set(sessionId, params)
|
|
1489
|
-
appendPreResponseHandlerUnsafe(httpRequest, (_req, res) =>
|
|
1490
|
-
Effect.succeed(HttpServerResponse.setHeaders(res, {
|
|
1491
|
-
[MCP_SESSION_ID_HEADER]: sessionId,
|
|
1492
|
-
[MCP_PROTOCOL_VERSION_HEADER]: requestedVersion
|
|
1493
|
-
})))
|
|
1494
|
-
} else {
|
|
1495
|
-
clientSessions.set(String(client.id), params)
|
|
1988
|
+
if (server.resources.length > 0 || server.resourceTemplates.length > 0) {
|
|
1989
|
+
capabilities.resources = {
|
|
1990
|
+
listChanged: true,
|
|
1991
|
+
subscribe: true
|
|
1992
|
+
}
|
|
1496
1993
|
}
|
|
1497
|
-
|
|
1498
|
-
capabilities
|
|
1499
|
-
serverInfo,
|
|
1500
|
-
protocolVersion: requestedVersion
|
|
1501
|
-
})
|
|
1502
|
-
})
|
|
1503
|
-
},
|
|
1504
|
-
"completion/complete": (r) =>
|
|
1505
|
-
server.completion(r).pipe(
|
|
1506
|
-
Effect.provideService(CurrentLogLevel, currentLogLevel)
|
|
1507
|
-
),
|
|
1508
|
-
"logging/setLevel": ({ level }) =>
|
|
1509
|
-
Effect.sync(() => {
|
|
1510
|
-
switch (level) {
|
|
1511
|
-
case "notice":
|
|
1512
|
-
case "info":
|
|
1513
|
-
currentLogLevel = "Info"
|
|
1514
|
-
break
|
|
1515
|
-
case "error":
|
|
1516
|
-
currentLogLevel = "Error"
|
|
1517
|
-
break
|
|
1518
|
-
case "debug":
|
|
1519
|
-
currentLogLevel = "Debug"
|
|
1520
|
-
break
|
|
1521
|
-
case "warning":
|
|
1522
|
-
currentLogLevel = "Warn"
|
|
1523
|
-
break
|
|
1524
|
-
case "critical":
|
|
1525
|
-
case "alert":
|
|
1526
|
-
case "emergency":
|
|
1527
|
-
currentLogLevel = "Fatal"
|
|
1528
|
-
break
|
|
1994
|
+
if (server.prompts.length > 0) {
|
|
1995
|
+
capabilities.prompts = { listChanged: true }
|
|
1529
1996
|
}
|
|
1530
|
-
|
|
1531
|
-
|
|
1532
|
-
|
|
1533
|
-
Effect.
|
|
1534
|
-
|
|
1535
|
-
|
|
1536
|
-
|
|
1537
|
-
|
|
1538
|
-
|
|
1539
|
-
|
|
1540
|
-
|
|
1541
|
-
|
|
1542
|
-
|
|
1543
|
-
|
|
1544
|
-
|
|
1545
|
-
|
|
1546
|
-
|
|
1547
|
-
|
|
1548
|
-
|
|
1549
|
-
|
|
1550
|
-
|
|
1551
|
-
|
|
1552
|
-
|
|
1553
|
-
|
|
1554
|
-
|
|
1555
|
-
|
|
1556
|
-
|
|
1557
|
-
|
|
1558
|
-
|
|
1559
|
-
|
|
1560
|
-
"tools/call": (r) =>
|
|
1561
|
-
server.callTool(r).pipe(
|
|
1562
|
-
Effect.provideService(CurrentLogLevel, currentLogLevel)
|
|
1563
|
-
),
|
|
1564
|
-
"tools/list": (_, { client, headers }) =>
|
|
1565
|
-
Effect.sync(() => {
|
|
1566
|
-
const initialized = getInitializedClient(clientSessions, client.id, headers)
|
|
1567
|
-
return new ListToolsResult({
|
|
1568
|
-
tools: filterByClient(initialized, server.tools, "tool")
|
|
1997
|
+
if (serverInfo.extensions) {
|
|
1998
|
+
capabilities.extensions = serverInfo.extensions as any
|
|
1999
|
+
}
|
|
2000
|
+
return Effect.withFiber((fiber) => {
|
|
2001
|
+
const httpRequest = Context.getOrUndefined(fiber.context, HttpServerRequest.HttpServerRequest)
|
|
2002
|
+
if (httpRequest !== undefined && capabilities.resources !== undefined) {
|
|
2003
|
+
capabilities.resources.subscribe = false
|
|
2004
|
+
}
|
|
2005
|
+
const session: Session = {
|
|
2006
|
+
initializePayload: params,
|
|
2007
|
+
protocol: selectedProtocol,
|
|
2008
|
+
resourceSubscriptions: capabilities.resources?.subscribe === true ? new Set() : undefined,
|
|
2009
|
+
logLevel: { _tag: "Effect", level: currentLogLevel }
|
|
2010
|
+
}
|
|
2011
|
+
if (httpRequest) {
|
|
2012
|
+
const sessionId = crypto.randomUUID()
|
|
2013
|
+
options.sessions.bySessionId.set(sessionId, session)
|
|
2014
|
+
appendPreResponseHandlerUnsafe(httpRequest, (_req, res) =>
|
|
2015
|
+
Effect.succeed(HttpServerResponse.setHeaders(res, {
|
|
2016
|
+
[MCP_SESSION_ID_HEADER]: sessionId,
|
|
2017
|
+
[MCP_PROTOCOL_VERSION_HEADER]: selectedProtocol.protocolVersion
|
|
2018
|
+
})))
|
|
2019
|
+
} else {
|
|
2020
|
+
options.sessions.byClientId.set(client.id, session)
|
|
2021
|
+
}
|
|
2022
|
+
return Effect.succeed({
|
|
2023
|
+
capabilities,
|
|
2024
|
+
serverInfo,
|
|
2025
|
+
protocolVersion: selectedProtocol.protocolVersion
|
|
2026
|
+
})
|
|
1569
2027
|
})
|
|
1570
|
-
}
|
|
2028
|
+
},
|
|
2029
|
+
"completion/complete": (r) =>
|
|
2030
|
+
server.completion(r),
|
|
2031
|
+
"logging/setLevel": ({ level }, { client, headers }) =>
|
|
2032
|
+
Effect.sync(() => {
|
|
2033
|
+
const session = getClientSession(options.sessions, client.id, headers)
|
|
2034
|
+
if (session) {
|
|
2035
|
+
session.logLevel = { _tag: "Mcp", level }
|
|
2036
|
+
}
|
|
2037
|
+
return {}
|
|
2038
|
+
}),
|
|
2039
|
+
"prompts/get": (r) =>
|
|
2040
|
+
server.getPromptResult(r),
|
|
2041
|
+
"prompts/list": (_, { client, headers }) =>
|
|
2042
|
+
Effect.sync(() => {
|
|
2043
|
+
const initialized = getClientSession(options.sessions, client.id, headers)?.initializePayload
|
|
2044
|
+
return new ListPromptsResult({ prompts: filterByClient(initialized, server.prompts, "prompt") })
|
|
2045
|
+
}),
|
|
2046
|
+
"resources/list": (_, { client, headers }) =>
|
|
2047
|
+
Effect.sync(() => {
|
|
2048
|
+
const initialized = getClientSession(options.sessions, client.id, headers)?.initializePayload
|
|
2049
|
+
return new ListResourcesResult({ resources: filterByClient(initialized, server.resources, "resource") })
|
|
2050
|
+
}),
|
|
2051
|
+
"resources/read": ({ uri }) => server.findResource(uri),
|
|
2052
|
+
"resources/subscribe": ({ uri }, { client, headers }) =>
|
|
2053
|
+
Effect.gen(function*() {
|
|
2054
|
+
const subscriptions = getClientSession(
|
|
2055
|
+
options.sessions,
|
|
2056
|
+
client.id,
|
|
2057
|
+
headers
|
|
2058
|
+
)?.resourceSubscriptions
|
|
2059
|
+
if (subscriptions === undefined) {
|
|
2060
|
+
return yield* new MethodNotFound({
|
|
2061
|
+
message: "Resource subscriptions are not supported"
|
|
2062
|
+
})
|
|
2063
|
+
}
|
|
2064
|
+
subscriptions.add(uri)
|
|
2065
|
+
return {}
|
|
2066
|
+
}),
|
|
2067
|
+
"resources/unsubscribe": ({ uri }, { client, headers }) =>
|
|
2068
|
+
Effect.gen(function*() {
|
|
2069
|
+
const subscriptions = getClientSession(
|
|
2070
|
+
options.sessions,
|
|
2071
|
+
client.id,
|
|
2072
|
+
headers
|
|
2073
|
+
)?.resourceSubscriptions
|
|
2074
|
+
if (subscriptions === undefined) {
|
|
2075
|
+
return yield* new MethodNotFound({
|
|
2076
|
+
message: "Resource subscriptions are not supported"
|
|
2077
|
+
})
|
|
2078
|
+
}
|
|
2079
|
+
subscriptions.delete(uri)
|
|
2080
|
+
return {}
|
|
2081
|
+
}),
|
|
2082
|
+
"resources/templates/list": (_, { client, headers }) =>
|
|
2083
|
+
Effect.sync(() => {
|
|
2084
|
+
const initialized = getClientSession(options.sessions, client.id, headers)?.initializePayload
|
|
2085
|
+
return new ListResourceTemplatesResult({
|
|
2086
|
+
resourceTemplates: filterByClient(initialized, server.resourceTemplates, "template")
|
|
2087
|
+
})
|
|
2088
|
+
}),
|
|
2089
|
+
"tools/call": (r) => server.callTool(r),
|
|
2090
|
+
"tools/list": (_, { client, headers }) =>
|
|
2091
|
+
Effect.sync(() => {
|
|
2092
|
+
const initialized = getClientSession(options.sessions, client.id, headers)?.initializePayload
|
|
2093
|
+
return new ListToolsResult({
|
|
2094
|
+
tools: filterByClient(initialized, server.tools, "tool")
|
|
2095
|
+
})
|
|
2096
|
+
}),
|
|
1571
2097
|
|
|
1572
|
-
|
|
1573
|
-
|
|
1574
|
-
|
|
1575
|
-
|
|
1576
|
-
|
|
1577
|
-
|
|
1578
|
-
|
|
1579
|
-
|
|
1580
|
-
|
|
2098
|
+
// Notifications
|
|
2099
|
+
"notifications/cancelled": (_) => Effect.void,
|
|
2100
|
+
"notifications/initialized": (_, { client, headers }) =>
|
|
2101
|
+
Effect.sync(() => {
|
|
2102
|
+
server.initializedClients.add(client.id)
|
|
2103
|
+
const session = getClientSession(options.sessions, client.id, headers)
|
|
2104
|
+
if (session) {
|
|
2105
|
+
options.sessions.byClientId.set(client.id, session)
|
|
2106
|
+
}
|
|
2107
|
+
}),
|
|
2108
|
+
"notifications/progress": (_) => Effect.void,
|
|
2109
|
+
"notifications/roots/list_changed": (_) => Effect.void
|
|
2110
|
+
})
|
|
2111
|
+
yield* addProtocolHandlers(
|
|
2112
|
+
options.protocolRegistry,
|
|
2113
|
+
selectedProtocol,
|
|
2114
|
+
selectedProtocol.clientRpcs,
|
|
2115
|
+
wireHandlers,
|
|
2116
|
+
contextMap
|
|
2117
|
+
)
|
|
2118
|
+
}
|
|
2119
|
+
return Context.makeUnsafe(contextMap)
|
|
1581
2120
|
})
|
|
1582
2121
|
)
|
|
1583
2122
|
|
|
2123
|
+
const addProtocolHandlers = Effect.fnUntraced(function*<
|
|
2124
|
+
ClientRpcs extends Rpc.Any
|
|
2125
|
+
>(
|
|
2126
|
+
registry: McpProtocolRegistry.ProtocolRegistry<McpProtocol.ProtocolAdapter>,
|
|
2127
|
+
protocol: McpProtocol.ProtocolAdapter,
|
|
2128
|
+
clientRpcs: RpcGroup.RpcGroup<ClientRpcs>,
|
|
2129
|
+
handlers: RpcGroup.HandlersFrom<ClientRpcs>,
|
|
2130
|
+
contextMap: Map<string, unknown>
|
|
2131
|
+
) {
|
|
2132
|
+
const handlerContext = yield* clientRpcs.toHandlers(handlers)
|
|
2133
|
+
for (const rpcDefinition of clientRpcs.requests.values()) {
|
|
2134
|
+
const routed = registry.routeClientRequest(protocol, {
|
|
2135
|
+
_tag: "Request",
|
|
2136
|
+
id: 0,
|
|
2137
|
+
tag: rpcDefinition._tag,
|
|
2138
|
+
payload: undefined,
|
|
2139
|
+
headers: []
|
|
2140
|
+
})
|
|
2141
|
+
const namespacedRpc = registry.clientRpcs.requests.get(routed.tag)
|
|
2142
|
+
const handler = handlerContext.mapUnsafe.get(rpcDefinition.key)
|
|
2143
|
+
if (namespacedRpc === undefined || handler === undefined) {
|
|
2144
|
+
return yield* Effect.die(`MCP handler registration invariant failed for ${routed.tag}`)
|
|
2145
|
+
}
|
|
2146
|
+
contextMap.set(namespacedRpc.key, handler)
|
|
2147
|
+
}
|
|
2148
|
+
})
|
|
2149
|
+
|
|
1584
2150
|
const resolveResourceContent = (
|
|
1585
2151
|
uri: string,
|
|
1586
2152
|
content: typeof ReadResourceResult.Type | string | Uint8Array
|
|
@@ -1627,14 +2193,74 @@ const filterByClient = <
|
|
|
1627
2193
|
return out
|
|
1628
2194
|
}
|
|
1629
2195
|
|
|
1630
|
-
const
|
|
1631
|
-
sessions:
|
|
2196
|
+
const getClientSession = (
|
|
2197
|
+
sessions: Sessions,
|
|
1632
2198
|
clientId: number,
|
|
1633
2199
|
headers: Headers.Headers
|
|
1634
2200
|
) => {
|
|
1635
2201
|
const sessionId = headers[MCP_SESSION_ID_HEADER]
|
|
1636
2202
|
if (sessionId === undefined) {
|
|
1637
|
-
return sessions.get(
|
|
2203
|
+
return sessions.byClientId.get(clientId)
|
|
1638
2204
|
}
|
|
1639
|
-
return sessions.get(sessionId)
|
|
2205
|
+
return sessions.bySessionId.get(sessionId)
|
|
1640
2206
|
}
|
|
2207
|
+
|
|
2208
|
+
const mcpLogLevels: Record<LoggingLevel, {
|
|
2209
|
+
readonly effect: LogLevel.LogLevel
|
|
2210
|
+
readonly order: number
|
|
2211
|
+
}> = {
|
|
2212
|
+
debug: { effect: "Debug", order: 0 },
|
|
2213
|
+
info: { effect: "Info", order: 1 },
|
|
2214
|
+
notice: { effect: "Info", order: 2 },
|
|
2215
|
+
warning: { effect: "Warn", order: 3 },
|
|
2216
|
+
error: { effect: "Error", order: 4 },
|
|
2217
|
+
critical: { effect: "Fatal", order: 5 },
|
|
2218
|
+
alert: { effect: "Fatal", order: 6 },
|
|
2219
|
+
emergency: { effect: "Fatal", order: 7 }
|
|
2220
|
+
}
|
|
2221
|
+
|
|
2222
|
+
const effectLogLevel = (logLevel: SessionLogLevel | undefined): LogLevel.LogLevel =>
|
|
2223
|
+
logLevel?._tag === "Mcp" ? mcpLogLevels[logLevel.level].effect : logLevel?.level ?? "Info"
|
|
2224
|
+
|
|
2225
|
+
const isMcpLogLevelEnabled = (
|
|
2226
|
+
level: LoggingLevel,
|
|
2227
|
+
minimum: SessionLogLevel | undefined
|
|
2228
|
+
): boolean =>
|
|
2229
|
+
minimum?._tag === "Mcp"
|
|
2230
|
+
? mcpLogLevels[level].order >= mcpLogLevels[minimum.level].order
|
|
2231
|
+
: LogLevel.isGreaterThanOrEqualTo(mcpLogLevels[level].effect, minimum?.level ?? "Info")
|
|
2232
|
+
|
|
2233
|
+
const getOfferedProtocolVersion = (payload: unknown): string =>
|
|
2234
|
+
typeof payload === "object" &&
|
|
2235
|
+
payload !== null &&
|
|
2236
|
+
"protocolVersion" in payload &&
|
|
2237
|
+
typeof payload.protocolVersion === "string"
|
|
2238
|
+
? payload.protocolVersion
|
|
2239
|
+
: ""
|
|
2240
|
+
|
|
2241
|
+
const protocolForInternalTag = (
|
|
2242
|
+
registry: McpProtocolRegistry.ProtocolRegistry<McpProtocol.ProtocolAdapter>,
|
|
2243
|
+
tag: string
|
|
2244
|
+
): McpProtocol.ProtocolAdapter => {
|
|
2245
|
+
for (const protocol of registry.protocols) {
|
|
2246
|
+
const routed = registry.routeClientRequest(protocol, {
|
|
2247
|
+
_tag: "Request",
|
|
2248
|
+
id: 0,
|
|
2249
|
+
tag: "",
|
|
2250
|
+
payload: undefined,
|
|
2251
|
+
headers: []
|
|
2252
|
+
})
|
|
2253
|
+
if (tag.startsWith(routed.tag)) {
|
|
2254
|
+
return protocol
|
|
2255
|
+
}
|
|
2256
|
+
}
|
|
2257
|
+
return registry.protocols[0]
|
|
2258
|
+
}
|
|
2259
|
+
|
|
2260
|
+
const getProtocolForClient = (
|
|
2261
|
+
clientProtocols: Map<number, McpProtocol.ProtocolAdapter>,
|
|
2262
|
+
clientId: number,
|
|
2263
|
+
registry: McpProtocolRegistry.ProtocolRegistry<McpProtocol.ProtocolAdapter>
|
|
2264
|
+
): McpProtocol.ProtocolAdapter =>
|
|
2265
|
+
clientProtocols.get(clientId) ??
|
|
2266
|
+
registry.protocols[0]
|