@vinkius-core/mcp-fusion 2.7.0 → 2.8.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (68) hide show
  1. package/dist/cli/fusion.d.ts +101 -0
  2. package/dist/cli/fusion.d.ts.map +1 -0
  3. package/dist/cli/fusion.js +333 -0
  4. package/dist/cli/fusion.js.map +1 -0
  5. package/dist/index.d.ts +41 -1
  6. package/dist/index.d.ts.map +1 -1
  7. package/dist/index.js +22 -0
  8. package/dist/index.js.map +1 -1
  9. package/dist/introspection/BehaviorDigest.d.ts +112 -0
  10. package/dist/introspection/BehaviorDigest.d.ts.map +1 -0
  11. package/dist/introspection/BehaviorDigest.js +147 -0
  12. package/dist/introspection/BehaviorDigest.js.map +1 -0
  13. package/dist/introspection/CapabilityLockfile.d.ts +261 -0
  14. package/dist/introspection/CapabilityLockfile.d.ts.map +1 -0
  15. package/dist/introspection/CapabilityLockfile.js +392 -0
  16. package/dist/introspection/CapabilityLockfile.js.map +1 -0
  17. package/dist/introspection/ContractAwareSelfHealing.d.ts +90 -0
  18. package/dist/introspection/ContractAwareSelfHealing.d.ts.map +1 -0
  19. package/dist/introspection/ContractAwareSelfHealing.js +132 -0
  20. package/dist/introspection/ContractAwareSelfHealing.js.map +1 -0
  21. package/dist/introspection/ContractDiff.d.ts +91 -0
  22. package/dist/introspection/ContractDiff.d.ts.map +1 -0
  23. package/dist/introspection/ContractDiff.js +466 -0
  24. package/dist/introspection/ContractDiff.js.map +1 -0
  25. package/dist/introspection/CryptoAttestation.d.ts +143 -0
  26. package/dist/introspection/CryptoAttestation.d.ts.map +1 -0
  27. package/dist/introspection/CryptoAttestation.js +194 -0
  28. package/dist/introspection/CryptoAttestation.js.map +1 -0
  29. package/dist/introspection/EntitlementScanner.d.ts +177 -0
  30. package/dist/introspection/EntitlementScanner.d.ts.map +1 -0
  31. package/dist/introspection/EntitlementScanner.js +459 -0
  32. package/dist/introspection/EntitlementScanner.js.map +1 -0
  33. package/dist/introspection/GovernanceObserver.d.ts +88 -0
  34. package/dist/introspection/GovernanceObserver.d.ts.map +1 -0
  35. package/dist/introspection/GovernanceObserver.js +132 -0
  36. package/dist/introspection/GovernanceObserver.js.map +1 -0
  37. package/dist/introspection/SemanticProbe.d.ts +207 -0
  38. package/dist/introspection/SemanticProbe.d.ts.map +1 -0
  39. package/dist/introspection/SemanticProbe.js +255 -0
  40. package/dist/introspection/SemanticProbe.js.map +1 -0
  41. package/dist/introspection/TokenEconomics.d.ts +210 -0
  42. package/dist/introspection/TokenEconomics.d.ts.map +1 -0
  43. package/dist/introspection/TokenEconomics.js +286 -0
  44. package/dist/introspection/TokenEconomics.js.map +1 -0
  45. package/dist/introspection/ToolContract.d.ts +161 -0
  46. package/dist/introspection/ToolContract.d.ts.map +1 -0
  47. package/dist/introspection/ToolContract.js +192 -0
  48. package/dist/introspection/ToolContract.js.map +1 -0
  49. package/dist/introspection/canonicalize.d.ts +20 -0
  50. package/dist/introspection/canonicalize.d.ts.map +1 -0
  51. package/dist/introspection/canonicalize.js +51 -0
  52. package/dist/introspection/canonicalize.js.map +1 -0
  53. package/dist/introspection/index.d.ts +20 -0
  54. package/dist/introspection/index.d.ts.map +1 -1
  55. package/dist/introspection/index.js +20 -0
  56. package/dist/introspection/index.js.map +1 -1
  57. package/dist/observability/DebugObserver.d.ts +26 -1
  58. package/dist/observability/DebugObserver.d.ts.map +1 -1
  59. package/dist/observability/DebugObserver.js +8 -1
  60. package/dist/observability/DebugObserver.js.map +1 -1
  61. package/dist/observability/index.d.ts +1 -1
  62. package/dist/observability/index.d.ts.map +1 -1
  63. package/dist/observability/index.js.map +1 -1
  64. package/dist/server/ServerAttachment.d.ts +41 -0
  65. package/dist/server/ServerAttachment.d.ts.map +1 -1
  66. package/dist/server/ServerAttachment.js +25 -1
  67. package/dist/server/ServerAttachment.js.map +1 -1
  68. package/package.json +8 -1
