@humain/humain-code-contracts 0.4.0 → 0.4.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/CHANGELOG.md
CHANGED
package/dist/trace-artifact.d.ts
CHANGED
|
@@ -60,7 +60,7 @@ export declare function assertDhCapabilityAction(input: unknown, target: DhCapab
|
|
|
60
60
|
export declare const parseDhContractArtifact: (value: unknown) => {
|
|
61
61
|
readonly schema: "dh.contract-artifact/1";
|
|
62
62
|
readonly packageName: "@humain/humain-code-contracts";
|
|
63
|
-
readonly packageVersion:
|
|
63
|
+
readonly packageVersion: string;
|
|
64
64
|
readonly contractVersion: 1;
|
|
65
65
|
readonly tarballFile: string;
|
|
66
66
|
readonly sha256: string;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"trace-artifact.d.ts","sourceRoot":"","sources":["../src/trace-artifact.ts"],"names":[],"mappings":"AAMA,eAAO,MAAM,sBAAsB;iCACd,0BAA0B;+BAC5B,wBAAwB;EAChC,CAAC;AACZ,oFAAoF;AACpF,wBAAgB,yBAAyB,IAAI,SAAS,MAAM,EAAE,CAiB7D;AAUD,eAAO,MAAM,qBAAqB,YACjC,kBAAkB,EAClB,gBAAgB,EAChB,gBAAgB,EAChB,cAAc,EACd,YAAY,CACH,CAAC;AACX,MAAM,MAAM,kBAAkB,GAAG,CAAC,OAAO,qBAAqB,CAAC,CAAC,MAAM,CAAC,CAAC;AAyCxE,eAAO,MAAM,yBAAyB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CAepC,CAAC;AACH,MAAM,MAAM,oBAAoB,GAAG,UAAU,CAAC,OAAO,yBAAyB,CAAC,CAAC;AAChF,MAAM,MAAM,kBAAkB,GAAG,IAAI,CACpC,oBAAoB,CAAC,UAAU,CAAC,CAAC,MAAM,CAAC,EACxC,SAAS,GAAG,aAAa,GAAG,MAAM,GAAG,UAAU,CAC/C,CAAC;AACF,wBAAgB,wBAAwB,CACvC,KAAK,EAAE,OAAO,EACd,MAAM,EAAE,kBAAkB,EAC1B,MAAM,EAAE,kBAAkB,GACxB,oBAAoB,CAAC,UAAU,CAAC,CAAC,MAAM,CAAC,CAAC,SAAS,CAAC,CAAC,kBAAkB,CAAC,CAqBzE;AAMD,eAAO,MAAM,uBAAuB;;;;;;;;;;;;
|
|
1
|
+
{"version":3,"file":"trace-artifact.d.ts","sourceRoot":"","sources":["../src/trace-artifact.ts"],"names":[],"mappings":"AAMA,eAAO,MAAM,sBAAsB;iCACd,0BAA0B;+BAC5B,wBAAwB;EAChC,CAAC;AACZ,oFAAoF;AACpF,wBAAgB,yBAAyB,IAAI,SAAS,MAAM,EAAE,CAiB7D;AAUD,eAAO,MAAM,qBAAqB,YACjC,kBAAkB,EAClB,gBAAgB,EAChB,gBAAgB,EAChB,cAAc,EACd,YAAY,CACH,CAAC;AACX,MAAM,MAAM,kBAAkB,GAAG,CAAC,OAAO,qBAAqB,CAAC,CAAC,MAAM,CAAC,CAAC;AAyCxE,eAAO,MAAM,yBAAyB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CAepC,CAAC;AACH,MAAM,MAAM,oBAAoB,GAAG,UAAU,CAAC,OAAO,yBAAyB,CAAC,CAAC;AAChF,MAAM,MAAM,kBAAkB,GAAG,IAAI,CACpC,oBAAoB,CAAC,UAAU,CAAC,CAAC,MAAM,CAAC,EACxC,SAAS,GAAG,aAAa,GAAG,MAAM,GAAG,UAAU,CAC/C,CAAC;AACF,wBAAgB,wBAAwB,CACvC,KAAK,EAAE,OAAO,EACd,MAAM,EAAE,kBAAkB,EAC1B,MAAM,EAAE,kBAAkB,GACxB,oBAAoB,CAAC,UAAU,CAAC,CAAC,MAAM,CAAC,CAAC,SAAS,CAAC,CAAC,kBAAkB,CAAC,CAqBzE;AAMD,eAAO,MAAM,uBAAuB;;;;;;;;;;;;CA0BnC,CAAC;AACF,MAAM,MAAM,kBAAkB,GAAG,UAAU,CAAC,OAAO,uBAAuB,CAAC,CAAC;AAC5E,sGAAsG;AACtG,MAAM,WAAW,4BAA4B;IAC5C,QAAQ,CAAC,WAAW,EAAE,MAAM,CAAC;IAC7B,QAAQ,CAAC,cAAc,EAAE,MAAM,CAAC;IAChC,QAAQ,CAAC,eAAe,EAAE,MAAM,CAAC;IACjC,QAAQ,CAAC,OAAO,EAAE,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE;QAAE,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAC;QAAC,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAA;KAAE,CAAC,CAAC,CAAC;IAChG,QAAQ,CAAC,WAAW,EAAE,OAAO,CAAC;IAC9B,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;IACxB,QAAQ,CAAC,YAAY,EAAE,MAAM,CAAC;IAC9B,QAAQ,CAAC,kBAAkB,EAAE,OAAO,CAAC;IACrC,QAAQ,CAAC,wBAAwB,EAAE,MAAM,CAAC;IAC1C,QAAQ,CAAC,uBAAuB,EAAE,MAAM,CAAC;IACzC,QAAQ,CAAC,SAAS,EAAE,SAAS,MAAM,EAAE,CAAC;IACtC,QAAQ,CAAC,cAAc,EAAE,OAAO,CAAC;IACjC,QAAQ,CAAC,yBAAyB,EAAE,OAAO,CAAC;CAC5C;AAiBD,wBAAgB,wBAAwB,CAAC,KAAK,EAAE,OAAO,EAAE,UAAU,EAAE,4BAA4B,GAAG,IAAI,CAmCvG"}
|
package/dist/trace-artifact.js
CHANGED
|
@@ -122,7 +122,8 @@ const relativeFile = Type.String({
|
|
|
122
122
|
export const parseDhContractArtifact = dhStrictDtoParser("contract artifact", () => strict({
|
|
123
123
|
schema: Type.Literal(DH_ARTIFACT_SCHEMA_IDS.contractArtifact),
|
|
124
124
|
packageName: Type.Literal("@humain/humain-code-contracts"),
|
|
125
|
-
|
|
125
|
+
// Recorded frozen 0.3.3 artifact, or any stable 0.4.x (additive ./flow-* exports); patch releases need no edit.
|
|
126
|
+
packageVersion: Type.String({ pattern: "^(?:0\\.3\\.3|0\\.4\\.(?:0|[1-9]\\d*))$" }),
|
|
126
127
|
contractVersion: Type.Literal(1),
|
|
127
128
|
tarballFile: relativeFile,
|
|
128
129
|
sha256: digest,
|
|
@@ -138,6 +139,21 @@ export const parseDhContractArtifact = dhStrictDtoParser("contract artifact", ()
|
|
|
138
139
|
`humain-code-contracts-${artifact.sha256}.capabilities.json`)
|
|
139
140
|
throw new DhContractError("schema_invalid");
|
|
140
141
|
});
|
|
142
|
+
const FLOW_EXPORT = /^\.\/flow-([a-z][a-z0-9-]*)$/;
|
|
143
|
+
/** Trace-era exports must match exactly; the only additions allowed are `./flow-<name>` -> `./dist/flow-<name>.{d.ts,js}`. */
|
|
144
|
+
function exportsAreCompatible(actual, required) {
|
|
145
|
+
const rest = { ...actual };
|
|
146
|
+
for (const [subpath, target] of Object.entries(required)) {
|
|
147
|
+
if (rest[subpath] === undefined || dhCanonicalText(rest[subpath]) !== dhCanonicalText(target))
|
|
148
|
+
return false;
|
|
149
|
+
delete rest[subpath];
|
|
150
|
+
}
|
|
151
|
+
return Object.entries(rest).every(([subpath, target]) => {
|
|
152
|
+
const name = FLOW_EXPORT.exec(subpath)?.[0].slice(2);
|
|
153
|
+
return (name !== undefined &&
|
|
154
|
+
dhCanonicalText(target) === dhCanonicalText({ types: `./dist/${name}.d.ts`, import: `./dist/${name}.js` }));
|
|
155
|
+
});
|
|
156
|
+
}
|
|
141
157
|
export function assertDhContractArtifact(input, inspection) {
|
|
142
158
|
const artifact = parseDhContractArtifact(input);
|
|
143
159
|
assertDhPlainData(inspection);
|
|
@@ -157,7 +173,7 @@ export function assertDhContractArtifact(input, inspection) {
|
|
|
157
173
|
inspection.packageVersion !== artifact.packageVersion ||
|
|
158
174
|
inspection.contractVersion !== 1 ||
|
|
159
175
|
inspection.conformanceVectorSha256 !== artifact.conformanceVectorSha256 ||
|
|
160
|
-
|
|
176
|
+
!exportsAreCompatible(inspection.exports, exports))
|
|
161
177
|
throw new DhContractError("contract_incompatible");
|
|
162
178
|
assertRegistry(inspection.schemaIds);
|
|
163
179
|
const manifest = parseDhCapabilityManifest(inspection.capabilityManifest);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"trace-artifact.js","sourceRoot":"","sources":["../src/trace-artifact.ts"],"names":[],"mappings":"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","sourcesContent":["import { Type } from \"typebox\";\nimport { assertDhPlainData, DhContractError, dhCanonicalText } from \"./trace-canonical.ts\";\nimport { DH_HTTP_SCHEMA_IDS, dhStrictDtoParser } from \"./trace-http.ts\";\nimport { DH_PAYLOAD_SCHEMA_IDS } from \"./trace-payload.ts\";\nimport { DH_RECORDS_SCHEMA_IDS } from \"./trace-records.ts\";\n\nexport const DH_ARTIFACT_SCHEMA_IDS = Object.freeze({\n\tcapabilityManifest: \"dh.capability-manifest/1\",\n\tcontractArtifact: \"dh.contract-artifact/1\",\n} as const);\n/** Literal implemented IDs only; lazy to preserve /trace entry-order neutrality. */\nexport function getDhImplementedSchemaIds(): readonly string[] {\n\treturn Object.freeze(\n\t\t[\n\t\t\t\"dh.event/1\",\n\t\t\t\"dh.artifact/1\",\n\t\t\t\"dh.ack/1\",\n\t\t\t\"dh.batch/1-proposal\",\n\t\t\t\"dh.canonical-jcs/1\",\n\t\t\t\"dh.export-download/2\",\n\t\t\t\"dh.bundle-frame/1\",\n\t\t\t\"dh.bundle-seal/1\",\n\t\t\t...Object.values(DH_HTTP_SCHEMA_IDS),\n\t\t\t...Object.values(DH_PAYLOAD_SCHEMA_IDS),\n\t\t\t...Object.values(DH_RECORDS_SCHEMA_IDS),\n\t\t\t...Object.values(DH_ARTIFACT_SCHEMA_IDS),\n\t\t].sort(),\n\t);\n}\nconst strict = <const T extends Parameters<typeof Type.Object>[0]>(properties: T) =>\n\tType.Object(properties, { additionalProperties: false });\nconst digest = Type.String({ pattern: \"^[a-f0-9]{64}$\" });\nconst ref = Type.String({ minLength: 1, maxLength: 128, pattern: \"^[A-Za-z0-9_.-]+$\" });\nconst schemaIds = Type.Array(Type.String({ minLength: 1, maxLength: 128 }), {\n\tminItems: 1,\n\tmaxItems: 128,\n\tuniqueItems: true,\n});\nexport const DH_CAPABILITY_ACTIONS = [\n\t\"backgroundStatus\",\n\t\"cancelSelected\",\n\t\"cancelWholeRun\",\n\t\"continueLive\",\n\t\"retryFresh\",\n] as const;\nexport type DhCapabilityAction = (typeof DH_CAPABILITY_ACTIONS)[number];\nfunction actionSupportSchema() {\n\treturn strict({\n\t\tstatus: Type.Enum([\"supported\", \"unsupported\", \"unknown\"] as const),\n\t\tchannel: Type.Enum([\"unix-socket\", \"inherited-fd3\", \"in-process\", \"native-executor\", \"none\"] as const),\n\t\tqualificationSha256: Type.Optional(digest),\n\t\treasonCode: Type.Optional(ref),\n\t});\n}\nfunction capabilitySchema() {\n\treturn strict({\n\t\tschema: Type.Literal(DH_ARTIFACT_SCHEMA_IDS.capabilityManifest),\n\t\tpackageName: Type.Literal(\"@humain/humain-code-contracts\"),\n\t\tpackageVersion: Type.String({ minLength: 1, maxLength: 64 }),\n\t\tcontractVersion: Type.Literal(1),\n\t\tartifactSha256: digest,\n\t\tcanonicalProfile: Type.Literal(\"dh.canonical-jcs/1\"),\n\t\tschemaIds,\n\t\tconformanceVectorSha256: digest,\n\t\truntimes: Type.Array(\n\t\t\tstrict({\n\t\t\t\truntime: Type.Enum([\"cli-node\", \"cli-bun\", \"flow\", \"forge-native\"] as const),\n\t\t\t\tbuildSha256: digest,\n\t\t\t\tmode: ref,\n\t\t\t\tplatform: Type.Enum([\"darwin\", \"linux\", \"win32\"] as const),\n\t\t\t\tactions: strict({\n\t\t\t\t\tbackgroundStatus: actionSupportSchema(),\n\t\t\t\t\tcancelSelected: actionSupportSchema(),\n\t\t\t\t\tcancelWholeRun: actionSupportSchema(),\n\t\t\t\t\tcontinueLive: actionSupportSchema(),\n\t\t\t\t\tretryFresh: actionSupportSchema(),\n\t\t\t\t}),\n\t\t\t}),\n\t\t\t{ maxItems: 128 },\n\t\t),\n\t});\n}\nfunction assertRegistry(ids: readonly string[]): void {\n\tif (dhCanonicalText([...ids].sort()) !== dhCanonicalText(getDhImplementedSchemaIds()))\n\t\tthrow new DhContractError(\"contract_incompatible\");\n}\nexport const parseDhCapabilityManifest = dhStrictDtoParser(\"capability manifest\", capabilitySchema, (manifest) => {\n\tassertRegistry(manifest.schemaIds);\n\tconst targets = new Set<string>();\n\tfor (const runtime of manifest.runtimes) {\n\t\tconst key = dhCanonicalText([runtime.runtime, runtime.buildSha256, runtime.mode, runtime.platform]);\n\t\tif (targets.has(key)) throw new DhContractError(\"schema_invalid\");\n\t\ttargets.add(key);\n\t\tfor (const support of Object.values(runtime.actions)) {\n\t\t\tif (support.status === \"supported\") {\n\t\t\t\tif (support.channel === \"none\" || support.qualificationSha256 === undefined)\n\t\t\t\t\tthrow new DhContractError(\"schema_invalid\");\n\t\t\t} else if (support.reasonCode === undefined || support.qualificationSha256 !== undefined)\n\t\t\t\tthrow new DhContractError(\"schema_invalid\");\n\t\t}\n\t}\n});\nexport type DhCapabilityManifest = ReturnType<typeof parseDhCapabilityManifest>;\nexport type DhCapabilityTarget = Pick<\n\tDhCapabilityManifest[\"runtimes\"][number],\n\t\"runtime\" | \"buildSha256\" | \"mode\" | \"platform\"\n>;\nexport function assertDhCapabilityAction(\n\tinput: unknown,\n\ttarget: DhCapabilityTarget,\n\taction: DhCapabilityAction,\n): DhCapabilityManifest[\"runtimes\"][number][\"actions\"][DhCapabilityAction] {\n\tconst manifest = parseDhCapabilityManifest(input);\n\tassertDhPlainData(target);\n\tif (!(DH_CAPABILITY_ACTIONS as readonly string[]).includes(action)) throw new DhContractError(\"capability_unknown\");\n\tconst runtime = manifest.runtimes.find(\n\t\t(value) =>\n\t\t\tvalue.runtime === target.runtime &&\n\t\t\tvalue.buildSha256 === target.buildSha256 &&\n\t\t\tvalue.mode === target.mode &&\n\t\t\tvalue.platform === target.platform,\n\t);\n\tif (!runtime) throw new DhContractError(\"capability_unknown\");\n\tconst support = runtime.actions[action];\n\tif (\n\t\tsupport.status === \"unsupported\" ||\n\t\ttarget.platform === \"win32\" ||\n\t\t[\"agent-exec-workflow\", \"experimental-transport\"].includes(target.mode)\n\t)\n\t\tthrow new DhContractError(\"capability_unsupported\");\n\tif (support.status !== \"supported\") throw new DhContractError(\"capability_unknown\");\n\treturn support;\n}\nconst relativeFile = Type.String({\n\tminLength: 1,\n\tmaxLength: 512,\n\tpattern: \"^(?!/)(?!.*(?:^|/)\\\\.\\\\.?(?:/|$))[A-Za-z0-9._-]+(?:/[A-Za-z0-9._-]+)*$\",\n});\nexport const parseDhContractArtifact = dhStrictDtoParser(\n\t\"contract artifact\",\n\t() =>\n\t\tstrict({\n\t\t\tschema: Type.Literal(DH_ARTIFACT_SCHEMA_IDS.contractArtifact),\n\t\t\tpackageName: Type.Literal(\"@humain/humain-code-contracts\"),\n\t\t\tpackageVersion: Type.Literal(\"0.3.3\"),\n\t\t\tcontractVersion: Type.Literal(1),\n\t\t\ttarballFile: relativeFile,\n\t\t\tsha256: digest,\n\t\t\tnpmIntegrity: Type.String({ minLength: 1, maxLength: 128, pattern: \"^sha512-[A-Za-z0-9+/]{85}[AQgw]==$\" }),\n\t\t\tcapabilityManifestFile: relativeFile,\n\t\t\tcapabilityManifestSha256: digest,\n\t\t\tconformanceVectorSha256: digest,\n\t\t\tschemaIds,\n\t\t}),\n\t(artifact) => {\n\t\tassertRegistry(artifact.schemaIds);\n\t\tif (\n\t\t\tartifact.tarballFile.split(\"/\").at(-1) !== `humain-code-contracts-${artifact.sha256}.tgz` ||\n\t\t\tartifact.capabilityManifestFile.split(\"/\").at(-1) !==\n\t\t\t\t`humain-code-contracts-${artifact.sha256}.capabilities.json`\n\t\t)\n\t\t\tthrow new DhContractError(\"schema_invalid\");\n\t},\n);\nexport type DhContractArtifact = ReturnType<typeof parseDhContractArtifact>;\n/** Actual file/digest/export inspection is owned by the installer, not inferred from a descriptor. */\nexport interface DhContractArtifactInspection {\n\treadonly packageName: string;\n\treadonly packageVersion: string;\n\treadonly contractVersion: number;\n\treadonly exports: Readonly<Record<string, { readonly types: string; readonly import: string }>>;\n\treadonly distPresent: boolean;\n\treadonly sha256: string;\n\treadonly npmIntegrity: string;\n\treadonly capabilityManifest: unknown;\n\treadonly capabilityManifestSha256: string;\n\treadonly conformanceVectorSha256: string;\n\treadonly schemaIds: readonly string[];\n\treadonly tarballSymlink: boolean;\n\treadonly capabilityManifestSymlink: boolean;\n}\nexport function assertDhContractArtifact(input: unknown, inspection: DhContractArtifactInspection): void {\n\tconst artifact = parseDhContractArtifact(input);\n\tassertDhPlainData(inspection);\n\tif (inspection.distPresent !== true) throw new DhContractError(\"artifact_unbuilt\");\n\tif (\n\t\tinspection.tarballSymlink !== false ||\n\t\tinspection.capabilityManifestSymlink !== false ||\n\t\tinspection.sha256 !== artifact.sha256 ||\n\t\tinspection.npmIntegrity !== artifact.npmIntegrity ||\n\t\tinspection.capabilityManifestSha256 !== artifact.capabilityManifestSha256\n\t)\n\t\tthrow new DhContractError(\"artifact_integrity\");\n\tconst exports = Object.fromEntries(\n\t\t[\"index\", \"orchestration\", \"rpc\", \"trace\", \"testing\"].map((name) => [\n\t\t\tname === \"index\" ? \".\" : `./${name}`,\n\t\t\t{ types: `./dist/${name}.d.ts`, import: `./dist/${name}.js` },\n\t\t]),\n\t);\n\tif (\n\t\tinspection.packageName !== artifact.packageName ||\n\t\tinspection.packageVersion !== artifact.packageVersion ||\n\t\tinspection.contractVersion !== 1 ||\n\t\tinspection.conformanceVectorSha256 !== artifact.conformanceVectorSha256 ||\n\t\tdhCanonicalText(inspection.exports) !== dhCanonicalText(exports)\n\t)\n\t\tthrow new DhContractError(\"contract_incompatible\");\n\tassertRegistry(inspection.schemaIds);\n\tconst manifest = parseDhCapabilityManifest(inspection.capabilityManifest);\n\tif (\n\t\tmanifest.artifactSha256 !== artifact.sha256 ||\n\t\tmanifest.packageVersion !== artifact.packageVersion ||\n\t\tmanifest.conformanceVectorSha256 !== artifact.conformanceVectorSha256 ||\n\t\tdhCanonicalText([...manifest.schemaIds].sort()) !== dhCanonicalText([...artifact.schemaIds].sort())\n\t)\n\t\tthrow new DhContractError(\"contract_incompatible\");\n}\n"]}
|
|
1
|
+
{"version":3,"file":"trace-artifact.js","sourceRoot":"","sources":["../src/trace-artifact.ts"],"names":[],"mappings":"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","sourcesContent":["import { Type } from \"typebox\";\nimport { assertDhPlainData, DhContractError, dhCanonicalText } from \"./trace-canonical.ts\";\nimport { DH_HTTP_SCHEMA_IDS, dhStrictDtoParser } from \"./trace-http.ts\";\nimport { DH_PAYLOAD_SCHEMA_IDS } from \"./trace-payload.ts\";\nimport { DH_RECORDS_SCHEMA_IDS } from \"./trace-records.ts\";\n\nexport const DH_ARTIFACT_SCHEMA_IDS = Object.freeze({\n\tcapabilityManifest: \"dh.capability-manifest/1\",\n\tcontractArtifact: \"dh.contract-artifact/1\",\n} as const);\n/** Literal implemented IDs only; lazy to preserve /trace entry-order neutrality. */\nexport function getDhImplementedSchemaIds(): readonly string[] {\n\treturn Object.freeze(\n\t\t[\n\t\t\t\"dh.event/1\",\n\t\t\t\"dh.artifact/1\",\n\t\t\t\"dh.ack/1\",\n\t\t\t\"dh.batch/1-proposal\",\n\t\t\t\"dh.canonical-jcs/1\",\n\t\t\t\"dh.export-download/2\",\n\t\t\t\"dh.bundle-frame/1\",\n\t\t\t\"dh.bundle-seal/1\",\n\t\t\t...Object.values(DH_HTTP_SCHEMA_IDS),\n\t\t\t...Object.values(DH_PAYLOAD_SCHEMA_IDS),\n\t\t\t...Object.values(DH_RECORDS_SCHEMA_IDS),\n\t\t\t...Object.values(DH_ARTIFACT_SCHEMA_IDS),\n\t\t].sort(),\n\t);\n}\nconst strict = <const T extends Parameters<typeof Type.Object>[0]>(properties: T) =>\n\tType.Object(properties, { additionalProperties: false });\nconst digest = Type.String({ pattern: \"^[a-f0-9]{64}$\" });\nconst ref = Type.String({ minLength: 1, maxLength: 128, pattern: \"^[A-Za-z0-9_.-]+$\" });\nconst schemaIds = Type.Array(Type.String({ minLength: 1, maxLength: 128 }), {\n\tminItems: 1,\n\tmaxItems: 128,\n\tuniqueItems: true,\n});\nexport const DH_CAPABILITY_ACTIONS = [\n\t\"backgroundStatus\",\n\t\"cancelSelected\",\n\t\"cancelWholeRun\",\n\t\"continueLive\",\n\t\"retryFresh\",\n] as const;\nexport type DhCapabilityAction = (typeof DH_CAPABILITY_ACTIONS)[number];\nfunction actionSupportSchema() {\n\treturn strict({\n\t\tstatus: Type.Enum([\"supported\", \"unsupported\", \"unknown\"] as const),\n\t\tchannel: Type.Enum([\"unix-socket\", \"inherited-fd3\", \"in-process\", \"native-executor\", \"none\"] as const),\n\t\tqualificationSha256: Type.Optional(digest),\n\t\treasonCode: Type.Optional(ref),\n\t});\n}\nfunction capabilitySchema() {\n\treturn strict({\n\t\tschema: Type.Literal(DH_ARTIFACT_SCHEMA_IDS.capabilityManifest),\n\t\tpackageName: Type.Literal(\"@humain/humain-code-contracts\"),\n\t\tpackageVersion: Type.String({ minLength: 1, maxLength: 64 }),\n\t\tcontractVersion: Type.Literal(1),\n\t\tartifactSha256: digest,\n\t\tcanonicalProfile: Type.Literal(\"dh.canonical-jcs/1\"),\n\t\tschemaIds,\n\t\tconformanceVectorSha256: digest,\n\t\truntimes: Type.Array(\n\t\t\tstrict({\n\t\t\t\truntime: Type.Enum([\"cli-node\", \"cli-bun\", \"flow\", \"forge-native\"] as const),\n\t\t\t\tbuildSha256: digest,\n\t\t\t\tmode: ref,\n\t\t\t\tplatform: Type.Enum([\"darwin\", \"linux\", \"win32\"] as const),\n\t\t\t\tactions: strict({\n\t\t\t\t\tbackgroundStatus: actionSupportSchema(),\n\t\t\t\t\tcancelSelected: actionSupportSchema(),\n\t\t\t\t\tcancelWholeRun: actionSupportSchema(),\n\t\t\t\t\tcontinueLive: actionSupportSchema(),\n\t\t\t\t\tretryFresh: actionSupportSchema(),\n\t\t\t\t}),\n\t\t\t}),\n\t\t\t{ maxItems: 128 },\n\t\t),\n\t});\n}\nfunction assertRegistry(ids: readonly string[]): void {\n\tif (dhCanonicalText([...ids].sort()) !== dhCanonicalText(getDhImplementedSchemaIds()))\n\t\tthrow new DhContractError(\"contract_incompatible\");\n}\nexport const parseDhCapabilityManifest = dhStrictDtoParser(\"capability manifest\", capabilitySchema, (manifest) => {\n\tassertRegistry(manifest.schemaIds);\n\tconst targets = new Set<string>();\n\tfor (const runtime of manifest.runtimes) {\n\t\tconst key = dhCanonicalText([runtime.runtime, runtime.buildSha256, runtime.mode, runtime.platform]);\n\t\tif (targets.has(key)) throw new DhContractError(\"schema_invalid\");\n\t\ttargets.add(key);\n\t\tfor (const support of Object.values(runtime.actions)) {\n\t\t\tif (support.status === \"supported\") {\n\t\t\t\tif (support.channel === \"none\" || support.qualificationSha256 === undefined)\n\t\t\t\t\tthrow new DhContractError(\"schema_invalid\");\n\t\t\t} else if (support.reasonCode === undefined || support.qualificationSha256 !== undefined)\n\t\t\t\tthrow new DhContractError(\"schema_invalid\");\n\t\t}\n\t}\n});\nexport type DhCapabilityManifest = ReturnType<typeof parseDhCapabilityManifest>;\nexport type DhCapabilityTarget = Pick<\n\tDhCapabilityManifest[\"runtimes\"][number],\n\t\"runtime\" | \"buildSha256\" | \"mode\" | \"platform\"\n>;\nexport function assertDhCapabilityAction(\n\tinput: unknown,\n\ttarget: DhCapabilityTarget,\n\taction: DhCapabilityAction,\n): DhCapabilityManifest[\"runtimes\"][number][\"actions\"][DhCapabilityAction] {\n\tconst manifest = parseDhCapabilityManifest(input);\n\tassertDhPlainData(target);\n\tif (!(DH_CAPABILITY_ACTIONS as readonly string[]).includes(action)) throw new DhContractError(\"capability_unknown\");\n\tconst runtime = manifest.runtimes.find(\n\t\t(value) =>\n\t\t\tvalue.runtime === target.runtime &&\n\t\t\tvalue.buildSha256 === target.buildSha256 &&\n\t\t\tvalue.mode === target.mode &&\n\t\t\tvalue.platform === target.platform,\n\t);\n\tif (!runtime) throw new DhContractError(\"capability_unknown\");\n\tconst support = runtime.actions[action];\n\tif (\n\t\tsupport.status === \"unsupported\" ||\n\t\ttarget.platform === \"win32\" ||\n\t\t[\"agent-exec-workflow\", \"experimental-transport\"].includes(target.mode)\n\t)\n\t\tthrow new DhContractError(\"capability_unsupported\");\n\tif (support.status !== \"supported\") throw new DhContractError(\"capability_unknown\");\n\treturn support;\n}\nconst relativeFile = Type.String({\n\tminLength: 1,\n\tmaxLength: 512,\n\tpattern: \"^(?!/)(?!.*(?:^|/)\\\\.\\\\.?(?:/|$))[A-Za-z0-9._-]+(?:/[A-Za-z0-9._-]+)*$\",\n});\nexport const parseDhContractArtifact = dhStrictDtoParser(\n\t\"contract artifact\",\n\t() =>\n\t\tstrict({\n\t\t\tschema: Type.Literal(DH_ARTIFACT_SCHEMA_IDS.contractArtifact),\n\t\t\tpackageName: Type.Literal(\"@humain/humain-code-contracts\"),\n\t\t\t// Recorded frozen 0.3.3 artifact, or any stable 0.4.x (additive ./flow-* exports); patch releases need no edit.\n\t\t\tpackageVersion: Type.String({ pattern: \"^(?:0\\\\.3\\\\.3|0\\\\.4\\\\.(?:0|[1-9]\\\\d*))$\" }),\n\t\t\tcontractVersion: Type.Literal(1),\n\t\t\ttarballFile: relativeFile,\n\t\t\tsha256: digest,\n\t\t\tnpmIntegrity: Type.String({ minLength: 1, maxLength: 128, pattern: \"^sha512-[A-Za-z0-9+/]{85}[AQgw]==$\" }),\n\t\t\tcapabilityManifestFile: relativeFile,\n\t\t\tcapabilityManifestSha256: digest,\n\t\t\tconformanceVectorSha256: digest,\n\t\t\tschemaIds,\n\t\t}),\n\t(artifact) => {\n\t\tassertRegistry(artifact.schemaIds);\n\t\tif (\n\t\t\tartifact.tarballFile.split(\"/\").at(-1) !== `humain-code-contracts-${artifact.sha256}.tgz` ||\n\t\t\tartifact.capabilityManifestFile.split(\"/\").at(-1) !==\n\t\t\t\t`humain-code-contracts-${artifact.sha256}.capabilities.json`\n\t\t)\n\t\t\tthrow new DhContractError(\"schema_invalid\");\n\t},\n);\nexport type DhContractArtifact = ReturnType<typeof parseDhContractArtifact>;\n/** Actual file/digest/export inspection is owned by the installer, not inferred from a descriptor. */\nexport interface DhContractArtifactInspection {\n\treadonly packageName: string;\n\treadonly packageVersion: string;\n\treadonly contractVersion: number;\n\treadonly exports: Readonly<Record<string, { readonly types: string; readonly import: string }>>;\n\treadonly distPresent: boolean;\n\treadonly sha256: string;\n\treadonly npmIntegrity: string;\n\treadonly capabilityManifest: unknown;\n\treadonly capabilityManifestSha256: string;\n\treadonly conformanceVectorSha256: string;\n\treadonly schemaIds: readonly string[];\n\treadonly tarballSymlink: boolean;\n\treadonly capabilityManifestSymlink: boolean;\n}\nconst FLOW_EXPORT = /^\\.\\/flow-([a-z][a-z0-9-]*)$/;\n/** Trace-era exports must match exactly; the only additions allowed are `./flow-<name>` -> `./dist/flow-<name>.{d.ts,js}`. */\nfunction exportsAreCompatible(actual: DhContractArtifactInspection[\"exports\"], required: typeof actual): boolean {\n\tconst rest: Record<string, (typeof actual)[string]> = { ...actual };\n\tfor (const [subpath, target] of Object.entries(required)) {\n\t\tif (rest[subpath] === undefined || dhCanonicalText(rest[subpath]) !== dhCanonicalText(target)) return false;\n\t\tdelete rest[subpath];\n\t}\n\treturn Object.entries(rest).every(([subpath, target]) => {\n\t\tconst name = FLOW_EXPORT.exec(subpath)?.[0].slice(2);\n\t\treturn (\n\t\t\tname !== undefined &&\n\t\t\tdhCanonicalText(target) === dhCanonicalText({ types: `./dist/${name}.d.ts`, import: `./dist/${name}.js` })\n\t\t);\n\t});\n}\nexport function assertDhContractArtifact(input: unknown, inspection: DhContractArtifactInspection): void {\n\tconst artifact = parseDhContractArtifact(input);\n\tassertDhPlainData(inspection);\n\tif (inspection.distPresent !== true) throw new DhContractError(\"artifact_unbuilt\");\n\tif (\n\t\tinspection.tarballSymlink !== false ||\n\t\tinspection.capabilityManifestSymlink !== false ||\n\t\tinspection.sha256 !== artifact.sha256 ||\n\t\tinspection.npmIntegrity !== artifact.npmIntegrity ||\n\t\tinspection.capabilityManifestSha256 !== artifact.capabilityManifestSha256\n\t)\n\t\tthrow new DhContractError(\"artifact_integrity\");\n\tconst exports = Object.fromEntries(\n\t\t[\"index\", \"orchestration\", \"rpc\", \"trace\", \"testing\"].map((name) => [\n\t\t\tname === \"index\" ? \".\" : `./${name}`,\n\t\t\t{ types: `./dist/${name}.d.ts`, import: `./dist/${name}.js` },\n\t\t]),\n\t);\n\tif (\n\t\tinspection.packageName !== artifact.packageName ||\n\t\tinspection.packageVersion !== artifact.packageVersion ||\n\t\tinspection.contractVersion !== 1 ||\n\t\tinspection.conformanceVectorSha256 !== artifact.conformanceVectorSha256 ||\n\t\t!exportsAreCompatible(inspection.exports, exports)\n\t)\n\t\tthrow new DhContractError(\"contract_incompatible\");\n\tassertRegistry(inspection.schemaIds);\n\tconst manifest = parseDhCapabilityManifest(inspection.capabilityManifest);\n\tif (\n\t\tmanifest.artifactSha256 !== artifact.sha256 ||\n\t\tmanifest.packageVersion !== artifact.packageVersion ||\n\t\tmanifest.conformanceVectorSha256 !== artifact.conformanceVectorSha256 ||\n\t\tdhCanonicalText([...manifest.schemaIds].sort()) !== dhCanonicalText([...artifact.schemaIds].sort())\n\t)\n\t\tthrow new DhContractError(\"contract_incompatible\");\n}\n"]}
|