effect 4.0.7 → 4.1.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +1 -1
- package/dist/BigDecimal.d.ts.map +1 -1
- package/dist/BigDecimal.js +3 -0
- package/dist/BigDecimal.js.map +1 -1
- package/dist/Channel.d.ts +12 -6
- package/dist/Channel.d.ts.map +1 -1
- package/dist/Channel.js +9 -3
- package/dist/Channel.js.map +1 -1
- package/dist/Config.d.ts +7 -1
- package/dist/Config.d.ts.map +1 -1
- package/dist/Config.js.map +1 -1
- package/dist/Context.d.ts +18 -1
- package/dist/Context.d.ts.map +1 -1
- package/dist/Context.js +27 -8
- package/dist/Context.js.map +1 -1
- package/dist/Cron.d.ts +81 -11
- package/dist/Cron.d.ts.map +1 -1
- package/dist/Cron.js +101 -26
- package/dist/Cron.js.map +1 -1
- package/dist/Duration.d.ts +78 -0
- package/dist/Duration.d.ts.map +1 -1
- package/dist/Duration.js +123 -0
- package/dist/Duration.js.map +1 -1
- package/dist/Effect.d.ts +164 -7
- package/dist/Effect.d.ts.map +1 -1
- package/dist/Effect.js +11 -1
- package/dist/Effect.js.map +1 -1
- package/dist/FileSystem.d.ts +59 -4
- package/dist/FileSystem.d.ts.map +1 -1
- package/dist/FileSystem.js +9 -2
- package/dist/FileSystem.js.map +1 -1
- package/dist/Glob.d.ts +165 -0
- package/dist/Glob.d.ts.map +1 -0
- package/dist/Glob.js +127 -0
- package/dist/Glob.js.map +1 -0
- package/dist/Match.d.ts +86 -0
- package/dist/Match.d.ts.map +1 -1
- package/dist/Match.js +72 -0
- package/dist/Match.js.map +1 -1
- package/dist/Pool.d.ts +51 -0
- package/dist/Pool.d.ts.map +1 -1
- package/dist/Pool.js +59 -9
- package/dist/Pool.js.map +1 -1
- package/dist/Random.d.ts.map +1 -1
- package/dist/Random.js +3 -3
- package/dist/Random.js.map +1 -1
- package/dist/RcMap.d.ts.map +1 -1
- package/dist/RcMap.js +8 -2
- package/dist/RcMap.js.map +1 -1
- package/dist/Schedule.d.ts +18 -1
- package/dist/Schedule.d.ts.map +1 -1
- package/dist/Schedule.js +7 -2
- package/dist/Schedule.js.map +1 -1
- package/dist/Schema.d.ts +666 -41
- package/dist/Schema.d.ts.map +1 -1
- package/dist/Schema.js +650 -0
- package/dist/Schema.js.map +1 -1
- package/dist/SchemaGetter.d.ts +6 -1
- package/dist/SchemaGetter.d.ts.map +1 -1
- package/dist/SchemaGetter.js +22 -11
- package/dist/SchemaGetter.js.map +1 -1
- package/dist/SchemaRepresentation.d.ts +14 -0
- package/dist/SchemaRepresentation.d.ts.map +1 -1
- package/dist/SchemaRepresentation.js +16 -0
- package/dist/SchemaRepresentation.js.map +1 -1
- package/dist/SchemaTransformation.d.ts +8 -3
- package/dist/SchemaTransformation.d.ts.map +1 -1
- package/dist/SchemaTransformation.js +6 -3
- package/dist/SchemaTransformation.js.map +1 -1
- package/dist/ScopedCache.d.ts.map +1 -1
- package/dist/ScopedCache.js +5 -7
- package/dist/ScopedCache.js.map +1 -1
- package/dist/Semaphore.d.ts +130 -0
- package/dist/Semaphore.d.ts.map +1 -1
- package/dist/Semaphore.js +40 -0
- package/dist/Semaphore.js.map +1 -1
- package/dist/Stream.d.ts +13 -4
- package/dist/Stream.d.ts.map +1 -1
- package/dist/Stream.js +9 -0
- package/dist/Stream.js.map +1 -1
- package/dist/Terminal.d.ts +18 -1
- package/dist/Terminal.d.ts.map +1 -1
- package/dist/Terminal.js +1 -1
- package/dist/Terminal.js.map +1 -1
- package/dist/ai/AiError.d.ts +43 -116
- package/dist/ai/AiError.d.ts.map +1 -1
- package/dist/ai/AiError.js +53 -72
- package/dist/ai/AiError.js.map +1 -1
- package/dist/ai/Decision.d.ts +196 -15
- package/dist/ai/Decision.d.ts.map +1 -1
- package/dist/ai/Decision.js +130 -0
- package/dist/ai/Decision.js.map +1 -1
- package/dist/ai/DecisionModel.d.ts +54 -13
- package/dist/ai/DecisionModel.d.ts.map +1 -1
- package/dist/ai/DecisionModel.js +123 -12
- package/dist/ai/DecisionModel.js.map +1 -1
- package/dist/ai/McpServer.d.ts +630 -29
- package/dist/ai/McpServer.d.ts.map +1 -1
- package/dist/ai/McpServer.js +562 -116
- package/dist/ai/McpServer.js.map +1 -1
- package/dist/ai/McpTest.d.ts +130 -0
- package/dist/ai/McpTest.d.ts.map +1 -0
- package/dist/ai/McpTest.js +237 -0
- package/dist/ai/McpTest.js.map +1 -0
- package/dist/ai/Response.d.ts +1 -25
- package/dist/ai/Response.d.ts.map +1 -1
- package/dist/ai/Response.js +1 -10
- package/dist/ai/Response.js.map +1 -1
- package/dist/ai/Tool.d.ts +19 -1
- package/dist/ai/Tool.d.ts.map +1 -1
- package/dist/ai/Tool.js.map +1 -1
- package/dist/ai/index.d.ts +5 -0
- package/dist/ai/index.d.ts.map +1 -1
- package/dist/ai/index.js +5 -0
- package/dist/ai/index.js.map +1 -1
- package/dist/ai/internal/mcpCore.js +17 -12
- package/dist/ai/internal/mcpCore.js.map +1 -1
- package/dist/ai/internal/mcpProtocol/v2024_11_05.js +4 -5
- package/dist/ai/internal/mcpProtocol/v2024_11_05.js.map +1 -1
- package/dist/ai/internal/mcpProtocol/v2025_03_26.js +4 -5
- package/dist/ai/internal/mcpProtocol/v2025_03_26.js.map +1 -1
- package/dist/ai/internal/mcpProtocol/v2025_06_18.js +4 -5
- package/dist/ai/internal/mcpProtocol/v2025_06_18.js.map +1 -1
- package/dist/ai/internal/mcpProtocol/v2025_11_25.js +4 -5
- package/dist/ai/internal/mcpProtocol/v2025_11_25.js.map +1 -1
- package/dist/ai/internal/mcpProtocol/v2026_07_28.js +18 -10
- package/dist/ai/internal/mcpProtocol/v2026_07_28.js.map +1 -1
- package/dist/ai/internal/mcpProtocol.js +13 -0
- package/dist/ai/internal/mcpProtocol.js.map +1 -1
- package/dist/ai/internal/mcpRuntime.js +5 -3
- package/dist/ai/internal/mcpRuntime.js.map +1 -1
- package/dist/ai/internal/mcpStatefulRuntime.js +6 -1
- package/dist/ai/internal/mcpStatefulRuntime.js.map +1 -1
- package/dist/cli/Argument.d.ts +6 -0
- package/dist/cli/Argument.d.ts.map +1 -1
- package/dist/cli/Argument.js +2 -0
- package/dist/cli/Argument.js.map +1 -1
- package/dist/cli/CliOutput.d.ts +65 -1
- package/dist/cli/CliOutput.d.ts.map +1 -1
- package/dist/cli/CliOutput.js +94 -37
- package/dist/cli/CliOutput.js.map +1 -1
- package/dist/cli/Command.d.ts +23 -0
- package/dist/cli/Command.d.ts.map +1 -1
- package/dist/cli/Command.js +8 -0
- package/dist/cli/Command.js.map +1 -1
- package/dist/cli/Flag.d.ts +107 -0
- package/dist/cli/Flag.d.ts.map +1 -1
- package/dist/cli/Flag.js +37 -0
- package/dist/cli/Flag.js.map +1 -1
- package/dist/cli/HelpDoc.d.ts +15 -1
- package/dist/cli/HelpDoc.d.ts.map +1 -1
- package/dist/cli/Param.d.ts +6 -0
- package/dist/cli/Param.d.ts.map +1 -1
- package/dist/cli/Param.js +2 -0
- package/dist/cli/Param.js.map +1 -1
- package/dist/cli/Primitive.d.ts +14 -0
- package/dist/cli/Primitive.d.ts.map +1 -1
- package/dist/cli/Primitive.js +15 -1
- package/dist/cli/Primitive.js.map +1 -1
- package/dist/cli/Prompt.d.ts +1 -0
- package/dist/cli/Prompt.d.ts.map +1 -1
- package/dist/cli/Prompt.js +1 -0
- package/dist/cli/Prompt.js.map +1 -1
- package/dist/cli/internal/help.d.ts.map +1 -1
- package/dist/cli/internal/help.js +17 -10
- package/dist/cli/internal/help.js.map +1 -1
- package/dist/cluster/Sharding.d.ts.map +1 -1
- package/dist/cluster/Sharding.js +90 -28
- package/dist/cluster/Sharding.js.map +1 -1
- package/dist/cluster/ShardingConfig.d.ts +72 -6
- package/dist/cluster/ShardingConfig.d.ts.map +1 -1
- package/dist/cluster/ShardingConfig.js +4 -0
- package/dist/cluster/ShardingConfig.js.map +1 -1
- package/dist/cluster/SingleRunner.d.ts +3 -3
- package/dist/cluster/SingleRunner.d.ts.map +1 -1
- package/dist/cluster/SingleRunner.js +1 -1
- package/dist/cluster/SqlMessageStorage.d.ts +37 -6
- package/dist/cluster/SqlMessageStorage.d.ts.map +1 -1
- package/dist/cluster/SqlMessageStorage.js +34 -7
- package/dist/cluster/SqlMessageStorage.js.map +1 -1
- package/dist/cluster/SqlRunnerStorage.d.ts.map +1 -1
- package/dist/cluster/SqlRunnerStorage.js +23 -8
- package/dist/cluster/SqlRunnerStorage.js.map +1 -1
- package/dist/crypto/Aead.d.ts +322 -0
- package/dist/crypto/Aead.d.ts.map +1 -0
- package/dist/crypto/Aead.js +331 -0
- package/dist/crypto/Aead.js.map +1 -0
- package/dist/crypto/Cipher.d.ts +235 -0
- package/dist/crypto/Cipher.d.ts.map +1 -0
- package/dist/crypto/Cipher.js +233 -0
- package/dist/crypto/Cipher.js.map +1 -0
- package/dist/crypto/CryptoError.d.ts +212 -0
- package/dist/crypto/CryptoError.d.ts.map +1 -0
- package/dist/crypto/CryptoError.js +202 -0
- package/dist/crypto/CryptoError.js.map +1 -0
- package/dist/crypto/Digest.d.ts +143 -0
- package/dist/crypto/Digest.d.ts.map +1 -0
- package/dist/crypto/Digest.js +146 -0
- package/dist/crypto/Digest.js.map +1 -0
- package/dist/crypto/Kdf.d.ts +220 -0
- package/dist/crypto/Kdf.d.ts.map +1 -0
- package/dist/crypto/Kdf.js +212 -0
- package/dist/crypto/Kdf.js.map +1 -0
- package/dist/crypto/KeyAgreement.d.ts +323 -0
- package/dist/crypto/KeyAgreement.d.ts.map +1 -0
- package/dist/crypto/KeyAgreement.js +303 -0
- package/dist/crypto/KeyAgreement.js.map +1 -0
- package/dist/crypto/KeyFormat.d.ts +309 -0
- package/dist/crypto/KeyFormat.d.ts.map +1 -0
- package/dist/crypto/KeyFormat.js +556 -0
- package/dist/crypto/KeyFormat.js.map +1 -0
- package/dist/crypto/KeyWrap.d.ts +389 -0
- package/dist/crypto/KeyWrap.d.ts.map +1 -0
- package/dist/crypto/KeyWrap.js +381 -0
- package/dist/crypto/KeyWrap.js.map +1 -0
- package/dist/crypto/Mac.d.ts +277 -0
- package/dist/crypto/Mac.d.ts.map +1 -0
- package/dist/crypto/Mac.js +288 -0
- package/dist/crypto/Mac.js.map +1 -0
- package/dist/crypto/SecureRandom.d.ts +340 -0
- package/dist/crypto/SecureRandom.d.ts.map +1 -0
- package/dist/crypto/SecureRandom.js +257 -0
- package/dist/crypto/SecureRandom.js.map +1 -0
- package/dist/crypto/Signature.d.ts +448 -0
- package/dist/crypto/Signature.d.ts.map +1 -0
- package/dist/crypto/Signature.js +484 -0
- package/dist/crypto/Signature.js.map +1 -0
- package/dist/crypto/WebCrypto.d.ts +61 -0
- package/dist/crypto/WebCrypto.d.ts.map +1 -0
- package/dist/crypto/WebCrypto.js +63 -0
- package/dist/crypto/WebCrypto.js.map +1 -0
- package/dist/crypto/index.d.ts +65 -0
- package/dist/crypto/index.d.ts.map +1 -0
- package/dist/crypto/index.js +66 -0
- package/dist/crypto/index.js.map +1 -0
- package/dist/crypto/internal/asymmetric.d.ts +2 -0
- package/dist/crypto/internal/asymmetric.d.ts.map +1 -0
- package/dist/crypto/internal/asymmetric.js +210 -0
- package/dist/crypto/internal/asymmetric.js.map +1 -0
- package/dist/crypto/internal/chacha.d.ts +46 -0
- package/dist/crypto/internal/chacha.d.ts.map +1 -0
- package/dist/crypto/internal/chacha.js +885 -0
- package/dist/crypto/internal/chacha.js.map +1 -0
- package/dist/crypto/internal/der.d.ts +6 -0
- package/dist/crypto/internal/der.d.ts.map +1 -0
- package/dist/crypto/internal/der.js +86 -0
- package/dist/crypto/internal/der.js.map +1 -0
- package/dist/crypto/internal/digest.d.ts +2 -0
- package/dist/crypto/internal/digest.d.ts.map +1 -0
- package/dist/crypto/internal/digest.js +15 -0
- package/dist/crypto/internal/digest.js.map +1 -0
- package/dist/crypto/internal/key.d.ts +2 -0
- package/dist/crypto/internal/key.d.ts.map +1 -0
- package/dist/crypto/internal/key.js +170 -0
- package/dist/crypto/internal/key.js.map +1 -0
- package/dist/crypto/internal/md5.d.ts +39 -0
- package/dist/crypto/internal/md5.d.ts.map +1 -0
- package/dist/crypto/internal/md5.js +179 -0
- package/dist/crypto/internal/md5.js.map +1 -0
- package/dist/crypto/internal/webCrypto.d.ts +2 -0
- package/dist/crypto/internal/webCrypto.d.ts.map +1 -0
- package/dist/crypto/internal/webCrypto.js +111 -0
- package/dist/crypto/internal/webCrypto.js.map +1 -0
- package/dist/encoding/Base64Url.d.ts.map +1 -1
- package/dist/encoding/Base64Url.js +3 -2
- package/dist/encoding/Base64Url.js.map +1 -1
- package/dist/encoding/Csv.d.ts +608 -0
- package/dist/encoding/Csv.d.ts.map +1 -0
- package/dist/encoding/Csv.js +718 -0
- package/dist/encoding/Csv.js.map +1 -0
- package/dist/encoding/Hex.d.ts +3 -2
- package/dist/encoding/Hex.d.ts.map +1 -1
- package/dist/encoding/Hex.js +3 -2
- package/dist/encoding/Hex.js.map +1 -1
- package/dist/encoding/SchemaBinary.d.ts.map +1 -1
- package/dist/encoding/SchemaBinary.js +42 -4
- package/dist/encoding/SchemaBinary.js.map +1 -1
- package/dist/encoding/Toml.d.ts +17 -3
- package/dist/encoding/Toml.d.ts.map +1 -1
- package/dist/encoding/Toml.js +104 -16
- package/dist/encoding/Toml.js.map +1 -1
- package/dist/encoding/Yaml.d.ts +8 -1
- package/dist/encoding/Yaml.d.ts.map +1 -1
- package/dist/encoding/Yaml.js +54 -18
- package/dist/encoding/Yaml.js.map +1 -1
- package/dist/encoding/index.d.ts +5 -0
- package/dist/encoding/index.d.ts.map +1 -1
- package/dist/encoding/index.js +5 -0
- package/dist/encoding/index.js.map +1 -1
- package/dist/eventlog/EventJournal.d.ts.map +1 -1
- package/dist/eventlog/EventJournal.js +6 -3
- package/dist/eventlog/EventJournal.js.map +1 -1
- package/dist/eventlog/EventLog.d.ts +119 -4
- package/dist/eventlog/EventLog.d.ts.map +1 -1
- package/dist/eventlog/EventLog.js +200 -12
- package/dist/eventlog/EventLog.js.map +1 -1
- package/dist/eventlog/EventLogEncryption.d.ts +41 -4
- package/dist/eventlog/EventLogEncryption.d.ts.map +1 -1
- package/dist/eventlog/EventLogEncryption.js +83 -64
- package/dist/eventlog/EventLogEncryption.js.map +1 -1
- package/dist/eventlog/EventLogMessage.d.ts +279 -0
- package/dist/eventlog/EventLogMessage.d.ts.map +1 -1
- package/dist/eventlog/EventLogMessage.js +217 -1
- package/dist/eventlog/EventLogMessage.js.map +1 -1
- package/dist/eventlog/EventLogRemote.d.ts +200 -28
- package/dist/eventlog/EventLogRemote.d.ts.map +1 -1
- package/dist/eventlog/EventLogRemote.js +186 -16
- package/dist/eventlog/EventLogRemote.js.map +1 -1
- package/dist/eventlog/EventLogServer.d.ts +3 -0
- package/dist/eventlog/EventLogServer.d.ts.map +1 -1
- package/dist/eventlog/EventLogServer.js +18 -10
- package/dist/eventlog/EventLogServer.js.map +1 -1
- package/dist/eventlog/EventLogServerEncrypted.d.ts +326 -5
- package/dist/eventlog/EventLogServerEncrypted.d.ts.map +1 -1
- package/dist/eventlog/EventLogServerEncrypted.js +769 -14
- package/dist/eventlog/EventLogServerEncrypted.js.map +1 -1
- package/dist/eventlog/EventLogSessionAuth.d.ts +5 -3
- package/dist/eventlog/EventLogSessionAuth.d.ts.map +1 -1
- package/dist/eventlog/EventLogSessionAuth.js +41 -64
- package/dist/eventlog/EventLogSessionAuth.js.map +1 -1
- package/dist/eventlog/EventRow.d.ts +4 -0
- package/dist/eventlog/EventRow.d.ts.map +1 -1
- package/dist/eventlog/EventRow.js +12 -2
- package/dist/eventlog/EventRow.js.map +1 -1
- package/dist/eventlog/SqlEventJournal.js +2 -2
- package/dist/eventlog/SqlEventJournal.js.map +1 -1
- package/dist/eventlog/SqlEventLogServerEncrypted.d.ts +21 -5
- package/dist/eventlog/SqlEventLogServerEncrypted.d.ts.map +1 -1
- package/dist/eventlog/SqlEventLogServerEncrypted.js +1048 -113
- package/dist/eventlog/SqlEventLogServerEncrypted.js.map +1 -1
- package/dist/eventlog/SqlEventLogServerUnencrypted.js +2 -2
- package/dist/eventlog/SqlEventLogServerUnencrypted.js.map +1 -1
- package/dist/eventlog/internal/batches.d.ts +12 -0
- package/dist/eventlog/internal/batches.d.ts.map +1 -0
- package/dist/eventlog/internal/batches.js +26 -0
- package/dist/eventlog/internal/batches.js.map +1 -0
- package/dist/eventlog/internal/compaction.d.ts +38 -0
- package/dist/eventlog/internal/compaction.d.ts.map +1 -0
- package/dist/eventlog/internal/compaction.js +33 -0
- package/dist/eventlog/internal/compaction.js.map +1 -0
- package/dist/eventlog/internal/identityRootSecretDerivation.js +66 -67
- package/dist/eventlog/internal/identityRootSecretDerivation.js.map +1 -1
- package/dist/eventlog/internal/remoteCompaction.d.ts +31 -0
- package/dist/eventlog/internal/remoteCompaction.d.ts.map +1 -0
- package/dist/eventlog/internal/remoteCompaction.js +76 -0
- package/dist/eventlog/internal/remoteCompaction.js.map +1 -0
- package/dist/http/Cookies.d.ts +172 -0
- package/dist/http/Cookies.d.ts.map +1 -1
- package/dist/http/Cookies.js +143 -1
- package/dist/http/Cookies.js.map +1 -1
- package/dist/http/FetchHttpClient.d.ts +26 -2
- package/dist/http/FetchHttpClient.d.ts.map +1 -1
- package/dist/http/FetchHttpClient.js +78 -15
- package/dist/http/FetchHttpClient.js.map +1 -1
- package/dist/http/HttpClient.d.ts +79 -8
- package/dist/http/HttpClient.d.ts.map +1 -1
- package/dist/http/HttpClient.js +65 -5
- package/dist/http/HttpClient.js.map +1 -1
- package/dist/http/HttpClientRequest.d.ts +9 -5
- package/dist/http/HttpClientRequest.d.ts.map +1 -1
- package/dist/http/HttpClientRequest.js +2 -3
- package/dist/http/HttpClientRequest.js.map +1 -1
- package/dist/http/HttpClientResponse.d.ts.map +1 -1
- package/dist/http/HttpClientResponse.js +3 -2
- package/dist/http/HttpClientResponse.js.map +1 -1
- package/dist/http/HttpMethod.d.ts +7 -1
- package/dist/http/HttpMethod.d.ts.map +1 -1
- package/dist/http/HttpMethod.js +3 -8
- package/dist/http/HttpMethod.js.map +1 -1
- package/dist/http/HttpServerRequest.d.ts +5 -2
- package/dist/http/HttpServerRequest.d.ts.map +1 -1
- package/dist/http/HttpServerRequest.js +6 -17
- package/dist/http/HttpServerRequest.js.map +1 -1
- package/dist/http/HttpServerResponse.d.ts.map +1 -1
- package/dist/http/HttpServerResponse.js +3 -2
- package/dist/http/HttpServerResponse.js.map +1 -1
- package/dist/http/HttpTraceContext.d.ts +2 -1
- package/dist/http/HttpTraceContext.d.ts.map +1 -1
- package/dist/http/HttpTraceContext.js +7 -5
- package/dist/http/HttpTraceContext.js.map +1 -1
- package/dist/http/ProblemDetails.d.ts +96 -0
- package/dist/http/ProblemDetails.d.ts.map +1 -0
- package/dist/http/ProblemDetails.js +98 -0
- package/dist/http/ProblemDetails.js.map +1 -0
- package/dist/http/index.d.ts +5 -0
- package/dist/http/index.d.ts.map +1 -1
- package/dist/http/index.js +5 -0
- package/dist/http/index.js.map +1 -1
- package/dist/http/internal/decompression.js +3 -2
- package/dist/http/internal/decompression.js.map +1 -1
- package/dist/http/internal/urlParams.js +8 -0
- package/dist/http/internal/urlParams.js.map +1 -1
- package/dist/http-api/HttpApiBuilder.js +19 -5
- package/dist/http-api/HttpApiBuilder.js.map +1 -1
- package/dist/http-api/HttpApiClient.d.ts +63 -0
- package/dist/http-api/HttpApiClient.d.ts.map +1 -1
- package/dist/http-api/HttpApiClient.js +51 -0
- package/dist/http-api/HttpApiClient.js.map +1 -1
- package/dist/http-api/HttpApiEndpoint.d.ts.map +1 -1
- package/dist/http-api/HttpApiEndpoint.js +14 -5
- package/dist/http-api/HttpApiEndpoint.js.map +1 -1
- package/dist/http-api/HttpApiError.d.ts +185 -13
- package/dist/http-api/HttpApiError.d.ts.map +1 -1
- package/dist/http-api/HttpApiError.js +128 -0
- package/dist/http-api/HttpApiError.js.map +1 -1
- package/dist/http-api/HttpApiMiddleware.d.ts +64 -17
- package/dist/http-api/HttpApiMiddleware.d.ts.map +1 -1
- package/dist/http-api/HttpApiMiddleware.js +85 -1
- package/dist/http-api/HttpApiMiddleware.js.map +1 -1
- package/dist/http-api/HttpApiSchema.d.ts +76 -14
- package/dist/http-api/HttpApiSchema.d.ts.map +1 -1
- package/dist/http-api/HttpApiSchema.js +53 -0
- package/dist/http-api/HttpApiSchema.js.map +1 -1
- package/dist/index.d.ts +5 -5
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +5 -5
- package/dist/index.js.map +1 -1
- package/dist/internal/effect.js +25 -14
- package/dist/internal/effect.js.map +1 -1
- package/dist/internal/glob.d.ts +2 -0
- package/dist/internal/glob.d.ts.map +1 -0
- package/dist/internal/glob.js +630 -0
- package/dist/internal/glob.js.map +1 -0
- package/dist/internal/matcher.js +10 -0
- package/dist/internal/matcher.js.map +1 -1
- package/dist/internal/persistence.js +9 -0
- package/dist/internal/persistence.js.map +1 -1
- package/dist/internal/rcRef.js +4 -1
- package/dist/internal/rcRef.js.map +1 -1
- package/dist/internal/schema/toCodeDocument.js +6 -3
- package/dist/internal/schema/toCodeDocument.js.map +1 -1
- package/dist/internal/trie.js +42 -13
- package/dist/internal/trie.js.map +1 -1
- package/dist/internal/ulid.js +41 -0
- package/dist/internal/ulid.js.map +1 -1
- package/dist/internal/uuid.js +52 -8
- package/dist/internal/uuid.js.map +1 -1
- package/dist/internal/version.js +1 -1
- package/dist/observability/Otlp.d.ts +15 -4
- package/dist/observability/Otlp.d.ts.map +1 -1
- package/dist/observability/Otlp.js +10 -0
- package/dist/observability/Otlp.js.map +1 -1
- package/dist/observability/OtlpResource.d.ts +7 -0
- package/dist/observability/OtlpResource.d.ts.map +1 -1
- package/dist/observability/OtlpResource.js +11 -1
- package/dist/observability/OtlpResource.js.map +1 -1
- package/dist/persistence/KeyValueStore.d.ts +47 -2
- package/dist/persistence/KeyValueStore.d.ts.map +1 -1
- package/dist/persistence/KeyValueStore.js +129 -18
- package/dist/persistence/KeyValueStore.js.map +1 -1
- package/dist/persistence/PersistedQueue.d.ts +9 -0
- package/dist/persistence/PersistedQueue.d.ts.map +1 -1
- package/dist/persistence/PersistedQueue.js +94 -52
- package/dist/persistence/PersistedQueue.js.map +1 -1
- package/dist/persistence/Persistence.d.ts +10 -4
- package/dist/persistence/Persistence.d.ts.map +1 -1
- package/dist/persistence/Persistence.js +18 -11
- package/dist/persistence/Persistence.js.map +1 -1
- package/dist/process/ChildProcess.d.ts +207 -67
- package/dist/process/ChildProcess.d.ts.map +1 -1
- package/dist/process/ChildProcess.js +56 -158
- package/dist/process/ChildProcess.js.map +1 -1
- package/dist/process/ChildProcessSpawner.d.ts +5 -0
- package/dist/process/ChildProcessSpawner.d.ts.map +1 -1
- package/dist/process/ChildProcessSpawner.js.map +1 -1
- package/dist/process/CommandLine.d.ts +294 -0
- package/dist/process/CommandLine.d.ts.map +1 -0
- package/dist/process/CommandLine.js +481 -0
- package/dist/process/CommandLine.js.map +1 -0
- package/dist/process/index.d.ts +5 -0
- package/dist/process/index.d.ts.map +1 -1
- package/dist/process/index.js +5 -0
- package/dist/process/index.js.map +1 -1
- package/dist/reactivity/Atom.d.ts +2 -1
- package/dist/reactivity/Atom.d.ts.map +1 -1
- package/dist/reactivity/Atom.js +3 -4
- package/dist/reactivity/Atom.js.map +1 -1
- package/dist/reactivity/AtomRegistry.js.map +1 -1
- package/dist/rpc/RpcClient.d.ts +16 -1
- package/dist/rpc/RpcClient.d.ts.map +1 -1
- package/dist/rpc/RpcClient.js +50 -16
- package/dist/rpc/RpcClient.js.map +1 -1
- package/dist/rpc/RpcMessage.d.ts +10 -1
- package/dist/rpc/RpcMessage.d.ts.map +1 -1
- package/dist/rpc/RpcMessage.js +1 -0
- package/dist/rpc/RpcMessage.js.map +1 -1
- package/dist/rpc/RpcSerialization.d.ts.map +1 -1
- package/dist/rpc/RpcSerialization.js +6 -0
- package/dist/rpc/RpcSerialization.js.map +1 -1
- package/dist/rpc/RpcServer.d.ts +31 -0
- package/dist/rpc/RpcServer.d.ts.map +1 -1
- package/dist/rpc/RpcServer.js +139 -66
- package/dist/rpc/RpcServer.js.map +1 -1
- package/dist/schema/Model.d.ts +14 -0
- package/dist/schema/Model.d.ts.map +1 -1
- package/dist/schema/Model.js +18 -3
- package/dist/schema/Model.js.map +1 -1
- package/dist/sql/Migrator.d.ts +0 -19
- package/dist/sql/Migrator.d.ts.map +1 -1
- package/dist/sql/Migrator.js +3 -48
- package/dist/sql/Migrator.js.map +1 -1
- package/dist/sql/MigratorFileSystem.d.ts +21 -0
- package/dist/sql/MigratorFileSystem.d.ts.map +1 -0
- package/dist/sql/MigratorFileSystem.js +57 -0
- package/dist/sql/MigratorFileSystem.js.map +1 -0
- package/dist/sql/SqlClient.d.ts.map +1 -1
- package/dist/sql/SqlClient.js +5 -9
- package/dist/sql/SqlClient.js.map +1 -1
- package/dist/sql/Statement.d.ts +20 -6
- package/dist/sql/Statement.d.ts.map +1 -1
- package/dist/sql/Statement.js +0 -13
- package/dist/sql/Statement.js.map +1 -1
- package/dist/sql/index.js +1 -1
- package/dist/testing/index.d.ts +0 -5
- package/dist/testing/index.d.ts.map +1 -1
- package/dist/testing/index.js +0 -5
- package/dist/testing/index.js.map +1 -1
- package/dist/workflow/internal/crypto.js +9 -8
- package/dist/workflow/internal/crypto.js.map +1 -1
- package/package.json +3 -1
- package/src/BigDecimal.ts +3 -0
- package/src/Channel.ts +17 -11
- package/src/Config.ts +7 -1
- package/src/Context.ts +34 -10
- package/src/Cron.ts +178 -29
- package/src/Duration.ts +140 -0
- package/src/Effect.ts +914 -85
- package/src/FileSystem.ts +65 -4
- package/src/Glob.ts +205 -0
- package/src/Match.ts +127 -0
- package/src/Pool.ts +73 -15
- package/src/Random.ts +3 -3
- package/src/RcMap.ts +5 -1
- package/src/Schedule.ts +26 -3
- package/src/Schema.ts +1189 -62
- package/src/SchemaGetter.ts +27 -11
- package/src/SchemaRepresentation.ts +19 -0
- package/src/SchemaTransformation.ts +8 -3
- package/src/ScopedCache.ts +5 -9
- package/src/Semaphore.ts +141 -0
- package/src/Stream.ts +15 -6
- package/src/Terminal.ts +19 -1
- package/src/ai/AiError.ts +56 -80
- package/src/ai/Decision.ts +257 -6
- package/src/ai/DecisionModel.ts +171 -28
- package/src/ai/McpServer.ts +1269 -286
- package/src/ai/McpTest.ts +380 -0
- package/src/ai/Response.ts +2 -22
- package/src/ai/Tool.ts +27 -8
- package/src/ai/index.ts +6 -0
- package/src/ai/internal/mcpCore.ts +78 -44
- package/src/ai/internal/mcpProtocol/v2024_11_05.ts +4 -7
- package/src/ai/internal/mcpProtocol/v2025_03_26.ts +4 -7
- package/src/ai/internal/mcpProtocol/v2025_06_18.ts +4 -7
- package/src/ai/internal/mcpProtocol/v2025_11_25.ts +4 -7
- package/src/ai/internal/mcpProtocol/v2026_07_28.ts +15 -10
- package/src/ai/internal/mcpProtocol.ts +29 -0
- package/src/ai/internal/mcpRuntime.ts +9 -5
- package/src/ai/internal/mcpStatefulRuntime.ts +14 -2
- package/src/cli/Argument.ts +6 -0
- package/src/cli/CliOutput.ts +117 -49
- package/src/cli/Command.ts +23 -0
- package/src/cli/Flag.ts +107 -0
- package/src/cli/HelpDoc.ts +18 -1
- package/src/cli/Param.ts +6 -0
- package/src/cli/Primitive.ts +16 -1
- package/src/cli/Prompt.ts +1 -0
- package/src/cli/internal/help.ts +21 -9
- package/src/cluster/Sharding.ts +93 -26
- package/src/cluster/ShardingConfig.ts +41 -3
- package/src/cluster/SingleRunner.ts +3 -3
- package/src/cluster/SqlMessageStorage.ts +49 -17
- package/src/cluster/SqlRunnerStorage.ts +37 -27
- package/src/crypto/Aead.ts +517 -0
- package/src/crypto/Cipher.ts +326 -0
- package/src/crypto/CryptoError.ts +242 -0
- package/src/crypto/Digest.ts +167 -0
- package/src/crypto/Kdf.ts +315 -0
- package/src/crypto/KeyAgreement.ts +489 -0
- package/src/crypto/KeyFormat.ts +712 -0
- package/src/crypto/KeyWrap.ts +639 -0
- package/src/crypto/Mac.ts +386 -0
- package/src/crypto/SecureRandom.ts +459 -0
- package/src/crypto/Signature.ts +673 -0
- package/src/crypto/WebCrypto.ts +64 -0
- package/src/crypto/index.ts +78 -0
- package/src/crypto/internal/asymmetric.ts +329 -0
- package/src/crypto/internal/chacha.ts +1088 -0
- package/src/crypto/internal/der.ts +110 -0
- package/src/crypto/internal/digest.ts +16 -0
- package/src/crypto/internal/key.ts +235 -0
- package/src/crypto/internal/md5.ts +170 -0
- package/src/crypto/internal/webCrypto.ts +150 -0
- package/src/encoding/Base64Url.ts +5 -2
- package/src/encoding/Csv.ts +1298 -0
- package/src/encoding/Hex.ts +3 -2
- package/src/encoding/SchemaBinary.ts +40 -4
- package/src/encoding/Toml.ts +85 -20
- package/src/encoding/Yaml.ts +61 -18
- package/src/encoding/index.ts +6 -0
- package/src/eventlog/EventJournal.ts +4 -3
- package/src/eventlog/EventLog.ts +340 -15
- package/src/eventlog/EventLogEncryption.ts +118 -110
- package/src/eventlog/EventLogMessage.ts +273 -1
- package/src/eventlog/EventLogRemote.ts +367 -23
- package/src/eventlog/EventLogServer.ts +23 -8
- package/src/eventlog/EventLogServerEncrypted.ts +1130 -67
- package/src/eventlog/EventLogSessionAuth.ts +56 -70
- package/src/eventlog/EventRow.ts +12 -3
- package/src/eventlog/SqlEventJournal.ts +2 -2
- package/src/eventlog/SqlEventLogServerEncrypted.ts +1244 -136
- package/src/eventlog/SqlEventLogServerUnencrypted.ts +2 -2
- package/src/eventlog/internal/batches.ts +30 -0
- package/src/eventlog/internal/compaction.ts +64 -0
- package/src/eventlog/internal/identityRootSecretDerivation.ts +93 -123
- package/src/eventlog/internal/remoteCompaction.ts +92 -0
- package/src/http/Cookies.ts +281 -1
- package/src/http/FetchHttpClient.ts +88 -16
- package/src/http/HttpClient.ts +89 -22
- package/src/http/HttpClientRequest.ts +12 -9
- package/src/http/HttpClientResponse.ts +3 -2
- package/src/http/HttpMethod.ts +10 -2
- package/src/http/HttpServerRequest.ts +15 -30
- package/src/http/HttpServerResponse.ts +3 -2
- package/src/http/HttpTraceContext.ts +7 -4
- package/src/http/ProblemDetails.ts +149 -0
- package/src/http/index.ts +6 -0
- package/src/http/internal/decompression.ts +4 -4
- package/src/http/internal/urlParams.ts +8 -0
- package/src/http-api/HttpApiBuilder.ts +24 -12
- package/src/http-api/HttpApiClient.ts +67 -1
- package/src/http-api/HttpApiEndpoint.ts +14 -5
- package/src/http-api/HttpApiError.ts +250 -0
- package/src/http-api/HttpApiMiddleware.ts +95 -1
- package/src/http-api/HttpApiSchema.ts +105 -14
- package/src/index.ts +6 -6
- package/src/internal/effect.ts +34 -18
- package/src/internal/glob.ts +736 -0
- package/src/internal/matcher.ts +17 -0
- package/src/internal/persistence.ts +11 -0
- package/src/internal/rcRef.ts +4 -1
- package/src/internal/schema/toCodeDocument.ts +7 -3
- package/src/internal/trie.ts +43 -14
- package/src/internal/ulid.ts +44 -0
- package/src/internal/uuid.ts +57 -16
- package/src/internal/version.ts +1 -1
- package/src/observability/Otlp.ts +21 -4
- package/src/observability/OtlpResource.ts +9 -1
- package/src/persistence/KeyValueStore.ts +219 -22
- package/src/persistence/PersistedQueue.ts +128 -59
- package/src/persistence/Persistence.ts +20 -13
- package/src/process/ChildProcess.ts +255 -260
- package/src/process/ChildProcessSpawner.ts +5 -0
- package/src/process/CommandLine.ts +630 -0
- package/src/process/index.ts +6 -0
- package/src/reactivity/Atom.ts +5 -5
- package/src/reactivity/AtomRegistry.ts +1 -1
- package/src/rpc/RpcClient.ts +62 -26
- package/src/rpc/RpcMessage.ts +10 -1
- package/src/rpc/RpcSerialization.ts +3 -0
- package/src/rpc/RpcServer.ts +176 -78
- package/src/schema/Model.ts +26 -3
- package/src/sql/Migrator.ts +4 -63
- package/src/sql/MigratorFileSystem.ts +71 -0
- package/src/sql/SqlClient.ts +2 -16
- package/src/sql/Statement.ts +8 -7
- package/src/sql/index.ts +1 -1
- package/src/testing/index.ts +0 -6
- package/src/workflow/internal/crypto.ts +15 -11
- package/dist/Crypto.d.ts +0 -244
- package/dist/Crypto.d.ts.map +0 -1
- package/dist/Crypto.js +0 -139
- package/dist/Crypto.js.map +0 -1
- package/dist/testing/TestCrypto.d.ts +0 -73
- package/dist/testing/TestCrypto.d.ts.map +0 -1
- package/dist/testing/TestCrypto.js +0 -87
- package/dist/testing/TestCrypto.js.map +0 -1
- package/src/Crypto.ts +0 -347
- package/src/testing/TestCrypto.ts +0 -94
|
@@ -149,6 +149,20 @@ export class UnsupportedByProtocol extends Data.TaggedError("UnsupportedByProtoc
|
|
|
149
149
|
readonly feature: string
|
|
150
150
|
}> {}
|
|
151
151
|
|
|
152
|
+
/**
|
|
153
|
+
* A request rejected outside the handler, for example by MCP middleware.
|
|
154
|
+
* Adapters send it as a JSON-RPC error with its code, message and data, never
|
|
155
|
+
* as a tool result. `error` keeps the original failure for in-process callers.
|
|
156
|
+
*
|
|
157
|
+
* @internal
|
|
158
|
+
*/
|
|
159
|
+
export class RequestRejected extends Data.TaggedError("RequestRejected")<{
|
|
160
|
+
readonly code: number
|
|
161
|
+
readonly message: string
|
|
162
|
+
readonly data?: unknown
|
|
163
|
+
readonly error: McpSchema.McpErrorBase
|
|
164
|
+
}> {}
|
|
165
|
+
|
|
152
166
|
/**
|
|
153
167
|
* @internal
|
|
154
168
|
*/
|
|
@@ -157,6 +171,7 @@ export type ToolError =
|
|
|
157
171
|
| InvalidToolInput
|
|
158
172
|
| InvalidToolContinuation
|
|
159
173
|
| ToolExecutionError
|
|
174
|
+
| RequestRejected
|
|
160
175
|
|
|
161
176
|
/**
|
|
162
177
|
* @internal
|
|
@@ -166,12 +181,13 @@ export interface ToolRegistration {
|
|
|
166
181
|
// `tool.title ?? tool.annotations?.title` at the public boundary.
|
|
167
182
|
readonly descriptor: McpSchema.Tool
|
|
168
183
|
readonly isVisible: (profile: NegotiatedProtocolProfile<string>) => boolean
|
|
184
|
+
readonly visible?: Visible | undefined
|
|
169
185
|
readonly handle: (
|
|
170
186
|
call: typeof McpSchema.CallTool.payloadSchema.Type,
|
|
171
187
|
invocation: McpInvocation
|
|
172
188
|
) => Effect.Effect<
|
|
173
189
|
OperationOutcome<McpSchema.CallToolResult>,
|
|
174
|
-
InvalidToolInput | InvalidToolContinuation | ToolExecutionError,
|
|
190
|
+
ToolNotFound | InvalidToolInput | InvalidToolContinuation | ToolExecutionError | RequestRejected,
|
|
175
191
|
never
|
|
176
192
|
>
|
|
177
193
|
}
|
|
@@ -184,8 +200,13 @@ export interface Tools {
|
|
|
184
200
|
registration: ToolRegistration
|
|
185
201
|
) => Effect.Effect<void>
|
|
186
202
|
readonly list: (
|
|
203
|
+
invocation: McpInvocation
|
|
204
|
+
) => Effect.Effect<ReadonlyArray<McpSchema.Tool>, RequestRejected>
|
|
205
|
+
// Skips request-level visibility checks.
|
|
206
|
+
readonly find: (
|
|
207
|
+
name: string,
|
|
187
208
|
profile: NegotiatedProtocolProfile<string>
|
|
188
|
-
) =>
|
|
209
|
+
) => McpSchema.Tool | undefined
|
|
189
210
|
readonly call: (
|
|
190
211
|
call: typeof McpSchema.CallTool.payloadSchema.Type,
|
|
191
212
|
invocation: McpInvocation
|
|
@@ -198,9 +219,10 @@ export interface Tools {
|
|
|
198
219
|
export interface ResourceRegistration {
|
|
199
220
|
readonly descriptor: McpSchema.Resource
|
|
200
221
|
readonly isVisible: (profile: NegotiatedProtocolProfile<string>) => boolean
|
|
222
|
+
readonly visible?: Visible | undefined
|
|
201
223
|
readonly read: (
|
|
202
224
|
invocation: McpInvocation
|
|
203
|
-
) => Effect.Effect<McpSchema.ReadResourceResult, McpSchema.InternalError>
|
|
225
|
+
) => Effect.Effect<McpSchema.ReadResourceResult, ResourceNotFound | McpSchema.InternalError | RequestRejected>
|
|
204
226
|
}
|
|
205
227
|
|
|
206
228
|
/**
|
|
@@ -209,12 +231,16 @@ export interface ResourceRegistration {
|
|
|
209
231
|
export interface ResourceTemplateRegistration {
|
|
210
232
|
readonly descriptor: McpSchema.ResourceTemplate
|
|
211
233
|
readonly isVisible: (profile: NegotiatedProtocolProfile<string>) => boolean
|
|
234
|
+
readonly visible?: Visible | undefined
|
|
212
235
|
readonly match: (uri: string) => ReadonlyArray<string> | undefined
|
|
213
236
|
readonly read: (
|
|
214
237
|
uri: string,
|
|
215
238
|
params: ReadonlyArray<string>,
|
|
216
239
|
invocation: McpInvocation
|
|
217
|
-
) => Effect.Effect<
|
|
240
|
+
) => Effect.Effect<
|
|
241
|
+
McpSchema.ReadResourceResult,
|
|
242
|
+
ResourceNotFound | McpSchema.InvalidParams | McpSchema.InternalError | RequestRejected
|
|
243
|
+
>
|
|
218
244
|
}
|
|
219
245
|
|
|
220
246
|
/**
|
|
@@ -224,17 +250,17 @@ export interface Resources {
|
|
|
224
250
|
readonly register: (registration: ResourceRegistration) => Effect.Effect<void>
|
|
225
251
|
readonly registerTemplate: (registration: ResourceTemplateRegistration) => Effect.Effect<void>
|
|
226
252
|
readonly list: (
|
|
227
|
-
|
|
228
|
-
) => Effect.Effect<ReadonlyArray<McpSchema.Resource
|
|
253
|
+
invocation: McpInvocation
|
|
254
|
+
) => Effect.Effect<ReadonlyArray<McpSchema.Resource>, RequestRejected>
|
|
229
255
|
readonly listTemplates: (
|
|
230
|
-
|
|
231
|
-
) => Effect.Effect<ReadonlyArray<McpSchema.ResourceTemplate
|
|
256
|
+
invocation: McpInvocation
|
|
257
|
+
) => Effect.Effect<ReadonlyArray<McpSchema.ResourceTemplate>, RequestRejected>
|
|
232
258
|
readonly read: (
|
|
233
259
|
uri: string,
|
|
234
260
|
invocation: McpInvocation
|
|
235
261
|
) => Effect.Effect<
|
|
236
262
|
McpSchema.ReadResourceResult,
|
|
237
|
-
ResourceNotFound | McpSchema.InvalidParams | McpSchema.InternalError
|
|
263
|
+
ResourceNotFound | McpSchema.InvalidParams | McpSchema.InternalError | RequestRejected
|
|
238
264
|
>
|
|
239
265
|
}
|
|
240
266
|
|
|
@@ -251,10 +277,14 @@ export class PromptNotFound extends Data.TaggedError("PromptNotFound")<{
|
|
|
251
277
|
export interface PromptRegistration {
|
|
252
278
|
readonly descriptor: McpSchema.Prompt
|
|
253
279
|
readonly isVisible: (profile: NegotiatedProtocolProfile<string>) => boolean
|
|
280
|
+
readonly visible?: Visible | undefined
|
|
254
281
|
readonly get: (
|
|
255
282
|
args: Readonly<Record<string, string>>,
|
|
256
283
|
invocation: McpInvocation
|
|
257
|
-
) => Effect.Effect<
|
|
284
|
+
) => Effect.Effect<
|
|
285
|
+
OperationOutcome<McpSchema.GetPromptResult>,
|
|
286
|
+
PromptNotFound | McpSchema.InvalidParams | McpSchema.InternalError | RequestRejected
|
|
287
|
+
>
|
|
258
288
|
}
|
|
259
289
|
|
|
260
290
|
/**
|
|
@@ -263,15 +293,15 @@ export interface PromptRegistration {
|
|
|
263
293
|
export interface Prompts {
|
|
264
294
|
readonly register: (registration: PromptRegistration) => Effect.Effect<void>
|
|
265
295
|
readonly list: (
|
|
266
|
-
|
|
267
|
-
) => Effect.Effect<ReadonlyArray<McpSchema.Prompt
|
|
296
|
+
invocation: McpInvocation
|
|
297
|
+
) => Effect.Effect<ReadonlyArray<McpSchema.Prompt>, RequestRejected>
|
|
268
298
|
readonly get: (
|
|
269
299
|
name: string,
|
|
270
300
|
args: Readonly<Record<string, string>>,
|
|
271
301
|
invocation: McpInvocation
|
|
272
302
|
) => Effect.Effect<
|
|
273
303
|
OperationOutcome<McpSchema.GetPromptResult>,
|
|
274
|
-
PromptNotFound | McpSchema.InvalidParams | McpSchema.InternalError
|
|
304
|
+
PromptNotFound | McpSchema.InvalidParams | McpSchema.InternalError | RequestRejected
|
|
275
305
|
>
|
|
276
306
|
}
|
|
277
307
|
|
|
@@ -314,12 +344,12 @@ export interface Completions {
|
|
|
314
344
|
complete: (
|
|
315
345
|
request: CompletionRequest,
|
|
316
346
|
invocation: McpInvocation
|
|
317
|
-
) => Effect.Effect<CompletionResult, McpSchema.InvalidParams | McpSchema.InternalError>
|
|
347
|
+
) => Effect.Effect<CompletionResult, McpSchema.InvalidParams | McpSchema.InternalError | RequestRejected>
|
|
318
348
|
) => Effect.Effect<void>
|
|
319
349
|
readonly complete: (
|
|
320
350
|
request: CompletionRequest,
|
|
321
351
|
invocation: McpInvocation
|
|
322
|
-
) => Effect.Effect<CompletionResult, McpSchema.InvalidParams | McpSchema.InternalError>
|
|
352
|
+
) => Effect.Effect<CompletionResult, McpSchema.InvalidParams | McpSchema.InternalError | RequestRejected>
|
|
323
353
|
}
|
|
324
354
|
|
|
325
355
|
/**
|
|
@@ -400,6 +430,14 @@ export interface McpCore {
|
|
|
400
430
|
}>
|
|
401
431
|
}
|
|
402
432
|
|
|
433
|
+
/**
|
|
434
|
+
* Runs the request-level visibility checks of a registration on a list
|
|
435
|
+
* request, after `isVisible` passed.
|
|
436
|
+
*
|
|
437
|
+
* @internal
|
|
438
|
+
*/
|
|
439
|
+
export type Visible = (invocation: McpInvocation) => Effect.Effect<boolean, RequestRejected>
|
|
440
|
+
|
|
403
441
|
/**
|
|
404
442
|
* @internal
|
|
405
443
|
*/
|
|
@@ -413,24 +451,35 @@ export const make: Effect.Effect<McpCore> = Effect.sync(() => {
|
|
|
413
451
|
(
|
|
414
452
|
request: CompletionRequest,
|
|
415
453
|
invocation: McpInvocation
|
|
416
|
-
) => Effect.Effect<CompletionResult, McpSchema.InvalidParams | McpSchema.InternalError>
|
|
454
|
+
) => Effect.Effect<CompletionResult, McpSchema.InvalidParams | McpSchema.InternalError | RequestRejected>
|
|
417
455
|
>()
|
|
418
456
|
|
|
457
|
+
const filterList = <D>(
|
|
458
|
+
registrations: Iterable<{
|
|
459
|
+
readonly descriptor: D
|
|
460
|
+
readonly isVisible: ToolRegistration["isVisible"]
|
|
461
|
+
readonly visible?: Visible | undefined
|
|
462
|
+
}>,
|
|
463
|
+
invocation: McpInvocation
|
|
464
|
+
): Effect.Effect<ReadonlyArray<D>, RequestRejected> =>
|
|
465
|
+
Effect.map(
|
|
466
|
+
Effect.filter(
|
|
467
|
+
Arr.filter(registrations, (entry) => entry.isVisible(invocation.protocol)),
|
|
468
|
+
(entry) => entry.visible === undefined ? Effect.succeed(true) : entry.visible(invocation)
|
|
469
|
+
),
|
|
470
|
+
(entries) => entries.map((entry) => entry.descriptor)
|
|
471
|
+
)
|
|
472
|
+
|
|
419
473
|
const tools: Tools = {
|
|
420
474
|
register: (registration) =>
|
|
421
475
|
Effect.sync(() => {
|
|
422
476
|
registrations.set(registration.descriptor.name, registration)
|
|
423
477
|
}),
|
|
424
|
-
list: (
|
|
425
|
-
|
|
426
|
-
|
|
427
|
-
|
|
428
|
-
|
|
429
|
-
descriptors.push(registration.descriptor)
|
|
430
|
-
}
|
|
431
|
-
}
|
|
432
|
-
return descriptors
|
|
433
|
-
}),
|
|
478
|
+
list: (invocation) => filterList(registrations.values(), invocation),
|
|
479
|
+
find: (name, profile) => {
|
|
480
|
+
const registration = registrations.get(name)
|
|
481
|
+
return registration !== undefined && registration.isVisible(profile) ? registration.descriptor : undefined
|
|
482
|
+
},
|
|
434
483
|
call: (call, invocation) =>
|
|
435
484
|
Effect.suspend((): Effect.Effect<OperationOutcome<McpSchema.CallToolResult>, ToolError> => {
|
|
436
485
|
const registration = registrations.get(call.name)
|
|
@@ -465,18 +514,8 @@ export const make: Effect.Effect<McpCore> = Effect.sync(() => {
|
|
|
465
514
|
resourceTemplateRegistrations[index] = registration
|
|
466
515
|
}
|
|
467
516
|
}),
|
|
468
|
-
list: (
|
|
469
|
-
|
|
470
|
-
resourceRegistrations
|
|
471
|
-
.filter((entry) => entry.isVisible(profile))
|
|
472
|
-
.map((entry) => entry.descriptor)
|
|
473
|
-
),
|
|
474
|
-
listTemplates: (profile) =>
|
|
475
|
-
Effect.sync(() =>
|
|
476
|
-
resourceTemplateRegistrations
|
|
477
|
-
.filter((entry) => entry.isVisible(profile))
|
|
478
|
-
.map((entry) => entry.descriptor)
|
|
479
|
-
),
|
|
517
|
+
list: (invocation) => filterList(resourceRegistrations, invocation),
|
|
518
|
+
listTemplates: (invocation) => filterList(resourceTemplateRegistrations, invocation),
|
|
480
519
|
read: Effect.fnUntraced(function*(uri, invocation) {
|
|
481
520
|
const resource = resourceRegistrations.find((entry) => entry.descriptor.uri === uri)
|
|
482
521
|
if (resource !== undefined && resource.isVisible(invocation.protocol)) {
|
|
@@ -497,12 +536,7 @@ export const make: Effect.Effect<McpCore> = Effect.sync(() => {
|
|
|
497
536
|
Effect.sync(() => {
|
|
498
537
|
promptRegistrations.set(registration.descriptor.name, registration)
|
|
499
538
|
}),
|
|
500
|
-
list: (
|
|
501
|
-
Effect.sync(() =>
|
|
502
|
-
Array.from(promptRegistrations.values())
|
|
503
|
-
.filter((entry) => entry.isVisible(profile))
|
|
504
|
-
.map((entry) => entry.descriptor)
|
|
505
|
-
),
|
|
539
|
+
list: (invocation) => filterList(promptRegistrations.values(), invocation),
|
|
506
540
|
get: Effect.fnUntraced(function*(name, args, invocation) {
|
|
507
541
|
const registration = promptRegistrations.get(name)
|
|
508
542
|
if (registration === undefined || !registration.isVisible(invocation.protocol)) {
|
|
@@ -154,12 +154,10 @@ export const protocol = McpProtocol.make({
|
|
|
154
154
|
"notifications/roots/list_changed": (_, { client, headers }) =>
|
|
155
155
|
lifecycle.clientNotification(McpCore.ClientNotification.RootsChanged(), client.id, headers),
|
|
156
156
|
"resources/list": (_pageRequest) =>
|
|
157
|
-
|
|
157
|
+
McpProtocol.listForClient(core.resources.list)
|
|
158
158
|
.pipe(Effect.map((resources) => McpSchema.ListResourcesResult.make({ resources }))),
|
|
159
159
|
"resources/templates/list": (_pageRequest) =>
|
|
160
|
-
|
|
161
|
-
core.resources.listTemplates(McpProtocol.profileFromClient(request))
|
|
162
|
-
).pipe(
|
|
160
|
+
McpProtocol.listForClient(core.resources.listTemplates).pipe(
|
|
163
161
|
Effect.map((resourceTemplates) => McpSchema.ListResourceTemplatesResult.make({ resourceTemplates }))
|
|
164
162
|
),
|
|
165
163
|
"resources/read": Effect.fnUntraced(function*({ uri }) {
|
|
@@ -189,7 +187,7 @@ export const protocol = McpProtocol.make({
|
|
|
189
187
|
"resources/unsubscribe": ({ uri }, { client, headers }) =>
|
|
190
188
|
lifecycle.unsubscribe(uri, client.id, headers).pipe(Effect.as({})),
|
|
191
189
|
"prompts/list": () =>
|
|
192
|
-
|
|
190
|
+
McpProtocol.listForClient(core.prompts.list)
|
|
193
191
|
.pipe(
|
|
194
192
|
Effect.map((prompts) =>
|
|
195
193
|
McpSchema.ListPromptsResult.make({
|
|
@@ -249,8 +247,7 @@ export const protocol = McpProtocol.make({
|
|
|
249
247
|
})
|
|
250
248
|
}),
|
|
251
249
|
"tools/list": Effect.fnUntraced(function*() {
|
|
252
|
-
|
|
253
|
-
return yield* core.tools.list(McpProtocol.profileFromClient(request)).pipe(
|
|
250
|
+
return yield* McpProtocol.listForClient(core.tools.list).pipe(
|
|
254
251
|
Effect.map((tools) =>
|
|
255
252
|
McpSchema.ListToolsResult.make({
|
|
256
253
|
tools: tools.map((tool) =>
|
|
@@ -166,7 +166,7 @@ export const protocol = McpProtocol.make({
|
|
|
166
166
|
"notifications/roots/list_changed": (_, { client, headers }) =>
|
|
167
167
|
lifecycle.clientNotification(McpCore.ClientNotification.RootsChanged(), client.id, headers),
|
|
168
168
|
"resources/list": (_pageRequest) =>
|
|
169
|
-
|
|
169
|
+
McpProtocol.listForClient(core.resources.list)
|
|
170
170
|
.pipe(
|
|
171
171
|
Effect.map((resources) =>
|
|
172
172
|
McpSchema.ListResourcesResult.make({
|
|
@@ -182,9 +182,7 @@ export const protocol = McpProtocol.make({
|
|
|
182
182
|
)
|
|
183
183
|
),
|
|
184
184
|
"resources/templates/list": (_pageRequest) =>
|
|
185
|
-
|
|
186
|
-
core.resources.listTemplates(McpProtocol.profileFromClient(request))
|
|
187
|
-
).pipe(
|
|
185
|
+
McpProtocol.listForClient(core.resources.listTemplates).pipe(
|
|
188
186
|
Effect.map((resourceTemplates) =>
|
|
189
187
|
McpSchema.ListResourceTemplatesResult.make({
|
|
190
188
|
resourceTemplates: resourceTemplates.map((template) => ({
|
|
@@ -212,7 +210,7 @@ export const protocol = McpProtocol.make({
|
|
|
212
210
|
"resources/unsubscribe": ({ uri }, { client, headers }) =>
|
|
213
211
|
lifecycle.unsubscribe(uri, client.id, headers).pipe(Effect.as({})),
|
|
214
212
|
"prompts/list": (_pageRequest) =>
|
|
215
|
-
|
|
213
|
+
McpProtocol.listForClient(core.prompts.list)
|
|
216
214
|
.pipe(
|
|
217
215
|
Effect.map((prompts) =>
|
|
218
216
|
McpSchema.ListPromptsResult.make({
|
|
@@ -272,8 +270,7 @@ export const protocol = McpProtocol.make({
|
|
|
272
270
|
})
|
|
273
271
|
}),
|
|
274
272
|
"tools/list": Effect.fnUntraced(function*() {
|
|
275
|
-
const
|
|
276
|
-
const tools = yield* core.tools.list(McpProtocol.profileFromClient(request))
|
|
273
|
+
const tools = yield* McpProtocol.listForClient(core.tools.list)
|
|
277
274
|
return McpSchema.ListToolsResult.make({
|
|
278
275
|
tools: tools.map((tool) =>
|
|
279
276
|
McpSchema.Tool.make({
|
|
@@ -182,14 +182,12 @@ export const protocol = McpProtocol.make({
|
|
|
182
182
|
"notifications/roots/list_changed": (_, { client, headers }) =>
|
|
183
183
|
lifecycle.clientNotification(McpCore.ClientNotification.RootsChanged(), client.id, headers),
|
|
184
184
|
"resources/list": (_pageRequest) =>
|
|
185
|
-
|
|
185
|
+
McpProtocol.listForClient(core.resources.list)
|
|
186
186
|
.pipe(
|
|
187
187
|
Effect.map((resources) => McpSchema.ListResourcesResult.make({ resources }))
|
|
188
188
|
),
|
|
189
189
|
"resources/templates/list": (_pageRequest) =>
|
|
190
|
-
|
|
191
|
-
core.resources.listTemplates(McpProtocol.profileFromClient(request))
|
|
192
|
-
).pipe(
|
|
190
|
+
McpProtocol.listForClient(core.resources.listTemplates).pipe(
|
|
193
191
|
Effect.map((resourceTemplates) => McpSchema.ListResourceTemplatesResult.make({ resourceTemplates }))
|
|
194
192
|
),
|
|
195
193
|
"resources/read": Effect.fnUntraced(function*({ uri }) {
|
|
@@ -207,7 +205,7 @@ export const protocol = McpProtocol.make({
|
|
|
207
205
|
"resources/unsubscribe": ({ uri }, { client, headers }) =>
|
|
208
206
|
lifecycle.unsubscribe(uri, client.id, headers).pipe(Effect.as({})),
|
|
209
207
|
"prompts/list": (_pageRequest) =>
|
|
210
|
-
|
|
208
|
+
McpProtocol.listForClient(core.prompts.list)
|
|
211
209
|
.pipe(
|
|
212
210
|
Effect.map((prompts) => McpSchema.ListPromptsResult.make({ prompts }))
|
|
213
211
|
),
|
|
@@ -262,8 +260,7 @@ export const protocol = McpProtocol.make({
|
|
|
262
260
|
})
|
|
263
261
|
}),
|
|
264
262
|
"tools/list": Effect.fnUntraced(function*() {
|
|
265
|
-
const
|
|
266
|
-
const tools = yield* core.tools.list(McpProtocol.profileFromClient(request))
|
|
263
|
+
const tools = yield* McpProtocol.listForClient(core.tools.list)
|
|
267
264
|
return McpSchema.ListToolsResult.make({
|
|
268
265
|
tools: tools.map((tool) =>
|
|
269
266
|
McpSchema.Tool.make({
|
|
@@ -177,7 +177,7 @@ export const protocol = McpProtocol.make({
|
|
|
177
177
|
"notifications/roots/list_changed": (_, { client, headers }) =>
|
|
178
178
|
lifecycle.clientNotification(McpCore.ClientNotification.RootsChanged(), client.id, headers),
|
|
179
179
|
"resources/list": () =>
|
|
180
|
-
|
|
180
|
+
McpProtocol.listForClient(core.resources.list)
|
|
181
181
|
.pipe(
|
|
182
182
|
Effect.map((resources) =>
|
|
183
183
|
McpSchema.ListResourcesResult.make({
|
|
@@ -186,9 +186,7 @@ export const protocol = McpProtocol.make({
|
|
|
186
186
|
)
|
|
187
187
|
),
|
|
188
188
|
"resources/templates/list": () =>
|
|
189
|
-
|
|
190
|
-
core.resources.listTemplates(McpProtocol.profileFromClient(request))
|
|
191
|
-
).pipe(
|
|
189
|
+
McpProtocol.listForClient(core.resources.listTemplates).pipe(
|
|
192
190
|
Effect.map((resourceTemplates) =>
|
|
193
191
|
McpSchema.ListResourceTemplatesResult.make({
|
|
194
192
|
resourceTemplates: resourceTemplates.map((resourceTemplate) =>
|
|
@@ -226,7 +224,7 @@ export const protocol = McpProtocol.make({
|
|
|
226
224
|
"resources/unsubscribe": ({ uri }, { client, headers }) =>
|
|
227
225
|
lifecycle.unsubscribe(uri, client.id, headers).pipe(Effect.as({})),
|
|
228
226
|
"prompts/list": () =>
|
|
229
|
-
|
|
227
|
+
McpProtocol.listForClient(core.prompts.list)
|
|
230
228
|
.pipe(
|
|
231
229
|
Effect.map((prompts) =>
|
|
232
230
|
McpSchema.ListPromptsResult.make({
|
|
@@ -285,8 +283,7 @@ export const protocol = McpProtocol.make({
|
|
|
285
283
|
})
|
|
286
284
|
}),
|
|
287
285
|
"tools/list": Effect.fnUntraced(function*() {
|
|
288
|
-
const
|
|
289
|
-
const tools = yield* core.tools.list(McpProtocol.profileFromClient(request))
|
|
286
|
+
const tools = yield* McpProtocol.listForClient(core.tools.list)
|
|
290
287
|
return McpSchema.ListToolsResult.make({
|
|
291
288
|
tools: tools.map((tool) =>
|
|
292
289
|
McpSchema.Tool.make({
|
|
@@ -327,6 +327,11 @@ export const makeHandlers = (
|
|
|
327
327
|
context.serverInfo.extensions,
|
|
328
328
|
(value): value is Readonly<Record<string, unknown>> => Predicate.isReadonlyObject(value)
|
|
329
329
|
)
|
|
330
|
+
// Project only the wire fields; structurally compatible hints can carry extra properties.
|
|
331
|
+
const cacheHint = (family: keyof McpProtocol.CacheHints) => {
|
|
332
|
+
const hint = context.serverInfo.cacheHints?.[family]
|
|
333
|
+
return hint === undefined ? privateStaleCache : { ttlMs: hint.ttlMs, cacheScope: hint.cacheScope }
|
|
334
|
+
}
|
|
330
335
|
const getDiscovery = Effect.map(context.registrationPresence, (presence) => {
|
|
331
336
|
const capabilities: Types.Mutable<typeof McpSchema.ServerCapabilities.Type> = { completions: {}, logging: {} }
|
|
332
337
|
if (extensions !== undefined) capabilities.extensions = extensions
|
|
@@ -483,7 +488,7 @@ export const makeHandlers = (
|
|
|
483
488
|
) {
|
|
484
489
|
const discovery = yield* getDiscovery
|
|
485
490
|
const result = yield* projectCompleteResult({
|
|
486
|
-
...
|
|
491
|
+
...cacheHint("discover"),
|
|
487
492
|
supportedVersions: Array.from(discovery.supportedVersions),
|
|
488
493
|
capabilities: discovery.capabilities,
|
|
489
494
|
instructions: context.serverInfo.instructions
|
|
@@ -494,9 +499,9 @@ export const makeHandlers = (
|
|
|
494
499
|
_request: typeof McpSchema.ListResources.payloadSchema.Type
|
|
495
500
|
) {
|
|
496
501
|
const invocation = yield* getInvocation
|
|
497
|
-
const resources = yield* core.resources.list(invocation
|
|
502
|
+
const resources = yield* core.resources.list(invocation)
|
|
498
503
|
const result = yield* projectCompleteResult({
|
|
499
|
-
...
|
|
504
|
+
...cacheHint("resources"),
|
|
500
505
|
resources: resources.map(projectResource)
|
|
501
506
|
}, context.serverInfo)
|
|
502
507
|
return yield* decodeListResourcesResult(result)
|
|
@@ -505,9 +510,9 @@ export const makeHandlers = (
|
|
|
505
510
|
_request: typeof McpSchema.ListResourceTemplates.payloadSchema.Type
|
|
506
511
|
) {
|
|
507
512
|
const invocation = yield* getInvocation
|
|
508
|
-
const resourceTemplates = yield* core.resources.listTemplates(invocation
|
|
513
|
+
const resourceTemplates = yield* core.resources.listTemplates(invocation)
|
|
509
514
|
const result = yield* projectCompleteResult({
|
|
510
|
-
...
|
|
515
|
+
...cacheHint("resourceTemplates"),
|
|
511
516
|
resourceTemplates: resourceTemplates.map(projectResourceTemplate)
|
|
512
517
|
}, context.serverInfo)
|
|
513
518
|
return yield* decodeListResourceTemplatesResult(result)
|
|
@@ -537,10 +542,10 @@ export const makeHandlers = (
|
|
|
537
542
|
)
|
|
538
543
|
}
|
|
539
544
|
const invocation = yield* getInvocation
|
|
540
|
-
const prompts = yield* core.prompts.list(invocation
|
|
545
|
+
const prompts = yield* core.prompts.list(invocation)
|
|
541
546
|
const projectedPrompts = yield* Effect.forEach(prompts, projectPrompt)
|
|
542
547
|
const result = yield* projectCompleteResult({
|
|
543
|
-
...
|
|
548
|
+
...cacheHint("prompts"),
|
|
544
549
|
prompts: projectedPrompts
|
|
545
550
|
}, context.serverInfo)
|
|
546
551
|
return yield* decodeListPromptsResult(result)
|
|
@@ -593,17 +598,17 @@ export const makeHandlers = (
|
|
|
593
598
|
_request: typeof McpSchema.ListTools.payloadSchema.Type
|
|
594
599
|
) {
|
|
595
600
|
const invocation = yield* getInvocation
|
|
596
|
-
const tools = yield* core.tools.list(invocation
|
|
601
|
+
const tools = yield* core.tools.list(invocation)
|
|
597
602
|
const projectedTools = yield* Effect.forEach(tools, projectTool)
|
|
598
603
|
const result = yield* projectCompleteResult({
|
|
599
|
-
...
|
|
604
|
+
...cacheHint("tools"),
|
|
600
605
|
tools: projectedTools
|
|
601
606
|
}, context.serverInfo)
|
|
602
607
|
return yield* decodeListToolsResult(result)
|
|
603
608
|
}, Effect.mapError(projectError)),
|
|
604
609
|
"tools/call": Effect.fnUntraced(function*(request: typeof McpSchema.CallTool.payloadSchema.Type) {
|
|
605
610
|
const invocation = yield* getInputInvocation(request)
|
|
606
|
-
const tool =
|
|
611
|
+
const tool = core.tools.find(request.name, invocation.protocol)
|
|
607
612
|
const httpRequest = yield* Effect.serviceOption(HttpServerRequest.HttpServerRequest)
|
|
608
613
|
|
|
609
614
|
if (tool !== undefined && Option.isSome(httpRequest)) {
|
|
@@ -16,6 +16,7 @@ import * as Schema from "../../Schema.ts"
|
|
|
16
16
|
import type * as Scope from "../../Scope.ts"
|
|
17
17
|
import type * as PublicMcpProtocol from "../McpProtocol.ts"
|
|
18
18
|
import * as PublicMcpSchema from "../McpSchema.ts"
|
|
19
|
+
import type * as PublicMcpServer from "../McpServer.ts"
|
|
19
20
|
import * as McpCore from "./mcpCore.ts"
|
|
20
21
|
|
|
21
22
|
const LEGACY_RESOURCE_NOT_FOUND_ERROR_CODE = -32002
|
|
@@ -95,6 +96,18 @@ export const invocationFromClient = (
|
|
|
95
96
|
serverClient: request
|
|
96
97
|
})
|
|
97
98
|
|
|
99
|
+
/**
|
|
100
|
+
* Runs a core list operation for the legacy client of the current request.
|
|
101
|
+
*
|
|
102
|
+
* @internal
|
|
103
|
+
*/
|
|
104
|
+
export const listForClient = <A>(
|
|
105
|
+
list: (invocation: McpCore.McpInvocation) => Effect.Effect<A, McpCore.RequestRejected>
|
|
106
|
+
): Effect.Effect<A, ProtocolError, PublicMcpSchema.McpServerClient> =>
|
|
107
|
+
PublicMcpSchema.McpServerClient.use((request) =>
|
|
108
|
+
list(invocationFromClient(request)).pipe(Effect.mapError(ProtocolError.fromFeature))
|
|
109
|
+
)
|
|
110
|
+
|
|
98
111
|
/**
|
|
99
112
|
* @internal
|
|
100
113
|
*/
|
|
@@ -212,6 +225,9 @@ export class ProtocolError extends Data.TaggedError("ProtocolError")<{
|
|
|
212
225
|
static fromTool(
|
|
213
226
|
error: McpCore.ToolError | McpCore.UnsupportedByProtocol
|
|
214
227
|
): ProtocolError {
|
|
228
|
+
if (error._tag === "RequestRejected") {
|
|
229
|
+
return new ProtocolError({ code: error.code, message: error.message, data: error.data })
|
|
230
|
+
}
|
|
215
231
|
const message = Match.value(error).pipe(
|
|
216
232
|
Match.tag("ToolNotFound", (error) => `Tool '${error.name}' not found`),
|
|
217
233
|
Match.tag(
|
|
@@ -428,6 +444,7 @@ export interface HandlerInstallationContext {
|
|
|
428
444
|
readonly websiteUrl?: string | undefined
|
|
429
445
|
readonly icons?: ReadonlyArray<PublicMcpSchema.Icon> | undefined
|
|
430
446
|
readonly extensions?: PublicMcpSchema.ServerCapabilities["extensions"] | undefined
|
|
447
|
+
readonly cacheHints?: CacheHints | undefined
|
|
431
448
|
}
|
|
432
449
|
readonly registrationPresence: Effect.Effect<{
|
|
433
450
|
readonly tools: boolean
|
|
@@ -436,6 +453,18 @@ export interface HandlerInstallationContext {
|
|
|
436
453
|
}>
|
|
437
454
|
}
|
|
438
455
|
|
|
456
|
+
/**
|
|
457
|
+
* Cache hints normalized to wire values when the server is constructed.
|
|
458
|
+
*
|
|
459
|
+
* @internal
|
|
460
|
+
*/
|
|
461
|
+
export type CacheHints = {
|
|
462
|
+
readonly [Family in keyof PublicMcpServer.CacheHints]?: {
|
|
463
|
+
readonly ttlMs: number
|
|
464
|
+
readonly cacheScope: "private"
|
|
465
|
+
}
|
|
466
|
+
}
|
|
467
|
+
|
|
439
468
|
/**
|
|
440
469
|
* @internal
|
|
441
470
|
*/
|
|
@@ -6,6 +6,7 @@
|
|
|
6
6
|
import type { NonEmptyReadonlyArray } from "../../Array.ts"
|
|
7
7
|
import * as Cause from "../../Cause.ts"
|
|
8
8
|
import * as Context from "../../Context.ts"
|
|
9
|
+
import * as SecureRandom from "../../crypto/SecureRandom.ts"
|
|
9
10
|
import * as Effect from "../../Effect.ts"
|
|
10
11
|
import type * as Headers from "../../http/Headers.ts"
|
|
11
12
|
import { appendPreResponseHandlerUnsafe } from "../../http/HttpEffect.ts"
|
|
@@ -138,6 +139,7 @@ export interface HandlerInstallationOptions {
|
|
|
138
139
|
readonly websiteUrl?: string | undefined
|
|
139
140
|
readonly icons?: ReadonlyArray<PublicMcpSchema.Icon> | undefined
|
|
140
141
|
readonly extensions?: NonNullable<PublicMcpSchema.ServerCapabilities["extensions"]> | undefined
|
|
142
|
+
readonly cacheHints?: McpProtocol.CacheHints | undefined
|
|
141
143
|
}
|
|
142
144
|
}
|
|
143
145
|
|
|
@@ -185,7 +187,8 @@ export interface ServerRuntimeShape {
|
|
|
185
187
|
clientId: number,
|
|
186
188
|
headers: Headers.Headers,
|
|
187
189
|
notification: McpCore.ServerNotification,
|
|
188
|
-
fallbackLogLevel: LogLevel.LogLevel
|
|
190
|
+
fallbackLogLevel: LogLevel.LogLevel,
|
|
191
|
+
listChangeRevision: number | undefined
|
|
189
192
|
) => boolean
|
|
190
193
|
readonly installHandlers: (
|
|
191
194
|
options: HandlerInstallationOptions
|
|
@@ -506,8 +509,8 @@ export const make = Effect.fnUntraced(function*(
|
|
|
506
509
|
})
|
|
507
510
|
),
|
|
508
511
|
deliveryClientIds: () => stateful?.initializedClientIds() ?? [],
|
|
509
|
-
canDeliver: (clientId, headers, notification, fallback) =>
|
|
510
|
-
stateful?.canDeliver(clientId, headers, notification, fallback) ?? true,
|
|
512
|
+
canDeliver: (clientId, headers, notification, fallback, listChangeRevision) =>
|
|
513
|
+
stateful?.canDeliver(clientId, headers, notification, fallback, listChangeRevision) ?? true,
|
|
511
514
|
installHandlers: Effect.fnUntraced(function*(options) {
|
|
512
515
|
const contextMap = new Map<string, unknown>()
|
|
513
516
|
const installationContext: McpProtocol.HandlerInstallationContext = {
|
|
@@ -561,10 +564,11 @@ export const make = Effect.fnUntraced(function*(
|
|
|
561
564
|
protocol: protocol as PublicMcpProtocol.ProtocolAdapter,
|
|
562
565
|
supportsResourceSubscriptions: httpRequest === undefined &&
|
|
563
566
|
capabilities.resources?.subscribe === true,
|
|
564
|
-
logLevel: options.defaultLogLevel
|
|
567
|
+
logLevel: options.defaultLogLevel,
|
|
568
|
+
listChangeRevision: options.getListChangeRevision?.() ?? 0
|
|
565
569
|
}
|
|
566
570
|
if (httpRequest !== undefined) {
|
|
567
|
-
const sessionId =
|
|
571
|
+
const sessionId = SecureRandom.uuidV4Unsafe()
|
|
568
572
|
stateful.registerHttp(sessionId, registration)
|
|
569
573
|
appendPreResponseHandlerUnsafe(
|
|
570
574
|
fiber.context,
|
|
@@ -28,6 +28,7 @@ export interface Binding {
|
|
|
28
28
|
|
|
29
29
|
interface Session extends Binding {
|
|
30
30
|
readonly resourceSubscriptions: Set<string> | undefined
|
|
31
|
+
readonly listChangeRevision: number
|
|
31
32
|
logLevel: SessionLogLevel
|
|
32
33
|
}
|
|
33
34
|
|
|
@@ -37,6 +38,11 @@ interface Session extends Binding {
|
|
|
37
38
|
export interface Registration extends Binding {
|
|
38
39
|
readonly supportsResourceSubscriptions: boolean
|
|
39
40
|
readonly logLevel: LogLevel.LogLevel
|
|
41
|
+
/**
|
|
42
|
+
* The server's list-change revision when the session initialized. Changes
|
|
43
|
+
* up to this revision are already reflected in what the client lists next.
|
|
44
|
+
*/
|
|
45
|
+
readonly listChangeRevision: number
|
|
40
46
|
}
|
|
41
47
|
|
|
42
48
|
/**
|
|
@@ -67,7 +73,8 @@ export interface StatefulRuntime {
|
|
|
67
73
|
clientId: number,
|
|
68
74
|
headers: Headers.Headers,
|
|
69
75
|
notification: McpCore.ServerNotification,
|
|
70
|
-
fallbackLogLevel: LogLevel.LogLevel
|
|
76
|
+
fallbackLogLevel: LogLevel.LogLevel,
|
|
77
|
+
listChangeRevision: number | undefined
|
|
71
78
|
) => boolean
|
|
72
79
|
readonly effectLogLevel: (
|
|
73
80
|
clientId: number,
|
|
@@ -84,6 +91,7 @@ const makeSession = (registration: Registration): Session => ({
|
|
|
84
91
|
negotiatedProfile: registration.negotiatedProfile,
|
|
85
92
|
protocol: registration.protocol,
|
|
86
93
|
resourceSubscriptions: registration.supportsResourceSubscriptions ? new Set() : undefined,
|
|
94
|
+
listChangeRevision: registration.listChangeRevision,
|
|
87
95
|
logLevel: { _tag: "Effect", level: registration.logLevel }
|
|
88
96
|
})
|
|
89
97
|
|
|
@@ -157,8 +165,12 @@ export const make = (): StatefulRuntime => {
|
|
|
157
165
|
return Effect.sync(() => subscriptions.delete(uri)).pipe(Effect.asVoid)
|
|
158
166
|
},
|
|
159
167
|
effectLogLevel,
|
|
160
|
-
canDeliver: (clientId, headers, notification, fallbackLogLevel) => {
|
|
168
|
+
canDeliver: (clientId, headers, notification, fallbackLogLevel, listChangeRevision) => {
|
|
161
169
|
const session = resolveSession(clientId, headers)
|
|
170
|
+
if (listChangeRevision !== undefined) {
|
|
171
|
+
// A client without a session on this channel has not initialized.
|
|
172
|
+
return session !== undefined && listChangeRevision > session.listChangeRevision
|
|
173
|
+
}
|
|
162
174
|
if (notification._tag === "LoggingMessage") {
|
|
163
175
|
const minimum = session?.logLevel
|
|
164
176
|
return minimum?._tag === "Mcp"
|