effect 4.0.2 → 4.0.4
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/AGENTS.md +24 -0
- package/CLAUDE.md +24 -0
- package/ai-docs/package.json +2 -2
- package/ai-docs/src/52_graphql/10_basics.ts +111 -0
- package/ai-docs/src/52_graphql/20_testing.ts +45 -0
- package/ai-docs/src/52_graphql/30_batching.ts +116 -0
- package/ai-docs/src/52_graphql/40_aliased-batching.ts +122 -0
- package/ai-docs/src/52_graphql/50_errors-and-retries.ts +74 -0
- package/ai-docs/src/52_graphql/index.md +6 -0
- package/dist/Context.d.ts.map +1 -1
- package/dist/Context.js +12 -3
- package/dist/Context.js.map +1 -1
- package/dist/Crypto.d.ts +33 -5
- package/dist/Crypto.d.ts.map +1 -1
- package/dist/Crypto.js +8 -2
- package/dist/Crypto.js.map +1 -1
- package/dist/DateTime.d.ts +9 -6
- package/dist/DateTime.d.ts.map +1 -1
- package/dist/DateTime.js +9 -6
- package/dist/DateTime.js.map +1 -1
- package/dist/Duration.d.ts +6 -6
- package/dist/Duration.d.ts.map +1 -1
- package/dist/Duration.js +27 -8
- package/dist/Duration.js.map +1 -1
- package/dist/FileSystem.d.ts +44 -2
- package/dist/FileSystem.d.ts.map +1 -1
- package/dist/FileSystem.js.map +1 -1
- package/dist/RequestResolver.d.ts.map +1 -1
- package/dist/RequestResolver.js +4 -10
- package/dist/RequestResolver.js.map +1 -1
- package/dist/Scheduler.d.ts +9 -0
- package/dist/Scheduler.d.ts.map +1 -1
- package/dist/Scheduler.js +9 -0
- package/dist/Scheduler.js.map +1 -1
- package/dist/Schema.d.ts +481 -1
- package/dist/Schema.d.ts.map +1 -1
- package/dist/Schema.js +362 -4
- package/dist/Schema.js.map +1 -1
- package/dist/SchemaGetter.d.ts +4 -0
- package/dist/SchemaGetter.d.ts.map +1 -1
- package/dist/SchemaGetter.js +52 -33
- package/dist/SchemaGetter.js.map +1 -1
- package/dist/Sink.d.ts.map +1 -1
- package/dist/Sink.js +38 -17
- package/dist/Sink.js.map +1 -1
- package/dist/Stdio.d.ts +7 -1
- package/dist/Stdio.d.ts.map +1 -1
- package/dist/Stdio.js +1 -0
- package/dist/Stdio.js.map +1 -1
- package/dist/Stream.d.ts +22 -11
- package/dist/Stream.d.ts.map +1 -1
- package/dist/Stream.js +21 -6
- package/dist/Stream.js.map +1 -1
- package/dist/Utils.js +8 -3
- package/dist/Utils.js.map +1 -1
- package/dist/ai/AnthropicStructuredOutput.js +0 -2
- package/dist/ai/AnthropicStructuredOutput.js.map +1 -1
- package/dist/ai/Chat.d.ts +2 -2
- package/dist/ai/Chat.d.ts.map +1 -1
- package/dist/ai/LanguageModel.d.ts +38 -7
- package/dist/ai/LanguageModel.d.ts.map +1 -1
- package/dist/ai/LanguageModel.js +25 -7
- package/dist/ai/LanguageModel.js.map +1 -1
- package/dist/ai/McpServer.d.ts +61 -0
- package/dist/ai/McpServer.d.ts.map +1 -1
- package/dist/ai/McpServer.js +196 -44
- package/dist/ai/McpServer.js.map +1 -1
- package/dist/ai/Prompt.d.ts.map +1 -1
- package/dist/ai/Prompt.js +28 -5
- package/dist/ai/Prompt.js.map +1 -1
- package/dist/ai/Response.d.ts +4 -3
- package/dist/ai/Response.d.ts.map +1 -1
- package/dist/ai/Response.js.map +1 -1
- package/dist/ai/internal/mcpProtocol/v2026_07_28.js +5 -0
- package/dist/ai/internal/mcpProtocol/v2026_07_28.js.map +1 -1
- package/dist/ai/internal/mcpProtocol.js.map +1 -1
- package/dist/ai/internal/mcpRuntime.js +1 -0
- package/dist/ai/internal/mcpRuntime.js.map +1 -1
- package/dist/cli/CliOutput.d.ts +27 -0
- package/dist/cli/CliOutput.d.ts.map +1 -1
- package/dist/cli/CliOutput.js +33 -10
- package/dist/cli/CliOutput.js.map +1 -1
- package/dist/cli/Command.d.ts.map +1 -1
- package/dist/cli/Command.js +6 -3
- package/dist/cli/Command.js.map +1 -1
- package/dist/cli/Completions.d.ts +3 -3
- package/dist/cli/Completions.d.ts.map +1 -1
- package/dist/cli/Completions.js +8 -5
- package/dist/cli/Completions.js.map +1 -1
- package/dist/cli/GlobalFlag.d.ts +5 -4
- package/dist/cli/GlobalFlag.d.ts.map +1 -1
- package/dist/cli/GlobalFlag.js +3 -3
- package/dist/cli/GlobalFlag.js.map +1 -1
- package/dist/cli/Prompt.d.ts +17 -1
- package/dist/cli/Prompt.d.ts.map +1 -1
- package/dist/cli/Prompt.js +119 -114
- package/dist/cli/Prompt.js.map +1 -1
- package/dist/cli/internal/ansi.d.ts +0 -1
- package/dist/cli/internal/ansi.d.ts.map +1 -1
- package/dist/cli/internal/ansi.js +20 -3
- package/dist/cli/internal/ansi.js.map +1 -1
- package/dist/cli/internal/completions/powershell.d.ts +2 -0
- package/dist/cli/internal/completions/powershell.d.ts.map +1 -0
- package/dist/cli/internal/completions/powershell.js +273 -0
- package/dist/cli/internal/completions/powershell.js.map +1 -0
- package/dist/cli/internal/completions/zsh.js +3 -2
- package/dist/cli/internal/completions/zsh.js.map +1 -1
- package/dist/cli/internal/wizard.d.ts +3 -3
- package/dist/cli/internal/wizard.d.ts.map +1 -1
- package/dist/cli/internal/wizard.js +21 -18
- package/dist/cli/internal/wizard.js.map +1 -1
- package/dist/cluster/ClusterSchema.d.ts +28 -0
- package/dist/cluster/ClusterSchema.d.ts.map +1 -1
- package/dist/cluster/ClusterSchema.js +30 -0
- package/dist/cluster/ClusterSchema.js.map +1 -1
- package/dist/cluster/ClusterWorkflowEngine.d.ts.map +1 -1
- package/dist/cluster/ClusterWorkflowEngine.js +56 -26
- package/dist/cluster/ClusterWorkflowEngine.js.map +1 -1
- package/dist/cluster/MessageStorage.d.ts +18 -3
- package/dist/cluster/MessageStorage.d.ts.map +1 -1
- package/dist/cluster/MessageStorage.js +31 -11
- package/dist/cluster/MessageStorage.js.map +1 -1
- package/dist/cluster/Runners.d.ts.map +1 -1
- package/dist/cluster/Runners.js +8 -2
- package/dist/cluster/Runners.js.map +1 -1
- package/dist/cluster/Sharding.d.ts.map +1 -1
- package/dist/cluster/Sharding.js +187 -66
- package/dist/cluster/Sharding.js.map +1 -1
- package/dist/cluster/SqlMessageStorage.d.ts +59 -19
- package/dist/cluster/SqlMessageStorage.d.ts.map +1 -1
- package/dist/cluster/SqlMessageStorage.js +84 -55
- package/dist/cluster/SqlMessageStorage.js.map +1 -1
- package/dist/cluster/SqlRunnerStorage.d.ts +68 -19
- package/dist/cluster/SqlRunnerStorage.d.ts.map +1 -1
- package/dist/cluster/SqlRunnerStorage.js +191 -113
- package/dist/cluster/SqlRunnerStorage.js.map +1 -1
- package/dist/cluster/internal/entityManager.js +104 -37
- package/dist/cluster/internal/entityManager.js.map +1 -1
- package/dist/encoding/Sse.d.ts +6 -0
- package/dist/encoding/Sse.d.ts.map +1 -1
- package/dist/encoding/Sse.js +62 -70
- package/dist/encoding/Sse.js.map +1 -1
- package/dist/graphql/GraphQL.d.ts +349 -0
- package/dist/graphql/GraphQL.d.ts.map +1 -0
- package/dist/graphql/GraphQL.js +207 -0
- package/dist/graphql/GraphQL.js.map +1 -0
- package/dist/graphql/GraphQLClient.d.ts +562 -0
- package/dist/graphql/GraphQLClient.d.ts.map +1 -0
- package/dist/graphql/GraphQLClient.js +498 -0
- package/dist/graphql/GraphQLClient.js.map +1 -0
- package/dist/graphql/GraphQLClientError.d.ts +445 -0
- package/dist/graphql/GraphQLClientError.d.ts.map +1 -0
- package/dist/graphql/GraphQLClientError.js +479 -0
- package/dist/graphql/GraphQLClientError.js.map +1 -0
- package/dist/graphql/GraphQLGroup.d.ts +118 -0
- package/dist/graphql/GraphQLGroup.d.ts.map +1 -0
- package/dist/graphql/GraphQLGroup.js +109 -0
- package/dist/graphql/GraphQLGroup.js.map +1 -0
- package/dist/graphql/GraphQLMiddleware.d.ts +249 -0
- package/dist/graphql/GraphQLMiddleware.d.ts.map +1 -0
- package/dist/graphql/GraphQLMiddleware.js +130 -0
- package/dist/graphql/GraphQLMiddleware.js.map +1 -0
- package/dist/graphql/GraphQLProtocol.d.ts +731 -0
- package/dist/graphql/GraphQLProtocol.d.ts.map +1 -0
- package/dist/graphql/GraphQLProtocol.js +719 -0
- package/dist/graphql/GraphQLProtocol.js.map +1 -0
- package/dist/graphql/GraphQLResolver.d.ts +453 -0
- package/dist/graphql/GraphQLResolver.d.ts.map +1 -0
- package/dist/graphql/GraphQLResolver.js +552 -0
- package/dist/graphql/GraphQLResolver.js.map +1 -0
- package/dist/graphql/index.d.ts +40 -0
- package/dist/graphql/index.d.ts.map +1 -0
- package/dist/graphql/index.js +41 -0
- package/dist/graphql/index.js.map +1 -0
- package/dist/http/FindMyWay/internal/router.js +3 -6
- package/dist/http/FindMyWay/internal/router.js.map +1 -1
- package/dist/http/HttpClient.d.ts +21 -0
- package/dist/http/HttpClient.d.ts.map +1 -1
- package/dist/http/HttpClient.js +63 -12
- package/dist/http/HttpClient.js.map +1 -1
- package/dist/http/HttpEffect.d.ts.map +1 -1
- package/dist/http/HttpEffect.js +14 -7
- package/dist/http/HttpEffect.js.map +1 -1
- package/dist/http/HttpMiddleware.d.ts.map +1 -1
- package/dist/http/HttpMiddleware.js +31 -32
- package/dist/http/HttpMiddleware.js.map +1 -1
- package/dist/http/HttpRouter.d.ts +35 -0
- package/dist/http/HttpRouter.d.ts.map +1 -1
- package/dist/http/HttpRouter.js +35 -0
- package/dist/http/HttpRouter.js.map +1 -1
- package/dist/http/HttpServerResponse.d.ts +8 -6
- package/dist/http/HttpServerResponse.d.ts.map +1 -1
- package/dist/http/HttpServerResponse.js +27 -16
- package/dist/http/HttpServerResponse.js.map +1 -1
- package/dist/http/HttpTraceContext.d.ts.map +1 -1
- package/dist/http/HttpTraceContext.js +4 -2
- package/dist/http/HttpTraceContext.js.map +1 -1
- package/dist/http/Multipart.d.ts.map +1 -1
- package/dist/http/Multipart.js +15 -1
- package/dist/http/Multipart.js.map +1 -1
- package/dist/http-api/HttpApiScalar.d.ts +5 -0
- package/dist/http-api/HttpApiScalar.d.ts.map +1 -1
- package/dist/http-api/HttpApiScalar.js.map +1 -1
- package/dist/internal/dateTime.js +40 -35
- package/dist/internal/dateTime.js.map +1 -1
- package/dist/internal/effect.js +19 -9
- package/dist/internal/effect.js.map +1 -1
- package/dist/internal/graphql.d.ts +2 -0
- package/dist/internal/graphql.d.ts.map +1 -0
- package/dist/internal/graphql.js +195 -0
- package/dist/internal/graphql.js.map +1 -0
- package/dist/internal/graphqlHeaders.d.ts +4 -0
- package/dist/internal/graphqlHeaders.d.ts.map +1 -0
- package/dist/internal/graphqlHeaders.js +11 -0
- package/dist/internal/graphqlHeaders.js.map +1 -0
- package/dist/internal/request.js +20 -1
- package/dist/internal/request.js.map +1 -1
- package/dist/internal/schema/toCodeDocument.js +4 -1
- package/dist/internal/schema/toCodeDocument.js.map +1 -1
- package/dist/internal/schema/toJsonSchemaDocument.js +29 -5
- package/dist/internal/schema/toJsonSchemaDocument.js.map +1 -1
- package/dist/internal/version.js +1 -1
- package/dist/net/AddressResolver.d.ts +145 -0
- package/dist/net/AddressResolver.d.ts.map +1 -0
- package/dist/net/AddressResolver.js +114 -0
- package/dist/net/AddressResolver.js.map +1 -0
- package/dist/net/Dns.d.ts +596 -0
- package/dist/net/Dns.d.ts.map +1 -0
- package/dist/net/Dns.js +549 -0
- package/dist/net/Dns.js.map +1 -0
- package/dist/net/Host.d.ts +369 -0
- package/dist/net/Host.d.ts.map +1 -0
- package/dist/net/Host.js +397 -0
- package/dist/net/Host.js.map +1 -0
- package/dist/net/IpInterface.d.ts +76 -3
- package/dist/net/IpInterface.d.ts.map +1 -1
- package/dist/net/IpInterface.js +53 -4
- package/dist/net/IpInterface.js.map +1 -1
- package/dist/net/IpNetwork.d.ts +82 -8
- package/dist/net/IpNetwork.d.ts.map +1 -1
- package/dist/net/IpNetwork.js +60 -4
- package/dist/net/IpNetwork.js.map +1 -1
- package/dist/net/NetAddress.d.ts +396 -35
- package/dist/net/NetAddress.d.ts.map +1 -1
- package/dist/net/NetAddress.js +358 -34
- package/dist/net/NetAddress.js.map +1 -1
- package/dist/net/index.d.ts +15 -0
- package/dist/net/index.d.ts.map +1 -1
- package/dist/net/index.js +15 -0
- package/dist/net/index.js.map +1 -1
- package/dist/observability/OtlpMetrics.d.ts.map +1 -1
- package/dist/observability/OtlpMetrics.js +15 -21
- package/dist/observability/OtlpMetrics.js.map +1 -1
- package/dist/observability/PrometheusMetrics.js +1 -0
- package/dist/observability/PrometheusMetrics.js.map +1 -1
- package/dist/persistence/PersistedQueue.d.ts +32 -3
- package/dist/persistence/PersistedQueue.d.ts.map +1 -1
- package/dist/persistence/PersistedQueue.js +75 -16
- package/dist/persistence/PersistedQueue.js.map +1 -1
- package/dist/rpc/RpcClient.d.ts +22 -6
- package/dist/rpc/RpcClient.d.ts.map +1 -1
- package/dist/rpc/RpcClient.js +12 -5
- package/dist/rpc/RpcClient.js.map +1 -1
- package/dist/rpc/RpcServer.d.ts +6 -0
- package/dist/rpc/RpcServer.d.ts.map +1 -1
- package/dist/rpc/RpcServer.js +78 -29
- package/dist/rpc/RpcServer.js.map +1 -1
- package/dist/socket/DatagramSocket.d.ts +456 -0
- package/dist/socket/DatagramSocket.d.ts.map +1 -0
- package/dist/socket/DatagramSocket.js +535 -0
- package/dist/socket/DatagramSocket.js.map +1 -0
- package/dist/socket/Socket.d.ts +20 -1
- package/dist/socket/Socket.d.ts.map +1 -1
- package/dist/socket/Socket.js +9 -1
- package/dist/socket/Socket.js.map +1 -1
- package/dist/socket/index.d.ts +5 -0
- package/dist/socket/index.d.ts.map +1 -1
- package/dist/socket/index.js +5 -0
- package/dist/socket/index.js.map +1 -1
- package/dist/sql/Migrator.d.ts.map +1 -1
- package/dist/sql/Migrator.js +7 -2
- package/dist/sql/Migrator.js.map +1 -1
- package/dist/sql/SqlClient.d.ts +7 -1
- package/dist/sql/SqlClient.d.ts.map +1 -1
- package/dist/sql/SqlClient.js +31 -6
- package/dist/sql/SqlClient.js.map +1 -1
- package/dist/testing/TestCrypto.d.ts +73 -0
- package/dist/testing/TestCrypto.d.ts.map +1 -0
- package/dist/testing/TestCrypto.js +87 -0
- package/dist/testing/TestCrypto.js.map +1 -0
- package/dist/testing/index.d.ts +5 -0
- package/dist/testing/index.d.ts.map +1 -1
- package/dist/testing/index.js +5 -0
- package/dist/testing/index.js.map +1 -1
- package/dist/workflow/DurableDeferred.d.ts +54 -0
- package/dist/workflow/DurableDeferred.d.ts.map +1 -1
- package/dist/workflow/DurableDeferred.js +108 -50
- package/dist/workflow/DurableDeferred.js.map +1 -1
- package/dist/workflow/WorkflowEngine.d.ts +24 -2
- package/dist/workflow/WorkflowEngine.d.ts.map +1 -1
- package/dist/workflow/WorkflowEngine.js +13 -3
- package/dist/workflow/WorkflowEngine.js.map +1 -1
- package/package.json +6 -3
- package/src/Context.ts +12 -3
- package/src/Crypto.ts +43 -9
- package/src/DateTime.ts +9 -6
- package/src/Duration.ts +36 -16
- package/src/FileSystem.ts +48 -2
- package/src/RequestResolver.ts +4 -10
- package/src/Scheduler.ts +9 -0
- package/src/Schema.ts +677 -5
- package/src/SchemaGetter.ts +47 -35
- package/src/Sink.ts +45 -18
- package/src/Stdio.ts +9 -2
- package/src/Stream.ts +44 -15
- package/src/Utils.ts +8 -5
- package/src/ai/AnthropicStructuredOutput.ts +2 -2
- package/src/ai/Chat.ts +2 -2
- package/src/ai/LanguageModel.ts +96 -24
- package/src/ai/McpServer.ts +288 -94
- package/src/ai/Prompt.ts +24 -10
- package/src/ai/Response.ts +6 -3
- package/src/ai/internal/mcpProtocol/v2026_07_28.ts +5 -0
- package/src/ai/internal/mcpProtocol.ts +3 -0
- package/src/ai/internal/mcpRuntime.ts +2 -0
- package/src/cli/CliOutput.ts +33 -16
- package/src/cli/Command.ts +4 -3
- package/src/cli/Completions.ts +9 -6
- package/src/cli/GlobalFlag.ts +19 -11
- package/src/cli/Prompt.ts +159 -149
- package/src/cli/internal/ansi.ts +26 -3
- package/src/cli/internal/completions/powershell.ts +322 -0
- package/src/cli/internal/completions/zsh.ts +4 -2
- package/src/cli/internal/wizard.ts +34 -26
- package/src/cluster/ClusterSchema.ts +32 -0
- package/src/cluster/ClusterWorkflowEngine.ts +64 -36
- package/src/cluster/MessageStorage.ts +45 -14
- package/src/cluster/Runners.ts +8 -2
- package/src/cluster/Sharding.ts +219 -58
- package/src/cluster/SqlMessageStorage.ts +118 -84
- package/src/cluster/SqlRunnerStorage.ts +224 -128
- package/src/cluster/internal/entityManager.ts +151 -55
- package/src/encoding/Sse.ts +69 -79
- package/src/graphql/GraphQL.ts +494 -0
- package/src/graphql/GraphQLClient.ts +912 -0
- package/src/graphql/GraphQLClientError.ts +542 -0
- package/src/graphql/GraphQLGroup.ts +167 -0
- package/src/graphql/GraphQLMiddleware.ts +253 -0
- package/src/graphql/GraphQLProtocol.ts +1286 -0
- package/src/graphql/GraphQLResolver.ts +1010 -0
- package/src/graphql/index.ts +48 -0
- package/src/http/FindMyWay/internal/router.ts +4 -7
- package/src/http/HttpClient.ts +110 -12
- package/src/http/HttpEffect.ts +11 -5
- package/src/http/HttpMiddleware.ts +33 -34
- package/src/http/HttpRouter.ts +35 -0
- package/src/http/HttpServerResponse.ts +28 -16
- package/src/http/HttpTraceContext.ts +8 -2
- package/src/http/Multipart.ts +17 -1
- package/src/http-api/HttpApiScalar.ts +5 -0
- package/src/internal/dateTime.ts +13 -10
- package/src/internal/effect.ts +22 -15
- package/src/internal/graphql.ts +263 -0
- package/src/internal/graphqlHeaders.ts +11 -0
- package/src/internal/request.ts +31 -3
- package/src/internal/schema/toCodeDocument.ts +7 -1
- package/src/internal/schema/toJsonSchemaDocument.ts +34 -2
- package/src/internal/version.ts +1 -1
- package/src/net/AddressResolver.ts +222 -0
- package/src/net/Dns.ts +1035 -0
- package/src/net/Host.ts +544 -0
- package/src/net/IpInterface.ts +117 -7
- package/src/net/IpNetwork.ts +116 -17
- package/src/net/NetAddress.ts +620 -76
- package/src/net/index.ts +18 -0
- package/src/observability/OtlpMetrics.ts +12 -23
- package/src/observability/PrometheusMetrics.ts +1 -0
- package/src/persistence/PersistedQueue.ts +146 -53
- package/src/rpc/RpcClient.ts +41 -19
- package/src/rpc/RpcServer.ts +115 -40
- package/src/socket/DatagramSocket.ts +919 -0
- package/src/socket/Socket.ts +28 -2
- package/src/socket/index.ts +6 -0
- package/src/sql/Migrator.ts +21 -5
- package/src/sql/SqlClient.ts +39 -15
- package/src/testing/TestCrypto.ts +94 -0
- package/src/testing/index.ts +6 -0
- package/src/workflow/DurableDeferred.ts +160 -47
- package/src/workflow/WorkflowEngine.ts +50 -5
package/src/ai/Response.ts
CHANGED
|
@@ -441,16 +441,19 @@ export const StreamPart = <T extends Toolkit.Any | Toolkit.WithHandler<any>>(
|
|
|
441
441
|
export type ToolCallParts<
|
|
442
442
|
Tools extends Record<string, Tool.Any>,
|
|
443
443
|
ParametersMode extends ToolParametersMode = "decoded"
|
|
444
|
-
> =
|
|
444
|
+
> = ParametersMode extends "deferred" ?
|
|
445
|
+
ToolCallPartForName<Tools, "opaque", keyof Tools> | ToolCallPart<string, unknown>
|
|
446
|
+
: ToolCallPartForName<Tools, ParametersMode, keyof Tools>
|
|
445
447
|
|
|
446
448
|
/**
|
|
447
|
-
* Controls
|
|
449
|
+
* Controls tool parameter decoding. `"deferred"` allows undeclared tool names
|
|
450
|
+
* with opaque parameters, leaving validation to the caller.
|
|
448
451
|
*
|
|
449
452
|
* @stability unstable
|
|
450
453
|
* @category utility types
|
|
451
454
|
* @since 4.0.0
|
|
452
455
|
*/
|
|
453
|
-
export type ToolParametersMode = "decoded" | "encoded" | "opaque"
|
|
456
|
+
export type ToolParametersMode = "decoded" | "encoded" | "opaque" | "deferred"
|
|
454
457
|
|
|
455
458
|
type ToolCallPartForName<
|
|
456
459
|
Tools extends Record<string, Tool.Any>,
|
|
@@ -386,6 +386,8 @@ export const makeHandlers = (
|
|
|
386
386
|
}
|
|
387
387
|
const presence = yield* context.registrationPresence
|
|
388
388
|
const eventsScope = yield* Scope.fork(yield* Effect.scope)
|
|
389
|
+
// Ignore changes emitted before this subscription, even if delivery was deferred.
|
|
390
|
+
const listChangeRevision = context.getListChangeRevision?.() ?? 0
|
|
389
391
|
const events = yield* Scope.provide(context.subscribeServerNotifications, eventsScope)
|
|
390
392
|
const honored = {
|
|
391
393
|
...(presence.tools && request.notifications.toolsListChanged === true
|
|
@@ -410,6 +412,9 @@ export const makeHandlers = (
|
|
|
410
412
|
yield* Effect.gen(function*() {
|
|
411
413
|
while (true) {
|
|
412
414
|
const event = yield* PubSub.take(events)
|
|
415
|
+
if (event.listChangeRevision !== undefined && event.listChangeRevision <= listChangeRevision) {
|
|
416
|
+
continue
|
|
417
|
+
}
|
|
413
418
|
if (event.targetClientId !== undefined && event.targetClientId !== client.id) {
|
|
414
419
|
continue
|
|
415
420
|
}
|
|
@@ -382,6 +382,8 @@ export interface HandlerInstallationContext {
|
|
|
382
382
|
never,
|
|
383
383
|
Scope.Scope
|
|
384
384
|
>
|
|
385
|
+
/** Current list-change revision; subscriptions ignore changes emitted at or before it. */
|
|
386
|
+
readonly getListChangeRevision?: (() => number) | undefined
|
|
385
387
|
readonly sendNotification?: (
|
|
386
388
|
protocolVersion: string,
|
|
387
389
|
clientId: number,
|
|
@@ -419,6 +421,7 @@ export interface HandlerInstallationContext {
|
|
|
419
421
|
*/
|
|
420
422
|
export interface CanonicalServerNotification {
|
|
421
423
|
readonly notification: SubscriptionServerNotification
|
|
424
|
+
readonly listChangeRevision?: number | undefined
|
|
422
425
|
readonly targetClientId?: number | undefined
|
|
423
426
|
}
|
|
424
427
|
|
|
@@ -123,6 +123,7 @@ export type HttpAdmission =
|
|
|
123
123
|
*/
|
|
124
124
|
export interface HandlerInstallationOptions {
|
|
125
125
|
readonly core: McpCore.McpCore
|
|
126
|
+
readonly getListChangeRevision?: () => number
|
|
126
127
|
readonly subscribeServerNotifications: McpProtocol.HandlerInstallationContext["subscribeServerNotifications"]
|
|
127
128
|
readonly sendNotification?: NonNullable<McpProtocol.HandlerInstallationContext["sendNotification"]>
|
|
128
129
|
readonly markSubscriptionCancelled?: NonNullable<
|
|
@@ -512,6 +513,7 @@ export const make = Effect.fnUntraced(function*(
|
|
|
512
513
|
const contextMap = new Map<string, unknown>()
|
|
513
514
|
const installationContext: McpProtocol.HandlerInstallationContext = {
|
|
514
515
|
subscribeServerNotifications: options.subscribeServerNotifications,
|
|
516
|
+
getListChangeRevision: options.getListChangeRevision,
|
|
515
517
|
...(options.sendNotification === undefined ? {} : { sendNotification: options.sendNotification }),
|
|
516
518
|
...(options.markSubscriptionCancelled === undefined
|
|
517
519
|
? {}
|
package/src/cli/CliOutput.ts
CHANGED
|
@@ -16,6 +16,7 @@ import * as Layer from "../Layer.ts"
|
|
|
16
16
|
import * as Option from "../Option.ts"
|
|
17
17
|
import type * as CliError from "./CliError.ts"
|
|
18
18
|
import type { HelpDoc } from "./HelpDoc.ts"
|
|
19
|
+
import * as Ansi from "./internal/ansi.ts"
|
|
19
20
|
|
|
20
21
|
/**
|
|
21
22
|
* Defines the service interface for formatting CLI output including help, errors, and version info.
|
|
@@ -306,17 +307,7 @@ const escapeControlCharacters = (text: string): string =>
|
|
|
306
307
|
* @since 4.0.0
|
|
307
308
|
*/
|
|
308
309
|
export const defaultFormatter = (options?: { colors?: boolean }): Formatter => {
|
|
309
|
-
const
|
|
310
|
-
const hasProcess = typeof globalProcess === "object" && globalProcess !== null
|
|
311
|
-
|
|
312
|
-
const useColor = options?.colors !== undefined
|
|
313
|
-
? options.colors
|
|
314
|
-
// Auto-detect based on environment
|
|
315
|
-
: (hasProcess &&
|
|
316
|
-
typeof globalProcess.stdout === "object" &&
|
|
317
|
-
globalProcess.stdout !== null &&
|
|
318
|
-
globalProcess.stdout.isTTY === true &&
|
|
319
|
-
!globalProcess.env?.NO_COLOR)
|
|
310
|
+
const useColor = options?.colors ?? Ansi.detectColors()
|
|
320
311
|
|
|
321
312
|
// Color palette using ANSI escape codes
|
|
322
313
|
const colors = useColor
|
|
@@ -390,7 +381,7 @@ const stripAnsi = (text: string): string => {
|
|
|
390
381
|
}
|
|
391
382
|
|
|
392
383
|
/**
|
|
393
|
-
*
|
|
384
|
+
* Segments text into grapheme clusters.
|
|
394
385
|
* @internal
|
|
395
386
|
*/
|
|
396
387
|
const graphemeSegmenter = new Intl.Segmenter(undefined, { granularity: "grapheme" })
|
|
@@ -424,7 +415,33 @@ const graphemeWidth = (grapheme: string): number => {
|
|
|
424
415
|
return isFullWidthCodePoint(visible.codePointAt(0)!) ? 2 : 1
|
|
425
416
|
}
|
|
426
417
|
|
|
427
|
-
|
|
418
|
+
/**
|
|
419
|
+
* Measures the number of terminal cells a string occupies.
|
|
420
|
+
*
|
|
421
|
+
* **Details**
|
|
422
|
+
*
|
|
423
|
+
* Uses the same measurement as built-in help and table rendering. ANSI styling
|
|
424
|
+
* is stripped before measuring graphemes: zero-width graphemes count as `0`,
|
|
425
|
+
* emoji presentation sequences and fullwidth characters as `2`, and other
|
|
426
|
+
* graphemes as `1`.
|
|
427
|
+
*
|
|
428
|
+
* **Example** (Measuring terminal-cell widths)
|
|
429
|
+
*
|
|
430
|
+
* ```ts import.meta.vitest
|
|
431
|
+
* import { CliOutput } from "effect/cli"
|
|
432
|
+
*
|
|
433
|
+
* CliOutput.displayWidth("file") // => 4
|
|
434
|
+
* CliOutput.displayWidth("ファイル") // => 8
|
|
435
|
+
* CliOutput.displayWidth("é") // => 1
|
|
436
|
+
* CliOutput.displayWidth("1️⃣") // => 2
|
|
437
|
+
* CliOutput.displayWidth("\u001B[1mbold\u001B[0m") // => 4
|
|
438
|
+
* ```
|
|
439
|
+
*
|
|
440
|
+
* @stability unstable
|
|
441
|
+
* @category measuring
|
|
442
|
+
* @since 4.0.3
|
|
443
|
+
*/
|
|
444
|
+
export const displayWidth = (text: string): number => {
|
|
428
445
|
let length = 0
|
|
429
446
|
for (const { segment } of graphemeSegmenter.segment(stripAnsi(text))) {
|
|
430
447
|
length += graphemeWidth(segment)
|
|
@@ -437,7 +454,7 @@ const visualLength = (text: string): number => {
|
|
|
437
454
|
* @internal
|
|
438
455
|
*/
|
|
439
456
|
const pad = (s: string, width: number) => {
|
|
440
|
-
const actualLength =
|
|
457
|
+
const actualLength = displayWidth(s)
|
|
441
458
|
const padding = Math.max(0, width - actualLength)
|
|
442
459
|
return s + " ".repeat(padding)
|
|
443
460
|
}
|
|
@@ -456,9 +473,9 @@ interface Row {
|
|
|
456
473
|
* @internal
|
|
457
474
|
*/
|
|
458
475
|
const renderTable = (rows: ReadonlyArray<Row>, widthCap?: number) => {
|
|
459
|
-
const maxColumn = Math.max(...rows.map((r) =>
|
|
476
|
+
const maxColumn = Math.max(...rows.map((r) => displayWidth(r.left))) + 4
|
|
460
477
|
const col = widthCap === undefined ? maxColumn : Math.min(maxColumn, widthCap)
|
|
461
|
-
return rows.map(({ left, right }) => ` ${pad(left, Math.max(col,
|
|
478
|
+
return rows.map(({ left, right }) => ` ${pad(left, Math.max(col, displayWidth(left) + 1))}${right}`).join("\n")
|
|
462
479
|
}
|
|
463
480
|
|
|
464
481
|
const formatSubcommandName = (name: string, alias: string | undefined): string => alias ? `${name}, ${alias}` : name
|
package/src/cli/Command.ts
CHANGED
|
@@ -3104,14 +3104,15 @@ export const runWith = <const Name extends string, Input, E, R, ContextInput>(
|
|
|
3104
3104
|
if (!hasEntry) continue
|
|
3105
3105
|
const [, value] = yield* flag.flag.parse(emptyArgs)
|
|
3106
3106
|
if (flag === GlobalFlag.Wizard) {
|
|
3107
|
+
const { colors } = yield* Prompt.Theme
|
|
3107
3108
|
return yield* Effect.gen(function*() {
|
|
3108
|
-
yield* Console.log(Wizard.renderIntroduction(command.name, config.version, command.description))
|
|
3109
|
+
yield* Console.log(Wizard.renderIntroduction(command.name, config.version, command.description, colors))
|
|
3109
3110
|
const prefix = [
|
|
3110
3111
|
command.name,
|
|
3111
3112
|
...args.filter((arg) => arg !== "--wizard" && !arg.startsWith("--wizard="))
|
|
3112
3113
|
]
|
|
3113
3114
|
const wizardResult = yield* Wizard.run(command, { commandPath, prefix })
|
|
3114
|
-
yield* Console.log(Wizard.renderCompletion(wizardResult.displayArgs))
|
|
3115
|
+
yield* Console.log(Wizard.renderCompletion(wizardResult.displayArgs, colors))
|
|
3115
3116
|
const shouldRun = yield* Prompt.run(Prompt.Toggle({
|
|
3116
3117
|
message: "Run this command?",
|
|
3117
3118
|
initial: true,
|
|
@@ -3123,7 +3124,7 @@ export const runWith = <const Name extends string, Input, E, R, ContextInput>(
|
|
|
3123
3124
|
yield* runWith(command, { ...config, renderErrors: false })(wizardResult.args.slice(1))
|
|
3124
3125
|
}
|
|
3125
3126
|
}).pipe(
|
|
3126
|
-
Effect.catchTag("QuitError", () => Console.log(Wizard.renderQuit()))
|
|
3127
|
+
Effect.catchTag("QuitError", () => Console.log(Wizard.renderQuit(colors)))
|
|
3127
3128
|
)
|
|
3128
3129
|
}
|
|
3129
3130
|
yield* flag.run(value, handlerCtx)
|
package/src/cli/Completions.ts
CHANGED
|
@@ -1,14 +1,15 @@
|
|
|
1
1
|
/**
|
|
2
2
|
* The `Completions` module turns a plain description of an Effect CLI command
|
|
3
|
-
* tree into shell completion scripts for Bash, Zsh, and
|
|
4
|
-
* low-level script generation surface used by the unstable CLI package
|
|
5
|
-
* the built-in completions global flag.
|
|
3
|
+
* tree into shell completion scripts for Bash, Zsh, Fish, and PowerShell. It
|
|
4
|
+
* is the low-level script generation surface used by the unstable CLI package
|
|
5
|
+
* and by the built-in completions global flag.
|
|
6
6
|
*
|
|
7
7
|
* @stability unstable
|
|
8
8
|
* @since 4.0.0
|
|
9
9
|
*/
|
|
10
10
|
import * as Bash from "./internal/completions/bash.ts"
|
|
11
11
|
import * as Fish from "./internal/completions/fish.ts"
|
|
12
|
+
import * as PowerShell from "./internal/completions/powershell.ts"
|
|
12
13
|
import * as Zsh from "./internal/completions/zsh.ts"
|
|
13
14
|
|
|
14
15
|
/**
|
|
@@ -18,7 +19,7 @@ import * as Zsh from "./internal/completions/zsh.ts"
|
|
|
18
19
|
* @category models
|
|
19
20
|
* @since 4.0.0
|
|
20
21
|
*/
|
|
21
|
-
export type Shell = "bash" | "zsh" | "fish"
|
|
22
|
+
export type Shell = "bash" | "zsh" | "fish" | "powershell"
|
|
22
23
|
|
|
23
24
|
/**
|
|
24
25
|
* Describes a command for completion script generation.
|
|
@@ -105,8 +106,8 @@ export type ArgumentType =
|
|
|
105
106
|
*
|
|
106
107
|
* **Details**
|
|
107
108
|
*
|
|
108
|
-
* Dispatches by `shell` to Bash, Zsh, or
|
|
109
|
-
* script string for `executableName`.
|
|
109
|
+
* Dispatches by `shell` to Bash, Zsh, Fish, or PowerShell generation and
|
|
110
|
+
* returns a static script string for `executableName`.
|
|
110
111
|
*
|
|
111
112
|
* @see {@link Shell} for supported shell names
|
|
112
113
|
* @see {@link CommandDescriptor} for the command shape used by completion generation
|
|
@@ -127,5 +128,7 @@ export const generate = (
|
|
|
127
128
|
return Zsh.generate(executableName, descriptor)
|
|
128
129
|
case "fish":
|
|
129
130
|
return Fish.generate(executableName, descriptor)
|
|
131
|
+
case "powershell":
|
|
132
|
+
return PowerShell.generate(executableName, descriptor)
|
|
130
133
|
}
|
|
131
134
|
}
|
package/src/cli/GlobalFlag.ts
CHANGED
|
@@ -224,21 +224,29 @@ export const Wizard: Action<boolean> = Action({
|
|
|
224
224
|
*
|
|
225
225
|
* **Details**
|
|
226
226
|
*
|
|
227
|
-
* Accepted values are `bash`, `zsh`, `fish`,
|
|
228
|
-
* `bash`.
|
|
227
|
+
* Accepted values are `bash`, `zsh`, `fish`, `powershell`, `sh`, and `pwsh`;
|
|
228
|
+
* `sh` is normalized to `bash` and `pwsh` to `powershell`.
|
|
229
229
|
*
|
|
230
230
|
* @stability unstable
|
|
231
231
|
* @category references
|
|
232
232
|
* @since 4.0.0
|
|
233
233
|
*/
|
|
234
|
-
export const Completions: Action<Option.Option<
|
|
235
|
-
flag: Flag.
|
|
236
|
-
|
|
237
|
-
|
|
238
|
-
|
|
239
|
-
|
|
240
|
-
|
|
241
|
-
|
|
234
|
+
export const Completions: Action<Option.Option<Completions_.Shell>> = Action({
|
|
235
|
+
flag: Flag.ChoiceWithValue(
|
|
236
|
+
"completions",
|
|
237
|
+
[
|
|
238
|
+
["bash", "bash"],
|
|
239
|
+
["zsh", "zsh"],
|
|
240
|
+
["fish", "fish"],
|
|
241
|
+
["powershell", "powershell"],
|
|
242
|
+
["sh", "bash"],
|
|
243
|
+
["pwsh", "powershell"]
|
|
244
|
+
] as const
|
|
245
|
+
).pipe(
|
|
246
|
+
Flag.optional,
|
|
247
|
+
Flag.withMetavar("<bash|zsh|fish|powershell|sh|pwsh>"),
|
|
248
|
+
Flag.withDescription("Print shell completion script")
|
|
249
|
+
),
|
|
242
250
|
run: Effect.fnUntraced(function*(shell, { command }) {
|
|
243
251
|
if (Option.isNone(shell)) return
|
|
244
252
|
const descriptor = CommandDescriptor.fromCommand(command)
|
|
@@ -317,7 +325,7 @@ export const BuiltIns: readonly [
|
|
|
317
325
|
Action<boolean>,
|
|
318
326
|
Action<boolean>,
|
|
319
327
|
Action<boolean>,
|
|
320
|
-
Action<Option.Option<
|
|
328
|
+
Action<Option.Option<Completions_.Shell>>,
|
|
321
329
|
Setting<"log-level", Option.Option<LogLevelType>>
|
|
322
330
|
] = [Help, Version, Wizard, Completions, LogLevel]
|
|
323
331
|
|