@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
@@ -1,5 +1,11 @@
1
1
  # Changelog
2
2
 
3
+ ## [0.4.1] - 2026-10-09
4
+
5
+ ### Fixed
6
+
7
+ - `assertDhContractArtifact` accepts installed 0.4.x artifacts with the additive `./flow-*` exports.
8
+
3
9
  ## [0.4.0] - 2026-10-09
4
10
 
5
11
  ### Added
@@ -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: "0.3.3";
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;;;;;;;;;;;;CAyBnC,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;AACD,wBAAgB,wBAAwB,CAAC,KAAK,EAAE,OAAO,EAAE,UAAU,EAAE,4BAA4B,GAAG,IAAI,CAmCvG"}
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"}
@@ -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
- packageVersion: Type.Literal("0.3.3"),
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
- dhCanonicalText(inspection.exports) !== dhCanonicalText(exports))
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":"AAAA,OAAO,EAAE,IAAI,EAAE,MAAM,SAAS,CAAC;AAC/B,OAAO,EAAE,iBAAiB,EAAE,eAAe,EAAE,eAAe,EAAE,MAAM,sBAAsB,CAAC;AAC3F,OAAO,EAAE,kBAAkB,EAAE,iBAAiB,EAAE,MAAM,iBAAiB,CAAC;AACxE,OAAO,EAAE,qBAAqB,EAAE,MAAM,oBAAoB,CAAC;AAC3D,OAAO,EAAE,qBAAqB,EAAE,MAAM,oBAAoB,CAAC;AAE3D,MAAM,CAAC,MAAM,sBAAsB,GAAG,MAAM,CAAC,MAAM,CAAC;IACnD,kBAAkB,EAAE,0BAA0B;IAC9C,gBAAgB,EAAE,wBAAwB;CACjC,CAAC,CAAC;AACZ,oFAAoF;AACpF,MAAM,UAAU,yBAAyB;IACxC,OAAO,MAAM,CAAC,MAAM,CACnB;QACC,YAAY;QACZ,eAAe;QACf,UAAU;QACV,qBAAqB;QACrB,oBAAoB;QACpB,sBAAsB;QACtB,mBAAmB;QACnB,kBAAkB;QAClB,GAAG,MAAM,CAAC,MAAM,CAAC,kBAAkB,CAAC;QACpC,GAAG,MAAM,CAAC,MAAM,CAAC,qBAAqB,CAAC;QACvC,GAAG,MAAM,CAAC,MAAM,CAAC,qBAAqB,CAAC;QACvC,GAAG,MAAM,CAAC,MAAM,CAAC,sBAAsB,CAAC;KACxC,CAAC,IAAI,EAAE,CACR,CAAC;AACH,CAAC;AACD,MAAM,MAAM,GAAG,CAAoD,UAAa,EAAE,EAAE,CACnF,IAAI,CAAC,MAAM,CAAC,UAAU,EAAE,EAAE,oBAAoB,EAAE,KAAK,EAAE,CAAC,CAAC;AAC1D,MAAM,MAAM,GAAG,IAAI,CAAC,MAAM,CAAC,EAAE,OAAO,EAAE,gBAAgB,EAAE,CAAC,CAAC;AAC1D,MAAM,GAAG,GAAG,IAAI,CAAC,MAAM,CAAC,EAAE,SAAS,EAAE,CAAC,EAAE,SAAS,EAAE,GAAG,EAAE,OAAO,EAAE,mBAAmB,EAAE,CAAC,CAAC;AACxF,MAAM,SAAS,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,MAAM,CAAC,EAAE,SAAS,EAAE,CAAC,EAAE,SAAS,EAAE,GAAG,EAAE,CAAC,EAAE;IAC3E,QAAQ,EAAE,CAAC;IACX,QAAQ,EAAE,GAAG;IACb,WAAW,EAAE,IAAI;CACjB,CAAC,CAAC;AACH,MAAM,CAAC,MAAM,qBAAqB,GAAG;IACpC,kBAAkB;IAClB,gBAAgB;IAChB,gBAAgB;IAChB,cAAc;IACd,YAAY;CACH,CAAC;AAEX,SAAS,mBAAmB;IAC3B,OAAO,MAAM,CAAC;QACb,MAAM,EAAE,IAAI,CAAC,IAAI,CAAC,CAAC,WAAW,EAAE,aAAa,EAAE,SAAS,CAAU,CAAC;QACnE,OAAO,EAAE,IAAI,CAAC,IAAI,CAAC,CAAC,aAAa,EAAE,eAAe,EAAE,YAAY,EAAE,iBAAiB,EAAE,MAAM,CAAU,CAAC;QACtG,mBAAmB,EAAE,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC;QAC1C,UAAU,EAAE,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC;KAC9B,CAAC,CAAC;AACJ,CAAC;AACD,SAAS,gBAAgB;IACxB,OAAO,MAAM,CAAC;QACb,MAAM,EAAE,IAAI,CAAC,OAAO,CAAC,sBAAsB,CAAC,kBAAkB,CAAC;QAC/D,WAAW,EAAE,IAAI,CAAC,OAAO,CAAC,+BAA+B,CAAC;QAC1D,cAAc,EAAE,IAAI,CAAC,MAAM,CAAC,EAAE,SAAS,EAAE,CAAC,EAAE,SAAS,EAAE,EAAE,EAAE,CAAC;QAC5D,eAAe,EAAE,IAAI,CAAC,OAAO,CAAC,CAAC,CAAC;QAChC,cAAc,EAAE,MAAM;QACtB,gBAAgB,EAAE,IAAI,CAAC,OAAO,CAAC,oBAAoB,CAAC;QACpD,SAAS;QACT,uBAAuB,EAAE,MAAM;QAC/B,QAAQ,EAAE,IAAI,CAAC,KAAK,CACnB,MAAM,CAAC;YACN,OAAO,EAAE,IAAI,CAAC,IAAI,CAAC,CAAC,UAAU,EAAE,SAAS,EAAE,MAAM,EAAE,cAAc,CAAU,CAAC;YAC5E,WAAW,EAAE,MAAM;YACnB,IAAI,EAAE,GAAG;YACT,QAAQ,EAAE,IAAI,CAAC,IAAI,CAAC,CAAC,QAAQ,EAAE,OAAO,EAAE,OAAO,CAAU,CAAC;YAC1D,OAAO,EAAE,MAAM,CAAC;gBACf,gBAAgB,EAAE,mBAAmB,EAAE;gBACvC,cAAc,EAAE,mBAAmB,EAAE;gBACrC,cAAc,EAAE,mBAAmB,EAAE;gBACrC,YAAY,EAAE,mBAAmB,EAAE;gBACnC,UAAU,EAAE,mBAAmB,EAAE;aACjC,CAAC;SACF,CAAC,EACF,EAAE,QAAQ,EAAE,GAAG,EAAE,CACjB;KACD,CAAC,CAAC;AACJ,CAAC;AACD,SAAS,cAAc,CAAC,GAAsB;IAC7C,IAAI,eAAe,CAAC,CAAC,GAAG,GAAG,CAAC,CAAC,IAAI,EAAE,CAAC,KAAK,eAAe,CAAC,yBAAyB,EAAE,CAAC;QACpF,MAAM,IAAI,eAAe,CAAC,uBAAuB,CAAC,CAAC;AACrD,CAAC;AACD,MAAM,CAAC,MAAM,yBAAyB,GAAG,iBAAiB,CAAC,qBAAqB,EAAE,gBAAgB,EAAE,CAAC,QAAQ,EAAE,EAAE;IAChH,cAAc,CAAC,QAAQ,CAAC,SAAS,CAAC,CAAC;IACnC,MAAM,OAAO,GAAG,IAAI,GAAG,EAAU,CAAC;IAClC,KAAK,MAAM,OAAO,IAAI,QAAQ,CAAC,QAAQ,EAAE,CAAC;QACzC,MAAM,GAAG,GAAG,eAAe,CAAC,CAAC,OAAO,CAAC,OAAO,EAAE,OAAO,CAAC,WAAW,EAAE,OAAO,CAAC,IAAI,EAAE,OAAO,CAAC,QAAQ,CAAC,CAAC,CAAC;QACpG,IAAI,OAAO,CAAC,GAAG,CAAC,GAAG,CAAC;YAAE,MAAM,IAAI,eAAe,CAAC,gBAAgB,CAAC,CAAC;QAClE,OAAO,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;QACjB,KAAK,MAAM,OAAO,IAAI,MAAM,CAAC,MAAM,CAAC,OAAO,CAAC,OAAO,CAAC,EAAE,CAAC;YACtD,IAAI,OAAO,CAAC,MAAM,KAAK,WAAW,EAAE,CAAC;gBACpC,IAAI,OAAO,CAAC,OAAO,KAAK,MAAM,IAAI,OAAO,CAAC,mBAAmB,KAAK,SAAS;oBAC1E,MAAM,IAAI,eAAe,CAAC,gBAAgB,CAAC,CAAC;YAC9C,CAAC;iBAAM,IAAI,OAAO,CAAC,UAAU,KAAK,SAAS,IAAI,OAAO,CAAC,mBAAmB,KAAK,SAAS;gBACvF,MAAM,IAAI,eAAe,CAAC,gBAAgB,CAAC,CAAC;QAC9C,CAAC;IACF,CAAC;AACF,CAAC,CAAC,CAAC;AAMH,MAAM,UAAU,wBAAwB,CACvC,KAAc,EACd,MAA0B,EAC1B,MAA0B;IAE1B,MAAM,QAAQ,GAAG,yBAAyB,CAAC,KAAK,CAAC,CAAC;IAClD,iBAAiB,CAAC,MAAM,CAAC,CAAC;IAC1B,IAAI,CAAE,qBAA2C,CAAC,QAAQ,CAAC,MAAM,CAAC;QAAE,MAAM,IAAI,eAAe,CAAC,oBAAoB,CAAC,CAAC;IACpH,MAAM,OAAO,GAAG,QAAQ,CAAC,QAAQ,CAAC,IAAI,CACrC,CAAC,KAAK,EAAE,EAAE,CACT,KAAK,CAAC,OAAO,KAAK,MAAM,CAAC,OAAO;QAChC,KAAK,CAAC,WAAW,KAAK,MAAM,CAAC,WAAW;QACxC,KAAK,CAAC,IAAI,KAAK,MAAM,CAAC,IAAI;QAC1B,KAAK,CAAC,QAAQ,KAAK,MAAM,CAAC,QAAQ,CACnC,CAAC;IACF,IAAI,CAAC,OAAO;QAAE,MAAM,IAAI,eAAe,CAAC,oBAAoB,CAAC,CAAC;IAC9D,MAAM,OAAO,GAAG,OAAO,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC;IACxC,IACC,OAAO,CAAC,MAAM,KAAK,aAAa;QAChC,MAAM,CAAC,QAAQ,KAAK,OAAO;QAC3B,CAAC,qBAAqB,EAAE,wBAAwB,CAAC,CAAC,QAAQ,CAAC,MAAM,CAAC,IAAI,CAAC;QAEvE,MAAM,IAAI,eAAe,CAAC,wBAAwB,CAAC,CAAC;IACrD,IAAI,OAAO,CAAC,MAAM,KAAK,WAAW;QAAE,MAAM,IAAI,eAAe,CAAC,oBAAoB,CAAC,CAAC;IACpF,OAAO,OAAO,CAAC;AAChB,CAAC;AACD,MAAM,YAAY,GAAG,IAAI,CAAC,MAAM,CAAC;IAChC,SAAS,EAAE,CAAC;IACZ,SAAS,EAAE,GAAG;IACd,OAAO,EAAE,wEAAwE;CACjF,CAAC,CAAC;AACH,MAAM,CAAC,MAAM,uBAAuB,GAAG,iBAAiB,CACvD,mBAAmB,EACnB,GAAG,EAAE,CACJ,MAAM,CAAC;IACN,MAAM,EAAE,IAAI,CAAC,OAAO,CAAC,sBAAsB,CAAC,gBAAgB,CAAC;IAC7D,WAAW,EAAE,IAAI,CAAC,OAAO,CAAC,+BAA+B,CAAC;IAC1D,cAAc,EAAE,IAAI,CAAC,OAAO,CAAC,OAAO,CAAC;IACrC,eAAe,EAAE,IAAI,CAAC,OAAO,CAAC,CAAC,CAAC;IAChC,WAAW,EAAE,YAAY;IACzB,MAAM,EAAE,MAAM;IACd,YAAY,EAAE,IAAI,CAAC,MAAM,CAAC,EAAE,SAAS,EAAE,CAAC,EAAE,SAAS,EAAE,GAAG,EAAE,OAAO,EAAE,oCAAoC,EAAE,CAAC;IAC1G,sBAAsB,EAAE,YAAY;IACpC,wBAAwB,EAAE,MAAM;IAChC,uBAAuB,EAAE,MAAM;IAC/B,SAAS;CACT,CAAC,EACH,CAAC,QAAQ,EAAE,EAAE;IACZ,cAAc,CAAC,QAAQ,CAAC,SAAS,CAAC,CAAC;IACnC,IACC,QAAQ,CAAC,WAAW,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,KAAK,yBAAyB,QAAQ,CAAC,MAAM,MAAM;QACzF,QAAQ,CAAC,sBAAsB,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC;YAChD,yBAAyB,QAAQ,CAAC,MAAM,oBAAoB;QAE7D,MAAM,IAAI,eAAe,CAAC,gBAAgB,CAAC,CAAC;AAC9C,CAAC,CACD,CAAC;AAkBF,MAAM,UAAU,wBAAwB,CAAC,KAAc,EAAE,UAAwC;IAChG,MAAM,QAAQ,GAAG,uBAAuB,CAAC,KAAK,CAAC,CAAC;IAChD,iBAAiB,CAAC,UAAU,CAAC,CAAC;IAC9B,IAAI,UAAU,CAAC,WAAW,KAAK,IAAI;QAAE,MAAM,IAAI,eAAe,CAAC,kBAAkB,CAAC,CAAC;IACnF,IACC,UAAU,CAAC,cAAc,KAAK,KAAK;QACnC,UAAU,CAAC,yBAAyB,KAAK,KAAK;QAC9C,UAAU,CAAC,MAAM,KAAK,QAAQ,CAAC,MAAM;QACrC,UAAU,CAAC,YAAY,KAAK,QAAQ,CAAC,YAAY;QACjD,UAAU,CAAC,wBAAwB,KAAK,QAAQ,CAAC,wBAAwB;QAEzE,MAAM,IAAI,eAAe,CAAC,oBAAoB,CAAC,CAAC;IACjD,MAAM,OAAO,GAAG,MAAM,CAAC,WAAW,CACjC,CAAC,OAAO,EAAE,eAAe,EAAE,KAAK,EAAE,OAAO,EAAE,SAAS,CAAC,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC;QACnE,IAAI,KAAK,OAAO,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,KAAK,IAAI,EAAE;QACpC,EAAE,KAAK,EAAE,UAAU,IAAI,OAAO,EAAE,MAAM,EAAE,UAAU,IAAI,KAAK,EAAE;KAC7D,CAAC,CACF,CAAC;IACF,IACC,UAAU,CAAC,WAAW,KAAK,QAAQ,CAAC,WAAW;QAC/C,UAAU,CAAC,cAAc,KAAK,QAAQ,CAAC,cAAc;QACrD,UAAU,CAAC,eAAe,KAAK,CAAC;QAChC,UAAU,CAAC,uBAAuB,KAAK,QAAQ,CAAC,uBAAuB;QACvE,eAAe,CAAC,UAAU,CAAC,OAAO,CAAC,KAAK,eAAe,CAAC,OAAO,CAAC;QAEhE,MAAM,IAAI,eAAe,CAAC,uBAAuB,CAAC,CAAC;IACpD,cAAc,CAAC,UAAU,CAAC,SAAS,CAAC,CAAC;IACrC,MAAM,QAAQ,GAAG,yBAAyB,CAAC,UAAU,CAAC,kBAAkB,CAAC,CAAC;IAC1E,IACC,QAAQ,CAAC,cAAc,KAAK,QAAQ,CAAC,MAAM;QAC3C,QAAQ,CAAC,cAAc,KAAK,QAAQ,CAAC,cAAc;QACnD,QAAQ,CAAC,uBAAuB,KAAK,QAAQ,CAAC,uBAAuB;QACrE,eAAe,CAAC,CAAC,GAAG,QAAQ,CAAC,SAAS,CAAC,CAAC,IAAI,EAAE,CAAC,KAAK,eAAe,CAAC,CAAC,GAAG,QAAQ,CAAC,SAAS,CAAC,CAAC,IAAI,EAAE,CAAC;QAEnG,MAAM,IAAI,eAAe,CAAC,uBAAuB,CAAC,CAAC;AACrD,CAAC","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"]}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@humain/humain-code-contracts",
3
- "version": "0.4.0",
3
+ "version": "0.4.1",
4
4
  "private": false,
5
5
  "description": "Runtime-neutral HUMAIN Code CLI execution and RPC wire contracts",
6
6
  "type": "module",