@@ -0,0 +1,91 @@
1
+ /**
2
+ * ContractDiff — Behavioral Contract Diffing Engine
3
+ *
4
+ * Computes the semantic difference between two snapshots of a
5
+ * `ToolContract`. Unlike naive JSON diffing, this engine understands
6
+ * the behavioral semantics of each field and classifies changes by
7
+ * severity:
8
+ *
9
+ * - **BREAKING**: The behavioral surface changed in a way that will
10
+ * cause an LLM that was previously calibrated to this tool to
11
+ * fail or hallucinate. Examples: egress schema fields removed,
12
+ * system rules changed, affordance topology altered.
13
+ *
14
+ * - **RISKY**: The behavioral surface changed in a way that might
15
+ * affect LLM behavior but won't cause immediate failure. Examples:
16
+ * cognitive guardrails loosened, middleware chain changed.
17
+ *
18
+ * - **SAFE**: The change is additive and won't affect existing
19
+ * LLM behavior. Examples: new action added, description improved.
20
+ *
21
+ * - **COSMETIC**: No behavioral impact. Examples: description
22
+ * rewording with identical semantics.
23
+ *
24
+ * Pure-function module: no state, no side effects.
25
+ *
26
+ * @module
27
+ */
28
+ import type { ToolContract } from './ToolContract.js';
29
+ /** Severity classification for a contract change */
30
+ export type DeltaSeverity = 'BREAKING' | 'RISKY' | 'SAFE' | 'COSMETIC';
31
+ /**
32
+ * A single atomic change in a tool contract.
33
+ *
34
+ * Designed to be human-readable, machine-diffable, and injectable
35
+ * into LLM correction prompts (Self-Healing Context).
36
+ */
37
+ export interface ContractDelta {
38
+ /** Which part of the contract changed */
39
+ readonly category: DeltaCategory;
40
+ /** Specific field or sub-path that changed */
41
+ readonly field: string;
42
+ /** Severity classification */
43
+ readonly severity: DeltaSeverity;
44
+ /** Human-readable description of the change */
45
+ readonly description: string;
46
+ /** Previous value (serialized) */
47
+ readonly before: string | null;
48
+ /** New value (serialized) */
49
+ readonly after: string | null;
50
+ }
51
+ /**
52
+ * Broad category of what changed in the contract.
53
+ * Maps to the major sections of `ToolContract`.
54
+ */
55
+ export type DeltaCategory = 'surface' | 'surface.action' | 'behavior.egress' | 'behavior.rules' | 'behavior.guardrails' | 'behavior.middleware' | 'behavior.stateSync' | 'behavior.affordances' | 'tokenEconomics' | 'entitlements';
56
+ /**
57
+ * Result of a full contract diff operation.
58
+ */
59
+ export interface ContractDiffResult {
60
+ /** Tool name */
61
+ readonly toolName: string;
62
+ /** All detected deltas, sorted by severity */
63
+ readonly deltas: readonly ContractDelta[];
64
+ /** Highest severity found */
65
+ readonly maxSeverity: DeltaSeverity;
66
+ /** Whether the overall behavior digest changed */
67
+ readonly digestChanged: boolean;
68
+ /** Whether the contract is backwards-compatible */
69
+ readonly isBackwardsCompatible: boolean;
70
+ }
71
+ /**
72
+ * Compute the semantic diff between two snapshots of a tool contract.
73
+ *
74
+ * @param before - Previous contract snapshot
75
+ * @param after - Current contract snapshot
76
+ * @returns Classified, sorted list of deltas
77
+ */
78
+ export declare function diffContracts(before: ToolContract, after: ToolContract): ContractDiffResult;
79
+ /**
80
+ * Format a diff result as a human-readable report.
81
+ *
82
+ * Designed for both terminal output and injection into
83
+ * LLM correction prompts (Self-Healing Context).
84
+ */
85
+ export declare function formatDiffReport(result: ContractDiffResult): string;
86
+ /**
87
+ * Format deltas as XML for injection into LLM correction prompts.
88
+ * Compatible with ValidationErrorFormatter's XML format.
89
+ */
90
+ export declare function formatDeltasAsXml(deltas: readonly ContractDelta[]): string;
91
+ //# sourceMappingURL=ContractDiff.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ContractDiff.d.ts","sourceRoot":"","sources":["../../src/introspection/ContractDiff.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;GA0BG;AACH,OAAO,KAAK,EAAE,YAAY,EAA4E,MAAM,mBAAmB,CAAC;AAMhI,oDAAoD;AACpD,MAAM,MAAM,aAAa,GAAG,UAAU,GAAG,OAAO,GAAG,MAAM,GAAG,UAAU,CAAC;AAEvE;;;;;GAKG;AACH,MAAM,WAAW,aAAa;IAC1B,yCAAyC;IACzC,QAAQ,CAAC,QAAQ,EAAE,aAAa,CAAC;IACjC,8CAA8C;IAC9C,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAC;IACvB,8BAA8B;IAC9B,QAAQ,CAAC,QAAQ,EAAE,aAAa,CAAC;IACjC,+CAA+C;IAC/C,QAAQ,CAAC,WAAW,EAAE,MAAM,CAAC;IAC7B,kCAAkC;IAClC,QAAQ,CAAC,MAAM,EAAE,MAAM,GAAG,IAAI,CAAC;IAC/B,6BAA6B;IAC7B,QAAQ,CAAC,KAAK,EAAE,MAAM,GAAG,IAAI,CAAC;CACjC;AAED;;;GAGG;AACH,MAAM,MAAM,aAAa,GACnB,SAAS,GACT,gBAAgB,GAChB,iBAAiB,GACjB,gBAAgB,GAChB,qBAAqB,GACrB,qBAAqB,GACrB,oBAAoB,GACpB,sBAAsB,GACtB,gBAAgB,GAChB,cAAc,CAAC;AAErB;;GAEG;AACH,MAAM,WAAW,kBAAkB;IAC/B,gBAAgB;IAChB,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAC;IAC1B,8CAA8C;IAC9C,QAAQ,CAAC,MAAM,EAAE,SAAS,aAAa,EAAE,CAAC;IAC1C,6BAA6B;IAC7B,QAAQ,CAAC,WAAW,EAAE,aAAa,CAAC;IACpC,kDAAkD;IAClD,QAAQ,CAAC,aAAa,EAAE,OAAO,CAAC;IAChC,mDAAmD;IACnD,QAAQ,CAAC,qBAAqB,EAAE,OAAO,CAAC;CAC3C;AAaD;;;;;;GAMG;AACH,wBAAgB,aAAa,CACzB,MAAM,EAAE,YAAY,EACpB,KAAK,EAAE,YAAY,GACpB,kBAAkB,CAmCpB;AAkaD;;;;;GAKG;AACH,wBAAgB,gBAAgB,CAAC,MAAM,EAAE,kBAAkB,GAAG,MAAM,CAgBnE;AAED;;;GAGG;AACH,wBAAgB,iBAAiB,CAAC,MAAM,EAAE,SAAS,aAAa,EAAE,GAAG,MAAM,CAe1E"}
@@ -0,0 +1,466 @@
1
+ // ============================================================================
2
+ // Diff Engine
3
+ // ============================================================================
4
+ const SEVERITY_ORDER = {
5
+ BREAKING: 3,
6
+ RISKY: 2,
7
+ SAFE: 1,
8
+ COSMETIC: 0,
9
+ };
10
+ /**
11
+ * Compute the semantic diff between two snapshots of a tool contract.
12
+ *
13
+ * @param before - Previous contract snapshot
14
+ * @param after - Current contract snapshot
15
+ * @returns Classified, sorted list of deltas
16
+ */
17
+ export function diffContracts(before, after) {
18
+ const deltas = [];
19
+ // Surface diff
20
+ diffSurface(before, after, deltas);
21
+ // Action-level diff
22
+ diffActions(before, after, deltas);
23
+ // Behavior diff
24
+ diffBehavior(before.behavior, after.behavior, deltas);
25
+ // Token Economics diff
26
+ diffTokenEconomics(before.tokenEconomics, after.tokenEconomics, deltas);
27
+ // Entitlements diff
28
+ diffEntitlements(before.entitlements, after.entitlements, deltas);
29
+ // Sort by severity (BREAKING first)
30
+ deltas.sort((a, b) => SEVERITY_ORDER[b.severity] - SEVERITY_ORDER[a.severity]);
31
+ const maxSeverity = deltas.length > 0
32
+ ? deltas[0].severity
33
+ : 'COSMETIC';
34
+ const digestChanged = before.behavior.egressSchemaDigest !== after.behavior.egressSchemaDigest
35
+ || before.behavior.systemRulesFingerprint !== after.behavior.systemRulesFingerprint;
36
+ return {
37
+ toolName: after.surface.name,
38
+ deltas,
39
+ maxSeverity,
40
+ digestChanged,
41
+ isBackwardsCompatible: maxSeverity !== 'BREAKING',
42
+ };
43
+ }
44
+ /**
45
+ * Diff tool surfaces but exclude actions (handled separately).
46
+ * @internal
47
+ */
48
+ function diffSurface(before, after, out) {
49
+ if (before.surface.name !== after.surface.name) {
50
+ out.push({
51
+ category: 'surface',
52
+ field: 'name',
53
+ severity: 'BREAKING',
54
+ description: 'Tool name changed',
55
+ before: before.surface.name,
56
+ after: after.surface.name,
57
+ });
58
+ }
59
+ if (before.surface.description !== after.surface.description) {
60
+ out.push({
61
+ category: 'surface',
62
+ field: 'description',
63
+ severity: 'COSMETIC',
64
+ description: 'Tool description changed',
65
+ before: before.surface.description ?? null,
66
+ after: after.surface.description ?? null,
67
+ });
68
+ }
69
+ if (before.surface.inputSchemaDigest !== after.surface.inputSchemaDigest) {
70
+ out.push({
71
+ category: 'surface',
72
+ field: 'inputSchemaDigest',
73
+ severity: 'BREAKING',
74
+ description: 'Input schema changed — previously calibrated LLM arguments may fail',
75
+ before: before.surface.inputSchemaDigest,
76
+ after: after.surface.inputSchemaDigest,
77
+ });
78
+ }
79
+ // Tags
80
+ const removedTags = before.surface.tags.filter(t => !after.surface.tags.includes(t));
81
+ const addedTags = after.surface.tags.filter(t => !before.surface.tags.includes(t));
82
+ if (removedTags.length > 0 || addedTags.length > 0) {
83
+ out.push({
84
+ category: 'surface',
85
+ field: 'tags',
86
+ severity: removedTags.length > 0 ? 'SAFE' : 'COSMETIC',
87
+ description: `Tags changed: ${removedTags.length > 0 ? `removed [${removedTags.join(', ')}]` : ''} ${addedTags.length > 0 ? `added [${addedTags.join(', ')}]` : ''}`.trim(),
88
+ before: JSON.stringify(before.surface.tags),
89
+ after: JSON.stringify(after.surface.tags),
90
+ });
91
+ }
92
+ }
93
+ /**
94
+ * Diff action-level contracts. Detects added, removed, and modified actions.
95
+ * @internal
96
+ */
97
+ function diffActions(before, after, out) {
98
+ const beforeKeys = new Set(Object.keys(before.surface.actions));
99
+ const afterKeys = new Set(Object.keys(after.surface.actions));
100
+ // Removed actions → BREAKING
101
+ for (const key of beforeKeys) {
102
+ if (!afterKeys.has(key)) {
103
+ out.push({
104
+ category: 'surface.action',
105
+ field: `actions.${key}`,
106
+ severity: 'BREAKING',
107
+ description: `Action "${key}" was removed`,
108
+ before: key,
109
+ after: null,
110
+ });
111
+ }
112
+ }
113
+ // Added actions → SAFE
114
+ for (const key of afterKeys) {
115
+ if (!beforeKeys.has(key)) {
116
+ out.push({
117
+ category: 'surface.action',
118
+ field: `actions.${key}`,
119
+ severity: 'SAFE',
120
+ description: `Action "${key}" was added`,
121
+ before: null,
122
+ after: key,
123
+ });
124
+ }
125
+ }
126
+ // Modified actions
127
+ for (const key of beforeKeys) {
128
+ if (afterKeys.has(key)) {
129
+ diffSingleAction(key, before.surface.actions[key], after.surface.actions[key], out);
130
+ }
131
+ }
132
+ }
133
+ /**
134
+ * Diff a single action's contract fields.
135
+ * @internal
136
+ */
137
+ function diffSingleAction(actionKey, before, after, out) {
138
+ if (before.destructive !== after.destructive) {
139
+ out.push({
140
+ category: 'surface.action',
141
+ field: `actions.${actionKey}.destructive`,
142
+ severity: 'BREAKING',
143
+ description: `Action "${actionKey}" destructive flag changed: ${before.destructive} → ${after.destructive}`,
144
+ before: String(before.destructive),
145
+ after: String(after.destructive),
146
+ });
147
+ }
148
+ if (before.idempotent !== after.idempotent) {
149
+ out.push({
150
+ category: 'surface.action',
151
+ field: `actions.${actionKey}.idempotent`,
152
+ severity: 'RISKY',
153
+ description: `Action "${actionKey}" idempotent flag changed`,
154
+ before: String(before.idempotent),
155
+ after: String(after.idempotent),
156
+ });
157
+ }
158
+ if (before.readOnly !== after.readOnly) {
159
+ out.push({
160
+ category: 'surface.action',
161
+ field: `actions.${actionKey}.readOnly`,
162
+ severity: 'BREAKING',
163
+ description: `Action "${actionKey}" readOnly flag changed: ${before.readOnly} → ${after.readOnly}`,
164
+ before: String(before.readOnly),
165
+ after: String(after.readOnly),
166
+ });
167
+ }
168
+ // Required fields
169
+ const removedFields = before.requiredFields.filter(f => !after.requiredFields.includes(f));
170
+ const addedFields = after.requiredFields.filter(f => !before.requiredFields.includes(f));
171
+ if (removedFields.length > 0) {
172
+ out.push({
173
+ category: 'surface.action',
174
+ field: `actions.${actionKey}.requiredFields`,
175
+ severity: 'SAFE',
176
+ description: `Action "${actionKey}" no longer requires: [${removedFields.join(', ')}]`,
177
+ before: JSON.stringify(before.requiredFields),
178
+ after: JSON.stringify(after.requiredFields),
179
+ });
180
+ }
181
+ if (addedFields.length > 0) {
182
+ out.push({
183
+ category: 'surface.action',
184
+ field: `actions.${actionKey}.requiredFields`,
185
+ severity: 'BREAKING',
186
+ description: `Action "${actionKey}" now requires new fields: [${addedFields.join(', ')}]`,
187
+ before: JSON.stringify(before.requiredFields),
188
+ after: JSON.stringify(after.requiredFields),
189
+ });
190
+ }
191
+ // Presenter change
192
+ if (before.presenterName !== after.presenterName) {
193
+ out.push({
194
+ category: 'surface.action',
195
+ field: `actions.${actionKey}.presenterName`,
196
+ severity: before.presenterName && !after.presenterName ? 'BREAKING' : 'RISKY',
197
+ description: `Action "${actionKey}" Presenter changed: ${before.presenterName ?? 'none'} → ${after.presenterName ?? 'none'}`,
198
+ before: before.presenterName ?? null,
199
+ after: after.presenterName ?? null,
200
+ });
201
+ }
202
+ if (before.inputSchemaDigest !== after.inputSchemaDigest) {
203
+ out.push({
204
+ category: 'surface.action',
205
+ field: `actions.${actionKey}.inputSchemaDigest`,
206
+ severity: 'RISKY',
207
+ description: `Action "${actionKey}" input schema changed`,
208
+ before: before.inputSchemaDigest,
209
+ after: after.inputSchemaDigest,
210
+ });
211
+ }
212
+ }
213
+ /**
214
+ * Diff behavioral contracts.
215
+ * @internal
216
+ */
217
+ function diffBehavior(before, after, out) {
218
+ // Egress schema
219
+ if (before.egressSchemaDigest !== after.egressSchemaDigest) {
220
+ out.push({
221
+ category: 'behavior.egress',
222
+ field: 'egressSchemaDigest',
223
+ severity: 'BREAKING',
224
+ description: 'Presenter egress schema changed — LLM response parsing may break',
225
+ before: before.egressSchemaDigest,
226
+ after: after.egressSchemaDigest,
227
+ });
228
+ }
229
+ // System rules
230
+ if (before.systemRulesFingerprint !== after.systemRulesFingerprint) {
231
+ out.push({
232
+ category: 'behavior.rules',
233
+ field: 'systemRulesFingerprint',
234
+ severity: 'BREAKING',
235
+ description: 'System rules changed — LLM behavioral calibration invalidated',
236
+ before: before.systemRulesFingerprint,
237
+ after: after.systemRulesFingerprint,
238
+ });
239
+ }
240
+ // Cognitive guardrails
241
+ if (before.cognitiveGuardrails.agentLimitMax !== after.cognitiveGuardrails.agentLimitMax) {
242
+ const severity = after.cognitiveGuardrails.agentLimitMax === null
243
+ ? 'RISKY' // Removed limit → risk of context flooding
244
+ : 'SAFE';
245
+ out.push({
246
+ category: 'behavior.guardrails',
247
+ field: 'agentLimitMax',
248
+ severity,
249
+ description: `Agent limit changed: ${before.cognitiveGuardrails.agentLimitMax ?? 'unlimited'} → ${after.cognitiveGuardrails.agentLimitMax ?? 'unlimited'}`,
250
+ before: String(before.cognitiveGuardrails.agentLimitMax),
251
+ after: String(after.cognitiveGuardrails.agentLimitMax),
252
+ });
253
+ }
254
+ if (before.cognitiveGuardrails.egressMaxBytes !== after.cognitiveGuardrails.egressMaxBytes) {
255
+ const severity = after.cognitiveGuardrails.egressMaxBytes === null
256
+ ? 'RISKY' // Removed cap → risk of payload inflation
257
+ : 'SAFE';
258
+ out.push({
259
+ category: 'behavior.guardrails',
260
+ field: 'egressMaxBytes',
261
+ severity,
262
+ description: `Egress max bytes changed: ${before.cognitiveGuardrails.egressMaxBytes ?? 'unlimited'} → ${after.cognitiveGuardrails.egressMaxBytes ?? 'unlimited'}`,
263
+ before: String(before.cognitiveGuardrails.egressMaxBytes),
264
+ after: String(after.cognitiveGuardrails.egressMaxBytes),
265
+ });
266
+ }
267
+ // Middleware chain
268
+ const beforeMw = before.middlewareChain.join(',');
269
+ const afterMw = after.middlewareChain.join(',');
270
+ if (beforeMw !== afterMw) {
271
+ out.push({
272
+ category: 'behavior.middleware',
273
+ field: 'middlewareChain',
274
+ severity: 'RISKY',
275
+ description: 'Middleware chain changed — execution semantics may differ',
276
+ before: beforeMw || null,
277
+ after: afterMw || null,
278
+ });
279
+ }
280
+ // State sync
281
+ if (before.stateSyncFingerprint !== after.stateSyncFingerprint) {
282
+ out.push({
283
+ category: 'behavior.stateSync',
284
+ field: 'stateSyncFingerprint',
285
+ severity: 'RISKY',
286
+ description: 'State sync policy changed',
287
+ before: before.stateSyncFingerprint,
288
+ after: after.stateSyncFingerprint,
289
+ });
290
+ }
291
+ // Affordance topology
292
+ const beforeAffordances = before.affordanceTopology.join(',');
293
+ const afterAffordances = after.affordanceTopology.join(',');
294
+ if (beforeAffordances !== afterAffordances) {
295
+ out.push({
296
+ category: 'behavior.affordances',
297
+ field: 'affordanceTopology',
298
+ severity: 'RISKY',
299
+ description: 'Affordance topology changed — suggested action navigation graph differs',
300
+ before: beforeAffordances || null,
301
+ after: afterAffordances || null,
302
+ });
303
+ }
304
+ // Concurrency
305
+ if (before.concurrencyFingerprint !== after.concurrencyFingerprint) {
306
+ out.push({
307
+ category: 'behavior.stateSync',
308
+ field: 'concurrencyFingerprint',
309
+ severity: 'RISKY',
310
+ description: 'Concurrency configuration changed',
311
+ before: before.concurrencyFingerprint,
312
+ after: after.concurrencyFingerprint,
313
+ });
314
+ }
315
+ // Embedded presenters
316
+ const beforePresenters = before.embeddedPresenters.join(',');
317
+ const afterPresenters = after.embeddedPresenters.join(',');
318
+ if (beforePresenters !== afterPresenters) {
319
+ out.push({
320
+ category: 'behavior.egress',
321
+ field: 'embeddedPresenters',
322
+ severity: 'RISKY',
323
+ description: 'Embedded Presenter set changed — response composition differs',
324
+ before: beforePresenters || null,
325
+ after: afterPresenters || null,
326
+ });
327
+ }
328
+ }
329
+ /**
330
+ * Diff token economics profiles.
331
+ * @internal
332
+ */
333
+ function diffTokenEconomics(before, after, out) {
334
+ if (before.inflationRisk !== after.inflationRisk) {
335
+ const escalated = SEVERITY_ORDER[riskToSeverity(after.inflationRisk)]
336
+ > SEVERITY_ORDER[riskToSeverity(before.inflationRisk)];
337
+ out.push({
338
+ category: 'tokenEconomics',
339
+ field: 'inflationRisk',
340
+ severity: escalated ? 'BREAKING' : 'SAFE',
341
+ description: `Cognitive overload risk changed: ${before.inflationRisk} → ${after.inflationRisk}`,
342
+ before: before.inflationRisk,
343
+ after: after.inflationRisk,
344
+ });
345
+ }
346
+ if (before.unboundedCollection !== after.unboundedCollection) {
347
+ out.push({
348
+ category: 'tokenEconomics',
349
+ field: 'unboundedCollection',
350
+ severity: after.unboundedCollection ? 'RISKY' : 'SAFE',
351
+ description: `Unbounded collection flag: ${before.unboundedCollection} → ${after.unboundedCollection}`,
352
+ before: String(before.unboundedCollection),
353
+ after: String(after.unboundedCollection),
354
+ });
355
+ }
356
+ }
357
+ /**
358
+ * Map inflation risk to comparable severity.
359
+ * @internal
360
+ */
361
+ function riskToSeverity(risk) {
362
+ switch (risk) {
363
+ case 'critical': return 'BREAKING';
364
+ case 'high': return 'RISKY';
365
+ case 'medium': return 'SAFE';
366
+ case 'low': return 'COSMETIC';
367
+ }
368
+ }
369
+ /**
370
+ * Diff handler entitlements.
371
+ * @internal
372
+ */
373
+ function diffEntitlements(before, after, out) {
374
+ const entitlementFlags = ['filesystem', 'network', 'subprocess', 'crypto', 'codeEvaluation'];
375
+ for (const flag of entitlementFlags) {
376
+ if (!before[flag] && after[flag]) {
377
+ out.push({
378
+ category: 'entitlements',
379
+ field: flag,
380
+ severity: 'BREAKING',
381
+ description: `Handler gained "${flag}" entitlement — blast radius expanded`,
382
+ before: 'false',
383
+ after: 'true',
384
+ });
385
+ }
386
+ else if (before[flag] && !after[flag]) {
387
+ out.push({
388
+ category: 'entitlements',
389
+ field: flag,
390
+ severity: 'SAFE',
391
+ description: `Handler lost "${flag}" entitlement — blast radius reduced`,
392
+ before: 'true',
393
+ after: 'false',
394
+ });
395
+ }
396
+ }
397
+ }
398
+ // ============================================================================
399
+ // Diff Formatting
400
+ // ============================================================================
401
+ /**
402
+ * Format a diff result as a human-readable report.
403
+ *
404
+ * Designed for both terminal output and injection into
405
+ * LLM correction prompts (Self-Healing Context).
406
+ */
407
+ export function formatDiffReport(result) {
408
+ if (result.deltas.length === 0) {
409
+ return `[${result.toolName}] No contract changes detected.`;
410
+ }
411
+ const lines = [
412
+ `[${result.toolName}] Contract diff: ${result.deltas.length} change(s), max severity: ${result.maxSeverity}`,
413
+ '',
414
+ ];
415
+ for (const delta of result.deltas) {
416
+ lines.push(` [${delta.severity}] ${delta.field}: ${delta.description}`);
417
+ lines.push(` ${formatArrow(delta)}`);
418
+ }
419
+ return lines.join('\n');
420
+ }
421
+ /**
422
+ * Format deltas as XML for injection into LLM correction prompts.
423
+ * Compatible with ValidationErrorFormatter's XML format.
424
+ */
425
+ export function formatDeltasAsXml(deltas) {
426
+ if (deltas.length === 0)
427
+ return '';
428
+ const lines = ['<contract_changes>'];
429
+ for (const delta of deltas) {
430
+ lines.push(` <change severity="${escapeXml(delta.severity)}" field="${escapeXml(delta.field)}">`);
431
+ lines.push(` <description>${escapeXml(delta.description)}</description>`);
432
+ if (delta.before !== null)
433
+ lines.push(` <before>${escapeXml(delta.before)}</before>`);
434
+ if (delta.after !== null)
435
+ lines.push(` <after>${escapeXml(delta.after)}</after>`);
436
+ lines.push(' </change>');
437
+ }
438
+ lines.push('</contract_changes>');
439
+ return lines.join('\n');
440
+ }
441
+ // ============================================================================
442
+ // Utility
443
+ // ============================================================================
444
+ function truncate(s, maxLen) {
445
+ return s.length > maxLen ? s.slice(0, maxLen - 3) + '...' : s;
446
+ }
447
+ /**
448
+ * Format the before→after arrow for a contract delta.
449
+ * @internal
450
+ */
451
+ function formatArrow(delta) {
452
+ if (delta.before !== null && delta.after !== null) {
453
+ return `${truncate(delta.before, 40)} → ${truncate(delta.after, 40)}`;
454
+ }
455
+ return delta.after !== null
456
+ ? `(added) ${truncate(delta.after, 40)}`
457
+ : `(removed) ${truncate(delta.before, 40)}`;
458
+ }
459
+ function escapeXml(s) {
460
+ return s
461
+ .replace(/&/g, '&amp;')
462
+ .replace(/</g, '&lt;')
463
+ .replace(/>/g, '&gt;')
464
+ .replace(/"/g, '&quot;');
465
+ }
466
+ //# sourceMappingURL=ContractDiff.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ContractDiff.js","sourceRoot":"","sources":["../../src/introspection/ContractDiff.ts"],"names":[],"mappings":"AAyFA,+EAA+E;AAC/E,cAAc;AACd,+EAA+E;AAE/E,MAAM,cAAc,GAAkC;IAClD,QAAQ,EAAE,CAAC;IACX,KAAK,EAAE,CAAC;IACR,IAAI,EAAE,CAAC;IACP,QAAQ,EAAE,CAAC;CACd,CAAC;AAEF;;;;;;GAMG;AACH,MAAM,UAAU,aAAa,CACzB,MAAoB,EACpB,KAAmB;IAEnB,MAAM,MAAM,GAAoB,EAAE,CAAC;IAEnC,eAAe;IACf,WAAW,CAAC,MAAM,EAAE,KAAK,EAAE,MAAM,CAAC,CAAC;IAEnC,oBAAoB;IACpB,WAAW,CAAC,MAAM,EAAE,KAAK,EAAE,MAAM,CAAC,CAAC;IAEnC,gBAAgB;IAChB,YAAY,CAAC,MAAM,CAAC,QAAQ,EAAE,KAAK,CAAC,QAAQ,EAAE,MAAM,CAAC,CAAC;IAEtD,uBAAuB;IACvB,kBAAkB,CAAC,MAAM,CAAC,cAAc,EAAE,KAAK,CAAC,cAAc,EAAE,MAAM,CAAC,CAAC;IAExE,oBAAoB;IACpB,gBAAgB,CAAC,MAAM,CAAC,YAAY,EAAE,KAAK,CAAC,YAAY,EAAE,MAAM,CAAC,CAAC;IAElE,oCAAoC;IACpC,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,cAAc,CAAC,CAAC,CAAC,QAAQ,CAAC,GAAG,cAAc,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC;IAE/E,MAAM,WAAW,GAAG,MAAM,CAAC,MAAM,GAAG,CAAC;QACjC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAE,CAAC,QAAQ;QACrB,CAAC,CAAC,UAA2B,CAAC;IAElC,MAAM,aAAa,GAAG,MAAM,CAAC,QAAQ,CAAC,kBAAkB,KAAK,KAAK,CAAC,QAAQ,CAAC,kBAAkB;WACvF,MAAM,CAAC,QAAQ,CAAC,sBAAsB,KAAK,KAAK,CAAC,QAAQ,CAAC,sBAAsB,CAAC;IAExF,OAAO;QACH,QAAQ,EAAE,KAAK,CAAC,OAAO,CAAC,IAAI;QAC5B,MAAM;QACN,WAAW;QACX,aAAa;QACb,qBAAqB,EAAE,WAAW,KAAK,UAAU;KACpD,CAAC;AACN,CAAC;AAED;;;GAGG;AACH,SAAS,WAAW,CAChB,MAAoB,EACpB,KAAmB,EACnB,GAAoB;IAEpB,IAAI,MAAM,CAAC,OAAO,CAAC,IAAI,KAAK,KAAK,CAAC,OAAO,CAAC,IAAI,EAAE,CAAC;QAC7C,GAAG,CAAC,IAAI,CAAC;YACL,QAAQ,EAAE,SAAS;YACnB,KAAK,EAAE,MAAM;YACb,QAAQ,EAAE,UAAU;YACpB,WAAW,EAAE,mBAAmB;YAChC,MAAM,EAAE,MAAM,CAAC,OAAO,CAAC,IAAI;YAC3B,KAAK,EAAE,KAAK,CAAC,OAAO,CAAC,IAAI;SAC5B,CAAC,CAAC;IACP,CAAC;IAED,IAAI,MAAM,CAAC,OAAO,CAAC,WAAW,KAAK,KAAK,CAAC,OAAO,CAAC,WAAW,EAAE,CAAC;QAC3D,GAAG,CAAC,IAAI,CAAC;YACL,QAAQ,EAAE,SAAS;YACnB,KAAK,EAAE,aAAa;YACpB,QAAQ,EAAE,UAAU;YACpB,WAAW,EAAE,0BAA0B;YACvC,MAAM,EAAE,MAAM,CAAC,OAAO,CAAC,WAAW,IAAI,IAAI;YAC1C,KAAK,EAAE,KAAK,CAAC,OAAO,CAAC,WAAW,IAAI,IAAI;SAC3C,CAAC,CAAC;IACP,CAAC;IAED,IAAI,MAAM,CAAC,OAAO,CAAC,iBAAiB,KAAK,KAAK,CAAC,OAAO,CAAC,iBAAiB,EAAE,CAAC;QACvE,GAAG,CAAC,IAAI,CAAC;YACL,QAAQ,EAAE,SAAS;YACnB,KAAK,EAAE,mBAAmB;YAC1B,QAAQ,EAAE,UAAU;YACpB,WAAW,EAAE,qEAAqE;YAClF,MAAM,EAAE,MAAM,CAAC,OAAO,CAAC,iBAAiB;YACxC,KAAK,EAAE,KAAK,CAAC,OAAO,CAAC,iBAAiB;SACzC,CAAC,CAAC;IACP,CAAC;IAED,OAAO;IACP,MAAM,WAAW,GAAG,MAAM,CAAC,OAAO,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC;IACrF,MAAM,SAAS,GAAG,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,MAAM,CAAC,OAAO,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC;IACnF,IAAI,WAAW,CAAC,MAAM,GAAG,CAAC,IAAI,SAAS,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QACjD,GAAG,CAAC,IAAI,CAAC;YACL,QAAQ,EAAE,SAAS;YACnB,KAAK,EAAE,MAAM;YACb,QAAQ,EAAE,WAAW,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,UAAU;YACtD,WAAW,EAAE,iBAAiB,WAAW,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,YAAY,WAAW,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,IAAI,SAAS,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,UAAU,SAAS,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,IAAI,EAAE;YAC3K,MAAM,EAAE,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC,OAAO,CAAC,IAAI,CAAC;YAC3C,KAAK,EAAE,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC;SAC5C,CAAC,CAAC;IACP,CAAC;AACL,CAAC;AAED;;;GAGG;AACH,SAAS,WAAW,CAChB,MAAoB,EACpB,KAAmB,EACnB,GAAoB;IAEpB,MAAM,UAAU,GAAG,IAAI,GAAG,CAAC,MAAM,CAAC,IAAI,CAAC,MAAM,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC,CAAC;IAChE,MAAM,SAAS,GAAG,IAAI,GAAG,CAAC,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC,CAAC;IAE9D,6BAA6B;IAC7B,KAAK,MAAM,GAAG,IAAI,UAAU,EAAE,CAAC;QAC3B,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,GAAG,CAAC,EAAE,CAAC;YACtB,GAAG,CAAC,IAAI,CAAC;gBACL,QAAQ,EAAE,gBAAgB;gBAC1B,KAAK,EAAE,WAAW,GAAG,EAAE;gBACvB,QAAQ,EAAE,UAAU;gBACpB,WAAW,EAAE,WAAW,GAAG,eAAe;gBAC1C,MAAM,EAAE,GAAG;gBACX,KAAK,EAAE,IAAI;aACd,CAAC,CAAC;QACP,CAAC;IACL,CAAC;IAED,uBAAuB;IACvB,KAAK,MAAM,GAAG,IAAI,SAAS,EAAE,CAAC;QAC1B,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,GAAG,CAAC,EAAE,CAAC;YACvB,GAAG,CAAC,IAAI,CAAC;gBACL,QAAQ,EAAE,gBAAgB;gBAC1B,KAAK,EAAE,WAAW,GAAG,EAAE;gBACvB,QAAQ,EAAE,MAAM;gBAChB,WAAW,EAAE,WAAW,GAAG,aAAa;gBACxC,MAAM,EAAE,IAAI;gBACZ,KAAK,EAAE,GAAG;aACb,CAAC,CAAC;QACP,CAAC;IACL,CAAC;IAED,mBAAmB;IACnB,KAAK,MAAM,GAAG,IAAI,UAAU,EAAE,CAAC;QAC3B,IAAI,SAAS,CAAC,GAAG,CAAC,GAAG,CAAC,EAAE,CAAC;YACrB,gBAAgB,CACZ,GAAG,EACH,MAAM,CAAC,OAAO,CAAC,OAAO,CAAC,GAAG,CAAE,EAC5B,KAAK,CAAC,OAAO,CAAC,OAAO,CAAC,GAAG,CAAE,EAC3B,GAAG,CACN,CAAC;QACN,CAAC;IACL,CAAC;AACL,CAAC;AAED;;;GAGG;AACH,SAAS,gBAAgB,CACrB,SAAiB,EACjB,MAAsB,EACtB,KAAqB,EACrB,GAAoB;IAEpB,IAAI,MAAM,CAAC,WAAW,KAAK,KAAK,CAAC,WAAW,EAAE,CAAC;QAC3C,GAAG,CAAC,IAAI,CAAC;YACL,QAAQ,EAAE,gBAAgB;YAC1B,KAAK,EAAE,WAAW,SAAS,cAAc;YACzC,QAAQ,EAAE,UAAU;YACpB,WAAW,EAAE,WAAW,SAAS,+BAA+B,MAAM,CAAC,WAAW,MAAM,KAAK,CAAC,WAAW,EAAE;YAC3G,MAAM,EAAE,MAAM,CAAC,MAAM,CAAC,WAAW,CAAC;YAClC,KAAK,EAAE,MAAM,CAAC,KAAK,CAAC,WAAW,CAAC;SACnC,CAAC,CAAC;IACP,CAAC;IAED,IAAI,MAAM,CAAC,UAAU,KAAK,KAAK,CAAC,UAAU,EAAE,CAAC;QACzC,GAAG,CAAC,IAAI,CAAC;YACL,QAAQ,EAAE,gBAAgB;YAC1B,KAAK,EAAE,WAAW,SAAS,aAAa;YACxC,QAAQ,EAAE,OAAO;YACjB,WAAW,EAAE,WAAW,SAAS,2BAA2B;YAC5D,MAAM,EAAE,MAAM,CAAC,MAAM,CAAC,UAAU,CAAC;YACjC,KAAK,EAAE,MAAM,CAAC,KAAK,CAAC,UAAU,CAAC;SAClC,CAAC,CAAC;IACP,CAAC;IAED,IAAI,MAAM,CAAC,QAAQ,KAAK,KAAK,CAAC,QAAQ,EAAE,CAAC;QACrC,GAAG,CAAC,IAAI,CAAC;YACL,QAAQ,EAAE,gBAAgB;YAC1B,KAAK,EAAE,WAAW,SAAS,WAAW;YACtC,QAAQ,EAAE,UAAU;YACpB,WAAW,EAAE,WAAW,SAAS,4BAA4B,MAAM,CAAC,QAAQ,MAAM,KAAK,CAAC,QAAQ,EAAE;YAClG,MAAM,EAAE,MAAM,CAAC,MAAM,CAAC,QAAQ,CAAC;YAC/B,KAAK,EAAE,MAAM,CAAC,KAAK,CAAC,QAAQ,CAAC;SAChC,CAAC,CAAC;IACP,CAAC;IAED,kBAAkB;IAClB,MAAM,aAAa,GAAG,MAAM,CAAC,cAAc,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,KAAK,CAAC,cAAc,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC;IAC3F,MAAM,WAAW,GAAG,KAAK,CAAC,cAAc,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,MAAM,CAAC,cAAc,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC;IACzF,IAAI,aAAa,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QAC3B,GAAG,CAAC,IAAI,CAAC;YACL,QAAQ,EAAE,gBAAgB;YAC1B,KAAK,EAAE,WAAW,SAAS,iBAAiB;YAC5C,QAAQ,EAAE,MAAM;YAChB,WAAW,EAAE,WAAW,SAAS,0BAA0B,aAAa,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG;YACtF,MAAM,EAAE,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC,cAAc,CAAC;YAC7C,KAAK,EAAE,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,cAAc,CAAC;SAC9C,CAAC,CAAC;IACP,CAAC;IACD,IAAI,WAAW,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QACzB,GAAG,CAAC,IAAI,CAAC;YACL,QAAQ,EAAE,gBAAgB;YAC1B,KAAK,EAAE,WAAW,SAAS,iBAAiB;YAC5C,QAAQ,EAAE,UAAU;YACpB,WAAW,EAAE,WAAW,SAAS,+BAA+B,WAAW,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG;YACzF,MAAM,EAAE,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC,cAAc,CAAC;YAC7C,KAAK,EAAE,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,cAAc,CAAC;SAC9C,CAAC,CAAC;IACP,CAAC;IAED,mBAAmB;IACnB,IAAI,MAAM,CAAC,aAAa,KAAK,KAAK,CAAC,aAAa,EAAE,CAAC;QAC/C,GAAG,CAAC,IAAI,CAAC;YACL,QAAQ,EAAE,gBAAgB;YAC1B,KAAK,EAAE,WAAW,SAAS,gBAAgB;YAC3C,QAAQ,EAAE,MAAM,CAAC,aAAa,IAAI,CAAC,KAAK,CAAC,aAAa,CAAC,CAAC,CAAC,UAAU,CAAC,CAAC,CAAC,OAAO;YAC7E,WAAW,EAAE,WAAW,SAAS,wBAAwB,MAAM,CAAC,aAAa,IAAI,MAAM,MAAM,KAAK,CAAC,aAAa,IAAI,MAAM,EAAE;YAC5H,MAAM,EAAE,MAAM,CAAC,aAAa,IAAI,IAAI;YACpC,KAAK,EAAE,KAAK,CAAC,aAAa,IAAI,IAAI;SACrC,CAAC,CAAC;IACP,CAAC;IAED,IAAI,MAAM,CAAC,iBAAiB,KAAK,KAAK,CAAC,iBAAiB,EAAE,CAAC;QACvD,GAAG,CAAC,IAAI,CAAC;YACL,QAAQ,EAAE,gBAAgB;YAC1B,KAAK,EAAE,WAAW,SAAS,oBAAoB;YAC/C,QAAQ,EAAE,OAAO;YACjB,WAAW,EAAE,WAAW,SAAS,wBAAwB;YACzD,MAAM,EAAE,MAAM,CAAC,iBAAiB;YAChC,KAAK,EAAE,KAAK,CAAC,iBAAiB;SACjC,CAAC,CAAC;IACP,CAAC;AACL,CAAC;AAED;;;GAGG;AACH,SAAS,YAAY,CACjB,MAAoB,EACpB,KAAmB,EACnB,GAAoB;IAEpB,gBAAgB;IAChB,IAAI,MAAM,CAAC,kBAAkB,KAAK,KAAK,CAAC,kBAAkB,EAAE,CAAC;QACzD,GAAG,CAAC,IAAI,CAAC;YACL,QAAQ,EAAE,iBAAiB;YAC3B,KAAK,EAAE,oBAAoB;YAC3B,QAAQ,EAAE,UAAU;YACpB,WAAW,EAAE,kEAAkE;YAC/E,MAAM,EAAE,MAAM,CAAC,kBAAkB;YACjC,KAAK,EAAE,KAAK,CAAC,kBAAkB;SAClC,CAAC,CAAC;IACP,CAAC;IAED,eAAe;IACf,IAAI,MAAM,CAAC,sBAAsB,KAAK,KAAK,CAAC,sBAAsB,EAAE,CAAC;QACjE,GAAG,CAAC,IAAI,CAAC;YACL,QAAQ,EAAE,gBAAgB;YAC1B,KAAK,EAAE,wBAAwB;YAC/B,QAAQ,EAAE,UAAU;YACpB,WAAW,EAAE,+DAA+D;YAC5E,MAAM,EAAE,MAAM,CAAC,sBAAsB;YACrC,KAAK,EAAE,KAAK,CAAC,sBAAsB;SACtC,CAAC,CAAC;IACP,CAAC;IAED,uBAAuB;IACvB,IAAI,MAAM,CAAC,mBAAmB,CAAC,aAAa,KAAK,KAAK,CAAC,mBAAmB,CAAC,aAAa,EAAE,CAAC;QACvF,MAAM,QAAQ,GAAkB,KAAK,CAAC,mBAAmB,CAAC,aAAa,KAAK,IAAI;YAC5E,CAAC,CAAC,OAAO,CAAC,2CAA2C;YACrD,CAAC,CAAC,MAAM,CAAC;QACb,GAAG,CAAC,IAAI,CAAC;YACL,QAAQ,EAAE,qBAAqB;YAC/B,KAAK,EAAE,eAAe;YACtB,QAAQ;YACR,WAAW,EAAE,wBAAwB,MAAM,CAAC,mBAAmB,CAAC,aAAa,IAAI,WAAW,MAAM,KAAK,CAAC,mBAAmB,CAAC,aAAa,IAAI,WAAW,EAAE;YAC1J,MAAM,EAAE,MAAM,CAAC,MAAM,CAAC,mBAAmB,CAAC,aAAa,CAAC;YACxD,KAAK,EAAE,MAAM,CAAC,KAAK,CAAC,mBAAmB,CAAC,aAAa,CAAC;SACzD,CAAC,CAAC;IACP,CAAC;IAED,IAAI,MAAM,CAAC,mBAAmB,CAAC,cAAc,KAAK,KAAK,CAAC,mBAAmB,CAAC,cAAc,EAAE,CAAC;QACzF,MAAM,QAAQ,GAAkB,KAAK,CAAC,mBAAmB,CAAC,cAAc,KAAK,IAAI;YAC7E,CAAC,CAAC,OAAO,CAAC,0CAA0C;YACpD,CAAC,CAAC,MAAM,CAAC;QACb,GAAG,CAAC,IAAI,CAAC;YACL,QAAQ,EAAE,qBAAqB;YAC/B,KAAK,EAAE,gBAAgB;YACvB,QAAQ;YACR,WAAW,EAAE,6BAA6B,MAAM,CAAC,mBAAmB,CAAC,cAAc,IAAI,WAAW,MAAM,KAAK,CAAC,mBAAmB,CAAC,cAAc,IAAI,WAAW,EAAE;YACjK,MAAM,EAAE,MAAM,CAAC,MAAM,CAAC,mBAAmB,CAAC,cAAc,CAAC;YACzD,KAAK,EAAE,MAAM,CAAC,KAAK,CAAC,mBAAmB,CAAC,cAAc,CAAC;SAC1D,CAAC,CAAC;IACP,CAAC;IAED,mBAAmB;IACnB,MAAM,QAAQ,GAAG,MAAM,CAAC,eAAe,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;IAClD,MAAM,OAAO,GAAG,KAAK,CAAC,eAAe,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;IAChD,IAAI,QAAQ,KAAK,OAAO,EAAE,CAAC;QACvB,GAAG,CAAC,IAAI,CAAC;YACL,QAAQ,EAAE,qBAAqB;YAC/B,KAAK,EAAE,iBAAiB;YACxB,QAAQ,EAAE,OAAO;YACjB,WAAW,EAAE,2DAA2D;YACxE,MAAM,EAAE,QAAQ,IAAI,IAAI;YACxB,KAAK,EAAE,OAAO,IAAI,IAAI;SACzB,CAAC,CAAC;IACP,CAAC;IAED,aAAa;IACb,IAAI,MAAM,CAAC,oBAAoB,KAAK,KAAK,CAAC,oBAAoB,EAAE,CAAC;QAC7D,GAAG,CAAC,IAAI,CAAC;YACL,QAAQ,EAAE,oBAAoB;YAC9B,KAAK,EAAE,sBAAsB;YAC7B,QAAQ,EAAE,OAAO;YACjB,WAAW,EAAE,2BAA2B;YACxC,MAAM,EAAE,MAAM,CAAC,oBAAoB;YACnC,KAAK,EAAE,KAAK,CAAC,oBAAoB;SACpC,CAAC,CAAC;IACP,CAAC;IAED,sBAAsB;IACtB,MAAM,iBAAiB,GAAG,MAAM,CAAC,kBAAkB,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;IAC9D,MAAM,gBAAgB,GAAG,KAAK,CAAC,kBAAkB,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;IAC5D,IAAI,iBAAiB,KAAK,gBAAgB,EAAE,CAAC;QACzC,GAAG,CAAC,IAAI,CAAC;YACL,QAAQ,EAAE,sBAAsB;YAChC,KAAK,EAAE,oBAAoB;YAC3B,QAAQ,EAAE,OAAO;YACjB,WAAW,EAAE,yEAAyE;YACtF,MAAM,EAAE,iBAAiB,IAAI,IAAI;YACjC,KAAK,EAAE,gBAAgB,IAAI,IAAI;SAClC,CAAC,CAAC;IACP,CAAC;IAED,cAAc;IACd,IAAI,MAAM,CAAC,sBAAsB,KAAK,KAAK,CAAC,sBAAsB,EAAE,CAAC;QACjE,GAAG,CAAC,IAAI,CAAC;YACL,QAAQ,EAAE,oBAAoB;YAC9B,KAAK,EAAE,wBAAwB;YAC/B,QAAQ,EAAE,OAAO;YACjB,WAAW,EAAE,mCAAmC;YAChD,MAAM,EAAE,MAAM,CAAC,sBAAsB;YACrC,KAAK,EAAE,KAAK,CAAC,sBAAsB;SACtC,CAAC,CAAC;IACP,CAAC;IAED,sBAAsB;IACtB,MAAM,gBAAgB,GAAG,MAAM,CAAC,kBAAkB,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;IAC7D,MAAM,eAAe,GAAG,KAAK,CAAC,kBAAkB,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;IAC3D,IAAI,gBAAgB,KAAK,eAAe,EAAE,CAAC;QACvC,GAAG,CAAC,IAAI,CAAC;YACL,QAAQ,EAAE,iBAAiB;YAC3B,KAAK,EAAE,oBAAoB;YAC3B,QAAQ,EAAE,OAAO;YACjB,WAAW,EAAE,+DAA+D;YAC5E,MAAM,EAAE,gBAAgB,IAAI,IAAI;YAChC,KAAK,EAAE,eAAe,IAAI,IAAI;SACjC,CAAC,CAAC;IACP,CAAC;AACL,CAAC;AAED;;;GAGG;AACH,SAAS,kBAAkB,CACvB,MAA6B,EAC7B,KAA4B,EAC5B,GAAoB;IAEpB,IAAI,MAAM,CAAC,aAAa,KAAK,KAAK,CAAC,aAAa,EAAE,CAAC;QAC/C,MAAM,SAAS,GAAG,cAAc,CAAC,cAAc,CAAC,KAAK,CAAC,aAAa,CAAC,CAAC;cAC/D,cAAc,CAAC,cAAc,CAAC,MAAM,CAAC,aAAa,CAAC,CAAC,CAAC;QAE3D,GAAG,CAAC,IAAI,CAAC;YACL,QAAQ,EAAE,gBAAgB;YAC1B,KAAK,EAAE,eAAe;YACtB,QAAQ,EAAE,SAAS,CAAC,CAAC,CAAC,UAAU,CAAC,CAAC,CAAC,MAAM;YACzC,WAAW,EAAE,oCAAoC,MAAM,CAAC,aAAa,MAAM,KAAK,CAAC,aAAa,EAAE;YAChG,MAAM,EAAE,MAAM,CAAC,aAAa;YAC5B,KAAK,EAAE,KAAK,CAAC,aAAa;SAC7B,CAAC,CAAC;IACP,CAAC;IAED,IAAI,MAAM,CAAC,mBAAmB,KAAK,KAAK,CAAC,mBAAmB,EAAE,CAAC;QAC3D,GAAG,CAAC,IAAI,CAAC;YACL,QAAQ,EAAE,gBAAgB;YAC1B,KAAK,EAAE,qBAAqB;YAC5B,QAAQ,EAAE,KAAK,CAAC,mBAAmB,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM;YACtD,WAAW,EAAE,8BAA8B,MAAM,CAAC,mBAAmB,MAAM,KAAK,CAAC,mBAAmB,EAAE;YACtG,MAAM,EAAE,MAAM,CAAC,MAAM,CAAC,mBAAmB,CAAC;YAC1C,KAAK,EAAE,MAAM,CAAC,KAAK,CAAC,mBAAmB,CAAC;SAC3C,CAAC,CAAC;IACP,CAAC;AACL,CAAC;AAED;;;GAGG;AACH,SAAS,cAAc,CAAC,IAA4C;IAChE,QAAQ,IAAI,EAAE,CAAC;QACX,KAAK,UAAU,CAAC,CAAC,OAAO,UAAU,CAAC;QACnC,KAAK,MAAM,CAAC,CAAC,OAAO,OAAO,CAAC;QAC5B,KAAK,QAAQ,CAAC,CAAC,OAAO,MAAM,CAAC;QAC7B,KAAK,KAAK,CAAC,CAAC,OAAO,UAAU,CAAC;IAClC,CAAC;AACL,CAAC;AAED;;;GAGG;AACH,SAAS,gBAAgB,CACrB,MAA2B,EAC3B,KAA0B,EAC1B,GAAoB;IAEpB,MAAM,gBAAgB,GAAG,CAAC,YAAY,EAAE,SAAS,EAAE,YAAY,EAAE,QAAQ,EAAE,gBAAgB,CAAU,CAAC;IAEtG,KAAK,MAAM,IAAI,IAAI,gBAAgB,EAAE,CAAC;QAClC,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,IAAI,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC;YAC/B,GAAG,CAAC,IAAI,CAAC;gBACL,QAAQ,EAAE,cAAc;gBACxB,KAAK,EAAE,IAAI;gBACX,QAAQ,EAAE,UAAU;gBACpB,WAAW,EAAE,mBAAmB,IAAI,uCAAuC;gBAC3E,MAAM,EAAE,OAAO;gBACf,KAAK,EAAE,MAAM;aAChB,CAAC,CAAC;QACP,CAAC;aAAM,IAAI,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC;YACtC,GAAG,CAAC,IAAI,CAAC;gBACL,QAAQ,EAAE,cAAc;gBACxB,KAAK,EAAE,IAAI;gBACX,QAAQ,EAAE,MAAM;gBAChB,WAAW,EAAE,iBAAiB,IAAI,sCAAsC;gBACxE,MAAM,EAAE,MAAM;gBACd,KAAK,EAAE,OAAO;aACjB,CAAC,CAAC;QACP,CAAC;IACL,CAAC;AACL,CAAC;AAED,+EAA+E;AAC/E,kBAAkB;AAClB,+EAA+E;AAE/E;;;;;GAKG;AACH,MAAM,UAAU,gBAAgB,CAAC,MAA0B;IACvD,IAAI,MAAM,CAAC,MAAM,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QAC7B,OAAO,IAAI,MAAM,CAAC,QAAQ,iCAAiC,CAAC;IAChE,CAAC;IAED,MAAM,KAAK,GAAa;QACpB,IAAI,MAAM,CAAC,QAAQ,oBAAoB,MAAM,CAAC,MAAM,CAAC,MAAM,6BAA6B,MAAM,CAAC,WAAW,EAAE;QAC5G,EAAE;KACL,CAAC;IAEF,KAAK,MAAM,KAAK,IAAI,MAAM,CAAC,MAAM,EAAE,CAAC;QAChC,KAAK,CAAC,IAAI,CAAC,MAAM,KAAK,CAAC,QAAQ,KAAK,KAAK,CAAC,KAAK,KAAK,KAAK,CAAC,WAAW,EAAE,CAAC,CAAC;QACzE,KAAK,CAAC,IAAI,CAAC,YAAY,WAAW,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC;IACjD,CAAC;IAED,OAAO,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;AAC5B,CAAC;AAED;;;GAGG;AACH,MAAM,UAAU,iBAAiB,CAAC,MAAgC;IAC9D,IAAI,MAAM,CAAC,MAAM,KAAK,CAAC;QAAE,OAAO,EAAE,CAAC;IAEnC,MAAM,KAAK,GAAa,CAAC,oBAAoB,CAAC,CAAC;IAE/C,KAAK,MAAM,KAAK,IAAI,MAAM,EAAE,CAAC;QACzB,KAAK,CAAC,IAAI,CAAC,uBAAuB,SAAS,CAAC,KAAK,CAAC,QAAQ,CAAC,YAAY,SAAS,CAAC,KAAK,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;QACnG,KAAK,CAAC,IAAI,CAAC,oBAAoB,SAAS,CAAC,KAAK,CAAC,WAAW,CAAC,gBAAgB,CAAC,CAAC;QAC7E,IAAI,KAAK,CAAC,MAAM,KAAK,IAAI;YAAE,KAAK,CAAC,IAAI,CAAC,eAAe,SAAS,CAAC,KAAK,CAAC,MAAM,CAAC,WAAW,CAAC,CAAC;QACzF,IAAI,KAAK,CAAC,KAAK,KAAK,IAAI;YAAE,KAAK,CAAC,IAAI,CAAC,cAAc,SAAS,CAAC,KAAK,CAAC,KAAK,CAAC,UAAU,CAAC,CAAC;QACrF,KAAK,CAAC,IAAI,CAAC,aAAa,CAAC,CAAC;IAC9B,CAAC;IAED,KAAK,CAAC,IAAI,CAAC,qBAAqB,CAAC,CAAC;IAClC,OAAO,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;AAC5B,CAAC;AAED,+EAA+E;AAC/E,UAAU;AACV,+EAA+E;AAE/E,SAAS,QAAQ,CAAC,CAAS,EAAE,MAAc;IACvC,OAAO,CAAC,CAAC,MAAM,GAAG,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,EAAE,MAAM,GAAG,CAAC,CAAC,GAAG,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC;AAClE,CAAC;AAED;;;GAGG;AACH,SAAS,WAAW,CAAC,KAAoB;IACrC,IAAI,KAAK,CAAC,MAAM,KAAK,IAAI,IAAI,KAAK,CAAC,KAAK,KAAK,IAAI,EAAE,CAAC;QAChD,OAAO,GAAG,QAAQ,CAAC,KAAK,CAAC,MAAM,EAAE,EAAE,CAAC,MAAM,QAAQ,CAAC,KAAK,CAAC,KAAK,EAAE,EAAE,CAAC,EAAE,CAAC;IAC1E,CAAC;IACD,OAAO,KAAK,CAAC,KAAK,KAAK,IAAI;QACvB,CAAC,CAAC,WAAW,QAAQ,CAAC,KAAK,CAAC,KAAK,EAAE,EAAE,CAAC,EAAE;QACxC,CAAC,CAAC,aAAa,QAAQ,CAAC,KAAK,CAAC,MAAO,EAAE,EAAE,CAAC,EAAE,CAAC;AACrD,CAAC;AAED,SAAS,SAAS,CAAC,CAAS;IACxB,OAAO,CAAC;SACH,OAAO,CAAC,IAAI,EAAE,OAAO,CAAC;SACtB,OAAO,CAAC,IAAI,EAAE,MAAM,CAAC;SACrB,OAAO,CAAC,IAAI,EAAE,MAAM,CAAC;SACrB,OAAO,CAAC,IAAI,EAAE,QAAQ,CAAC,CAAC;AACjC,CAAC"}