midas-mcp 2.2.0 → 2.5.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/dist/analyzer.d.ts +14 -0
- package/dist/analyzer.d.ts.map +1 -1
- package/dist/analyzer.js +182 -67
- package/dist/analyzer.js.map +1 -1
- package/dist/cli.js +6 -6
- package/dist/cli.js.map +1 -1
- package/dist/config.js +1 -1
- package/dist/config.js.map +1 -1
- package/dist/context.d.ts +55 -0
- package/dist/context.d.ts.map +1 -0
- package/dist/context.js +336 -0
- package/dist/context.js.map +1 -0
- package/dist/security.d.ts +29 -0
- package/dist/security.d.ts.map +1 -0
- package/dist/security.js +72 -0
- package/dist/security.js.map +1 -0
- package/dist/server.d.ts.map +1 -1
- package/dist/server.js +13 -2
- package/dist/server.js.map +1 -1
- package/dist/tests/analyze.test.d.ts +2 -0
- package/dist/tests/analyze.test.d.ts.map +1 -0
- package/dist/tests/analyze.test.js +120 -0
- package/dist/tests/analyze.test.js.map +1 -0
- package/dist/tests/edge-cases.test.d.ts +2 -0
- package/dist/tests/edge-cases.test.d.ts.map +1 -0
- package/dist/tests/edge-cases.test.js +234 -0
- package/dist/tests/edge-cases.test.js.map +1 -0
- package/dist/tests/journal.test.d.ts +2 -0
- package/dist/tests/journal.test.d.ts.map +1 -0
- package/dist/tests/journal.test.js +184 -0
- package/dist/tests/journal.test.js.map +1 -0
- package/dist/tests/metrics.test.d.ts +2 -0
- package/dist/tests/metrics.test.d.ts.map +1 -0
- package/dist/tests/metrics.test.js +178 -0
- package/dist/tests/metrics.test.js.map +1 -0
- package/dist/tests/prompts.test.d.ts +2 -0
- package/dist/tests/prompts.test.d.ts.map +1 -0
- package/dist/tests/prompts.test.js +157 -0
- package/dist/tests/prompts.test.js.map +1 -0
- package/dist/tests/security.test.d.ts +2 -0
- package/dist/tests/security.test.d.ts.map +1 -0
- package/dist/tests/security.test.js +105 -0
- package/dist/tests/security.test.js.map +1 -0
- package/dist/tests/server.test.d.ts +2 -0
- package/dist/tests/server.test.d.ts.map +1 -0
- package/dist/tests/server.test.js +93 -0
- package/dist/tests/server.test.js.map +1 -0
- package/dist/tests/tracker.test.d.ts +2 -0
- package/dist/tests/tracker.test.d.ts.map +1 -0
- package/dist/tests/tracker.test.js +197 -0
- package/dist/tests/tracker.test.js.map +1 -0
- package/dist/tools/index.d.ts +1 -0
- package/dist/tools/index.d.ts.map +1 -1
- package/dist/tools/index.js +2 -0
- package/dist/tools/index.js.map +1 -1
- package/dist/tools/journal.d.ts.map +1 -1
- package/dist/tools/journal.js +15 -10
- package/dist/tools/journal.js.map +1 -1
- package/dist/tools/phase.d.ts +1 -0
- package/dist/tools/phase.d.ts.map +1 -1
- package/dist/tools/phase.js +55 -16
- package/dist/tools/phase.js.map +1 -1
- package/dist/tools/tornado.d.ts +2 -2
- package/dist/tools/verify.d.ts +137 -0
- package/dist/tools/verify.d.ts.map +1 -0
- package/dist/tools/verify.js +151 -0
- package/dist/tools/verify.js.map +1 -0
- package/dist/tracker.d.ts +86 -0
- package/dist/tracker.d.ts.map +1 -1
- package/dist/tracker.js +493 -47
- package/dist/tracker.js.map +1 -1
- package/dist/tui.d.ts.map +1 -1
- package/dist/tui.js +131 -15
- package/dist/tui.js.map +1 -1
- package/package.json +2 -3
package/dist/context.js
ADDED
|
@@ -0,0 +1,336 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Context Compression and Management for Midas
|
|
3
|
+
*
|
|
4
|
+
* Implements the "Lost in the Middle" principle:
|
|
5
|
+
* - BEGINNING: Stable context (methodology, current phase)
|
|
6
|
+
* - MIDDLE: Project context (summarized)
|
|
7
|
+
* - END: Recent context (full detail)
|
|
8
|
+
*/
|
|
9
|
+
import { existsSync, readFileSync, writeFileSync, mkdirSync } from 'fs';
|
|
10
|
+
import { join } from 'path';
|
|
11
|
+
import { loadState } from './state/phase.js';
|
|
12
|
+
import { loadTracker, getGatesStatus, getUnresolvedErrors } from './tracker.js';
|
|
13
|
+
import { getJournalEntries } from './tools/journal.js';
|
|
14
|
+
import { sanitizePath } from './security.js';
|
|
15
|
+
const MIDAS_DIR = '.midas';
|
|
16
|
+
const CACHE_FILE = 'context-cache.json';
|
|
17
|
+
// Token estimation (rough: 1 token ≈ 4 chars for English)
|
|
18
|
+
export function estimateTokens(text) {
|
|
19
|
+
return Math.ceil(text.length / 4);
|
|
20
|
+
}
|
|
21
|
+
function getCachePath(projectPath) {
|
|
22
|
+
return join(projectPath, MIDAS_DIR, CACHE_FILE);
|
|
23
|
+
}
|
|
24
|
+
function loadCache(projectPath) {
|
|
25
|
+
const path = getCachePath(projectPath);
|
|
26
|
+
if (existsSync(path)) {
|
|
27
|
+
try {
|
|
28
|
+
return JSON.parse(readFileSync(path, 'utf-8'));
|
|
29
|
+
}
|
|
30
|
+
catch {
|
|
31
|
+
return {};
|
|
32
|
+
}
|
|
33
|
+
}
|
|
34
|
+
return {};
|
|
35
|
+
}
|
|
36
|
+
function saveCache(projectPath, cache) {
|
|
37
|
+
const dir = join(projectPath, MIDAS_DIR);
|
|
38
|
+
if (!existsSync(dir)) {
|
|
39
|
+
mkdirSync(dir, { recursive: true });
|
|
40
|
+
}
|
|
41
|
+
writeFileSync(getCachePath(projectPath), JSON.stringify(cache, null, 2));
|
|
42
|
+
}
|
|
43
|
+
function getCachedSummary(projectPath, content, maxTokens) {
|
|
44
|
+
const cache = loadCache(projectPath);
|
|
45
|
+
const key = `${simpleHash(content)}-${maxTokens}`;
|
|
46
|
+
const entry = cache[key];
|
|
47
|
+
if (entry && Date.now() - entry.timestamp < 3600000) { // 1 hour cache
|
|
48
|
+
return entry.summary;
|
|
49
|
+
}
|
|
50
|
+
return null;
|
|
51
|
+
}
|
|
52
|
+
function setCachedSummary(projectPath, content, maxTokens, summary) {
|
|
53
|
+
const cache = loadCache(projectPath);
|
|
54
|
+
const key = `${simpleHash(content)}-${maxTokens}`;
|
|
55
|
+
cache[key] = {
|
|
56
|
+
summary,
|
|
57
|
+
timestamp: Date.now(),
|
|
58
|
+
originalTokens: estimateTokens(content),
|
|
59
|
+
summaryTokens: estimateTokens(summary),
|
|
60
|
+
};
|
|
61
|
+
// Keep cache size reasonable (max 100 entries)
|
|
62
|
+
const keys = Object.keys(cache);
|
|
63
|
+
if (keys.length > 100) {
|
|
64
|
+
const oldest = keys
|
|
65
|
+
.sort((a, b) => cache[a].timestamp - cache[b].timestamp)
|
|
66
|
+
.slice(0, 20);
|
|
67
|
+
oldest.forEach(k => delete cache[k]);
|
|
68
|
+
}
|
|
69
|
+
saveCache(projectPath, cache);
|
|
70
|
+
}
|
|
71
|
+
function simpleHash(str) {
|
|
72
|
+
let hash = 0;
|
|
73
|
+
for (let i = 0; i < str.length; i++) {
|
|
74
|
+
const char = str.charCodeAt(i);
|
|
75
|
+
hash = ((hash << 5) - hash) + char;
|
|
76
|
+
hash = hash & hash;
|
|
77
|
+
}
|
|
78
|
+
return Math.abs(hash).toString(36);
|
|
79
|
+
}
|
|
80
|
+
// ============================================================================
|
|
81
|
+
// COMPRESSION STRATEGIES
|
|
82
|
+
// ============================================================================
|
|
83
|
+
/**
|
|
84
|
+
* Truncate text to approximate token limit, preferring sentence boundaries
|
|
85
|
+
*/
|
|
86
|
+
export function truncateToTokens(text, maxTokens) {
|
|
87
|
+
const currentTokens = estimateTokens(text);
|
|
88
|
+
if (currentTokens <= maxTokens)
|
|
89
|
+
return text;
|
|
90
|
+
const targetChars = maxTokens * 4;
|
|
91
|
+
let truncated = text.slice(0, targetChars);
|
|
92
|
+
// Try to end at sentence boundary
|
|
93
|
+
const lastPeriod = truncated.lastIndexOf('. ');
|
|
94
|
+
const lastNewline = truncated.lastIndexOf('\n');
|
|
95
|
+
const boundary = Math.max(lastPeriod, lastNewline);
|
|
96
|
+
if (boundary > targetChars * 0.7) {
|
|
97
|
+
truncated = truncated.slice(0, boundary + 1);
|
|
98
|
+
}
|
|
99
|
+
return truncated + '...';
|
|
100
|
+
}
|
|
101
|
+
/**
|
|
102
|
+
* Extract key points from text (simple keyword-based)
|
|
103
|
+
*/
|
|
104
|
+
export function extractKeyPoints(text, maxPoints = 5) {
|
|
105
|
+
const lines = text.split('\n').filter(l => l.trim());
|
|
106
|
+
const points = [];
|
|
107
|
+
// Prioritize lines with key indicators
|
|
108
|
+
const keyIndicators = ['error', 'fix', 'implement', 'test', 'build', 'deploy', 'decision', 'chose', 'because'];
|
|
109
|
+
for (const line of lines) {
|
|
110
|
+
if (points.length >= maxPoints)
|
|
111
|
+
break;
|
|
112
|
+
const lower = line.toLowerCase();
|
|
113
|
+
if (keyIndicators.some(k => lower.includes(k))) {
|
|
114
|
+
points.push(line.trim().slice(0, 100));
|
|
115
|
+
}
|
|
116
|
+
}
|
|
117
|
+
// Fill with first lines if not enough
|
|
118
|
+
for (const line of lines) {
|
|
119
|
+
if (points.length >= maxPoints)
|
|
120
|
+
break;
|
|
121
|
+
if (!points.includes(line.trim().slice(0, 100))) {
|
|
122
|
+
points.push(line.trim().slice(0, 100));
|
|
123
|
+
}
|
|
124
|
+
}
|
|
125
|
+
return points;
|
|
126
|
+
}
|
|
127
|
+
/**
|
|
128
|
+
* Summarize journal entries to titles + key decisions
|
|
129
|
+
*/
|
|
130
|
+
export function summarizeJournalEntries(entries) {
|
|
131
|
+
if (entries.length === 0)
|
|
132
|
+
return 'No journal entries.';
|
|
133
|
+
const lines = [];
|
|
134
|
+
for (const entry of entries.slice(0, 5)) {
|
|
135
|
+
const date = entry.timestamp.slice(0, 10);
|
|
136
|
+
const keyPoints = extractKeyPoints(entry.conversation, 2);
|
|
137
|
+
lines.push(`- ${date}: ${entry.title}`);
|
|
138
|
+
keyPoints.forEach(p => lines.push(` > ${p.slice(0, 80)}`));
|
|
139
|
+
}
|
|
140
|
+
return lines.join('\n');
|
|
141
|
+
}
|
|
142
|
+
// ============================================================================
|
|
143
|
+
// CONTEXT BUILDING
|
|
144
|
+
// ============================================================================
|
|
145
|
+
const METHODOLOGY_COMPRESSED = `Golden Code: EAGLE_SIGHT (plan) → BUILD (code) → SHIP (deploy) → GROW (iterate)
|
|
146
|
+
BUILD cycle: RULES → INDEX → READ → RESEARCH → IMPLEMENT → TEST → DEBUG
|
|
147
|
+
If stuck: Tornado (research + logs + tests). If output doesn't fit: Horizon (expand context).
|
|
148
|
+
Gates must pass (build/test/lint) before advancing.`;
|
|
149
|
+
export function buildCompressedContext(projectPath, options = {}) {
|
|
150
|
+
const safePath = sanitizePath(projectPath);
|
|
151
|
+
const maxTokens = options.maxTokens || 4000;
|
|
152
|
+
const layers = [];
|
|
153
|
+
let totalTokens = 0;
|
|
154
|
+
// ─────────────────────────────────────────────────────────────────────────
|
|
155
|
+
// BEGINNING: Stable context (high attention)
|
|
156
|
+
// ─────────────────────────────────────────────────────────────────────────
|
|
157
|
+
// Layer 1: Methodology (always, ~100 tokens)
|
|
158
|
+
layers.push({
|
|
159
|
+
name: 'methodology',
|
|
160
|
+
priority: 'critical',
|
|
161
|
+
position: 'beginning',
|
|
162
|
+
content: METHODOLOGY_COMPRESSED,
|
|
163
|
+
tokens: estimateTokens(METHODOLOGY_COMPRESSED),
|
|
164
|
+
});
|
|
165
|
+
// Layer 2: Current state
|
|
166
|
+
const state = loadState(safePath);
|
|
167
|
+
const tracker = loadTracker(safePath);
|
|
168
|
+
const gatesStatus = getGatesStatus(safePath);
|
|
169
|
+
const stateContent = [
|
|
170
|
+
`Phase: ${state.current.phase}${'step' in state.current ? ` → ${state.current.step}` : ''}`,
|
|
171
|
+
`Gates: ${gatesStatus.allPass ? 'ALL PASS' : gatesStatus.failing.length > 0 ? `FAILING: ${gatesStatus.failing.join(', ')}` : 'not run'}`,
|
|
172
|
+
tracker.currentTask ? `Task: ${tracker.currentTask.description}` : '',
|
|
173
|
+
].filter(Boolean).join('\n');
|
|
174
|
+
layers.push({
|
|
175
|
+
name: 'current_state',
|
|
176
|
+
priority: 'critical',
|
|
177
|
+
position: 'beginning',
|
|
178
|
+
content: stateContent,
|
|
179
|
+
tokens: estimateTokens(stateContent),
|
|
180
|
+
});
|
|
181
|
+
// ─────────────────────────────────────────────────────────────────────────
|
|
182
|
+
// MIDDLE: Project context (lower attention, summarized)
|
|
183
|
+
// ─────────────────────────────────────────────────────────────────────────
|
|
184
|
+
// Layer 3: Journal summaries
|
|
185
|
+
const journalEntries = getJournalEntries({ projectPath: safePath, limit: 5 });
|
|
186
|
+
const journalSummary = summarizeJournalEntries(journalEntries);
|
|
187
|
+
layers.push({
|
|
188
|
+
name: 'journal_summary',
|
|
189
|
+
priority: 'medium',
|
|
190
|
+
position: 'middle',
|
|
191
|
+
content: `Past sessions:\n${journalSummary}`,
|
|
192
|
+
tokens: estimateTokens(journalSummary),
|
|
193
|
+
});
|
|
194
|
+
// Layer 4: Recent files (just names)
|
|
195
|
+
if (tracker.recentFiles.length > 0) {
|
|
196
|
+
const fileList = tracker.recentFiles.slice(0, 10).map(f => f.path).join(', ');
|
|
197
|
+
layers.push({
|
|
198
|
+
name: 'recent_files',
|
|
199
|
+
priority: 'low',
|
|
200
|
+
position: 'middle',
|
|
201
|
+
content: `Recently modified: ${fileList}`,
|
|
202
|
+
tokens: estimateTokens(fileList) + 20,
|
|
203
|
+
});
|
|
204
|
+
}
|
|
205
|
+
// ─────────────────────────────────────────────────────────────────────────
|
|
206
|
+
// END: Recent context (high attention, full detail)
|
|
207
|
+
// ─────────────────────────────────────────────────────────────────────────
|
|
208
|
+
// Layer 5: Unresolved errors (FULL - critical for debugging)
|
|
209
|
+
const errors = getUnresolvedErrors(safePath);
|
|
210
|
+
if (errors.length > 0) {
|
|
211
|
+
const errorContent = errors.slice(0, 3).map(e => {
|
|
212
|
+
const attempts = e.fixAttempts.length > 0
|
|
213
|
+
? ` (tried ${e.fixAttempts.length}x: ${e.fixAttempts.map(a => a.approach).join(', ')})`
|
|
214
|
+
: '';
|
|
215
|
+
return `ERROR: ${e.error}${attempts}`;
|
|
216
|
+
}).join('\n\n');
|
|
217
|
+
layers.push({
|
|
218
|
+
name: 'errors',
|
|
219
|
+
priority: 'high',
|
|
220
|
+
position: 'end',
|
|
221
|
+
content: errorContent,
|
|
222
|
+
tokens: estimateTokens(errorContent),
|
|
223
|
+
});
|
|
224
|
+
}
|
|
225
|
+
// Layer 6: Recent tool calls
|
|
226
|
+
if (tracker.recentToolCalls.length > 0) {
|
|
227
|
+
const toolContent = tracker.recentToolCalls.slice(0, 5).map(t => {
|
|
228
|
+
const ago = Math.round((Date.now() - t.timestamp) / 60000);
|
|
229
|
+
return `${t.tool} (${ago}m ago)`;
|
|
230
|
+
}).join('\n');
|
|
231
|
+
layers.push({
|
|
232
|
+
name: 'recent_tools',
|
|
233
|
+
priority: 'medium',
|
|
234
|
+
position: 'end',
|
|
235
|
+
content: `Recent actions:\n${toolContent}`,
|
|
236
|
+
tokens: estimateTokens(toolContent) + 20,
|
|
237
|
+
});
|
|
238
|
+
}
|
|
239
|
+
// Layer 7: Current task (if set)
|
|
240
|
+
if (options.taskDescription) {
|
|
241
|
+
layers.push({
|
|
242
|
+
name: 'current_task',
|
|
243
|
+
priority: 'critical',
|
|
244
|
+
position: 'end',
|
|
245
|
+
content: `CURRENT TASK: ${options.taskDescription}`,
|
|
246
|
+
tokens: estimateTokens(options.taskDescription) + 20,
|
|
247
|
+
});
|
|
248
|
+
}
|
|
249
|
+
// ─────────────────────────────────────────────────────────────────────────
|
|
250
|
+
// ASSEMBLE: Fit within token budget
|
|
251
|
+
// ─────────────────────────────────────────────────────────────────────────
|
|
252
|
+
// Sort by priority and position
|
|
253
|
+
const priorityOrder = { critical: 0, high: 1, medium: 2, low: 3 };
|
|
254
|
+
const positionOrder = { beginning: 0, end: 1, middle: 2 };
|
|
255
|
+
layers.sort((a, b) => {
|
|
256
|
+
const priorityDiff = priorityOrder[a.priority] - priorityOrder[b.priority];
|
|
257
|
+
if (priorityDiff !== 0)
|
|
258
|
+
return priorityDiff;
|
|
259
|
+
return positionOrder[a.position] - positionOrder[b.position];
|
|
260
|
+
});
|
|
261
|
+
// Include layers until token limit
|
|
262
|
+
const included = [];
|
|
263
|
+
let usedTokens = 0;
|
|
264
|
+
let truncated = false;
|
|
265
|
+
for (const layer of layers) {
|
|
266
|
+
if (usedTokens + layer.tokens <= maxTokens) {
|
|
267
|
+
included.push(layer);
|
|
268
|
+
usedTokens += layer.tokens;
|
|
269
|
+
}
|
|
270
|
+
else if (layer.priority === 'critical') {
|
|
271
|
+
// Always include critical, even if truncated
|
|
272
|
+
const available = maxTokens - usedTokens;
|
|
273
|
+
if (available > 100) {
|
|
274
|
+
const truncatedContent = truncateToTokens(layer.content, available);
|
|
275
|
+
included.push({
|
|
276
|
+
...layer,
|
|
277
|
+
content: truncatedContent,
|
|
278
|
+
tokens: estimateTokens(truncatedContent),
|
|
279
|
+
});
|
|
280
|
+
usedTokens += estimateTokens(truncatedContent);
|
|
281
|
+
truncated = true;
|
|
282
|
+
}
|
|
283
|
+
}
|
|
284
|
+
else {
|
|
285
|
+
truncated = true;
|
|
286
|
+
}
|
|
287
|
+
}
|
|
288
|
+
// Re-sort by position for final output
|
|
289
|
+
included.sort((a, b) => positionOrder[a.position] - positionOrder[b.position]);
|
|
290
|
+
return {
|
|
291
|
+
layers: included,
|
|
292
|
+
totalTokens: usedTokens,
|
|
293
|
+
truncated,
|
|
294
|
+
};
|
|
295
|
+
}
|
|
296
|
+
/**
|
|
297
|
+
* Convert compressed context to a single string for the API
|
|
298
|
+
*/
|
|
299
|
+
export function contextToString(context) {
|
|
300
|
+
const sections = [];
|
|
301
|
+
const beginning = context.layers.filter(l => l.position === 'beginning');
|
|
302
|
+
const middle = context.layers.filter(l => l.position === 'middle');
|
|
303
|
+
const end = context.layers.filter(l => l.position === 'end');
|
|
304
|
+
if (beginning.length > 0) {
|
|
305
|
+
sections.push('# METHODOLOGY & STATE\n' + beginning.map(l => l.content).join('\n\n'));
|
|
306
|
+
}
|
|
307
|
+
if (middle.length > 0) {
|
|
308
|
+
sections.push('# PROJECT CONTEXT\n' + middle.map(l => l.content).join('\n\n'));
|
|
309
|
+
}
|
|
310
|
+
if (end.length > 0) {
|
|
311
|
+
sections.push('# CURRENT SITUATION\n' + end.map(l => l.content).join('\n\n'));
|
|
312
|
+
}
|
|
313
|
+
return sections.join('\n\n---\n\n');
|
|
314
|
+
}
|
|
315
|
+
/**
|
|
316
|
+
* Get context stats for debugging/monitoring
|
|
317
|
+
*/
|
|
318
|
+
export function getContextStats(projectPath) {
|
|
319
|
+
const context = buildCompressedContext(projectPath);
|
|
320
|
+
const layerBreakdown = {};
|
|
321
|
+
for (const layer of context.layers) {
|
|
322
|
+
layerBreakdown[layer.name] = layer.tokens;
|
|
323
|
+
}
|
|
324
|
+
// Estimate what full context would be
|
|
325
|
+
const tracker = loadTracker(projectPath);
|
|
326
|
+
const journal = getJournalEntries({ projectPath, limit: 10 });
|
|
327
|
+
const fullEstimate = estimateTokens(METHODOLOGY_COMPRESSED) * 5 + // Full methodology
|
|
328
|
+
tracker.recentFiles.length * 500 + // File contents
|
|
329
|
+
journal.reduce((sum, j) => sum + estimateTokens(j.conversation), 0);
|
|
330
|
+
return {
|
|
331
|
+
estimatedTokens: context.totalTokens,
|
|
332
|
+
layerBreakdown,
|
|
333
|
+
compressionRatio: fullEstimate > 0 ? context.totalTokens / fullEstimate : 1,
|
|
334
|
+
};
|
|
335
|
+
}
|
|
336
|
+
//# sourceMappingURL=context.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"context.js","sourceRoot":"","sources":["../src/context.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAEH,OAAO,EAAE,UAAU,EAAE,YAAY,EAAE,aAAa,EAAE,SAAS,EAAE,MAAM,IAAI,CAAC;AACxE,OAAO,EAAE,IAAI,EAAE,MAAM,MAAM,CAAC;AAC5B,OAAO,EAAE,SAAS,EAA0B,MAAM,kBAAkB,CAAC;AACrE,OAAO,EAAE,WAAW,EAAE,cAAc,EAAE,mBAAmB,EAAqB,MAAM,cAAc,CAAC;AACnG,OAAO,EAAE,iBAAiB,EAAE,MAAM,oBAAoB,CAAC;AACvD,OAAO,EAAE,YAAY,EAAE,MAAM,eAAe,CAAC;AAE7C,MAAM,SAAS,GAAG,QAAQ,CAAC;AAC3B,MAAM,UAAU,GAAG,oBAAoB,CAAC;AAExC,0DAA0D;AAC1D,MAAM,UAAU,cAAc,CAAC,IAAY;IACzC,OAAO,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC;AACpC,CAAC;AAiCD,SAAS,YAAY,CAAC,WAAmB;IACvC,OAAO,IAAI,CAAC,WAAW,EAAE,SAAS,EAAE,UAAU,CAAC,CAAC;AAClD,CAAC;AAED,SAAS,SAAS,CAAC,WAAmB;IACpC,MAAM,IAAI,GAAG,YAAY,CAAC,WAAW,CAAC,CAAC;IACvC,IAAI,UAAU,CAAC,IAAI,CAAC,EAAE,CAAC;QACrB,IAAI,CAAC;YACH,OAAO,IAAI,CAAC,KAAK,CAAC,YAAY,CAAC,IAAI,EAAE,OAAO,CAAC,CAAC,CAAC;QACjD,CAAC;QAAC,MAAM,CAAC;YACP,OAAO,EAAE,CAAC;QACZ,CAAC;IACH,CAAC;IACD,OAAO,EAAE,CAAC;AACZ,CAAC;AAED,SAAS,SAAS,CAAC,WAAmB,EAAE,KAAmB;IACzD,MAAM,GAAG,GAAG,IAAI,CAAC,WAAW,EAAE,SAAS,CAAC,CAAC;IACzC,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,EAAE,CAAC;QACrB,SAAS,CAAC,GAAG,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;IACtC,CAAC;IACD,aAAa,CAAC,YAAY,CAAC,WAAW,CAAC,EAAE,IAAI,CAAC,SAAS,CAAC,KAAK,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC,CAAC;AAC3E,CAAC;AAED,SAAS,gBAAgB,CAAC,WAAmB,EAAE,OAAe,EAAE,SAAiB;IAC/E,MAAM,KAAK,GAAG,SAAS,CAAC,WAAW,CAAC,CAAC;IACrC,MAAM,GAAG,GAAG,GAAG,UAAU,CAAC,OAAO,CAAC,IAAI,SAAS,EAAE,CAAC;IAClD,MAAM,KAAK,GAAG,KAAK,CAAC,GAAG,CAAC,CAAC;IAEzB,IAAI,KAAK,IAAI,IAAI,CAAC,GAAG,EAAE,GAAG,KAAK,CAAC,SAAS,GAAG,OAAO,EAAE,CAAC,CAAC,eAAe;QACpE,OAAO,KAAK,CAAC,OAAO,CAAC;IACvB,CAAC;IACD,OAAO,IAAI,CAAC;AACd,CAAC;AAED,SAAS,gBAAgB,CAAC,WAAmB,EAAE,OAAe,EAAE,SAAiB,EAAE,OAAe;IAChG,MAAM,KAAK,GAAG,SAAS,CAAC,WAAW,CAAC,CAAC;IACrC,MAAM,GAAG,GAAG,GAAG,UAAU,CAAC,OAAO,CAAC,IAAI,SAAS,EAAE,CAAC;IAElD,KAAK,CAAC,GAAG,CAAC,GAAG;QACX,OAAO;QACP,SAAS,EAAE,IAAI,CAAC,GAAG,EAAE;QACrB,cAAc,EAAE,cAAc,CAAC,OAAO,CAAC;QACvC,aAAa,EAAE,cAAc,CAAC,OAAO,CAAC;KACvC,CAAC;IAEF,+CAA+C;IAC/C,MAAM,IAAI,GAAG,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;IAChC,IAAI,IAAI,CAAC,MAAM,GAAG,GAAG,EAAE,CAAC;QACtB,MAAM,MAAM,GAAG,IAAI;aAChB,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,SAAS,GAAG,KAAK,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC;aACvD,KAAK,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC;QAChB,MAAM,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,CAAC,OAAO,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC;IACvC,CAAC;IAED,SAAS,CAAC,WAAW,EAAE,KAAK,CAAC,CAAC;AAChC,CAAC;AAED,SAAS,UAAU,CAAC,GAAW;IAC7B,IAAI,IAAI,GAAG,CAAC,CAAC;IACb,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,GAAG,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE,CAAC;QACpC,MAAM,IAAI,GAAG,GAAG,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC;QAC/B,IAAI,GAAG,CAAC,CAAC,IAAI,IAAI,CAAC,CAAC,GAAG,IAAI,CAAC,GAAG,IAAI,CAAC;QACnC,IAAI,GAAG,IAAI,GAAG,IAAI,CAAC;IACrB,CAAC;IACD,OAAO,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC;AACrC,CAAC;AAED,+EAA+E;AAC/E,yBAAyB;AACzB,+EAA+E;AAE/E;;GAEG;AACH,MAAM,UAAU,gBAAgB,CAAC,IAAY,EAAE,SAAiB;IAC9D,MAAM,aAAa,GAAG,cAAc,CAAC,IAAI,CAAC,CAAC;IAC3C,IAAI,aAAa,IAAI,SAAS;QAAE,OAAO,IAAI,CAAC;IAE5C,MAAM,WAAW,GAAG,SAAS,GAAG,CAAC,CAAC;IAClC,IAAI,SAAS,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC,EAAE,WAAW,CAAC,CAAC;IAE3C,kCAAkC;IAClC,MAAM,UAAU,GAAG,SAAS,CAAC,WAAW,CAAC,IAAI,CAAC,CAAC;IAC/C,MAAM,WAAW,GAAG,SAAS,CAAC,WAAW,CAAC,IAAI,CAAC,CAAC;IAChD,MAAM,QAAQ,GAAG,IAAI,CAAC,GAAG,CAAC,UAAU,EAAE,WAAW,CAAC,CAAC;IAEnD,IAAI,QAAQ,GAAG,WAAW,GAAG,GAAG,EAAE,CAAC;QACjC,SAAS,GAAG,SAAS,CAAC,KAAK,CAAC,CAAC,EAAE,QAAQ,GAAG,CAAC,CAAC,CAAC;IAC/C,CAAC;IAED,OAAO,SAAS,GAAG,KAAK,CAAC;AAC3B,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,gBAAgB,CAAC,IAAY,EAAE,YAAoB,CAAC;IAClE,MAAM,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC,CAAC;IACrD,MAAM,MAAM,GAAa,EAAE,CAAC;IAE5B,uCAAuC;IACvC,MAAM,aAAa,GAAG,CAAC,OAAO,EAAE,KAAK,EAAE,WAAW,EAAE,MAAM,EAAE,OAAO,EAAE,QAAQ,EAAE,UAAU,EAAE,OAAO,EAAE,SAAS,CAAC,CAAC;IAE/G,KAAK,MAAM,IAAI,IAAI,KAAK,EAAE,CAAC;QACzB,IAAI,MAAM,CAAC,MAAM,IAAI,SAAS;YAAE,MAAM;QACtC,MAAM,KAAK,GAAG,IAAI,CAAC,WAAW,EAAE,CAAC;QACjC,IAAI,aAAa,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC;YAC/C,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,EAAE,CAAC,KAAK,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC,CAAC;QACzC,CAAC;IACH,CAAC;IAED,sCAAsC;IACtC,KAAK,MAAM,IAAI,IAAI,KAAK,EAAE,CAAC;QACzB,IAAI,MAAM,CAAC,MAAM,IAAI,SAAS;YAAE,MAAM;QACtC,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,IAAI,CAAC,IAAI,EAAE,CAAC,KAAK,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC,EAAE,CAAC;YAChD,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,EAAE,CAAC,KAAK,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC,CAAC;QACzC,CAAC;IACH,CAAC;IAED,OAAO,MAAM,CAAC;AAChB,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,uBAAuB,CAAC,OAA0E;IAChH,IAAI,OAAO,CAAC,MAAM,KAAK,CAAC;QAAE,OAAO,qBAAqB,CAAC;IAEvD,MAAM,KAAK,GAAa,EAAE,CAAC;IAC3B,KAAK,MAAM,KAAK,IAAI,OAAO,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC;QACxC,MAAM,IAAI,GAAG,KAAK,CAAC,SAAS,CAAC,KAAK,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC;QAC1C,MAAM,SAAS,GAAG,gBAAgB,CAAC,KAAK,CAAC,YAAY,EAAE,CAAC,CAAC,CAAC;QAC1D,KAAK,CAAC,IAAI,CAAC,KAAK,IAAI,KAAK,KAAK,CAAC,KAAK,EAAE,CAAC,CAAC;QACxC,SAAS,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC,KAAK,CAAC,CAAC,EAAE,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC;IAC9D,CAAC;IAED,OAAO,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;AAC1B,CAAC;AAED,+EAA+E;AAC/E,mBAAmB;AACnB,+EAA+E;AAE/E,MAAM,sBAAsB,GAAG;;;oDAGqB,CAAC;AAErD,MAAM,UAAU,sBAAsB,CACpC,WAAmB,EACnB,UAII,EAAE;IAEN,MAAM,QAAQ,GAAG,YAAY,CAAC,WAAW,CAAC,CAAC;IAC3C,MAAM,SAAS,GAAG,OAAO,CAAC,SAAS,IAAI,IAAI,CAAC;IAE5C,MAAM,MAAM,GAAmB,EAAE,CAAC;IAClC,IAAI,WAAW,GAAG,CAAC,CAAC;IAEpB,4EAA4E;IAC5E,6CAA6C;IAC7C,4EAA4E;IAE5E,6CAA6C;IAC7C,MAAM,CAAC,IAAI,CAAC;QACV,IAAI,EAAE,aAAa;QACnB,QAAQ,EAAE,UAAU;QACpB,QAAQ,EAAE,WAAW;QACrB,OAAO,EAAE,sBAAsB;QAC/B,MAAM,EAAE,cAAc,CAAC,sBAAsB,CAAC;KAC/C,CAAC,CAAC;IAEH,yBAAyB;IACzB,MAAM,KAAK,GAAG,SAAS,CAAC,QAAQ,CAAC,CAAC;IAClC,MAAM,OAAO,GAAG,WAAW,CAAC,QAAQ,CAAC,CAAC;IACtC,MAAM,WAAW,GAAG,cAAc,CAAC,QAAQ,CAAC,CAAC;IAE7C,MAAM,YAAY,GAAG;QACnB,UAAU,KAAK,CAAC,OAAO,CAAC,KAAK,GAAG,MAAM,IAAI,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,KAAK,CAAC,OAAO,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC,EAAE,EAAE;QAC3F,UAAU,WAAW,CAAC,OAAO,CAAC,CAAC,CAAC,UAAU,CAAC,CAAC,CAAC,WAAW,CAAC,OAAO,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,YAAY,WAAW,CAAC,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC,CAAC,SAAS,EAAE;QACxI,OAAO,CAAC,WAAW,CAAC,CAAC,CAAC,SAAS,OAAO,CAAC,WAAW,CAAC,WAAW,EAAE,CAAC,CAAC,CAAC,EAAE;KACtE,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;IAE7B,MAAM,CAAC,IAAI,CAAC;QACV,IAAI,EAAE,eAAe;QACrB,QAAQ,EAAE,UAAU;QACpB,QAAQ,EAAE,WAAW;QACrB,OAAO,EAAE,YAAY;QACrB,MAAM,EAAE,cAAc,CAAC,YAAY,CAAC;KACrC,CAAC,CAAC;IAEH,4EAA4E;IAC5E,wDAAwD;IACxD,4EAA4E;IAE5E,6BAA6B;IAC7B,MAAM,cAAc,GAAG,iBAAiB,CAAC,EAAE,WAAW,EAAE,QAAQ,EAAE,KAAK,EAAE,CAAC,EAAE,CAAC,CAAC;IAC9E,MAAM,cAAc,GAAG,uBAAuB,CAAC,cAAc,CAAC,CAAC;IAE/D,MAAM,CAAC,IAAI,CAAC;QACV,IAAI,EAAE,iBAAiB;QACvB,QAAQ,EAAE,QAAQ;QAClB,QAAQ,EAAE,QAAQ;QAClB,OAAO,EAAE,mBAAmB,cAAc,EAAE;QAC5C,MAAM,EAAE,cAAc,CAAC,cAAc,CAAC;KACvC,CAAC,CAAC;IAEH,qCAAqC;IACrC,IAAI,OAAO,CAAC,WAAW,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QACnC,MAAM,QAAQ,GAAG,OAAO,CAAC,WAAW,CAAC,KAAK,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QAC9E,MAAM,CAAC,IAAI,CAAC;YACV,IAAI,EAAE,cAAc;YACpB,QAAQ,EAAE,KAAK;YACf,QAAQ,EAAE,QAAQ;YAClB,OAAO,EAAE,sBAAsB,QAAQ,EAAE;YACzC,MAAM,EAAE,cAAc,CAAC,QAAQ,CAAC,GAAG,EAAE;SACtC,CAAC,CAAC;IACL,CAAC;IAED,4EAA4E;IAC5E,oDAAoD;IACpD,4EAA4E;IAE5E,6DAA6D;IAC7D,MAAM,MAAM,GAAG,mBAAmB,CAAC,QAAQ,CAAC,CAAC;IAC7C,IAAI,MAAM,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QACtB,MAAM,YAAY,GAAG,MAAM,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE;YAC9C,MAAM,QAAQ,GAAG,CAAC,CAAC,WAAW,CAAC,MAAM,GAAG,CAAC;gBACvC,CAAC,CAAC,WAAW,CAAC,CAAC,WAAW,CAAC,MAAM,MAAM,CAAC,CAAC,WAAW,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG;gBACvF,CAAC,CAAC,EAAE,CAAC;YACP,OAAO,UAAU,CAAC,CAAC,KAAK,GAAG,QAAQ,EAAE,CAAC;QACxC,CAAC,CAAC,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;QAEhB,MAAM,CAAC,IAAI,CAAC;YACV,IAAI,EAAE,QAAQ;YACd,QAAQ,EAAE,MAAM;YAChB,QAAQ,EAAE,KAAK;YACf,OAAO,EAAE,YAAY;YACrB,MAAM,EAAE,cAAc,CAAC,YAAY,CAAC;SACrC,CAAC,CAAC;IACL,CAAC;IAED,6BAA6B;IAC7B,IAAI,OAAO,CAAC,eAAe,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QACvC,MAAM,WAAW,GAAG,OAAO,CAAC,eAAe,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE;YAC9D,MAAM,GAAG,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC,IAAI,CAAC,GAAG,EAAE,GAAG,CAAC,CAAC,SAAS,CAAC,GAAG,KAAK,CAAC,CAAC;YAC3D,OAAO,GAAG,CAAC,CAAC,IAAI,KAAK,GAAG,QAAQ,CAAC;QACnC,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QAEd,MAAM,CAAC,IAAI,CAAC;YACV,IAAI,EAAE,cAAc;YACpB,QAAQ,EAAE,QAAQ;YAClB,QAAQ,EAAE,KAAK;YACf,OAAO,EAAE,oBAAoB,WAAW,EAAE;YAC1C,MAAM,EAAE,cAAc,CAAC,WAAW,CAAC,GAAG,EAAE;SACzC,CAAC,CAAC;IACL,CAAC;IAED,iCAAiC;IACjC,IAAI,OAAO,CAAC,eAAe,EAAE,CAAC;QAC5B,MAAM,CAAC,IAAI,CAAC;YACV,IAAI,EAAE,cAAc;YACpB,QAAQ,EAAE,UAAU;YACpB,QAAQ,EAAE,KAAK;YACf,OAAO,EAAE,iBAAiB,OAAO,CAAC,eAAe,EAAE;YACnD,MAAM,EAAE,cAAc,CAAC,OAAO,CAAC,eAAe,CAAC,GAAG,EAAE;SACrD,CAAC,CAAC;IACL,CAAC;IAED,4EAA4E;IAC5E,oCAAoC;IACpC,4EAA4E;IAE5E,gCAAgC;IAChC,MAAM,aAAa,GAAG,EAAE,QAAQ,EAAE,CAAC,EAAE,IAAI,EAAE,CAAC,EAAE,MAAM,EAAE,CAAC,EAAE,GAAG,EAAE,CAAC,EAAE,CAAC;IAClE,MAAM,aAAa,GAAG,EAAE,SAAS,EAAE,CAAC,EAAE,GAAG,EAAE,CAAC,EAAE,MAAM,EAAE,CAAC,EAAE,CAAC;IAE1D,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE;QACnB,MAAM,YAAY,GAAG,aAAa,CAAC,CAAC,CAAC,QAAQ,CAAC,GAAG,aAAa,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC;QAC3E,IAAI,YAAY,KAAK,CAAC;YAAE,OAAO,YAAY,CAAC;QAC5C,OAAO,aAAa,CAAC,CAAC,CAAC,QAAQ,CAAC,GAAG,aAAa,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC;IAC/D,CAAC,CAAC,CAAC;IAEH,mCAAmC;IACnC,MAAM,QAAQ,GAAmB,EAAE,CAAC;IACpC,IAAI,UAAU,GAAG,CAAC,CAAC;IACnB,IAAI,SAAS,GAAG,KAAK,CAAC;IAEtB,KAAK,MAAM,KAAK,IAAI,MAAM,EAAE,CAAC;QAC3B,IAAI,UAAU,GAAG,KAAK,CAAC,MAAM,IAAI,SAAS,EAAE,CAAC;YAC3C,QAAQ,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;YACrB,UAAU,IAAI,KAAK,CAAC,MAAM,CAAC;QAC7B,CAAC;aAAM,IAAI,KAAK,CAAC,QAAQ,KAAK,UAAU,EAAE,CAAC;YACzC,6CAA6C;YAC7C,MAAM,SAAS,GAAG,SAAS,GAAG,UAAU,CAAC;YACzC,IAAI,SAAS,GAAG,GAAG,EAAE,CAAC;gBACpB,MAAM,gBAAgB,GAAG,gBAAgB,CAAC,KAAK,CAAC,OAAO,EAAE,SAAS,CAAC,CAAC;gBACpE,QAAQ,CAAC,IAAI,CAAC;oBACZ,GAAG,KAAK;oBACR,OAAO,EAAE,gBAAgB;oBACzB,MAAM,EAAE,cAAc,CAAC,gBAAgB,CAAC;iBACzC,CAAC,CAAC;gBACH,UAAU,IAAI,cAAc,CAAC,gBAAgB,CAAC,CAAC;gBAC/C,SAAS,GAAG,IAAI,CAAC;YACnB,CAAC;QACH,CAAC;aAAM,CAAC;YACN,SAAS,GAAG,IAAI,CAAC;QACnB,CAAC;IACH,CAAC;IAED,uCAAuC;IACvC,QAAQ,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,aAAa,CAAC,CAAC,CAAC,QAAQ,CAAC,GAAG,aAAa,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC;IAE/E,OAAO;QACL,MAAM,EAAE,QAAQ;QAChB,WAAW,EAAE,UAAU;QACvB,SAAS;KACV,CAAC;AACJ,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,eAAe,CAAC,OAA0B;IACxD,MAAM,QAAQ,GAAa,EAAE,CAAC;IAE9B,MAAM,SAAS,GAAG,OAAO,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,QAAQ,KAAK,WAAW,CAAC,CAAC;IACzE,MAAM,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,QAAQ,KAAK,QAAQ,CAAC,CAAC;IACnE,MAAM,GAAG,GAAG,OAAO,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,QAAQ,KAAK,KAAK,CAAC,CAAC;IAE7D,IAAI,SAAS,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QACzB,QAAQ,CAAC,IAAI,CAAC,yBAAyB,GAAG,SAAS,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC;IACxF,CAAC;IAED,IAAI,MAAM,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QACtB,QAAQ,CAAC,IAAI,CAAC,qBAAqB,GAAG,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC;IACjF,CAAC;IAED,IAAI,GAAG,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QACnB,QAAQ,CAAC,IAAI,CAAC,uBAAuB,GAAG,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC;IAChF,CAAC;IAED,OAAO,QAAQ,CAAC,IAAI,CAAC,aAAa,CAAC,CAAC;AACtC,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,eAAe,CAAC,WAAmB;IAKjD,MAAM,OAAO,GAAG,sBAAsB,CAAC,WAAW,CAAC,CAAC;IAEpD,MAAM,cAAc,GAA2B,EAAE,CAAC;IAClD,KAAK,MAAM,KAAK,IAAI,OAAO,CAAC,MAAM,EAAE,CAAC;QACnC,cAAc,CAAC,KAAK,CAAC,IAAI,CAAC,GAAG,KAAK,CAAC,MAAM,CAAC;IAC5C,CAAC;IAED,sCAAsC;IACtC,MAAM,OAAO,GAAG,WAAW,CAAC,WAAW,CAAC,CAAC;IACzC,MAAM,OAAO,GAAG,iBAAiB,CAAC,EAAE,WAAW,EAAE,KAAK,EAAE,EAAE,EAAE,CAAC,CAAC;IAC9D,MAAM,YAAY,GAChB,cAAc,CAAC,sBAAsB,CAAC,GAAG,CAAC,GAAG,mBAAmB;QAChE,OAAO,CAAC,WAAW,CAAC,MAAM,GAAG,GAAG,GAAG,gBAAgB;QACnD,OAAO,CAAC,MAAM,CAAC,CAAC,GAAG,EAAE,CAAC,EAAE,EAAE,CAAC,GAAG,GAAG,cAAc,CAAC,CAAC,CAAC,YAAY,CAAC,EAAE,CAAC,CAAC,CAAC;IAEtE,OAAO;QACL,eAAe,EAAE,OAAO,CAAC,WAAW;QACpC,cAAc;QACd,gBAAgB,EAAE,YAAY,GAAG,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,WAAW,GAAG,YAAY,CAAC,CAAC,CAAC,CAAC;KAC5E,CAAC;AACJ,CAAC"}
|
|
@@ -0,0 +1,29 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Sanitize and validate a project path to prevent path traversal attacks.
|
|
3
|
+
* Returns a safe, absolute path within allowed boundaries.
|
|
4
|
+
*/
|
|
5
|
+
export declare function sanitizePath(inputPath: string | undefined, basePath?: string): string;
|
|
6
|
+
/**
|
|
7
|
+
* Validate a path is safe for shell commands (no metacharacters)
|
|
8
|
+
*/
|
|
9
|
+
export declare function isShellSafe(path: string): boolean;
|
|
10
|
+
/**
|
|
11
|
+
* Sanitize a string for use in git commands
|
|
12
|
+
*/
|
|
13
|
+
export declare function sanitizeForGit(path: string): string;
|
|
14
|
+
/**
|
|
15
|
+
* Limit string length for storage/processing
|
|
16
|
+
*/
|
|
17
|
+
export declare function limitLength(input: string, maxLength: number): string;
|
|
18
|
+
/**
|
|
19
|
+
* Validate that a value is one of the allowed values
|
|
20
|
+
*/
|
|
21
|
+
export declare function validateEnum<T extends string>(value: string, allowed: readonly T[]): T | null;
|
|
22
|
+
export declare const LIMITS: {
|
|
23
|
+
readonly CONVERSATION_MAX_LENGTH: 500000;
|
|
24
|
+
readonly TITLE_MAX_LENGTH: 200;
|
|
25
|
+
readonly TAG_MAX_LENGTH: 50;
|
|
26
|
+
readonly MAX_TAGS: 20;
|
|
27
|
+
readonly PATH_MAX_LENGTH: 1000;
|
|
28
|
+
};
|
|
29
|
+
//# sourceMappingURL=security.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"security.d.ts","sourceRoot":"","sources":["../src/security.ts"],"names":[],"mappings":"AAGA;;;GAGG;AACH,wBAAgB,YAAY,CAAC,SAAS,EAAE,MAAM,GAAG,SAAS,EAAE,QAAQ,CAAC,EAAE,MAAM,GAAG,MAAM,CA8BrF;AAED;;GAEG;AACH,wBAAgB,WAAW,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAIjD;AAED;;GAEG;AACH,wBAAgB,cAAc,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,CAKnD;AAED;;GAEG;AACH,wBAAgB,WAAW,CAAC,KAAK,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,GAAG,MAAM,CAKpE;AAED;;GAEG;AACH,wBAAgB,YAAY,CAAC,CAAC,SAAS,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE,OAAO,EAAE,SAAS,CAAC,EAAE,GAAG,CAAC,GAAG,IAAI,CAE7F;AAGD,eAAO,MAAM,MAAM;;;;;;CAMT,CAAC"}
|
package/dist/security.js
ADDED
|
@@ -0,0 +1,72 @@
|
|
|
1
|
+
import { resolve, normalize, relative, isAbsolute } from 'path';
|
|
2
|
+
import { existsSync } from 'fs';
|
|
3
|
+
/**
|
|
4
|
+
* Sanitize and validate a project path to prevent path traversal attacks.
|
|
5
|
+
* Returns a safe, absolute path within allowed boundaries.
|
|
6
|
+
*/
|
|
7
|
+
export function sanitizePath(inputPath, basePath) {
|
|
8
|
+
const base = basePath || process.cwd();
|
|
9
|
+
if (!inputPath) {
|
|
10
|
+
return base;
|
|
11
|
+
}
|
|
12
|
+
// Normalize to remove .. and . segments
|
|
13
|
+
const normalized = normalize(inputPath);
|
|
14
|
+
// If absolute, verify it doesn't escape intended directories
|
|
15
|
+
if (isAbsolute(normalized)) {
|
|
16
|
+
// For absolute paths, ensure they exist and are directories
|
|
17
|
+
if (!existsSync(normalized)) {
|
|
18
|
+
return base;
|
|
19
|
+
}
|
|
20
|
+
return normalized;
|
|
21
|
+
}
|
|
22
|
+
// For relative paths, resolve against base
|
|
23
|
+
const resolved = resolve(base, normalized);
|
|
24
|
+
// Ensure the resolved path is still within the base
|
|
25
|
+
const rel = relative(base, resolved);
|
|
26
|
+
if (rel.startsWith('..') || isAbsolute(rel)) {
|
|
27
|
+
// Path escapes base - return base instead
|
|
28
|
+
return base;
|
|
29
|
+
}
|
|
30
|
+
return resolved;
|
|
31
|
+
}
|
|
32
|
+
/**
|
|
33
|
+
* Validate a path is safe for shell commands (no metacharacters)
|
|
34
|
+
*/
|
|
35
|
+
export function isShellSafe(path) {
|
|
36
|
+
// Reject paths with shell metacharacters
|
|
37
|
+
const dangerousChars = /[;&|`$(){}[\]<>\\!#*?'"]/;
|
|
38
|
+
return !dangerousChars.test(path);
|
|
39
|
+
}
|
|
40
|
+
/**
|
|
41
|
+
* Sanitize a string for use in git commands
|
|
42
|
+
*/
|
|
43
|
+
export function sanitizeForGit(path) {
|
|
44
|
+
if (!isShellSafe(path)) {
|
|
45
|
+
throw new Error('Path contains unsafe characters for shell commands');
|
|
46
|
+
}
|
|
47
|
+
return path;
|
|
48
|
+
}
|
|
49
|
+
/**
|
|
50
|
+
* Limit string length for storage/processing
|
|
51
|
+
*/
|
|
52
|
+
export function limitLength(input, maxLength) {
|
|
53
|
+
if (input.length <= maxLength) {
|
|
54
|
+
return input;
|
|
55
|
+
}
|
|
56
|
+
return input.slice(0, maxLength) + '... [truncated]';
|
|
57
|
+
}
|
|
58
|
+
/**
|
|
59
|
+
* Validate that a value is one of the allowed values
|
|
60
|
+
*/
|
|
61
|
+
export function validateEnum(value, allowed) {
|
|
62
|
+
return allowed.includes(value) ? value : null;
|
|
63
|
+
}
|
|
64
|
+
// Max sizes for various inputs
|
|
65
|
+
export const LIMITS = {
|
|
66
|
+
CONVERSATION_MAX_LENGTH: 500000, // ~500KB
|
|
67
|
+
TITLE_MAX_LENGTH: 200,
|
|
68
|
+
TAG_MAX_LENGTH: 50,
|
|
69
|
+
MAX_TAGS: 20,
|
|
70
|
+
PATH_MAX_LENGTH: 1000,
|
|
71
|
+
};
|
|
72
|
+
//# sourceMappingURL=security.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"security.js","sourceRoot":"","sources":["../src/security.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,SAAS,EAAE,QAAQ,EAAE,UAAU,EAAE,MAAM,MAAM,CAAC;AAChE,OAAO,EAAE,UAAU,EAAE,MAAM,IAAI,CAAC;AAEhC;;;GAGG;AACH,MAAM,UAAU,YAAY,CAAC,SAA6B,EAAE,QAAiB;IAC3E,MAAM,IAAI,GAAG,QAAQ,IAAI,OAAO,CAAC,GAAG,EAAE,CAAC;IAEvC,IAAI,CAAC,SAAS,EAAE,CAAC;QACf,OAAO,IAAI,CAAC;IACd,CAAC;IAED,wCAAwC;IACxC,MAAM,UAAU,GAAG,SAAS,CAAC,SAAS,CAAC,CAAC;IAExC,6DAA6D;IAC7D,IAAI,UAAU,CAAC,UAAU,CAAC,EAAE,CAAC;QAC3B,4DAA4D;QAC5D,IAAI,CAAC,UAAU,CAAC,UAAU,CAAC,EAAE,CAAC;YAC5B,OAAO,IAAI,CAAC;QACd,CAAC;QACD,OAAO,UAAU,CAAC;IACpB,CAAC;IAED,2CAA2C;IAC3C,MAAM,QAAQ,GAAG,OAAO,CAAC,IAAI,EAAE,UAAU,CAAC,CAAC;IAE3C,oDAAoD;IACpD,MAAM,GAAG,GAAG,QAAQ,CAAC,IAAI,EAAE,QAAQ,CAAC,CAAC;IACrC,IAAI,GAAG,CAAC,UAAU,CAAC,IAAI,CAAC,IAAI,UAAU,CAAC,GAAG,CAAC,EAAE,CAAC;QAC5C,0CAA0C;QAC1C,OAAO,IAAI,CAAC;IACd,CAAC;IAED,OAAO,QAAQ,CAAC;AAClB,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,WAAW,CAAC,IAAY;IACtC,yCAAyC;IACzC,MAAM,cAAc,GAAG,0BAA0B,CAAC;IAClD,OAAO,CAAC,cAAc,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;AACpC,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,cAAc,CAAC,IAAY;IACzC,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,EAAE,CAAC;QACvB,MAAM,IAAI,KAAK,CAAC,oDAAoD,CAAC,CAAC;IACxE,CAAC;IACD,OAAO,IAAI,CAAC;AACd,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,WAAW,CAAC,KAAa,EAAE,SAAiB;IAC1D,IAAI,KAAK,CAAC,MAAM,IAAI,SAAS,EAAE,CAAC;QAC9B,OAAO,KAAK,CAAC;IACf,CAAC;IACD,OAAO,KAAK,CAAC,KAAK,CAAC,CAAC,EAAE,SAAS,CAAC,GAAG,iBAAiB,CAAC;AACvD,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,YAAY,CAAmB,KAAa,EAAE,OAAqB;IACjF,OAAO,OAAO,CAAC,QAAQ,CAAC,KAAU,CAAC,CAAC,CAAC,CAAE,KAAW,CAAC,CAAC,CAAC,IAAI,CAAC;AAC5D,CAAC;AAED,+BAA+B;AAC/B,MAAM,CAAC,MAAM,MAAM,GAAG;IACpB,uBAAuB,EAAE,MAAM,EAAE,SAAS;IAC1C,gBAAgB,EAAE,GAAG;IACrB,cAAc,EAAE,EAAE;IAClB,QAAQ,EAAE,EAAE;IACZ,eAAe,EAAE,IAAI;CACb,CAAC"}
|
package/dist/server.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"server.d.ts","sourceRoot":"","sources":["../src/server.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,MAAM,yCAAyC,CAAC;
|
|
1
|
+
{"version":3,"file":"server.d.ts","sourceRoot":"","sources":["../src/server.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,MAAM,yCAAyC,CAAC;AAsDpE,wBAAgB,YAAY,IAAI,SAAS,CAsOxC"}
|
package/dist/server.js
CHANGED
|
@@ -1,5 +1,7 @@
|
|
|
1
1
|
import { McpServer } from '@modelcontextprotocol/sdk/server/mcp.js';
|
|
2
|
-
import { startProject, startProjectSchema, getPhase, getPhaseSchema, setPhaseManually, setPhaseSchema, audit, auditSchema, checkDocs, checkDocsSchema, constructOneshot, oneshotSchema, triggerTornado, tornadoSchema, expandHorizon, horizonSchema, analyze, analyzeSchema, suggestPrompt, suggestPromptSchema, advancePhase, advancePhaseSchema, saveToJournal, saveJournalSchema, getJournalEntries, getJournalSchema, searchJournal, searchJournalSchema,
|
|
2
|
+
import { startProject, startProjectSchema, getPhase, getPhaseSchema, setPhaseManually, setPhaseSchema, audit, auditSchema, checkDocs, checkDocsSchema, constructOneshot, oneshotSchema, triggerTornado, tornadoSchema, expandHorizon, horizonSchema, analyze, analyzeSchema, suggestPrompt, suggestPromptSchema, advancePhase, advancePhaseSchema, saveToJournal, saveJournalSchema, getJournalEntries, getJournalSchema, searchJournal, searchJournalSchema,
|
|
3
|
+
// New verification and smart suggestion tools
|
|
4
|
+
verify, verifySchema, smartSuggest, smartSuggestSchema, setTask, setTaskSchema, updateTask, updateTaskSchema, clearTask, clearTaskSchema, recordErrorTool, recordErrorSchema, recordFix, recordFixSchema, getStuck, getStuckSchema, } from './tools/index.js';
|
|
3
5
|
import { registerAllPrompts } from './prompts/index.js';
|
|
4
6
|
import { registerAllResources } from './resources/index.js';
|
|
5
7
|
import { logger } from './logger.js';
|
|
@@ -80,13 +82,22 @@ export function createServer() {
|
|
|
80
82
|
server.tool('midas_journal_save', 'Save a full conversation to the project journal. Use this after important discussions, decisions, or implementations to preserve context for future sessions.', saveJournalSchema.shape, wrapTool('midas_journal_save', saveToJournal));
|
|
81
83
|
server.tool('midas_journal_list', 'Get recent journal entries to understand project history and past decisions', getJournalSchema.shape, wrapTool('midas_journal_list', getJournalEntries));
|
|
82
84
|
server.tool('midas_journal_search', 'Search journal entries for specific topics, decisions, or implementations', searchJournalSchema.shape, wrapTool('midas_journal_search', searchJournal));
|
|
85
|
+
// Verification and smart suggestion tools
|
|
86
|
+
server.tool('midas_verify', 'Run verification gates: build, test, lint. Returns pass/fail status and auto-advances phase if all pass.', verifySchema.shape, wrapTool('midas_verify', verify));
|
|
87
|
+
server.tool('midas_smart_suggest', 'Get an intelligent prompt suggestion based on current gates, errors, and phase. Prioritizes fixing broken builds/tests.', smartSuggestSchema.shape, wrapTool('midas_smart_suggest', smartSuggest));
|
|
88
|
+
server.tool('midas_set_task', 'Set the current task focus. Helps Midas track what you are working on.', setTaskSchema.shape, wrapTool('midas_set_task', setTask));
|
|
89
|
+
server.tool('midas_update_task', 'Update the current task phase (plan, implement, verify, reflect).', updateTaskSchema.shape, wrapTool('midas_update_task', updateTask));
|
|
90
|
+
server.tool('midas_clear_task', 'Clear the current task focus when done.', clearTaskSchema.shape, wrapTool('midas_clear_task', clearTask));
|
|
91
|
+
server.tool('midas_record_error', 'Record an error for tracking. Helps Midas remember what errors occurred and suggest Tornado when stuck.', recordErrorSchema.shape, wrapTool('midas_record_error', recordErrorTool));
|
|
92
|
+
server.tool('midas_record_fix', 'Record a fix attempt for an error. Helps Midas track what approaches have been tried.', recordFixSchema.shape, wrapTool('midas_record_fix', recordFix));
|
|
93
|
+
server.tool('midas_get_stuck', 'Get errors that have had multiple failed fix attempts. These are candidates for Tornado debugging.', getStuckSchema.shape, wrapTool('midas_get_stuck', getStuck));
|
|
83
94
|
// Register prompts
|
|
84
95
|
registerAllPrompts(server);
|
|
85
96
|
logger.debug('Registered prompts');
|
|
86
97
|
// Register resources
|
|
87
98
|
registerAllResources(server);
|
|
88
99
|
logger.debug('Registered resources');
|
|
89
|
-
logger.info('Midas MCP server ready', { tools:
|
|
100
|
+
logger.info('Midas MCP server ready', { tools: 22, prompts: 17, resources: 5 });
|
|
90
101
|
return server;
|
|
91
102
|
}
|
|
92
103
|
//# sourceMappingURL=server.js.map
|
package/dist/server.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"server.js","sourceRoot":"","sources":["../src/server.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,MAAM,yCAAyC,CAAC;AACpE,OAAO,EACL,YAAY,EACZ,kBAAkB,EAClB,QAAQ,EACR,cAAc,EACd,gBAAgB,EAChB,cAAc,EACd,KAAK,EACL,WAAW,EACX,SAAS,EACT,eAAe,EACf,gBAAgB,EAChB,aAAa,EACb,cAAc,EACd,aAAa,EACb,aAAa,EACb,aAAa,EACb,OAAO,EACP,aAAa,EACb,aAAa,EACb,mBAAmB,EACnB,YAAY,EACZ,kBAAkB,EAClB,aAAa,EACb,iBAAiB,EACjB,iBAAiB,EACjB,gBAAgB,EAChB,aAAa,EACb,mBAAmB,
|
|
1
|
+
{"version":3,"file":"server.js","sourceRoot":"","sources":["../src/server.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"analyze.test.d.ts","sourceRoot":"","sources":["../../src/tests/analyze.test.ts"],"names":[],"mappings":""}
|