@executioncontrolprotocol/format-toon 0.10.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.
@@ -0,0 +1,10 @@
1
+ import type { DecodeResult, EcpDecodeInput } from "@executioncontrolprotocol/types";
2
+ import { type UtilityCapabilityContext } from "@executioncontrolprotocol/core";
3
+ /**
4
+ * Decode TOON text to an ECP document via `@toon-format/toon`.
5
+ * @category Encoding
6
+ */
7
+ export declare function decodeFromToon(input: EcpDecodeInput, _ctx: UtilityCapabilityContext): DecodeResult;
8
+ /** @deprecated Use {@link decodeFromToon}. @category Encoding */
9
+ export declare const decodeToonToWorkflow: typeof decodeFromToon;
10
+ //# sourceMappingURL=decode.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"decode.d.ts","sourceRoot":"","sources":["../src/decode.ts"],"names":[],"mappings":"AAIA,OAAO,KAAK,EAAE,YAAY,EAAE,cAAc,EAAa,MAAM,iCAAiC,CAAA;AAC9F,OAAO,EAA6C,KAAK,wBAAwB,EAAE,MAAM,gCAAgC,CAAA;AAmBzH;;;GAGG;AACH,wBAAgB,cAAc,CAC5B,KAAK,EAAE,cAAc,EACrB,IAAI,EAAE,wBAAwB,GAC7B,YAAY,CAwDd;AAED,iEAAiE;AACjE,eAAO,MAAM,oBAAoB,uBAAiB,CAAA"}
package/dist/decode.js ADDED
@@ -0,0 +1,73 @@
1
+ import { ECP_ENCODING_ERROR_CODES, LATEST_ECP_VERSION, } from "@executioncontrolprotocol/types";
2
+ import { EcpError, decodeFailure, validateWorkflow } from "@executioncontrolprotocol/core";
3
+ import { decodeDocumentFromToon } from "./toon-codec.js";
4
+ import { validateEcpDocument, validationToDiagnostics } from "./validate-document.js";
5
+ import { getEcpSchema } from "./schema.js";
6
+ function wrapHeaderless(document, targetSchema) {
7
+ if (document !== null && typeof document === "object" && "schema" in document) {
8
+ return document;
9
+ }
10
+ return {
11
+ schema: targetSchema,
12
+ version: LATEST_ECP_VERSION,
13
+ ...document,
14
+ };
15
+ }
16
+ /**
17
+ * Decode TOON text to an ECP document via `@toon-format/toon`.
18
+ * @category Encoding
19
+ */
20
+ export function decodeFromToon(input, _ctx) {
21
+ const targetSchema = input.targetSchema ?? "@executioncontrolprotocol.workflow";
22
+ const content = String(input.input);
23
+ const headersOpt = input.options?.headers ?? "auto";
24
+ const hasHeaders = headersOpt === true || (headersOpt === "auto" && /^\s*schema\s*:/m.test(content));
25
+ let document;
26
+ try {
27
+ document = decodeDocumentFromToon(content, {
28
+ strict: input.options?.strict ?? true,
29
+ compact: input.options?.compact ?? false,
30
+ });
31
+ }
32
+ catch (err) {
33
+ const message = err instanceof Error ? err.message : String(err);
34
+ return decodeFailure({
35
+ targetSchema,
36
+ diagnostics: [
37
+ {
38
+ severity: "error",
39
+ code: ECP_ENCODING_ERROR_CODES.FORMAT_DECODE_FAILED,
40
+ message: `TOON decode failed: ${message}`,
41
+ },
42
+ ],
43
+ });
44
+ }
45
+ if (!hasHeaders) {
46
+ document = wrapHeaderless(document, targetSchema);
47
+ }
48
+ let validation = validateEcpDocument(document, targetSchema);
49
+ if (targetSchema === "@executioncontrolprotocol.workflow") {
50
+ validation = validateWorkflow(document);
51
+ }
52
+ const diagnostics = validationToDiagnostics(validation);
53
+ const success = validation.valid;
54
+ if (!success && input.options?.strict) {
55
+ throw new EcpError(ECP_ENCODING_ERROR_CODES.FORMAT_DECODE_FAILED, {
56
+ message: `Decoded document failed validation for ${targetSchema}.`,
57
+ diagnostics: validation.errors,
58
+ });
59
+ }
60
+ return {
61
+ schema: "@executioncontrolprotocol.decode.result",
62
+ version: LATEST_ECP_VERSION,
63
+ success,
64
+ targetSchema: getEcpSchema(document) ?? targetSchema,
65
+ targetVersion: input.targetVersion,
66
+ result: document,
67
+ validation,
68
+ diagnostics: [...diagnostics, ...validation.errors, ...validation.warnings],
69
+ };
70
+ }
71
+ /** @deprecated Use {@link decodeFromToon}. @category Encoding */
72
+ export const decodeToonToWorkflow = decodeFromToon;
73
+ //# sourceMappingURL=decode.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"decode.js","sourceRoot":"","sources":["../src/decode.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,10 @@
1
+ import type { EcpEncodeInput, EncodeResult } from "@executioncontrolprotocol/types";
2
+ import { type UtilityCapabilityContext } from "@executioncontrolprotocol/core";
3
+ /**
4
+ * Encode document to TOON via `@toon-format/toon`.
5
+ * @category Encoding
6
+ */
7
+ export declare function encodeToToon(input: EcpEncodeInput, _ctx: UtilityCapabilityContext): EncodeResult<string>;
8
+ /** @deprecated Use {@link encodeToToon}. @category Encoding */
9
+ export declare const encodeWorkflowToToon: typeof encodeToToon;
10
+ //# sourceMappingURL=encode.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"encode.d.ts","sourceRoot":"","sources":["../src/encode.ts"],"names":[],"mappings":"AAKA,OAAO,KAAK,EAAE,cAAc,EAAE,YAAY,EAAE,MAAM,iCAAiC,CAAA;AACnF,OAAO,EAA6C,KAAK,wBAAwB,EAAE,MAAM,gCAAgC,CAAA;AAWzH;;;GAGG;AACH,wBAAgB,YAAY,CAC1B,KAAK,EAAE,cAAc,EACrB,IAAI,EAAE,wBAAwB,GAC7B,YAAY,CAAC,MAAM,CAAC,CA4CtB;AAED,+DAA+D;AAC/D,eAAO,MAAM,oBAAoB,qBAAe,CAAA"}
package/dist/encode.js ADDED
@@ -0,0 +1,59 @@
1
+ import { ECP_ENCODING_ERROR_CODES, ECP_FORMATS, LATEST_ECP_VERSION, } from "@executioncontrolprotocol/types";
2
+ import { EcpError, encodeFailure, validateWorkflow } from "@executioncontrolprotocol/core";
3
+ import { encodeDocumentToToon } from "./toon-codec.js";
4
+ import { validateEcpDocument, validationToDiagnostics } from "./validate-document.js";
5
+ function stripDocumentHeaders(doc) {
6
+ const rest = { ...doc };
7
+ delete rest.schema;
8
+ delete rest.version;
9
+ return rest;
10
+ }
11
+ /**
12
+ * Encode document to TOON via `@toon-format/toon`.
13
+ * @category Encoding
14
+ */
15
+ export function encodeToToon(input, _ctx) {
16
+ const sourceSchema = input.sourceSchema;
17
+ const validation = validateEcpDocument(input.source, sourceSchema);
18
+ const diagnostics = validationToDiagnostics(validation);
19
+ if (sourceSchema === "@executioncontrolprotocol.workflow") {
20
+ const wfValidation = validateWorkflow(input.source);
21
+ if (!wfValidation.valid) {
22
+ return encodeFailure({
23
+ format: ECP_FORMATS.TOON,
24
+ sourceSchema,
25
+ validation: wfValidation,
26
+ diagnostics: [...diagnostics, ...wfValidation.errors, ...wfValidation.warnings],
27
+ });
28
+ }
29
+ }
30
+ const headers = input.options?.headers !== false;
31
+ const compact = input.options?.compact ?? false;
32
+ try {
33
+ let payload = input.source;
34
+ if (!headers && payload !== null && typeof payload === "object") {
35
+ payload = stripDocumentHeaders(payload);
36
+ }
37
+ const content = encodeDocumentToToon(payload, { compact });
38
+ return {
39
+ schema: "@executioncontrolprotocol.encode.result",
40
+ version: LATEST_ECP_VERSION,
41
+ success: true,
42
+ format: ECP_FORMATS.TOON,
43
+ mediaType: "text/ecp-toon",
44
+ sourceSchema,
45
+ sourceVersion: input.sourceVersion,
46
+ result: content,
47
+ diagnostics,
48
+ };
49
+ }
50
+ catch (err) {
51
+ const message = err instanceof Error ? err.message : String(err);
52
+ throw new EcpError(ECP_ENCODING_ERROR_CODES.FORMAT_ENCODE_FAILED, {
53
+ message: `TOON encode failed: ${message}`,
54
+ });
55
+ }
56
+ }
57
+ /** @deprecated Use {@link encodeToToon}. @category Encoding */
58
+ export const encodeWorkflowToToon = encodeToToon;
59
+ //# sourceMappingURL=encode.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"encode.js","sourceRoot":"","sources":["../src/encode.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,wBAAwB,EACxB,WAAW,EACX,kBAAkB,GACnB,MAAM,iCAAiC,CAAA;AAExC,OAAO,EAAE,QAAQ,EAAE,aAAa,EAAE,gBAAgB,EAAiC,MAAM,gCAAgC,CAAA;AACzH,OAAO,EAAE,oBAAoB,EAAE,MAAM,iBAAiB,CAAA;AACtD,OAAO,EAAE,mBAAmB,EAAE,uBAAuB,EAAE,MAAM,wBAAwB,CAAA;AAErF,SAAS,oBAAoB,CAAC,GAA4B;IACxD,MAAM,IAAI,GAAG,EAAE,GAAG,GAAG,EAAE,CAAA;IACvB,OAAO,IAAI,CAAC,MAAM,CAAA;IAClB,OAAO,IAAI,CAAC,OAAO,CAAA;IACnB,OAAO,IAAI,CAAA;AACb,CAAC;AAED;;;GAGG;AACH,MAAM,UAAU,YAAY,CAC1B,KAAqB,EACrB,IAA8B;IAE9B,MAAM,YAAY,GAAG,KAAK,CAAC,YAAY,CAAA;IACvC,MAAM,UAAU,GAAG,mBAAmB,CAAC,KAAK,CAAC,MAAM,EAAE,YAAY,CAAC,CAAA;IAClE,MAAM,WAAW,GAAG,uBAAuB,CAAC,UAAU,CAAC,CAAA;IAEvD,IAAI,YAAY,KAAK,oCAAoC,EAAE,CAAC;QAC1D,MAAM,YAAY,GAAG,gBAAgB,CAAC,KAAK,CAAC,MAAoE,CAAC,CAAA;QACjH,IAAI,CAAC,YAAY,CAAC,KAAK,EAAE,CAAC;YACxB,OAAO,aAAa,CAAC;gBACnB,MAAM,EAAE,WAAW,CAAC,IAAI;gBACxB,YAAY;gBACZ,UAAU,EAAE,YAAY;gBACxB,WAAW,EAAE,CAAC,GAAG,WAAW,EAAE,GAAG,YAAY,CAAC,MAAM,EAAE,GAAG,YAAY,CAAC,QAAQ,CAAC;aAChF,CAAC,CAAA;QACJ,CAAC;IACH,CAAC;IAED,MAAM,OAAO,GAAG,KAAK,CAAC,OAAO,EAAE,OAAO,KAAK,KAAK,CAAA;IAChD,MAAM,OAAO,GAAG,KAAK,CAAC,OAAO,EAAE,OAAO,IAAI,KAAK,CAAA;IAE/C,IAAI,CAAC;QACH,IAAI,OAAO,GAAG,KAAK,CAAC,MAAM,CAAA;QAC1B,IAAI,CAAC,OAAO,IAAI,OAAO,KAAK,IAAI,IAAI,OAAO,OAAO,KAAK,QAAQ,EAAE,CAAC;YAChE,OAAO,GAAG,oBAAoB,CAAC,OAAkC,CAAC,CAAA;QACpE,CAAC;QACD,MAAM,OAAO,GAAG,oBAAoB,CAAC,OAAO,EAAE,EAAE,OAAO,EAAE,CAAC,CAAA;QAE1D,OAAO;YACL,MAAM,EAAE,yCAAyC;YACjD,OAAO,EAAE,kBAAkB;YAC3B,OAAO,EAAE,IAAI;YACb,MAAM,EAAE,WAAW,CAAC,IAAI;YACxB,SAAS,EAAE,eAAe;YAC1B,YAAY;YACZ,aAAa,EAAE,KAAK,CAAC,aAAa;YAClC,MAAM,EAAE,OAAO;YACf,WAAW;SACZ,CAAA;IACH,CAAC;IAAC,OAAO,GAAG,EAAE,CAAC;QACb,MAAM,OAAO,GAAG,GAAG,YAAY,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC,CAAA;QAChE,MAAM,IAAI,QAAQ,CAAC,wBAAwB,CAAC,oBAAoB,EAAE;YAChE,OAAO,EAAE,uBAAuB,OAAO,EAAE;SAC1C,CAAC,CAAA;IACJ,CAAC;AACH,CAAC;AAED,+DAA+D;AAC/D,MAAM,CAAC,MAAM,oBAAoB,GAAG,YAAY,CAAA"}
@@ -0,0 +1,3 @@
1
+ /** TOON format extension definition. @category Extensions */
2
+ export declare const formatToonExtension: import("@executioncontrolprotocol/core").ExtensionDefinition;
3
+ //# sourceMappingURL=extension.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"extension.d.ts","sourceRoot":"","sources":["../src/extension.ts"],"names":[],"mappings":"AAWA,6DAA6D;AAC7D,eAAO,MAAM,mBAAmB,8DAYtB,CAAA"}
@@ -0,0 +1,17 @@
1
+ import { capabilityFor, defineExtension, ecpDecodeInputSchema, ecpDecodeResultSchema, ecpEncodeInputSchema, ecpEncodeResultSchema, } from "@executioncontrolprotocol/core";
2
+ import { decodeFromToon } from "./decode.js";
3
+ import { encodeToToon } from "./encode.js";
4
+ /** TOON format extension definition. @category Extensions */
5
+ export const formatToonExtension = defineExtension("@executioncontrolprotocol", "format-toon")
6
+ .withCapabilities([
7
+ capabilityFor("@executioncontrolprotocol/format-toon", "encode")
8
+ .withInput(ecpEncodeInputSchema)
9
+ .withOutput(ecpEncodeResultSchema)
10
+ .withHandler((input, ctx) => encodeToToon(input, ctx)),
11
+ capabilityFor("@executioncontrolprotocol/format-toon", "decode")
12
+ .withInput(ecpDecodeInputSchema)
13
+ .withOutput(ecpDecodeResultSchema)
14
+ .withHandler((input, ctx) => decodeFromToon(input, ctx)),
15
+ ])
16
+ .build();
17
+ //# sourceMappingURL=extension.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"extension.js","sourceRoot":"","sources":["../src/extension.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,aAAa,EACb,eAAe,EACf,oBAAoB,EACpB,qBAAqB,EACrB,oBAAoB,EACpB,qBAAqB,GACtB,MAAM,gCAAgC,CAAA;AACvC,OAAO,EAAE,cAAc,EAAE,MAAM,aAAa,CAAA;AAC5C,OAAO,EAAE,YAAY,EAAE,MAAM,aAAa,CAAA;AAE1C,6DAA6D;AAC7D,MAAM,CAAC,MAAM,mBAAmB,GAAG,eAAe,CAAC,2BAA2B,EAAE,aAAa,CAAC;KAC3F,gBAAgB,CAAC;IAChB,aAAa,CAAC,uCAAuC,EAAE,QAAQ,CAAC;SAC7D,SAAS,CAAC,oBAAoB,CAAC;SAC/B,UAAU,CAAC,qBAAqB,CAAC;SACjC,WAAW,CAAC,CAAC,KAAK,EAAE,GAAG,EAAE,EAAE,CAAC,YAAY,CAAC,KAAiE,EAAE,GAAY,CAAC,CAAC;IAE7H,aAAa,CAAC,uCAAuC,EAAE,QAAQ,CAAC;SAC7D,SAAS,CAAC,oBAAoB,CAAC;SAC/B,UAAU,CAAC,qBAAqB,CAAC;SACjC,WAAW,CAAC,CAAC,KAAK,EAAE,GAAG,EAAE,EAAE,CAAC,cAAc,CAAC,KAAiE,EAAE,GAAY,CAAC,CAAC;CAChI,CAAC;KACD,KAAK,EAAE,CAAA"}
@@ -0,0 +1,11 @@
1
+ import { formatToonExtension } from "./extension.js";
2
+ export { formatToonExtension } from "./extension.js";
3
+ export { encodeToToon, encodeWorkflowToToon } from "./encode.js";
4
+ export { decodeFromToon, decodeToonToWorkflow } from "./decode.js";
5
+ export { encodeDocumentToToon, decodeDocumentFromToon, type EncodeDocumentToToonOptions, type DecodeDocumentFromToonOptions, } from "./toon-codec.js";
6
+ export { validateEcpDocument, validationToDiagnostics, TOON_VALIDATED_ECP_SCHEMAS, environmentManifestSchema, environmentDescribeSchema, environmentSearchSchema, type ToonValidatedEcpSchema, } from "./validate-document.js";
7
+ export { getEcpSchema } from "./schema.js";
8
+ /** Register TOON format extension on the registry. @category Extensions */
9
+ export declare function registerFormatToonExtension(registry?: import("@executioncontrolprotocol/core").Registry): Promise<void>;
10
+ export default formatToonExtension;
11
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,mBAAmB,EAAE,MAAM,gBAAgB,CAAA;AAIpD,OAAO,EAAE,mBAAmB,EAAE,MAAM,gBAAgB,CAAA;AACpD,OAAO,EAAE,YAAY,EAAE,oBAAoB,EAAE,MAAM,aAAa,CAAA;AAChE,OAAO,EAAE,cAAc,EAAE,oBAAoB,EAAE,MAAM,aAAa,CAAA;AAClE,OAAO,EACL,oBAAoB,EACpB,sBAAsB,EACtB,KAAK,2BAA2B,EAChC,KAAK,6BAA6B,GACnC,MAAM,iBAAiB,CAAA;AACxB,OAAO,EACL,mBAAmB,EACnB,uBAAuB,EACvB,0BAA0B,EAC1B,yBAAyB,EACzB,yBAAyB,EACzB,uBAAuB,EACvB,KAAK,sBAAsB,GAC5B,MAAM,wBAAwB,CAAA;AAC/B,OAAO,EAAE,YAAY,EAAE,MAAM,aAAa,CAAA;AAE1C,2EAA2E;AAC3E,wBAAsB,2BAA2B,CAC/C,QAAQ,oDAAiB,GACxB,OAAO,CAAC,IAAI,CAAC,CAIf;AAED,eAAe,mBAAmB,CAAA"}
package/dist/index.js ADDED
@@ -0,0 +1,17 @@
1
+ import { catalogExtension, globalRegistry } from "@executioncontrolprotocol/core";
2
+ import { formatToonExtension } from "./extension.js";
3
+ catalogExtension(formatToonExtension);
4
+ export { formatToonExtension } from "./extension.js";
5
+ export { encodeToToon, encodeWorkflowToToon } from "./encode.js";
6
+ export { decodeFromToon, decodeToonToWorkflow } from "./decode.js";
7
+ export { encodeDocumentToToon, decodeDocumentFromToon, } from "./toon-codec.js";
8
+ export { validateEcpDocument, validationToDiagnostics, TOON_VALIDATED_ECP_SCHEMAS, environmentManifestSchema, environmentDescribeSchema, environmentSearchSchema, } from "./validate-document.js";
9
+ export { getEcpSchema } from "./schema.js";
10
+ /** Register TOON format extension on the registry. @category Extensions */
11
+ export async function registerFormatToonExtension(registry = globalRegistry) {
12
+ if (!registry.getExtension("@executioncontrolprotocol/format-toon")) {
13
+ await registry.registerExtension(formatToonExtension);
14
+ }
15
+ }
16
+ export default formatToonExtension;
17
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,gBAAgB,EAAE,cAAc,EAAE,MAAM,gCAAgC,CAAA;AACjF,OAAO,EAAE,mBAAmB,EAAE,MAAM,gBAAgB,CAAA;AAEpD,gBAAgB,CAAC,mBAAmB,CAAC,CAAA;AAErC,OAAO,EAAE,mBAAmB,EAAE,MAAM,gBAAgB,CAAA;AACpD,OAAO,EAAE,YAAY,EAAE,oBAAoB,EAAE,MAAM,aAAa,CAAA;AAChE,OAAO,EAAE,cAAc,EAAE,oBAAoB,EAAE,MAAM,aAAa,CAAA;AAClE,OAAO,EACL,oBAAoB,EACpB,sBAAsB,GAGvB,MAAM,iBAAiB,CAAA;AACxB,OAAO,EACL,mBAAmB,EACnB,uBAAuB,EACvB,0BAA0B,EAC1B,yBAAyB,EACzB,yBAAyB,EACzB,uBAAuB,GAExB,MAAM,wBAAwB,CAAA;AAC/B,OAAO,EAAE,YAAY,EAAE,MAAM,aAAa,CAAA;AAE1C,2EAA2E;AAC3E,MAAM,CAAC,KAAK,UAAU,2BAA2B,CAC/C,QAAQ,GAAG,cAAc;IAEzB,IAAI,CAAC,QAAQ,CAAC,YAAY,CAAC,uCAAuC,CAAC,EAAE,CAAC;QACpE,MAAM,QAAQ,CAAC,iBAAiB,CAAC,mBAAmB,CAAC,CAAA;IACvD,CAAC;AACH,CAAC;AAED,eAAe,mBAAmB,CAAA"}
@@ -0,0 +1,7 @@
1
+ import type { EcpSchema } from "@executioncontrolprotocol/types";
2
+ /**
3
+ * Infer ECP schema discriminator from a document object.
4
+ * @category Encoding
5
+ */
6
+ export declare function getEcpSchema(value: unknown): EcpSchema | undefined;
7
+ //# sourceMappingURL=schema.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"schema.d.ts","sourceRoot":"","sources":["../src/schema.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,iCAAiC,CAAA;AAEhE;;;GAGG;AACH,wBAAgB,YAAY,CAAC,KAAK,EAAE,OAAO,GAAG,SAAS,GAAG,SAAS,CAMlE"}
package/dist/schema.js ADDED
@@ -0,0 +1,13 @@
1
+ /**
2
+ * Infer ECP schema discriminator from a document object.
3
+ * @category Encoding
4
+ */
5
+ export function getEcpSchema(value) {
6
+ if (value !== null && typeof value === "object" && "schema" in value) {
7
+ const s = value.schema;
8
+ if (typeof s === "string")
9
+ return s;
10
+ }
11
+ return undefined;
12
+ }
13
+ //# sourceMappingURL=schema.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"schema.js","sourceRoot":"","sources":["../src/schema.ts"],"names":[],"mappings":"AAEA;;;GAGG;AACH,MAAM,UAAU,YAAY,CAAC,KAAc;IACzC,IAAI,KAAK,KAAK,IAAI,IAAI,OAAO,KAAK,KAAK,QAAQ,IAAI,QAAQ,IAAI,KAAK,EAAE,CAAC;QACrE,MAAM,CAAC,GAAI,KAA6B,CAAC,MAAM,CAAA;QAC/C,IAAI,OAAO,CAAC,KAAK,QAAQ;YAAE,OAAO,CAAc,CAAA;IAClD,CAAC;IACD,OAAO,SAAS,CAAA;AAClB,CAAC"}
@@ -0,0 +1,23 @@
1
+ /** Options for encoding a document to TOON. @category Encoding */
2
+ export interface EncodeDocumentToToonOptions {
3
+ /** When true, omit indentation (single-line friendly). */
4
+ compact?: boolean;
5
+ }
6
+ /**
7
+ * Encode any JSON-compatible document with `@toon-format/toon`.
8
+ * @category Encoding
9
+ */
10
+ export declare function encodeDocumentToToon(document: unknown, options?: EncodeDocumentToToonOptions): string;
11
+ /** Options for decoding TOON text. @category Encoding */
12
+ export interface DecodeDocumentFromToonOptions {
13
+ /** Pass through to the TOON decoder (array length checks, etc.). */
14
+ strict?: boolean;
15
+ /** When true, expand dotted keys produced by compact (`keyFolding: safe`) encoding. */
16
+ compact?: boolean;
17
+ }
18
+ /**
19
+ * Decode TOON text to a JSON-compatible value with `@toon-format/toon`.
20
+ * @category Encoding
21
+ */
22
+ export declare function decodeDocumentFromToon(text: string, options?: DecodeDocumentFromToonOptions): unknown;
23
+ //# sourceMappingURL=toon-codec.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"toon-codec.d.ts","sourceRoot":"","sources":["../src/toon-codec.ts"],"names":[],"mappings":"AAEA,kEAAkE;AAClE,MAAM,WAAW,2BAA2B;IAC1C,0DAA0D;IAC1D,OAAO,CAAC,EAAE,OAAO,CAAA;CAClB;AAED;;;GAGG;AACH,wBAAgB,oBAAoB,CAClC,QAAQ,EAAE,OAAO,EACjB,OAAO,GAAE,2BAAgC,GACxC,MAAM,CAKR;AAED,yDAAyD;AACzD,MAAM,WAAW,6BAA6B;IAC5C,oEAAoE;IACpE,MAAM,CAAC,EAAE,OAAO,CAAA;IAChB,uFAAuF;IACvF,OAAO,CAAC,EAAE,OAAO,CAAA;CAClB;AAED;;;GAGG;AACH,wBAAgB,sBAAsB,CACpC,IAAI,EAAE,MAAM,EACZ,OAAO,GAAE,6BAAkC,GAC1C,OAAO,CAKT"}
@@ -0,0 +1,22 @@
1
+ import { encode as toonEncode, decode as toonDecode } from "@toon-format/toon";
2
+ /**
3
+ * Encode any JSON-compatible document with `@toon-format/toon`.
4
+ * @category Encoding
5
+ */
6
+ export function encodeDocumentToToon(document, options = {}) {
7
+ return toonEncode(document, {
8
+ indent: 2,
9
+ keyFolding: options.compact ? "safe" : "off",
10
+ });
11
+ }
12
+ /**
13
+ * Decode TOON text to a JSON-compatible value with `@toon-format/toon`.
14
+ * @category Encoding
15
+ */
16
+ export function decodeDocumentFromToon(text, options = {}) {
17
+ return toonDecode(text, {
18
+ strict: options.strict ?? true,
19
+ expandPaths: options.compact ? "safe" : "off",
20
+ });
21
+ }
22
+ //# sourceMappingURL=toon-codec.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"toon-codec.js","sourceRoot":"","sources":["../src/toon-codec.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,IAAI,UAAU,EAAE,MAAM,IAAI,UAAU,EAAE,MAAM,mBAAmB,CAAA;AAQ9E;;;GAGG;AACH,MAAM,UAAU,oBAAoB,CAClC,QAAiB,EACjB,UAAuC,EAAE;IAEzC,OAAO,UAAU,CAAC,QAAQ,EAAE;QAC1B,MAAM,EAAE,CAAC;QACT,UAAU,EAAE,OAAO,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,KAAK;KAC7C,CAAC,CAAA;AACJ,CAAC;AAUD;;;GAGG;AACH,MAAM,UAAU,sBAAsB,CACpC,IAAY,EACZ,UAAyC,EAAE;IAE3C,OAAO,UAAU,CAAC,IAAI,EAAE;QACtB,MAAM,EAAE,OAAO,CAAC,MAAM,IAAI,IAAI;QAC9B,WAAW,EAAE,OAAO,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,KAAK;KAC9C,CAAC,CAAA;AACJ,CAAC"}
@@ -0,0 +1,392 @@
1
+ import type { EcpSchema, ValidationIssue, ValidationResult } from "@executioncontrolprotocol/types";
2
+ import { z } from "zod";
3
+ /** Zod schema for `@executioncontrolprotocol.environment` manifests. @category Encoding */
4
+ export declare const environmentManifestSchema: z.ZodObject<{
5
+ schema: z.ZodLiteral<"@executioncontrolprotocol.environment">;
6
+ version: z.ZodString;
7
+ environment: z.ZodObject<{
8
+ id: z.ZodString;
9
+ label: z.ZodOptional<z.ZodString>;
10
+ }, "strip", z.ZodTypeAny, {
11
+ id: string;
12
+ label?: string | undefined;
13
+ }, {
14
+ id: string;
15
+ label?: string | undefined;
16
+ }>;
17
+ runtime: z.ZodOptional<z.ZodObject<{
18
+ id: z.ZodString;
19
+ label: z.ZodOptional<z.ZodString>;
20
+ config: z.ZodOptional<z.ZodRecord<z.ZodString, z.ZodUnknown>>;
21
+ }, "strip", z.ZodTypeAny, {
22
+ id: string;
23
+ label?: string | undefined;
24
+ config?: Record<string, unknown> | undefined;
25
+ }, {
26
+ id: string;
27
+ label?: string | undefined;
28
+ config?: Record<string, unknown> | undefined;
29
+ }>>;
30
+ extensions: z.ZodOptional<z.ZodArray<z.ZodObject<{
31
+ id: z.ZodString;
32
+ label: z.ZodOptional<z.ZodString>;
33
+ order: z.ZodNumber;
34
+ config: z.ZodOptional<z.ZodRecord<z.ZodString, z.ZodUnknown>>;
35
+ }, "strip", z.ZodTypeAny, {
36
+ id: string;
37
+ order: number;
38
+ label?: string | undefined;
39
+ config?: Record<string, unknown> | undefined;
40
+ }, {
41
+ id: string;
42
+ order: number;
43
+ label?: string | undefined;
44
+ config?: Record<string, unknown> | undefined;
45
+ }>, "many">>;
46
+ policies: z.ZodOptional<z.ZodArray<z.ZodObject<{
47
+ id: z.ZodString;
48
+ label: z.ZodOptional<z.ZodString>;
49
+ order: z.ZodNumber;
50
+ config: z.ZodOptional<z.ZodRecord<z.ZodString, z.ZodUnknown>>;
51
+ }, "strip", z.ZodTypeAny, {
52
+ id: string;
53
+ order: number;
54
+ label?: string | undefined;
55
+ config?: Record<string, unknown> | undefined;
56
+ }, {
57
+ id: string;
58
+ order: number;
59
+ label?: string | undefined;
60
+ config?: Record<string, unknown> | undefined;
61
+ }>, "many">>;
62
+ }, "strip", z.ZodTypeAny, {
63
+ schema: "@executioncontrolprotocol.environment";
64
+ version: string;
65
+ environment: {
66
+ id: string;
67
+ label?: string | undefined;
68
+ };
69
+ runtime?: {
70
+ id: string;
71
+ label?: string | undefined;
72
+ config?: Record<string, unknown> | undefined;
73
+ } | undefined;
74
+ extensions?: {
75
+ id: string;
76
+ order: number;
77
+ label?: string | undefined;
78
+ config?: Record<string, unknown> | undefined;
79
+ }[] | undefined;
80
+ policies?: {
81
+ id: string;
82
+ order: number;
83
+ label?: string | undefined;
84
+ config?: Record<string, unknown> | undefined;
85
+ }[] | undefined;
86
+ }, {
87
+ schema: "@executioncontrolprotocol.environment";
88
+ version: string;
89
+ environment: {
90
+ id: string;
91
+ label?: string | undefined;
92
+ };
93
+ runtime?: {
94
+ id: string;
95
+ label?: string | undefined;
96
+ config?: Record<string, unknown> | undefined;
97
+ } | undefined;
98
+ extensions?: {
99
+ id: string;
100
+ order: number;
101
+ label?: string | undefined;
102
+ config?: Record<string, unknown> | undefined;
103
+ }[] | undefined;
104
+ policies?: {
105
+ id: string;
106
+ order: number;
107
+ label?: string | undefined;
108
+ config?: Record<string, unknown> | undefined;
109
+ }[] | undefined;
110
+ }>;
111
+ /** Zod schema for `@executioncontrolprotocol.environment.describe` documents. @category Encoding */
112
+ export declare const environmentDescribeSchema: z.ZodObject<{
113
+ schema: z.ZodLiteral<"@executioncontrolprotocol.environment.describe">;
114
+ version: z.ZodString;
115
+ environment: z.ZodObject<{
116
+ id: z.ZodString;
117
+ label: z.ZodOptional<z.ZodString>;
118
+ }, "strip", z.ZodTypeAny, {
119
+ id: string;
120
+ label?: string | undefined;
121
+ }, {
122
+ id: string;
123
+ label?: string | undefined;
124
+ }>;
125
+ runtime: z.ZodObject<{
126
+ id: z.ZodString;
127
+ label: z.ZodOptional<z.ZodString>;
128
+ features: z.ZodObject<{
129
+ durableExecution: z.ZodOptional<z.ZodBoolean>;
130
+ loops: z.ZodOptional<z.ZodBoolean>;
131
+ parallel: z.ZodOptional<z.ZodBoolean>;
132
+ branches: z.ZodOptional<z.ZodBoolean>;
133
+ pauses: z.ZodOptional<z.ZodBoolean>;
134
+ cancellation: z.ZodOptional<z.ZodBoolean>;
135
+ longRunningWorkflows: z.ZodOptional<z.ZodBoolean>;
136
+ }, "strip", z.ZodTypeAny, {
137
+ durableExecution?: boolean | undefined;
138
+ loops?: boolean | undefined;
139
+ parallel?: boolean | undefined;
140
+ branches?: boolean | undefined;
141
+ pauses?: boolean | undefined;
142
+ cancellation?: boolean | undefined;
143
+ longRunningWorkflows?: boolean | undefined;
144
+ }, {
145
+ durableExecution?: boolean | undefined;
146
+ loops?: boolean | undefined;
147
+ parallel?: boolean | undefined;
148
+ branches?: boolean | undefined;
149
+ pauses?: boolean | undefined;
150
+ cancellation?: boolean | undefined;
151
+ longRunningWorkflows?: boolean | undefined;
152
+ }>;
153
+ }, "strip", z.ZodTypeAny, {
154
+ id: string;
155
+ features: {
156
+ durableExecution?: boolean | undefined;
157
+ loops?: boolean | undefined;
158
+ parallel?: boolean | undefined;
159
+ branches?: boolean | undefined;
160
+ pauses?: boolean | undefined;
161
+ cancellation?: boolean | undefined;
162
+ longRunningWorkflows?: boolean | undefined;
163
+ };
164
+ label?: string | undefined;
165
+ }, {
166
+ id: string;
167
+ features: {
168
+ durableExecution?: boolean | undefined;
169
+ loops?: boolean | undefined;
170
+ parallel?: boolean | undefined;
171
+ branches?: boolean | undefined;
172
+ pauses?: boolean | undefined;
173
+ cancellation?: boolean | undefined;
174
+ longRunningWorkflows?: boolean | undefined;
175
+ };
176
+ label?: string | undefined;
177
+ }>;
178
+ extensions: z.ZodArray<z.ZodObject<{
179
+ id: z.ZodString;
180
+ label: z.ZodOptional<z.ZodString>;
181
+ order: z.ZodNumber;
182
+ configSchema: z.ZodOptional<z.ZodUnknown>;
183
+ capabilities: z.ZodArray<z.ZodString, "many">;
184
+ }, "strip", z.ZodTypeAny, {
185
+ id: string;
186
+ order: number;
187
+ capabilities: string[];
188
+ label?: string | undefined;
189
+ configSchema?: unknown;
190
+ }, {
191
+ id: string;
192
+ order: number;
193
+ capabilities: string[];
194
+ label?: string | undefined;
195
+ configSchema?: unknown;
196
+ }>, "many">;
197
+ capabilities: z.ZodArray<z.ZodObject<{
198
+ id: z.ZodString;
199
+ label: z.ZodOptional<z.ZodString>;
200
+ extension: z.ZodString;
201
+ inputSchema: z.ZodOptional<z.ZodUnknown>;
202
+ outputSchema: z.ZodOptional<z.ZodUnknown>;
203
+ examples: z.ZodOptional<z.ZodArray<z.ZodUnknown, "many">>;
204
+ }, "strip", z.ZodTypeAny, {
205
+ id: string;
206
+ extension: string;
207
+ label?: string | undefined;
208
+ inputSchema?: unknown;
209
+ outputSchema?: unknown;
210
+ examples?: unknown[] | undefined;
211
+ }, {
212
+ id: string;
213
+ extension: string;
214
+ label?: string | undefined;
215
+ inputSchema?: unknown;
216
+ outputSchema?: unknown;
217
+ examples?: unknown[] | undefined;
218
+ }>, "many">;
219
+ policies: z.ZodArray<z.ZodObject<{
220
+ id: z.ZodString;
221
+ label: z.ZodOptional<z.ZodString>;
222
+ summary: z.ZodOptional<z.ZodString>;
223
+ config: z.ZodOptional<z.ZodRecord<z.ZodString, z.ZodUnknown>>;
224
+ configSchema: z.ZodOptional<z.ZodUnknown>;
225
+ }, "strip", z.ZodTypeAny, {
226
+ id: string;
227
+ label?: string | undefined;
228
+ config?: Record<string, unknown> | undefined;
229
+ configSchema?: unknown;
230
+ summary?: string | undefined;
231
+ }, {
232
+ id: string;
233
+ label?: string | undefined;
234
+ config?: Record<string, unknown> | undefined;
235
+ configSchema?: unknown;
236
+ summary?: string | undefined;
237
+ }>, "many">;
238
+ }, "strip", z.ZodTypeAny, {
239
+ schema: "@executioncontrolprotocol.environment.describe";
240
+ version: string;
241
+ environment: {
242
+ id: string;
243
+ label?: string | undefined;
244
+ };
245
+ runtime: {
246
+ id: string;
247
+ features: {
248
+ durableExecution?: boolean | undefined;
249
+ loops?: boolean | undefined;
250
+ parallel?: boolean | undefined;
251
+ branches?: boolean | undefined;
252
+ pauses?: boolean | undefined;
253
+ cancellation?: boolean | undefined;
254
+ longRunningWorkflows?: boolean | undefined;
255
+ };
256
+ label?: string | undefined;
257
+ };
258
+ extensions: {
259
+ id: string;
260
+ order: number;
261
+ capabilities: string[];
262
+ label?: string | undefined;
263
+ configSchema?: unknown;
264
+ }[];
265
+ policies: {
266
+ id: string;
267
+ label?: string | undefined;
268
+ config?: Record<string, unknown> | undefined;
269
+ configSchema?: unknown;
270
+ summary?: string | undefined;
271
+ }[];
272
+ capabilities: {
273
+ id: string;
274
+ extension: string;
275
+ label?: string | undefined;
276
+ inputSchema?: unknown;
277
+ outputSchema?: unknown;
278
+ examples?: unknown[] | undefined;
279
+ }[];
280
+ }, {
281
+ schema: "@executioncontrolprotocol.environment.describe";
282
+ version: string;
283
+ environment: {
284
+ id: string;
285
+ label?: string | undefined;
286
+ };
287
+ runtime: {
288
+ id: string;
289
+ features: {
290
+ durableExecution?: boolean | undefined;
291
+ loops?: boolean | undefined;
292
+ parallel?: boolean | undefined;
293
+ branches?: boolean | undefined;
294
+ pauses?: boolean | undefined;
295
+ cancellation?: boolean | undefined;
296
+ longRunningWorkflows?: boolean | undefined;
297
+ };
298
+ label?: string | undefined;
299
+ };
300
+ extensions: {
301
+ id: string;
302
+ order: number;
303
+ capabilities: string[];
304
+ label?: string | undefined;
305
+ configSchema?: unknown;
306
+ }[];
307
+ policies: {
308
+ id: string;
309
+ label?: string | undefined;
310
+ config?: Record<string, unknown> | undefined;
311
+ configSchema?: unknown;
312
+ summary?: string | undefined;
313
+ }[];
314
+ capabilities: {
315
+ id: string;
316
+ extension: string;
317
+ label?: string | undefined;
318
+ inputSchema?: unknown;
319
+ outputSchema?: unknown;
320
+ examples?: unknown[] | undefined;
321
+ }[];
322
+ }>;
323
+ /** Zod schema for `@executioncontrolprotocol.environment.search` documents. @category Encoding */
324
+ export declare const environmentSearchSchema: z.ZodObject<{
325
+ schema: z.ZodLiteral<"@executioncontrolprotocol.environment.search">;
326
+ version: z.ZodString;
327
+ results: z.ZodArray<z.ZodObject<{
328
+ type: z.ZodString;
329
+ id: z.ZodString;
330
+ label: z.ZodOptional<z.ZodString>;
331
+ score: z.ZodNumber;
332
+ reason: z.ZodOptional<z.ZodString>;
333
+ inputSchema: z.ZodOptional<z.ZodUnknown>;
334
+ outputSchema: z.ZodOptional<z.ZodUnknown>;
335
+ }, "strip", z.ZodTypeAny, {
336
+ id: string;
337
+ type: string;
338
+ score: number;
339
+ label?: string | undefined;
340
+ inputSchema?: unknown;
341
+ outputSchema?: unknown;
342
+ reason?: string | undefined;
343
+ }, {
344
+ id: string;
345
+ type: string;
346
+ score: number;
347
+ label?: string | undefined;
348
+ inputSchema?: unknown;
349
+ outputSchema?: unknown;
350
+ reason?: string | undefined;
351
+ }>, "many">;
352
+ }, "strip", z.ZodTypeAny, {
353
+ schema: "@executioncontrolprotocol.environment.search";
354
+ version: string;
355
+ results: {
356
+ id: string;
357
+ type: string;
358
+ score: number;
359
+ label?: string | undefined;
360
+ inputSchema?: unknown;
361
+ outputSchema?: unknown;
362
+ reason?: string | undefined;
363
+ }[];
364
+ }, {
365
+ schema: "@executioncontrolprotocol.environment.search";
366
+ version: string;
367
+ results: {
368
+ id: string;
369
+ type: string;
370
+ score: number;
371
+ label?: string | undefined;
372
+ inputSchema?: unknown;
373
+ outputSchema?: unknown;
374
+ reason?: string | undefined;
375
+ }[];
376
+ }>;
377
+ /** Schemas that receive optional structural validation after TOON decode. @category Encoding */
378
+ export declare const TOON_VALIDATED_ECP_SCHEMAS: readonly ["@executioncontrolprotocol.workflow", "@executioncontrolprotocol.environment", "@executioncontrolprotocol.environment.describe", "@executioncontrolprotocol.environment.search", "@executioncontrolprotocol.patch"];
379
+ /** Union of schemas with built-in TOON validation. @category Encoding */
380
+ export type ToonValidatedEcpSchema = (typeof TOON_VALIDATED_ECP_SCHEMAS)[number];
381
+ /**
382
+ * Validate a decoded document when its schema is known to ECP.
383
+ * Unknown schemas return valid with no diagnostics (schema-agnostic TOON).
384
+ * @category Encoding
385
+ */
386
+ export declare function validateEcpDocument(document: unknown, schema?: EcpSchema | string): ValidationResult;
387
+ /**
388
+ * Merge validation issues into a diagnostics list.
389
+ * @category Encoding
390
+ */
391
+ export declare function validationToDiagnostics(validation: ValidationResult): ValidationIssue[];
392
+ //# sourceMappingURL=validate-document.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"validate-document.d.ts","sourceRoot":"","sources":["../src/validate-document.ts"],"names":[],"mappings":"AAKA,OAAO,KAAK,EAAE,SAAS,EAAE,eAAe,EAAE,gBAAgB,EAAE,MAAM,iCAAiC,CAAA;AAEnG,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAA;AASvB,2FAA2F;AAC3F,eAAO,MAAM,yBAAyB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;EAgBpC,CAAA;AAYF,oGAAoG;AACpG,eAAO,MAAM,yBAAyB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;EAwCpC,CAAA;AAEF,kGAAkG;AAClG,eAAO,MAAM,uBAAuB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;EAclC,CAAA;AAEF,gGAAgG;AAChG,eAAO,MAAM,0BAA0B,+NAME,CAAA;AAEzC,yEAAyE;AACzE,MAAM,MAAM,sBAAsB,GAAG,CAAC,OAAO,0BAA0B,CAAC,CAAC,MAAM,CAAC,CAAA;AAmBhF;;;;GAIG;AACH,wBAAgB,mBAAmB,CACjC,QAAQ,EAAE,OAAO,EACjB,MAAM,CAAC,EAAE,SAAS,GAAG,MAAM,GAC1B,gBAAgB,CA4BlB;AAED;;;GAGG;AACH,wBAAgB,uBAAuB,CAAC,UAAU,EAAE,gBAAgB,GAAG,eAAe,EAAE,CAEvF"}
@@ -0,0 +1,149 @@
1
+ import { ecpPatchDocumentSchema, validateWorkflow, zodIssuesToValidationIssues, } from "@executioncontrolprotocol/core";
2
+ import { LATEST_ECP_VERSION } from "@executioncontrolprotocol/types";
3
+ import { z } from "zod";
4
+ const bindingSchema = z.object({
5
+ id: z.string().min(1),
6
+ label: z.string().optional(),
7
+ order: z.number().int().nonnegative(),
8
+ config: z.record(z.unknown()).optional(),
9
+ });
10
+ /** Zod schema for `@executioncontrolprotocol.environment` manifests. @category Encoding */
11
+ export const environmentManifestSchema = z.object({
12
+ schema: z.literal("@executioncontrolprotocol.environment"),
13
+ version: z.string(),
14
+ environment: z.object({
15
+ id: z.string().min(1),
16
+ label: z.string().optional(),
17
+ }),
18
+ runtime: z
19
+ .object({
20
+ id: z.string().min(1),
21
+ label: z.string().optional(),
22
+ config: z.record(z.unknown()).optional(),
23
+ })
24
+ .optional(),
25
+ extensions: z.array(bindingSchema).optional(),
26
+ policies: z.array(bindingSchema).optional(),
27
+ });
28
+ const runtimeFeaturesSchema = z.object({
29
+ durableExecution: z.boolean().optional(),
30
+ loops: z.boolean().optional(),
31
+ parallel: z.boolean().optional(),
32
+ branches: z.boolean().optional(),
33
+ pauses: z.boolean().optional(),
34
+ cancellation: z.boolean().optional(),
35
+ longRunningWorkflows: z.boolean().optional(),
36
+ });
37
+ /** Zod schema for `@executioncontrolprotocol.environment.describe` documents. @category Encoding */
38
+ export const environmentDescribeSchema = z.object({
39
+ schema: z.literal("@executioncontrolprotocol.environment.describe"),
40
+ version: z.string(),
41
+ environment: z.object({
42
+ id: z.string().min(1),
43
+ label: z.string().optional(),
44
+ }),
45
+ runtime: z.object({
46
+ id: z.string().min(1),
47
+ label: z.string().optional(),
48
+ features: runtimeFeaturesSchema,
49
+ }),
50
+ extensions: z.array(z.object({
51
+ id: z.string().min(1),
52
+ label: z.string().optional(),
53
+ order: z.number().int().nonnegative(),
54
+ configSchema: z.unknown().optional(),
55
+ capabilities: z.array(z.string()),
56
+ })),
57
+ capabilities: z.array(z.object({
58
+ id: z.string().min(1),
59
+ label: z.string().optional(),
60
+ extension: z.string().min(1),
61
+ inputSchema: z.unknown().optional(),
62
+ outputSchema: z.unknown().optional(),
63
+ examples: z.array(z.unknown()).optional(),
64
+ })),
65
+ policies: z.array(z.object({
66
+ id: z.string().min(1),
67
+ label: z.string().optional(),
68
+ summary: z.string().optional(),
69
+ config: z.record(z.unknown()).optional(),
70
+ configSchema: z.unknown().optional(),
71
+ })),
72
+ });
73
+ /** Zod schema for `@executioncontrolprotocol.environment.search` documents. @category Encoding */
74
+ export const environmentSearchSchema = z.object({
75
+ schema: z.literal("@executioncontrolprotocol.environment.search"),
76
+ version: z.string(),
77
+ results: z.array(z.object({
78
+ type: z.string().min(1),
79
+ id: z.string().min(1),
80
+ label: z.string().optional(),
81
+ score: z.number(),
82
+ reason: z.string().optional(),
83
+ inputSchema: z.unknown().optional(),
84
+ outputSchema: z.unknown().optional(),
85
+ })),
86
+ });
87
+ /** Schemas that receive optional structural validation after TOON decode. @category Encoding */
88
+ export const TOON_VALIDATED_ECP_SCHEMAS = [
89
+ "@executioncontrolprotocol.workflow",
90
+ "@executioncontrolprotocol.environment",
91
+ "@executioncontrolprotocol.environment.describe",
92
+ "@executioncontrolprotocol.environment.search",
93
+ "@executioncontrolprotocol.patch",
94
+ ];
95
+ function emptyValidation(valid) {
96
+ return {
97
+ schema: "@executioncontrolprotocol.validation.result",
98
+ version: LATEST_ECP_VERSION,
99
+ valid,
100
+ errors: [],
101
+ warnings: [],
102
+ };
103
+ }
104
+ function zodToResult(parsed) {
105
+ if (parsed.success)
106
+ return emptyValidation(true);
107
+ const result = emptyValidation(false);
108
+ result.errors.push(...zodIssuesToValidationIssues(parsed.error.issues));
109
+ return result;
110
+ }
111
+ /**
112
+ * Validate a decoded document when its schema is known to ECP.
113
+ * Unknown schemas return valid with no diagnostics (schema-agnostic TOON).
114
+ * @category Encoding
115
+ */
116
+ export function validateEcpDocument(document, schema) {
117
+ const resolved = schema ??
118
+ (document !== null &&
119
+ typeof document === "object" &&
120
+ "schema" in document &&
121
+ typeof document.schema === "string"
122
+ ? document.schema
123
+ : undefined);
124
+ if (!resolved || !TOON_VALIDATED_ECP_SCHEMAS.includes(resolved)) {
125
+ return emptyValidation(true);
126
+ }
127
+ switch (resolved) {
128
+ case "@executioncontrolprotocol.workflow":
129
+ return validateWorkflow(document);
130
+ case "@executioncontrolprotocol.environment":
131
+ return zodToResult(environmentManifestSchema.safeParse(document));
132
+ case "@executioncontrolprotocol.environment.describe":
133
+ return zodToResult(environmentDescribeSchema.safeParse(document));
134
+ case "@executioncontrolprotocol.environment.search":
135
+ return zodToResult(environmentSearchSchema.safeParse(document));
136
+ case "@executioncontrolprotocol.patch":
137
+ return zodToResult(ecpPatchDocumentSchema.safeParse(document));
138
+ default:
139
+ return emptyValidation(true);
140
+ }
141
+ }
142
+ /**
143
+ * Merge validation issues into a diagnostics list.
144
+ * @category Encoding
145
+ */
146
+ export function validationToDiagnostics(validation) {
147
+ return [...validation.errors, ...validation.warnings];
148
+ }
149
+ //# sourceMappingURL=validate-document.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"validate-document.js","sourceRoot":"","sources":["../src/validate-document.ts"],"names":[],"mappings":"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"}
package/package.json ADDED
@@ -0,0 +1,36 @@
1
+ {
2
+ "name": "@executioncontrolprotocol/format-toon",
3
+ "version": "0.10.0",
4
+ "description": "ECP TOON format extension using @toon-format/toon (schema-agnostic with optional ECP validation)",
5
+ "license": "Apache-2.0",
6
+ "type": "module",
7
+ "main": "./dist/index.js",
8
+ "types": "./dist/index.d.ts",
9
+ "exports": {
10
+ ".": {
11
+ "types": "./dist/index.d.ts",
12
+ "import": "./dist/index.js"
13
+ }
14
+ },
15
+ "files": [
16
+ "dist",
17
+ "README.md"
18
+ ],
19
+ "scripts": {
20
+ "build": "tsc -b"
21
+ },
22
+ "dependencies": {
23
+ "@toon-format/toon": "^2.3.0"
24
+ },
25
+ "peerDependencies": {
26
+ "@executioncontrolprotocol/core": "^0.10.0",
27
+ "@executioncontrolprotocol/types": "^0.10.0",
28
+ "zod": "^3.24.0"
29
+ },
30
+ "devDependencies": {
31
+ "@executioncontrolprotocol/core": "0.10.0",
32
+ "@executioncontrolprotocol/types": "0.10.0",
33
+ "typescript": "^5.7.0",
34
+ "zod": "^3.24.0"
35
+ }
36
+ }