couchloop-eq-mcp 1.1.4 → 1.2.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 +40 -38
- package/dist/clients/shrinkChatClient.d.ts +10 -10
- package/dist/index.js +81 -6
- package/dist/index.js.map +1 -1
- package/dist/server/http-mcp.d.ts.map +1 -1
- package/dist/server/http-mcp.js +17 -3
- package/dist/server/http-mcp.js.map +1 -1
- package/dist/server/sse.js +1 -1
- package/dist/tools/check-versions.d.ts +4 -4
- package/dist/tools/checkpoint.d.ts +2 -19
- package/dist/tools/checkpoint.d.ts.map +1 -1
- package/dist/tools/checkpoint.js +68 -2
- package/dist/tools/checkpoint.js.map +1 -1
- package/dist/tools/comprehensive-code-review.d.ts +78 -0
- package/dist/tools/comprehensive-code-review.d.ts.map +1 -0
- package/dist/tools/comprehensive-code-review.js +177 -0
- package/dist/tools/comprehensive-code-review.js.map +1 -0
- package/dist/tools/comprehensive-package-audit.d.ts +75 -0
- package/dist/tools/comprehensive-package-audit.d.ts.map +1 -0
- package/dist/tools/comprehensive-package-audit.js +151 -0
- package/dist/tools/comprehensive-package-audit.js.map +1 -0
- package/dist/tools/detect-build-context.d.ts +59 -0
- package/dist/tools/detect-build-context.d.ts.map +1 -0
- package/dist/tools/detect-build-context.js +80 -0
- package/dist/tools/detect-build-context.js.map +1 -0
- package/dist/tools/generate-upgrade-report.d.ts +85 -0
- package/dist/tools/generate-upgrade-report.d.ts.map +1 -0
- package/dist/tools/generate-upgrade-report.js +102 -0
- package/dist/tools/generate-upgrade-report.js.map +1 -0
- package/dist/tools/index-full.d.ts +1355 -0
- package/dist/tools/index-full.d.ts.map +1 -0
- package/dist/tools/index-full.js +611 -0
- package/dist/tools/index-full.js.map +1 -0
- package/dist/tools/index.d.ts +27 -1018
- package/dist/tools/index.d.ts.map +1 -1
- package/dist/tools/index.js +29 -554
- package/dist/tools/index.js.map +1 -1
- package/dist/tools/insight.d.ts +31 -12
- package/dist/tools/insight.d.ts.map +1 -1
- package/dist/tools/insight.js +2 -1
- package/dist/tools/insight.js.map +1 -1
- package/dist/tools/intent-router.d.ts +142 -0
- package/dist/tools/intent-router.d.ts.map +1 -0
- package/dist/tools/intent-router.js +453 -0
- package/dist/tools/intent-router.js.map +1 -0
- package/dist/tools/prevent-ai-errors.d.ts +85 -0
- package/dist/tools/prevent-ai-errors.d.ts.map +1 -0
- package/dist/tools/prevent-ai-errors.js +97 -0
- package/dist/tools/prevent-ai-errors.js.map +1 -0
- package/dist/tools/primary-tools.d.ts +615 -0
- package/dist/tools/primary-tools.d.ts.map +1 -0
- package/dist/tools/primary-tools.js +355 -0
- package/dist/tools/primary-tools.js.map +1 -0
- package/dist/tools/protect-files.d.ts +1 -1
- package/dist/tools/sendMessage.d.ts.map +1 -1
- package/dist/tools/sendMessage.js +17 -152
- package/dist/tools/sendMessage.js.map +1 -1
- package/dist/tools/session.d.ts +1 -1
- package/dist/tools/smart-context.d.ts +66 -0
- package/dist/tools/smart-context.d.ts.map +1 -0
- package/dist/tools/smart-context.js +167 -0
- package/dist/tools/smart-context.js.map +1 -0
- package/dist/tools/status.d.ts +118 -0
- package/dist/tools/status.d.ts.map +1 -0
- package/dist/tools/status.js +366 -0
- package/dist/tools/status.js.map +1 -0
- package/dist/tools/verify.d.ts +126 -0
- package/dist/tools/verify.d.ts.map +1 -0
- package/dist/tools/verify.js +308 -0
- package/dist/tools/verify.js.map +1 -0
- package/dist/types/checkpoint.d.ts +26 -1
- package/dist/types/checkpoint.d.ts.map +1 -1
- package/dist/types/checkpoint.js +17 -0
- package/dist/types/checkpoint.js.map +1 -1
- package/dist/types/insight.d.ts +2 -2
- package/dist/types/journey.d.ts +18 -18
- package/dist/types/session.d.ts +2 -2
- package/dist/utils/sanitize.d.ts +24 -0
- package/dist/utils/sanitize.d.ts.map +1 -0
- package/dist/utils/sanitize.js +117 -0
- package/dist/utils/sanitize.js.map +1 -0
- package/dist/workflows/engine.d.ts +2 -1
- package/dist/workflows/engine.d.ts.map +1 -1
- package/dist/workflows/engine.js +7 -1
- package/dist/workflows/engine.js.map +1 -1
- package/dist/workflows/index.d.ts +3 -3
- package/package.json +1 -1
|
@@ -0,0 +1,308 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* MCP Tool: verify
|
|
3
|
+
*
|
|
4
|
+
* Pre-delivery verification for AI-generated content.
|
|
5
|
+
* Catches hallucinations, incorrect packages, bad code, and unsafe responses
|
|
6
|
+
* BEFORE they reach the user.
|
|
7
|
+
*/
|
|
8
|
+
import { z } from 'zod';
|
|
9
|
+
import { AIErrorPreventer } from '../developer/evaluators/ai-error-preventer.js';
|
|
10
|
+
import { PackageBlocker } from '../developer/blockers/package-blocker.js';
|
|
11
|
+
import { PackageEvaluator } from '../developer/evaluators/package-evaluator.js';
|
|
12
|
+
import { EvaluationEngine, InterventionAction, RiskLevel } from '../governance/evaluationEngine.js';
|
|
13
|
+
import { logger } from '../utils/logger.js';
|
|
14
|
+
const VerifyInputSchema = z.object({
|
|
15
|
+
type: z.enum(['code', 'packages', 'facts', 'response', 'all']).describe('What to verify'),
|
|
16
|
+
content: z.string().describe('The AI-generated content to verify'),
|
|
17
|
+
language: z.string().optional().describe('Programming language for code verification'),
|
|
18
|
+
registry: z.enum(['npm', 'pypi', 'maven', 'cargo', 'go', 'nuget', 'gem']).optional().default('npm'),
|
|
19
|
+
context: z.string().optional().describe('Additional context'),
|
|
20
|
+
session_id: z.string().optional(),
|
|
21
|
+
});
|
|
22
|
+
export const verifyTool = {
|
|
23
|
+
definition: {
|
|
24
|
+
name: 'verify',
|
|
25
|
+
description: `CRITICAL: Pre-delivery verification for AI-generated content. Call BEFORE presenting code, package recommendations, or factual claims to users. Catches: hallucinated packages (24% of AI suggestions don't exist!), hallucinated APIs, incorrect imports, ESM/CJS confusion, deprecated methods, security vulnerabilities, inconsistencies with previous statements. Returns verification result with fixes if needed.`,
|
|
26
|
+
annotations: {
|
|
27
|
+
readOnlyHint: true,
|
|
28
|
+
destructiveHint: false,
|
|
29
|
+
openWorldHint: true,
|
|
30
|
+
},
|
|
31
|
+
inputSchema: {
|
|
32
|
+
type: 'object',
|
|
33
|
+
properties: {
|
|
34
|
+
type: {
|
|
35
|
+
type: 'string',
|
|
36
|
+
enum: ['code', 'packages', 'facts', 'response', 'all'],
|
|
37
|
+
description: "What to verify: 'code' for syntax/APIs, 'packages' for npm/pypi existence, 'facts' for claims/statistics, 'response' for governance/tone, 'all' for comprehensive check",
|
|
38
|
+
},
|
|
39
|
+
content: {
|
|
40
|
+
type: 'string',
|
|
41
|
+
description: 'The AI-generated content to verify before presenting to user',
|
|
42
|
+
},
|
|
43
|
+
language: {
|
|
44
|
+
type: 'string',
|
|
45
|
+
description: 'Programming language for code verification',
|
|
46
|
+
},
|
|
47
|
+
registry: {
|
|
48
|
+
type: 'string',
|
|
49
|
+
enum: ['npm', 'pypi', 'maven', 'cargo', 'go', 'nuget', 'gem'],
|
|
50
|
+
description: 'Package registry for package verification (default: npm)',
|
|
51
|
+
},
|
|
52
|
+
context: {
|
|
53
|
+
type: 'string',
|
|
54
|
+
description: "Additional context: user's original question, project type, etc.",
|
|
55
|
+
},
|
|
56
|
+
},
|
|
57
|
+
required: ['type', 'content'],
|
|
58
|
+
},
|
|
59
|
+
},
|
|
60
|
+
handler: handleVerify,
|
|
61
|
+
};
|
|
62
|
+
export async function handleVerify(args) {
|
|
63
|
+
try {
|
|
64
|
+
const input = VerifyInputSchema.parse(args);
|
|
65
|
+
logger.info('Running verification check', { type: input.type });
|
|
66
|
+
const results = {
|
|
67
|
+
verified: true,
|
|
68
|
+
type: input.type,
|
|
69
|
+
checks_run: [],
|
|
70
|
+
issues: [],
|
|
71
|
+
fixes: [],
|
|
72
|
+
warnings: [],
|
|
73
|
+
confidence: 1.0,
|
|
74
|
+
};
|
|
75
|
+
// Run appropriate checks based on type
|
|
76
|
+
if (input.type === 'code' || input.type === 'all') {
|
|
77
|
+
const codeResult = await verifyCode(input.content, input.language || 'typescript');
|
|
78
|
+
results.checks_run.push('code');
|
|
79
|
+
if (codeResult.issues.length > 0) {
|
|
80
|
+
results.verified = false;
|
|
81
|
+
results.issues.push(...codeResult.issues);
|
|
82
|
+
results.fixes.push(...codeResult.fixes);
|
|
83
|
+
}
|
|
84
|
+
results.warnings.push(...codeResult.warnings);
|
|
85
|
+
results.code_verification = codeResult;
|
|
86
|
+
}
|
|
87
|
+
if (input.type === 'packages' || input.type === 'all') {
|
|
88
|
+
const packageResult = await verifyPackages(input.content, input.registry || 'npm');
|
|
89
|
+
results.checks_run.push('packages');
|
|
90
|
+
if (packageResult.invalid.length > 0) {
|
|
91
|
+
results.verified = false;
|
|
92
|
+
results.issues.push(...packageResult.invalid.map(p => `Package does not exist: ${p}`));
|
|
93
|
+
results.fixes.push(...packageResult.suggestions);
|
|
94
|
+
}
|
|
95
|
+
results.package_verification = packageResult;
|
|
96
|
+
}
|
|
97
|
+
if (input.type === 'facts' || input.type === 'response' || input.type === 'all') {
|
|
98
|
+
const governanceResult = await verifyResponse(input.content, input.session_id);
|
|
99
|
+
results.checks_run.push('governance');
|
|
100
|
+
if (governanceResult.action !== InterventionAction.APPROVE) {
|
|
101
|
+
results.verified = false;
|
|
102
|
+
results.issues.push(...governanceResult.issues);
|
|
103
|
+
if (governanceResult.modified_content) {
|
|
104
|
+
results.fixes.push(`Modified content: ${governanceResult.modified_content}`);
|
|
105
|
+
}
|
|
106
|
+
}
|
|
107
|
+
results.confidence = Math.min(results.confidence, 1 - governanceResult.risk_score);
|
|
108
|
+
results.governance_verification = governanceResult;
|
|
109
|
+
}
|
|
110
|
+
// Calculate overall confidence
|
|
111
|
+
results.confidence = results.issues.length === 0 ? 1.0 :
|
|
112
|
+
Math.max(0.1, 1 - (results.issues.length * 0.15));
|
|
113
|
+
return {
|
|
114
|
+
success: true,
|
|
115
|
+
...results,
|
|
116
|
+
summary: results.verified
|
|
117
|
+
? `✓ Verified. ${results.checks_run.length} checks passed.`
|
|
118
|
+
: `✗ Issues found. ${results.issues.length} problems detected in ${results.checks_run.join(', ')}.`,
|
|
119
|
+
recommendation: results.verified
|
|
120
|
+
? 'Safe to present to user.'
|
|
121
|
+
: 'Review issues before presenting. Apply suggested fixes if available.',
|
|
122
|
+
};
|
|
123
|
+
}
|
|
124
|
+
catch (error) {
|
|
125
|
+
logger.error('Error in verify:', error);
|
|
126
|
+
return {
|
|
127
|
+
success: false,
|
|
128
|
+
verified: false,
|
|
129
|
+
error: error instanceof Error ? error.message : 'Unknown error',
|
|
130
|
+
recommendation: 'Verification failed. Do not present unverified content.',
|
|
131
|
+
};
|
|
132
|
+
}
|
|
133
|
+
}
|
|
134
|
+
async function verifyCode(code, language) {
|
|
135
|
+
const preventer = new AIErrorPreventer();
|
|
136
|
+
const result = await preventer.preventErrors(code, language, {
|
|
137
|
+
autoFix: true,
|
|
138
|
+
checkBuildContext: true,
|
|
139
|
+
});
|
|
140
|
+
const issues = [];
|
|
141
|
+
const fixes = [];
|
|
142
|
+
const warnings = result.warnings || [];
|
|
143
|
+
for (const error of result.errors) {
|
|
144
|
+
issues.push(`[${error.pattern.impact.toUpperCase()}] ${error.pattern.name}: ${error.pattern.description}`);
|
|
145
|
+
if (error.suggestion) {
|
|
146
|
+
fixes.push(error.suggestion);
|
|
147
|
+
}
|
|
148
|
+
}
|
|
149
|
+
return {
|
|
150
|
+
issues,
|
|
151
|
+
fixes,
|
|
152
|
+
warnings,
|
|
153
|
+
ai_errors_found: result.errors.length,
|
|
154
|
+
build_context: result.buildContext ? {
|
|
155
|
+
language: result.buildContext.language,
|
|
156
|
+
module_system: result.buildContext.moduleSystem,
|
|
157
|
+
requires_js_extensions: result.buildContext.requiresJsExtensions,
|
|
158
|
+
} : undefined,
|
|
159
|
+
fixed_code: result.fixedCode,
|
|
160
|
+
};
|
|
161
|
+
}
|
|
162
|
+
async function verifyPackages(content, registry) {
|
|
163
|
+
const blocker = new PackageBlocker(true);
|
|
164
|
+
const evaluator = new PackageEvaluator();
|
|
165
|
+
// Extract package names from content
|
|
166
|
+
const packages = extractPackageNames(content);
|
|
167
|
+
// Determine language from registry
|
|
168
|
+
const language = registry === 'npm' ? 'javascript' :
|
|
169
|
+
registry === 'pypi' ? 'python' :
|
|
170
|
+
registry === 'maven' ? 'java' : 'unknown';
|
|
171
|
+
const result = {
|
|
172
|
+
packages_checked: packages,
|
|
173
|
+
valid: [],
|
|
174
|
+
invalid: [],
|
|
175
|
+
suggestions: [],
|
|
176
|
+
typosquatting_detected: [],
|
|
177
|
+
deprecated: [],
|
|
178
|
+
};
|
|
179
|
+
// Use interceptCode to validate the content
|
|
180
|
+
const blockResult = await blocker.interceptCode(content, language);
|
|
181
|
+
if (!blockResult.allowed) {
|
|
182
|
+
result.invalid.push(...blockResult.blockedPackages);
|
|
183
|
+
result.suggestions.push(...blockResult.warnings);
|
|
184
|
+
// Add suggestions from blocker
|
|
185
|
+
for (const [pkg, suggs] of Object.entries(blockResult.suggestions)) {
|
|
186
|
+
if (suggs.length > 0) {
|
|
187
|
+
result.suggestions.push(`For "${pkg}": ${suggs.join(', ')}`);
|
|
188
|
+
}
|
|
189
|
+
}
|
|
190
|
+
}
|
|
191
|
+
// Check remaining valid packages for deprecation
|
|
192
|
+
const validPackages = packages.filter(p => !blockResult.blockedPackages.includes(p));
|
|
193
|
+
for (const pkg of validPackages) {
|
|
194
|
+
try {
|
|
195
|
+
const evalResult = await evaluator.evaluate(pkg, { language: language });
|
|
196
|
+
if (evalResult.package.deprecated) {
|
|
197
|
+
result.deprecated.push(pkg);
|
|
198
|
+
result.suggestions.push(`Package "${pkg}" is deprecated. ${evalResult.warning || ''}`);
|
|
199
|
+
}
|
|
200
|
+
else if (!evalResult.blocked) {
|
|
201
|
+
result.valid.push(pkg);
|
|
202
|
+
}
|
|
203
|
+
else {
|
|
204
|
+
result.invalid.push(pkg);
|
|
205
|
+
if (evalResult.warning) {
|
|
206
|
+
result.suggestions.push(evalResult.warning);
|
|
207
|
+
}
|
|
208
|
+
}
|
|
209
|
+
}
|
|
210
|
+
catch (e) {
|
|
211
|
+
// If we can't validate, mark as needs manual check
|
|
212
|
+
result.suggestions.push(`Could not validate "${pkg}" - manual verification recommended`);
|
|
213
|
+
}
|
|
214
|
+
}
|
|
215
|
+
return result;
|
|
216
|
+
}
|
|
217
|
+
function extractPackageNames(content) {
|
|
218
|
+
const packages = new Set();
|
|
219
|
+
// npm install patterns
|
|
220
|
+
const npmInstall = content.match(/npm\s+i(?:nstall)?\s+([^\n&|;]+)/gi);
|
|
221
|
+
if (npmInstall) {
|
|
222
|
+
for (const match of npmInstall) {
|
|
223
|
+
const pkgs = match.replace(/npm\s+i(?:nstall)?\s+/i, '').split(/\s+/);
|
|
224
|
+
pkgs.forEach(p => {
|
|
225
|
+
if (p && !p.startsWith('-')) {
|
|
226
|
+
packages.add(p.replace(/@[\d.]+$/, '')); // Remove version
|
|
227
|
+
}
|
|
228
|
+
});
|
|
229
|
+
}
|
|
230
|
+
}
|
|
231
|
+
// import/require patterns
|
|
232
|
+
const imports = content.match(/(?:import|require)\s*\(?['"]([^'"./][^'"]*)['"]\)?/g);
|
|
233
|
+
if (imports) {
|
|
234
|
+
for (const match of imports) {
|
|
235
|
+
const pkg = match.match(/['"]([^'"./][^'"]*)['"]/)?.[1];
|
|
236
|
+
if (pkg) {
|
|
237
|
+
// Get base package name (handle scoped packages)
|
|
238
|
+
const basePkg = pkg.startsWith('@')
|
|
239
|
+
? pkg.split('/').slice(0, 2).join('/')
|
|
240
|
+
: pkg.split('/')[0];
|
|
241
|
+
if (basePkg) {
|
|
242
|
+
packages.add(basePkg);
|
|
243
|
+
}
|
|
244
|
+
}
|
|
245
|
+
}
|
|
246
|
+
}
|
|
247
|
+
// pip install patterns
|
|
248
|
+
const pipInstall = content.match(/pip\s+install\s+([^\n&|;]+)/gi);
|
|
249
|
+
if (pipInstall) {
|
|
250
|
+
for (const match of pipInstall) {
|
|
251
|
+
const pkgs = match.replace(/pip\s+install\s+/i, '').split(/\s+/);
|
|
252
|
+
pkgs.forEach(p => {
|
|
253
|
+
if (p && !p.startsWith('-')) {
|
|
254
|
+
packages.add(p.replace(/[=<>].*$/, '')); // Remove version constraints
|
|
255
|
+
}
|
|
256
|
+
});
|
|
257
|
+
}
|
|
258
|
+
}
|
|
259
|
+
return Array.from(packages);
|
|
260
|
+
}
|
|
261
|
+
async function verifyResponse(content, sessionId) {
|
|
262
|
+
const engine = new EvaluationEngine();
|
|
263
|
+
const context = {
|
|
264
|
+
sessionId: sessionId || 'verification-check',
|
|
265
|
+
};
|
|
266
|
+
const evaluation = await engine.evaluate(content, context);
|
|
267
|
+
const issues = [];
|
|
268
|
+
if (evaluation.hallucination.detected) {
|
|
269
|
+
issues.push(`Potential hallucination detected (${Math.round(evaluation.hallucination.confidence * 100)}% confidence)`);
|
|
270
|
+
if (evaluation.hallucination.patterns) {
|
|
271
|
+
issues.push(...evaluation.hallucination.patterns.map(p => ` - ${p}`));
|
|
272
|
+
}
|
|
273
|
+
}
|
|
274
|
+
if (evaluation.inconsistency.detected) {
|
|
275
|
+
issues.push(`Inconsistency with previous statements detected (${Math.round(evaluation.inconsistency.confidence * 100)}% confidence)`);
|
|
276
|
+
}
|
|
277
|
+
if (evaluation.toneDrift.detected) {
|
|
278
|
+
issues.push(`Tone drift detected (${Math.round(evaluation.toneDrift.confidence * 100)}% confidence)`);
|
|
279
|
+
if (evaluation.toneDrift.patterns) {
|
|
280
|
+
issues.push(...evaluation.toneDrift.patterns.map(p => ` - ${p}`));
|
|
281
|
+
}
|
|
282
|
+
}
|
|
283
|
+
if (evaluation.unsafeReasoning.detected) {
|
|
284
|
+
issues.push(`Unsafe reasoning pattern detected (${Math.round(evaluation.unsafeReasoning.confidence * 100)}% confidence)`);
|
|
285
|
+
if (evaluation.unsafeReasoning.patterns) {
|
|
286
|
+
issues.push(...evaluation.unsafeReasoning.patterns.map(p => ` - ${p}`));
|
|
287
|
+
}
|
|
288
|
+
}
|
|
289
|
+
// Calculate risk score
|
|
290
|
+
const riskScores = {
|
|
291
|
+
[RiskLevel.NONE]: 0,
|
|
292
|
+
[RiskLevel.LOW]: 0.25,
|
|
293
|
+
[RiskLevel.MEDIUM]: 0.5,
|
|
294
|
+
[RiskLevel.HIGH]: 0.75,
|
|
295
|
+
[RiskLevel.CRITICAL]: 1.0,
|
|
296
|
+
};
|
|
297
|
+
return {
|
|
298
|
+
action: evaluation.recommendedAction,
|
|
299
|
+
risk_level: evaluation.overallRisk,
|
|
300
|
+
risk_score: riskScores[evaluation.overallRisk],
|
|
301
|
+
issues,
|
|
302
|
+
hallucination_detected: evaluation.hallucination.detected,
|
|
303
|
+
inconsistency_detected: evaluation.inconsistency.detected,
|
|
304
|
+
tone_drift_detected: evaluation.toneDrift.detected,
|
|
305
|
+
unsafe_reasoning_detected: evaluation.unsafeReasoning.detected,
|
|
306
|
+
};
|
|
307
|
+
}
|
|
308
|
+
//# sourceMappingURL=verify.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"verify.js","sourceRoot":"","sources":["../../src/tools/verify.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAEH,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AACxB,OAAO,EAAE,gBAAgB,EAAE,MAAM,+CAA+C,CAAC;AACjF,OAAO,EAAE,cAAc,EAAE,MAAM,0CAA0C,CAAC;AAC1E,OAAO,EAAE,gBAAgB,EAAE,MAAM,8CAA8C,CAAC;AAChF,OAAO,EAAE,gBAAgB,EAAkB,kBAAkB,EAAE,SAAS,EAAE,MAAM,mCAAmC,CAAC;AACpH,OAAO,EAAE,MAAM,EAAE,MAAM,oBAAoB,CAAC;AAE5C,MAAM,iBAAiB,GAAG,CAAC,CAAC,MAAM,CAAC;IACjC,IAAI,EAAE,CAAC,CAAC,IAAI,CAAC,CAAC,MAAM,EAAE,UAAU,EAAE,OAAO,EAAE,UAAU,EAAE,KAAK,CAAC,CAAC,CAAC,QAAQ,CAAC,gBAAgB,CAAC;IACzF,OAAO,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,oCAAoC,CAAC;IAClE,QAAQ,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,4CAA4C,CAAC;IACtF,QAAQ,EAAE,CAAC,CAAC,IAAI,CAAC,CAAC,KAAK,EAAE,MAAM,EAAE,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,OAAO,EAAE,KAAK,CAAC,CAAC,CAAC,QAAQ,EAAE,CAAC,OAAO,CAAC,KAAK,CAAC;IACnG,OAAO,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,oBAAoB,CAAC;IAC7D,UAAU,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE;CAClC,CAAC,CAAC;AAIH,MAAM,CAAC,MAAM,UAAU,GAAG;IACxB,UAAU,EAAE;QACV,IAAI,EAAE,QAAQ;QACd,WAAW,EAAE,yZAAyZ;QACta,WAAW,EAAE;YACX,YAAY,EAAE,IAAI;YAClB,eAAe,EAAE,KAAK;YACtB,aAAa,EAAE,IAAI;SACpB;QACD,WAAW,EAAE;YACX,IAAI,EAAE,QAAQ;YACd,UAAU,EAAE;gBACV,IAAI,EAAE;oBACJ,IAAI,EAAE,QAAQ;oBACd,IAAI,EAAE,CAAC,MAAM,EAAE,UAAU,EAAE,OAAO,EAAE,UAAU,EAAE,KAAK,CAAC;oBACtD,WAAW,EAAE,yKAAyK;iBACvL;gBACD,OAAO,EAAE;oBACP,IAAI,EAAE,QAAQ;oBACd,WAAW,EAAE,8DAA8D;iBAC5E;gBACD,QAAQ,EAAE;oBACR,IAAI,EAAE,QAAQ;oBACd,WAAW,EAAE,4CAA4C;iBAC1D;gBACD,QAAQ,EAAE;oBACR,IAAI,EAAE,QAAQ;oBACd,IAAI,EAAE,CAAC,KAAK,EAAE,MAAM,EAAE,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,OAAO,EAAE,KAAK,CAAC;oBAC7D,WAAW,EAAE,0DAA0D;iBACxE;gBACD,OAAO,EAAE;oBACP,IAAI,EAAE,QAAQ;oBACd,WAAW,EAAE,kEAAkE;iBAChF;aACF;YACD,QAAQ,EAAE,CAAC,MAAM,EAAE,SAAS,CAAC;SAC9B;KACF;IAED,OAAO,EAAE,YAAY;CACtB,CAAC;AAEF,MAAM,CAAC,KAAK,UAAU,YAAY,CAAC,IAAa;IAC9C,IAAI,CAAC;QACH,MAAM,KAAK,GAAG,iBAAiB,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;QAE5C,MAAM,CAAC,IAAI,CAAC,4BAA4B,EAAE,EAAE,IAAI,EAAE,KAAK,CAAC,IAAI,EAAE,CAAC,CAAC;QAEhE,MAAM,OAAO,GAAuB;YAClC,QAAQ,EAAE,IAAI;YACd,IAAI,EAAE,KAAK,CAAC,IAAI;YAChB,UAAU,EAAE,EAAE;YACd,MAAM,EAAE,EAAE;YACV,KAAK,EAAE,EAAE;YACT,QAAQ,EAAE,EAAE;YACZ,UAAU,EAAE,GAAG;SAChB,CAAC;QAEF,uCAAuC;QACvC,IAAI,KAAK,CAAC,IAAI,KAAK,MAAM,IAAI,KAAK,CAAC,IAAI,KAAK,KAAK,EAAE,CAAC;YAClD,MAAM,UAAU,GAAG,MAAM,UAAU,CAAC,KAAK,CAAC,OAAO,EAAE,KAAK,CAAC,QAAQ,IAAI,YAAY,CAAC,CAAC;YACnF,OAAO,CAAC,UAAU,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;YAChC,IAAI,UAAU,CAAC,MAAM,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;gBACjC,OAAO,CAAC,QAAQ,GAAG,KAAK,CAAC;gBACzB,OAAO,CAAC,MAAM,CAAC,IAAI,CAAC,GAAG,UAAU,CAAC,MAAM,CAAC,CAAC;gBAC1C,OAAO,CAAC,KAAK,CAAC,IAAI,CAAC,GAAG,UAAU,CAAC,KAAK,CAAC,CAAC;YAC1C,CAAC;YACD,OAAO,CAAC,QAAQ,CAAC,IAAI,CAAC,GAAG,UAAU,CAAC,QAAQ,CAAC,CAAC;YAC9C,OAAO,CAAC,iBAAiB,GAAG,UAAU,CAAC;QACzC,CAAC;QAED,IAAI,KAAK,CAAC,IAAI,KAAK,UAAU,IAAI,KAAK,CAAC,IAAI,KAAK,KAAK,EAAE,CAAC;YACtD,MAAM,aAAa,GAAG,MAAM,cAAc,CAAC,KAAK,CAAC,OAAO,EAAE,KAAK,CAAC,QAAQ,IAAI,KAAK,CAAC,CAAC;YACnF,OAAO,CAAC,UAAU,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC;YACpC,IAAI,aAAa,CAAC,OAAO,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;gBACrC,OAAO,CAAC,QAAQ,GAAG,KAAK,CAAC;gBACzB,OAAO,CAAC,MAAM,CAAC,IAAI,CAAC,GAAG,aAAa,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,2BAA2B,CAAC,EAAE,CAAC,CAAC,CAAC;gBACvF,OAAO,CAAC,KAAK,CAAC,IAAI,CAAC,GAAG,aAAa,CAAC,WAAW,CAAC,CAAC;YACnD,CAAC;YACD,OAAO,CAAC,oBAAoB,GAAG,aAAa,CAAC;QAC/C,CAAC;QAED,IAAI,KAAK,CAAC,IAAI,KAAK,OAAO,IAAI,KAAK,CAAC,IAAI,KAAK,UAAU,IAAI,KAAK,CAAC,IAAI,KAAK,KAAK,EAAE,CAAC;YAChF,MAAM,gBAAgB,GAAG,MAAM,cAAc,CAAC,KAAK,CAAC,OAAO,EAAE,KAAK,CAAC,UAAU,CAAC,CAAC;YAC/E,OAAO,CAAC,UAAU,CAAC,IAAI,CAAC,YAAY,CAAC,CAAC;YACtC,IAAI,gBAAgB,CAAC,MAAM,KAAK,kBAAkB,CAAC,OAAO,EAAE,CAAC;gBAC3D,OAAO,CAAC,QAAQ,GAAG,KAAK,CAAC;gBACzB,OAAO,CAAC,MAAM,CAAC,IAAI,CAAC,GAAG,gBAAgB,CAAC,MAAM,CAAC,CAAC;gBAChD,IAAI,gBAAgB,CAAC,gBAAgB,EAAE,CAAC;oBACtC,OAAO,CAAC,KAAK,CAAC,IAAI,CAAC,qBAAqB,gBAAgB,CAAC,gBAAgB,EAAE,CAAC,CAAC;gBAC/E,CAAC;YACH,CAAC;YACD,OAAO,CAAC,UAAU,GAAG,IAAI,CAAC,GAAG,CAAC,OAAO,CAAC,UAAU,EAAE,CAAC,GAAG,gBAAgB,CAAC,UAAU,CAAC,CAAC;YACnF,OAAO,CAAC,uBAAuB,GAAG,gBAAgB,CAAC;QACrD,CAAC;QAED,+BAA+B;QAC/B,OAAO,CAAC,UAAU,GAAG,OAAO,CAAC,MAAM,CAAC,MAAM,KAAK,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC;YACtD,IAAI,CAAC,GAAG,CAAC,GAAG,EAAE,CAAC,GAAG,CAAC,OAAO,CAAC,MAAM,CAAC,MAAM,GAAG,IAAI,CAAC,CAAC,CAAC;QAEpD,OAAO;YACL,OAAO,EAAE,IAAI;YACb,GAAG,OAAO;YACV,OAAO,EAAE,OAAO,CAAC,QAAQ;gBACvB,CAAC,CAAC,eAAe,OAAO,CAAC,UAAU,CAAC,MAAM,iBAAiB;gBAC3D,CAAC,CAAC,mBAAmB,OAAO,CAAC,MAAM,CAAC,MAAM,yBAAyB,OAAO,CAAC,UAAU,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG;YACrG,cAAc,EAAE,OAAO,CAAC,QAAQ;gBAC9B,CAAC,CAAC,0BAA0B;gBAC5B,CAAC,CAAC,sEAAsE;SAC3E,CAAC;IACJ,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,MAAM,CAAC,KAAK,CAAC,kBAAkB,EAAE,KAAK,CAAC,CAAC;QACxC,OAAO;YACL,OAAO,EAAE,KAAK;YACd,QAAQ,EAAE,KAAK;YACf,KAAK,EAAE,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,eAAe;YAC/D,cAAc,EAAE,yDAAyD;SAC1E,CAAC;IACJ,CAAC;AACH,CAAC;AAmBD,KAAK,UAAU,UAAU,CAAC,IAAY,EAAE,QAAgB;IACtD,MAAM,SAAS,GAAG,IAAI,gBAAgB,EAAE,CAAC;IACzC,MAAM,MAAM,GAAG,MAAM,SAAS,CAAC,aAAa,CAAC,IAAI,EAAE,QAAQ,EAAE;QAC3D,OAAO,EAAE,IAAI;QACb,iBAAiB,EAAE,IAAI;KACxB,CAAC,CAAC;IAEH,MAAM,MAAM,GAAa,EAAE,CAAC;IAC5B,MAAM,KAAK,GAAa,EAAE,CAAC;IAC3B,MAAM,QAAQ,GAAa,MAAM,CAAC,QAAQ,IAAI,EAAE,CAAC;IAEjD,KAAK,MAAM,KAAK,IAAI,MAAM,CAAC,MAAM,EAAE,CAAC;QAClC,MAAM,CAAC,IAAI,CAAC,IAAI,KAAK,CAAC,OAAO,CAAC,MAAM,CAAC,WAAW,EAAE,KAAK,KAAK,CAAC,OAAO,CAAC,IAAI,KAAK,KAAK,CAAC,OAAO,CAAC,WAAW,EAAE,CAAC,CAAC;QAC3G,IAAI,KAAK,CAAC,UAAU,EAAE,CAAC;YACrB,KAAK,CAAC,IAAI,CAAC,KAAK,CAAC,UAAU,CAAC,CAAC;QAC/B,CAAC;IACH,CAAC;IAED,OAAO;QACL,MAAM;QACN,KAAK;QACL,QAAQ;QACR,eAAe,EAAE,MAAM,CAAC,MAAM,CAAC,MAAM;QACrC,aAAa,EAAE,MAAM,CAAC,YAAY,CAAC,CAAC,CAAC;YACnC,QAAQ,EAAE,MAAM,CAAC,YAAY,CAAC,QAAQ;YACtC,aAAa,EAAE,MAAM,CAAC,YAAY,CAAC,YAAY;YAC/C,sBAAsB,EAAE,MAAM,CAAC,YAAY,CAAC,oBAAoB;SACjE,CAAC,CAAC,CAAC,SAAS;QACb,UAAU,EAAE,MAAM,CAAC,SAAS;KAC7B,CAAC;AACJ,CAAC;AAeD,KAAK,UAAU,cAAc,CAAC,OAAe,EAAE,QAAgB;IAC7D,MAAM,OAAO,GAAG,IAAI,cAAc,CAAC,IAAI,CAAC,CAAC;IACzC,MAAM,SAAS,GAAG,IAAI,gBAAgB,EAAE,CAAC;IAEzC,qCAAqC;IACrC,MAAM,QAAQ,GAAG,mBAAmB,CAAC,OAAO,CAAC,CAAC;IAE9C,mCAAmC;IACnC,MAAM,QAAQ,GAAG,QAAQ,KAAK,KAAK,CAAC,CAAC,CAAC,YAAY,CAAC,CAAC;QACnC,QAAQ,KAAK,MAAM,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC;YAChC,QAAQ,KAAK,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,SAAS,CAAC;IAE3D,MAAM,MAAM,GAA8B;QACxC,gBAAgB,EAAE,QAAQ;QAC1B,KAAK,EAAE,EAAE;QACT,OAAO,EAAE,EAAE;QACX,WAAW,EAAE,EAAE;QACf,sBAAsB,EAAE,EAAE;QAC1B,UAAU,EAAE,EAAE;KACf,CAAC;IAEF,4CAA4C;IAC5C,MAAM,WAAW,GAAG,MAAM,OAAO,CAAC,aAAa,CAAC,OAAO,EAAE,QAAwD,CAAC,CAAC;IAEnH,IAAI,CAAC,WAAW,CAAC,OAAO,EAAE,CAAC;QACzB,MAAM,CAAC,OAAO,CAAC,IAAI,CAAC,GAAG,WAAW,CAAC,eAAe,CAAC,CAAC;QACpD,MAAM,CAAC,WAAW,CAAC,IAAI,CAAC,GAAG,WAAW,CAAC,QAAQ,CAAC,CAAC;QAEjD,+BAA+B;QAC/B,KAAK,MAAM,CAAC,GAAG,EAAE,KAAK,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,WAAW,CAAC,WAAW,CAAC,EAAE,CAAC;YACnE,IAAI,KAAK,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;gBACrB,MAAM,CAAC,WAAW,CAAC,IAAI,CAAC,QAAQ,GAAG,MAAM,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;YAC/D,CAAC;QACH,CAAC;IACH,CAAC;IAED,iDAAiD;IACjD,MAAM,aAAa,GAAG,QAAQ,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,WAAW,CAAC,eAAe,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC;IAErF,KAAK,MAAM,GAAG,IAAI,aAAa,EAAE,CAAC;QAChC,IAAI,CAAC;YACH,MAAM,UAAU,GAAG,MAAM,SAAS,CAAC,QAAQ,CAAC,GAAG,EAAE,EAAE,QAAQ,EAAE,QAAwD,EAAE,CAAC,CAAC;YACzH,IAAI,UAAU,CAAC,OAAO,CAAC,UAAU,EAAE,CAAC;gBAClC,MAAM,CAAC,UAAU,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;gBAC5B,MAAM,CAAC,WAAW,CAAC,IAAI,CAAC,YAAY,GAAG,oBAAoB,UAAU,CAAC,OAAO,IAAI,EAAE,EAAE,CAAC,CAAC;YACzF,CAAC;iBAAM,IAAI,CAAC,UAAU,CAAC,OAAO,EAAE,CAAC;gBAC/B,MAAM,CAAC,KAAK,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;YACzB,CAAC;iBAAM,CAAC;gBACN,MAAM,CAAC,OAAO,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;gBACzB,IAAI,UAAU,CAAC,OAAO,EAAE,CAAC;oBACvB,MAAM,CAAC,WAAW,CAAC,IAAI,CAAC,UAAU,CAAC,OAAO,CAAC,CAAC;gBAC9C,CAAC;YACH,CAAC;QACH,CAAC;QAAC,OAAO,CAAC,EAAE,CAAC;YACX,mDAAmD;YACnD,MAAM,CAAC,WAAW,CAAC,IAAI,CAAC,uBAAuB,GAAG,qCAAqC,CAAC,CAAC;QAC3F,CAAC;IACH,CAAC;IAED,OAAO,MAAM,CAAC;AAChB,CAAC;AAED,SAAS,mBAAmB,CAAC,OAAe;IAC1C,MAAM,QAAQ,GAAgB,IAAI,GAAG,EAAE,CAAC;IAExC,uBAAuB;IACvB,MAAM,UAAU,GAAG,OAAO,CAAC,KAAK,CAAC,oCAAoC,CAAC,CAAC;IACvE,IAAI,UAAU,EAAE,CAAC;QACf,KAAK,MAAM,KAAK,IAAI,UAAU,EAAE,CAAC;YAC/B,MAAM,IAAI,GAAG,KAAK,CAAC,OAAO,CAAC,wBAAwB,EAAE,EAAE,CAAC,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC;YACtE,IAAI,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE;gBACf,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,UAAU,CAAC,GAAG,CAAC,EAAE,CAAC;oBAC5B,QAAQ,CAAC,GAAG,CAAC,CAAC,CAAC,OAAO,CAAC,UAAU,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,iBAAiB;gBAC5D,CAAC;YACH,CAAC,CAAC,CAAC;QACL,CAAC;IACH,CAAC;IAED,0BAA0B;IAC1B,MAAM,OAAO,GAAG,OAAO,CAAC,KAAK,CAAC,qDAAqD,CAAC,CAAC;IACrF,IAAI,OAAO,EAAE,CAAC;QACZ,KAAK,MAAM,KAAK,IAAI,OAAO,EAAE,CAAC;YAC5B,MAAM,GAAG,GAAG,KAAK,CAAC,KAAK,CAAC,yBAAyB,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC;YACxD,IAAI,GAAG,EAAE,CAAC;gBACR,iDAAiD;gBACjD,MAAM,OAAO,GAAG,GAAG,CAAC,UAAU,CAAC,GAAG,CAAC;oBACjC,CAAC,CAAC,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC;oBACtC,CAAC,CAAC,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC;gBACtB,IAAI,OAAO,EAAE,CAAC;oBACZ,QAAQ,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC;gBACxB,CAAC;YACH,CAAC;QACH,CAAC;IACH,CAAC;IAED,uBAAuB;IACvB,MAAM,UAAU,GAAG,OAAO,CAAC,KAAK,CAAC,+BAA+B,CAAC,CAAC;IAClE,IAAI,UAAU,EAAE,CAAC;QACf,KAAK,MAAM,KAAK,IAAI,UAAU,EAAE,CAAC;YAC/B,MAAM,IAAI,GAAG,KAAK,CAAC,OAAO,CAAC,mBAAmB,EAAE,EAAE,CAAC,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC;YACjE,IAAI,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE;gBACf,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,UAAU,CAAC,GAAG,CAAC,EAAE,CAAC;oBAC5B,QAAQ,CAAC,GAAG,CAAC,CAAC,CAAC,OAAO,CAAC,UAAU,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,6BAA6B;gBACxE,CAAC;YACH,CAAC,CAAC,CAAC;QACL,CAAC;IACH,CAAC;IAED,OAAO,KAAK,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;AAC9B,CAAC;AAkBD,KAAK,UAAU,cAAc,CAAC,OAAe,EAAE,SAAkB;IAC/D,MAAM,MAAM,GAAG,IAAI,gBAAgB,EAAE,CAAC;IAEtC,MAAM,OAAO,GAAmB;QAC9B,SAAS,EAAE,SAAS,IAAI,oBAAoB;KAC7C,CAAC;IAEF,MAAM,UAAU,GAAG,MAAM,MAAM,CAAC,QAAQ,CAAC,OAAO,EAAE,OAAO,CAAC,CAAC;IAE3D,MAAM,MAAM,GAAa,EAAE,CAAC;IAE5B,IAAI,UAAU,CAAC,aAAa,CAAC,QAAQ,EAAE,CAAC;QACtC,MAAM,CAAC,IAAI,CAAC,qCAAqC,IAAI,CAAC,KAAK,CAAC,UAAU,CAAC,aAAa,CAAC,UAAU,GAAG,GAAG,CAAC,eAAe,CAAC,CAAC;QACvH,IAAI,UAAU,CAAC,aAAa,CAAC,QAAQ,EAAE,CAAC;YACtC,MAAM,CAAC,IAAI,CAAC,GAAG,UAAU,CAAC,aAAa,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,OAAO,CAAC,EAAE,CAAC,CAAC,CAAC;QACzE,CAAC;IACH,CAAC;IAED,IAAI,UAAU,CAAC,aAAa,CAAC,QAAQ,EAAE,CAAC;QACtC,MAAM,CAAC,IAAI,CAAC,oDAAoD,IAAI,CAAC,KAAK,CAAC,UAAU,CAAC,aAAa,CAAC,UAAU,GAAG,GAAG,CAAC,eAAe,CAAC,CAAC;IACxI,CAAC;IAED,IAAI,UAAU,CAAC,SAAS,CAAC,QAAQ,EAAE,CAAC;QAClC,MAAM,CAAC,IAAI,CAAC,wBAAwB,IAAI,CAAC,KAAK,CAAC,UAAU,CAAC,SAAS,CAAC,UAAU,GAAG,GAAG,CAAC,eAAe,CAAC,CAAC;QACtG,IAAI,UAAU,CAAC,SAAS,CAAC,QAAQ,EAAE,CAAC;YAClC,MAAM,CAAC,IAAI,CAAC,GAAG,UAAU,CAAC,SAAS,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,OAAO,CAAC,EAAE,CAAC,CAAC,CAAC;QACrE,CAAC;IACH,CAAC;IAED,IAAI,UAAU,CAAC,eAAe,CAAC,QAAQ,EAAE,CAAC;QACxC,MAAM,CAAC,IAAI,CAAC,sCAAsC,IAAI,CAAC,KAAK,CAAC,UAAU,CAAC,eAAe,CAAC,UAAU,GAAG,GAAG,CAAC,eAAe,CAAC,CAAC;QAC1H,IAAI,UAAU,CAAC,eAAe,CAAC,QAAQ,EAAE,CAAC;YACxC,MAAM,CAAC,IAAI,CAAC,GAAG,UAAU,CAAC,eAAe,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,OAAO,CAAC,EAAE,CAAC,CAAC,CAAC;QAC3E,CAAC;IACH,CAAC;IAED,uBAAuB;IACvB,MAAM,UAAU,GAA8B;QAC5C,CAAC,SAAS,CAAC,IAAI,CAAC,EAAE,CAAC;QACnB,CAAC,SAAS,CAAC,GAAG,CAAC,EAAE,IAAI;QACrB,CAAC,SAAS,CAAC,MAAM,CAAC,EAAE,GAAG;QACvB,CAAC,SAAS,CAAC,IAAI,CAAC,EAAE,IAAI;QACtB,CAAC,SAAS,CAAC,QAAQ,CAAC,EAAE,GAAG;KAC1B,CAAC;IAEF,OAAO;QACL,MAAM,EAAE,UAAU,CAAC,iBAAiB;QACpC,UAAU,EAAE,UAAU,CAAC,WAAW;QAClC,UAAU,EAAE,UAAU,CAAC,UAAU,CAAC,WAAW,CAAC;QAC9C,MAAM;QACN,sBAAsB,EAAE,UAAU,CAAC,aAAa,CAAC,QAAQ;QACzD,sBAAsB,EAAE,UAAU,CAAC,aAAa,CAAC,QAAQ;QACzD,mBAAmB,EAAE,UAAU,CAAC,SAAS,CAAC,QAAQ;QAClD,yBAAyB,EAAE,UAAU,CAAC,eAAe,CAAC,QAAQ;KAC/D,CAAC;AACJ,CAAC"}
|
|
@@ -1,4 +1,5 @@
|
|
|
1
1
|
import { z } from 'zod';
|
|
2
|
+
declare const ContextCategoryEnum: z.ZodEnum<["architecture", "requirements", "constraints", "decisions", "technical-patterns", "project-metadata"]>;
|
|
2
3
|
export declare const SaveCheckpointSchema: z.ZodObject<{
|
|
3
4
|
session_id: z.ZodOptional<z.ZodString>;
|
|
4
5
|
key: z.ZodString;
|
|
@@ -20,9 +21,17 @@ export declare const SaveCheckpointSchema: z.ZodObject<{
|
|
|
20
21
|
token?: string | undefined;
|
|
21
22
|
conversation_id?: string | undefined;
|
|
22
23
|
}>>;
|
|
24
|
+
save_as_insight: z.ZodDefault<z.ZodBoolean>;
|
|
25
|
+
insight_tags: z.ZodOptional<z.ZodArray<z.ZodString, "many">>;
|
|
26
|
+
preserve_context: z.ZodDefault<z.ZodBoolean>;
|
|
27
|
+
context_category: z.ZodOptional<z.ZodEnum<["architecture", "requirements", "constraints", "decisions", "technical-patterns", "project-metadata"]>>;
|
|
28
|
+
governance_check: z.ZodDefault<z.ZodBoolean>;
|
|
23
29
|
}, "strip", z.ZodTypeAny, {
|
|
24
30
|
key: string;
|
|
25
31
|
advance_step: boolean;
|
|
32
|
+
save_as_insight: boolean;
|
|
33
|
+
preserve_context: boolean;
|
|
34
|
+
governance_check: boolean;
|
|
26
35
|
session_id?: string | undefined;
|
|
27
36
|
value?: any;
|
|
28
37
|
auth?: {
|
|
@@ -31,6 +40,8 @@ export declare const SaveCheckpointSchema: z.ZodObject<{
|
|
|
31
40
|
token?: string | undefined;
|
|
32
41
|
conversation_id?: string | undefined;
|
|
33
42
|
} | undefined;
|
|
43
|
+
insight_tags?: string[] | undefined;
|
|
44
|
+
context_category?: "architecture" | "requirements" | "constraints" | "decisions" | "technical-patterns" | "project-metadata" | undefined;
|
|
34
45
|
}, {
|
|
35
46
|
key: string;
|
|
36
47
|
session_id?: string | undefined;
|
|
@@ -42,14 +53,28 @@ export declare const SaveCheckpointSchema: z.ZodObject<{
|
|
|
42
53
|
conversation_id?: string | undefined;
|
|
43
54
|
} | undefined;
|
|
44
55
|
advance_step?: boolean | undefined;
|
|
56
|
+
save_as_insight?: boolean | undefined;
|
|
57
|
+
insight_tags?: string[] | undefined;
|
|
58
|
+
preserve_context?: boolean | undefined;
|
|
59
|
+
context_category?: "architecture" | "requirements" | "constraints" | "decisions" | "technical-patterns" | "project-metadata" | undefined;
|
|
60
|
+
governance_check?: boolean | undefined;
|
|
45
61
|
}>;
|
|
46
62
|
export type SaveCheckpointInput = z.infer<typeof SaveCheckpointSchema>;
|
|
63
|
+
export type ContextCategory = z.infer<typeof ContextCategoryEnum>;
|
|
47
64
|
export interface CheckpointResponse {
|
|
48
65
|
checkpoint_id: string;
|
|
49
66
|
session_id: string;
|
|
50
67
|
session_created: boolean;
|
|
51
|
-
next_step:
|
|
68
|
+
next_step: unknown | null;
|
|
52
69
|
journey_complete: boolean;
|
|
53
70
|
message: string;
|
|
71
|
+
insight_id?: string;
|
|
72
|
+
context_stored?: boolean;
|
|
73
|
+
governance_result?: {
|
|
74
|
+
allowed: boolean;
|
|
75
|
+
issues: string[];
|
|
76
|
+
confidence: number;
|
|
77
|
+
};
|
|
54
78
|
}
|
|
79
|
+
export {};
|
|
55
80
|
//# sourceMappingURL=checkpoint.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"checkpoint.d.ts","sourceRoot":"","sources":["../../src/types/checkpoint.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;
|
|
1
|
+
{"version":3,"file":"checkpoint.d.ts","sourceRoot":"","sources":["../../src/types/checkpoint.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAIxB,QAAA,MAAM,mBAAmB,mHAOvB,CAAC;AAEH,eAAO,MAAM,oBAAoB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;EAiB/B,CAAC;AAEH,MAAM,MAAM,mBAAmB,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,oBAAoB,CAAC,CAAC;AACvE,MAAM,MAAM,eAAe,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,mBAAmB,CAAC,CAAC;AAElE,MAAM,WAAW,kBAAkB;IACjC,aAAa,EAAE,MAAM,CAAC;IACtB,UAAU,EAAE,MAAM,CAAC;IACnB,eAAe,EAAE,OAAO,CAAC;IACzB,SAAS,EAAE,OAAO,GAAG,IAAI,CAAC;IAC1B,gBAAgB,EAAE,OAAO,CAAC;IAC1B,OAAO,EAAE,MAAM,CAAC;IAEhB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,cAAc,CAAC,EAAE,OAAO,CAAC;IACzB,iBAAiB,CAAC,EAAE;QAClB,OAAO,EAAE,OAAO,CAAC;QACjB,MAAM,EAAE,MAAM,EAAE,CAAC;QACjB,UAAU,EAAE,MAAM,CAAC;KACpB,CAAC;CACH"}
|
package/dist/types/checkpoint.js
CHANGED
|
@@ -1,10 +1,27 @@
|
|
|
1
1
|
import { z } from 'zod';
|
|
2
2
|
import { AuthContextSchema } from './auth.js';
|
|
3
|
+
// Context categories for preserve_context integration
|
|
4
|
+
const ContextCategoryEnum = z.enum([
|
|
5
|
+
'architecture',
|
|
6
|
+
'requirements',
|
|
7
|
+
'constraints',
|
|
8
|
+
'decisions',
|
|
9
|
+
'technical-patterns',
|
|
10
|
+
'project-metadata'
|
|
11
|
+
]);
|
|
3
12
|
export const SaveCheckpointSchema = z.object({
|
|
4
13
|
session_id: z.string().uuid().optional().describe('Active session ID (auto-created if not provided)'),
|
|
5
14
|
key: z.string().describe('What is being captured (e.g., "mood", "reflection", "gratitude")'),
|
|
6
15
|
value: z.any().describe('The captured content'),
|
|
7
16
|
advance_step: z.boolean().default(true).describe('Whether to advance to next journey step'),
|
|
8
17
|
auth: AuthContextSchema.optional().describe('Authentication context for user identification'),
|
|
18
|
+
// === Consolidated from save_insight ===
|
|
19
|
+
save_as_insight: z.boolean().default(false).describe('Also save this as a user insight'),
|
|
20
|
+
insight_tags: z.array(z.string()).optional().describe('Tags for the insight if saving as insight'),
|
|
21
|
+
// === Consolidated from preserve_context ===
|
|
22
|
+
preserve_context: z.boolean().default(false).describe('Also store as persistent project context'),
|
|
23
|
+
context_category: ContextCategoryEnum.optional().describe('Category for context preservation'),
|
|
24
|
+
// === Governance metadata ===
|
|
25
|
+
governance_check: z.boolean().default(true).describe('Run governance validation on the value'),
|
|
9
26
|
});
|
|
10
27
|
//# sourceMappingURL=checkpoint.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"checkpoint.js","sourceRoot":"","sources":["../../src/types/checkpoint.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AACxB,OAAO,EAAE,iBAAiB,EAAE,MAAM,WAAW,CAAC;AAE9C,MAAM,CAAC,MAAM,oBAAoB,GAAG,CAAC,CAAC,MAAM,CAAC;IAC3C,UAAU,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,IAAI,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,kDAAkD,CAAC;IACrG,GAAG,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,kEAAkE,CAAC;IAC5F,KAAK,EAAE,CAAC,CAAC,GAAG,EAAE,CAAC,QAAQ,CAAC,sBAAsB,CAAC;IAC/C,YAAY,EAAE,CAAC,CAAC,OAAO,EAAE,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,QAAQ,CAAC,yCAAyC,CAAC;IAC3F,IAAI,EAAE,iBAAiB,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,gDAAgD,CAAC;
|
|
1
|
+
{"version":3,"file":"checkpoint.js","sourceRoot":"","sources":["../../src/types/checkpoint.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AACxB,OAAO,EAAE,iBAAiB,EAAE,MAAM,WAAW,CAAC;AAE9C,sDAAsD;AACtD,MAAM,mBAAmB,GAAG,CAAC,CAAC,IAAI,CAAC;IACjC,cAAc;IACd,cAAc;IACd,aAAa;IACb,WAAW;IACX,oBAAoB;IACpB,kBAAkB;CACnB,CAAC,CAAC;AAEH,MAAM,CAAC,MAAM,oBAAoB,GAAG,CAAC,CAAC,MAAM,CAAC;IAC3C,UAAU,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,IAAI,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,kDAAkD,CAAC;IACrG,GAAG,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,kEAAkE,CAAC;IAC5F,KAAK,EAAE,CAAC,CAAC,GAAG,EAAE,CAAC,QAAQ,CAAC,sBAAsB,CAAC;IAC/C,YAAY,EAAE,CAAC,CAAC,OAAO,EAAE,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,QAAQ,CAAC,yCAAyC,CAAC;IAC3F,IAAI,EAAE,iBAAiB,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,gDAAgD,CAAC;IAE7F,yCAAyC;IACzC,eAAe,EAAE,CAAC,CAAC,OAAO,EAAE,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC,QAAQ,CAAC,kCAAkC,CAAC;IACxF,YAAY,EAAE,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,MAAM,EAAE,CAAC,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,2CAA2C,CAAC;IAElG,6CAA6C;IAC7C,gBAAgB,EAAE,CAAC,CAAC,OAAO,EAAE,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC,QAAQ,CAAC,0CAA0C,CAAC;IACjG,gBAAgB,EAAE,mBAAmB,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,mCAAmC,CAAC;IAE9F,8BAA8B;IAC9B,gBAAgB,EAAE,CAAC,CAAC,OAAO,EAAE,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,QAAQ,CAAC,wCAAwC,CAAC;CAC/F,CAAC,CAAC"}
|
package/dist/types/insight.d.ts
CHANGED
|
@@ -20,8 +20,8 @@ export declare const SaveInsightSchema: z.ZodObject<{
|
|
|
20
20
|
conversation_id?: string | undefined;
|
|
21
21
|
}>>;
|
|
22
22
|
}, "strip", z.ZodTypeAny, {
|
|
23
|
-
tags: string[];
|
|
24
23
|
content: string;
|
|
24
|
+
tags: string[];
|
|
25
25
|
session_id?: string | undefined;
|
|
26
26
|
auth?: {
|
|
27
27
|
user_id?: string | undefined;
|
|
@@ -31,8 +31,8 @@ export declare const SaveInsightSchema: z.ZodObject<{
|
|
|
31
31
|
} | undefined;
|
|
32
32
|
}, {
|
|
33
33
|
content: string;
|
|
34
|
-
tags?: string[] | undefined;
|
|
35
34
|
session_id?: string | undefined;
|
|
35
|
+
tags?: string[] | undefined;
|
|
36
36
|
auth?: {
|
|
37
37
|
user_id?: string | undefined;
|
|
38
38
|
client_id?: string | undefined;
|
package/dist/types/journey.d.ts
CHANGED
|
@@ -20,25 +20,25 @@ export declare const JourneyStepSchema: z.ZodObject<{
|
|
|
20
20
|
}>;
|
|
21
21
|
optional: z.ZodBoolean;
|
|
22
22
|
}, "strip", z.ZodTypeAny, {
|
|
23
|
-
|
|
23
|
+
type: "prompt" | "checkpoint" | "summary";
|
|
24
24
|
content: {
|
|
25
25
|
prompt?: string | undefined;
|
|
26
26
|
checkpoint_key?: string | undefined;
|
|
27
27
|
instructions?: string | undefined;
|
|
28
28
|
};
|
|
29
|
-
|
|
30
|
-
order: number;
|
|
29
|
+
id: string;
|
|
31
30
|
optional: boolean;
|
|
31
|
+
order: number;
|
|
32
32
|
}, {
|
|
33
|
-
|
|
33
|
+
type: "prompt" | "checkpoint" | "summary";
|
|
34
34
|
content: {
|
|
35
35
|
prompt?: string | undefined;
|
|
36
36
|
checkpoint_key?: string | undefined;
|
|
37
37
|
instructions?: string | undefined;
|
|
38
38
|
};
|
|
39
|
-
|
|
40
|
-
order: number;
|
|
39
|
+
id: string;
|
|
41
40
|
optional: boolean;
|
|
41
|
+
order: number;
|
|
42
42
|
}>;
|
|
43
43
|
export type JourneyStep = z.infer<typeof JourneyStepSchema>;
|
|
44
44
|
export declare const JourneySchema: z.ZodObject<{
|
|
@@ -65,25 +65,25 @@ export declare const JourneySchema: z.ZodObject<{
|
|
|
65
65
|
}>;
|
|
66
66
|
optional: z.ZodBoolean;
|
|
67
67
|
}, "strip", z.ZodTypeAny, {
|
|
68
|
-
|
|
68
|
+
type: "prompt" | "checkpoint" | "summary";
|
|
69
69
|
content: {
|
|
70
70
|
prompt?: string | undefined;
|
|
71
71
|
checkpoint_key?: string | undefined;
|
|
72
72
|
instructions?: string | undefined;
|
|
73
73
|
};
|
|
74
|
-
|
|
75
|
-
order: number;
|
|
74
|
+
id: string;
|
|
76
75
|
optional: boolean;
|
|
76
|
+
order: number;
|
|
77
77
|
}, {
|
|
78
|
-
|
|
78
|
+
type: "prompt" | "checkpoint" | "summary";
|
|
79
79
|
content: {
|
|
80
80
|
prompt?: string | undefined;
|
|
81
81
|
checkpoint_key?: string | undefined;
|
|
82
82
|
instructions?: string | undefined;
|
|
83
83
|
};
|
|
84
|
-
|
|
85
|
-
order: number;
|
|
84
|
+
id: string;
|
|
86
85
|
optional: boolean;
|
|
86
|
+
order: number;
|
|
87
87
|
}>, "many">;
|
|
88
88
|
estimatedMinutes: z.ZodNumber;
|
|
89
89
|
tags: z.ZodArray<z.ZodString, "many">;
|
|
@@ -92,15 +92,15 @@ export declare const JourneySchema: z.ZodObject<{
|
|
|
92
92
|
slug: string;
|
|
93
93
|
description: string;
|
|
94
94
|
steps: {
|
|
95
|
-
|
|
95
|
+
type: "prompt" | "checkpoint" | "summary";
|
|
96
96
|
content: {
|
|
97
97
|
prompt?: string | undefined;
|
|
98
98
|
checkpoint_key?: string | undefined;
|
|
99
99
|
instructions?: string | undefined;
|
|
100
100
|
};
|
|
101
|
-
|
|
102
|
-
order: number;
|
|
101
|
+
id: string;
|
|
103
102
|
optional: boolean;
|
|
103
|
+
order: number;
|
|
104
104
|
}[];
|
|
105
105
|
estimatedMinutes: number;
|
|
106
106
|
tags: string[];
|
|
@@ -110,15 +110,15 @@ export declare const JourneySchema: z.ZodObject<{
|
|
|
110
110
|
slug: string;
|
|
111
111
|
description: string;
|
|
112
112
|
steps: {
|
|
113
|
-
|
|
113
|
+
type: "prompt" | "checkpoint" | "summary";
|
|
114
114
|
content: {
|
|
115
115
|
prompt?: string | undefined;
|
|
116
116
|
checkpoint_key?: string | undefined;
|
|
117
117
|
instructions?: string | undefined;
|
|
118
118
|
};
|
|
119
|
-
|
|
120
|
-
order: number;
|
|
119
|
+
id: string;
|
|
121
120
|
optional: boolean;
|
|
121
|
+
order: number;
|
|
122
122
|
}[];
|
|
123
123
|
estimatedMinutes: number;
|
|
124
124
|
tags: string[];
|
package/dist/types/session.d.ts
CHANGED
|
@@ -21,7 +21,6 @@ export declare const CreateSessionSchema: z.ZodObject<{
|
|
|
21
21
|
conversation_id?: string | undefined;
|
|
22
22
|
}>>;
|
|
23
23
|
}, "strip", z.ZodTypeAny, {
|
|
24
|
-
journey_slug?: string | undefined;
|
|
25
24
|
context?: string | undefined;
|
|
26
25
|
auth?: {
|
|
27
26
|
user_id?: string | undefined;
|
|
@@ -29,8 +28,8 @@ export declare const CreateSessionSchema: z.ZodObject<{
|
|
|
29
28
|
token?: string | undefined;
|
|
30
29
|
conversation_id?: string | undefined;
|
|
31
30
|
} | undefined;
|
|
32
|
-
}, {
|
|
33
31
|
journey_slug?: string | undefined;
|
|
32
|
+
}, {
|
|
34
33
|
context?: string | undefined;
|
|
35
34
|
auth?: {
|
|
36
35
|
user_id?: string | undefined;
|
|
@@ -38,6 +37,7 @@ export declare const CreateSessionSchema: z.ZodObject<{
|
|
|
38
37
|
token?: string | undefined;
|
|
39
38
|
conversation_id?: string | undefined;
|
|
40
39
|
} | undefined;
|
|
40
|
+
journey_slug?: string | undefined;
|
|
41
41
|
}>;
|
|
42
42
|
export type CreateSessionInput = z.infer<typeof CreateSessionSchema>;
|
|
43
43
|
export declare const ResumeSessionSchema: z.ZodObject<{
|
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Response Sanitization Utilities
|
|
3
|
+
*
|
|
4
|
+
* Strips sensitive internal metadata from responses before returning to users.
|
|
5
|
+
* Full data is logged server-side for debugging.
|
|
6
|
+
*/
|
|
7
|
+
/**
|
|
8
|
+
* Sanitize a response object by removing sensitive fields
|
|
9
|
+
*/
|
|
10
|
+
export declare function sanitizeResponse<T extends Record<string, unknown>>(response: T, options?: {
|
|
11
|
+
logLevel?: 'debug' | 'info' | 'none';
|
|
12
|
+
allowFields?: string[];
|
|
13
|
+
}): Record<string, unknown>;
|
|
14
|
+
/**
|
|
15
|
+
* Sanitize an array of objects
|
|
16
|
+
*/
|
|
17
|
+
export declare function sanitizeArray<T extends Record<string, unknown>>(items: T[], options?: {
|
|
18
|
+
allowFields?: string[];
|
|
19
|
+
}): Record<string, unknown>[];
|
|
20
|
+
/**
|
|
21
|
+
* Check if a response contains any sensitive fields
|
|
22
|
+
*/
|
|
23
|
+
export declare function hasSensitiveData(obj: Record<string, unknown>): boolean;
|
|
24
|
+
//# sourceMappingURL=sanitize.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"sanitize.d.ts","sourceRoot":"","sources":["../../src/utils/sanitize.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAmDH;;GAEG;AACH,wBAAgB,gBAAgB,CAAC,CAAC,SAAS,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAChE,QAAQ,EAAE,CAAC,EACX,OAAO,CAAC,EAAE;IACR,QAAQ,CAAC,EAAE,OAAO,GAAG,MAAM,GAAG,MAAM,CAAC;IACrC,WAAW,CAAC,EAAE,MAAM,EAAE,CAAC;CACxB,GACA,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAyCzB;AAED;;GAEG;AACH,wBAAgB,aAAa,CAAC,CAAC,SAAS,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAC7D,KAAK,EAAE,CAAC,EAAE,EACV,OAAO,CAAC,EAAE;IAAE,WAAW,CAAC,EAAE,MAAM,EAAE,CAAA;CAAE,GACnC,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAAE,CAE3B;AAED;;GAEG;AACH,wBAAgB,gBAAgB,CAAC,GAAG,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,OAAO,CAatE"}
|