dino-spec 14.0.1 → 14.1.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +37 -1
- package/dist/core/agents/ambiguity-resolver.d.ts +118 -0
- package/dist/core/agents/ambiguity-resolver.d.ts.map +1 -0
- package/dist/core/agents/ambiguity-resolver.js +327 -0
- package/dist/core/agents/ambiguity-resolver.js.map +1 -0
- package/dist/core/agents/confidence-gate.d.ts +99 -0
- package/dist/core/agents/confidence-gate.d.ts.map +1 -0
- package/dist/core/agents/confidence-gate.js +295 -0
- package/dist/core/agents/confidence-gate.js.map +1 -0
- package/dist/core/agents/feedback-collector.d.ts +108 -0
- package/dist/core/agents/feedback-collector.d.ts.map +1 -0
- package/dist/core/agents/feedback-collector.js +313 -0
- package/dist/core/agents/feedback-collector.js.map +1 -0
- package/dist/core/agents/parallel-reviewer.d.ts +88 -0
- package/dist/core/agents/parallel-reviewer.d.ts.map +1 -0
- package/dist/core/agents/parallel-reviewer.js +459 -0
- package/dist/core/agents/parallel-reviewer.js.map +1 -0
- package/dist/core/agents/reviewer-loop.d.ts +102 -0
- package/dist/core/agents/reviewer-loop.d.ts.map +1 -0
- package/dist/core/agents/reviewer-loop.js +373 -0
- package/dist/core/agents/reviewer-loop.js.map +1 -0
- package/dist/core/agents/skill-auditor.d.ts +82 -0
- package/dist/core/agents/skill-auditor.d.ts.map +1 -0
- package/dist/core/agents/skill-auditor.js +278 -0
- package/dist/core/agents/skill-auditor.js.map +1 -0
- package/dist/mcp/registry.d.ts +1 -1
- package/dist/mcp/registry.d.ts.map +1 -1
- package/dist/mcp/registry.js +1 -0
- package/dist/mcp/registry.js.map +1 -1
- package/dist/mcp/tools/feedback.d.ts +63 -0
- package/dist/mcp/tools/feedback.d.ts.map +1 -0
- package/dist/mcp/tools/feedback.js +255 -0
- package/dist/mcp/tools/feedback.js.map +1 -0
- package/package.json +1 -1
|
@@ -0,0 +1,255 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Feedback MCP Tools - v14.1.0
|
|
3
|
+
*
|
|
4
|
+
* MCP tools for collecting and managing reviewer feedback.
|
|
5
|
+
* Tracks quality across iterations and provides early stopping recommendations.
|
|
6
|
+
*/
|
|
7
|
+
import { defineTool, registry } from '../registry.js';
|
|
8
|
+
import { createFeedbackCollector, collectFeedback, checkEarlyStopping, extractLearnings, formatFeedbackState, formatEarlyStoppingResult, resolveFeedback, resolveIteration, } from '../../core/agents/feedback-collector.js';
|
|
9
|
+
// =============================================================================
|
|
10
|
+
// State Management
|
|
11
|
+
// =============================================================================
|
|
12
|
+
// In-memory state (per session)
|
|
13
|
+
let collectorState = createFeedbackCollector();
|
|
14
|
+
/**
|
|
15
|
+
* Reset the feedback collector state
|
|
16
|
+
*/
|
|
17
|
+
export function resetFeedbackCollector() {
|
|
18
|
+
collectorState = createFeedbackCollector();
|
|
19
|
+
}
|
|
20
|
+
/**
|
|
21
|
+
* Get current collector state (for testing)
|
|
22
|
+
*/
|
|
23
|
+
export function getCollectorState() {
|
|
24
|
+
return collectorState;
|
|
25
|
+
}
|
|
26
|
+
/**
|
|
27
|
+
* Collect feedback from a review
|
|
28
|
+
*/
|
|
29
|
+
async function handleCollectFeedback(params, _projectDir) {
|
|
30
|
+
const iteration = parseInt(params.iteration, 10);
|
|
31
|
+
if (isNaN(iteration)) {
|
|
32
|
+
return 'Error: iteration must be a number';
|
|
33
|
+
}
|
|
34
|
+
let findings;
|
|
35
|
+
try {
|
|
36
|
+
findings = JSON.parse(params.findings);
|
|
37
|
+
}
|
|
38
|
+
catch {
|
|
39
|
+
return 'Error: findings must be valid JSON';
|
|
40
|
+
}
|
|
41
|
+
// Build mock review result
|
|
42
|
+
const reviewResult = {
|
|
43
|
+
verdict: params.verdict || 'needs-discussion',
|
|
44
|
+
approved: params.verdict === 'approve',
|
|
45
|
+
blocking: params.verdict === 'request-changes',
|
|
46
|
+
findings,
|
|
47
|
+
summary: `Review with ${findings.length} finding(s)`,
|
|
48
|
+
reviewerId: 'manual',
|
|
49
|
+
timestamp: new Date(),
|
|
50
|
+
tokensUsed: 0,
|
|
51
|
+
};
|
|
52
|
+
// Collect feedback
|
|
53
|
+
collectorState = collectFeedback(collectorState, reviewResult, iteration);
|
|
54
|
+
// Check early stopping
|
|
55
|
+
const stopping = checkEarlyStopping(collectorState);
|
|
56
|
+
const lines = [
|
|
57
|
+
formatFeedbackState(collectorState),
|
|
58
|
+
'',
|
|
59
|
+
formatEarlyStoppingResult(stopping),
|
|
60
|
+
];
|
|
61
|
+
return lines.join('\n');
|
|
62
|
+
}
|
|
63
|
+
export const collectFeedbackTool = defineTool({
|
|
64
|
+
name: 'dino_feedback_collect',
|
|
65
|
+
description: 'Collect feedback from a code review for quality tracking (v14.1.0)',
|
|
66
|
+
category: 'feedback',
|
|
67
|
+
tier: 'verification',
|
|
68
|
+
inputSchema: {
|
|
69
|
+
type: 'object',
|
|
70
|
+
properties: {
|
|
71
|
+
iteration: {
|
|
72
|
+
type: 'string',
|
|
73
|
+
description: 'Current iteration number',
|
|
74
|
+
},
|
|
75
|
+
findings: {
|
|
76
|
+
type: 'string',
|
|
77
|
+
description: 'Review findings as JSON array: [{type, severity, file, message}]',
|
|
78
|
+
},
|
|
79
|
+
verdict: {
|
|
80
|
+
type: 'string',
|
|
81
|
+
description: 'Review verdict: approve, request-changes, needs-discussion',
|
|
82
|
+
enum: ['approve', 'request-changes', 'needs-discussion'],
|
|
83
|
+
},
|
|
84
|
+
},
|
|
85
|
+
required: ['iteration', 'findings'],
|
|
86
|
+
},
|
|
87
|
+
handler: handleCollectFeedback,
|
|
88
|
+
whenToUse: 'After a code review to track quality metrics and determine if early stopping is needed',
|
|
89
|
+
relatedTools: ['dino_feedback_status', 'dino_feedback_learnings', 'dino_feedback_resolve'],
|
|
90
|
+
version: 'v14.1.0',
|
|
91
|
+
});
|
|
92
|
+
/**
|
|
93
|
+
* View current feedback status
|
|
94
|
+
*/
|
|
95
|
+
async function handleFeedbackStatus(params, _projectDir) {
|
|
96
|
+
const showHistory = params.showHistory?.toLowerCase() === 'true';
|
|
97
|
+
const lines = [formatFeedbackState(collectorState)];
|
|
98
|
+
// Check early stopping
|
|
99
|
+
const stopping = checkEarlyStopping(collectorState);
|
|
100
|
+
lines.push('');
|
|
101
|
+
lines.push(formatEarlyStoppingResult(stopping));
|
|
102
|
+
if (showHistory && collectorState.history.length > 0) {
|
|
103
|
+
lines.push('');
|
|
104
|
+
lines.push('### Full History');
|
|
105
|
+
for (const entry of collectorState.history) {
|
|
106
|
+
lines.push(`| ${entry.iteration} | ${entry.score} | ${entry.criticalCount}C/${entry.majorCount}M/${entry.minorCount}m | ${entry.timestamp.toISOString()} |`);
|
|
107
|
+
}
|
|
108
|
+
}
|
|
109
|
+
return lines.join('\n');
|
|
110
|
+
}
|
|
111
|
+
export const feedbackStatusTool = defineTool({
|
|
112
|
+
name: 'dino_feedback_status',
|
|
113
|
+
description: 'View current feedback collector status and quality metrics (v14.1.0)',
|
|
114
|
+
category: 'feedback',
|
|
115
|
+
tier: 'verification',
|
|
116
|
+
inputSchema: {
|
|
117
|
+
type: 'object',
|
|
118
|
+
properties: {
|
|
119
|
+
showHistory: {
|
|
120
|
+
type: 'string',
|
|
121
|
+
description: 'Show full quality history (true/false)',
|
|
122
|
+
},
|
|
123
|
+
},
|
|
124
|
+
},
|
|
125
|
+
handler: handleFeedbackStatus,
|
|
126
|
+
whenToUse: 'To check current quality score, trend, and early stopping status',
|
|
127
|
+
relatedTools: ['dino_feedback_collect', 'dino_feedback_learnings', 'dino_feedback_reset'],
|
|
128
|
+
version: 'v14.1.0',
|
|
129
|
+
});
|
|
130
|
+
/**
|
|
131
|
+
* Extract learnings from collected feedback
|
|
132
|
+
*/
|
|
133
|
+
async function handleFeedbackLearnings(params, _projectDir) {
|
|
134
|
+
const limit = params.limit ? parseInt(params.limit, 10) : 10;
|
|
135
|
+
const learnings = extractLearnings(collectorState);
|
|
136
|
+
const limited = learnings.slice(0, limit);
|
|
137
|
+
if (limited.length === 0) {
|
|
138
|
+
return 'No learnings to extract from current feedback.';
|
|
139
|
+
}
|
|
140
|
+
const lines = [
|
|
141
|
+
'## Learnings for Next Iteration',
|
|
142
|
+
'',
|
|
143
|
+
`Extracted from iteration ${collectorState.currentIteration}:`,
|
|
144
|
+
'',
|
|
145
|
+
];
|
|
146
|
+
for (const learning of limited) {
|
|
147
|
+
lines.push(`- ${learning}`);
|
|
148
|
+
}
|
|
149
|
+
if (learnings.length > limit) {
|
|
150
|
+
lines.push('');
|
|
151
|
+
lines.push(`_...and ${learnings.length - limit} more_`);
|
|
152
|
+
}
|
|
153
|
+
return lines.join('\n');
|
|
154
|
+
}
|
|
155
|
+
export const feedbackLearningsTool = defineTool({
|
|
156
|
+
name: 'dino_feedback_learnings',
|
|
157
|
+
description: 'Extract learnings from feedback for the next iteration (v14.1.0)',
|
|
158
|
+
category: 'feedback',
|
|
159
|
+
tier: 'verification',
|
|
160
|
+
inputSchema: {
|
|
161
|
+
type: 'object',
|
|
162
|
+
properties: {
|
|
163
|
+
limit: {
|
|
164
|
+
type: 'string',
|
|
165
|
+
description: 'Maximum number of learnings to return (default: 10)',
|
|
166
|
+
},
|
|
167
|
+
},
|
|
168
|
+
},
|
|
169
|
+
handler: handleFeedbackLearnings,
|
|
170
|
+
whenToUse: 'Before starting a new iteration to inject learnings from previous reviews',
|
|
171
|
+
relatedTools: ['dino_feedback_collect', 'dino_feedback_status', 'dino_feedback_resolve'],
|
|
172
|
+
version: 'v14.1.0',
|
|
173
|
+
});
|
|
174
|
+
/**
|
|
175
|
+
* Mark feedback as resolved
|
|
176
|
+
*/
|
|
177
|
+
async function handleFeedbackResolve(params, _projectDir) {
|
|
178
|
+
const { feedbackId } = params;
|
|
179
|
+
if (feedbackId.toLowerCase() === 'all') {
|
|
180
|
+
collectorState = resolveIteration(collectorState, collectorState.currentIteration);
|
|
181
|
+
return `Resolved all feedback for iteration ${collectorState.currentIteration}`;
|
|
182
|
+
}
|
|
183
|
+
const entry = collectorState.entries.find((e) => e.id === feedbackId);
|
|
184
|
+
if (!entry) {
|
|
185
|
+
return `Feedback not found: ${feedbackId}`;
|
|
186
|
+
}
|
|
187
|
+
collectorState = resolveFeedback(collectorState, feedbackId);
|
|
188
|
+
return `Resolved feedback: ${feedbackId}`;
|
|
189
|
+
}
|
|
190
|
+
export const feedbackResolveTool = defineTool({
|
|
191
|
+
name: 'dino_feedback_resolve',
|
|
192
|
+
description: 'Mark feedback as resolved (v14.1.0)',
|
|
193
|
+
category: 'feedback',
|
|
194
|
+
tier: 'verification',
|
|
195
|
+
inputSchema: {
|
|
196
|
+
type: 'object',
|
|
197
|
+
properties: {
|
|
198
|
+
feedbackId: {
|
|
199
|
+
type: 'string',
|
|
200
|
+
description: 'Feedback ID to resolve, or "all" for current iteration',
|
|
201
|
+
},
|
|
202
|
+
},
|
|
203
|
+
required: ['feedbackId'],
|
|
204
|
+
},
|
|
205
|
+
handler: handleFeedbackResolve,
|
|
206
|
+
whenToUse: 'After addressing feedback issues to mark them as resolved',
|
|
207
|
+
relatedTools: ['dino_feedback_collect', 'dino_feedback_status', 'dino_feedback_learnings'],
|
|
208
|
+
version: 'v14.1.0',
|
|
209
|
+
});
|
|
210
|
+
// =============================================================================
|
|
211
|
+
// Reset Tool
|
|
212
|
+
// =============================================================================
|
|
213
|
+
/**
|
|
214
|
+
* Reset feedback collector
|
|
215
|
+
*/
|
|
216
|
+
async function handleFeedbackReset(_params, _projectDir) {
|
|
217
|
+
resetFeedbackCollector();
|
|
218
|
+
return 'Feedback collector reset. Quality history cleared.';
|
|
219
|
+
}
|
|
220
|
+
export const feedbackResetTool = defineTool({
|
|
221
|
+
name: 'dino_feedback_reset',
|
|
222
|
+
description: 'Reset feedback collector state (v14.1.0)',
|
|
223
|
+
category: 'feedback',
|
|
224
|
+
tier: 'verification',
|
|
225
|
+
inputSchema: {
|
|
226
|
+
type: 'object',
|
|
227
|
+
properties: {},
|
|
228
|
+
},
|
|
229
|
+
handler: handleFeedbackReset,
|
|
230
|
+
whenToUse: 'To start fresh with a new feedback collection session',
|
|
231
|
+
relatedTools: ['dino_feedback_collect', 'dino_feedback_status'],
|
|
232
|
+
version: 'v14.1.0',
|
|
233
|
+
});
|
|
234
|
+
// =============================================================================
|
|
235
|
+
// Exports
|
|
236
|
+
// =============================================================================
|
|
237
|
+
/**
|
|
238
|
+
* All feedback tools
|
|
239
|
+
*/
|
|
240
|
+
export const feedbackTools = [
|
|
241
|
+
collectFeedbackTool,
|
|
242
|
+
feedbackStatusTool,
|
|
243
|
+
feedbackLearningsTool,
|
|
244
|
+
feedbackResolveTool,
|
|
245
|
+
feedbackResetTool,
|
|
246
|
+
];
|
|
247
|
+
/**
|
|
248
|
+
* Register feedback tools with the registry
|
|
249
|
+
*/
|
|
250
|
+
export function registerFeedbackTools() {
|
|
251
|
+
for (const tool of feedbackTools) {
|
|
252
|
+
registry.registerTool(tool);
|
|
253
|
+
}
|
|
254
|
+
}
|
|
255
|
+
//# sourceMappingURL=feedback.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"feedback.js","sourceRoot":"","sources":["../../../src/mcp/tools/feedback.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,EAAE,UAAU,EAAE,QAAQ,EAAE,MAAM,gBAAgB,CAAC;AAEtD,OAAO,EACL,uBAAuB,EACvB,eAAe,EACf,kBAAkB,EAClB,gBAAgB,EAChB,mBAAmB,EACnB,yBAAyB,EACzB,eAAe,EACf,gBAAgB,GAEjB,MAAM,yCAAyC,CAAC;AAGjD,gFAAgF;AAChF,mBAAmB;AACnB,gFAAgF;AAEhF,gCAAgC;AAChC,IAAI,cAAc,GAA2B,uBAAuB,EAAE,CAAC;AAEvE;;GAEG;AACH,MAAM,UAAU,sBAAsB;IACpC,cAAc,GAAG,uBAAuB,EAAE,CAAC;AAC7C,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,iBAAiB;IAC/B,OAAO,cAAc,CAAC;AACxB,CAAC;AAkBD;;GAEG;AACH,KAAK,UAAU,qBAAqB,CAClC,MAA4B,EAC5B,WAAmB;IAEnB,MAAM,SAAS,GAAG,QAAQ,CAAC,MAAM,CAAC,SAAS,EAAE,EAAE,CAAC,CAAC;IACjD,IAAI,KAAK,CAAC,SAAS,CAAC,EAAE,CAAC;QACrB,OAAO,mCAAmC,CAAC;IAC7C,CAAC;IAED,IAAI,QAAQ,CAAC;IACb,IAAI,CAAC;QACH,QAAQ,GAAG,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC;IACzC,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,oCAAoC,CAAC;IAC9C,CAAC;IAED,2BAA2B;IAC3B,MAAM,YAAY,GAAiB;QACjC,OAAO,EAAG,MAAM,CAAC,OAAmC,IAAI,kBAAkB;QAC1E,QAAQ,EAAE,MAAM,CAAC,OAAO,KAAK,SAAS;QACtC,QAAQ,EAAE,MAAM,CAAC,OAAO,KAAK,iBAAiB;QAC9C,QAAQ;QACR,OAAO,EAAE,eAAe,QAAQ,CAAC,MAAM,aAAa;QACpD,UAAU,EAAE,QAAQ;QACpB,SAAS,EAAE,IAAI,IAAI,EAAE;QACrB,UAAU,EAAE,CAAC;KACd,CAAC;IAEF,mBAAmB;IACnB,cAAc,GAAG,eAAe,CAAC,cAAc,EAAE,YAAY,EAAE,SAAS,CAAC,CAAC;IAE1E,uBAAuB;IACvB,MAAM,QAAQ,GAAG,kBAAkB,CAAC,cAAc,CAAC,CAAC;IAEpD,MAAM,KAAK,GAAa;QACtB,mBAAmB,CAAC,cAAc,CAAC;QACnC,EAAE;QACF,yBAAyB,CAAC,QAAQ,CAAC;KACpC,CAAC;IAEF,OAAO,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;AAC1B,CAAC;AAED,MAAM,CAAC,MAAM,mBAAmB,GAAyC,UAAU,CAAC;IAClF,IAAI,EAAE,uBAAuB;IAC7B,WAAW,EAAE,oEAAoE;IACjF,QAAQ,EAAE,UAAU;IACpB,IAAI,EAAE,cAAc;IACpB,WAAW,EAAE;QACX,IAAI,EAAE,QAAQ;QACd,UAAU,EAAE;YACV,SAAS,EAAE;gBACT,IAAI,EAAE,QAAQ;gBACd,WAAW,EAAE,0BAA0B;aACxC;YACD,QAAQ,EAAE;gBACR,IAAI,EAAE,QAAQ;gBACd,WAAW,EAAE,kEAAkE;aAChF;YACD,OAAO,EAAE;gBACP,IAAI,EAAE,QAAQ;gBACd,WAAW,EAAE,4DAA4D;gBACzE,IAAI,EAAE,CAAC,SAAS,EAAE,iBAAiB,EAAE,kBAAkB,CAAC;aACzD;SACF;QACD,QAAQ,EAAE,CAAC,WAAW,EAAE,UAAU,CAAC;KACpC;IACD,OAAO,EAAE,qBAAqB;IAC9B,SAAS,EAAE,wFAAwF;IACnG,YAAY,EAAE,CAAC,sBAAsB,EAAE,yBAAyB,EAAE,uBAAuB,CAAC;IAC1F,OAAO,EAAE,SAAS;CACnB,CAAC,CAAC;AAcH;;GAEG;AACH,KAAK,UAAU,oBAAoB,CACjC,MAA2B,EAC3B,WAAmB;IAEnB,MAAM,WAAW,GAAG,MAAM,CAAC,WAAW,EAAE,WAAW,EAAE,KAAK,MAAM,CAAC;IAEjE,MAAM,KAAK,GAAa,CAAC,mBAAmB,CAAC,cAAc,CAAC,CAAC,CAAC;IAE9D,uBAAuB;IACvB,MAAM,QAAQ,GAAG,kBAAkB,CAAC,cAAc,CAAC,CAAC;IACpD,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;IACf,KAAK,CAAC,IAAI,CAAC,yBAAyB,CAAC,QAAQ,CAAC,CAAC,CAAC;IAEhD,IAAI,WAAW,IAAI,cAAc,CAAC,OAAO,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QACrD,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;QACf,KAAK,CAAC,IAAI,CAAC,kBAAkB,CAAC,CAAC;QAC/B,KAAK,MAAM,KAAK,IAAI,cAAc,CAAC,OAAO,EAAE,CAAC;YAC3C,KAAK,CAAC,IAAI,CACR,KAAK,KAAK,CAAC,SAAS,MAAM,KAAK,CAAC,KAAK,MAAM,KAAK,CAAC,aAAa,KAAK,KAAK,CAAC,UAAU,KAAK,KAAK,CAAC,UAAU,OAAO,KAAK,CAAC,SAAS,CAAC,WAAW,EAAE,IAAI,CACjJ,CAAC;QACJ,CAAC;IACH,CAAC;IAED,OAAO,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;AAC1B,CAAC;AAED,MAAM,CAAC,MAAM,kBAAkB,GAAwC,UAAU,CAAC;IAChF,IAAI,EAAE,sBAAsB;IAC5B,WAAW,EAAE,sEAAsE;IACnF,QAAQ,EAAE,UAAU;IACpB,IAAI,EAAE,cAAc;IACpB,WAAW,EAAE;QACX,IAAI,EAAE,QAAQ;QACd,UAAU,EAAE;YACV,WAAW,EAAE;gBACX,IAAI,EAAE,QAAQ;gBACd,WAAW,EAAE,wCAAwC;aACtD;SACF;KACF;IACD,OAAO,EAAE,oBAAoB;IAC7B,SAAS,EAAE,kEAAkE;IAC7E,YAAY,EAAE,CAAC,uBAAuB,EAAE,yBAAyB,EAAE,qBAAqB,CAAC;IACzF,OAAO,EAAE,SAAS;CACnB,CAAC,CAAC;AAcH;;GAEG;AACH,KAAK,UAAU,uBAAuB,CACpC,MAA8B,EAC9B,WAAmB;IAEnB,MAAM,KAAK,GAAG,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC,QAAQ,CAAC,MAAM,CAAC,KAAK,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC;IAE7D,MAAM,SAAS,GAAG,gBAAgB,CAAC,cAAc,CAAC,CAAC;IACnD,MAAM,OAAO,GAAG,SAAS,CAAC,KAAK,CAAC,CAAC,EAAE,KAAK,CAAC,CAAC;IAE1C,IAAI,OAAO,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QACzB,OAAO,gDAAgD,CAAC;IAC1D,CAAC;IAED,MAAM,KAAK,GAAa;QACtB,iCAAiC;QACjC,EAAE;QACF,4BAA4B,cAAc,CAAC,gBAAgB,GAAG;QAC9D,EAAE;KACH,CAAC;IAEF,KAAK,MAAM,QAAQ,IAAI,OAAO,EAAE,CAAC;QAC/B,KAAK,CAAC,IAAI,CAAC,KAAK,QAAQ,EAAE,CAAC,CAAC;IAC9B,CAAC;IAED,IAAI,SAAS,CAAC,MAAM,GAAG,KAAK,EAAE,CAAC;QAC7B,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;QACf,KAAK,CAAC,IAAI,CAAC,WAAW,SAAS,CAAC,MAAM,GAAG,KAAK,QAAQ,CAAC,CAAC;IAC1D,CAAC;IAED,OAAO,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;AAC1B,CAAC;AAED,MAAM,CAAC,MAAM,qBAAqB,GAA2C,UAAU,CAAC;IACtF,IAAI,EAAE,yBAAyB;IAC/B,WAAW,EAAE,kEAAkE;IAC/E,QAAQ,EAAE,UAAU;IACpB,IAAI,EAAE,cAAc;IACpB,WAAW,EAAE;QACX,IAAI,EAAE,QAAQ;QACd,UAAU,EAAE;YACV,KAAK,EAAE;gBACL,IAAI,EAAE,QAAQ;gBACd,WAAW,EAAE,qDAAqD;aACnE;SACF;KACF;IACD,OAAO,EAAE,uBAAuB;IAChC,SAAS,EAAE,2EAA2E;IACtF,YAAY,EAAE,CAAC,uBAAuB,EAAE,sBAAsB,EAAE,uBAAuB,CAAC;IACxF,OAAO,EAAE,SAAS;CACnB,CAAC,CAAC;AAcH;;GAEG;AACH,KAAK,UAAU,qBAAqB,CAClC,MAA4B,EAC5B,WAAmB;IAEnB,MAAM,EAAE,UAAU,EAAE,GAAG,MAAM,CAAC;IAE9B,IAAI,UAAU,CAAC,WAAW,EAAE,KAAK,KAAK,EAAE,CAAC;QACvC,cAAc,GAAG,gBAAgB,CAAC,cAAc,EAAE,cAAc,CAAC,gBAAgB,CAAC,CAAC;QACnF,OAAO,uCAAuC,cAAc,CAAC,gBAAgB,EAAE,CAAC;IAClF,CAAC;IAED,MAAM,KAAK,GAAG,cAAc,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,EAAE,KAAK,UAAU,CAAC,CAAC;IACtE,IAAI,CAAC,KAAK,EAAE,CAAC;QACX,OAAO,uBAAuB,UAAU,EAAE,CAAC;IAC7C,CAAC;IAED,cAAc,GAAG,eAAe,CAAC,cAAc,EAAE,UAAU,CAAC,CAAC;IAC7D,OAAO,sBAAsB,UAAU,EAAE,CAAC;AAC5C,CAAC;AAED,MAAM,CAAC,MAAM,mBAAmB,GAAyC,UAAU,CAAC;IAClF,IAAI,EAAE,uBAAuB;IAC7B,WAAW,EAAE,qCAAqC;IAClD,QAAQ,EAAE,UAAU;IACpB,IAAI,EAAE,cAAc;IACpB,WAAW,EAAE;QACX,IAAI,EAAE,QAAQ;QACd,UAAU,EAAE;YACV,UAAU,EAAE;gBACV,IAAI,EAAE,QAAQ;gBACd,WAAW,EAAE,wDAAwD;aACtE;SACF;QACD,QAAQ,EAAE,CAAC,YAAY,CAAC;KACzB;IACD,OAAO,EAAE,qBAAqB;IAC9B,SAAS,EAAE,2DAA2D;IACtE,YAAY,EAAE,CAAC,uBAAuB,EAAE,sBAAsB,EAAE,yBAAyB,CAAC;IAC1F,OAAO,EAAE,SAAS;CACnB,CAAC,CAAC;AAEH,gFAAgF;AAChF,aAAa;AACb,gFAAgF;AAEhF;;GAEG;AACH,KAAK,UAAU,mBAAmB,CAChC,OAA8B,EAC9B,WAAmB;IAEnB,sBAAsB,EAAE,CAAC;IACzB,OAAO,oDAAoD,CAAC;AAC9D,CAAC;AAED,MAAM,CAAC,MAAM,iBAAiB,GAA0C,UAAU,CAAC;IACjF,IAAI,EAAE,qBAAqB;IAC3B,WAAW,EAAE,0CAA0C;IACvD,QAAQ,EAAE,UAAU;IACpB,IAAI,EAAE,cAAc;IACpB,WAAW,EAAE;QACX,IAAI,EAAE,QAAQ;QACd,UAAU,EAAE,EAAE;KACf;IACD,OAAO,EAAE,mBAAmB;IAC5B,SAAS,EAAE,uDAAuD;IAClE,YAAY,EAAE,CAAC,uBAAuB,EAAE,sBAAsB,CAAC;IAC/D,OAAO,EAAE,SAAS;CACnB,CAAC,CAAC;AAEH,gFAAgF;AAChF,UAAU;AACV,gFAAgF;AAEhF;;GAEG;AACH,MAAM,CAAC,MAAM,aAAa,GAAqB;IAC7C,mBAAqC;IACrC,kBAAoC;IACpC,qBAAuC;IACvC,mBAAqC;IACrC,iBAAmC;CACpC,CAAC;AAEF;;GAEG;AACH,MAAM,UAAU,qBAAqB;IACnC,KAAK,MAAM,IAAI,IAAI,aAAa,EAAE,CAAC;QACjC,QAAQ,CAAC,YAAY,CAAC,IAAI,CAAC,CAAC;IAC9B,CAAC;AACH,CAAC"}
|