effect 4.1.0 → 4.1.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +30 -0
- package/THIRD_PARTY_NOTICES.md +62 -0
- package/dist/BigDecimal.d.ts +139 -7
- package/dist/BigDecimal.d.ts.map +1 -1
- package/dist/BigDecimal.js +83 -14
- package/dist/BigDecimal.js.map +1 -1
- package/dist/Equal.d.ts +2 -2
- package/dist/Equal.d.ts.map +1 -1
- package/dist/Equal.js +3 -3
- package/dist/Equal.js.map +1 -1
- package/dist/Hash.d.ts +3 -2
- package/dist/Hash.d.ts.map +1 -1
- package/dist/Hash.js +5 -4
- package/dist/Hash.js.map +1 -1
- package/dist/Iterable.d.ts.map +1 -1
- package/dist/Iterable.js +11 -8
- package/dist/Iterable.js.map +1 -1
- package/dist/Path.d.ts.map +1 -1
- package/dist/Path.js +5 -1
- package/dist/Path.js.map +1 -1
- package/dist/Pool.d.ts.map +1 -1
- package/dist/Pool.js +2 -1
- package/dist/Pool.js.map +1 -1
- package/dist/Schema.d.ts +2 -1
- package/dist/Schema.d.ts.map +1 -1
- package/dist/Schema.js +2 -1
- package/dist/Schema.js.map +1 -1
- package/dist/SchemaRepresentation.d.ts +4 -2
- package/dist/SchemaRepresentation.d.ts.map +1 -1
- package/dist/SchemaRepresentation.js +4 -2
- package/dist/SchemaRepresentation.js.map +1 -1
- package/dist/SchemaTransformation.d.ts +2 -2
- package/dist/SchemaTransformation.js +2 -2
- package/dist/ai/McpClient.d.ts +171 -19
- package/dist/ai/McpClient.d.ts.map +1 -1
- package/dist/ai/McpClient.js +277 -66
- package/dist/ai/McpClient.js.map +1 -1
- package/dist/ai/McpSchema.d.ts +108 -0
- package/dist/ai/McpSchema.d.ts.map +1 -1
- package/dist/ai/McpSchema.js +99 -0
- package/dist/ai/McpSchema.js.map +1 -1
- package/dist/ai/McpServer.d.ts +120 -6
- package/dist/ai/McpServer.d.ts.map +1 -1
- package/dist/ai/McpServer.js +215 -34
- package/dist/ai/McpServer.js.map +1 -1
- package/dist/ai/Prompt.d.ts.map +1 -1
- package/dist/ai/Prompt.js +20 -11
- package/dist/ai/Prompt.js.map +1 -1
- package/dist/ai/Tool.d.ts.map +1 -1
- package/dist/ai/Tool.js +5 -7
- package/dist/ai/Tool.js.map +1 -1
- package/dist/ai/internal/mcpCore.js +72 -3
- package/dist/ai/internal/mcpCore.js.map +1 -1
- package/dist/ai/internal/mcpProtocol/v2024_11_05.js +3 -1
- package/dist/ai/internal/mcpProtocol/v2024_11_05.js.map +1 -1
- package/dist/ai/internal/mcpProtocol/v2025_03_26.js +3 -1
- package/dist/ai/internal/mcpProtocol/v2025_03_26.js.map +1 -1
- package/dist/ai/internal/mcpProtocol/v2025_06_18.js +3 -1
- package/dist/ai/internal/mcpProtocol/v2025_06_18.js.map +1 -1
- package/dist/ai/internal/mcpProtocol/v2025_11_25.js +3 -1
- package/dist/ai/internal/mcpProtocol/v2025_11_25.js.map +1 -1
- package/dist/ai/internal/mcpProtocol/v2026_07_28.js +42 -7
- package/dist/ai/internal/mcpProtocol/v2026_07_28.js.map +1 -1
- package/dist/ai/internal/mcpProtocol.js +12 -0
- package/dist/ai/internal/mcpProtocol.js.map +1 -1
- package/dist/ai/internal/mcpRuntime.js +3 -3
- package/dist/ai/internal/mcpRuntime.js.map +1 -1
- package/dist/ai/internal/mcpSkills.d.ts +2 -0
- package/dist/ai/internal/mcpSkills.d.ts.map +1 -0
- package/dist/ai/internal/mcpSkills.js +428 -0
- package/dist/ai/internal/mcpSkills.js.map +1 -0
- package/dist/cluster/ClusterWorkflowEngine.d.ts.map +1 -1
- package/dist/cluster/ClusterWorkflowEngine.js +15 -5
- package/dist/cluster/ClusterWorkflowEngine.js.map +1 -1
- package/dist/cluster/Reply.d.ts +1 -1
- package/dist/cluster/Reply.d.ts.map +1 -1
- package/dist/cluster/Reply.js.map +1 -1
- package/dist/cluster/Sharding.d.ts.map +1 -1
- package/dist/cluster/Sharding.js +4 -1
- package/dist/cluster/Sharding.js.map +1 -1
- package/dist/cluster/internal/entityManager.js +15 -7
- package/dist/cluster/internal/entityManager.js.map +1 -1
- package/dist/crypto/Aead.d.ts +2 -1
- package/dist/crypto/Aead.d.ts.map +1 -1
- package/dist/crypto/Aead.js +2 -2
- package/dist/crypto/Aead.js.map +1 -1
- package/dist/crypto/Cipher.d.ts +2 -1
- package/dist/crypto/Cipher.d.ts.map +1 -1
- package/dist/crypto/Cipher.js +2 -2
- package/dist/crypto/Cipher.js.map +1 -1
- package/dist/crypto/KeyAgreement.d.ts +3 -2
- package/dist/crypto/KeyAgreement.d.ts.map +1 -1
- package/dist/crypto/KeyAgreement.js +2 -2
- package/dist/crypto/KeyAgreement.js.map +1 -1
- package/dist/crypto/KeyFormat.d.ts +33 -1
- package/dist/crypto/KeyFormat.d.ts.map +1 -1
- package/dist/crypto/KeyFormat.js.map +1 -1
- package/dist/crypto/KeyWrap.d.ts +4 -3
- package/dist/crypto/KeyWrap.d.ts.map +1 -1
- package/dist/crypto/KeyWrap.js +2 -2
- package/dist/crypto/KeyWrap.js.map +1 -1
- package/dist/crypto/Mac.d.ts +2 -1
- package/dist/crypto/Mac.d.ts.map +1 -1
- package/dist/crypto/Mac.js +2 -2
- package/dist/crypto/Mac.js.map +1 -1
- package/dist/crypto/Signature.d.ts +3 -2
- package/dist/crypto/Signature.d.ts.map +1 -1
- package/dist/crypto/Signature.js +2 -2
- package/dist/crypto/Signature.js.map +1 -1
- package/dist/crypto/WebCrypto.d.ts +19 -0
- package/dist/crypto/WebCrypto.d.ts.map +1 -1
- package/dist/crypto/WebCrypto.js.map +1 -1
- package/dist/crypto/internal/asymmetric.js.map +1 -1
- package/dist/crypto/internal/key.js +3 -2
- package/dist/crypto/internal/key.js.map +1 -1
- package/dist/encoding/Base64Url.d.ts.map +1 -1
- package/dist/encoding/Base64Url.js +26 -3
- package/dist/encoding/Base64Url.js.map +1 -1
- package/dist/encoding/Ndjson.d.ts +5 -4
- package/dist/encoding/Ndjson.d.ts.map +1 -1
- package/dist/encoding/Ndjson.js +6 -5
- package/dist/encoding/Ndjson.js.map +1 -1
- package/dist/encoding/Sse.d.ts +3 -1
- package/dist/encoding/Sse.d.ts.map +1 -1
- package/dist/encoding/Sse.js +5 -3
- package/dist/encoding/Sse.js.map +1 -1
- package/dist/eventlog/EventLog.d.ts +7 -0
- package/dist/eventlog/EventLog.d.ts.map +1 -1
- package/dist/eventlog/EventLog.js +7 -0
- package/dist/eventlog/EventLog.js.map +1 -1
- package/dist/eventlog/EventLogServer.d.ts +7 -1
- package/dist/eventlog/EventLogServer.d.ts.map +1 -1
- package/dist/eventlog/EventLogServer.js +27 -12
- package/dist/eventlog/EventLogServer.js.map +1 -1
- package/dist/eventlog/EventLogServerEncrypted.d.ts +10 -0
- package/dist/eventlog/EventLogServerEncrypted.d.ts.map +1 -1
- package/dist/eventlog/EventLogServerEncrypted.js.map +1 -1
- package/dist/eventlog/EventLogServerUnencrypted.d.ts +17 -0
- package/dist/eventlog/EventLogServerUnencrypted.d.ts.map +1 -1
- package/dist/eventlog/EventLogServerUnencrypted.js +14 -2
- package/dist/eventlog/EventLogServerUnencrypted.js.map +1 -1
- package/dist/eventlog/EventLogSessionAuth.d.ts +21 -0
- package/dist/eventlog/EventLogSessionAuth.d.ts.map +1 -1
- package/dist/eventlog/EventLogSessionAuth.js +22 -0
- package/dist/eventlog/EventLogSessionAuth.js.map +1 -1
- package/dist/graphql/GraphQLClient.d.ts +3 -1
- package/dist/graphql/GraphQLClient.d.ts.map +1 -1
- package/dist/graphql/GraphQLClient.js.map +1 -1
- package/dist/graphql/GraphQLClientError.d.ts +14 -9
- package/dist/graphql/GraphQLClientError.d.ts.map +1 -1
- package/dist/graphql/GraphQLClientError.js +14 -21
- package/dist/graphql/GraphQLClientError.js.map +1 -1
- package/dist/graphql/GraphQLProtocol.d.ts +12 -3
- package/dist/graphql/GraphQLProtocol.d.ts.map +1 -1
- package/dist/graphql/GraphQLProtocol.js +4 -1
- package/dist/graphql/GraphQLProtocol.js.map +1 -1
- package/dist/http/HttpClient.d.ts +189 -7
- package/dist/http/HttpClient.d.ts.map +1 -1
- package/dist/http/HttpClient.js +75 -2
- package/dist/http/HttpClient.js.map +1 -1
- package/dist/http/HttpServerRequest.d.ts.map +1 -1
- package/dist/http/HttpServerRequest.js +38 -22
- package/dist/http/HttpServerRequest.js.map +1 -1
- package/dist/http/internal/mimeTypes.d.ts +4 -1
- package/dist/http/internal/mimeTypes.d.ts.map +1 -1
- package/dist/http/internal/mimeTypes.js +4 -1
- package/dist/http/internal/mimeTypes.js.map +1 -1
- package/dist/http-api/HttpApiSchema.js +1 -1
- package/dist/http-api/HttpApiSchema.js.map +1 -1
- package/dist/internal/dateTime.js +49 -24
- package/dist/internal/dateTime.js.map +1 -1
- package/dist/internal/effect.js +10 -0
- package/dist/internal/effect.js.map +1 -1
- package/dist/internal/glob.js +234 -56
- package/dist/internal/glob.js.map +1 -1
- package/dist/internal/graphql.js +21 -7
- package/dist/internal/graphql.js.map +1 -1
- package/dist/internal/graphqlHeaders.d.ts +7 -0
- package/dist/internal/graphqlHeaders.d.ts.map +1 -1
- package/dist/internal/graphqlHeaders.js +11 -0
- package/dist/internal/graphqlHeaders.js.map +1 -1
- package/dist/internal/request.js +29 -42
- package/dist/internal/request.js.map +1 -1
- package/dist/internal/schema/fromJsonSchemaDocument.js +7 -8
- package/dist/internal/schema/fromJsonSchemaDocument.js.map +1 -1
- package/dist/internal/version.js +1 -1
- package/dist/jose/JoseError.d.ts +285 -0
- package/dist/jose/JoseError.d.ts.map +1 -0
- package/dist/jose/JoseError.js +269 -0
- package/dist/jose/JoseError.js.map +1 -0
- package/dist/jose/Jwe.d.ts +128 -0
- package/dist/jose/Jwe.d.ts.map +1 -0
- package/dist/jose/Jwe.js +134 -0
- package/dist/jose/Jwe.js.map +1 -0
- package/dist/jose/Jwk.d.ts +597 -0
- package/dist/jose/Jwk.d.ts.map +1 -0
- package/dist/jose/Jwk.js +503 -0
- package/dist/jose/Jwk.js.map +1 -0
- package/dist/jose/Jwks.d.ts +236 -0
- package/dist/jose/Jwks.d.ts.map +1 -0
- package/dist/jose/Jwks.js +306 -0
- package/dist/jose/Jwks.js.map +1 -0
- package/dist/jose/Jws.d.ts +177 -0
- package/dist/jose/Jws.d.ts.map +1 -0
- package/dist/jose/Jws.js +183 -0
- package/dist/jose/Jws.js.map +1 -0
- package/dist/jose/Jwt.d.ts +270 -0
- package/dist/jose/Jwt.d.ts.map +1 -0
- package/dist/jose/Jwt.js +293 -0
- package/dist/jose/Jwt.js.map +1 -0
- package/dist/jose/index.d.ts +51 -0
- package/dist/jose/index.d.ts.map +1 -0
- package/dist/jose/index.js +52 -0
- package/dist/jose/index.js.map +1 -0
- package/dist/jose/internal/compact.d.ts +2 -0
- package/dist/jose/internal/compact.d.ts.map +1 -0
- package/dist/jose/internal/compact.js +179 -0
- package/dist/jose/internal/compact.js.map +1 -0
- package/dist/net/Host.d.ts.map +1 -1
- package/dist/net/Host.js +5 -10
- package/dist/net/Host.js.map +1 -1
- package/dist/observability/OtlpSerialization.d.ts +1 -1
- package/dist/observability/OtlpSerialization.d.ts.map +1 -1
- package/dist/observability/OtlpSerialization.js +10 -4
- package/dist/observability/OtlpSerialization.js.map +1 -1
- package/dist/observability/internal/otlpProtobuf.js +3 -3
- package/dist/observability/internal/otlpProtobuf.js.map +1 -1
- package/dist/observability/internal/protobuf.js +6 -0
- package/dist/observability/internal/protobuf.js.map +1 -1
- package/dist/persistence/CircuitBreaker.d.ts +98 -38
- package/dist/persistence/CircuitBreaker.d.ts.map +1 -1
- package/dist/persistence/CircuitBreaker.js +67 -29
- package/dist/persistence/CircuitBreaker.js.map +1 -1
- package/dist/persistence/RateLimiter.d.ts +8 -0
- package/dist/persistence/RateLimiter.d.ts.map +1 -1
- package/dist/persistence/RateLimiter.js +63 -12
- package/dist/persistence/RateLimiter.js.map +1 -1
- package/dist/persistence/index.d.ts +1 -1
- package/dist/persistence/index.js +1 -1
- package/dist/reactivity/AtomRegistry.js +17 -7
- package/dist/reactivity/AtomRegistry.js.map +1 -1
- package/dist/rpc/Rpc.d.ts +1 -1
- package/dist/rpc/Rpc.d.ts.map +1 -1
- package/dist/rpc/Rpc.js.map +1 -1
- package/dist/rpc/RpcClient.d.ts +14 -2
- package/dist/rpc/RpcClient.d.ts.map +1 -1
- package/dist/rpc/RpcClient.js +38 -21
- package/dist/rpc/RpcClient.js.map +1 -1
- package/dist/rpc/RpcMessage.d.ts +3 -2
- package/dist/rpc/RpcMessage.d.ts.map +1 -1
- package/dist/rpc/RpcMessage.js.map +1 -1
- package/dist/sql/Migrator.d.ts +9 -1
- package/dist/sql/Migrator.d.ts.map +1 -1
- package/dist/sql/Migrator.js +18 -6
- package/dist/sql/Migrator.js.map +1 -1
- package/dist/sql/SqlClient.d.ts +38 -3
- package/dist/sql/SqlClient.d.ts.map +1 -1
- package/dist/sql/SqlClient.js +4 -3
- package/dist/sql/SqlClient.js.map +1 -1
- package/dist/sql/Statement.d.ts +41 -3
- package/dist/sql/Statement.d.ts.map +1 -1
- package/dist/sql/Statement.js +24 -20
- package/dist/sql/Statement.js.map +1 -1
- package/dist/workflow/Workflow.d.ts +4 -0
- package/dist/workflow/Workflow.d.ts.map +1 -1
- package/dist/workflow/Workflow.js.map +1 -1
- package/dist/workflow/WorkflowEngine.d.ts.map +1 -1
- package/dist/workflow/WorkflowEngine.js +5 -0
- package/dist/workflow/WorkflowEngine.js.map +1 -1
- package/package.json +5 -1
- package/src/BigDecimal.ts +170 -16
- package/src/Equal.ts +3 -3
- package/src/Hash.ts +5 -4
- package/src/Iterable.ts +8 -5
- package/src/Path.ts +6 -1
- package/src/Pool.ts +2 -1
- package/src/Schema.ts +3 -2
- package/src/SchemaRepresentation.ts +4 -2
- package/src/SchemaTransformation.ts +2 -2
- package/src/ai/McpClient.ts +488 -91
- package/src/ai/McpSchema.ts +119 -0
- package/src/ai/McpServer.ts +261 -38
- package/src/ai/Prompt.ts +16 -11
- package/src/ai/Tool.ts +5 -10
- package/src/ai/internal/mcpCore.ts +165 -12
- package/src/ai/internal/mcpProtocol/v2024_11_05.ts +3 -1
- package/src/ai/internal/mcpProtocol/v2025_03_26.ts +3 -1
- package/src/ai/internal/mcpProtocol/v2025_06_18.ts +3 -1
- package/src/ai/internal/mcpProtocol/v2025_11_25.ts +3 -1
- package/src/ai/internal/mcpProtocol/v2026_07_28.ts +41 -7
- package/src/ai/internal/mcpProtocol.ts +15 -0
- package/src/ai/internal/mcpRuntime.ts +6 -3
- package/src/ai/internal/mcpSkills.ts +480 -0
- package/src/cluster/ClusterWorkflowEngine.ts +22 -8
- package/src/cluster/Reply.ts +1 -1
- package/src/cluster/Sharding.ts +4 -1
- package/src/cluster/internal/entityManager.ts +24 -10
- package/src/crypto/Aead.ts +3 -3
- package/src/crypto/Cipher.ts +3 -3
- package/src/crypto/KeyAgreement.ts +4 -4
- package/src/crypto/KeyFormat.ts +30 -1
- package/src/crypto/KeyWrap.ts +6 -6
- package/src/crypto/Mac.ts +3 -3
- package/src/crypto/Signature.ts +4 -4
- package/src/crypto/WebCrypto.ts +20 -0
- package/src/crypto/internal/asymmetric.ts +2 -1
- package/src/crypto/internal/key.ts +12 -5
- package/src/encoding/Base64Url.ts +27 -3
- package/src/encoding/Ndjson.ts +6 -5
- package/src/encoding/Sse.ts +5 -3
- package/src/eventlog/EventLog.ts +7 -0
- package/src/eventlog/EventLogServer.ts +31 -12
- package/src/eventlog/EventLogServerEncrypted.ts +5 -0
- package/src/eventlog/EventLogServerUnencrypted.ts +19 -2
- package/src/eventlog/EventLogSessionAuth.ts +26 -0
- package/src/graphql/GraphQLClient.ts +3 -1
- package/src/graphql/GraphQLClientError.ts +15 -22
- package/src/graphql/GraphQLProtocol.ts +12 -3
- package/src/http/HttpClient.ts +210 -11
- package/src/http/HttpServerRequest.ts +61 -23
- package/src/http/internal/mimeTypes.ts +4 -1
- package/src/http-api/HttpApiSchema.ts +1 -1
- package/src/internal/dateTime.ts +54 -24
- package/src/internal/effect.ts +6 -0
- package/src/internal/glob.ts +279 -63
- package/src/internal/graphql.ts +27 -9
- package/src/internal/graphqlHeaders.ts +13 -0
- package/src/internal/request.ts +51 -58
- package/src/internal/schema/fromJsonSchemaDocument.ts +11 -10
- package/src/internal/version.ts +1 -1
- package/src/jose/JoseError.ts +329 -0
- package/src/jose/Jwe.ts +196 -0
- package/src/jose/Jwk.ts +777 -0
- package/src/jose/Jwks.ts +418 -0
- package/src/jose/Jws.ts +312 -0
- package/src/jose/Jwt.ts +493 -0
- package/src/jose/index.ts +58 -0
- package/src/jose/internal/compact.ts +195 -0
- package/src/net/Host.ts +5 -10
- package/src/observability/OtlpSerialization.ts +13 -5
- package/src/observability/internal/otlpProtobuf.ts +6 -6
- package/src/observability/internal/protobuf.ts +10 -0
- package/src/persistence/CircuitBreaker.ts +113 -48
- package/src/persistence/RateLimiter.ts +84 -15
- package/src/persistence/index.ts +1 -1
- package/src/reactivity/AtomRegistry.ts +19 -8
- package/src/rpc/Rpc.ts +3 -1
- package/src/rpc/RpcClient.ts +44 -24
- package/src/rpc/RpcMessage.ts +3 -2
- package/src/sql/Migrator.ts +35 -18
- package/src/sql/SqlClient.ts +43 -8
- package/src/sql/Statement.ts +52 -22
- package/src/workflow/Workflow.ts +4 -0
- package/src/workflow/WorkflowEngine.ts +5 -0
|
@@ -0,0 +1,428 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* The Skills extension (SEP-2640): its wire vocabulary, the catalog behind a
|
|
3
|
+
* static skill, and the handlers shared by the sessionful adapters.
|
|
4
|
+
*
|
|
5
|
+
* @internal
|
|
6
|
+
*/
|
|
7
|
+
import * as Cause from "../../Cause.js";
|
|
8
|
+
import * as Digest from "../../crypto/Digest.js";
|
|
9
|
+
import * as Effect from "../../Effect.js";
|
|
10
|
+
import * as Yaml from "../../encoding/Yaml.js";
|
|
11
|
+
import * as Mime from "../../http/Mime.js";
|
|
12
|
+
import * as Option from "../../Option.js";
|
|
13
|
+
import * as Predicate from "../../Predicate.js";
|
|
14
|
+
import * as Rpc from "../../rpc/Rpc.js";
|
|
15
|
+
import * as RpcGroup from "../../rpc/RpcGroup.js";
|
|
16
|
+
import * as Schema from "../../Schema.js";
|
|
17
|
+
import * as PublicMcpSchema from "../McpSchema.js";
|
|
18
|
+
import * as McpProtocol from "./mcpProtocol.js";
|
|
19
|
+
import * as Legacy from "./mcpSchema/v2024_11_05.js";
|
|
20
|
+
import * as Stateless from "./mcpSchema/v2026_07_28.js";
|
|
21
|
+
/**
|
|
22
|
+
* @internal
|
|
23
|
+
*/
|
|
24
|
+
export const EXTENSION_ID = "io.modelcontextprotocol/skills";
|
|
25
|
+
const DIRECTORY_MIME_TYPE = "inode/directory";
|
|
26
|
+
// The extension's per-skill limits, which every conforming host accepts.
|
|
27
|
+
const MAX_FILES_PER_SKILL = 512;
|
|
28
|
+
const MAX_BYTES_PER_SKILL = 16 * 1024 * 1024;
|
|
29
|
+
/**
|
|
30
|
+
* Adds the extension declaration while any skill is registered. Declaring it
|
|
31
|
+
* commits the server to `skills/list`, `skills/get` and, through
|
|
32
|
+
* `directoryRead`, `resources/directory/read`.
|
|
33
|
+
*
|
|
34
|
+
* @internal
|
|
35
|
+
*/
|
|
36
|
+
export const declareExtension = (extensions, servesSkills) => servesSkills ? {
|
|
37
|
+
...extensions,
|
|
38
|
+
[EXTENSION_ID]: {
|
|
39
|
+
directoryRead: true
|
|
40
|
+
}
|
|
41
|
+
} : extensions;
|
|
42
|
+
// =============================================================================
|
|
43
|
+
// Wire schemas
|
|
44
|
+
// =============================================================================
|
|
45
|
+
const Skill = /*#__PURE__*/Schema.Struct({
|
|
46
|
+
uri: Schema.String,
|
|
47
|
+
frontmatter: Legacy.UnknownObject,
|
|
48
|
+
resources: /*#__PURE__*/Schema.Union([/*#__PURE__*/Schema.Array(/*#__PURE__*/Schema.Struct(PublicMcpSchema.SkillResource.fields)), /*#__PURE__*/Schema.Literal("dynamic")])
|
|
49
|
+
});
|
|
50
|
+
// Listed entries are checked one at a time, so that a client can leave out an
|
|
51
|
+
// invalid entry instead of rejecting the whole page.
|
|
52
|
+
const ListedSkills = /*#__PURE__*/Schema.Array(Schema.Unknown);
|
|
53
|
+
/**
|
|
54
|
+
* @internal
|
|
55
|
+
*/
|
|
56
|
+
export class LegacyListSkills extends /*#__PURE__*/Rpc.make("skills/list", {
|
|
57
|
+
success: /*#__PURE__*/Schema.Struct({
|
|
58
|
+
...Legacy.PaginatedResult.fields,
|
|
59
|
+
skills: ListedSkills
|
|
60
|
+
}),
|
|
61
|
+
error: Legacy.McpError,
|
|
62
|
+
payload: /*#__PURE__*/Schema.UndefinedOr(Legacy.PaginatedRequest)
|
|
63
|
+
}) {}
|
|
64
|
+
/**
|
|
65
|
+
* @internal
|
|
66
|
+
*/
|
|
67
|
+
export class LegacyGetSkill extends /*#__PURE__*/Rpc.make("skills/get", {
|
|
68
|
+
success: /*#__PURE__*/Schema.Struct({
|
|
69
|
+
...Legacy.ResultMeta.fields,
|
|
70
|
+
skill: Skill
|
|
71
|
+
}),
|
|
72
|
+
error: Legacy.McpError,
|
|
73
|
+
payload: {
|
|
74
|
+
...Legacy.RequestMeta.fields,
|
|
75
|
+
uri: Schema.String
|
|
76
|
+
}
|
|
77
|
+
}) {}
|
|
78
|
+
/**
|
|
79
|
+
* @internal
|
|
80
|
+
*/
|
|
81
|
+
export class LegacyReadResourceDirectory extends /*#__PURE__*/Rpc.make("resources/directory/read", {
|
|
82
|
+
success: /*#__PURE__*/Schema.Struct({
|
|
83
|
+
...Legacy.PaginatedResult.fields,
|
|
84
|
+
resources: /*#__PURE__*/Schema.Array(Legacy.Resource)
|
|
85
|
+
}),
|
|
86
|
+
error: Legacy.McpError,
|
|
87
|
+
payload: {
|
|
88
|
+
...Legacy.PaginatedRequest.fields,
|
|
89
|
+
uri: Schema.String
|
|
90
|
+
}
|
|
91
|
+
}) {}
|
|
92
|
+
/**
|
|
93
|
+
* The extension's methods on revisions before 2026-07-28, which have no
|
|
94
|
+
* result caching attributes.
|
|
95
|
+
*
|
|
96
|
+
* @internal
|
|
97
|
+
*/
|
|
98
|
+
export class LegacyRpcs extends /*#__PURE__*/RpcGroup.make(LegacyListSkills, LegacyGetSkill, LegacyReadResourceDirectory) {}
|
|
99
|
+
/**
|
|
100
|
+
* @internal
|
|
101
|
+
*/
|
|
102
|
+
export const ListSkillsResult = /*#__PURE__*/Schema.StructWithRest(/*#__PURE__*/Schema.Struct({
|
|
103
|
+
...Stateless.PaginatedResult,
|
|
104
|
+
...Stateless.CacheableResult,
|
|
105
|
+
skills: ListedSkills
|
|
106
|
+
}), [Stateless.UnknownObject]);
|
|
107
|
+
/**
|
|
108
|
+
* @internal
|
|
109
|
+
*/
|
|
110
|
+
export class ListSkills extends /*#__PURE__*/Rpc.make("skills/list", {
|
|
111
|
+
success: ListSkillsResult,
|
|
112
|
+
error: Stateless.McpError,
|
|
113
|
+
payload: Stateless.PaginatedRequestParams
|
|
114
|
+
}) {}
|
|
115
|
+
/**
|
|
116
|
+
* @internal
|
|
117
|
+
*/
|
|
118
|
+
export const GetSkillResult = /*#__PURE__*/Schema.StructWithRest(/*#__PURE__*/Schema.Struct({
|
|
119
|
+
...Stateless.CacheableResult,
|
|
120
|
+
skill: Skill
|
|
121
|
+
}), [Stateless.UnknownObject]);
|
|
122
|
+
/**
|
|
123
|
+
* @internal
|
|
124
|
+
*/
|
|
125
|
+
export class GetSkill extends /*#__PURE__*/Rpc.make("skills/get", {
|
|
126
|
+
success: GetSkillResult,
|
|
127
|
+
error: Stateless.McpError,
|
|
128
|
+
payload: {
|
|
129
|
+
...Stateless.RequestParams.fields,
|
|
130
|
+
uri: Schema.String
|
|
131
|
+
}
|
|
132
|
+
}) {}
|
|
133
|
+
/**
|
|
134
|
+
* @internal
|
|
135
|
+
*/
|
|
136
|
+
export const ReadResourceDirectoryResult = /*#__PURE__*/Schema.StructWithRest(/*#__PURE__*/Schema.Struct({
|
|
137
|
+
...Stateless.PaginatedResult,
|
|
138
|
+
...Stateless.CacheableResult,
|
|
139
|
+
resources: /*#__PURE__*/Schema.Array(Stateless.Resource)
|
|
140
|
+
}), [Stateless.UnknownObject]);
|
|
141
|
+
/**
|
|
142
|
+
* @internal
|
|
143
|
+
*/
|
|
144
|
+
export class ReadResourceDirectory extends /*#__PURE__*/Rpc.make("resources/directory/read", {
|
|
145
|
+
success: ReadResourceDirectoryResult,
|
|
146
|
+
error: Stateless.McpError,
|
|
147
|
+
payload: {
|
|
148
|
+
...Stateless.PaginatedRequestParams,
|
|
149
|
+
uri: Schema.String
|
|
150
|
+
}
|
|
151
|
+
}) {}
|
|
152
|
+
/**
|
|
153
|
+
* The extension's methods on revision 2026-07-28.
|
|
154
|
+
*
|
|
155
|
+
* @internal
|
|
156
|
+
*/
|
|
157
|
+
export class StatelessRpcs extends /*#__PURE__*/RpcGroup.make(ListSkills, GetSkill, ReadResourceDirectory) {}
|
|
158
|
+
// =============================================================================
|
|
159
|
+
// Handlers
|
|
160
|
+
// =============================================================================
|
|
161
|
+
const methodNotFound = method => new McpProtocol.ProtocolError({
|
|
162
|
+
code: PublicMcpSchema.METHOD_NOT_FOUND_ERROR_CODE,
|
|
163
|
+
message: `Method not found: ${method}`
|
|
164
|
+
});
|
|
165
|
+
// Every skill fits on one page, so the server never issues a cursor.
|
|
166
|
+
const unknownCursor = /*#__PURE__*/new McpProtocol.ProtocolError({
|
|
167
|
+
code: PublicMcpSchema.INVALID_PARAMS_ERROR_CODE,
|
|
168
|
+
message: "Unknown cursor"
|
|
169
|
+
});
|
|
170
|
+
/**
|
|
171
|
+
* Fails with `Method not found` while no skill is registered, as a server
|
|
172
|
+
* that does not declare the extension.
|
|
173
|
+
*
|
|
174
|
+
* @internal
|
|
175
|
+
*/
|
|
176
|
+
export const requireSkills = (core, method) => Effect.flatMap(core.registrationPresence, presence => presence.skills ? Effect.void : Effect.fail(methodNotFound(method)));
|
|
177
|
+
/**
|
|
178
|
+
* @internal
|
|
179
|
+
*/
|
|
180
|
+
export const rejectCursor = cursor => cursor === undefined ? Effect.void : Effect.fail(unknownCursor);
|
|
181
|
+
/**
|
|
182
|
+
* Handlers for {@link LegacyRpcs}, for the sessionful adapters.
|
|
183
|
+
*
|
|
184
|
+
* @internal
|
|
185
|
+
*/
|
|
186
|
+
export const legacyHandlers = core => ({
|
|
187
|
+
"skills/list": Effect.fnUntraced(function* (request) {
|
|
188
|
+
yield* requireSkills(core, "skills/list");
|
|
189
|
+
yield* rejectCursor(request?.cursor);
|
|
190
|
+
const skills = yield* McpProtocol.listForClient(core.skills.list);
|
|
191
|
+
return {
|
|
192
|
+
skills
|
|
193
|
+
};
|
|
194
|
+
}),
|
|
195
|
+
"skills/get": Effect.fnUntraced(function* (request) {
|
|
196
|
+
yield* requireSkills(core, "skills/get");
|
|
197
|
+
const client = yield* PublicMcpSchema.McpServerClient;
|
|
198
|
+
const skill = yield* core.skills.get(request.uri, McpProtocol.invocationFromClient(client)).pipe(Effect.mapError(McpProtocol.ProtocolError.fromFeature));
|
|
199
|
+
return {
|
|
200
|
+
skill
|
|
201
|
+
};
|
|
202
|
+
}),
|
|
203
|
+
"resources/directory/read": Effect.fnUntraced(function* (request) {
|
|
204
|
+
yield* requireSkills(core, "resources/directory/read");
|
|
205
|
+
yield* rejectCursor(request.cursor);
|
|
206
|
+
const client = yield* PublicMcpSchema.McpServerClient;
|
|
207
|
+
const resources = yield* core.skills.readDirectory(request.uri, McpProtocol.invocationFromClient(client)).pipe(Effect.mapError(McpProtocol.ProtocolError.fromFeature));
|
|
208
|
+
return {
|
|
209
|
+
resources
|
|
210
|
+
};
|
|
211
|
+
})
|
|
212
|
+
});
|
|
213
|
+
const TEXTUAL_APPLICATION_TYPES = /*#__PURE__*/new Set(["application/json", "application/yaml", "image/svg+xml"]);
|
|
214
|
+
/**
|
|
215
|
+
* @internal
|
|
216
|
+
*/
|
|
217
|
+
export const mimeTypeFor = path => {
|
|
218
|
+
// The standard table maps `.ts` to MPEG transport streams, but a skill's
|
|
219
|
+
// `.ts` files are TypeScript scripts.
|
|
220
|
+
if (/\.ts$/i.test(path)) return "text/x-typescript";
|
|
221
|
+
return Option.getOrElse(Mime.getType(path), () => "application/octet-stream");
|
|
222
|
+
};
|
|
223
|
+
// `ignoreBOM` keeps a leading BOM in the decoded text, so re-encoding the text
|
|
224
|
+
// reproduces exactly the bytes the manifest digest covers.
|
|
225
|
+
const utf8 = /*#__PURE__*/new TextDecoder("utf-8", {
|
|
226
|
+
fatal: true,
|
|
227
|
+
ignoreBOM: true
|
|
228
|
+
});
|
|
229
|
+
const decodeText = (mimeType, content) => {
|
|
230
|
+
if (!mimeType.startsWith("text/") && !TEXTUAL_APPLICATION_TYPES.has(mimeType)) {
|
|
231
|
+
return undefined;
|
|
232
|
+
}
|
|
233
|
+
try {
|
|
234
|
+
return utf8.decode(content);
|
|
235
|
+
} catch {
|
|
236
|
+
return undefined;
|
|
237
|
+
}
|
|
238
|
+
};
|
|
239
|
+
const isSafeRelativePath = path => path !== "" && !path.includes("\\") && path.split("/").every(segment => segment !== "" && segment !== "." && segment !== "..");
|
|
240
|
+
// The Agent Skills `name` rule: lowercase letters, digits and single hyphens,
|
|
241
|
+
// neither leading nor trailing, at most 64 characters.
|
|
242
|
+
const isSkillName = name => name.length <= 64 && /^[a-z0-9]+(?:-[a-z0-9]+)*$/.test(name);
|
|
243
|
+
const FRONTMATTER = /^\uFEFF?---\r?\n([\s\S]*?)\r?\n---[ \t]*(?:\r?\n|$)/;
|
|
244
|
+
/**
|
|
245
|
+
* The YAML frontmatter of a `SKILL.md`, or `undefined` when the file does not
|
|
246
|
+
* begin with a frontmatter block holding a YAML mapping.
|
|
247
|
+
*
|
|
248
|
+
* @internal
|
|
249
|
+
*/
|
|
250
|
+
export const parseFrontmatter = markdown => {
|
|
251
|
+
const block = FRONTMATTER.exec(markdown)?.[1];
|
|
252
|
+
if (block === undefined) return undefined;
|
|
253
|
+
try {
|
|
254
|
+
const parsed = Yaml.parse(block);
|
|
255
|
+
// The frontmatter is listed as JSON, so keep only what JSON carries:
|
|
256
|
+
// `.inf` and `.nan` become `null`.
|
|
257
|
+
return Predicate.isObject(parsed) ? JSON.parse(JSON.stringify(parsed)) : undefined;
|
|
258
|
+
} catch {
|
|
259
|
+
return undefined;
|
|
260
|
+
}
|
|
261
|
+
};
|
|
262
|
+
// The directory holding a skill's `SKILL.md`, given the `SKILL.md` URI.
|
|
263
|
+
const skillRoot = uri => uri.slice(0, -"/SKILL.md".length);
|
|
264
|
+
/**
|
|
265
|
+
* Whether `uri` addresses a file inside the skill whose `SKILL.md` is at
|
|
266
|
+
* `skillUri`.
|
|
267
|
+
*
|
|
268
|
+
* @internal
|
|
269
|
+
*/
|
|
270
|
+
export const isSkillFile = (skillUri, uri) => {
|
|
271
|
+
const root = skillRoot(skillUri);
|
|
272
|
+
return uri.startsWith(`${root}/`) && isSafeRelativePath(uri.slice(root.length + 1));
|
|
273
|
+
};
|
|
274
|
+
/**
|
|
275
|
+
* Why a skill entry received from a server breaks the extension's rules, or
|
|
276
|
+
* `undefined` when it is valid. Hosts must not load an invalid entry. The
|
|
277
|
+
* digest and size formats are checked by {@link PublicMcpSchema.SkillResource}.
|
|
278
|
+
*
|
|
279
|
+
* @internal
|
|
280
|
+
*/
|
|
281
|
+
export const entryProblem = entry => {
|
|
282
|
+
const schemeEnd = entry.uri.indexOf("://");
|
|
283
|
+
if (schemeEnd <= 0 || !entry.uri.endsWith("/SKILL.md")) return "the URI does not address a SKILL.md";
|
|
284
|
+
const root = skillRoot(entry.uri);
|
|
285
|
+
const skillPath = root.slice(schemeEnd + 3);
|
|
286
|
+
if (!isSafeRelativePath(skillPath)) return "the skill path has an empty, '.' or '..' segment";
|
|
287
|
+
const name = skillPath.split("/").at(-1);
|
|
288
|
+
if (entry.frontmatter.name !== name || !isSkillName(name)) {
|
|
289
|
+
return `the frontmatter name must equal "${name}" and follow the Agent Skills naming rules`;
|
|
290
|
+
}
|
|
291
|
+
const description = entry.frontmatter.description;
|
|
292
|
+
if (typeof description !== "string" || description === "" || description.length > 1024) {
|
|
293
|
+
return "the frontmatter description must be a string of 1 to 1024 characters";
|
|
294
|
+
}
|
|
295
|
+
if (entry.resources === "dynamic") return undefined;
|
|
296
|
+
const uris = new Set();
|
|
297
|
+
for (const resource of entry.resources) {
|
|
298
|
+
if (!isSkillFile(entry.uri, resource.uri)) return `${resource.uri} is not a file of the skill`;
|
|
299
|
+
if (uris.has(resource.uri)) return `${resource.uri} is listed twice`;
|
|
300
|
+
uris.add(resource.uri);
|
|
301
|
+
}
|
|
302
|
+
return uris.has(entry.uri) ? undefined : "the manifest does not list SKILL.md";
|
|
303
|
+
};
|
|
304
|
+
/**
|
|
305
|
+
* Whether `child` is a direct child of the directory at `directory`.
|
|
306
|
+
*
|
|
307
|
+
* @internal
|
|
308
|
+
*/
|
|
309
|
+
export const isDirectChild = (directory, child) => {
|
|
310
|
+
if (!child.startsWith(`${directory}/`)) return false;
|
|
311
|
+
const name = child.slice(directory.length + 1);
|
|
312
|
+
return name !== "" && name !== "." && name !== ".." && !name.includes("/");
|
|
313
|
+
};
|
|
314
|
+
const decodeFrontmatter = /*#__PURE__*/Schema.decodeUnknownEffect(PublicMcpSchema.SkillFrontmatter);
|
|
315
|
+
/**
|
|
316
|
+
* Validates a static skill against the extension's server requirements and
|
|
317
|
+
* precomputes what the protocol serves: the manifest, with digests over the
|
|
318
|
+
* exact bytes served, each file's resource metadata, and the directory tree
|
|
319
|
+
* from the namespace root down.
|
|
320
|
+
*
|
|
321
|
+
* @internal
|
|
322
|
+
*/
|
|
323
|
+
export const makeStaticSkill = options => Effect.gen(function* () {
|
|
324
|
+
const {
|
|
325
|
+
uri
|
|
326
|
+
} = options;
|
|
327
|
+
const fail = reason => Effect.fail(new Cause.IllegalArgumentError(`Skill ${uri}: ${reason}`));
|
|
328
|
+
const schemeEnd = uri.indexOf("://");
|
|
329
|
+
if (schemeEnd <= 0 || !uri.endsWith("/SKILL.md")) {
|
|
330
|
+
return yield* fail("the URI must have the form <scheme>://<skill-path>/SKILL.md");
|
|
331
|
+
}
|
|
332
|
+
const scheme = uri.slice(0, schemeEnd + 3);
|
|
333
|
+
const skillPath = uri.slice(scheme.length, -"/SKILL.md".length);
|
|
334
|
+
if (!isSafeRelativePath(skillPath)) {
|
|
335
|
+
return yield* fail("the skill path must have no empty, '.' or '..' segment");
|
|
336
|
+
}
|
|
337
|
+
const name = skillPath.split("/").at(-1);
|
|
338
|
+
if (options.files.length > MAX_FILES_PER_SKILL) {
|
|
339
|
+
return yield* fail(`it has ${options.files.length} files; the limit is ${MAX_FILES_PER_SKILL}`);
|
|
340
|
+
}
|
|
341
|
+
const totalBytes = options.files.reduce((sum, file) => sum + file.content.byteLength, 0);
|
|
342
|
+
if (totalBytes > MAX_BYTES_PER_SKILL) {
|
|
343
|
+
return yield* fail(`it has ${totalBytes} bytes; the limit is ${MAX_BYTES_PER_SKILL}`);
|
|
344
|
+
}
|
|
345
|
+
const paths = new Set();
|
|
346
|
+
for (const file of options.files) {
|
|
347
|
+
if (!isSafeRelativePath(file.path)) return yield* fail(`the file path "${file.path}" escapes the skill`);
|
|
348
|
+
if (paths.has(file.path)) return yield* fail(`the file "${file.path}" is given twice`);
|
|
349
|
+
paths.add(file.path);
|
|
350
|
+
}
|
|
351
|
+
const skillMd = options.files.find(file => file.path === "SKILL.md");
|
|
352
|
+
if (skillMd === undefined) return yield* fail("SKILL.md is missing");
|
|
353
|
+
// The listed frontmatter is parsed from the served SKILL.md, so the two
|
|
354
|
+
// cannot differ.
|
|
355
|
+
const frontmatter = parseFrontmatter(decodeText("text/markdown", skillMd.content) ?? "");
|
|
356
|
+
if (frontmatter === undefined) return yield* fail("SKILL.md must begin with YAML frontmatter holding a mapping");
|
|
357
|
+
if (frontmatter.name !== name) {
|
|
358
|
+
return yield* fail(`the frontmatter name ${JSON.stringify(frontmatter.name)} must equal "${name}"`);
|
|
359
|
+
}
|
|
360
|
+
// A skill served over MCP must conform to the Agent Skills specification.
|
|
361
|
+
const {
|
|
362
|
+
description
|
|
363
|
+
} = yield* decodeFrontmatter(frontmatter).pipe(Effect.catch(error => fail(`the frontmatter is not valid Agent Skills frontmatter: ${error.message}`)));
|
|
364
|
+
const digest = yield* Digest.Digest;
|
|
365
|
+
const sorted = [...options.files].sort((a, b) => a.path < b.path ? -1 : a.path > b.path ? 1 : 0);
|
|
366
|
+
const resources = [];
|
|
367
|
+
const files = [];
|
|
368
|
+
const children = new Map();
|
|
369
|
+
for (const file of sorted) {
|
|
370
|
+
const fileUri = `${scheme}${skillPath}/${file.path}`;
|
|
371
|
+
const fileDigest = `sha256:${yield* digest.digestHex(Digest.sha256, file.content)}`;
|
|
372
|
+
const mimeType = file.mimeType ?? mimeTypeFor(file.path);
|
|
373
|
+
const size = file.content.byteLength;
|
|
374
|
+
const resource = file.path === "SKILL.md" ? {
|
|
375
|
+
uri: fileUri,
|
|
376
|
+
name,
|
|
377
|
+
description,
|
|
378
|
+
mimeType,
|
|
379
|
+
size
|
|
380
|
+
} : {
|
|
381
|
+
uri: fileUri,
|
|
382
|
+
name: file.path.split("/").at(-1),
|
|
383
|
+
mimeType,
|
|
384
|
+
size
|
|
385
|
+
};
|
|
386
|
+
files.push({
|
|
387
|
+
resource,
|
|
388
|
+
content: file.content,
|
|
389
|
+
text: decodeText(mimeType, file.content)
|
|
390
|
+
});
|
|
391
|
+
resources.push({
|
|
392
|
+
uri: fileUri,
|
|
393
|
+
digest: fileDigest,
|
|
394
|
+
size
|
|
395
|
+
});
|
|
396
|
+
// Every directory from the namespace root down is readable, including
|
|
397
|
+
// the prefix directories above the skill root.
|
|
398
|
+
const segments = `${skillPath}/${file.path}`.split("/");
|
|
399
|
+
for (let depth = 1; depth < segments.length; depth++) {
|
|
400
|
+
const directory = `${scheme}${segments.slice(0, depth).join("/")}`;
|
|
401
|
+
const child = depth === segments.length - 1 ? resource : {
|
|
402
|
+
uri: `${scheme}${segments.slice(0, depth + 1).join("/")}`,
|
|
403
|
+
name: segments[depth],
|
|
404
|
+
mimeType: DIRECTORY_MIME_TYPE
|
|
405
|
+
};
|
|
406
|
+
let siblings = children.get(directory);
|
|
407
|
+
if (siblings === undefined) {
|
|
408
|
+
siblings = new Map();
|
|
409
|
+
children.set(directory, siblings);
|
|
410
|
+
}
|
|
411
|
+
siblings.set(child.uri, child);
|
|
412
|
+
}
|
|
413
|
+
}
|
|
414
|
+
const directories = new Map();
|
|
415
|
+
for (const [directory, siblings] of children) {
|
|
416
|
+
directories.set(directory, Array.from(siblings.values()));
|
|
417
|
+
}
|
|
418
|
+
return {
|
|
419
|
+
entry: {
|
|
420
|
+
uri,
|
|
421
|
+
frontmatter,
|
|
422
|
+
resources
|
|
423
|
+
},
|
|
424
|
+
files,
|
|
425
|
+
directories
|
|
426
|
+
};
|
|
427
|
+
});
|
|
428
|
+
//# sourceMappingURL=mcpSkills.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"mcpSkills.js","names":[],"sources":["../../../src/ai/internal/mcpSkills.ts"],"sourcesContent":[null],"mappings":"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","ignoreList":[]}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ClusterWorkflowEngine.d.ts","sourceRoot":"","sources":["../../src/cluster/ClusterWorkflowEngine.ts"],"names":[],"mappings":"AAcA,OAAO,KAAK,MAAM,MAAM,cAAc,CAAA;AACtC,OAAO,KAAK,IAAI,MAAM,YAAY,CAAA;AAGlC,OAAO,KAAK,KAAK,MAAM,aAAa,CAAA;AACpC,OAAO,KAAK,MAAM,MAAM,cAAc,CAAA;AAMtC,OAAO,KAAK,QAAQ,MAAM,gBAAgB,CAAA;AAC1C,OAAO,KAAK,MAAM,MAAM,cAAc,CAAA;AACtC,OAAO,KAAK,KAAK,MAAM,aAAa,CAAA;AAEpC,OAAO,KAAK,QAAQ,MAAM,yBAAyB,CAAA;AACnD,OAAO,KAAK,YAAY,MAAM,6BAA6B,CAAA;AAC3D,OAAO,KAAK,eAAe,MAAM,gCAAgC,CAAA;AACjE,OAAO,KAAK,QAAQ,MAAM,yBAAyB,CAAA;AACnD,OAAO,KAAK,cAAc,MAAM,+BAA+B,CAAA;AAW/D,OAAO,EAAE,cAAc,EAAE,MAAM,qBAAqB,CAAA;AAGpD,OAAO,KAAK,QAAQ,MAAM,eAAe,CAAA;AAGzC;;;;;;;;;;;;GAYG;AACH,eAAO,MAAM,IAAI;;;;;;;;;;;;;;;;;;;;;;;;;
|
|
1
|
+
{"version":3,"file":"ClusterWorkflowEngine.d.ts","sourceRoot":"","sources":["../../src/cluster/ClusterWorkflowEngine.ts"],"names":[],"mappings":"AAcA,OAAO,KAAK,MAAM,MAAM,cAAc,CAAA;AACtC,OAAO,KAAK,IAAI,MAAM,YAAY,CAAA;AAGlC,OAAO,KAAK,KAAK,MAAM,aAAa,CAAA;AACpC,OAAO,KAAK,MAAM,MAAM,cAAc,CAAA;AAMtC,OAAO,KAAK,QAAQ,MAAM,gBAAgB,CAAA;AAC1C,OAAO,KAAK,MAAM,MAAM,cAAc,CAAA;AACtC,OAAO,KAAK,KAAK,MAAM,aAAa,CAAA;AAEpC,OAAO,KAAK,QAAQ,MAAM,yBAAyB,CAAA;AACnD,OAAO,KAAK,YAAY,MAAM,6BAA6B,CAAA;AAC3D,OAAO,KAAK,eAAe,MAAM,gCAAgC,CAAA;AACjE,OAAO,KAAK,QAAQ,MAAM,yBAAyB,CAAA;AACnD,OAAO,KAAK,cAAc,MAAM,+BAA+B,CAAA;AAW/D,OAAO,EAAE,cAAc,EAAE,MAAM,qBAAqB,CAAA;AAGpD,OAAO,KAAK,QAAQ,MAAM,eAAe,CAAA;AAGzC;;;;;;;;;;;;GAYG;AACH,eAAO,MAAM,IAAI;;;;;;;;;;;;;;;;;;;;;;;;;2DAs1Bf,CAAA;AAwLF;;;;;;;;;;;;GAYG;AACH,eAAO,MAAM,KAAK,EAAE,KAAK,CAAC,KAAK,CAC7B,cAAc,CAAC,cAAc,EAC7B,KAAK,EACL,QAAQ,CAAC,QAAQ,GAAG,cAAc,CAGnC,CAAA"}
|
|
@@ -396,8 +396,9 @@ export const make = /*#__PURE__*/Effect.gen(function* () {
|
|
|
396
396
|
if (instance.abandoned) {
|
|
397
397
|
instance.suspended = false;
|
|
398
398
|
}
|
|
399
|
+
// Abandoned runs never wake the parent; another owner replays them.
|
|
400
|
+
const resumeParent = parent && !parent.detached && !instance.abandoned ? ensureSuccess(sendResumeParent(parent, executionId)) : Effect.void;
|
|
399
401
|
if (!instance.suspended && !instance.abandoned && !(suspendOnFailure && exit._tag === "Failure")) {
|
|
400
|
-
const resumeParent = parent && !parent.detached ? ensureSuccess(sendResumeParent(parent, executionId)) : Effect.void;
|
|
401
402
|
if (exit._tag === "Success" || !Cause.hasInterruptsOnly(exit.cause)) {
|
|
402
403
|
return resumeParent;
|
|
403
404
|
}
|
|
@@ -419,10 +420,12 @@ export const make = /*#__PURE__*/Effect.gen(function* () {
|
|
|
419
420
|
}
|
|
420
421
|
instance.suspended = false;
|
|
421
422
|
instance.interrupted = true;
|
|
422
|
-
|
|
423
|
+
// The interrupt completes the run, so wake the parent
|
|
424
|
+
// to observe it.
|
|
425
|
+
return Effect.ignore(clearClock({
|
|
423
426
|
workflow,
|
|
424
427
|
executionId
|
|
425
|
-
})), Effect.withFiber(fiber => Effect.interruptible(Fiber.interrupt(fiber))));
|
|
428
|
+
})).pipe(Effect.andThen(resumeParent), Effect.andThen(Effect.withFiber(fiber => Effect.interruptible(Fiber.interrupt(fiber)))));
|
|
426
429
|
}), Effect.orDie);
|
|
427
430
|
}), Workflow.intoResult, Effect.onExit(exit => Exit.isSuccess(exit) && exit.value._tag === "Suspended" ? Effect.void : closeRuns(pending, instance.abandoned)), effect => deferredState.trackRun(instance, effect),
|
|
428
431
|
// Request middleware and local callers may carry another entity's context.
|
|
@@ -565,7 +568,7 @@ export const make = /*#__PURE__*/Effect.gen(function* () {
|
|
|
565
568
|
// A pending interrupt replays only to rebuild compensations, so it must
|
|
566
569
|
// not run new activities. Finalizers run once `interrupted` is set.
|
|
567
570
|
if (!instance.interrupted && (yield* interruptPending(instance))) {
|
|
568
|
-
const reply = yield*
|
|
571
|
+
const reply = yield* retryPersistence(requestReply({
|
|
569
572
|
workflow: instance.workflow,
|
|
570
573
|
entityType: `Workflow/${instance.workflow._tag}`,
|
|
571
574
|
executionId: instance.executionId,
|
|
@@ -585,7 +588,7 @@ export const make = /*#__PURE__*/Effect.gen(function* () {
|
|
|
585
588
|
context: services
|
|
586
589
|
});
|
|
587
590
|
}
|
|
588
|
-
const result = yield*
|
|
591
|
+
const result = yield* retryPersistence(client.activity({
|
|
589
592
|
name: activity.name,
|
|
590
593
|
attempt,
|
|
591
594
|
withTransaction: Context.get(activity.annotations, ClusterSchema.WithTransaction)
|
|
@@ -696,6 +699,13 @@ export const make = /*#__PURE__*/Effect.gen(function* () {
|
|
|
696
699
|
return engine;
|
|
697
700
|
});
|
|
698
701
|
const retryPolicy = /*#__PURE__*/Schedule.min([/*#__PURE__*/Schedule.exponential(200, 1.5), /*#__PURE__*/Schedule.spaced("1 minute")]);
|
|
702
|
+
// A transient storage failure must not become the workflow result. Requests
|
|
703
|
+
// are saved under a primary key, so a retry after a lost acknowledgement is
|
|
704
|
+
// deduplicated instead of running the activity again.
|
|
705
|
+
const retryPersistence = effect => effect.pipe(Effect.retry({
|
|
706
|
+
schedule: retryPolicy,
|
|
707
|
+
while: e => e._tag === "PersistenceError"
|
|
708
|
+
}), Effect.orDie);
|
|
699
709
|
// A cluster abandonment means this owner can no longer complete the effect, so
|
|
700
710
|
// retrying it would only wait on a retired run. Re-raise it as an annotated
|
|
701
711
|
// interrupt, so the activation can unwind and its shard can be released.
|