@dsh-enhanced/assistant-growth-contract 0.1.12
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/LICENSE +21 -0
- package/README.md +29 -0
- package/lib/automation.d.ts +21 -0
- package/lib/automation.d.ts.map +1 -0
- package/lib/automation.js +336 -0
- package/lib/automation.js.map +1 -0
- package/lib/canonical.d.ts +44 -0
- package/lib/canonical.d.ts.map +1 -0
- package/lib/canonical.js +518 -0
- package/lib/canonical.js.map +1 -0
- package/lib/index.d.ts +7 -0
- package/lib/index.d.ts.map +1 -0
- package/lib/index.js +7 -0
- package/lib/index.js.map +1 -0
- package/lib/preferences.d.ts +13 -0
- package/lib/preferences.d.ts.map +1 -0
- package/lib/preferences.js +19 -0
- package/lib/preferences.js.map +1 -0
- package/lib/promotion.d.ts +192 -0
- package/lib/promotion.d.ts.map +1 -0
- package/lib/promotion.js +442 -0
- package/lib/promotion.js.map +1 -0
- package/lib/types.d.ts +219 -0
- package/lib/types.d.ts.map +1 -0
- package/lib/types.js +11 -0
- package/lib/types.js.map +1 -0
- package/lib/version.d.ts +2 -0
- package/lib/version.d.ts.map +1 -0
- package/lib/version.js +2 -0
- package/lib/version.js.map +1 -0
- package/package.json +47 -0
package/lib/canonical.js
ADDED
|
@@ -0,0 +1,518 @@
|
|
|
1
|
+
import { createHash } from 'node:crypto';
|
|
2
|
+
import { isAbsolute, resolve } from 'node:path';
|
|
3
|
+
import { ASSISTANT_GROWTH_CONTRACT_VERSION, WORKFLOW_ARGUMENT_SHAPE_PROTOCOL, WORKFLOW_TEMPLATE_PROTOCOL, WORKFLOW_TRACE_PROTOCOL, WORKFLOW_TRACE_SOURCE_ID, } from './types.js';
|
|
4
|
+
export class AssistantGrowthContractError extends Error {
|
|
5
|
+
code;
|
|
6
|
+
constructor(code, message) {
|
|
7
|
+
super(message);
|
|
8
|
+
this.code = code;
|
|
9
|
+
this.name = 'AssistantGrowthContractError';
|
|
10
|
+
}
|
|
11
|
+
}
|
|
12
|
+
const digestPattern = /^[a-f0-9]{64}$/u;
|
|
13
|
+
const identifierPattern = /^[A-Za-z0-9][A-Za-z0-9._:/-]{0,199}$/u;
|
|
14
|
+
const presetPattern = /^[A-Za-z0-9][A-Za-z0-9._:-]{0,199}$/u;
|
|
15
|
+
const externalPrincipalComponentPattern = /^[A-Za-z0-9][A-Za-z0-9._@/-]{0,255}$/u;
|
|
16
|
+
function invalid(message) {
|
|
17
|
+
throw new AssistantGrowthContractError('invalid-input', message);
|
|
18
|
+
}
|
|
19
|
+
export function isGrowthRecord(value) {
|
|
20
|
+
return value !== null && typeof value === 'object' && !Array.isArray(value)
|
|
21
|
+
&& (Object.getPrototypeOf(value) === Object.prototype || Object.getPrototypeOf(value) === null);
|
|
22
|
+
}
|
|
23
|
+
export function assertExactGrowthKeys(value, expected, label) {
|
|
24
|
+
const actual = Object.keys(value).sort();
|
|
25
|
+
const keys = [...expected].sort();
|
|
26
|
+
if (actual.length !== keys.length || actual.some((key, index) => key !== keys[index])) {
|
|
27
|
+
invalid(`${label} has an invalid shape`);
|
|
28
|
+
}
|
|
29
|
+
}
|
|
30
|
+
function canonicalText(value, label, maxBytes, options = {}) {
|
|
31
|
+
if (typeof value !== 'string')
|
|
32
|
+
invalid(`${label} must be a string`);
|
|
33
|
+
const normalized = value.normalize('NFC').trim();
|
|
34
|
+
if (normalized !== value || normalized === '' || Buffer.byteLength(normalized, 'utf8') > maxBytes) {
|
|
35
|
+
invalid(`${label} is not canonical bounded text`);
|
|
36
|
+
}
|
|
37
|
+
for (const character of normalized) {
|
|
38
|
+
const code = character.codePointAt(0);
|
|
39
|
+
if (code === 0 || code === 0x7f || (!options.multiline && code <= 0x1f)) {
|
|
40
|
+
invalid(`${label} contains a control character`);
|
|
41
|
+
}
|
|
42
|
+
}
|
|
43
|
+
if (options.identifier !== undefined && !options.identifier.test(normalized)) {
|
|
44
|
+
invalid(`${label} is not a canonical identifier`);
|
|
45
|
+
}
|
|
46
|
+
return normalized;
|
|
47
|
+
}
|
|
48
|
+
/**
|
|
49
|
+
* Validate Delivery's canonical four-component external principal identity.
|
|
50
|
+
* Components are independently URI-encoded, so provider-owned slashes cannot
|
|
51
|
+
* be confused with the separators between channel/account/tenant/user.
|
|
52
|
+
*/
|
|
53
|
+
export function validateExternalPrincipalId(value) {
|
|
54
|
+
const principalId = canonicalText(value, 'external principalId', 4_096);
|
|
55
|
+
const components = principalId.split('/');
|
|
56
|
+
if (components.length !== 4)
|
|
57
|
+
invalid('external principalId must have four components');
|
|
58
|
+
for (const component of components) {
|
|
59
|
+
let decoded;
|
|
60
|
+
try {
|
|
61
|
+
decoded = decodeURIComponent(component);
|
|
62
|
+
}
|
|
63
|
+
catch {
|
|
64
|
+
invalid('external principalId has invalid component encoding');
|
|
65
|
+
}
|
|
66
|
+
if (!externalPrincipalComponentPattern.test(decoded)
|
|
67
|
+
|| encodeURIComponent(decoded) !== component) {
|
|
68
|
+
invalid('external principalId is not canonical');
|
|
69
|
+
}
|
|
70
|
+
}
|
|
71
|
+
return principalId;
|
|
72
|
+
}
|
|
73
|
+
export function exactGrowthDigest(value, label = 'digest') {
|
|
74
|
+
if (typeof value !== 'string' || !digestPattern.test(value)) {
|
|
75
|
+
invalid(`${label} must be a lowercase SHA-256 digest`);
|
|
76
|
+
}
|
|
77
|
+
return value;
|
|
78
|
+
}
|
|
79
|
+
/** Strict canonical JSON for already-validated protocol payloads. */
|
|
80
|
+
export function canonicalGrowthJson(value) {
|
|
81
|
+
let nodes = 0;
|
|
82
|
+
const seen = new Set();
|
|
83
|
+
const visit = (current, depth) => {
|
|
84
|
+
nodes += 1;
|
|
85
|
+
if (nodes > 8_192 || depth > 32)
|
|
86
|
+
invalid('canonical JSON payload is too complex');
|
|
87
|
+
if (current === null)
|
|
88
|
+
return 'null';
|
|
89
|
+
if (typeof current === 'string' || typeof current === 'boolean')
|
|
90
|
+
return JSON.stringify(current);
|
|
91
|
+
if (typeof current === 'number') {
|
|
92
|
+
if (!Number.isFinite(current))
|
|
93
|
+
invalid('canonical JSON number is invalid');
|
|
94
|
+
return JSON.stringify(current);
|
|
95
|
+
}
|
|
96
|
+
if (typeof current !== 'object')
|
|
97
|
+
invalid('canonical JSON contains a non-JSON value');
|
|
98
|
+
if (seen.has(current))
|
|
99
|
+
invalid('canonical JSON must not contain a cycle');
|
|
100
|
+
seen.add(current);
|
|
101
|
+
try {
|
|
102
|
+
if (Array.isArray(current)) {
|
|
103
|
+
if (Object.getPrototypeOf(current) !== Array.prototype)
|
|
104
|
+
invalid('canonical JSON array is invalid');
|
|
105
|
+
return `[${current.map(item => visit(item, depth + 1)).join(',')}]`;
|
|
106
|
+
}
|
|
107
|
+
if (!isGrowthRecord(current))
|
|
108
|
+
invalid('canonical JSON object is invalid');
|
|
109
|
+
const keys = Object.keys(current).sort();
|
|
110
|
+
return `{${keys.map(key => `${JSON.stringify(key)}:${visit(current[key], depth + 1)}`).join(',')}}`;
|
|
111
|
+
}
|
|
112
|
+
finally {
|
|
113
|
+
seen.delete(current);
|
|
114
|
+
}
|
|
115
|
+
};
|
|
116
|
+
return visit(value, 0);
|
|
117
|
+
}
|
|
118
|
+
export function growthSha256(value) {
|
|
119
|
+
return createHash('sha256').update(value).digest('hex');
|
|
120
|
+
}
|
|
121
|
+
export function growthObjectDigest(value) {
|
|
122
|
+
return growthSha256(canonicalGrowthJson(value));
|
|
123
|
+
}
|
|
124
|
+
/**
|
|
125
|
+
* Fingerprint JSON structure only. Scalar values, array length and member
|
|
126
|
+
* order are deliberately absent. Object field names remain part of shape.
|
|
127
|
+
*/
|
|
128
|
+
export function workflowArgumentShapeDigest(input) {
|
|
129
|
+
let nodes = 0;
|
|
130
|
+
const active = new Set();
|
|
131
|
+
const shape = (value, depth) => {
|
|
132
|
+
nodes += 1;
|
|
133
|
+
if (nodes > 1_024 || depth > 16)
|
|
134
|
+
invalid('workflow argument shape is too complex');
|
|
135
|
+
if (value === null)
|
|
136
|
+
return 'null';
|
|
137
|
+
if (typeof value === 'string')
|
|
138
|
+
return 'string';
|
|
139
|
+
if (typeof value === 'boolean')
|
|
140
|
+
return 'boolean';
|
|
141
|
+
if (typeof value === 'number') {
|
|
142
|
+
if (!Number.isFinite(value))
|
|
143
|
+
invalid('workflow argument number is invalid');
|
|
144
|
+
return Number.isInteger(value) ? 'integer' : 'number';
|
|
145
|
+
}
|
|
146
|
+
if (typeof value !== 'object')
|
|
147
|
+
invalid('workflow arguments must be plain JSON data');
|
|
148
|
+
if (active.has(value))
|
|
149
|
+
invalid('workflow arguments must not contain a cycle');
|
|
150
|
+
active.add(value);
|
|
151
|
+
try {
|
|
152
|
+
if (Array.isArray(value)) {
|
|
153
|
+
if (Object.getPrototypeOf(value) !== Array.prototype)
|
|
154
|
+
invalid('workflow argument array is invalid');
|
|
155
|
+
const members = [...new Set(value.map(item => canonicalGrowthJson(shape(item, depth + 1))))].sort();
|
|
156
|
+
return { arrayMembers: members.map(member => JSON.parse(member)) };
|
|
157
|
+
}
|
|
158
|
+
if (!isGrowthRecord(value))
|
|
159
|
+
invalid('workflow arguments must be plain JSON data');
|
|
160
|
+
const keys = Object.keys(value).sort();
|
|
161
|
+
if (keys.length > 256)
|
|
162
|
+
invalid('workflow argument object is too wide');
|
|
163
|
+
for (const key of keys)
|
|
164
|
+
canonicalText(key, 'workflow argument field', 200);
|
|
165
|
+
return Object.fromEntries(keys.map(key => [key, shape(value[key], depth + 1)]));
|
|
166
|
+
}
|
|
167
|
+
finally {
|
|
168
|
+
active.delete(value);
|
|
169
|
+
}
|
|
170
|
+
};
|
|
171
|
+
return growthObjectDigest({ contract: WORKFLOW_ARGUMENT_SHAPE_PROTOCOL, shape: shape(input, 0) });
|
|
172
|
+
}
|
|
173
|
+
export function validateWorkflowScope(value) {
|
|
174
|
+
if (!isGrowthRecord(value))
|
|
175
|
+
invalid('workflow scope must be an object');
|
|
176
|
+
assertExactGrowthKeys(value, ['workspace', 'preset'], 'workflow scope');
|
|
177
|
+
const workspace = canonicalText(value['workspace'], 'workflow workspace', 4_096);
|
|
178
|
+
const preset = canonicalText(value['preset'], 'workflow preset', 200, { identifier: presetPattern });
|
|
179
|
+
if (!isAbsolute(workspace) || resolve(workspace) !== workspace) {
|
|
180
|
+
invalid('workflow workspace must be an absolute normalized path');
|
|
181
|
+
}
|
|
182
|
+
return Object.freeze({ workspace, preset });
|
|
183
|
+
}
|
|
184
|
+
export function workflowScopeKey(value) {
|
|
185
|
+
const scope = validateWorkflowScope(value);
|
|
186
|
+
return growthObjectDigest(['assistant-growth-scope/v1', scope.workspace, scope.preset]);
|
|
187
|
+
}
|
|
188
|
+
function catalogId(value) {
|
|
189
|
+
return canonicalText(value, 'workflow catalog id', 200, { identifier: identifierPattern });
|
|
190
|
+
}
|
|
191
|
+
export function validateWorkflowStepFingerprint(value) {
|
|
192
|
+
if (!isGrowthRecord(value))
|
|
193
|
+
invalid('workflow step must be an object');
|
|
194
|
+
assertExactGrowthKeys(value, ['catalogId', 'argumentSchemaDigest'], 'workflow step');
|
|
195
|
+
return Object.freeze({
|
|
196
|
+
catalogId: catalogId(value['catalogId']),
|
|
197
|
+
argumentSchemaDigest: exactGrowthDigest(value['argumentSchemaDigest'], 'argumentSchemaDigest'),
|
|
198
|
+
});
|
|
199
|
+
}
|
|
200
|
+
export function validateWorkflowSteps(value) {
|
|
201
|
+
if (!Array.isArray(value) || value.length < 1 || value.length > 64) {
|
|
202
|
+
invalid('workflow steps must contain 1 to 64 entries');
|
|
203
|
+
}
|
|
204
|
+
return Object.freeze(value.map(validateWorkflowStepFingerprint));
|
|
205
|
+
}
|
|
206
|
+
export function validateWorkflowTemplatePrivacyAttestation(value) {
|
|
207
|
+
if (!isGrowthRecord(value))
|
|
208
|
+
invalid('workflow privacy attestation must be an object');
|
|
209
|
+
if (value['kind'] === 'deterministic-deidentification') {
|
|
210
|
+
assertExactGrowthKeys(value, ['kind', 'method', 'attestationId', 'attestationDigest'], 'workflow privacy attestation');
|
|
211
|
+
if (value['method'] !== 'assistant-delivery-redaction-v1') {
|
|
212
|
+
invalid('workflow deidentification method is unsupported');
|
|
213
|
+
}
|
|
214
|
+
return Object.freeze({
|
|
215
|
+
kind: 'deterministic-deidentification',
|
|
216
|
+
method: 'assistant-delivery-redaction-v1',
|
|
217
|
+
attestationId: canonicalText(value['attestationId'], 'privacy attestation id', 200, {
|
|
218
|
+
identifier: identifierPattern,
|
|
219
|
+
}),
|
|
220
|
+
attestationDigest: exactGrowthDigest(value['attestationDigest'], 'privacy attestation digest'),
|
|
221
|
+
});
|
|
222
|
+
}
|
|
223
|
+
if (value['kind'] === 'owner-explicit') {
|
|
224
|
+
assertExactGrowthKeys(value, ['kind', 'limitation', 'attestationId', 'attestationDigest'], 'workflow privacy attestation');
|
|
225
|
+
if (value['limitation'] !== 'deidentification-unproven') {
|
|
226
|
+
invalid('owner-explicit privacy limitation is invalid');
|
|
227
|
+
}
|
|
228
|
+
return Object.freeze({
|
|
229
|
+
kind: 'owner-explicit',
|
|
230
|
+
limitation: 'deidentification-unproven',
|
|
231
|
+
attestationId: canonicalText(value['attestationId'], 'privacy attestation id', 200, {
|
|
232
|
+
identifier: identifierPattern,
|
|
233
|
+
}),
|
|
234
|
+
attestationDigest: exactGrowthDigest(value['attestationDigest'], 'privacy attestation digest'),
|
|
235
|
+
});
|
|
236
|
+
}
|
|
237
|
+
invalid('workflow privacy attestation kind is invalid');
|
|
238
|
+
}
|
|
239
|
+
export function validateWorkflowAutomationTemplate(value) {
|
|
240
|
+
if (!isGrowthRecord(value))
|
|
241
|
+
invalid('workflow template reference must be an object');
|
|
242
|
+
assertExactGrowthKeys(value, ['templateRef', 'templateDigest', 'privacyAttestation'], 'workflow template reference');
|
|
243
|
+
return Object.freeze({
|
|
244
|
+
templateRef: canonicalText(value['templateRef'], 'templateRef', 200, { identifier: identifierPattern }),
|
|
245
|
+
templateDigest: exactGrowthDigest(value['templateDigest'], 'templateDigest'),
|
|
246
|
+
privacyAttestation: validateWorkflowTemplatePrivacyAttestation(value['privacyAttestation']),
|
|
247
|
+
});
|
|
248
|
+
}
|
|
249
|
+
function canonicalTimezone(value) {
|
|
250
|
+
const timezone = canonicalText(value, 'workflow timezone', 200);
|
|
251
|
+
try {
|
|
252
|
+
if (new Intl.DateTimeFormat('en', { timeZone: timezone }).resolvedOptions().timeZone !== timezone) {
|
|
253
|
+
invalid('workflow timezone must use its canonical IANA id');
|
|
254
|
+
}
|
|
255
|
+
}
|
|
256
|
+
catch {
|
|
257
|
+
invalid('workflow timezone is invalid');
|
|
258
|
+
}
|
|
259
|
+
return timezone;
|
|
260
|
+
}
|
|
261
|
+
export function validateWorkflowAutomationTemplateContent(value) {
|
|
262
|
+
if (!isGrowthRecord(value))
|
|
263
|
+
invalid('workflow template content must be an object');
|
|
264
|
+
assertExactGrowthKeys(value, [
|
|
265
|
+
'scope', 'ownerBindingId', 'principalId', 'name', 'prompt', 'schedule', 'timeoutMs',
|
|
266
|
+
'toolCatalogIds', 'deliveryBindingId',
|
|
267
|
+
], 'workflow template content');
|
|
268
|
+
if (!isGrowthRecord(value['schedule']))
|
|
269
|
+
invalid('workflow schedule must be an object');
|
|
270
|
+
assertExactGrowthKeys(value['schedule'], ['kind', 'expression', 'timezone'], 'workflow schedule');
|
|
271
|
+
if (value['schedule']['kind'] !== 'cron')
|
|
272
|
+
invalid('workflow schedule kind is invalid');
|
|
273
|
+
if (!Number.isSafeInteger(value['timeoutMs'])
|
|
274
|
+
|| value['timeoutMs'] < 1_000 || value['timeoutMs'] > 86_400_000) {
|
|
275
|
+
invalid('workflow timeout is invalid');
|
|
276
|
+
}
|
|
277
|
+
if (!Array.isArray(value['toolCatalogIds'])
|
|
278
|
+
|| value['toolCatalogIds'].length < 1
|
|
279
|
+
|| value['toolCatalogIds'].length > 64)
|
|
280
|
+
invalid('workflow tool catalog is invalid');
|
|
281
|
+
const toolCatalogIds = value['toolCatalogIds'].map(catalogId);
|
|
282
|
+
const sorted = [...new Set(toolCatalogIds)].sort();
|
|
283
|
+
if (sorted.length !== toolCatalogIds.length
|
|
284
|
+
|| sorted.some((entry, index) => entry !== toolCatalogIds[index])) {
|
|
285
|
+
invalid('workflow tool catalog must be unique and sorted');
|
|
286
|
+
}
|
|
287
|
+
return Object.freeze({
|
|
288
|
+
scope: validateWorkflowScope(value['scope']),
|
|
289
|
+
ownerBindingId: canonicalText(value['ownerBindingId'], 'owner binding id', 200, {
|
|
290
|
+
identifier: identifierPattern,
|
|
291
|
+
}),
|
|
292
|
+
principalId: validateExternalPrincipalId(value['principalId']),
|
|
293
|
+
name: canonicalText(value['name'], 'workflow name', 200),
|
|
294
|
+
prompt: canonicalText(value['prompt'], 'workflow prompt', 8_192, { multiline: true }),
|
|
295
|
+
schedule: Object.freeze({
|
|
296
|
+
kind: 'cron',
|
|
297
|
+
expression: canonicalText(value['schedule']['expression'], 'cron expression', 200),
|
|
298
|
+
timezone: canonicalTimezone(value['schedule']['timezone']),
|
|
299
|
+
}),
|
|
300
|
+
timeoutMs: value['timeoutMs'],
|
|
301
|
+
toolCatalogIds: Object.freeze(sorted),
|
|
302
|
+
deliveryBindingId: canonicalText(value['deliveryBindingId'], 'delivery binding id', 200, {
|
|
303
|
+
identifier: identifierPattern,
|
|
304
|
+
}),
|
|
305
|
+
});
|
|
306
|
+
}
|
|
307
|
+
export function workflowAutomationTemplateContentDigest(value) {
|
|
308
|
+
const content = validateWorkflowAutomationTemplateContent(value);
|
|
309
|
+
return growthObjectDigest({ contract: WORKFLOW_TEMPLATE_PROTOCOL, content });
|
|
310
|
+
}
|
|
311
|
+
export function validateResolvedWorkflowAutomationTemplate(value) {
|
|
312
|
+
if (!isGrowthRecord(value))
|
|
313
|
+
invalid('resolved workflow template must be an object');
|
|
314
|
+
assertExactGrowthKeys(value, [
|
|
315
|
+
'contractVersion', 'template', 'scope', 'ownerBindingId', 'principalId', 'name', 'prompt', 'schedule',
|
|
316
|
+
'timeoutMs', 'toolCatalogIds', 'deliveryBindingId',
|
|
317
|
+
], 'resolved workflow template');
|
|
318
|
+
if (value['contractVersion'] !== ASSISTANT_GROWTH_CONTRACT_VERSION) {
|
|
319
|
+
invalid('resolved workflow template contract version is invalid');
|
|
320
|
+
}
|
|
321
|
+
const template = validateWorkflowAutomationTemplate(value['template']);
|
|
322
|
+
const content = validateWorkflowAutomationTemplateContent({
|
|
323
|
+
scope: value['scope'],
|
|
324
|
+
ownerBindingId: value['ownerBindingId'],
|
|
325
|
+
principalId: value['principalId'],
|
|
326
|
+
name: value['name'],
|
|
327
|
+
prompt: value['prompt'],
|
|
328
|
+
schedule: value['schedule'],
|
|
329
|
+
timeoutMs: value['timeoutMs'],
|
|
330
|
+
toolCatalogIds: value['toolCatalogIds'],
|
|
331
|
+
deliveryBindingId: value['deliveryBindingId'],
|
|
332
|
+
});
|
|
333
|
+
if (workflowAutomationTemplateContentDigest(content) !== template.templateDigest) {
|
|
334
|
+
throw new AssistantGrowthContractError('receipt-mismatch', 'resolved workflow template digest is stale');
|
|
335
|
+
}
|
|
336
|
+
return Object.freeze({
|
|
337
|
+
contractVersion: ASSISTANT_GROWTH_CONTRACT_VERSION,
|
|
338
|
+
template,
|
|
339
|
+
...content,
|
|
340
|
+
});
|
|
341
|
+
}
|
|
342
|
+
export function validateWorkflowTraceEvidence(value) {
|
|
343
|
+
if (!isGrowthRecord(value))
|
|
344
|
+
invalid('workflow trace evidence must be an object');
|
|
345
|
+
const expected = [
|
|
346
|
+
'occurredAt', 'signal', 'objectiveStatus', 'ownerBindingId', 'taskRef', 'template', 'steps',
|
|
347
|
+
...(value['taskEvidenceDigest'] === undefined ? [] : ['taskEvidenceDigest']),
|
|
348
|
+
];
|
|
349
|
+
assertExactGrowthKeys(value, expected, 'workflow trace evidence');
|
|
350
|
+
if (!Number.isSafeInteger(value['occurredAt']) || value['occurredAt'] < 0
|
|
351
|
+
|| (value['signal'] !== 'owner-explicit' && value['signal'] !== 'verified-repetition')
|
|
352
|
+
|| (value['objectiveStatus'] !== 'achieved' && value['objectiveStatus'] !== 'unknown')) {
|
|
353
|
+
invalid('workflow trace evidence tuple is invalid');
|
|
354
|
+
}
|
|
355
|
+
const template = validateWorkflowAutomationTemplate(value['template']);
|
|
356
|
+
const taskEvidenceDigest = value['taskEvidenceDigest'] === undefined
|
|
357
|
+
? undefined
|
|
358
|
+
: exactGrowthDigest(value['taskEvidenceDigest'], 'task evidence digest');
|
|
359
|
+
if (value['signal'] === 'verified-repetition'
|
|
360
|
+
&& (value['objectiveStatus'] !== 'achieved' || taskEvidenceDigest === undefined
|
|
361
|
+
|| template.privacyAttestation.kind !== 'deterministic-deidentification')) {
|
|
362
|
+
invalid('verified repetition requires achieved trusted evidence and proven deterministic deidentification');
|
|
363
|
+
}
|
|
364
|
+
return Object.freeze({
|
|
365
|
+
occurredAt: value['occurredAt'],
|
|
366
|
+
signal: value['signal'],
|
|
367
|
+
objectiveStatus: value['objectiveStatus'],
|
|
368
|
+
ownerBindingId: canonicalText(value['ownerBindingId'], 'owner binding id', 200, {
|
|
369
|
+
identifier: identifierPattern,
|
|
370
|
+
}),
|
|
371
|
+
taskRef: exactGrowthDigest(value['taskRef'], 'taskRef'),
|
|
372
|
+
...(taskEvidenceDigest === undefined ? {} : { taskEvidenceDigest }),
|
|
373
|
+
template,
|
|
374
|
+
steps: validateWorkflowSteps(value['steps']),
|
|
375
|
+
});
|
|
376
|
+
}
|
|
377
|
+
export function validateWorkflowTraceSourceAttestation(value) {
|
|
378
|
+
if (!isGrowthRecord(value))
|
|
379
|
+
invalid('workflow trace source must be an object');
|
|
380
|
+
assertExactGrowthKeys(value, ['sourceId', 'generation', 'authorityDigest'], 'workflow trace source');
|
|
381
|
+
if (value['sourceId'] !== WORKFLOW_TRACE_SOURCE_ID
|
|
382
|
+
|| !Number.isSafeInteger(value['generation']) || value['generation'] < 1) {
|
|
383
|
+
invalid('workflow trace source tuple is invalid');
|
|
384
|
+
}
|
|
385
|
+
return Object.freeze({
|
|
386
|
+
sourceId: WORKFLOW_TRACE_SOURCE_ID,
|
|
387
|
+
generation: value['generation'],
|
|
388
|
+
authorityDigest: exactGrowthDigest(value['authorityDigest'], 'source authority digest'),
|
|
389
|
+
});
|
|
390
|
+
}
|
|
391
|
+
function revisionWithoutDigest(value) {
|
|
392
|
+
if (!isGrowthRecord(value))
|
|
393
|
+
invalid('workflow trace revision must be an object');
|
|
394
|
+
const expected = [
|
|
395
|
+
'source', 'scope', 'subjectRef', 'version', 'disposition',
|
|
396
|
+
...(value['evidence'] === undefined ? [] : ['evidence']),
|
|
397
|
+
];
|
|
398
|
+
assertExactGrowthKeys(value, expected, 'workflow trace revision payload');
|
|
399
|
+
if (!Number.isSafeInteger(value['version']) || value['version'] < 1
|
|
400
|
+
|| (value['disposition'] !== 'upsert' && value['disposition'] !== 'retract')
|
|
401
|
+
|| (value['disposition'] === 'upsert') !== (value['evidence'] !== undefined)) {
|
|
402
|
+
invalid('workflow trace revision tuple is invalid');
|
|
403
|
+
}
|
|
404
|
+
return Object.freeze({
|
|
405
|
+
source: validateWorkflowTraceSourceAttestation(value['source']),
|
|
406
|
+
scope: validateWorkflowScope(value['scope']),
|
|
407
|
+
subjectRef: exactGrowthDigest(value['subjectRef'], 'subjectRef'),
|
|
408
|
+
version: value['version'],
|
|
409
|
+
disposition: value['disposition'],
|
|
410
|
+
...(value['evidence'] === undefined
|
|
411
|
+
? {}
|
|
412
|
+
: { evidence: validateWorkflowTraceEvidence(value['evidence']) }),
|
|
413
|
+
});
|
|
414
|
+
}
|
|
415
|
+
export function workflowTraceRevisionDigest(value) {
|
|
416
|
+
const revision = revisionWithoutDigest(value);
|
|
417
|
+
return growthObjectDigest({ contract: WORKFLOW_TRACE_PROTOCOL, ...revision });
|
|
418
|
+
}
|
|
419
|
+
export function validateWorkflowTraceRevision(value) {
|
|
420
|
+
if (!isGrowthRecord(value))
|
|
421
|
+
invalid('workflow trace revision must be an object');
|
|
422
|
+
const expected = [
|
|
423
|
+
'source', 'scope', 'subjectRef', 'version', 'disposition', 'digest',
|
|
424
|
+
...(value['evidence'] === undefined ? [] : ['evidence']),
|
|
425
|
+
];
|
|
426
|
+
assertExactGrowthKeys(value, expected, 'workflow trace revision');
|
|
427
|
+
const digest = exactGrowthDigest(value['digest'], 'workflow trace digest');
|
|
428
|
+
const payload = revisionWithoutDigest(Object.fromEntries(Object.entries(value).filter(([key]) => key !== 'digest')));
|
|
429
|
+
if (workflowTraceRevisionDigest(payload) !== digest) {
|
|
430
|
+
throw new AssistantGrowthContractError('receipt-mismatch', 'workflow trace digest does not match its payload');
|
|
431
|
+
}
|
|
432
|
+
return Object.freeze({ ...payload, digest });
|
|
433
|
+
}
|
|
434
|
+
export function workflowCandidateSignature(input) {
|
|
435
|
+
const scope = validateWorkflowScope(input.scope);
|
|
436
|
+
const evidence = validateWorkflowTraceEvidence(input.evidence);
|
|
437
|
+
return growthObjectDigest({
|
|
438
|
+
contract: 'assistant-growth-workflow-signature/v2',
|
|
439
|
+
scope,
|
|
440
|
+
ownerBindingId: evidence.ownerBindingId,
|
|
441
|
+
template: evidence.template,
|
|
442
|
+
steps: evidence.steps,
|
|
443
|
+
});
|
|
444
|
+
}
|
|
445
|
+
export function validateWorkflowTraceProjectionReceipt(value, expected) {
|
|
446
|
+
if (!isGrowthRecord(value))
|
|
447
|
+
invalid('workflow trace projection receipt must be an object');
|
|
448
|
+
assertExactGrowthKeys(value, [
|
|
449
|
+
'contractVersion', 'source', 'scope', 'subjectRef', 'version', 'disposition',
|
|
450
|
+
'digest', 'outcome', 'candidateIds',
|
|
451
|
+
], 'workflow trace projection receipt');
|
|
452
|
+
if (value['contractVersion'] !== ASSISTANT_GROWTH_CONTRACT_VERSION
|
|
453
|
+
|| (value['outcome'] !== 'applied' && value['outcome'] !== 'replayed')
|
|
454
|
+
|| !Array.isArray(value['candidateIds']) || value['candidateIds'].length > 1_000) {
|
|
455
|
+
invalid('workflow trace projection receipt tuple is invalid');
|
|
456
|
+
}
|
|
457
|
+
const candidateIds = value['candidateIds'].map(item => canonicalText(item, 'workflow candidate id', 200, { identifier: identifierPattern }));
|
|
458
|
+
const sorted = [...new Set(candidateIds)].sort();
|
|
459
|
+
if (sorted.length !== candidateIds.length
|
|
460
|
+
|| sorted.some((entry, index) => entry !== candidateIds[index])) {
|
|
461
|
+
invalid('workflow candidate ids must be unique and sorted');
|
|
462
|
+
}
|
|
463
|
+
const receipt = Object.freeze({
|
|
464
|
+
contractVersion: ASSISTANT_GROWTH_CONTRACT_VERSION,
|
|
465
|
+
source: validateWorkflowTraceSourceAttestation(value['source']),
|
|
466
|
+
scope: validateWorkflowScope(value['scope']),
|
|
467
|
+
subjectRef: exactGrowthDigest(value['subjectRef'], 'subjectRef'),
|
|
468
|
+
version: Number.isSafeInteger(value['version']) && value['version'] >= 1
|
|
469
|
+
? value['version']
|
|
470
|
+
: invalid('workflow trace receipt version is invalid'),
|
|
471
|
+
disposition: value['disposition'] === 'upsert' || value['disposition'] === 'retract'
|
|
472
|
+
? value['disposition']
|
|
473
|
+
: invalid('workflow trace receipt disposition is invalid'),
|
|
474
|
+
digest: exactGrowthDigest(value['digest'], 'workflow trace receipt digest'),
|
|
475
|
+
outcome: value['outcome'],
|
|
476
|
+
candidateIds: Object.freeze(sorted),
|
|
477
|
+
});
|
|
478
|
+
if (expected !== undefined) {
|
|
479
|
+
const revision = validateWorkflowTraceRevision(expected);
|
|
480
|
+
if (canonicalGrowthJson({
|
|
481
|
+
source: receipt.source,
|
|
482
|
+
scope: receipt.scope,
|
|
483
|
+
subjectRef: receipt.subjectRef,
|
|
484
|
+
version: receipt.version,
|
|
485
|
+
disposition: receipt.disposition,
|
|
486
|
+
digest: receipt.digest,
|
|
487
|
+
}) !== canonicalGrowthJson({
|
|
488
|
+
source: revision.source,
|
|
489
|
+
scope: revision.scope,
|
|
490
|
+
subjectRef: revision.subjectRef,
|
|
491
|
+
version: revision.version,
|
|
492
|
+
disposition: revision.disposition,
|
|
493
|
+
digest: revision.digest,
|
|
494
|
+
})) {
|
|
495
|
+
throw new AssistantGrowthContractError('receipt-mismatch', 'workflow trace receipt changed revision identity');
|
|
496
|
+
}
|
|
497
|
+
}
|
|
498
|
+
return receipt;
|
|
499
|
+
}
|
|
500
|
+
export function validateGrowthWorkflowTraceSourceRegistration(value) {
|
|
501
|
+
if (!isGrowthRecord(value))
|
|
502
|
+
invalid('workflow trace registration must be an object');
|
|
503
|
+
assertExactGrowthKeys(value, ['contractVersion', 'sourceId', 'generation', 'authorityDigest', 'dispose'], 'workflow trace registration');
|
|
504
|
+
if (value['contractVersion'] !== ASSISTANT_GROWTH_CONTRACT_VERSION
|
|
505
|
+
|| typeof value['dispose'] !== 'function')
|
|
506
|
+
invalid('workflow trace registration tuple is invalid');
|
|
507
|
+
const source = validateWorkflowTraceSourceAttestation({
|
|
508
|
+
sourceId: value['sourceId'],
|
|
509
|
+
generation: value['generation'],
|
|
510
|
+
authorityDigest: value['authorityDigest'],
|
|
511
|
+
});
|
|
512
|
+
return Object.freeze({
|
|
513
|
+
contractVersion: ASSISTANT_GROWTH_CONTRACT_VERSION,
|
|
514
|
+
...source,
|
|
515
|
+
dispose: value['dispose'],
|
|
516
|
+
});
|
|
517
|
+
}
|
|
518
|
+
//# sourceMappingURL=canonical.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"canonical.js","sourceRoot":"","sources":["../src/canonical.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,aAAa,CAAA;AACxC,OAAO,EAAE,UAAU,EAAE,OAAO,EAAE,MAAM,WAAW,CAAA;AAC/C,OAAO,EACL,iCAAiC,EACjC,gCAAgC,EAChC,0BAA0B,EAC1B,uBAAuB,EACvB,wBAAwB,GAYzB,MAAM,YAAY,CAAA;AAInB,MAAM,OAAO,4BAA6B,SAAQ,KAAK;IAChC;IAArB,YAAqB,IAAsC,EAAE,OAAe;QAC1E,KAAK,CAAC,OAAO,CAAC,CAAA;QADK,SAAI,GAAJ,IAAI,CAAkC;QAEzD,IAAI,CAAC,IAAI,GAAG,8BAA8B,CAAA;IAC5C,CAAC;CACF;AAED,MAAM,aAAa,GAAG,iBAAiB,CAAA;AACvC,MAAM,iBAAiB,GAAG,uCAAuC,CAAA;AACjE,MAAM,aAAa,GAAG,sCAAsC,CAAA;AAC5D,MAAM,iCAAiC,GAAG,uCAAuC,CAAA;AAEjF,SAAS,OAAO,CAAC,OAAe;IAC9B,MAAM,IAAI,4BAA4B,CAAC,eAAe,EAAE,OAAO,CAAC,CAAA;AAClE,CAAC;AAED,MAAM,UAAU,cAAc,CAAC,KAAc;IAC3C,OAAO,KAAK,KAAK,IAAI,IAAI,OAAO,KAAK,KAAK,QAAQ,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC;WACtE,CAAC,MAAM,CAAC,cAAc,CAAC,KAAK,CAAC,KAAK,MAAM,CAAC,SAAS,IAAI,MAAM,CAAC,cAAc,CAAC,KAAK,CAAC,KAAK,IAAI,CAAC,CAAA;AACnG,CAAC;AAED,MAAM,UAAU,qBAAqB,CACnC,KAAwC,EACxC,QAA2B,EAC3B,KAAa;IAEb,MAAM,MAAM,GAAG,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,IAAI,EAAE,CAAA;IACxC,MAAM,IAAI,GAAG,CAAC,GAAG,QAAQ,CAAC,CAAC,IAAI,EAAE,CAAA;IACjC,IAAI,MAAM,CAAC,MAAM,KAAK,IAAI,CAAC,MAAM,IAAI,MAAM,CAAC,IAAI,CAAC,CAAC,GAAG,EAAE,KAAK,EAAE,EAAE,CAAC,GAAG,KAAK,IAAI,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC;QACtF,OAAO,CAAC,GAAG,KAAK,uBAAuB,CAAC,CAAA;IAC1C,CAAC;AACH,CAAC;AAED,SAAS,aAAa,CACpB,KAAc,EACd,KAAa,EACb,QAAgB,EAChB,UAAwD,EAAE;IAE1D,IAAI,OAAO,KAAK,KAAK,QAAQ;QAAE,OAAO,CAAC,GAAG,KAAK,mBAAmB,CAAC,CAAA;IACnE,MAAM,UAAU,GAAG,KAAK,CAAC,SAAS,CAAC,KAAK,CAAC,CAAC,IAAI,EAAE,CAAA;IAChD,IAAI,UAAU,KAAK,KAAK,IAAI,UAAU,KAAK,EAAE,IAAI,MAAM,CAAC,UAAU,CAAC,UAAU,EAAE,MAAM,CAAC,GAAG,QAAQ,EAAE,CAAC;QAClG,OAAO,CAAC,GAAG,KAAK,gCAAgC,CAAC,CAAA;IACnD,CAAC;IACD,KAAK,MAAM,SAAS,IAAI,UAAU,EAAE,CAAC;QACnC,MAAM,IAAI,GAAG,SAAS,CAAC,WAAW,CAAC,CAAC,CAAE,CAAA;QACtC,IAAI,IAAI,KAAK,CAAC,IAAI,IAAI,KAAK,IAAI,IAAI,CAAC,CAAC,OAAO,CAAC,SAAS,IAAI,IAAI,IAAI,IAAI,CAAC,EAAE,CAAC;YACxE,OAAO,CAAC,GAAG,KAAK,+BAA+B,CAAC,CAAA;QAClD,CAAC;IACH,CAAC;IACD,IAAI,OAAO,CAAC,UAAU,KAAK,SAAS,IAAI,CAAC,OAAO,CAAC,UAAU,CAAC,IAAI,CAAC,UAAU,CAAC,EAAE,CAAC;QAC7E,OAAO,CAAC,GAAG,KAAK,gCAAgC,CAAC,CAAA;IACnD,CAAC;IACD,OAAO,UAAU,CAAA;AACnB,CAAC;AAED;;;;GAIG;AACH,MAAM,UAAU,2BAA2B,CAAC,KAAc;IACxD,MAAM,WAAW,GAAG,aAAa,CAAC,KAAK,EAAE,sBAAsB,EAAE,KAAK,CAAC,CAAA;IACvE,MAAM,UAAU,GAAG,WAAW,CAAC,KAAK,CAAC,GAAG,CAAC,CAAA;IACzC,IAAI,UAAU,CAAC,MAAM,KAAK,CAAC;QAAE,OAAO,CAAC,gDAAgD,CAAC,CAAA;IACtF,KAAK,MAAM,SAAS,IAAI,UAAU,EAAE,CAAC;QACnC,IAAI,OAAe,CAAA;QACnB,IAAI,CAAC;YACH,OAAO,GAAG,kBAAkB,CAAC,SAAS,CAAC,CAAA;QACzC,CAAC;QAAC,MAAM,CAAC;YACP,OAAO,CAAC,qDAAqD,CAAC,CAAA;QAChE,CAAC;QACD,IAAI,CAAC,iCAAiC,CAAC,IAAI,CAAC,OAAO,CAAC;eAC/C,kBAAkB,CAAC,OAAO,CAAC,KAAK,SAAS,EAAE,CAAC;YAC/C,OAAO,CAAC,uCAAuC,CAAC,CAAA;QAClD,CAAC;IACH,CAAC;IACD,OAAO,WAAW,CAAA;AACpB,CAAC;AAED,MAAM,UAAU,iBAAiB,CAAC,KAAc,EAAE,KAAK,GAAG,QAAQ;IAChE,IAAI,OAAO,KAAK,KAAK,QAAQ,IAAI,CAAC,aAAa,CAAC,IAAI,CAAC,KAAK,CAAC,EAAE,CAAC;QAC5D,OAAO,CAAC,GAAG,KAAK,qCAAqC,CAAC,CAAA;IACxD,CAAC;IACD,OAAO,KAAK,CAAA;AACd,CAAC;AAED,qEAAqE;AACrE,MAAM,UAAU,mBAAmB,CAAC,KAAc;IAChD,IAAI,KAAK,GAAG,CAAC,CAAA;IACb,MAAM,IAAI,GAAG,IAAI,GAAG,EAAU,CAAA;IAC9B,MAAM,KAAK,GAAG,CAAC,OAAgB,EAAE,KAAa,EAAU,EAAE;QACxD,KAAK,IAAI,CAAC,CAAA;QACV,IAAI,KAAK,GAAG,KAAK,IAAI,KAAK,GAAG,EAAE;YAAE,OAAO,CAAC,uCAAuC,CAAC,CAAA;QACjF,IAAI,OAAO,KAAK,IAAI;YAAE,OAAO,MAAM,CAAA;QACnC,IAAI,OAAO,OAAO,KAAK,QAAQ,IAAI,OAAO,OAAO,KAAK,SAAS;YAAE,OAAO,IAAI,CAAC,SAAS,CAAC,OAAO,CAAC,CAAA;QAC/F,IAAI,OAAO,OAAO,KAAK,QAAQ,EAAE,CAAC;YAChC,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,OAAO,CAAC;gBAAE,OAAO,CAAC,kCAAkC,CAAC,CAAA;YAC1E,OAAO,IAAI,CAAC,SAAS,CAAC,OAAO,CAAC,CAAA;QAChC,CAAC;QACD,IAAI,OAAO,OAAO,KAAK,QAAQ;YAAE,OAAO,CAAC,0CAA0C,CAAC,CAAA;QACpF,IAAI,IAAI,CAAC,GAAG,CAAC,OAAO,CAAC;YAAE,OAAO,CAAC,yCAAyC,CAAC,CAAA;QACzE,IAAI,CAAC,GAAG,CAAC,OAAO,CAAC,CAAA;QACjB,IAAI,CAAC;YACH,IAAI,KAAK,CAAC,OAAO,CAAC,OAAO,CAAC,EAAE,CAAC;gBAC3B,IAAI,MAAM,CAAC,cAAc,CAAC,OAAO,CAAC,KAAK,KAAK,CAAC,SAAS;oBAAE,OAAO,CAAC,iCAAiC,CAAC,CAAA;gBAClG,OAAO,IAAI,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,CAAC,KAAK,CAAC,IAAI,EAAE,KAAK,GAAG,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,GAAG,CAAA;YACrE,CAAC;YACD,IAAI,CAAC,cAAc,CAAC,OAAO,CAAC;gBAAE,OAAO,CAAC,kCAAkC,CAAC,CAAA;YACzE,MAAM,IAAI,GAAG,MAAM,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC,IAAI,EAAE,CAAA;YACxC,OAAO,IAAI,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,IAAI,KAAK,CAAC,OAAO,CAAC,GAAG,CAAC,EAAE,KAAK,GAAG,CAAC,CAAC,EAAE,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,GAAG,CAAA;QACrG,CAAC;gBAAS,CAAC;YACT,IAAI,CAAC,MAAM,CAAC,OAAO,CAAC,CAAA;QACtB,CAAC;IACH,CAAC,CAAA;IACD,OAAO,KAAK,CAAC,KAAK,EAAE,CAAC,CAAC,CAAA;AACxB,CAAC;AAED,MAAM,UAAU,YAAY,CAAC,KAA0B;IACrD,OAAO,UAAU,CAAC,QAAQ,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,CAAA;AACzD,CAAC;AAED,MAAM,UAAU,kBAAkB,CAAC,KAAc;IAC/C,OAAO,YAAY,CAAC,mBAAmB,CAAC,KAAK,CAAC,CAAC,CAAA;AACjD,CAAC;AAED;;;GAGG;AACH,MAAM,UAAU,2BAA2B,CAAC,KAAc;IACxD,IAAI,KAAK,GAAG,CAAC,CAAA;IACb,MAAM,MAAM,GAAG,IAAI,GAAG,EAAU,CAAA;IAChC,MAAM,KAAK,GAAG,CAAC,KAAc,EAAE,KAAa,EAAW,EAAE;QACvD,KAAK,IAAI,CAAC,CAAA;QACV,IAAI,KAAK,GAAG,KAAK,IAAI,KAAK,GAAG,EAAE;YAAE,OAAO,CAAC,wCAAwC,CAAC,CAAA;QAClF,IAAI,KAAK,KAAK,IAAI;YAAE,OAAO,MAAM,CAAA;QACjC,IAAI,OAAO,KAAK,KAAK,QAAQ;YAAE,OAAO,QAAQ,CAAA;QAC9C,IAAI,OAAO,KAAK,KAAK,SAAS;YAAE,OAAO,SAAS,CAAA;QAChD,IAAI,OAAO,KAAK,KAAK,QAAQ,EAAE,CAAC;YAC9B,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,KAAK,CAAC;gBAAE,OAAO,CAAC,qCAAqC,CAAC,CAAA;YAC3E,OAAO,MAAM,CAAC,SAAS,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,QAAQ,CAAA;QACvD,CAAC;QACD,IAAI,OAAO,KAAK,KAAK,QAAQ;YAAE,OAAO,CAAC,4CAA4C,CAAC,CAAA;QACpF,IAAI,MAAM,CAAC,GAAG,CAAC,KAAK,CAAC;YAAE,OAAO,CAAC,6CAA6C,CAAC,CAAA;QAC7E,MAAM,CAAC,GAAG,CAAC,KAAK,CAAC,CAAA;QACjB,IAAI,CAAC;YACH,IAAI,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,EAAE,CAAC;gBACzB,IAAI,MAAM,CAAC,cAAc,CAAC,KAAK,CAAC,KAAK,KAAK,CAAC,SAAS;oBAAE,OAAO,CAAC,oCAAoC,CAAC,CAAA;gBACnG,MAAM,OAAO,GAAG,CAAC,GAAG,IAAI,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,CAAC,mBAAmB,CAAC,KAAK,CAAC,IAAI,EAAE,KAAK,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,EAAE,CAAA;gBACnG,OAAO,EAAE,YAAY,EAAE,OAAO,CAAC,GAAG,CAAC,MAAM,CAAC,EAAE,CAAC,IAAI,CAAC,KAAK,CAAC,MAAM,CAAY,CAAC,EAAE,CAAA;YAC/E,CAAC;YACD,IAAI,CAAC,cAAc,CAAC,KAAK,CAAC;gBAAE,OAAO,CAAC,4CAA4C,CAAC,CAAA;YACjF,MAAM,IAAI,GAAG,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,IAAI,EAAE,CAAA;YACtC,IAAI,IAAI,CAAC,MAAM,GAAG,GAAG;gBAAE,OAAO,CAAC,sCAAsC,CAAC,CAAA;YACtE,KAAK,MAAM,GAAG,IAAI,IAAI;gBAAE,aAAa,CAAC,GAAG,EAAE,yBAAyB,EAAE,GAAG,CAAC,CAAA;YAC1E,OAAO,MAAM,CAAC,WAAW,CAAC,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC,GAAG,EAAE,KAAK,CAAC,KAAK,CAAC,GAAG,CAAC,EAAE,KAAK,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CAAA;QACjF,CAAC;gBAAS,CAAC;YACT,MAAM,CAAC,MAAM,CAAC,KAAK,CAAC,CAAA;QACtB,CAAC;IACH,CAAC,CAAA;IACD,OAAO,kBAAkB,CAAC,EAAE,QAAQ,EAAE,gCAAgC,EAAE,KAAK,EAAE,KAAK,CAAC,KAAK,EAAE,CAAC,CAAC,EAAE,CAAC,CAAA;AACnG,CAAC;AAED,MAAM,UAAU,qBAAqB,CAAC,KAAc;IAClD,IAAI,CAAC,cAAc,CAAC,KAAK,CAAC;QAAE,OAAO,CAAC,kCAAkC,CAAC,CAAA;IACvE,qBAAqB,CAAC,KAAK,EAAE,CAAC,WAAW,EAAE,QAAQ,CAAC,EAAE,gBAAgB,CAAC,CAAA;IACvE,MAAM,SAAS,GAAG,aAAa,CAAC,KAAK,CAAC,WAAW,CAAC,EAAE,oBAAoB,EAAE,KAAK,CAAC,CAAA;IAChF,MAAM,MAAM,GAAG,aAAa,CAAC,KAAK,CAAC,QAAQ,CAAC,EAAE,iBAAiB,EAAE,GAAG,EAAE,EAAE,UAAU,EAAE,aAAa,EAAE,CAAC,CAAA;IACpG,IAAI,CAAC,UAAU,CAAC,SAAS,CAAC,IAAI,OAAO,CAAC,SAAS,CAAC,KAAK,SAAS,EAAE,CAAC;QAC/D,OAAO,CAAC,wDAAwD,CAAC,CAAA;IACnE,CAAC;IACD,OAAO,MAAM,CAAC,MAAM,CAAC,EAAE,SAAS,EAAE,MAAM,EAAE,CAAC,CAAA;AAC7C,CAAC;AAED,MAAM,UAAU,gBAAgB,CAAC,KAAc;IAC7C,MAAM,KAAK,GAAG,qBAAqB,CAAC,KAAK,CAAC,CAAA;IAC1C,OAAO,kBAAkB,CAAC,CAAC,2BAA2B,EAAE,KAAK,CAAC,SAAS,EAAE,KAAK,CAAC,MAAM,CAAC,CAAC,CAAA;AACzF,CAAC;AAED,SAAS,SAAS,CAAC,KAAc;IAC/B,OAAO,aAAa,CAAC,KAAK,EAAE,qBAAqB,EAAE,GAAG,EAAE,EAAE,UAAU,EAAE,iBAAiB,EAAE,CAAC,CAAA;AAC5F,CAAC;AAED,MAAM,UAAU,+BAA+B,CAAC,KAAc;IAC5D,IAAI,CAAC,cAAc,CAAC,KAAK,CAAC;QAAE,OAAO,CAAC,iCAAiC,CAAC,CAAA;IACtE,qBAAqB,CAAC,KAAK,EAAE,CAAC,WAAW,EAAE,sBAAsB,CAAC,EAAE,eAAe,CAAC,CAAA;IACpF,OAAO,MAAM,CAAC,MAAM,CAAC;QACnB,SAAS,EAAE,SAAS,CAAC,KAAK,CAAC,WAAW,CAAC,CAAC;QACxC,oBAAoB,EAAE,iBAAiB,CAAC,KAAK,CAAC,sBAAsB,CAAC,EAAE,sBAAsB,CAAC;KAC/F,CAAC,CAAA;AACJ,CAAC;AAED,MAAM,UAAU,qBAAqB,CAAC,KAAc;IAClD,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,IAAI,KAAK,CAAC,MAAM,GAAG,CAAC,IAAI,KAAK,CAAC,MAAM,GAAG,EAAE,EAAE,CAAC;QACnE,OAAO,CAAC,6CAA6C,CAAC,CAAA;IACxD,CAAC;IACD,OAAO,MAAM,CAAC,MAAM,CAAC,KAAK,CAAC,GAAG,CAAC,+BAA+B,CAAC,CAAC,CAAA;AAClE,CAAC;AAED,MAAM,UAAU,0CAA0C,CACxD,KAAc;IAEd,IAAI,CAAC,cAAc,CAAC,KAAK,CAAC;QAAE,OAAO,CAAC,gDAAgD,CAAC,CAAA;IACrF,IAAI,KAAK,CAAC,MAAM,CAAC,KAAK,gCAAgC,EAAE,CAAC;QACvD,qBAAqB,CACnB,KAAK,EACL,CAAC,MAAM,EAAE,QAAQ,EAAE,eAAe,EAAE,mBAAmB,CAAC,EACxD,8BAA8B,CAC/B,CAAA;QACD,IAAI,KAAK,CAAC,QAAQ,CAAC,KAAK,iCAAiC,EAAE,CAAC;YAC1D,OAAO,CAAC,iDAAiD,CAAC,CAAA;QAC5D,CAAC;QACD,OAAO,MAAM,CAAC,MAAM,CAAC;YACnB,IAAI,EAAE,gCAAgC;YACtC,MAAM,EAAE,iCAAiC;YACzC,aAAa,EAAE,aAAa,CAAC,KAAK,CAAC,eAAe,CAAC,EAAE,wBAAwB,EAAE,GAAG,EAAE;gBAClF,UAAU,EAAE,iBAAiB;aAC9B,CAAC;YACF,iBAAiB,EAAE,iBAAiB,CAAC,KAAK,CAAC,mBAAmB,CAAC,EAAE,4BAA4B,CAAC;SAC/F,CAAC,CAAA;IACJ,CAAC;IACD,IAAI,KAAK,CAAC,MAAM,CAAC,KAAK,gBAAgB,EAAE,CAAC;QACvC,qBAAqB,CACnB,KAAK,EACL,CAAC,MAAM,EAAE,YAAY,EAAE,eAAe,EAAE,mBAAmB,CAAC,EAC5D,8BAA8B,CAC/B,CAAA;QACD,IAAI,KAAK,CAAC,YAAY,CAAC,KAAK,2BAA2B,EAAE,CAAC;YACxD,OAAO,CAAC,8CAA8C,CAAC,CAAA;QACzD,CAAC;QACD,OAAO,MAAM,CAAC,MAAM,CAAC;YACnB,IAAI,EAAE,gBAAgB;YACtB,UAAU,EAAE,2BAA2B;YACvC,aAAa,EAAE,aAAa,CAAC,KAAK,CAAC,eAAe,CAAC,EAAE,wBAAwB,EAAE,GAAG,EAAE;gBAClF,UAAU,EAAE,iBAAiB;aAC9B,CAAC;YACF,iBAAiB,EAAE,iBAAiB,CAAC,KAAK,CAAC,mBAAmB,CAAC,EAAE,4BAA4B,CAAC;SAC/F,CAAC,CAAA;IACJ,CAAC;IACD,OAAO,CAAC,8CAA8C,CAAC,CAAA;AACzD,CAAC;AAED,MAAM,UAAU,kCAAkC,CAAC,KAAc;IAC/D,IAAI,CAAC,cAAc,CAAC,KAAK,CAAC;QAAE,OAAO,CAAC,+CAA+C,CAAC,CAAA;IACpF,qBAAqB,CACnB,KAAK,EACL,CAAC,aAAa,EAAE,gBAAgB,EAAE,oBAAoB,CAAC,EACvD,6BAA6B,CAC9B,CAAA;IACD,OAAO,MAAM,CAAC,MAAM,CAAC;QACnB,WAAW,EAAE,aAAa,CAAC,KAAK,CAAC,aAAa,CAAC,EAAE,aAAa,EAAE,GAAG,EAAE,EAAE,UAAU,EAAE,iBAAiB,EAAE,CAAC;QACvG,cAAc,EAAE,iBAAiB,CAAC,KAAK,CAAC,gBAAgB,CAAC,EAAE,gBAAgB,CAAC;QAC5E,kBAAkB,EAAE,0CAA0C,CAAC,KAAK,CAAC,oBAAoB,CAAC,CAAC;KAC5F,CAAC,CAAA;AACJ,CAAC;AAED,SAAS,iBAAiB,CAAC,KAAc;IACvC,MAAM,QAAQ,GAAG,aAAa,CAAC,KAAK,EAAE,mBAAmB,EAAE,GAAG,CAAC,CAAA;IAC/D,IAAI,CAAC;QACH,IAAI,IAAI,IAAI,CAAC,cAAc,CAAC,IAAI,EAAE,EAAE,QAAQ,EAAE,QAAQ,EAAE,CAAC,CAAC,eAAe,EAAE,CAAC,QAAQ,KAAK,QAAQ,EAAE,CAAC;YAClG,OAAO,CAAC,kDAAkD,CAAC,CAAA;QAC7D,CAAC;IACH,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,CAAC,8BAA8B,CAAC,CAAA;IACzC,CAAC;IACD,OAAO,QAAQ,CAAA;AACjB,CAAC;AAED,MAAM,UAAU,yCAAyC,CACvD,KAAc;IAEd,IAAI,CAAC,cAAc,CAAC,KAAK,CAAC;QAAE,OAAO,CAAC,6CAA6C,CAAC,CAAA;IAClF,qBAAqB,CAAC,KAAK,EAAE;QAC3B,OAAO,EAAE,gBAAgB,EAAE,aAAa,EAAE,MAAM,EAAE,QAAQ,EAAE,UAAU,EAAE,WAAW;QACnF,gBAAgB,EAAE,mBAAmB;KACtC,EAAE,2BAA2B,CAAC,CAAA;IAC/B,IAAI,CAAC,cAAc,CAAC,KAAK,CAAC,UAAU,CAAC,CAAC;QAAE,OAAO,CAAC,qCAAqC,CAAC,CAAA;IACtF,qBAAqB,CAAC,KAAK,CAAC,UAAU,CAAC,EAAE,CAAC,MAAM,EAAE,YAAY,EAAE,UAAU,CAAC,EAAE,mBAAmB,CAAC,CAAA;IACjG,IAAI,KAAK,CAAC,UAAU,CAAC,CAAC,MAAM,CAAC,KAAK,MAAM;QAAE,OAAO,CAAC,mCAAmC,CAAC,CAAA;IACtF,IAAI,CAAC,MAAM,CAAC,aAAa,CAAC,KAAK,CAAC,WAAW,CAAC,CAAC;WACvC,KAAK,CAAC,WAAW,CAAY,GAAG,KAAK,IAAK,KAAK,CAAC,WAAW,CAAY,GAAG,UAAU,EAAE,CAAC;QAC3F,OAAO,CAAC,6BAA6B,CAAC,CAAA;IACxC,CAAC;IACD,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,gBAAgB,CAAC,CAAC;WACtC,KAAK,CAAC,gBAAgB,CAAC,CAAC,MAAM,GAAG,CAAC;WAClC,KAAK,CAAC,gBAAgB,CAAC,CAAC,MAAM,GAAG,EAAE;QAAE,OAAO,CAAC,kCAAkC,CAAC,CAAA;IACrF,MAAM,cAAc,GAAG,KAAK,CAAC,gBAAgB,CAAC,CAAC,GAAG,CAAC,SAAS,CAAC,CAAA;IAC7D,MAAM,MAAM,GAAG,CAAC,GAAG,IAAI,GAAG,CAAC,cAAc,CAAC,CAAC,CAAC,IAAI,EAAE,CAAA;IAClD,IAAI,MAAM,CAAC,MAAM,KAAK,cAAc,CAAC,MAAM;WACtC,MAAM,CAAC,IAAI,CAAC,CAAC,KAAK,EAAE,KAAK,EAAE,EAAE,CAAC,KAAK,KAAK,cAAc,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC;QACpE,OAAO,CAAC,iDAAiD,CAAC,CAAA;IAC5D,CAAC;IACD,OAAO,MAAM,CAAC,MAAM,CAAC;QACnB,KAAK,EAAE,qBAAqB,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC;QAC5C,cAAc,EAAE,aAAa,CAAC,KAAK,CAAC,gBAAgB,CAAC,EAAE,kBAAkB,EAAE,GAAG,EAAE;YAC9E,UAAU,EAAE,iBAAiB;SAC9B,CAAC;QACF,WAAW,EAAE,2BAA2B,CAAC,KAAK,CAAC,aAAa,CAAC,CAAC;QAC9D,IAAI,EAAE,aAAa,CAAC,KAAK,CAAC,MAAM,CAAC,EAAE,eAAe,EAAE,GAAG,CAAC;QACxD,MAAM,EAAE,aAAa,CAAC,KAAK,CAAC,QAAQ,CAAC,EAAE,iBAAiB,EAAE,KAAK,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC;QACrF,QAAQ,EAAE,MAAM,CAAC,MAAM,CAAC;YACtB,IAAI,EAAE,MAAM;YACZ,UAAU,EAAE,aAAa,CAAC,KAAK,CAAC,UAAU,CAAC,CAAC,YAAY,CAAC,EAAE,iBAAiB,EAAE,GAAG,CAAC;YAClF,QAAQ,EAAE,iBAAiB,CAAC,KAAK,CAAC,UAAU,CAAC,CAAC,UAAU,CAAC,CAAC;SAC3D,CAAC;QACF,SAAS,EAAE,KAAK,CAAC,WAAW,CAAW;QACvC,cAAc,EAAE,MAAM,CAAC,MAAM,CAAC,MAAM,CAAC;QACrC,iBAAiB,EAAE,aAAa,CAAC,KAAK,CAAC,mBAAmB,CAAC,EAAE,qBAAqB,EAAE,GAAG,EAAE;YACvF,UAAU,EAAE,iBAAiB;SAC9B,CAAC;KACH,CAAC,CAAA;AACJ,CAAC;AAED,MAAM,UAAU,uCAAuC,CAAC,KAAc;IACpE,MAAM,OAAO,GAAG,yCAAyC,CAAC,KAAK,CAAC,CAAA;IAChE,OAAO,kBAAkB,CAAC,EAAE,QAAQ,EAAE,0BAA0B,EAAE,OAAO,EAAE,CAAC,CAAA;AAC9E,CAAC;AAED,MAAM,UAAU,0CAA0C,CACxD,KAAc;IAEd,IAAI,CAAC,cAAc,CAAC,KAAK,CAAC;QAAE,OAAO,CAAC,8CAA8C,CAAC,CAAA;IACnF,qBAAqB,CAAC,KAAK,EAAE;QAC3B,iBAAiB,EAAE,UAAU,EAAE,OAAO,EAAE,gBAAgB,EAAE,aAAa,EAAE,MAAM,EAAE,QAAQ,EAAE,UAAU;QACrG,WAAW,EAAE,gBAAgB,EAAE,mBAAmB;KACnD,EAAE,4BAA4B,CAAC,CAAA;IAChC,IAAI,KAAK,CAAC,iBAAiB,CAAC,KAAK,iCAAiC,EAAE,CAAC;QACnE,OAAO,CAAC,wDAAwD,CAAC,CAAA;IACnE,CAAC;IACD,MAAM,QAAQ,GAAG,kCAAkC,CAAC,KAAK,CAAC,UAAU,CAAC,CAAC,CAAA;IACtE,MAAM,OAAO,GAAG,yCAAyC,CAAC;QACxD,KAAK,EAAE,KAAK,CAAC,OAAO,CAAC;QACrB,cAAc,EAAE,KAAK,CAAC,gBAAgB,CAAC;QACvC,WAAW,EAAE,KAAK,CAAC,aAAa,CAAC;QACjC,IAAI,EAAE,KAAK,CAAC,MAAM,CAAC;QACnB,MAAM,EAAE,KAAK,CAAC,QAAQ,CAAC;QACvB,QAAQ,EAAE,KAAK,CAAC,UAAU,CAAC;QAC3B,SAAS,EAAE,KAAK,CAAC,WAAW,CAAC;QAC7B,cAAc,EAAE,KAAK,CAAC,gBAAgB,CAAC;QACvC,iBAAiB,EAAE,KAAK,CAAC,mBAAmB,CAAC;KAC9C,CAAC,CAAA;IACF,IAAI,uCAAuC,CAAC,OAAO,CAAC,KAAK,QAAQ,CAAC,cAAc,EAAE,CAAC;QACjF,MAAM,IAAI,4BAA4B,CAAC,kBAAkB,EAAE,4CAA4C,CAAC,CAAA;IAC1G,CAAC;IACD,OAAO,MAAM,CAAC,MAAM,CAAC;QACnB,eAAe,EAAE,iCAAiC;QAClD,QAAQ;QACR,GAAG,OAAO;KACX,CAAC,CAAA;AACJ,CAAC;AAED,MAAM,UAAU,6BAA6B,CAAC,KAAc;IAC1D,IAAI,CAAC,cAAc,CAAC,KAAK,CAAC;QAAE,OAAO,CAAC,2CAA2C,CAAC,CAAA;IAChF,MAAM,QAAQ,GAAG;QACf,YAAY,EAAE,QAAQ,EAAE,iBAAiB,EAAE,gBAAgB,EAAE,SAAS,EAAE,UAAU,EAAE,OAAO;QAC3F,GAAG,CAAC,KAAK,CAAC,oBAAoB,CAAC,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,oBAAoB,CAAC,CAAC;KAC7E,CAAA;IACD,qBAAqB,CAAC,KAAK,EAAE,QAAQ,EAAE,yBAAyB,CAAC,CAAA;IACjE,IAAI,CAAC,MAAM,CAAC,aAAa,CAAC,KAAK,CAAC,YAAY,CAAC,CAAC,IAAK,KAAK,CAAC,YAAY,CAAY,GAAG,CAAC;WAChF,CAAC,KAAK,CAAC,QAAQ,CAAC,KAAK,gBAAgB,IAAI,KAAK,CAAC,QAAQ,CAAC,KAAK,qBAAqB,CAAC;WACnF,CAAC,KAAK,CAAC,iBAAiB,CAAC,KAAK,UAAU,IAAI,KAAK,CAAC,iBAAiB,CAAC,KAAK,SAAS,CAAC,EAAE,CAAC;QACzF,OAAO,CAAC,0CAA0C,CAAC,CAAA;IACrD,CAAC;IACD,MAAM,QAAQ,GAAG,kCAAkC,CAAC,KAAK,CAAC,UAAU,CAAC,CAAC,CAAA;IACtE,MAAM,kBAAkB,GAAG,KAAK,CAAC,oBAAoB,CAAC,KAAK,SAAS;QAClE,CAAC,CAAC,SAAS;QACX,CAAC,CAAC,iBAAiB,CAAC,KAAK,CAAC,oBAAoB,CAAC,EAAE,sBAAsB,CAAC,CAAA;IAC1E,IAAI,KAAK,CAAC,QAAQ,CAAC,KAAK,qBAAqB;WACxC,CAAC,KAAK,CAAC,iBAAiB,CAAC,KAAK,UAAU,IAAI,kBAAkB,KAAK,SAAS;eAC1E,QAAQ,CAAC,kBAAkB,CAAC,IAAI,KAAK,gCAAgC,CAAC,EAAE,CAAC;QAC9E,OAAO,CAAC,kGAAkG,CAAC,CAAA;IAC7G,CAAC;IACD,OAAO,MAAM,CAAC,MAAM,CAAC;QACnB,UAAU,EAAE,KAAK,CAAC,YAAY,CAAW;QACzC,MAAM,EAAE,KAAK,CAAC,QAAQ,CAAC;QACvB,eAAe,EAAE,KAAK,CAAC,iBAAiB,CAAC;QACzC,cAAc,EAAE,aAAa,CAAC,KAAK,CAAC,gBAAgB,CAAC,EAAE,kBAAkB,EAAE,GAAG,EAAE;YAC9E,UAAU,EAAE,iBAAiB;SAC9B,CAAC;QACF,OAAO,EAAE,iBAAiB,CAAC,KAAK,CAAC,SAAS,CAAC,EAAE,SAAS,CAAC;QACvD,GAAG,CAAC,kBAAkB,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,kBAAkB,EAAE,CAAC;QACnE,QAAQ;QACR,KAAK,EAAE,qBAAqB,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC;KAC7C,CAAC,CAAA;AACJ,CAAC;AAED,MAAM,UAAU,sCAAsC,CACpD,KAAc;IAEd,IAAI,CAAC,cAAc,CAAC,KAAK,CAAC;QAAE,OAAO,CAAC,yCAAyC,CAAC,CAAA;IAC9E,qBAAqB,CAAC,KAAK,EAAE,CAAC,UAAU,EAAE,YAAY,EAAE,iBAAiB,CAAC,EAAE,uBAAuB,CAAC,CAAA;IACpG,IAAI,KAAK,CAAC,UAAU,CAAC,KAAK,wBAAwB;WAC7C,CAAC,MAAM,CAAC,aAAa,CAAC,KAAK,CAAC,YAAY,CAAC,CAAC,IAAK,KAAK,CAAC,YAAY,CAAY,GAAG,CAAC,EAAE,CAAC;QACvF,OAAO,CAAC,wCAAwC,CAAC,CAAA;IACnD,CAAC;IACD,OAAO,MAAM,CAAC,MAAM,CAAC;QACnB,QAAQ,EAAE,wBAAwB;QAClC,UAAU,EAAE,KAAK,CAAC,YAAY,CAAW;QACzC,eAAe,EAAE,iBAAiB,CAAC,KAAK,CAAC,iBAAiB,CAAC,EAAE,yBAAyB,CAAC;KACxF,CAAC,CAAA;AACJ,CAAC;AAED,SAAS,qBAAqB,CAAC,KAAc;IAC3C,IAAI,CAAC,cAAc,CAAC,KAAK,CAAC;QAAE,OAAO,CAAC,2CAA2C,CAAC,CAAA;IAChF,MAAM,QAAQ,GAAG;QACf,QAAQ,EAAE,OAAO,EAAE,YAAY,EAAE,SAAS,EAAE,aAAa;QACzD,GAAG,CAAC,KAAK,CAAC,UAAU,CAAC,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,UAAU,CAAC,CAAC;KACzD,CAAA;IACD,qBAAqB,CAAC,KAAK,EAAE,QAAQ,EAAE,iCAAiC,CAAC,CAAA;IACzE,IAAI,CAAC,MAAM,CAAC,aAAa,CAAC,KAAK,CAAC,SAAS,CAAC,CAAC,IAAK,KAAK,CAAC,SAAS,CAAY,GAAG,CAAC;WAC1E,CAAC,KAAK,CAAC,aAAa,CAAC,KAAK,QAAQ,IAAI,KAAK,CAAC,aAAa,CAAC,KAAK,SAAS,CAAC;WACzE,CAAC,KAAK,CAAC,aAAa,CAAC,KAAK,QAAQ,CAAC,KAAK,CAAC,KAAK,CAAC,UAAU,CAAC,KAAK,SAAS,CAAC,EAAE,CAAC;QAC/E,OAAO,CAAC,0CAA0C,CAAC,CAAA;IACrD,CAAC;IACD,OAAO,MAAM,CAAC,MAAM,CAAC;QACnB,MAAM,EAAE,sCAAsC,CAAC,KAAK,CAAC,QAAQ,CAAC,CAAC;QAC/D,KAAK,EAAE,qBAAqB,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC;QAC5C,UAAU,EAAE,iBAAiB,CAAC,KAAK,CAAC,YAAY,CAAC,EAAE,YAAY,CAAC;QAChE,OAAO,EAAE,KAAK,CAAC,SAAS,CAAW;QACnC,WAAW,EAAE,KAAK,CAAC,aAAa,CAAC;QACjC,GAAG,CAAC,KAAK,CAAC,UAAU,CAAC,KAAK,SAAS;YACjC,CAAC,CAAC,EAAE;YACJ,CAAC,CAAC,EAAE,QAAQ,EAAE,6BAA6B,CAAC,KAAK,CAAC,UAAU,CAAC,CAAC,EAAE,CAAC;KACpE,CAAC,CAAA;AACJ,CAAC;AAED,MAAM,UAAU,2BAA2B,CAAC,KAA4C;IACtF,MAAM,QAAQ,GAAG,qBAAqB,CAAC,KAAK,CAAC,CAAA;IAC7C,OAAO,kBAAkB,CAAC,EAAE,QAAQ,EAAE,uBAAuB,EAAE,GAAG,QAAQ,EAAE,CAAC,CAAA;AAC/E,CAAC;AAED,MAAM,UAAU,6BAA6B,CAAC,KAAc;IAC1D,IAAI,CAAC,cAAc,CAAC,KAAK,CAAC;QAAE,OAAO,CAAC,2CAA2C,CAAC,CAAA;IAChF,MAAM,QAAQ,GAAG;QACf,QAAQ,EAAE,OAAO,EAAE,YAAY,EAAE,SAAS,EAAE,aAAa,EAAE,QAAQ;QACnE,GAAG,CAAC,KAAK,CAAC,UAAU,CAAC,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,UAAU,CAAC,CAAC;KACzD,CAAA;IACD,qBAAqB,CAAC,KAAK,EAAE,QAAQ,EAAE,yBAAyB,CAAC,CAAA;IACjE,MAAM,MAAM,GAAG,iBAAiB,CAAC,KAAK,CAAC,QAAQ,CAAC,EAAE,uBAAuB,CAAC,CAAA;IAC1E,MAAM,OAAO,GAAG,qBAAqB,CAAC,MAAM,CAAC,WAAW,CACtD,MAAM,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,GAAG,CAAC,EAAE,EAAE,CAAC,GAAG,KAAK,QAAQ,CAAC,CAC1D,CAAC,CAAA;IACF,IAAI,2BAA2B,CAAC,OAAO,CAAC,KAAK,MAAM,EAAE,CAAC;QACpD,MAAM,IAAI,4BAA4B,CAAC,kBAAkB,EAAE,kDAAkD,CAAC,CAAA;IAChH,CAAC;IACD,OAAO,MAAM,CAAC,MAAM,CAAC,EAAE,GAAG,OAAO,EAAE,MAAM,EAAE,CAAC,CAAA;AAC9C,CAAC;AAED,MAAM,UAAU,0BAA0B,CAAC,KAGzC;IACA,MAAM,KAAK,GAAG,qBAAqB,CAAC,KAAK,CAAC,KAAK,CAAC,CAAA;IAChD,MAAM,QAAQ,GAAG,6BAA6B,CAAC,KAAK,CAAC,QAAQ,CAAC,CAAA;IAC9D,OAAO,kBAAkB,CAAC;QACxB,QAAQ,EAAE,wCAAwC;QAClD,KAAK;QACL,cAAc,EAAE,QAAQ,CAAC,cAAc;QACvC,QAAQ,EAAE,QAAQ,CAAC,QAAQ;QAC3B,KAAK,EAAE,QAAQ,CAAC,KAAK;KACtB,CAAC,CAAA;AACJ,CAAC;AAED,MAAM,UAAU,sCAAsC,CACpD,KAAc,EACd,QAA0C;IAE1C,IAAI,CAAC,cAAc,CAAC,KAAK,CAAC;QAAE,OAAO,CAAC,qDAAqD,CAAC,CAAA;IAC1F,qBAAqB,CAAC,KAAK,EAAE;QAC3B,iBAAiB,EAAE,QAAQ,EAAE,OAAO,EAAE,YAAY,EAAE,SAAS,EAAE,aAAa;QAC5E,QAAQ,EAAE,SAAS,EAAE,cAAc;KACpC,EAAE,mCAAmC,CAAC,CAAA;IACvC,IAAI,KAAK,CAAC,iBAAiB,CAAC,KAAK,iCAAiC;WAC7D,CAAC,KAAK,CAAC,SAAS,CAAC,KAAK,SAAS,IAAI,KAAK,CAAC,SAAS,CAAC,KAAK,UAAU,CAAC;WACnE,CAAC,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,cAAc,CAAC,CAAC,IAAI,KAAK,CAAC,cAAc,CAAC,CAAC,MAAM,GAAG,KAAK,EAAE,CAAC;QACnF,OAAO,CAAC,oDAAoD,CAAC,CAAA;IAC/D,CAAC;IACD,MAAM,YAAY,GAAG,KAAK,CAAC,cAAc,CAAC,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,CAAC,aAAa,CAClE,IAAI,EACJ,uBAAuB,EACvB,GAAG,EACH,EAAE,UAAU,EAAE,iBAAiB,EAAE,CAClC,CAAC,CAAA;IACF,MAAM,MAAM,GAAG,CAAC,GAAG,IAAI,GAAG,CAAC,YAAY,CAAC,CAAC,CAAC,IAAI,EAAE,CAAA;IAChD,IAAI,MAAM,CAAC,MAAM,KAAK,YAAY,CAAC,MAAM;WACpC,MAAM,CAAC,IAAI,CAAC,CAAC,KAAK,EAAE,KAAK,EAAE,EAAE,CAAC,KAAK,KAAK,YAAY,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC;QAClE,OAAO,CAAC,kDAAkD,CAAC,CAAA;IAC7D,CAAC;IACD,MAAM,OAAO,GAAG,MAAM,CAAC,MAAM,CAAC;QAC5B,eAAe,EAAE,iCAAiC;QAClD,MAAM,EAAE,sCAAsC,CAAC,KAAK,CAAC,QAAQ,CAAC,CAAC;QAC/D,KAAK,EAAE,qBAAqB,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC;QAC5C,UAAU,EAAE,iBAAiB,CAAC,KAAK,CAAC,YAAY,CAAC,EAAE,YAAY,CAAC;QAChE,OAAO,EAAE,MAAM,CAAC,aAAa,CAAC,KAAK,CAAC,SAAS,CAAC,CAAC,IAAK,KAAK,CAAC,SAAS,CAAY,IAAI,CAAC;YAClF,CAAC,CAAC,KAAK,CAAC,SAAS,CAAW;YAC5B,CAAC,CAAC,OAAO,CAAC,2CAA2C,CAAC;QACxD,WAAW,EAAE,KAAK,CAAC,aAAa,CAAC,KAAK,QAAQ,IAAI,KAAK,CAAC,aAAa,CAAC,KAAK,SAAS;YAClF,CAAC,CAAC,KAAK,CAAC,aAAa,CAAC;YACtB,CAAC,CAAC,OAAO,CAAC,+CAA+C,CAAC;QAC5D,MAAM,EAAE,iBAAiB,CAAC,KAAK,CAAC,QAAQ,CAAC,EAAE,+BAA+B,CAAC;QAC3E,OAAO,EAAE,KAAK,CAAC,SAAS,CAAC;QACzB,YAAY,EAAE,MAAM,CAAC,MAAM,CAAC,MAAM,CAAC;KACK,CAAC,CAAA;IAC3C,IAAI,QAAQ,KAAK,SAAS,EAAE,CAAC;QAC3B,MAAM,QAAQ,GAAG,6BAA6B,CAAC,QAAQ,CAAC,CAAA;QACxD,IAAI,mBAAmB,CAAC;YACtB,MAAM,EAAE,OAAO,CAAC,MAAM;YACtB,KAAK,EAAE,OAAO,CAAC,KAAK;YACpB,UAAU,EAAE,OAAO,CAAC,UAAU;YAC9B,OAAO,EAAE,OAAO,CAAC,OAAO;YACxB,WAAW,EAAE,OAAO,CAAC,WAAW;YAChC,MAAM,EAAE,OAAO,CAAC,MAAM;SACvB,CAAC,KAAK,mBAAmB,CAAC;YACzB,MAAM,EAAE,QAAQ,CAAC,MAAM;YACvB,KAAK,EAAE,QAAQ,CAAC,KAAK;YACrB,UAAU,EAAE,QAAQ,CAAC,UAAU;YAC/B,OAAO,EAAE,QAAQ,CAAC,OAAO;YACzB,WAAW,EAAE,QAAQ,CAAC,WAAW;YACjC,MAAM,EAAE,QAAQ,CAAC,MAAM;SACxB,CAAC,EAAE,CAAC;YACH,MAAM,IAAI,4BAA4B,CAAC,kBAAkB,EAAE,kDAAkD,CAAC,CAAA;QAChH,CAAC;IACH,CAAC;IACD,OAAO,OAAO,CAAA;AAChB,CAAC;AAED,MAAM,UAAU,6CAA6C,CAC3D,KAAc;IAEd,IAAI,CAAC,cAAc,CAAC,KAAK,CAAC;QAAE,OAAO,CAAC,+CAA+C,CAAC,CAAA;IACpF,qBAAqB,CACnB,KAAK,EACL,CAAC,iBAAiB,EAAE,UAAU,EAAE,YAAY,EAAE,iBAAiB,EAAE,SAAS,CAAC,EAC3E,6BAA6B,CAC9B,CAAA;IACD,IAAI,KAAK,CAAC,iBAAiB,CAAC,KAAK,iCAAiC;WAC7D,OAAO,KAAK,CAAC,SAAS,CAAC,KAAK,UAAU;QAAE,OAAO,CAAC,8CAA8C,CAAC,CAAA;IACpG,MAAM,MAAM,GAAG,sCAAsC,CAAC;QACpD,QAAQ,EAAE,KAAK,CAAC,UAAU,CAAC;QAC3B,UAAU,EAAE,KAAK,CAAC,YAAY,CAAC;QAC/B,eAAe,EAAE,KAAK,CAAC,iBAAiB,CAAC;KAC1C,CAAC,CAAA;IACF,OAAO,MAAM,CAAC,MAAM,CAAC;QACnB,eAAe,EAAE,iCAAiC;QAClD,GAAG,MAAM;QACT,OAAO,EAAE,KAAK,CAAC,SAAS,CAAe;KACxC,CAAC,CAAA;AACJ,CAAC"}
|
package/lib/index.d.ts
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,cAAc,YAAY,CAAA;AAC1B,cAAc,gBAAgB,CAAA;AAC9B,cAAc,iBAAiB,CAAA;AAC/B,cAAc,kBAAkB,CAAA;AAChC,cAAc,gBAAgB,CAAA;AAC9B,OAAO,EAAE,OAAO,EAAE,MAAM,cAAc,CAAA"}
|
package/lib/index.js
ADDED
package/lib/index.js.map
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,cAAc,YAAY,CAAA;AAC1B,cAAc,gBAAgB,CAAA;AAC9B,cAAc,iBAAiB,CAAA;AAC/B,cAAc,kBAAkB,CAAA;AAChC,cAAc,gBAAgB,CAAA;AAC9B,OAAO,EAAE,OAAO,EAAE,MAAM,cAAc,CAAA"}
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
/** Host-owned T1 preference keys shared by Delivery validation and learning. */
|
|
2
|
+
export declare const assistantT1PreferenceKeys: readonly ["response.verbosity", "response.structure", "response.language", "response.explanation_depth", "suggestion.frequency", "recommendation.ranking"];
|
|
3
|
+
export type AssistantT1PreferenceKey = typeof assistantT1PreferenceKeys[number];
|
|
4
|
+
/** Closed values that may be exported or applied as reversible T1 overlays. */
|
|
5
|
+
export declare const assistantT1PreferenceValues: Readonly<{
|
|
6
|
+
'response.verbosity': readonly string[];
|
|
7
|
+
'response.structure': readonly string[];
|
|
8
|
+
'response.language': readonly string[];
|
|
9
|
+
'response.explanation_depth': readonly string[];
|
|
10
|
+
'suggestion.frequency': readonly string[];
|
|
11
|
+
'recommendation.ranking': readonly string[];
|
|
12
|
+
}>;
|
|
13
|
+
//# sourceMappingURL=preferences.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"preferences.d.ts","sourceRoot":"","sources":["../src/preferences.ts"],"names":[],"mappings":"AAAA,gFAAgF;AAChF,eAAO,MAAM,yBAAyB,4JAO3B,CAAA;AAEX,MAAM,MAAM,wBAAwB,GAAG,OAAO,yBAAyB,CAAC,MAAM,CAAC,CAAA;AAE/E,+EAA+E;AAC/E,eAAO,MAAM,2BAA2B;;;;;;;EAOkC,CAAA"}
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
/** Host-owned T1 preference keys shared by Delivery validation and learning. */
|
|
2
|
+
export const assistantT1PreferenceKeys = Object.freeze([
|
|
3
|
+
'response.verbosity',
|
|
4
|
+
'response.structure',
|
|
5
|
+
'response.language',
|
|
6
|
+
'response.explanation_depth',
|
|
7
|
+
'suggestion.frequency',
|
|
8
|
+
'recommendation.ranking',
|
|
9
|
+
]);
|
|
10
|
+
/** Closed values that may be exported or applied as reversible T1 overlays. */
|
|
11
|
+
export const assistantT1PreferenceValues = Object.freeze({
|
|
12
|
+
'response.verbosity': Object.freeze(['concise', 'balanced', 'detailed']),
|
|
13
|
+
'response.structure': Object.freeze(['prose', 'bullets', 'mixed']),
|
|
14
|
+
'response.language': Object.freeze(['zh-CN', 'en']),
|
|
15
|
+
'response.explanation_depth': Object.freeze(['result-first', 'balanced', 'tutorial']),
|
|
16
|
+
'suggestion.frequency': Object.freeze(['low', 'normal']),
|
|
17
|
+
'recommendation.ranking': Object.freeze(['recency', 'familiarity', 'evidence']),
|
|
18
|
+
});
|
|
19
|
+
//# sourceMappingURL=preferences.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"preferences.js","sourceRoot":"","sources":["../src/preferences.ts"],"names":[],"mappings":"AAAA,gFAAgF;AAChF,MAAM,CAAC,MAAM,yBAAyB,GAAG,MAAM,CAAC,MAAM,CAAC;IACrD,oBAAoB;IACpB,oBAAoB;IACpB,mBAAmB;IACnB,4BAA4B;IAC5B,sBAAsB;IACtB,wBAAwB;CAChB,CAAC,CAAA;AAIX,+EAA+E;AAC/E,MAAM,CAAC,MAAM,2BAA2B,GAAG,MAAM,CAAC,MAAM,CAAC;IACvD,oBAAoB,EAAE,MAAM,CAAC,MAAM,CAAC,CAAC,SAAS,EAAE,UAAU,EAAE,UAAU,CAAC,CAAC;IACxE,oBAAoB,EAAE,MAAM,CAAC,MAAM,CAAC,CAAC,OAAO,EAAE,SAAS,EAAE,OAAO,CAAC,CAAC;IAClE,mBAAmB,EAAE,MAAM,CAAC,MAAM,CAAC,CAAC,OAAO,EAAE,IAAI,CAAC,CAAC;IACnD,4BAA4B,EAAE,MAAM,CAAC,MAAM,CAAC,CAAC,cAAc,EAAE,UAAU,EAAE,UAAU,CAAC,CAAC;IACrF,sBAAsB,EAAE,MAAM,CAAC,MAAM,CAAC,CAAC,KAAK,EAAE,QAAQ,CAAC,CAAC;IACxD,wBAAwB,EAAE,MAAM,CAAC,MAAM,CAAC,CAAC,SAAS,EAAE,aAAa,EAAE,UAAU,CAAC,CAAC;CACR,CAAC,CAAA"}
|