@cat-factory/contracts 0.224.0 → 0.225.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.
|
@@ -46,6 +46,67 @@ export type BinaryModality = v.InferOutput<typeof binaryModalitySchema>;
|
|
|
46
46
|
* that the split exists to make someone restate.
|
|
47
47
|
*/
|
|
48
48
|
export declare function isBinaryModality(value: string): value is BinaryModality;
|
|
49
|
+
/** A content type that more than one of a step's selected integrations produces. */
|
|
50
|
+
export interface BinaryModalityOverlap {
|
|
51
|
+
/** The content type they share. */
|
|
52
|
+
modality: BinaryModality;
|
|
53
|
+
/** The ids that produce it, in the order they were given. Always two or more. */
|
|
54
|
+
generatorIds: readonly string[];
|
|
55
|
+
}
|
|
56
|
+
/**
|
|
57
|
+
* The content types more than one of these integrations produces.
|
|
58
|
+
*
|
|
59
|
+
* A modality DECIDES which generator may serve a step, and it stops deciding at the second
|
|
60
|
+
* producer of one kind: from there the choice is per artifact and it is not one the platform can
|
|
61
|
+
* make. So this computes only the FACT that a choice exists, and deliberately ranks nothing.
|
|
62
|
+
* Narrowness is not correctness (a specialist pixel-art API and a specialist photo API are
|
|
63
|
+
* equally narrow and answer different questions), and the platform has no cost model, no quality
|
|
64
|
+
* model and no view of what the step is for. A confident wrong preference is worse than none,
|
|
65
|
+
* because it displaces the per-integration notes whoever is deciding would otherwise have read.
|
|
66
|
+
*
|
|
67
|
+
* Shared rather than copied, for the reason stated at the top of this module: kernel states the
|
|
68
|
+
* overlap to the AGENT in its brief and the SPA states it to the HUMAN in the step picker, and
|
|
69
|
+
* the two must not be able to disagree about which integrations overlap.
|
|
70
|
+
*
|
|
71
|
+
* Order is derived from the input, so a brief re-rendered per dispatch is byte-identical:
|
|
72
|
+
* modalities come out in first-appearance order and ids in the order they were given. An id
|
|
73
|
+
* repeated in the input contributes ONCE, or a step that happened to name one integration twice
|
|
74
|
+
* would be told it holds two producers of a kind it holds one of.
|
|
75
|
+
*/
|
|
76
|
+
export declare function binaryModalityOverlaps(generators: readonly {
|
|
77
|
+
id: string;
|
|
78
|
+
modalities: readonly BinaryModality[];
|
|
79
|
+
}[]): BinaryModalityOverlap[];
|
|
80
|
+
/** How a step's declared FORMATS stand against what its selected integrations say they emit. */
|
|
81
|
+
export interface BinaryFormatCoverage {
|
|
82
|
+
/** Declared formats no selected integration emits, judged against integrations that DECLARED
|
|
83
|
+
* theirs. These refuse the run. */
|
|
84
|
+
uncovered: string[];
|
|
85
|
+
/** Declared formats nothing selected claims, where at least one selected integration declares
|
|
86
|
+
* no formats at all — so the requirement MIGHT be met and nothing here may say otherwise. */
|
|
87
|
+
unverifiable: string[];
|
|
88
|
+
}
|
|
89
|
+
/**
|
|
90
|
+
* Judge `required` against what `selected` declares it emits.
|
|
91
|
+
*
|
|
92
|
+
* THREE outcomes, not two, and the third is the whole reason this is its own function. A
|
|
93
|
+
* generator declaring no `mediaTypes` is an explicit, documented state — "only the coarse
|
|
94
|
+
* modality is known" — so a requirement it cannot be judged against is UNVERIFIABLE, not
|
|
95
|
+
* uncovered. Refusing there would punish the honest declaration and break every integration that
|
|
96
|
+
* has not pinned its formats down; calling it covered would be the mirror mistake, a clean bill
|
|
97
|
+
* of health nobody issued, on the surface that decides whether the run may start. So the run is
|
|
98
|
+
* admitted and the gap is STATED — to the agent in its brief, and to whoever composes the step —
|
|
99
|
+
* which is the same disposition `generatorsUnverified` takes on the settlement side.
|
|
100
|
+
*
|
|
101
|
+
* Shared by admission, the brief and the picker, so none of them can hold a different opinion
|
|
102
|
+
* about the same selection. An ABSENT `mediaTypes` and an empty one are one state here, because
|
|
103
|
+
* that is the one state the wire type and the registry view are each spelling: the wire type
|
|
104
|
+
* omits the field, a code-registered definition may list nothing, and both mean "only my
|
|
105
|
+
* modality is known".
|
|
106
|
+
*/
|
|
107
|
+
export declare function binaryFormatCoverage(required: readonly string[], selected: readonly {
|
|
108
|
+
mediaTypes?: readonly string[];
|
|
109
|
+
}[]): BinaryFormatCoverage;
|
|
49
110
|
/**
|
|
50
111
|
* Every {@link BinaryModality} a media type is CONSISTENT with — empty when nothing here
|
|
51
112
|
* recognises it.
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"binary-modalities.d.ts","sourceRoot":"","sources":["../src/binary-modalities.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,CAAC,MAAM,SAAS,CAAA;
|
|
1
|
+
{"version":3,"file":"binary-modalities.d.ts","sourceRoot":"","sources":["../src/binary-modalities.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,CAAC,MAAM,SAAS,CAAA;AAoB5B;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA8BG;AACH,eAAO,MAAM,oBAAoB,8FAqB/B,CAAA;AACF,MAAM,MAAM,cAAc,GAAG,CAAC,CAAC,WAAW,CAAC,OAAO,oBAAoB,CAAC,CAAA;AAEvE;;;;;;;;;;;;GAYG;AACH,wBAAgB,gBAAgB,CAAC,KAAK,EAAE,MAAM,GAAG,KAAK,IAAI,cAAc,CAEvE;AAID,oFAAoF;AACpF,MAAM,WAAW,qBAAqB;IACpC,mCAAmC;IACnC,QAAQ,EAAE,cAAc,CAAA;IACxB,iFAAiF;IACjF,YAAY,EAAE,SAAS,MAAM,EAAE,CAAA;CAChC;AAED;;;;;;;;;;;;;;;;;;;GAmBG;AACH,wBAAgB,sBAAsB,CACpC,UAAU,EAAE,SAAS;IAAE,EAAE,EAAE,MAAM,CAAC;IAAC,UAAU,EAAE,SAAS,cAAc,EAAE,CAAA;CAAE,EAAE,GAC3E,qBAAqB,EAAE,CAiBzB;AAED,gGAAgG;AAChG,MAAM,WAAW,oBAAoB;IACnC;wCACoC;IACpC,SAAS,EAAE,MAAM,EAAE,CAAA;IACnB;kGAC8F;IAC9F,YAAY,EAAE,MAAM,EAAE,CAAA;CACvB;AAED;;;;;;;;;;;;;;;;;GAiBG;AACH,wBAAgB,oBAAoB,CAClC,QAAQ,EAAE,SAAS,MAAM,EAAE,EAC3B,QAAQ,EAAE,SAAS;IAAE,UAAU,CAAC,EAAE,SAAS,MAAM,EAAE,CAAA;CAAE,EAAE,GACtD,oBAAoB,CAatB;AAKD;;;;;;;;;;;;;;;;;;GAkBG;AACH,wBAAgB,qBAAqB,CAAC,KAAK,EAAE,MAAM,GAAG,cAAc,EAAE,CAuBrE;AAED;;;;;;;;GAQG;AACH,wBAAgB,mBAAmB,CAAC,KAAK,EAAE,MAAM,GAAG,cAAc,GAAG,IAAI,CAGxE;AAED;;;;;;;;;;;;;;;;;;GAkBG;AACH,wBAAgB,kBAAkB,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM,GAAG,IAAI,CAI/D;AAED;;;GAGG;AACH,eAAO,MAAM,eAAe,uPAU3B,CAAA"}
|
|
@@ -7,6 +7,14 @@ import * as v from 'valibot';
|
|
|
7
7
|
// Its own leaf module — no imports beyond valibot — because both of those modules need it and one
|
|
8
8
|
// of them sits downstream of the entity schemas the other is reached through. A vocabulary this
|
|
9
9
|
// small has no business creating an import cycle.
|
|
10
|
+
//
|
|
11
|
+
// It also holds the two pure rules that read a step's SELECTION against that vocabulary
|
|
12
|
+
// ({@link binaryModalityOverlaps}, {@link binaryFormatCoverage}). Both are read by the backend,
|
|
13
|
+
// which composes the agent's brief and admits the run, and by the SPA, which offers the selection
|
|
14
|
+
// in the first place. The SPA cannot see kernel, so a rule with a home only on one side becomes a
|
|
15
|
+
// hand-kept copy on the other, which is how a step comes to be described one way in the builder
|
|
16
|
+
// and another way in the brief. Each reads nothing but this vocabulary and a structural view of a
|
|
17
|
+
// generator, so neither needs anything the other side cannot import.
|
|
10
18
|
// ---------------------------------------------------------------------------
|
|
11
19
|
/**
|
|
12
20
|
* The CONTENT TYPE a generative integration produces, as a closed vocabulary.
|
|
@@ -78,6 +86,82 @@ export function isBinaryModality(value) {
|
|
|
78
86
|
return BINARY_MODALITY_SET.has(value);
|
|
79
87
|
}
|
|
80
88
|
const BINARY_MODALITY_SET = new Set(binaryModalitySchema.options);
|
|
89
|
+
/**
|
|
90
|
+
* The content types more than one of these integrations produces.
|
|
91
|
+
*
|
|
92
|
+
* A modality DECIDES which generator may serve a step, and it stops deciding at the second
|
|
93
|
+
* producer of one kind: from there the choice is per artifact and it is not one the platform can
|
|
94
|
+
* make. So this computes only the FACT that a choice exists, and deliberately ranks nothing.
|
|
95
|
+
* Narrowness is not correctness (a specialist pixel-art API and a specialist photo API are
|
|
96
|
+
* equally narrow and answer different questions), and the platform has no cost model, no quality
|
|
97
|
+
* model and no view of what the step is for. A confident wrong preference is worse than none,
|
|
98
|
+
* because it displaces the per-integration notes whoever is deciding would otherwise have read.
|
|
99
|
+
*
|
|
100
|
+
* Shared rather than copied, for the reason stated at the top of this module: kernel states the
|
|
101
|
+
* overlap to the AGENT in its brief and the SPA states it to the HUMAN in the step picker, and
|
|
102
|
+
* the two must not be able to disagree about which integrations overlap.
|
|
103
|
+
*
|
|
104
|
+
* Order is derived from the input, so a brief re-rendered per dispatch is byte-identical:
|
|
105
|
+
* modalities come out in first-appearance order and ids in the order they were given. An id
|
|
106
|
+
* repeated in the input contributes ONCE, or a step that happened to name one integration twice
|
|
107
|
+
* would be told it holds two producers of a kind it holds one of.
|
|
108
|
+
*/
|
|
109
|
+
export function binaryModalityOverlaps(generators) {
|
|
110
|
+
const byModality = new Map();
|
|
111
|
+
const seen = new Set();
|
|
112
|
+
for (const generator of generators) {
|
|
113
|
+
if (seen.has(generator.id))
|
|
114
|
+
continue;
|
|
115
|
+
seen.add(generator.id);
|
|
116
|
+
// Deduplicated per generator for the same reason ids are deduplicated across them: a
|
|
117
|
+
// definition listing one modality twice is not two producers of it.
|
|
118
|
+
for (const modality of new Set(generator.modalities)) {
|
|
119
|
+
const ids = byModality.get(modality);
|
|
120
|
+
if (ids)
|
|
121
|
+
ids.push(generator.id);
|
|
122
|
+
else
|
|
123
|
+
byModality.set(modality, [generator.id]);
|
|
124
|
+
}
|
|
125
|
+
}
|
|
126
|
+
return [...byModality]
|
|
127
|
+
.filter(([, generatorIds]) => generatorIds.length > 1)
|
|
128
|
+
.map(([modality, generatorIds]) => ({ modality, generatorIds }));
|
|
129
|
+
}
|
|
130
|
+
/**
|
|
131
|
+
* Judge `required` against what `selected` declares it emits.
|
|
132
|
+
*
|
|
133
|
+
* THREE outcomes, not two, and the third is the whole reason this is its own function. A
|
|
134
|
+
* generator declaring no `mediaTypes` is an explicit, documented state — "only the coarse
|
|
135
|
+
* modality is known" — so a requirement it cannot be judged against is UNVERIFIABLE, not
|
|
136
|
+
* uncovered. Refusing there would punish the honest declaration and break every integration that
|
|
137
|
+
* has not pinned its formats down; calling it covered would be the mirror mistake, a clean bill
|
|
138
|
+
* of health nobody issued, on the surface that decides whether the run may start. So the run is
|
|
139
|
+
* admitted and the gap is STATED — to the agent in its brief, and to whoever composes the step —
|
|
140
|
+
* which is the same disposition `generatorsUnverified` takes on the settlement side.
|
|
141
|
+
*
|
|
142
|
+
* Shared by admission, the brief and the picker, so none of them can hold a different opinion
|
|
143
|
+
* about the same selection. An ABSENT `mediaTypes` and an empty one are one state here, because
|
|
144
|
+
* that is the one state the wire type and the registry view are each spelling: the wire type
|
|
145
|
+
* omits the field, a code-registered definition may list nothing, and both mean "only my
|
|
146
|
+
* modality is known".
|
|
147
|
+
*/
|
|
148
|
+
export function binaryFormatCoverage(required, selected) {
|
|
149
|
+
const emitted = new Set(selected.flatMap((generator) => generator.mediaTypes ?? []));
|
|
150
|
+
// An EMPTY selection declares nothing and hides nothing: with no integration to be silent, a
|
|
151
|
+
// format requirement is uncovered outright, exactly as a modality requirement already is.
|
|
152
|
+
const undeclared = selected.some((generator) => (generator.mediaTypes ?? []).length === 0);
|
|
153
|
+
const uncovered = [];
|
|
154
|
+
const unverifiable = [];
|
|
155
|
+
for (const mediaType of required) {
|
|
156
|
+
if (emitted.has(mediaType))
|
|
157
|
+
continue;
|
|
158
|
+
if (undeclared)
|
|
159
|
+
unverifiable.push(mediaType);
|
|
160
|
+
else
|
|
161
|
+
uncovered.push(mediaType);
|
|
162
|
+
}
|
|
163
|
+
return { uncovered, unverifiable };
|
|
164
|
+
}
|
|
81
165
|
/** The 3D containers, which say the content is 3D and DELIBERATELY nothing more. */
|
|
82
166
|
const THREE_D = ['3d-model', '3d-scene'];
|
|
83
167
|
/**
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"binary-modalities.js","sourceRoot":"","sources":["../src/binary-modalities.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,CAAC,MAAM,SAAS,CAAA;AAE5B,8EAA8E;AAC9E,kGAAkG;AAClG,8FAA8F;AAC9F,0CAA0C;AAC1C,EAAE;AACF,kGAAkG;AAClG,gGAAgG;AAChG,kDAAkD;AAClD,8EAA8E;AAE9E;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA8BG;AACH,MAAM,CAAC,MAAM,oBAAoB,GAAG,CAAC,CAAC,QAAQ,CAAC;IAC7C,+EAA+E;IAC/E,OAAO;IACP,2FAA2F;IAC3F,OAAO;IACP,mFAAmF;IACnF,OAAO;IACP;;;;OAIG;IACH,UAAU;IACV;;;;OAIG;IACH,UAAU;IACV,0DAA0D;IAC1D,UAAU;CACX,CAAC,CAAA;AAGF;;;;;;;;;;;;GAYG;AACH,MAAM,UAAU,gBAAgB,CAAC,KAAa;IAC5C,OAAO,mBAAmB,CAAC,GAAG,CAAC,KAAK,CAAC,CAAA;AACvC,CAAC;AAED,MAAM,mBAAmB,GAAwB,IAAI,GAAG,CAAC,oBAAoB,CAAC,OAAO,CAAC,CAAA;
|
|
1
|
+
{"version":3,"file":"binary-modalities.js","sourceRoot":"","sources":["../src/binary-modalities.ts"],"names":[],"mappings":"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"}
|