agentera 3.0.0-dev.21 → 3.0.0-dev.22
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/bundle/CHANGELOG.md +9 -0
- package/bundle/references/analysis/evidence-tier-authority.yaml +516 -0
- package/bundle/references/artifacts/verbosity-budget-authority.yaml +42 -0
- package/bundle/skills/agentera/capabilities/profile/schemas/validation.yaml +31 -3
- package/bundle/skills/agentera/schemas/artifacts/changelog.yaml +1 -0
- package/bundle/skills/agentera/schemas/artifacts/design.yaml +1 -0
- package/bundle/skills/agentera/schemas/artifacts/todo.yaml +1 -0
- package/dist/analytics/extractCorpus/cli.js +33 -5
- package/dist/analytics/extractCorpus/cli.js.map +1 -1
- package/dist/analytics/extractCorpus/evidenceTiers.js +561 -0
- package/dist/analytics/extractCorpus/evidenceTiers.js.map +1 -0
- package/dist/analytics/extractCorpus/extractCorpusParity.js +1 -0
- package/dist/analytics/extractCorpus/extractCorpusParity.js.map +1 -1
- package/dist/analytics/extractCorpus/index.js +3 -0
- package/dist/analytics/extractCorpus/index.js.map +1 -1
- package/dist/analytics/extractCorpus/tierReader.js +109 -0
- package/dist/analytics/extractCorpus/tierReader.js.map +1 -0
- package/dist/analytics/profileSignals.js +212 -0
- package/dist/analytics/profileSignals.js.map +1 -0
- package/dist/analytics/usageStats.js +104 -20
- package/dist/analytics/usageStats.js.map +1 -1
- package/dist/capabilities/profile/instructions.js +1 -1
- package/dist/capabilities/profile/instructions.js.map +1 -1
- package/dist/cli/capabilityContext/shared.js +1 -1
- package/dist/cli/capabilityContext/shared.js.map +1 -1
- package/dist/cli/commands/lint.js +10 -2
- package/dist/cli/commands/lint.js.map +1 -1
- package/dist/cli/commands/prime/collectOrientationState.js +3 -0
- package/dist/cli/commands/prime/collectOrientationState.js.map +1 -1
- package/dist/cli/commands/report.js +55 -15
- package/dist/cli/commands/report.js.map +1 -1
- package/dist/cli/orientation/corpusCoverage.js +32 -0
- package/dist/cli/orientation/corpusCoverage.js.map +1 -1
- package/dist/registries/evidenceTierContract.js +362 -0
- package/dist/registries/evidenceTierContract.js.map +1 -0
- package/dist/registries/verbosityBudgetContract.js +206 -0
- package/dist/registries/verbosityBudgetContract.js.map +1 -0
- package/dist/state/startupAnalysis/benchmark.js +70 -8
- package/dist/state/startupAnalysis/benchmark.js.map +1 -1
- package/dist/state/startupAnalysis/threshold.js +13 -0
- package/dist/state/startupAnalysis/threshold.js.map +1 -1
- package/dist/validate/selfAudit.js +38 -43
- package/dist/validate/selfAudit.js.map +1 -1
- package/package.json +2 -2
|
@@ -0,0 +1,362 @@
|
|
|
1
|
+
import path from "node:path";
|
|
2
|
+
import { loadYamlMappingFile } from "../core/yaml.js";
|
|
3
|
+
import { resolveSourceRoot } from "../core/sourceRoot.js";
|
|
4
|
+
export class EvidenceTierContractError extends Error {
|
|
5
|
+
constructor(message) {
|
|
6
|
+
super(message);
|
|
7
|
+
this.name = "EvidenceTierContractError";
|
|
8
|
+
}
|
|
9
|
+
}
|
|
10
|
+
/** Supported source families the contract must never silently omit. */
|
|
11
|
+
export const REQUIRED_SOURCE_FAMILIES = [
|
|
12
|
+
"codex",
|
|
13
|
+
"cursor",
|
|
14
|
+
"opencode",
|
|
15
|
+
"copilot",
|
|
16
|
+
"claude-code",
|
|
17
|
+
];
|
|
18
|
+
/** Signal semantics whose required meaning must remain available. */
|
|
19
|
+
export const REQUIRED_SIGNAL_KINDS = [
|
|
20
|
+
"correction",
|
|
21
|
+
"decision",
|
|
22
|
+
"question",
|
|
23
|
+
"instruction",
|
|
24
|
+
"configuration",
|
|
25
|
+
"record_identity",
|
|
26
|
+
"date",
|
|
27
|
+
"evidence_anchor",
|
|
28
|
+
];
|
|
29
|
+
/** Compatibility states that must have deterministic, actionable outcomes. */
|
|
30
|
+
export const REQUIRED_COMPATIBILITY_STATES = [
|
|
31
|
+
"oversized",
|
|
32
|
+
"legacy",
|
|
33
|
+
"missing",
|
|
34
|
+
"corrupt",
|
|
35
|
+
"incomplete",
|
|
36
|
+
];
|
|
37
|
+
/** Latent startup-analysis reader that must appear in the consumer map. */
|
|
38
|
+
export const STARTUP_ANALYSIS_CONSUMER = "startup_analysis";
|
|
39
|
+
/** Profile-synthesis consumer that must appear in the consumer map. */
|
|
40
|
+
export const PROFILE_SYNTHESIS_CONSUMER = "profile_synthesis";
|
|
41
|
+
/** Signal types the profile_synthesis consumer reads for bounded synthesis. */
|
|
42
|
+
export const PROFILE_SIGNAL_TYPES = [
|
|
43
|
+
"decision",
|
|
44
|
+
"question",
|
|
45
|
+
"correction",
|
|
46
|
+
"instruction",
|
|
47
|
+
"configuration",
|
|
48
|
+
];
|
|
49
|
+
export function evidenceTierAuthorityPath(root = resolveSourceRoot()) {
|
|
50
|
+
return path.join(root, "references", "analysis", "evidence-tier-authority.yaml");
|
|
51
|
+
}
|
|
52
|
+
function mapping(value) {
|
|
53
|
+
return value !== null && typeof value === "object" && !Array.isArray(value)
|
|
54
|
+
? value
|
|
55
|
+
: null;
|
|
56
|
+
}
|
|
57
|
+
function asRecord(value, label) {
|
|
58
|
+
const m = mapping(value);
|
|
59
|
+
if (m === null) {
|
|
60
|
+
throw new EvidenceTierContractError(`${label} must be a mapping`);
|
|
61
|
+
}
|
|
62
|
+
return m;
|
|
63
|
+
}
|
|
64
|
+
function asMappingMap(value, label) {
|
|
65
|
+
const m = mapping(value);
|
|
66
|
+
const out = new Map();
|
|
67
|
+
if (m === null) {
|
|
68
|
+
throw new EvidenceTierContractError(`${label} must be a mapping`);
|
|
69
|
+
}
|
|
70
|
+
for (const [key, entry] of Object.entries(m)) {
|
|
71
|
+
const em = mapping(entry);
|
|
72
|
+
if (em === null) {
|
|
73
|
+
throw new EvidenceTierContractError(`${label}.${key} must be a mapping`);
|
|
74
|
+
}
|
|
75
|
+
out.set(key, em);
|
|
76
|
+
}
|
|
77
|
+
return out;
|
|
78
|
+
}
|
|
79
|
+
function asString(value, label) {
|
|
80
|
+
if (typeof value !== "string" || value.length === 0) {
|
|
81
|
+
throw new EvidenceTierContractError(`${label} must be a non-empty string`);
|
|
82
|
+
}
|
|
83
|
+
return value;
|
|
84
|
+
}
|
|
85
|
+
function asStringArray(value, label) {
|
|
86
|
+
if (!Array.isArray(value)) {
|
|
87
|
+
throw new EvidenceTierContractError(`${label} must be an array`);
|
|
88
|
+
}
|
|
89
|
+
return value.map((entry, i) => asString(entry, `${label}[${i}]`));
|
|
90
|
+
}
|
|
91
|
+
function asPositiveInt(value, label) {
|
|
92
|
+
if (typeof value !== "number" || !Number.isFinite(value) || value <= 0 || Math.floor(value) !== value) {
|
|
93
|
+
throw new EvidenceTierContractError(`${label} must be a positive integer`);
|
|
94
|
+
}
|
|
95
|
+
return value;
|
|
96
|
+
}
|
|
97
|
+
function asPositiveNumber(value, label) {
|
|
98
|
+
if (typeof value !== "number" || !Number.isFinite(value) || value <= 0 || value > 1) {
|
|
99
|
+
throw new EvidenceTierContractError(`${label} must be a positive number in (0, 1]`);
|
|
100
|
+
}
|
|
101
|
+
return value;
|
|
102
|
+
}
|
|
103
|
+
/**
|
|
104
|
+
* A family declares either `source_product` (single string) or `source_products`
|
|
105
|
+
* (list, e.g. cursor covers both Cursor and Cursor Agent). Normalize to a list
|
|
106
|
+
* for uniform coverage checks. At least one product is required.
|
|
107
|
+
*/
|
|
108
|
+
function resolveSourceProduct(entry, label) {
|
|
109
|
+
const products = entry.source_products ?? entry.source_product;
|
|
110
|
+
if (products === undefined) {
|
|
111
|
+
throw new EvidenceTierContractError(`${label} must declare source_product or source_products`);
|
|
112
|
+
}
|
|
113
|
+
return Array.isArray(products) ? asStringArray(products, `${label}.source_products`) : [asString(products, `${label}.source_product`)];
|
|
114
|
+
}
|
|
115
|
+
/** Load and structurally validate the evidence-tier authority YAML. */
|
|
116
|
+
export function loadEvidenceTierContract(contractPath = evidenceTierAuthorityPath()) {
|
|
117
|
+
let raw;
|
|
118
|
+
try {
|
|
119
|
+
raw = loadYamlMappingFile(contractPath);
|
|
120
|
+
}
|
|
121
|
+
catch (error) {
|
|
122
|
+
throw new EvidenceTierContractError(`evidence tier authority ${contractPath} is unreadable or malformed: ${error.message}`);
|
|
123
|
+
}
|
|
124
|
+
const schemaVersion = asString(raw.schema_version, "schema_version");
|
|
125
|
+
if (schemaVersion !== "agentera.evidenceTierAuthority.v1") {
|
|
126
|
+
throw new EvidenceTierContractError(`evidence tier authority ${contractPath} has unsupported schema_version: ${schemaVersion}`);
|
|
127
|
+
}
|
|
128
|
+
const tiersMap = asMappingMap(raw.tiers, "tiers");
|
|
129
|
+
const tierIds = [];
|
|
130
|
+
for (const [key, entry] of tiersMap) {
|
|
131
|
+
if (key !== "full_evidence" && key !== "signal") {
|
|
132
|
+
throw new EvidenceTierContractError(`tiers.${key} is not a recognized tier id`);
|
|
133
|
+
}
|
|
134
|
+
tierIds.push(key);
|
|
135
|
+
const stored = asRecord(entry.stored_fields, `tiers.${key}.stored_fields`);
|
|
136
|
+
asStringArray(stored.required, `tiers.${key}.stored_fields.required`);
|
|
137
|
+
}
|
|
138
|
+
const familiesMap = asMappingMap(asRecord(raw.source_families, "source_families").families, "source_families.families");
|
|
139
|
+
const families = new Map();
|
|
140
|
+
for (const [familyId, entry] of familiesMap) {
|
|
141
|
+
const sourceClass = asString(entry.source_class, `source_families.families.${familyId}.source_class`);
|
|
142
|
+
if (sourceClass !== "active_runtime" && sourceClass !== "historical_import") {
|
|
143
|
+
throw new EvidenceTierContractError(`source_families.families.${familyId}.source_class must be active_runtime or historical_import`);
|
|
144
|
+
}
|
|
145
|
+
families.set(familyId, {
|
|
146
|
+
family_id: familyId,
|
|
147
|
+
source_class: sourceClass,
|
|
148
|
+
source_product: resolveSourceProduct(entry, `source_families.families.${familyId}`),
|
|
149
|
+
active_runtime: Boolean(entry.active_runtime),
|
|
150
|
+
inclusion_rule: typeof entry.inclusion_rule === "string" ? entry.inclusion_rule : undefined,
|
|
151
|
+
});
|
|
152
|
+
}
|
|
153
|
+
const consumerMapRoot = asRecord(raw.consumer_map, "consumer_map");
|
|
154
|
+
const consumersMap = asMappingMap(consumerMapRoot.consumers, "consumer_map.consumers");
|
|
155
|
+
const consumers = new Map();
|
|
156
|
+
for (const [consumerId, entry] of consumersMap) {
|
|
157
|
+
const tier = asString(entry.tier, `consumer_map.consumers.${consumerId}.tier`);
|
|
158
|
+
if (tier !== "full_evidence" && tier !== "signal") {
|
|
159
|
+
throw new EvidenceTierContractError(`consumer_map.consumers.${consumerId}.tier must be full_evidence or signal`);
|
|
160
|
+
}
|
|
161
|
+
consumers.set(consumerId, {
|
|
162
|
+
consumer_id: consumerId,
|
|
163
|
+
tier,
|
|
164
|
+
purpose: asString(entry.purpose, `consumer_map.consumers.${consumerId}.purpose`),
|
|
165
|
+
required_fields: asStringArray(entry.required_fields, `consumer_map.consumers.${consumerId}.required_fields`),
|
|
166
|
+
source_identity: asString(entry.source_identity, `consumer_map.consumers.${consumerId}.source_identity`),
|
|
167
|
+
input_contract: asString(entry.input_contract, `consumer_map.consumers.${consumerId}.input_contract`),
|
|
168
|
+
});
|
|
169
|
+
}
|
|
170
|
+
const deferredMap = asMappingMap(consumerMapRoot.deferred_consumers, "consumer_map.deferred_consumers");
|
|
171
|
+
const deferredConsumers = new Map();
|
|
172
|
+
for (const [consumerId, entry] of deferredMap) {
|
|
173
|
+
deferredConsumers.set(consumerId, {
|
|
174
|
+
consumer_id: consumerId,
|
|
175
|
+
tier: asString(entry.tier, `consumer_map.deferred_consumers.${consumerId}.tier`),
|
|
176
|
+
status: asString(entry.status, `consumer_map.deferred_consumers.${consumerId}.status`),
|
|
177
|
+
required_semantics: asStringArray(entry.required_semantics, `consumer_map.deferred_consumers.${consumerId}.required_semantics`),
|
|
178
|
+
});
|
|
179
|
+
}
|
|
180
|
+
const semanticsMap = asMappingMap(asRecord(raw.signal_semantics, "signal_semantics").kinds, "signal_semantics.kinds");
|
|
181
|
+
const signalSemantics = new Map();
|
|
182
|
+
for (const [kind, entry] of semanticsMap) {
|
|
183
|
+
signalSemantics.set(kind, {
|
|
184
|
+
kind,
|
|
185
|
+
meaning: asString(entry.meaning, `signal_semantics.kinds.${kind}.meaning`),
|
|
186
|
+
derivable_from: asString(entry.derivable_from, `signal_semantics.kinds.${kind}.derivable_from`),
|
|
187
|
+
deferred_consumer: asString(entry.deferred_consumer, `signal_semantics.kinds.${kind}.deferred_consumer`),
|
|
188
|
+
current_consumer: typeof entry.current_consumer === "string" ? entry.current_consumer : undefined,
|
|
189
|
+
});
|
|
190
|
+
}
|
|
191
|
+
const statesMap = asMappingMap(asRecord(raw.compatibility_states, "compatibility_states").states, "compatibility_states.states");
|
|
192
|
+
const compatibilityStates = new Map();
|
|
193
|
+
for (const [key, entry] of statesMap) {
|
|
194
|
+
if (!REQUIRED_COMPATIBILITY_STATES.includes(key)) {
|
|
195
|
+
throw new EvidenceTierContractError(`compatibility_states.states.${key} is not a recognized state`);
|
|
196
|
+
}
|
|
197
|
+
const stateId = key;
|
|
198
|
+
const outcome = asString(entry.outcome, `compatibility_states.states.${key}.outcome`);
|
|
199
|
+
if (outcome !== "recover" && outcome !== "degrade") {
|
|
200
|
+
throw new EvidenceTierContractError(`compatibility_states.states.${key}.outcome must be recover or degrade`);
|
|
201
|
+
}
|
|
202
|
+
compatibilityStates.set(stateId, {
|
|
203
|
+
state_id: stateId,
|
|
204
|
+
trigger: asString(entry.trigger, `compatibility_states.states.${key}.trigger`),
|
|
205
|
+
status: asString(entry.status, `compatibility_states.states.${key}.status`),
|
|
206
|
+
reason: asString(entry.reason, `compatibility_states.states.${key}.reason`),
|
|
207
|
+
outcome,
|
|
208
|
+
recovery: asString(entry.recovery, `compatibility_states.states.${key}.recovery`),
|
|
209
|
+
});
|
|
210
|
+
}
|
|
211
|
+
const reconciliation = asRecord(raw.decision_55_reconciliation, "decision_55_reconciliation");
|
|
212
|
+
const boundsRoot = asRecord(raw.bounds, "bounds");
|
|
213
|
+
const bounds = {
|
|
214
|
+
readerByteCap: asPositiveInt(boundsRoot.reader_byte_cap, "bounds.reader_byte_cap"),
|
|
215
|
+
shardByteCap: asPositiveInt(boundsRoot.shard_byte_cap, "bounds.shard_byte_cap"),
|
|
216
|
+
signalByteCap: asPositiveInt(boundsRoot.signal_byte_cap, "bounds.signal_byte_cap"),
|
|
217
|
+
};
|
|
218
|
+
const suffRoot = asRecord(raw.profile_sufficiency, "profile_sufficiency");
|
|
219
|
+
const profileSufficiency = {
|
|
220
|
+
profileSignalTypes: asStringArray(suffRoot.profile_signal_types, "profile_sufficiency.profile_signal_types"),
|
|
221
|
+
minimumFamilyRetention: asPositiveNumber(suffRoot.minimum_family_retention, "profile_sufficiency.minimum_family_retention"),
|
|
222
|
+
};
|
|
223
|
+
return {
|
|
224
|
+
schemaVersion,
|
|
225
|
+
status: asString(raw.status, "status"),
|
|
226
|
+
tierIds,
|
|
227
|
+
families,
|
|
228
|
+
consumers,
|
|
229
|
+
deferredConsumers,
|
|
230
|
+
signalSemantics,
|
|
231
|
+
compatibilityStates,
|
|
232
|
+
bounds,
|
|
233
|
+
profileSufficiency,
|
|
234
|
+
decisionNumber: typeof reconciliation.decision_number === "number"
|
|
235
|
+
? reconciliation.decision_number
|
|
236
|
+
: 0,
|
|
237
|
+
};
|
|
238
|
+
}
|
|
239
|
+
/** All declared source family ids (no family is silently omitted). */
|
|
240
|
+
export function supportedSourceFamilies(contractPath = evidenceTierAuthorityPath()) {
|
|
241
|
+
return [...loadEvidenceTierContract(contractPath).families.keys()];
|
|
242
|
+
}
|
|
243
|
+
/** All declared consumers with their bounded input contract and required fields. */
|
|
244
|
+
export function consumerMap(contractPath = evidenceTierAuthorityPath()) {
|
|
245
|
+
return [...loadEvidenceTierContract(contractPath).consumers.values()];
|
|
246
|
+
}
|
|
247
|
+
/** All declared signal semantics available to current and deferred consumers. */
|
|
248
|
+
export function signalSemantics(contractPath = evidenceTierAuthorityPath()) {
|
|
249
|
+
return [...loadEvidenceTierContract(contractPath).signalSemantics.values()];
|
|
250
|
+
}
|
|
251
|
+
/** All declared compatibility states with deterministic, actionable outcomes. */
|
|
252
|
+
export function compatibilityStates(contractPath = evidenceTierAuthorityPath()) {
|
|
253
|
+
return [...loadEvidenceTierContract(contractPath).compatibilityStates.values()];
|
|
254
|
+
}
|
|
255
|
+
/**
|
|
256
|
+
* Projected byte caps for full-evidence shards and the signal tier. These are
|
|
257
|
+
* the bounds the publication writer and direct retriever enforce; they are read
|
|
258
|
+
* from the authority rather than duplicated in callers.
|
|
259
|
+
*/
|
|
260
|
+
export function evidenceTierBounds(contractPath = evidenceTierAuthorityPath()) {
|
|
261
|
+
return loadEvidenceTierContract(contractPath).bounds;
|
|
262
|
+
}
|
|
263
|
+
/**
|
|
264
|
+
* Profile-synthesis sufficiency threshold (resolves planning Unknown 2). The
|
|
265
|
+
* profile_signal_types and minimum_family_retention are the authority a bounded
|
|
266
|
+
* profile reader projects when comparing the retained signal distribution
|
|
267
|
+
* against the intended distribution. Callers must not re-declare these.
|
|
268
|
+
*/
|
|
269
|
+
export function profileSufficiency(contractPath = evidenceTierAuthorityPath()) {
|
|
270
|
+
return loadEvidenceTierContract(contractPath).profileSufficiency;
|
|
271
|
+
}
|
|
272
|
+
/**
|
|
273
|
+
* Validate the contract against its invariants. Returns a list of human-readable
|
|
274
|
+
* errors; an empty list means the contract satisfies every Task 1 acceptance
|
|
275
|
+
* invariant. Used by tests for both passing (production contract) and failing
|
|
276
|
+
* (mutated fixture) checks.
|
|
277
|
+
*/
|
|
278
|
+
export function validateEvidenceTierContract(contractPath = evidenceTierAuthorityPath()) {
|
|
279
|
+
const errors = [];
|
|
280
|
+
let model;
|
|
281
|
+
try {
|
|
282
|
+
model = loadEvidenceTierContract(contractPath);
|
|
283
|
+
}
|
|
284
|
+
catch (error) {
|
|
285
|
+
return [error.message];
|
|
286
|
+
}
|
|
287
|
+
// AC1: every consumer has one bounded input contract supplying required fields
|
|
288
|
+
// with source identity.
|
|
289
|
+
for (const consumer of model.consumers.values()) {
|
|
290
|
+
if (consumer.required_fields.length === 0) {
|
|
291
|
+
errors.push(`consumer ${consumer.consumer_id} declares no required fields`);
|
|
292
|
+
}
|
|
293
|
+
if (!consumer.source_identity) {
|
|
294
|
+
errors.push(`consumer ${consumer.consumer_id} has no source identity`);
|
|
295
|
+
}
|
|
296
|
+
if (!consumer.input_contract) {
|
|
297
|
+
errors.push(`consumer ${consumer.consumer_id} has no input contract`);
|
|
298
|
+
}
|
|
299
|
+
}
|
|
300
|
+
if (!model.consumers.has(STARTUP_ANALYSIS_CONSUMER)) {
|
|
301
|
+
errors.push(`consumer map omits latent ${STARTUP_ANALYSIS_CONSUMER} reader`);
|
|
302
|
+
}
|
|
303
|
+
// AC2: no supported source family is silently omitted.
|
|
304
|
+
for (const family of REQUIRED_SOURCE_FAMILIES) {
|
|
305
|
+
if (!model.families.has(family)) {
|
|
306
|
+
errors.push(`source family ${family} is omitted`);
|
|
307
|
+
}
|
|
308
|
+
}
|
|
309
|
+
// AC3: signal semantics required meaning remains available to current and
|
|
310
|
+
// declared deferred consumers.
|
|
311
|
+
for (const kind of REQUIRED_SIGNAL_KINDS) {
|
|
312
|
+
const semantic = model.signalSemantics.get(kind);
|
|
313
|
+
if (!semantic) {
|
|
314
|
+
errors.push(`signal semantic ${kind} is omitted`);
|
|
315
|
+
continue;
|
|
316
|
+
}
|
|
317
|
+
if (!semantic.deferred_consumer) {
|
|
318
|
+
errors.push(`signal semantic ${kind} has no declared deferred consumer`);
|
|
319
|
+
}
|
|
320
|
+
}
|
|
321
|
+
for (const [name, deferred] of model.deferredConsumers) {
|
|
322
|
+
for (const kind of deferred.required_semantics) {
|
|
323
|
+
if (!model.signalSemantics.has(kind)) {
|
|
324
|
+
errors.push(`deferred consumer ${name} requires unknown semantic ${kind}`);
|
|
325
|
+
}
|
|
326
|
+
}
|
|
327
|
+
}
|
|
328
|
+
// AC4: every compatibility state is deterministic and actionable.
|
|
329
|
+
for (const state of REQUIRED_COMPATIBILITY_STATES) {
|
|
330
|
+
const def = model.compatibilityStates.get(state);
|
|
331
|
+
if (!def) {
|
|
332
|
+
errors.push(`compatibility state ${state} is omitted`);
|
|
333
|
+
continue;
|
|
334
|
+
}
|
|
335
|
+
if (def.outcome !== "recover" && def.outcome !== "degrade") {
|
|
336
|
+
errors.push(`compatibility state ${state} has non-deterministic outcome`);
|
|
337
|
+
}
|
|
338
|
+
if (!def.recovery) {
|
|
339
|
+
errors.push(`compatibility state ${state} has no actionable recovery`);
|
|
340
|
+
}
|
|
341
|
+
}
|
|
342
|
+
// Profile-synthesis sufficiency (Unknown 2): the consumer must appear, the
|
|
343
|
+
// sufficiency model must declare profile signal types, and each declared
|
|
344
|
+
// type must be a recognized signal semantic so the comparison is meaningful.
|
|
345
|
+
if (!model.consumers.has(PROFILE_SYNTHESIS_CONSUMER)) {
|
|
346
|
+
errors.push(`consumer map omits ${PROFILE_SYNTHESIS_CONSUMER} consumer`);
|
|
347
|
+
}
|
|
348
|
+
if (model.profileSufficiency.profileSignalTypes.length === 0) {
|
|
349
|
+
errors.push("profile_sufficiency declares no profile_signal_types");
|
|
350
|
+
}
|
|
351
|
+
for (const kind of model.profileSufficiency.profileSignalTypes) {
|
|
352
|
+
if (!model.signalSemantics.has(kind)) {
|
|
353
|
+
errors.push(`profile_sufficiency references unknown signal semantic ${kind}`);
|
|
354
|
+
}
|
|
355
|
+
}
|
|
356
|
+
// Decision 55 reconciliation: the decision is referenced, not rewritten.
|
|
357
|
+
if (model.decisionNumber !== 55) {
|
|
358
|
+
errors.push(`decision_55_reconciliation.decision_number is ${model.decisionNumber}, expected 55`);
|
|
359
|
+
}
|
|
360
|
+
return errors;
|
|
361
|
+
}
|
|
362
|
+
//# sourceMappingURL=evidenceTierContract.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"evidenceTierContract.js","sourceRoot":"","sources":["../../src/registries/evidenceTierContract.ts"],"names":[],"mappings":"AAAA,OAAO,IAAI,MAAM,WAAW,CAAC;AAE7B,OAAO,EAAE,mBAAmB,EAAE,MAAM,iBAAiB,CAAC;AACtD,OAAO,EAAE,iBAAiB,EAAE,MAAM,uBAAuB,CAAC;AA6F1D,MAAM,OAAO,yBAA0B,SAAQ,KAAK;IAClD,YAAY,OAAe;QACzB,KAAK,CAAC,OAAO,CAAC,CAAC;QACf,IAAI,CAAC,IAAI,GAAG,2BAA2B,CAAC;IAC1C,CAAC;CACF;AAED,uEAAuE;AACvE,MAAM,CAAC,MAAM,wBAAwB,GAAG;IACtC,OAAO;IACP,QAAQ;IACR,UAAU;IACV,SAAS;IACT,aAAa;CACL,CAAC;AAEX,qEAAqE;AACrE,MAAM,CAAC,MAAM,qBAAqB,GAAG;IACnC,YAAY;IACZ,UAAU;IACV,UAAU;IACV,aAAa;IACb,eAAe;IACf,iBAAiB;IACjB,MAAM;IACN,iBAAiB;CACT,CAAC;AAEX,8EAA8E;AAC9E,MAAM,CAAC,MAAM,6BAA6B,GAAG;IAC3C,WAAW;IACX,QAAQ;IACR,SAAS;IACT,SAAS;IACT,YAAY;CACJ,CAAC;AAEX,2EAA2E;AAC3E,MAAM,CAAC,MAAM,yBAAyB,GAAG,kBAAkB,CAAC;AAE5D,uEAAuE;AACvE,MAAM,CAAC,MAAM,0BAA0B,GAAG,mBAAmB,CAAC;AAE9D,+EAA+E;AAC/E,MAAM,CAAC,MAAM,oBAAoB,GAAG;IAClC,UAAU;IACV,UAAU;IACV,YAAY;IACZ,aAAa;IACb,eAAe;CACP,CAAC;AAEX,MAAM,UAAU,yBAAyB,CAAC,OAAe,iBAAiB,EAAE;IAC1E,OAAO,IAAI,CAAC,IAAI,CAAC,IAAI,EAAE,YAAY,EAAE,UAAU,EAAE,8BAA8B,CAAC,CAAC;AACnF,CAAC;AAED,SAAS,OAAO,CAAC,KAAc;IAC7B,OAAO,KAAK,KAAK,IAAI,IAAI,OAAO,KAAK,KAAK,QAAQ,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC;QACzE,CAAC,CAAE,KAAiC;QACpC,CAAC,CAAC,IAAI,CAAC;AACX,CAAC;AAED,SAAS,QAAQ,CAAC,KAAc,EAAE,KAAa;IAC7C,MAAM,CAAC,GAAG,OAAO,CAAC,KAAK,CAAC,CAAC;IACzB,IAAI,CAAC,KAAK,IAAI,EAAE,CAAC;QACf,MAAM,IAAI,yBAAyB,CAAC,GAAG,KAAK,oBAAoB,CAAC,CAAC;IACpE,CAAC;IACD,OAAO,CAAC,CAAC;AACX,CAAC;AAED,SAAS,YAAY,CACnB,KAAc,EACd,KAAa;IAEb,MAAM,CAAC,GAAG,OAAO,CAAC,KAAK,CAAC,CAAC;IACzB,MAAM,GAAG,GAAG,IAAI,GAAG,EAAmC,CAAC;IACvD,IAAI,CAAC,KAAK,IAAI,EAAE,CAAC;QACf,MAAM,IAAI,yBAAyB,CAAC,GAAG,KAAK,oBAAoB,CAAC,CAAC;IACpE,CAAC;IACD,KAAK,MAAM,CAAC,GAAG,EAAE,KAAK,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,CAAC;QAC7C,MAAM,EAAE,GAAG,OAAO,CAAC,KAAK,CAAC,CAAC;QAC1B,IAAI,EAAE,KAAK,IAAI,EAAE,CAAC;YAChB,MAAM,IAAI,yBAAyB,CAAC,GAAG,KAAK,IAAI,GAAG,oBAAoB,CAAC,CAAC;QAC3E,CAAC;QACD,GAAG,CAAC,GAAG,CAAC,GAAG,EAAE,EAAE,CAAC,CAAC;IACnB,CAAC;IACD,OAAO,GAAG,CAAC;AACb,CAAC;AAED,SAAS,QAAQ,CAAC,KAAc,EAAE,KAAa;IAC7C,IAAI,OAAO,KAAK,KAAK,QAAQ,IAAI,KAAK,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QACpD,MAAM,IAAI,yBAAyB,CAAC,GAAG,KAAK,6BAA6B,CAAC,CAAC;IAC7E,CAAC;IACD,OAAO,KAAK,CAAC;AACf,CAAC;AAED,SAAS,aAAa,CAAC,KAAc,EAAE,KAAa;IAClD,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,EAAE,CAAC;QAC1B,MAAM,IAAI,yBAAyB,CAAC,GAAG,KAAK,mBAAmB,CAAC,CAAC;IACnE,CAAC;IACD,OAAO,KAAK,CAAC,GAAG,CAAC,CAAC,KAAK,EAAE,CAAC,EAAE,EAAE,CAAC,QAAQ,CAAC,KAAK,EAAE,GAAG,KAAK,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC;AACpE,CAAC;AAED,SAAS,aAAa,CAAC,KAAc,EAAE,KAAa;IAClD,IAAI,OAAO,KAAK,KAAK,QAAQ,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,KAAK,CAAC,IAAI,KAAK,IAAI,CAAC,IAAI,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,KAAK,KAAK,EAAE,CAAC;QACtG,MAAM,IAAI,yBAAyB,CAAC,GAAG,KAAK,6BAA6B,CAAC,CAAC;IAC7E,CAAC;IACD,OAAO,KAAK,CAAC;AACf,CAAC;AAED,SAAS,gBAAgB,CAAC,KAAc,EAAE,KAAa;IACrD,IAAI,OAAO,KAAK,KAAK,QAAQ,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,KAAK,CAAC,IAAI,KAAK,IAAI,CAAC,IAAI,KAAK,GAAG,CAAC,EAAE,CAAC;QACpF,MAAM,IAAI,yBAAyB,CAAC,GAAG,KAAK,sCAAsC,CAAC,CAAC;IACtF,CAAC;IACD,OAAO,KAAK,CAAC;AACf,CAAC;AAED;;;;GAIG;AACH,SAAS,oBAAoB,CAAC,KAA8B,EAAE,KAAa;IACzE,MAAM,QAAQ,GAAG,KAAK,CAAC,eAAe,IAAI,KAAK,CAAC,cAAc,CAAC;IAC/D,IAAI,QAAQ,KAAK,SAAS,EAAE,CAAC;QAC3B,MAAM,IAAI,yBAAyB,CAAC,GAAG,KAAK,iDAAiD,CAAC,CAAC;IACjG,CAAC;IACD,OAAO,KAAK,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,aAAa,CAAC,QAAQ,EAAE,GAAG,KAAK,kBAAkB,CAAC,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,QAAQ,EAAE,GAAG,KAAK,iBAAiB,CAAC,CAAC,CAAC;AACzI,CAAC;AAED,uEAAuE;AACvE,MAAM,UAAU,wBAAwB,CACtC,eAAuB,yBAAyB,EAAE;IAElD,IAAI,GAA4B,CAAC;IACjC,IAAI,CAAC;QACH,GAAG,GAAG,mBAAmB,CAAC,YAAY,CAAC,CAAC;IAC1C,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,MAAM,IAAI,yBAAyB,CACjC,2BAA2B,YAAY,gCAAiC,KAAe,CAAC,OAAO,EAAE,CAClG,CAAC;IACJ,CAAC;IAED,MAAM,aAAa,GAAG,QAAQ,CAAC,GAAG,CAAC,cAAc,EAAE,gBAAgB,CAAC,CAAC;IACrE,IAAI,aAAa,KAAK,mCAAmC,EAAE,CAAC;QAC1D,MAAM,IAAI,yBAAyB,CACjC,2BAA2B,YAAY,oCAAoC,aAAa,EAAE,CAC3F,CAAC;IACJ,CAAC;IAED,MAAM,QAAQ,GAAG,YAAY,CAAC,GAAG,CAAC,KAAK,EAAE,OAAO,CAAC,CAAC;IAClD,MAAM,OAAO,GAAa,EAAE,CAAC;IAC7B,KAAK,MAAM,CAAC,GAAG,EAAE,KAAK,CAAC,IAAI,QAAQ,EAAE,CAAC;QACpC,IAAI,GAAG,KAAK,eAAe,IAAI,GAAG,KAAK,QAAQ,EAAE,CAAC;YAChD,MAAM,IAAI,yBAAyB,CAAC,SAAS,GAAG,8BAA8B,CAAC,CAAC;QAClF,CAAC;QACD,OAAO,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;QAClB,MAAM,MAAM,GAAG,QAAQ,CAAC,KAAK,CAAC,aAAa,EAAE,SAAS,GAAG,gBAAgB,CAAC,CAAC;QAC3E,aAAa,CAAC,MAAM,CAAC,QAAQ,EAAE,SAAS,GAAG,yBAAyB,CAAC,CAAC;IACxE,CAAC;IAED,MAAM,WAAW,GAAG,YAAY,CAC9B,QAAQ,CAAC,GAAG,CAAC,eAAe,EAAE,iBAAiB,CAAC,CAAC,QAAQ,EACzD,0BAA0B,CAC3B,CAAC;IACF,MAAM,QAAQ,GAAG,IAAI,GAAG,EAAkC,CAAC;IAC3D,KAAK,MAAM,CAAC,QAAQ,EAAE,KAAK,CAAC,IAAI,WAAW,EAAE,CAAC;QAC5C,MAAM,WAAW,GAAG,QAAQ,CAAC,KAAK,CAAC,YAAY,EAAE,4BAA4B,QAAQ,eAAe,CAAC,CAAC;QACtG,IAAI,WAAW,KAAK,gBAAgB,IAAI,WAAW,KAAK,mBAAmB,EAAE,CAAC;YAC5E,MAAM,IAAI,yBAAyB,CACjC,4BAA4B,QAAQ,2DAA2D,CAChG,CAAC;QACJ,CAAC;QACD,QAAQ,CAAC,GAAG,CAAC,QAAQ,EAAE;YACrB,SAAS,EAAE,QAAQ;YACnB,YAAY,EAAE,WAAW;YACzB,cAAc,EAAE,oBAAoB,CAAC,KAAK,EAAE,4BAA4B,QAAQ,EAAE,CAAC;YACnF,cAAc,EAAE,OAAO,CAAC,KAAK,CAAC,cAAc,CAAC;YAC7C,cAAc,EAAE,OAAO,KAAK,CAAC,cAAc,KAAK,QAAQ,CAAC,CAAC,CAAC,KAAK,CAAC,cAAc,CAAC,CAAC,CAAC,SAAS;SAC5F,CAAC,CAAC;IACL,CAAC;IAED,MAAM,eAAe,GAAG,QAAQ,CAAC,GAAG,CAAC,YAAY,EAAE,cAAc,CAAC,CAAC;IACnE,MAAM,YAAY,GAAG,YAAY,CAAC,eAAe,CAAC,SAAS,EAAE,wBAAwB,CAAC,CAAC;IACvF,MAAM,SAAS,GAAG,IAAI,GAAG,EAA8B,CAAC;IACxD,KAAK,MAAM,CAAC,UAAU,EAAE,KAAK,CAAC,IAAI,YAAY,EAAE,CAAC;QAC/C,MAAM,IAAI,GAAG,QAAQ,CAAC,KAAK,CAAC,IAAI,EAAE,0BAA0B,UAAU,OAAO,CAAC,CAAC;QAC/E,IAAI,IAAI,KAAK,eAAe,IAAI,IAAI,KAAK,QAAQ,EAAE,CAAC;YAClD,MAAM,IAAI,yBAAyB,CACjC,0BAA0B,UAAU,uCAAuC,CAC5E,CAAC;QACJ,CAAC;QACD,SAAS,CAAC,GAAG,CAAC,UAAU,EAAE;YACxB,WAAW,EAAE,UAAU;YACvB,IAAI;YACJ,OAAO,EAAE,QAAQ,CAAC,KAAK,CAAC,OAAO,EAAE,0BAA0B,UAAU,UAAU,CAAC;YAChF,eAAe,EAAE,aAAa,CAAC,KAAK,CAAC,eAAe,EAAE,0BAA0B,UAAU,kBAAkB,CAAC;YAC7G,eAAe,EAAE,QAAQ,CAAC,KAAK,CAAC,eAAe,EAAE,0BAA0B,UAAU,kBAAkB,CAAC;YACxG,cAAc,EAAE,QAAQ,CAAC,KAAK,CAAC,cAAc,EAAE,0BAA0B,UAAU,iBAAiB,CAAC;SACtG,CAAC,CAAC;IACL,CAAC;IAED,MAAM,WAAW,GAAG,YAAY,CAAC,eAAe,CAAC,kBAAkB,EAAE,iCAAiC,CAAC,CAAC;IACxG,MAAM,iBAAiB,GAAG,IAAI,GAAG,EAAsC,CAAC;IACxE,KAAK,MAAM,CAAC,UAAU,EAAE,KAAK,CAAC,IAAI,WAAW,EAAE,CAAC;QAC9C,iBAAiB,CAAC,GAAG,CAAC,UAAU,EAAE;YAChC,WAAW,EAAE,UAAU;YACvB,IAAI,EAAE,QAAQ,CAAC,KAAK,CAAC,IAAI,EAAE,mCAAmC,UAAU,OAAO,CAAW;YAC1F,MAAM,EAAE,QAAQ,CAAC,KAAK,CAAC,MAAM,EAAE,mCAAmC,UAAU,SAAS,CAAC;YACtF,kBAAkB,EAAE,aAAa,CAC/B,KAAK,CAAC,kBAAkB,EACxB,mCAAmC,UAAU,qBAAqB,CACnE;SACF,CAAC,CAAC;IACL,CAAC;IAED,MAAM,YAAY,GAAG,YAAY,CAC/B,QAAQ,CAAC,GAAG,CAAC,gBAAgB,EAAE,kBAAkB,CAAC,CAAC,KAAK,EACxD,wBAAwB,CACzB,CAAC;IACF,MAAM,eAAe,GAAG,IAAI,GAAG,EAAoC,CAAC;IACpE,KAAK,MAAM,CAAC,IAAI,EAAE,KAAK,CAAC,IAAI,YAAY,EAAE,CAAC;QACzC,eAAe,CAAC,GAAG,CAAC,IAAI,EAAE;YACxB,IAAI;YACJ,OAAO,EAAE,QAAQ,CAAC,KAAK,CAAC,OAAO,EAAE,0BAA0B,IAAI,UAAU,CAAC;YAC1E,cAAc,EAAE,QAAQ,CAAC,KAAK,CAAC,cAAc,EAAE,0BAA0B,IAAI,iBAAiB,CAAC;YAC/F,iBAAiB,EAAE,QAAQ,CAAC,KAAK,CAAC,iBAAiB,EAAE,0BAA0B,IAAI,oBAAoB,CAAC;YACxG,gBAAgB,EAAE,OAAO,KAAK,CAAC,gBAAgB,KAAK,QAAQ,CAAC,CAAC,CAAC,KAAK,CAAC,gBAAgB,CAAC,CAAC,CAAC,SAAS;SAClG,CAAC,CAAC;IACL,CAAC;IAED,MAAM,SAAS,GAAG,YAAY,CAC5B,QAAQ,CAAC,GAAG,CAAC,oBAAoB,EAAE,sBAAsB,CAAC,CAAC,MAAM,EACjE,6BAA6B,CAC9B,CAAC;IACF,MAAM,mBAAmB,GAAG,IAAI,GAAG,EAAsD,CAAC;IAC1F,KAAK,MAAM,CAAC,GAAG,EAAE,KAAK,CAAC,IAAI,SAAS,EAAE,CAAC;QACrC,IAAI,CAAC,6BAA6B,CAAC,QAAQ,CAAC,GAA2B,CAAC,EAAE,CAAC;YACzE,MAAM,IAAI,yBAAyB,CAAC,+BAA+B,GAAG,4BAA4B,CAAC,CAAC;QACtG,CAAC;QACD,MAAM,OAAO,GAAG,GAA2B,CAAC;QAC5C,MAAM,OAAO,GAAG,QAAQ,CAAC,KAAK,CAAC,OAAO,EAAE,+BAA+B,GAAG,UAAU,CAAC,CAAC;QACtF,IAAI,OAAO,KAAK,SAAS,IAAI,OAAO,KAAK,SAAS,EAAE,CAAC;YACnD,MAAM,IAAI,yBAAyB,CACjC,+BAA+B,GAAG,qCAAqC,CACxE,CAAC;QACJ,CAAC;QACD,mBAAmB,CAAC,GAAG,CAAC,OAAO,EAAE;YAC/B,QAAQ,EAAE,OAAO;YACjB,OAAO,EAAE,QAAQ,CAAC,KAAK,CAAC,OAAO,EAAE,+BAA+B,GAAG,UAAU,CAAC;YAC9E,MAAM,EAAE,QAAQ,CAAC,KAAK,CAAC,MAAM,EAAE,+BAA+B,GAAG,SAAS,CAAC;YAC3E,MAAM,EAAE,QAAQ,CAAC,KAAK,CAAC,MAAM,EAAE,+BAA+B,GAAG,SAAS,CAAC;YAC3E,OAAO;YACP,QAAQ,EAAE,QAAQ,CAAC,KAAK,CAAC,QAAQ,EAAE,+BAA+B,GAAG,WAAW,CAAC;SAClF,CAAC,CAAC;IACL,CAAC;IAED,MAAM,cAAc,GAAG,QAAQ,CAAC,GAAG,CAAC,0BAA0B,EAAE,4BAA4B,CAAC,CAAC;IAE9F,MAAM,UAAU,GAAG,QAAQ,CAAC,GAAG,CAAC,MAAM,EAAE,QAAQ,CAAC,CAAC;IAClD,MAAM,MAAM,GAAuB;QACjC,aAAa,EAAE,aAAa,CAAC,UAAU,CAAC,eAAe,EAAE,wBAAwB,CAAC;QAClF,YAAY,EAAE,aAAa,CAAC,UAAU,CAAC,cAAc,EAAE,uBAAuB,CAAC;QAC/E,aAAa,EAAE,aAAa,CAAC,UAAU,CAAC,eAAe,EAAE,wBAAwB,CAAC;KACnF,CAAC;IAEF,MAAM,QAAQ,GAAG,QAAQ,CAAC,GAAG,CAAC,mBAAmB,EAAE,qBAAqB,CAAC,CAAC;IAC1E,MAAM,kBAAkB,GAAiC;QACvD,kBAAkB,EAAE,aAAa,CAC/B,QAAQ,CAAC,oBAAoB,EAC7B,0CAA0C,CAC3C;QACD,sBAAsB,EAAE,gBAAgB,CACtC,QAAQ,CAAC,wBAAwB,EACjC,8CAA8C,CAC/C;KACF,CAAC;IAEF,OAAO;QACL,aAAa;QACb,MAAM,EAAE,QAAQ,CAAC,GAAG,CAAC,MAAM,EAAE,QAAQ,CAAC;QACtC,OAAO;QACP,QAAQ;QACR,SAAS;QACT,iBAAiB;QACjB,eAAe;QACf,mBAAmB;QACnB,MAAM;QACN,kBAAkB;QAClB,cAAc,EAAE,OAAO,cAAc,CAAC,eAAe,KAAK,QAAQ;YAChE,CAAC,CAAC,cAAc,CAAC,eAAe;YAChC,CAAC,CAAC,CAAC;KACN,CAAC;AACJ,CAAC;AAED,sEAAsE;AACtE,MAAM,UAAU,uBAAuB,CACrC,eAAuB,yBAAyB,EAAE;IAElD,OAAO,CAAC,GAAG,wBAAwB,CAAC,YAAY,CAAC,CAAC,QAAQ,CAAC,IAAI,EAAE,CAAC,CAAC;AACrE,CAAC;AAED,oFAAoF;AACpF,MAAM,UAAU,WAAW,CACzB,eAAuB,yBAAyB,EAAE;IAElD,OAAO,CAAC,GAAG,wBAAwB,CAAC,YAAY,CAAC,CAAC,SAAS,CAAC,MAAM,EAAE,CAAC,CAAC;AACxE,CAAC;AAED,iFAAiF;AACjF,MAAM,UAAU,eAAe,CAC7B,eAAuB,yBAAyB,EAAE;IAElD,OAAO,CAAC,GAAG,wBAAwB,CAAC,YAAY,CAAC,CAAC,eAAe,CAAC,MAAM,EAAE,CAAC,CAAC;AAC9E,CAAC;AAED,iFAAiF;AACjF,MAAM,UAAU,mBAAmB,CACjC,eAAuB,yBAAyB,EAAE;IAElD,OAAO,CAAC,GAAG,wBAAwB,CAAC,YAAY,CAAC,CAAC,mBAAmB,CAAC,MAAM,EAAE,CAAC,CAAC;AAClF,CAAC;AAED;;;;GAIG;AACH,MAAM,UAAU,kBAAkB,CAChC,eAAuB,yBAAyB,EAAE;IAElD,OAAO,wBAAwB,CAAC,YAAY,CAAC,CAAC,MAAM,CAAC;AACvD,CAAC;AAED;;;;;GAKG;AACH,MAAM,UAAU,kBAAkB,CAChC,eAAuB,yBAAyB,EAAE;IAElD,OAAO,wBAAwB,CAAC,YAAY,CAAC,CAAC,kBAAkB,CAAC;AACnE,CAAC;AAED;;;;;GAKG;AACH,MAAM,UAAU,4BAA4B,CAC1C,eAAuB,yBAAyB,EAAE;IAElD,MAAM,MAAM,GAAa,EAAE,CAAC;IAC5B,IAAI,KAAoB,CAAC;IACzB,IAAI,CAAC;QACH,KAAK,GAAG,wBAAwB,CAAC,YAAY,CAAC,CAAC;IACjD,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,OAAO,CAAE,KAAe,CAAC,OAAO,CAAC,CAAC;IACpC,CAAC;IAED,+EAA+E;IAC/E,wBAAwB;IACxB,KAAK,MAAM,QAAQ,IAAI,KAAK,CAAC,SAAS,CAAC,MAAM,EAAE,EAAE,CAAC;QAChD,IAAI,QAAQ,CAAC,eAAe,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;YAC1C,MAAM,CAAC,IAAI,CAAC,YAAY,QAAQ,CAAC,WAAW,8BAA8B,CAAC,CAAC;QAC9E,CAAC;QACD,IAAI,CAAC,QAAQ,CAAC,eAAe,EAAE,CAAC;YAC9B,MAAM,CAAC,IAAI,CAAC,YAAY,QAAQ,CAAC,WAAW,yBAAyB,CAAC,CAAC;QACzE,CAAC;QACD,IAAI,CAAC,QAAQ,CAAC,cAAc,EAAE,CAAC;YAC7B,MAAM,CAAC,IAAI,CAAC,YAAY,QAAQ,CAAC,WAAW,wBAAwB,CAAC,CAAC;QACxE,CAAC;IACH,CAAC;IACD,IAAI,CAAC,KAAK,CAAC,SAAS,CAAC,GAAG,CAAC,yBAAyB,CAAC,EAAE,CAAC;QACpD,MAAM,CAAC,IAAI,CAAC,6BAA6B,yBAAyB,SAAS,CAAC,CAAC;IAC/E,CAAC;IAED,uDAAuD;IACvD,KAAK,MAAM,MAAM,IAAI,wBAAwB,EAAE,CAAC;QAC9C,IAAI,CAAC,KAAK,CAAC,QAAQ,CAAC,GAAG,CAAC,MAAM,CAAC,EAAE,CAAC;YAChC,MAAM,CAAC,IAAI,CAAC,iBAAiB,MAAM,aAAa,CAAC,CAAC;QACpD,CAAC;IACH,CAAC;IAED,0EAA0E;IAC1E,+BAA+B;IAC/B,KAAK,MAAM,IAAI,IAAI,qBAAqB,EAAE,CAAC;QACzC,MAAM,QAAQ,GAAG,KAAK,CAAC,eAAe,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;QACjD,IAAI,CAAC,QAAQ,EAAE,CAAC;YACd,MAAM,CAAC,IAAI,CAAC,mBAAmB,IAAI,aAAa,CAAC,CAAC;YAClD,SAAS;QACX,CAAC;QACD,IAAI,CAAC,QAAQ,CAAC,iBAAiB,EAAE,CAAC;YAChC,MAAM,CAAC,IAAI,CAAC,mBAAmB,IAAI,oCAAoC,CAAC,CAAC;QAC3E,CAAC;IACH,CAAC;IACD,KAAK,MAAM,CAAC,IAAI,EAAE,QAAQ,CAAC,IAAI,KAAK,CAAC,iBAAiB,EAAE,CAAC;QACvD,KAAK,MAAM,IAAI,IAAI,QAAQ,CAAC,kBAAkB,EAAE,CAAC;YAC/C,IAAI,CAAC,KAAK,CAAC,eAAe,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,CAAC;gBACrC,MAAM,CAAC,IAAI,CAAC,qBAAqB,IAAI,8BAA8B,IAAI,EAAE,CAAC,CAAC;YAC7E,CAAC;QACH,CAAC;IACH,CAAC;IAED,kEAAkE;IAClE,KAAK,MAAM,KAAK,IAAI,6BAA6B,EAAE,CAAC;QAClD,MAAM,GAAG,GAAG,KAAK,CAAC,mBAAmB,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC;QACjD,IAAI,CAAC,GAAG,EAAE,CAAC;YACT,MAAM,CAAC,IAAI,CAAC,uBAAuB,KAAK,aAAa,CAAC,CAAC;YACvD,SAAS;QACX,CAAC;QACD,IAAI,GAAG,CAAC,OAAO,KAAK,SAAS,IAAI,GAAG,CAAC,OAAO,KAAK,SAAS,EAAE,CAAC;YAC3D,MAAM,CAAC,IAAI,CAAC,uBAAuB,KAAK,gCAAgC,CAAC,CAAC;QAC5E,CAAC;QACD,IAAI,CAAC,GAAG,CAAC,QAAQ,EAAE,CAAC;YAClB,MAAM,CAAC,IAAI,CAAC,uBAAuB,KAAK,6BAA6B,CAAC,CAAC;QACzE,CAAC;IACH,CAAC;IAED,2EAA2E;IAC3E,yEAAyE;IACzE,6EAA6E;IAC7E,IAAI,CAAC,KAAK,CAAC,SAAS,CAAC,GAAG,CAAC,0BAA0B,CAAC,EAAE,CAAC;QACrD,MAAM,CAAC,IAAI,CAAC,sBAAsB,0BAA0B,WAAW,CAAC,CAAC;IAC3E,CAAC;IACD,IAAI,KAAK,CAAC,kBAAkB,CAAC,kBAAkB,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QAC7D,MAAM,CAAC,IAAI,CAAC,sDAAsD,CAAC,CAAC;IACtE,CAAC;IACD,KAAK,MAAM,IAAI,IAAI,KAAK,CAAC,kBAAkB,CAAC,kBAAkB,EAAE,CAAC;QAC/D,IAAI,CAAC,KAAK,CAAC,eAAe,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,CAAC;YACrC,MAAM,CAAC,IAAI,CAAC,0DAA0D,IAAI,EAAE,CAAC,CAAC;QAChF,CAAC;IACH,CAAC;IAED,yEAAyE;IACzE,IAAI,KAAK,CAAC,cAAc,KAAK,EAAE,EAAE,CAAC;QAChC,MAAM,CAAC,IAAI,CAAC,iDAAiD,KAAK,CAAC,cAAc,eAAe,CAAC,CAAC;IACpG,CAAC;IAED,OAAO,MAAM,CAAC;AAChB,CAAC"}
|
|
@@ -0,0 +1,206 @@
|
|
|
1
|
+
import path from "node:path";
|
|
2
|
+
import { loadYamlMappingFile } from "../core/yaml.js";
|
|
3
|
+
import { resolveSourceRoot } from "../core/sourceRoot.js";
|
|
4
|
+
import { ARTIFACT_PROTOCOL_PATHS, normalizeArtifactProtocolId, } from "./artifactProtocolIds.js";
|
|
5
|
+
export class VerbosityBudgetContractError extends Error {
|
|
6
|
+
constructor(message) {
|
|
7
|
+
super(message);
|
|
8
|
+
this.name = "VerbosityBudgetContractError";
|
|
9
|
+
}
|
|
10
|
+
}
|
|
11
|
+
export function verbosityBudgetAuthorityPath() {
|
|
12
|
+
return path.join(resolveSourceRoot(), "references", "artifacts", "verbosity-budget-authority.yaml");
|
|
13
|
+
}
|
|
14
|
+
function mapping(value) {
|
|
15
|
+
return value !== null && typeof value === "object" && !Array.isArray(value)
|
|
16
|
+
? value
|
|
17
|
+
: null;
|
|
18
|
+
}
|
|
19
|
+
function positiveNumber(value) {
|
|
20
|
+
return typeof value === "number" && Number.isFinite(value) && value > 0;
|
|
21
|
+
}
|
|
22
|
+
function readMapping(filePath, label) {
|
|
23
|
+
try {
|
|
24
|
+
return loadYamlMappingFile(filePath);
|
|
25
|
+
}
|
|
26
|
+
catch (error) {
|
|
27
|
+
throw new VerbosityBudgetContractError(`${label} ${filePath} is unreadable or malformed: ${error.message}`);
|
|
28
|
+
}
|
|
29
|
+
}
|
|
30
|
+
function loadContract(contractPath) {
|
|
31
|
+
const contract = readMapping(contractPath, "verbosity budget authority");
|
|
32
|
+
if (contract.schema_version !== "agentera.verbosityBudgetAuthority.v1") {
|
|
33
|
+
throw new VerbosityBudgetContractError(`verbosity budget authority ${contractPath} has unsupported schema_version`);
|
|
34
|
+
}
|
|
35
|
+
const authority = mapping(contract.authority);
|
|
36
|
+
const scope = mapping(contract.scope);
|
|
37
|
+
const supported = scope?.supported_artifacts;
|
|
38
|
+
if (!authority || typeof authority.schema_directory !== "string" || !Array.isArray(supported)) {
|
|
39
|
+
throw new VerbosityBudgetContractError(`verbosity budget authority ${contractPath} must declare authority.schema_directory and scope.supported_artifacts`);
|
|
40
|
+
}
|
|
41
|
+
const schemaDirectory = path.resolve(path.dirname(contractPath), authority.schema_directory);
|
|
42
|
+
const owners = new Map();
|
|
43
|
+
for (const raw of supported) {
|
|
44
|
+
const entry = mapping(raw);
|
|
45
|
+
const artifactId = entry?.artifact_id;
|
|
46
|
+
const schema = entry?.schema;
|
|
47
|
+
if (typeof artifactId !== "string" || normalizeArtifactProtocolId(artifactId) !== artifactId) {
|
|
48
|
+
throw new VerbosityBudgetContractError(`verbosity budget authority ${contractPath} contains an invalid artifact_id`);
|
|
49
|
+
}
|
|
50
|
+
if (typeof schema !== "string" || !schema.endsWith(".yaml") || path.basename(schema) !== schema) {
|
|
51
|
+
throw new VerbosityBudgetContractError(`verbosity budget authority ${contractPath} contains an invalid schema owner for ${artifactId}`);
|
|
52
|
+
}
|
|
53
|
+
if (owners.has(artifactId)) {
|
|
54
|
+
throw new VerbosityBudgetContractError(`verbosity budget authority ${contractPath} declares ambiguous owners for ${artifactId}`);
|
|
55
|
+
}
|
|
56
|
+
owners.set(artifactId, {
|
|
57
|
+
artifactId,
|
|
58
|
+
authorityPath: contractPath,
|
|
59
|
+
schemaPath: path.join(schemaDirectory, schema),
|
|
60
|
+
});
|
|
61
|
+
}
|
|
62
|
+
if (owners.size === 0) {
|
|
63
|
+
throw new VerbosityBudgetContractError(`verbosity budget authority ${contractPath} declares no supported artifacts`);
|
|
64
|
+
}
|
|
65
|
+
return { contractPath, owners };
|
|
66
|
+
}
|
|
67
|
+
function protocolIdForOwner(input) {
|
|
68
|
+
const normalized = normalizeArtifactProtocolId(input);
|
|
69
|
+
if (normalized)
|
|
70
|
+
return normalized;
|
|
71
|
+
const comparable = input.trim().replaceAll("\\", "/").toLowerCase();
|
|
72
|
+
for (const [artifactId, artifactPath] of Object.entries(ARTIFACT_PROTOCOL_PATHS)) {
|
|
73
|
+
const canonicalPath = artifactPath.toLowerCase();
|
|
74
|
+
if (comparable === canonicalPath || comparable === path.posix.basename(canonicalPath)) {
|
|
75
|
+
return artifactId;
|
|
76
|
+
}
|
|
77
|
+
}
|
|
78
|
+
return null;
|
|
79
|
+
}
|
|
80
|
+
export function resolveVerbosityBudgetOwner(artifact, contractPath = verbosityBudgetAuthorityPath()) {
|
|
81
|
+
const contract = loadContract(contractPath);
|
|
82
|
+
const artifactId = protocolIdForOwner(artifact);
|
|
83
|
+
const owner = artifactId ? contract.owners.get(artifactId) : undefined;
|
|
84
|
+
if (!owner) {
|
|
85
|
+
throw new VerbosityBudgetContractError(`unsupported artifact ${JSON.stringify(artifact)} in verbosity budget authority; ` +
|
|
86
|
+
`valid artifact_id values: ${[...contract.owners.keys()].sort().join(", ")}`);
|
|
87
|
+
}
|
|
88
|
+
return owner;
|
|
89
|
+
}
|
|
90
|
+
function invalidDimension(scope, declarationId, error) {
|
|
91
|
+
return {
|
|
92
|
+
scope,
|
|
93
|
+
classification: "invalid_declaration",
|
|
94
|
+
unit: null,
|
|
95
|
+
limit: null,
|
|
96
|
+
declarationId,
|
|
97
|
+
error,
|
|
98
|
+
};
|
|
99
|
+
}
|
|
100
|
+
function classifyDeclaration(raw, index) {
|
|
101
|
+
const declaration = mapping(raw);
|
|
102
|
+
if (!declaration)
|
|
103
|
+
return invalidDimension(`<entry:${index}>`, null, "budget declaration must be a mapping");
|
|
104
|
+
const scope = typeof declaration.scope === "string" && declaration.scope.trim()
|
|
105
|
+
? declaration.scope.trim()
|
|
106
|
+
: `<entry:${index}>`;
|
|
107
|
+
const declarationId = typeof declaration.id === "string" ? declaration.id : null;
|
|
108
|
+
if (scope.startsWith("<entry:")) {
|
|
109
|
+
return invalidDimension(scope, declarationId, "budget declaration must define a non-empty scope");
|
|
110
|
+
}
|
|
111
|
+
const hasWords = Object.hasOwn(declaration, "max_words");
|
|
112
|
+
const hasTokens = Object.hasOwn(declaration, "token_budget");
|
|
113
|
+
if (Number(hasWords) + Number(hasTokens) !== 1) {
|
|
114
|
+
return invalidDimension(scope, declarationId, "budget declaration must define exactly one of max_words or token_budget");
|
|
115
|
+
}
|
|
116
|
+
if (hasWords) {
|
|
117
|
+
if (declaration.max_words === null) {
|
|
118
|
+
return { scope, classification: "explicit_no_limit", unit: "words", limit: null, declarationId };
|
|
119
|
+
}
|
|
120
|
+
if (positiveNumber(declaration.max_words)) {
|
|
121
|
+
return {
|
|
122
|
+
scope,
|
|
123
|
+
classification: "numeric_limit",
|
|
124
|
+
unit: "words",
|
|
125
|
+
limit: declaration.max_words,
|
|
126
|
+
declarationId,
|
|
127
|
+
};
|
|
128
|
+
}
|
|
129
|
+
return invalidDimension(scope, declarationId, "max_words must be a positive number or null");
|
|
130
|
+
}
|
|
131
|
+
if (positiveNumber(declaration.token_budget)) {
|
|
132
|
+
return {
|
|
133
|
+
scope,
|
|
134
|
+
classification: "non_word_unit",
|
|
135
|
+
unit: "tokens",
|
|
136
|
+
limit: declaration.token_budget,
|
|
137
|
+
declarationId,
|
|
138
|
+
};
|
|
139
|
+
}
|
|
140
|
+
return invalidDimension(scope, declarationId, "token_budget must be a positive number");
|
|
141
|
+
}
|
|
142
|
+
function isNonVerbosityBudgetEntry(raw) {
|
|
143
|
+
const declaration = mapping(raw);
|
|
144
|
+
return Boolean(declaration &&
|
|
145
|
+
typeof declaration.rule === "string" &&
|
|
146
|
+
!Object.hasOwn(declaration, "max_words") &&
|
|
147
|
+
!Object.hasOwn(declaration, "token_budget"));
|
|
148
|
+
}
|
|
149
|
+
export function inspectArtifactVerbosityBudget(artifact, contractPath = verbosityBudgetAuthorityPath()) {
|
|
150
|
+
const owner = resolveVerbosityBudgetOwner(artifact, contractPath);
|
|
151
|
+
let schema;
|
|
152
|
+
try {
|
|
153
|
+
schema = readMapping(owner.schemaPath, `verbosity budget owner for ${owner.artifactId}`);
|
|
154
|
+
}
|
|
155
|
+
catch (error) {
|
|
156
|
+
return {
|
|
157
|
+
...owner,
|
|
158
|
+
dimensions: [invalidDimension("<authority>", null, error.message)],
|
|
159
|
+
};
|
|
160
|
+
}
|
|
161
|
+
const budget = mapping(schema.BUDGET);
|
|
162
|
+
if (!budget || Object.keys(budget).length === 0) {
|
|
163
|
+
return {
|
|
164
|
+
...owner,
|
|
165
|
+
dimensions: [invalidDimension("<authority>", null, "owning schema must define a non-empty BUDGET mapping")],
|
|
166
|
+
};
|
|
167
|
+
}
|
|
168
|
+
const dimensions = Object.entries(budget)
|
|
169
|
+
.filter(([, declaration]) => !isNonVerbosityBudgetEntry(declaration))
|
|
170
|
+
.map(([index, declaration]) => classifyDeclaration(declaration, index));
|
|
171
|
+
if (dimensions.length === 0) {
|
|
172
|
+
return {
|
|
173
|
+
...owner,
|
|
174
|
+
dimensions: [invalidDimension("<authority>", null, "owning schema defines no verbosity budget declarations")],
|
|
175
|
+
};
|
|
176
|
+
}
|
|
177
|
+
const counts = new Map();
|
|
178
|
+
for (const dimension of dimensions)
|
|
179
|
+
counts.set(dimension.scope, (counts.get(dimension.scope) ?? 0) + 1);
|
|
180
|
+
return {
|
|
181
|
+
...owner,
|
|
182
|
+
dimensions: dimensions.map((dimension) => (counts.get(dimension.scope) ?? 0) > 1
|
|
183
|
+
? invalidDimension(dimension.scope, dimension.declarationId, `duplicate budget scope ${dimension.scope}`)
|
|
184
|
+
: dimension),
|
|
185
|
+
};
|
|
186
|
+
}
|
|
187
|
+
export function validateVerbosityBudgetContract(contractPath = verbosityBudgetAuthorityPath()) {
|
|
188
|
+
let contract;
|
|
189
|
+
try {
|
|
190
|
+
contract = loadContract(contractPath);
|
|
191
|
+
}
|
|
192
|
+
catch (error) {
|
|
193
|
+
return [error.message];
|
|
194
|
+
}
|
|
195
|
+
const errors = [];
|
|
196
|
+
for (const artifactId of contract.owners.keys()) {
|
|
197
|
+
const inspected = inspectArtifactVerbosityBudget(artifactId, contractPath);
|
|
198
|
+
for (const dimension of inspected.dimensions) {
|
|
199
|
+
if (dimension.classification === "invalid_declaration") {
|
|
200
|
+
errors.push(`${artifactId}:${dimension.scope}: ${dimension.error}`);
|
|
201
|
+
}
|
|
202
|
+
}
|
|
203
|
+
}
|
|
204
|
+
return errors;
|
|
205
|
+
}
|
|
206
|
+
//# sourceMappingURL=verbosityBudgetContract.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"verbosityBudgetContract.js","sourceRoot":"","sources":["../../src/registries/verbosityBudgetContract.ts"],"names":[],"mappings":"AAAA,OAAO,IAAI,MAAM,WAAW,CAAC;AAE7B,OAAO,EAAE,mBAAmB,EAAE,MAAM,iBAAiB,CAAC;AACtD,OAAO,EAAE,iBAAiB,EAAE,MAAM,uBAAuB,CAAC;AAC1D,OAAO,EACL,uBAAuB,EACvB,2BAA2B,GAC5B,MAAM,0BAA0B,CAAC;AAgClC,MAAM,OAAO,4BAA6B,SAAQ,KAAK;IACrD,YAAY,OAAe;QACzB,KAAK,CAAC,OAAO,CAAC,CAAC;QACf,IAAI,CAAC,IAAI,GAAG,8BAA8B,CAAC;IAC7C,CAAC;CACF;AAED,MAAM,UAAU,4BAA4B;IAC1C,OAAO,IAAI,CAAC,IAAI,CAAC,iBAAiB,EAAE,EAAE,YAAY,EAAE,WAAW,EAAE,iCAAiC,CAAC,CAAC;AACtG,CAAC;AAED,SAAS,OAAO,CAAC,KAAc;IAC7B,OAAO,KAAK,KAAK,IAAI,IAAI,OAAO,KAAK,KAAK,QAAQ,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC;QACzE,CAAC,CAAE,KAAiC;QACpC,CAAC,CAAC,IAAI,CAAC;AACX,CAAC;AAED,SAAS,cAAc,CAAC,KAAc;IACpC,OAAO,OAAO,KAAK,KAAK,QAAQ,IAAI,MAAM,CAAC,QAAQ,CAAC,KAAK,CAAC,IAAI,KAAK,GAAG,CAAC,CAAC;AAC1E,CAAC;AAED,SAAS,WAAW,CAAC,QAAgB,EAAE,KAAa;IAClD,IAAI,CAAC;QACH,OAAO,mBAAmB,CAAC,QAAQ,CAAC,CAAC;IACvC,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,MAAM,IAAI,4BAA4B,CACpC,GAAG,KAAK,IAAI,QAAQ,gCAAiC,KAAe,CAAC,OAAO,EAAE,CAC/E,CAAC;IACJ,CAAC;AACH,CAAC;AAED,SAAS,YAAY,CAAC,YAAoB;IACxC,MAAM,QAAQ,GAAG,WAAW,CAAC,YAAY,EAAE,4BAA4B,CAAC,CAAC;IACzE,IAAI,QAAQ,CAAC,cAAc,KAAK,sCAAsC,EAAE,CAAC;QACvE,MAAM,IAAI,4BAA4B,CACpC,8BAA8B,YAAY,iCAAiC,CAC5E,CAAC;IACJ,CAAC;IACD,MAAM,SAAS,GAAG,OAAO,CAAC,QAAQ,CAAC,SAAS,CAAC,CAAC;IAC9C,MAAM,KAAK,GAAG,OAAO,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC;IACtC,MAAM,SAAS,GAAG,KAAK,EAAE,mBAAmB,CAAC;IAC7C,IAAI,CAAC,SAAS,IAAI,OAAO,SAAS,CAAC,gBAAgB,KAAK,QAAQ,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,SAAS,CAAC,EAAE,CAAC;QAC9F,MAAM,IAAI,4BAA4B,CACpC,8BAA8B,YAAY,wEAAwE,CACnH,CAAC;IACJ,CAAC;IACD,MAAM,eAAe,GAAG,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,OAAO,CAAC,YAAY,CAAC,EAAE,SAAS,CAAC,gBAAgB,CAAC,CAAC;IAC7F,MAAM,MAAM,GAAG,IAAI,GAAG,EAAgC,CAAC;IACvD,KAAK,MAAM,GAAG,IAAI,SAAS,EAAE,CAAC;QAC5B,MAAM,KAAK,GAAG,OAAO,CAAC,GAAG,CAAC,CAAC;QAC3B,MAAM,UAAU,GAAG,KAAK,EAAE,WAAW,CAAC;QACtC,MAAM,MAAM,GAAG,KAAK,EAAE,MAAM,CAAC;QAC7B,IAAI,OAAO,UAAU,KAAK,QAAQ,IAAI,2BAA2B,CAAC,UAAU,CAAC,KAAK,UAAU,EAAE,CAAC;YAC7F,MAAM,IAAI,4BAA4B,CACpC,8BAA8B,YAAY,kCAAkC,CAC7E,CAAC;QACJ,CAAC;QACD,IAAI,OAAO,MAAM,KAAK,QAAQ,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,OAAO,CAAC,IAAI,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC,KAAK,MAAM,EAAE,CAAC;YAChG,MAAM,IAAI,4BAA4B,CACpC,8BAA8B,YAAY,yCAAyC,UAAU,EAAE,CAChG,CAAC;QACJ,CAAC;QACD,IAAI,MAAM,CAAC,GAAG,CAAC,UAAU,CAAC,EAAE,CAAC;YAC3B,MAAM,IAAI,4BAA4B,CACpC,8BAA8B,YAAY,kCAAkC,UAAU,EAAE,CACzF,CAAC;QACJ,CAAC;QACD,MAAM,CAAC,GAAG,CAAC,UAAU,EAAE;YACrB,UAAU;YACV,aAAa,EAAE,YAAY;YAC3B,UAAU,EAAE,IAAI,CAAC,IAAI,CAAC,eAAe,EAAE,MAAM,CAAC;SAC/C,CAAC,CAAC;IACL,CAAC;IACD,IAAI,MAAM,CAAC,IAAI,KAAK,CAAC,EAAE,CAAC;QACtB,MAAM,IAAI,4BAA4B,CACpC,8BAA8B,YAAY,kCAAkC,CAC7E,CAAC;IACJ,CAAC;IACD,OAAO,EAAE,YAAY,EAAE,MAAM,EAAE,CAAC;AAClC,CAAC;AAED,SAAS,kBAAkB,CAAC,KAAa;IACvC,MAAM,UAAU,GAAG,2BAA2B,CAAC,KAAK,CAAC,CAAC;IACtD,IAAI,UAAU;QAAE,OAAO,UAAU,CAAC;IAClC,MAAM,UAAU,GAAG,KAAK,CAAC,IAAI,EAAE,CAAC,UAAU,CAAC,IAAI,EAAE,GAAG,CAAC,CAAC,WAAW,EAAE,CAAC;IACpE,KAAK,MAAM,CAAC,UAAU,EAAE,YAAY,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,uBAAuB,CAAC,EAAE,CAAC;QACjF,MAAM,aAAa,GAAG,YAAY,CAAC,WAAW,EAAE,CAAC;QACjD,IAAI,UAAU,KAAK,aAAa,IAAI,UAAU,KAAK,IAAI,CAAC,KAAK,CAAC,QAAQ,CAAC,aAAa,CAAC,EAAE,CAAC;YACtF,OAAO,UAAU,CAAC;QACpB,CAAC;IACH,CAAC;IACD,OAAO,IAAI,CAAC;AACd,CAAC;AAED,MAAM,UAAU,2BAA2B,CACzC,QAAgB,EAChB,eAAuB,4BAA4B,EAAE;IAErD,MAAM,QAAQ,GAAG,YAAY,CAAC,YAAY,CAAC,CAAC;IAC5C,MAAM,UAAU,GAAG,kBAAkB,CAAC,QAAQ,CAAC,CAAC;IAChD,MAAM,KAAK,GAAG,UAAU,CAAC,CAAC,CAAC,QAAQ,CAAC,MAAM,CAAC,GAAG,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC;IACvE,IAAI,CAAC,KAAK,EAAE,CAAC;QACX,MAAM,IAAI,4BAA4B,CACpC,wBAAwB,IAAI,CAAC,SAAS,CAAC,QAAQ,CAAC,kCAAkC;YAChF,6BAA6B,CAAC,GAAG,QAAQ,CAAC,MAAM,CAAC,IAAI,EAAE,CAAC,CAAC,IAAI,EAAE,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAC/E,CAAC;IACJ,CAAC;IACD,OAAO,KAAK,CAAC;AACf,CAAC;AAED,SAAS,gBAAgB,CAAC,KAAa,EAAE,aAA4B,EAAE,KAAa;IAClF,OAAO;QACL,KAAK;QACL,cAAc,EAAE,qBAAqB;QACrC,IAAI,EAAE,IAAI;QACV,KAAK,EAAE,IAAI;QACX,aAAa;QACb,KAAK;KACN,CAAC;AACJ,CAAC;AAED,SAAS,mBAAmB,CAAC,GAAY,EAAE,KAAa;IACtD,MAAM,WAAW,GAAG,OAAO,CAAC,GAAG,CAAC,CAAC;IACjC,IAAI,CAAC,WAAW;QAAE,OAAO,gBAAgB,CAAC,UAAU,KAAK,GAAG,EAAE,IAAI,EAAE,sCAAsC,CAAC,CAAC;IAC5G,MAAM,KAAK,GAAG,OAAO,WAAW,CAAC,KAAK,KAAK,QAAQ,IAAI,WAAW,CAAC,KAAK,CAAC,IAAI,EAAE;QAC7E,CAAC,CAAC,WAAW,CAAC,KAAK,CAAC,IAAI,EAAE;QAC1B,CAAC,CAAC,UAAU,KAAK,GAAG,CAAC;IACvB,MAAM,aAAa,GAAG,OAAO,WAAW,CAAC,EAAE,KAAK,QAAQ,CAAC,CAAC,CAAC,WAAW,CAAC,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC;IACjF,IAAI,KAAK,CAAC,UAAU,CAAC,SAAS,CAAC,EAAE,CAAC;QAChC,OAAO,gBAAgB,CAAC,KAAK,EAAE,aAAa,EAAE,kDAAkD,CAAC,CAAC;IACpG,CAAC;IACD,MAAM,QAAQ,GAAG,MAAM,CAAC,MAAM,CAAC,WAAW,EAAE,WAAW,CAAC,CAAC;IACzD,MAAM,SAAS,GAAG,MAAM,CAAC,MAAM,CAAC,WAAW,EAAE,cAAc,CAAC,CAAC;IAC7D,IAAI,MAAM,CAAC,QAAQ,CAAC,GAAG,MAAM,CAAC,SAAS,CAAC,KAAK,CAAC,EAAE,CAAC;QAC/C,OAAO,gBAAgB,CACrB,KAAK,EACL,aAAa,EACb,yEAAyE,CAC1E,CAAC;IACJ,CAAC;IACD,IAAI,QAAQ,EAAE,CAAC;QACb,IAAI,WAAW,CAAC,SAAS,KAAK,IAAI,EAAE,CAAC;YACnC,OAAO,EAAE,KAAK,EAAE,cAAc,EAAE,mBAAmB,EAAE,IAAI,EAAE,OAAO,EAAE,KAAK,EAAE,IAAI,EAAE,aAAa,EAAE,CAAC;QACnG,CAAC;QACD,IAAI,cAAc,CAAC,WAAW,CAAC,SAAS,CAAC,EAAE,CAAC;YAC1C,OAAO;gBACL,KAAK;gBACL,cAAc,EAAE,eAAe;gBAC/B,IAAI,EAAE,OAAO;gBACb,KAAK,EAAE,WAAW,CAAC,SAAS;gBAC5B,aAAa;aACd,CAAC;QACJ,CAAC;QACD,OAAO,gBAAgB,CAAC,KAAK,EAAE,aAAa,EAAE,6CAA6C,CAAC,CAAC;IAC/F,CAAC;IACD,IAAI,cAAc,CAAC,WAAW,CAAC,YAAY,CAAC,EAAE,CAAC;QAC7C,OAAO;YACL,KAAK;YACL,cAAc,EAAE,eAAe;YAC/B,IAAI,EAAE,QAAQ;YACd,KAAK,EAAE,WAAW,CAAC,YAAY;YAC/B,aAAa;SACd,CAAC;IACJ,CAAC;IACD,OAAO,gBAAgB,CAAC,KAAK,EAAE,aAAa,EAAE,wCAAwC,CAAC,CAAC;AAC1F,CAAC;AAED,SAAS,yBAAyB,CAAC,GAAY;IAC7C,MAAM,WAAW,GAAG,OAAO,CAAC,GAAG,CAAC,CAAC;IACjC,OAAO,OAAO,CACZ,WAAW;QACT,OAAO,WAAW,CAAC,IAAI,KAAK,QAAQ;QACpC,CAAC,MAAM,CAAC,MAAM,CAAC,WAAW,EAAE,WAAW,CAAC;QACxC,CAAC,MAAM,CAAC,MAAM,CAAC,WAAW,EAAE,cAAc,CAAC,CAC9C,CAAC;AACJ,CAAC;AAED,MAAM,UAAU,8BAA8B,CAC5C,QAAgB,EAChB,eAAuB,4BAA4B,EAAE;IAErD,MAAM,KAAK,GAAG,2BAA2B,CAAC,QAAQ,EAAE,YAAY,CAAC,CAAC;IAClE,IAAI,MAA+B,CAAC;IACpC,IAAI,CAAC;QACH,MAAM,GAAG,WAAW,CAAC,KAAK,CAAC,UAAU,EAAE,8BAA8B,KAAK,CAAC,UAAU,EAAE,CAAC,CAAC;IAC3F,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,OAAO;YACL,GAAG,KAAK;YACR,UAAU,EAAE,CAAC,gBAAgB,CAAC,aAAa,EAAE,IAAI,EAAG,KAAe,CAAC,OAAO,CAAC,CAAC;SAC9E,CAAC;IACJ,CAAC;IACD,MAAM,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC;IACtC,IAAI,CAAC,MAAM,IAAI,MAAM,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QAChD,OAAO;YACL,GAAG,KAAK;YACR,UAAU,EAAE,CAAC,gBAAgB,CAAC,aAAa,EAAE,IAAI,EAAE,sDAAsD,CAAC,CAAC;SAC5G,CAAC;IACJ,CAAC;IACD,MAAM,UAAU,GAAG,MAAM,CAAC,OAAO,CAAC,MAAM,CAAC;SACtC,MAAM,CAAC,CAAC,CAAC,EAAE,WAAW,CAAC,EAAE,EAAE,CAAC,CAAC,yBAAyB,CAAC,WAAW,CAAC,CAAC;SACpE,GAAG,CAAC,CAAC,CAAC,KAAK,EAAE,WAAW,CAAC,EAAE,EAAE,CAAC,mBAAmB,CAAC,WAAW,EAAE,KAAK,CAAC,CAAC,CAAC;IAC1E,IAAI,UAAU,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QAC5B,OAAO;YACL,GAAG,KAAK;YACR,UAAU,EAAE,CAAC,gBAAgB,CAAC,aAAa,EAAE,IAAI,EAAE,wDAAwD,CAAC,CAAC;SAC9G,CAAC;IACJ,CAAC;IACD,MAAM,MAAM,GAAG,IAAI,GAAG,EAAkB,CAAC;IACzC,KAAK,MAAM,SAAS,IAAI,UAAU;QAAE,MAAM,CAAC,GAAG,CAAC,SAAS,CAAC,KAAK,EAAE,CAAC,MAAM,CAAC,GAAG,CAAC,SAAS,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC;IACxG,OAAO;QACL,GAAG,KAAK;QACR,UAAU,EAAE,UAAU,CAAC,GAAG,CAAC,CAAC,SAAS,EAAE,EAAE,CACvC,CAAC,MAAM,CAAC,GAAG,CAAC,SAAS,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,GAAG,CAAC;YACpC,CAAC,CAAC,gBAAgB,CAAC,SAAS,CAAC,KAAK,EAAE,SAAS,CAAC,aAAa,EAAE,0BAA0B,SAAS,CAAC,KAAK,EAAE,CAAC;YACzG,CAAC,CAAC,SAAS,CACd;KACF,CAAC;AACJ,CAAC;AAED,MAAM,UAAU,+BAA+B,CAC7C,eAAuB,4BAA4B,EAAE;IAErD,IAAI,QAAuB,CAAC;IAC5B,IAAI,CAAC;QACH,QAAQ,GAAG,YAAY,CAAC,YAAY,CAAC,CAAC;IACxC,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,OAAO,CAAE,KAAe,CAAC,OAAO,CAAC,CAAC;IACpC,CAAC;IACD,MAAM,MAAM,GAAa,EAAE,CAAC;IAC5B,KAAK,MAAM,UAAU,IAAI,QAAQ,CAAC,MAAM,CAAC,IAAI,EAAE,EAAE,CAAC;QAChD,MAAM,SAAS,GAAG,8BAA8B,CAAC,UAAU,EAAE,YAAY,CAAC,CAAC;QAC3E,KAAK,MAAM,SAAS,IAAI,SAAS,CAAC,UAAU,EAAE,CAAC;YAC7C,IAAI,SAAS,CAAC,cAAc,KAAK,qBAAqB,EAAE,CAAC;gBACvD,MAAM,CAAC,IAAI,CAAC,GAAG,UAAU,IAAI,SAAS,CAAC,KAAK,KAAK,SAAS,CAAC,KAAK,EAAE,CAAC,CAAC;YACtE,CAAC;QACH,CAAC;IACH,CAAC;IACD,OAAO,MAAM,CAAC;AAChB,CAAC"}
|