@rangerchaz/aimem 0.1.4 → 0.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.
Files changed (53) hide show
  1. package/README.md +589 -432
  2. package/dist/cli/commands/guardrails.d.ts +3 -0
  3. package/dist/cli/commands/guardrails.d.ts.map +1 -0
  4. package/dist/cli/commands/guardrails.js +340 -0
  5. package/dist/cli/commands/guardrails.js.map +1 -0
  6. package/dist/cli/commands/reindex.d.ts +7 -0
  7. package/dist/cli/commands/reindex.d.ts.map +1 -0
  8. package/dist/cli/commands/reindex.js +117 -0
  9. package/dist/cli/commands/reindex.js.map +1 -0
  10. package/dist/cli/index.js +15 -0
  11. package/dist/cli/index.js.map +1 -1
  12. package/dist/db/index.d.ts +30 -1
  13. package/dist/db/index.d.ts.map +1 -1
  14. package/dist/db/index.js +192 -1
  15. package/dist/db/index.js.map +1 -1
  16. package/dist/db/schema.d.ts +1 -0
  17. package/dist/db/schema.d.ts.map +1 -1
  18. package/dist/db/schema.js +54 -0
  19. package/dist/db/schema.js.map +1 -1
  20. package/dist/guardrails/analyzer.d.ts +20 -0
  21. package/dist/guardrails/analyzer.d.ts.map +1 -0
  22. package/dist/guardrails/analyzer.js +329 -0
  23. package/dist/guardrails/analyzer.js.map +1 -0
  24. package/dist/guardrails/calculator.d.ts +46 -0
  25. package/dist/guardrails/calculator.d.ts.map +1 -0
  26. package/dist/guardrails/calculator.js +97 -0
  27. package/dist/guardrails/calculator.js.map +1 -0
  28. package/dist/guardrails/enforcer.d.ts +28 -0
  29. package/dist/guardrails/enforcer.d.ts.map +1 -0
  30. package/dist/guardrails/enforcer.js +153 -0
  31. package/dist/guardrails/enforcer.js.map +1 -0
  32. package/dist/guardrails/index.d.ts +12 -0
  33. package/dist/guardrails/index.d.ts.map +1 -0
  34. package/dist/guardrails/index.js +17 -0
  35. package/dist/guardrails/index.js.map +1 -0
  36. package/dist/guardrails/linter-import.d.ts +31 -0
  37. package/dist/guardrails/linter-import.d.ts.map +1 -0
  38. package/dist/guardrails/linter-import.js +547 -0
  39. package/dist/guardrails/linter-import.js.map +1 -0
  40. package/dist/guardrails/responder.d.ts +28 -0
  41. package/dist/guardrails/responder.d.ts.map +1 -0
  42. package/dist/guardrails/responder.js +98 -0
  43. package/dist/guardrails/responder.js.map +1 -0
  44. package/dist/mcp/server.d.ts.map +1 -1
  45. package/dist/mcp/server.js +409 -10
  46. package/dist/mcp/server.js.map +1 -1
  47. package/dist/proxy/interceptor-mockttp.d.ts +4 -0
  48. package/dist/proxy/interceptor-mockttp.d.ts.map +1 -1
  49. package/dist/proxy/interceptor-mockttp.js +59 -5
  50. package/dist/proxy/interceptor-mockttp.js.map +1 -1
  51. package/dist/types/index.d.ts +58 -0
  52. package/dist/types/index.d.ts.map +1 -1
  53. package/package.json +56 -56
@@ -0,0 +1,547 @@
1
+ /**
2
+ * Linter Import
3
+ *
4
+ * Imports rules from existing linter configurations and converts them to guardrails.
5
+ * Supports: ESLint, RuboCop, Ruff/Black/isort (pyproject.toml), Prettier
6
+ */
7
+ import { readFileSync, existsSync } from 'fs';
8
+ import { join } from 'path';
9
+ import { insertGuardrail, incrementDikCounter } from '../db/index.js';
10
+ /**
11
+ * Scan project for linter configs and import rules.
12
+ */
13
+ export function importLinterRules(projectId, projectPath, options = {}) {
14
+ const configs = [];
15
+ // ESLint
16
+ const eslintConfig = findAndParseEslint(projectPath);
17
+ if (eslintConfig)
18
+ configs.push(eslintConfig);
19
+ // RuboCop
20
+ const rubocopConfig = findAndParseRubocop(projectPath);
21
+ if (rubocopConfig)
22
+ configs.push(rubocopConfig);
23
+ // Python (pyproject.toml)
24
+ const pythonConfig = findAndParsePyproject(projectPath);
25
+ if (pythonConfig)
26
+ configs.push(pythonConfig);
27
+ // Prettier
28
+ const prettierConfig = findAndParsePrettier(projectPath);
29
+ if (prettierConfig)
30
+ configs.push(prettierConfig);
31
+ // TSConfig
32
+ const tsConfig = findAndParseTsconfig(projectPath);
33
+ if (tsConfig)
34
+ configs.push(tsConfig);
35
+ const totalRules = configs.reduce((sum, c) => sum + c.rules.length, 0);
36
+ const saved = [];
37
+ if (!options.dryRun) {
38
+ for (const config of configs) {
39
+ for (const rule of config.rules) {
40
+ const guardrail = insertGuardrail(projectId, rule.category, rule.rule, rule.rationale, 'warn', 'imported', rule.source);
41
+ saved.push(guardrail);
42
+ incrementDikCounter(projectId, 'rules_inferred');
43
+ }
44
+ }
45
+ }
46
+ return { configs, totalRules, saved };
47
+ }
48
+ // ============ ESLint ============
49
+ function findAndParseEslint(projectPath) {
50
+ const files = [
51
+ '.eslintrc.json',
52
+ '.eslintrc.js',
53
+ '.eslintrc.cjs',
54
+ '.eslintrc.yml',
55
+ '.eslintrc.yaml',
56
+ '.eslintrc',
57
+ 'eslint.config.js',
58
+ 'eslint.config.mjs',
59
+ ];
60
+ for (const file of files) {
61
+ const filePath = join(projectPath, file);
62
+ if (existsSync(filePath)) {
63
+ try {
64
+ const rules = parseEslintConfig(filePath, file);
65
+ if (rules.length > 0) {
66
+ return { type: 'eslint', path: filePath, rules };
67
+ }
68
+ }
69
+ catch {
70
+ // Skip unparseable configs
71
+ }
72
+ }
73
+ }
74
+ // Check package.json for eslintConfig
75
+ const packagePath = join(projectPath, 'package.json');
76
+ if (existsSync(packagePath)) {
77
+ try {
78
+ const pkg = JSON.parse(readFileSync(packagePath, 'utf-8'));
79
+ if (pkg.eslintConfig) {
80
+ const rules = extractEslintRules(pkg.eslintConfig, packagePath);
81
+ if (rules.length > 0) {
82
+ return { type: 'eslint', path: packagePath, rules };
83
+ }
84
+ }
85
+ }
86
+ catch {
87
+ // Skip
88
+ }
89
+ }
90
+ return null;
91
+ }
92
+ function parseEslintConfig(filePath, fileName) {
93
+ if (fileName.endsWith('.json') || fileName === '.eslintrc') {
94
+ try {
95
+ const content = readFileSync(filePath, 'utf-8');
96
+ const config = JSON.parse(content);
97
+ return extractEslintRules(config, filePath);
98
+ }
99
+ catch {
100
+ return [];
101
+ }
102
+ }
103
+ if (fileName.endsWith('.yml') || fileName.endsWith('.yaml')) {
104
+ // Basic YAML parsing for simple configs
105
+ try {
106
+ const content = readFileSync(filePath, 'utf-8');
107
+ const config = parseSimpleYaml(content);
108
+ return extractEslintRules(config, filePath);
109
+ }
110
+ catch {
111
+ return [];
112
+ }
113
+ }
114
+ // For JS configs, we can't easily parse them, but we note their existence
115
+ return [{
116
+ category: 'design',
117
+ rule: 'Follow ESLint configuration',
118
+ rationale: `ESLint config exists at ${fileName}`,
119
+ source: filePath,
120
+ }];
121
+ }
122
+ function extractEslintRules(config, source) {
123
+ const rules = [];
124
+ const eslintRules = config.rules;
125
+ if (!eslintRules) {
126
+ // Just note that ESLint is configured
127
+ if (config.extends || config.plugins) {
128
+ rules.push({
129
+ category: 'design',
130
+ rule: 'Follow ESLint configuration',
131
+ rationale: `Extends: ${JSON.stringify(config.extends || config.plugins)}`,
132
+ source,
133
+ });
134
+ }
135
+ return rules;
136
+ }
137
+ // Map important ESLint rules to guardrails
138
+ const ruleMapping = {
139
+ 'no-console': { category: 'design', description: 'Avoid console.log in production code' },
140
+ 'no-debugger': { category: 'design', description: 'No debugger statements' },
141
+ 'no-unused-vars': { category: 'design', description: 'No unused variables' },
142
+ 'no-var': { category: 'design', description: 'Use const/let instead of var' },
143
+ 'prefer-const': { category: 'design', description: 'Use const when variable is not reassigned' },
144
+ 'eqeqeq': { category: 'design', description: 'Use === and !== instead of == and !=' },
145
+ 'curly': { category: 'design', description: 'Use curly braces for all control statements' },
146
+ 'no-eval': { category: 'security', description: 'Never use eval()' },
147
+ 'no-implied-eval': { category: 'security', description: 'No implied eval via setTimeout/setInterval strings' },
148
+ 'no-new-func': { category: 'security', description: 'No Function constructor' },
149
+ 'camelcase': { category: 'naming', description: 'Use camelCase for identifiers' },
150
+ 'new-cap': { category: 'naming', description: 'Constructors must start with capital letter' },
151
+ '@typescript-eslint/naming-convention': { category: 'naming', description: 'Follow TypeScript naming conventions' },
152
+ '@typescript-eslint/no-explicit-any': { category: 'design', description: 'Avoid using `any` type' },
153
+ '@typescript-eslint/explicit-function-return-type': { category: 'design', description: 'Functions must have explicit return types' },
154
+ };
155
+ for (const [ruleName, ruleValue] of Object.entries(eslintRules)) {
156
+ // Check if rule is enabled (not 'off' or 0)
157
+ const isEnabled = Array.isArray(ruleValue)
158
+ ? ruleValue[0] !== 'off' && ruleValue[0] !== 0
159
+ : ruleValue !== 'off' && ruleValue !== 0;
160
+ if (isEnabled && ruleMapping[ruleName]) {
161
+ const mapping = ruleMapping[ruleName];
162
+ rules.push({
163
+ category: mapping.category,
164
+ rule: mapping.description,
165
+ rationale: `ESLint rule: ${ruleName}`,
166
+ source,
167
+ });
168
+ }
169
+ }
170
+ return rules;
171
+ }
172
+ // ============ RuboCop ============
173
+ function findAndParseRubocop(projectPath) {
174
+ const filePath = join(projectPath, '.rubocop.yml');
175
+ if (!existsSync(filePath))
176
+ return null;
177
+ try {
178
+ const content = readFileSync(filePath, 'utf-8');
179
+ const rules = parseRubocopConfig(content, filePath);
180
+ if (rules.length > 0) {
181
+ return { type: 'rubocop', path: filePath, rules };
182
+ }
183
+ }
184
+ catch {
185
+ // Skip
186
+ }
187
+ return null;
188
+ }
189
+ function parseRubocopConfig(content, source) {
190
+ const rules = [];
191
+ // Parse key cops from RuboCop config
192
+ const copMapping = {
193
+ 'Style/StringLiterals': { category: 'design', description: 'Use consistent string quote style' },
194
+ 'Style/FrozenStringLiteralComment': { category: 'design', description: 'Include frozen_string_literal comment' },
195
+ 'Style/Documentation': { category: 'design', description: 'Document classes and modules' },
196
+ 'Naming/MethodName': { category: 'naming', description: 'Follow Ruby method naming conventions' },
197
+ 'Naming/VariableName': { category: 'naming', description: 'Follow Ruby variable naming conventions' },
198
+ 'Naming/ClassAndModuleCamelCase': { category: 'naming', description: 'Use CamelCase for classes and modules' },
199
+ 'Security/Eval': { category: 'security', description: 'Never use eval' },
200
+ 'Security/Open': { category: 'security', description: 'Be careful with Kernel#open' },
201
+ 'Security/YAMLLoad': { category: 'security', description: 'Use YAML.safe_load instead of YAML.load' },
202
+ 'Metrics/MethodLength': { category: 'design', description: 'Keep methods short' },
203
+ 'Metrics/ClassLength': { category: 'architecture', description: 'Keep classes focused and small' },
204
+ };
205
+ for (const [cop, mapping] of Object.entries(copMapping)) {
206
+ // Check if cop is mentioned and enabled
207
+ const copPattern = new RegExp(`^${cop.replace('/', '/')}:`, 'm');
208
+ if (copPattern.test(content)) {
209
+ // Check if it's not disabled
210
+ const disabledPattern = new RegExp(`${cop.replace('/', '/')}:[\\s\\S]*?Enabled:\\s*false`, 'm');
211
+ if (!disabledPattern.test(content)) {
212
+ rules.push({
213
+ category: mapping.category,
214
+ rule: mapping.description,
215
+ rationale: `RuboCop cop: ${cop}`,
216
+ source,
217
+ });
218
+ }
219
+ }
220
+ }
221
+ // If no specific cops found but file exists, add general rule
222
+ if (rules.length === 0) {
223
+ rules.push({
224
+ category: 'design',
225
+ rule: 'Follow RuboCop configuration',
226
+ rationale: 'RuboCop config exists',
227
+ source,
228
+ });
229
+ }
230
+ return rules;
231
+ }
232
+ // ============ Python (pyproject.toml) ============
233
+ function findAndParsePyproject(projectPath) {
234
+ const filePath = join(projectPath, 'pyproject.toml');
235
+ if (!existsSync(filePath))
236
+ return null;
237
+ try {
238
+ const content = readFileSync(filePath, 'utf-8');
239
+ const rules = parsePyprojectConfig(content, filePath);
240
+ if (rules.length > 0) {
241
+ return { type: 'python', path: filePath, rules };
242
+ }
243
+ }
244
+ catch {
245
+ // Skip
246
+ }
247
+ return null;
248
+ }
249
+ function parsePyprojectConfig(content, source) {
250
+ const rules = [];
251
+ // Check for ruff
252
+ if (content.includes('[tool.ruff]')) {
253
+ rules.push({
254
+ category: 'design',
255
+ rule: 'Follow Ruff linting rules',
256
+ rationale: 'Ruff configured in pyproject.toml',
257
+ source,
258
+ });
259
+ // Check for specific ruff rules
260
+ if (content.includes('select') && content.includes('"E"')) {
261
+ rules.push({
262
+ category: 'design',
263
+ rule: 'Fix pycodestyle errors',
264
+ rationale: 'Ruff E rules enabled',
265
+ source,
266
+ });
267
+ }
268
+ if (content.includes('"F"')) {
269
+ rules.push({
270
+ category: 'design',
271
+ rule: 'Fix Pyflakes errors',
272
+ rationale: 'Ruff F rules enabled',
273
+ source,
274
+ });
275
+ }
276
+ if (content.includes('"S"')) {
277
+ rules.push({
278
+ category: 'security',
279
+ rule: 'Follow Bandit security rules',
280
+ rationale: 'Ruff S (security) rules enabled',
281
+ source,
282
+ });
283
+ }
284
+ if (content.includes('"N"')) {
285
+ rules.push({
286
+ category: 'naming',
287
+ rule: 'Follow PEP8 naming conventions',
288
+ rationale: 'Ruff N (naming) rules enabled',
289
+ source,
290
+ });
291
+ }
292
+ }
293
+ // Check for black
294
+ if (content.includes('[tool.black]')) {
295
+ rules.push({
296
+ category: 'design',
297
+ rule: 'Format code with Black',
298
+ rationale: 'Black configured in pyproject.toml',
299
+ source,
300
+ });
301
+ // Extract line length if specified
302
+ const lineLengthMatch = content.match(/line-length\s*=\s*(\d+)/);
303
+ if (lineLengthMatch) {
304
+ rules.push({
305
+ category: 'design',
306
+ rule: `Maximum line length is ${lineLengthMatch[1]} characters`,
307
+ rationale: 'Black line-length setting',
308
+ source,
309
+ });
310
+ }
311
+ }
312
+ // Check for isort
313
+ if (content.includes('[tool.isort]')) {
314
+ rules.push({
315
+ category: 'design',
316
+ rule: 'Sort imports with isort',
317
+ rationale: 'isort configured in pyproject.toml',
318
+ source,
319
+ });
320
+ }
321
+ // Check for mypy
322
+ if (content.includes('[tool.mypy]')) {
323
+ rules.push({
324
+ category: 'design',
325
+ rule: 'Code must pass mypy type checking',
326
+ rationale: 'mypy configured in pyproject.toml',
327
+ source,
328
+ });
329
+ if (content.includes('strict = true') || content.includes('strict=true')) {
330
+ rules.push({
331
+ category: 'design',
332
+ rule: 'Use strict type annotations',
333
+ rationale: 'mypy strict mode enabled',
334
+ source,
335
+ });
336
+ }
337
+ }
338
+ return rules;
339
+ }
340
+ // ============ Prettier ============
341
+ function findAndParsePrettier(projectPath) {
342
+ const files = [
343
+ '.prettierrc',
344
+ '.prettierrc.json',
345
+ '.prettierrc.js',
346
+ '.prettierrc.cjs',
347
+ '.prettierrc.yml',
348
+ '.prettierrc.yaml',
349
+ 'prettier.config.js',
350
+ 'prettier.config.cjs',
351
+ ];
352
+ for (const file of files) {
353
+ const filePath = join(projectPath, file);
354
+ if (existsSync(filePath)) {
355
+ try {
356
+ const rules = parsePrettierConfig(filePath, file);
357
+ if (rules.length > 0) {
358
+ return { type: 'prettier', path: filePath, rules };
359
+ }
360
+ }
361
+ catch {
362
+ // Skip
363
+ }
364
+ }
365
+ }
366
+ // Check package.json for prettier config
367
+ const packagePath = join(projectPath, 'package.json');
368
+ if (existsSync(packagePath)) {
369
+ try {
370
+ const pkg = JSON.parse(readFileSync(packagePath, 'utf-8'));
371
+ if (pkg.prettier) {
372
+ const rules = extractPrettierRules(pkg.prettier, packagePath);
373
+ if (rules.length > 0) {
374
+ return { type: 'prettier', path: packagePath, rules };
375
+ }
376
+ }
377
+ }
378
+ catch {
379
+ // Skip
380
+ }
381
+ }
382
+ return null;
383
+ }
384
+ function parsePrettierConfig(filePath, fileName) {
385
+ if (fileName.endsWith('.json') || fileName === '.prettierrc') {
386
+ try {
387
+ const content = readFileSync(filePath, 'utf-8');
388
+ const config = JSON.parse(content);
389
+ return extractPrettierRules(config, filePath);
390
+ }
391
+ catch {
392
+ return [];
393
+ }
394
+ }
395
+ // For JS/YML configs, just note existence
396
+ return [{
397
+ category: 'design',
398
+ rule: 'Format code with Prettier',
399
+ rationale: `Prettier config exists at ${fileName}`,
400
+ source: filePath,
401
+ }];
402
+ }
403
+ function extractPrettierRules(config, source) {
404
+ const rules = [];
405
+ rules.push({
406
+ category: 'design',
407
+ rule: 'Format code with Prettier',
408
+ rationale: 'Prettier is configured',
409
+ source,
410
+ });
411
+ if (config.semi === false) {
412
+ rules.push({
413
+ category: 'design',
414
+ rule: 'No semicolons',
415
+ rationale: 'Prettier semi: false',
416
+ source,
417
+ });
418
+ }
419
+ if (config.singleQuote === true) {
420
+ rules.push({
421
+ category: 'design',
422
+ rule: 'Use single quotes for strings',
423
+ rationale: 'Prettier singleQuote: true',
424
+ source,
425
+ });
426
+ }
427
+ if (typeof config.printWidth === 'number') {
428
+ rules.push({
429
+ category: 'design',
430
+ rule: `Maximum line length is ${config.printWidth} characters`,
431
+ rationale: `Prettier printWidth: ${config.printWidth}`,
432
+ source,
433
+ });
434
+ }
435
+ if (typeof config.tabWidth === 'number') {
436
+ rules.push({
437
+ category: 'design',
438
+ rule: `Use ${config.tabWidth}-space indentation`,
439
+ rationale: `Prettier tabWidth: ${config.tabWidth}`,
440
+ source,
441
+ });
442
+ }
443
+ return rules;
444
+ }
445
+ // ============ TypeScript ============
446
+ function findAndParseTsconfig(projectPath) {
447
+ const filePath = join(projectPath, 'tsconfig.json');
448
+ if (!existsSync(filePath))
449
+ return null;
450
+ try {
451
+ const content = readFileSync(filePath, 'utf-8');
452
+ // Remove comments for JSON parsing
453
+ const cleanContent = content.replace(/\/\*[\s\S]*?\*\/|\/\/.*/g, '');
454
+ const config = JSON.parse(cleanContent);
455
+ const rules = extractTsconfigRules(config, filePath);
456
+ if (rules.length > 0) {
457
+ return { type: 'typescript', path: filePath, rules };
458
+ }
459
+ }
460
+ catch {
461
+ // Skip
462
+ }
463
+ return null;
464
+ }
465
+ function extractTsconfigRules(config, source) {
466
+ const rules = [];
467
+ const compilerOptions = config.compilerOptions;
468
+ if (!compilerOptions)
469
+ return rules;
470
+ if (compilerOptions.strict === true) {
471
+ rules.push({
472
+ category: 'design',
473
+ rule: 'TypeScript strict mode is enabled',
474
+ rationale: 'tsconfig strict: true',
475
+ source,
476
+ });
477
+ }
478
+ if (compilerOptions.noImplicitAny === true) {
479
+ rules.push({
480
+ category: 'design',
481
+ rule: 'No implicit any types',
482
+ rationale: 'tsconfig noImplicitAny: true',
483
+ source,
484
+ });
485
+ }
486
+ if (compilerOptions.strictNullChecks === true) {
487
+ rules.push({
488
+ category: 'design',
489
+ rule: 'Handle null and undefined explicitly',
490
+ rationale: 'tsconfig strictNullChecks: true',
491
+ source,
492
+ });
493
+ }
494
+ if (compilerOptions.noUnusedLocals === true) {
495
+ rules.push({
496
+ category: 'design',
497
+ rule: 'No unused local variables',
498
+ rationale: 'tsconfig noUnusedLocals: true',
499
+ source,
500
+ });
501
+ }
502
+ if (compilerOptions.noUnusedParameters === true) {
503
+ rules.push({
504
+ category: 'design',
505
+ rule: 'No unused function parameters',
506
+ rationale: 'tsconfig noUnusedParameters: true',
507
+ source,
508
+ });
509
+ }
510
+ return rules;
511
+ }
512
+ // ============ Helpers ============
513
+ /**
514
+ * Very basic YAML parser for simple key-value configs.
515
+ * Only handles flat structures and simple nested objects.
516
+ */
517
+ function parseSimpleYaml(content) {
518
+ const result = {};
519
+ const lines = content.split('\n');
520
+ let currentKey = '';
521
+ let currentObject = result;
522
+ for (const line of lines) {
523
+ // Skip comments and empty lines
524
+ if (line.trim().startsWith('#') || line.trim() === '')
525
+ continue;
526
+ const indent = line.match(/^(\s*)/)?.[1].length || 0;
527
+ if (indent === 0 && line.includes(':')) {
528
+ const [key, ...valueParts] = line.split(':');
529
+ const value = valueParts.join(':').trim();
530
+ currentKey = key.trim();
531
+ if (value) {
532
+ result[currentKey] = value;
533
+ }
534
+ else {
535
+ result[currentKey] = {};
536
+ currentObject = result[currentKey];
537
+ }
538
+ }
539
+ else if (indent > 0 && line.includes(':')) {
540
+ const [key, ...valueParts] = line.trim().split(':');
541
+ const value = valueParts.join(':').trim();
542
+ currentObject[key.trim()] = value || true;
543
+ }
544
+ }
545
+ return result;
546
+ }
547
+ //# sourceMappingURL=linter-import.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"linter-import.js","sourceRoot":"","sources":["../../src/guardrails/linter-import.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,EAAE,YAAY,EAAE,UAAU,EAAE,MAAM,IAAI,CAAC;AAC9C,OAAO,EAAE,IAAI,EAAE,MAAM,MAAM,CAAC;AAC5B,OAAO,EAAE,eAAe,EAAE,mBAAmB,EAAE,MAAM,gBAAgB,CAAC;AAsBtE;;GAEG;AACH,MAAM,UAAU,iBAAiB,CAC/B,SAAiB,EACjB,WAAmB,EACnB,UAAgC,EAAE;IAElC,MAAM,OAAO,GAAmB,EAAE,CAAC;IAEnC,SAAS;IACT,MAAM,YAAY,GAAG,kBAAkB,CAAC,WAAW,CAAC,CAAC;IACrD,IAAI,YAAY;QAAE,OAAO,CAAC,IAAI,CAAC,YAAY,CAAC,CAAC;IAE7C,UAAU;IACV,MAAM,aAAa,GAAG,mBAAmB,CAAC,WAAW,CAAC,CAAC;IACvD,IAAI,aAAa;QAAE,OAAO,CAAC,IAAI,CAAC,aAAa,CAAC,CAAC;IAE/C,0BAA0B;IAC1B,MAAM,YAAY,GAAG,qBAAqB,CAAC,WAAW,CAAC,CAAC;IACxD,IAAI,YAAY;QAAE,OAAO,CAAC,IAAI,CAAC,YAAY,CAAC,CAAC;IAE7C,WAAW;IACX,MAAM,cAAc,GAAG,oBAAoB,CAAC,WAAW,CAAC,CAAC;IACzD,IAAI,cAAc;QAAE,OAAO,CAAC,IAAI,CAAC,cAAc,CAAC,CAAC;IAEjD,WAAW;IACX,MAAM,QAAQ,GAAG,oBAAoB,CAAC,WAAW,CAAC,CAAC;IACnD,IAAI,QAAQ;QAAE,OAAO,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;IAErC,MAAM,UAAU,GAAG,OAAO,CAAC,MAAM,CAAC,CAAC,GAAG,EAAE,CAAC,EAAE,EAAE,CAAC,GAAG,GAAG,CAAC,CAAC,KAAK,CAAC,MAAM,EAAE,CAAC,CAAC,CAAC;IACvE,MAAM,KAAK,GAAgB,EAAE,CAAC;IAE9B,IAAI,CAAC,OAAO,CAAC,MAAM,EAAE,CAAC;QACpB,KAAK,MAAM,MAAM,IAAI,OAAO,EAAE,CAAC;YAC7B,KAAK,MAAM,IAAI,IAAI,MAAM,CAAC,KAAK,EAAE,CAAC;gBAChC,MAAM,SAAS,GAAG,eAAe,CAC/B,SAAS,EACT,IAAI,CAAC,QAAQ,EACb,IAAI,CAAC,IAAI,EACT,IAAI,CAAC,SAAS,EACd,MAAM,EACN,UAAU,EACV,IAAI,CAAC,MAAM,CACZ,CAAC;gBACF,KAAK,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC;gBACtB,mBAAmB,CAAC,SAAS,EAAE,gBAAgB,CAAC,CAAC;YACnD,CAAC;QACH,CAAC;IACH,CAAC;IAED,OAAO,EAAE,OAAO,EAAE,UAAU,EAAE,KAAK,EAAE,CAAC;AACxC,CAAC;AAED,mCAAmC;AAEnC,SAAS,kBAAkB,CAAC,WAAmB;IAC7C,MAAM,KAAK,GAAG;QACZ,gBAAgB;QAChB,cAAc;QACd,eAAe;QACf,eAAe;QACf,gBAAgB;QAChB,WAAW;QACX,kBAAkB;QAClB,mBAAmB;KACpB,CAAC;IAEF,KAAK,MAAM,IAAI,IAAI,KAAK,EAAE,CAAC;QACzB,MAAM,QAAQ,GAAG,IAAI,CAAC,WAAW,EAAE,IAAI,CAAC,CAAC;QACzC,IAAI,UAAU,CAAC,QAAQ,CAAC,EAAE,CAAC;YACzB,IAAI,CAAC;gBACH,MAAM,KAAK,GAAG,iBAAiB,CAAC,QAAQ,EAAE,IAAI,CAAC,CAAC;gBAChD,IAAI,KAAK,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;oBACrB,OAAO,EAAE,IAAI,EAAE,QAAQ,EAAE,IAAI,EAAE,QAAQ,EAAE,KAAK,EAAE,CAAC;gBACnD,CAAC;YACH,CAAC;YAAC,MAAM,CAAC;gBACP,2BAA2B;YAC7B,CAAC;QACH,CAAC;IACH,CAAC;IAED,sCAAsC;IACtC,MAAM,WAAW,GAAG,IAAI,CAAC,WAAW,EAAE,cAAc,CAAC,CAAC;IACtD,IAAI,UAAU,CAAC,WAAW,CAAC,EAAE,CAAC;QAC5B,IAAI,CAAC;YACH,MAAM,GAAG,GAAG,IAAI,CAAC,KAAK,CAAC,YAAY,CAAC,WAAW,EAAE,OAAO,CAAC,CAAC,CAAC;YAC3D,IAAI,GAAG,CAAC,YAAY,EAAE,CAAC;gBACrB,MAAM,KAAK,GAAG,kBAAkB,CAAC,GAAG,CAAC,YAAY,EAAE,WAAW,CAAC,CAAC;gBAChE,IAAI,KAAK,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;oBACrB,OAAO,EAAE,IAAI,EAAE,QAAQ,EAAE,IAAI,EAAE,WAAW,EAAE,KAAK,EAAE,CAAC;gBACtD,CAAC;YACH,CAAC;QACH,CAAC;QAAC,MAAM,CAAC;YACP,OAAO;QACT,CAAC;IACH,CAAC;IAED,OAAO,IAAI,CAAC;AACd,CAAC;AAED,SAAS,iBAAiB,CAAC,QAAgB,EAAE,QAAgB;IAC3D,IAAI,QAAQ,CAAC,QAAQ,CAAC,OAAO,CAAC,IAAI,QAAQ,KAAK,WAAW,EAAE,CAAC;QAC3D,IAAI,CAAC;YACH,MAAM,OAAO,GAAG,YAAY,CAAC,QAAQ,EAAE,OAAO,CAAC,CAAC;YAChD,MAAM,MAAM,GAAG,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC;YACnC,OAAO,kBAAkB,CAAC,MAAM,EAAE,QAAQ,CAAC,CAAC;QAC9C,CAAC;QAAC,MAAM,CAAC;YACP,OAAO,EAAE,CAAC;QACZ,CAAC;IACH,CAAC;IAED,IAAI,QAAQ,CAAC,QAAQ,CAAC,MAAM,CAAC,IAAI,QAAQ,CAAC,QAAQ,CAAC,OAAO,CAAC,EAAE,CAAC;QAC5D,wCAAwC;QACxC,IAAI,CAAC;YACH,MAAM,OAAO,GAAG,YAAY,CAAC,QAAQ,EAAE,OAAO,CAAC,CAAC;YAChD,MAAM,MAAM,GAAG,eAAe,CAAC,OAAO,CAAC,CAAC;YACxC,OAAO,kBAAkB,CAAC,MAAM,EAAE,QAAQ,CAAC,CAAC;QAC9C,CAAC;QAAC,MAAM,CAAC;YACP,OAAO,EAAE,CAAC;QACZ,CAAC;IACH,CAAC;IAED,0EAA0E;IAC1E,OAAO,CAAC;YACN,QAAQ,EAAE,QAAQ;YAClB,IAAI,EAAE,6BAA6B;YACnC,SAAS,EAAE,2BAA2B,QAAQ,EAAE;YAChD,MAAM,EAAE,QAAQ;SACjB,CAAC,CAAC;AACL,CAAC;AAED,SAAS,kBAAkB,CAAC,MAA+B,EAAE,MAAc;IACzE,MAAM,KAAK,GAAmB,EAAE,CAAC;IACjC,MAAM,WAAW,GAAG,MAAM,CAAC,KAA4C,CAAC;IAExE,IAAI,CAAC,WAAW,EAAE,CAAC;QACjB,sCAAsC;QACtC,IAAI,MAAM,CAAC,OAAO,IAAI,MAAM,CAAC,OAAO,EAAE,CAAC;YACrC,KAAK,CAAC,IAAI,CAAC;gBACT,QAAQ,EAAE,QAAQ;gBAClB,IAAI,EAAE,6BAA6B;gBACnC,SAAS,EAAE,YAAY,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC,OAAO,IAAI,MAAM,CAAC,OAAO,CAAC,EAAE;gBACzE,MAAM;aACP,CAAC,CAAC;QACL,CAAC;QACD,OAAO,KAAK,CAAC;IACf,CAAC;IAED,2CAA2C;IAC3C,MAAM,WAAW,GAAyE;QACxF,YAAY,EAAE,EAAE,QAAQ,EAAE,QAAQ,EAAE,WAAW,EAAE,sCAAsC,EAAE;QACzF,aAAa,EAAE,EAAE,QAAQ,EAAE,QAAQ,EAAE,WAAW,EAAE,wBAAwB,EAAE;QAC5E,gBAAgB,EAAE,EAAE,QAAQ,EAAE,QAAQ,EAAE,WAAW,EAAE,qBAAqB,EAAE;QAC5E,QAAQ,EAAE,EAAE,QAAQ,EAAE,QAAQ,EAAE,WAAW,EAAE,8BAA8B,EAAE;QAC7E,cAAc,EAAE,EAAE,QAAQ,EAAE,QAAQ,EAAE,WAAW,EAAE,2CAA2C,EAAE;QAChG,QAAQ,EAAE,EAAE,QAAQ,EAAE,QAAQ,EAAE,WAAW,EAAE,sCAAsC,EAAE;QACrF,OAAO,EAAE,EAAE,QAAQ,EAAE,QAAQ,EAAE,WAAW,EAAE,6CAA6C,EAAE;QAC3F,SAAS,EAAE,EAAE,QAAQ,EAAE,UAAU,EAAE,WAAW,EAAE,kBAAkB,EAAE;QACpE,iBAAiB,EAAE,EAAE,QAAQ,EAAE,UAAU,EAAE,WAAW,EAAE,oDAAoD,EAAE;QAC9G,aAAa,EAAE,EAAE,QAAQ,EAAE,UAAU,EAAE,WAAW,EAAE,yBAAyB,EAAE;QAC/E,WAAW,EAAE,EAAE,QAAQ,EAAE,QAAQ,EAAE,WAAW,EAAE,+BAA+B,EAAE;QACjF,SAAS,EAAE,EAAE,QAAQ,EAAE,QAAQ,EAAE,WAAW,EAAE,6CAA6C,EAAE;QAC7F,sCAAsC,EAAE,EAAE,QAAQ,EAAE,QAAQ,EAAE,WAAW,EAAE,sCAAsC,EAAE;QACnH,oCAAoC,EAAE,EAAE,QAAQ,EAAE,QAAQ,EAAE,WAAW,EAAE,wBAAwB,EAAE;QACnG,kDAAkD,EAAE,EAAE,QAAQ,EAAE,QAAQ,EAAE,WAAW,EAAE,2CAA2C,EAAE;KACrI,CAAC;IAEF,KAAK,MAAM,CAAC,QAAQ,EAAE,SAAS,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,WAAW,CAAC,EAAE,CAAC;QAChE,4CAA4C;QAC5C,MAAM,SAAS,GAAG,KAAK,CAAC,OAAO,CAAC,SAAS,CAAC;YACxC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,KAAK,KAAK,IAAI,SAAS,CAAC,CAAC,CAAC,KAAK,CAAC;YAC9C,CAAC,CAAC,SAAS,KAAK,KAAK,IAAI,SAAS,KAAK,CAAC,CAAC;QAE3C,IAAI,SAAS,IAAI,WAAW,CAAC,QAAQ,CAAC,EAAE,CAAC;YACvC,MAAM,OAAO,GAAG,WAAW,CAAC,QAAQ,CAAC,CAAC;YACtC,KAAK,CAAC,IAAI,CAAC;gBACT,QAAQ,EAAE,OAAO,CAAC,QAAQ;gBAC1B,IAAI,EAAE,OAAO,CAAC,WAAW;gBACzB,SAAS,EAAE,gBAAgB,QAAQ,EAAE;gBACrC,MAAM;aACP,CAAC,CAAC;QACL,CAAC;IACH,CAAC;IAED,OAAO,KAAK,CAAC;AACf,CAAC;AAED,oCAAoC;AAEpC,SAAS,mBAAmB,CAAC,WAAmB;IAC9C,MAAM,QAAQ,GAAG,IAAI,CAAC,WAAW,EAAE,cAAc,CAAC,CAAC;IACnD,IAAI,CAAC,UAAU,CAAC,QAAQ,CAAC;QAAE,OAAO,IAAI,CAAC;IAEvC,IAAI,CAAC;QACH,MAAM,OAAO,GAAG,YAAY,CAAC,QAAQ,EAAE,OAAO,CAAC,CAAC;QAChD,MAAM,KAAK,GAAG,kBAAkB,CAAC,OAAO,EAAE,QAAQ,CAAC,CAAC;QACpD,IAAI,KAAK,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;YACrB,OAAO,EAAE,IAAI,EAAE,SAAS,EAAE,IAAI,EAAE,QAAQ,EAAE,KAAK,EAAE,CAAC;QACpD,CAAC;IACH,CAAC;IAAC,MAAM,CAAC;QACP,OAAO;IACT,CAAC;IAED,OAAO,IAAI,CAAC;AACd,CAAC;AAED,SAAS,kBAAkB,CAAC,OAAe,EAAE,MAAc;IACzD,MAAM,KAAK,GAAmB,EAAE,CAAC;IAEjC,qCAAqC;IACrC,MAAM,UAAU,GAAyE;QACvF,sBAAsB,EAAE,EAAE,QAAQ,EAAE,QAAQ,EAAE,WAAW,EAAE,mCAAmC,EAAE;QAChG,kCAAkC,EAAE,EAAE,QAAQ,EAAE,QAAQ,EAAE,WAAW,EAAE,uCAAuC,EAAE;QAChH,qBAAqB,EAAE,EAAE,QAAQ,EAAE,QAAQ,EAAE,WAAW,EAAE,8BAA8B,EAAE;QAC1F,mBAAmB,EAAE,EAAE,QAAQ,EAAE,QAAQ,EAAE,WAAW,EAAE,uCAAuC,EAAE;QACjG,qBAAqB,EAAE,EAAE,QAAQ,EAAE,QAAQ,EAAE,WAAW,EAAE,yCAAyC,EAAE;QACrG,gCAAgC,EAAE,EAAE,QAAQ,EAAE,QAAQ,EAAE,WAAW,EAAE,uCAAuC,EAAE;QAC9G,eAAe,EAAE,EAAE,QAAQ,EAAE,UAAU,EAAE,WAAW,EAAE,gBAAgB,EAAE;QACxE,eAAe,EAAE,EAAE,QAAQ,EAAE,UAAU,EAAE,WAAW,EAAE,6BAA6B,EAAE;QACrF,mBAAmB,EAAE,EAAE,QAAQ,EAAE,UAAU,EAAE,WAAW,EAAE,yCAAyC,EAAE;QACrG,sBAAsB,EAAE,EAAE,QAAQ,EAAE,QAAQ,EAAE,WAAW,EAAE,oBAAoB,EAAE;QACjF,qBAAqB,EAAE,EAAE,QAAQ,EAAE,cAAc,EAAE,WAAW,EAAE,gCAAgC,EAAE;KACnG,CAAC;IAEF,KAAK,MAAM,CAAC,GAAG,EAAE,OAAO,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,UAAU,CAAC,EAAE,CAAC;QACxD,wCAAwC;QACxC,MAAM,UAAU,GAAG,IAAI,MAAM,CAAC,IAAI,GAAG,CAAC,OAAO,CAAC,GAAG,EAAE,GAAG,CAAC,GAAG,EAAE,GAAG,CAAC,CAAC;QACjE,IAAI,UAAU,CAAC,IAAI,CAAC,OAAO,CAAC,EAAE,CAAC;YAC7B,6BAA6B;YAC7B,MAAM,eAAe,GAAG,IAAI,MAAM,CAAC,GAAG,GAAG,CAAC,OAAO,CAAC,GAAG,EAAE,GAAG,CAAC,8BAA8B,EAAE,GAAG,CAAC,CAAC;YAChG,IAAI,CAAC,eAAe,CAAC,IAAI,CAAC,OAAO,CAAC,EAAE,CAAC;gBACnC,KAAK,CAAC,IAAI,CAAC;oBACT,QAAQ,EAAE,OAAO,CAAC,QAAQ;oBAC1B,IAAI,EAAE,OAAO,CAAC,WAAW;oBACzB,SAAS,EAAE,gBAAgB,GAAG,EAAE;oBAChC,MAAM;iBACP,CAAC,CAAC;YACL,CAAC;QACH,CAAC;IACH,CAAC;IAED,8DAA8D;IAC9D,IAAI,KAAK,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QACvB,KAAK,CAAC,IAAI,CAAC;YACT,QAAQ,EAAE,QAAQ;YAClB,IAAI,EAAE,8BAA8B;YACpC,SAAS,EAAE,uBAAuB;YAClC,MAAM;SACP,CAAC,CAAC;IACL,CAAC;IAED,OAAO,KAAK,CAAC;AACf,CAAC;AAED,oDAAoD;AAEpD,SAAS,qBAAqB,CAAC,WAAmB;IAChD,MAAM,QAAQ,GAAG,IAAI,CAAC,WAAW,EAAE,gBAAgB,CAAC,CAAC;IACrD,IAAI,CAAC,UAAU,CAAC,QAAQ,CAAC;QAAE,OAAO,IAAI,CAAC;IAEvC,IAAI,CAAC;QACH,MAAM,OAAO,GAAG,YAAY,CAAC,QAAQ,EAAE,OAAO,CAAC,CAAC;QAChD,MAAM,KAAK,GAAG,oBAAoB,CAAC,OAAO,EAAE,QAAQ,CAAC,CAAC;QACtD,IAAI,KAAK,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;YACrB,OAAO,EAAE,IAAI,EAAE,QAAQ,EAAE,IAAI,EAAE,QAAQ,EAAE,KAAK,EAAE,CAAC;QACnD,CAAC;IACH,CAAC;IAAC,MAAM,CAAC;QACP,OAAO;IACT,CAAC;IAED,OAAO,IAAI,CAAC;AACd,CAAC;AAED,SAAS,oBAAoB,CAAC,OAAe,EAAE,MAAc;IAC3D,MAAM,KAAK,GAAmB,EAAE,CAAC;IAEjC,iBAAiB;IACjB,IAAI,OAAO,CAAC,QAAQ,CAAC,aAAa,CAAC,EAAE,CAAC;QACpC,KAAK,CAAC,IAAI,CAAC;YACT,QAAQ,EAAE,QAAQ;YAClB,IAAI,EAAE,2BAA2B;YACjC,SAAS,EAAE,mCAAmC;YAC9C,MAAM;SACP,CAAC,CAAC;QAEH,gCAAgC;QAChC,IAAI,OAAO,CAAC,QAAQ,CAAC,QAAQ,CAAC,IAAI,OAAO,CAAC,QAAQ,CAAC,KAAK,CAAC,EAAE,CAAC;YAC1D,KAAK,CAAC,IAAI,CAAC;gBACT,QAAQ,EAAE,QAAQ;gBAClB,IAAI,EAAE,wBAAwB;gBAC9B,SAAS,EAAE,sBAAsB;gBACjC,MAAM;aACP,CAAC,CAAC;QACL,CAAC;QACD,IAAI,OAAO,CAAC,QAAQ,CAAC,KAAK,CAAC,EAAE,CAAC;YAC5B,KAAK,CAAC,IAAI,CAAC;gBACT,QAAQ,EAAE,QAAQ;gBAClB,IAAI,EAAE,qBAAqB;gBAC3B,SAAS,EAAE,sBAAsB;gBACjC,MAAM;aACP,CAAC,CAAC;QACL,CAAC;QACD,IAAI,OAAO,CAAC,QAAQ,CAAC,KAAK,CAAC,EAAE,CAAC;YAC5B,KAAK,CAAC,IAAI,CAAC;gBACT,QAAQ,EAAE,UAAU;gBACpB,IAAI,EAAE,8BAA8B;gBACpC,SAAS,EAAE,iCAAiC;gBAC5C,MAAM;aACP,CAAC,CAAC;QACL,CAAC;QACD,IAAI,OAAO,CAAC,QAAQ,CAAC,KAAK,CAAC,EAAE,CAAC;YAC5B,KAAK,CAAC,IAAI,CAAC;gBACT,QAAQ,EAAE,QAAQ;gBAClB,IAAI,EAAE,gCAAgC;gBACtC,SAAS,EAAE,+BAA+B;gBAC1C,MAAM;aACP,CAAC,CAAC;QACL,CAAC;IACH,CAAC;IAED,kBAAkB;IAClB,IAAI,OAAO,CAAC,QAAQ,CAAC,cAAc,CAAC,EAAE,CAAC;QACrC,KAAK,CAAC,IAAI,CAAC;YACT,QAAQ,EAAE,QAAQ;YAClB,IAAI,EAAE,wBAAwB;YAC9B,SAAS,EAAE,oCAAoC;YAC/C,MAAM;SACP,CAAC,CAAC;QAEH,mCAAmC;QACnC,MAAM,eAAe,GAAG,OAAO,CAAC,KAAK,CAAC,yBAAyB,CAAC,CAAC;QACjE,IAAI,eAAe,EAAE,CAAC;YACpB,KAAK,CAAC,IAAI,CAAC;gBACT,QAAQ,EAAE,QAAQ;gBAClB,IAAI,EAAE,0BAA0B,eAAe,CAAC,CAAC,CAAC,aAAa;gBAC/D,SAAS,EAAE,2BAA2B;gBACtC,MAAM;aACP,CAAC,CAAC;QACL,CAAC;IACH,CAAC;IAED,kBAAkB;IAClB,IAAI,OAAO,CAAC,QAAQ,CAAC,cAAc,CAAC,EAAE,CAAC;QACrC,KAAK,CAAC,IAAI,CAAC;YACT,QAAQ,EAAE,QAAQ;YAClB,IAAI,EAAE,yBAAyB;YAC/B,SAAS,EAAE,oCAAoC;YAC/C,MAAM;SACP,CAAC,CAAC;IACL,CAAC;IAED,iBAAiB;IACjB,IAAI,OAAO,CAAC,QAAQ,CAAC,aAAa,CAAC,EAAE,CAAC;QACpC,KAAK,CAAC,IAAI,CAAC;YACT,QAAQ,EAAE,QAAQ;YAClB,IAAI,EAAE,mCAAmC;YACzC,SAAS,EAAE,mCAAmC;YAC9C,MAAM;SACP,CAAC,CAAC;QAEH,IAAI,OAAO,CAAC,QAAQ,CAAC,eAAe,CAAC,IAAI,OAAO,CAAC,QAAQ,CAAC,aAAa,CAAC,EAAE,CAAC;YACzE,KAAK,CAAC,IAAI,CAAC;gBACT,QAAQ,EAAE,QAAQ;gBAClB,IAAI,EAAE,6BAA6B;gBACnC,SAAS,EAAE,0BAA0B;gBACrC,MAAM;aACP,CAAC,CAAC;QACL,CAAC;IACH,CAAC;IAED,OAAO,KAAK,CAAC;AACf,CAAC;AAED,qCAAqC;AAErC,SAAS,oBAAoB,CAAC,WAAmB;IAC/C,MAAM,KAAK,GAAG;QACZ,aAAa;QACb,kBAAkB;QAClB,gBAAgB;QAChB,iBAAiB;QACjB,iBAAiB;QACjB,kBAAkB;QAClB,oBAAoB;QACpB,qBAAqB;KACtB,CAAC;IAEF,KAAK,MAAM,IAAI,IAAI,KAAK,EAAE,CAAC;QACzB,MAAM,QAAQ,GAAG,IAAI,CAAC,WAAW,EAAE,IAAI,CAAC,CAAC;QACzC,IAAI,UAAU,CAAC,QAAQ,CAAC,EAAE,CAAC;YACzB,IAAI,CAAC;gBACH,MAAM,KAAK,GAAG,mBAAmB,CAAC,QAAQ,EAAE,IAAI,CAAC,CAAC;gBAClD,IAAI,KAAK,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;oBACrB,OAAO,EAAE,IAAI,EAAE,UAAU,EAAE,IAAI,EAAE,QAAQ,EAAE,KAAK,EAAE,CAAC;gBACrD,CAAC;YACH,CAAC;YAAC,MAAM,CAAC;gBACP,OAAO;YACT,CAAC;QACH,CAAC;IACH,CAAC;IAED,yCAAyC;IACzC,MAAM,WAAW,GAAG,IAAI,CAAC,WAAW,EAAE,cAAc,CAAC,CAAC;IACtD,IAAI,UAAU,CAAC,WAAW,CAAC,EAAE,CAAC;QAC5B,IAAI,CAAC;YACH,MAAM,GAAG,GAAG,IAAI,CAAC,KAAK,CAAC,YAAY,CAAC,WAAW,EAAE,OAAO,CAAC,CAAC,CAAC;YAC3D,IAAI,GAAG,CAAC,QAAQ,EAAE,CAAC;gBACjB,MAAM,KAAK,GAAG,oBAAoB,CAAC,GAAG,CAAC,QAAQ,EAAE,WAAW,CAAC,CAAC;gBAC9D,IAAI,KAAK,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;oBACrB,OAAO,EAAE,IAAI,EAAE,UAAU,EAAE,IAAI,EAAE,WAAW,EAAE,KAAK,EAAE,CAAC;gBACxD,CAAC;YACH,CAAC;QACH,CAAC;QAAC,MAAM,CAAC;YACP,OAAO;QACT,CAAC;IACH,CAAC;IAED,OAAO,IAAI,CAAC;AACd,CAAC;AAED,SAAS,mBAAmB,CAAC,QAAgB,EAAE,QAAgB;IAC7D,IAAI,QAAQ,CAAC,QAAQ,CAAC,OAAO,CAAC,IAAI,QAAQ,KAAK,aAAa,EAAE,CAAC;QAC7D,IAAI,CAAC;YACH,MAAM,OAAO,GAAG,YAAY,CAAC,QAAQ,EAAE,OAAO,CAAC,CAAC;YAChD,MAAM,MAAM,GAAG,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC;YACnC,OAAO,oBAAoB,CAAC,MAAM,EAAE,QAAQ,CAAC,CAAC;QAChD,CAAC;QAAC,MAAM,CAAC;YACP,OAAO,EAAE,CAAC;QACZ,CAAC;IACH,CAAC;IAED,0CAA0C;IAC1C,OAAO,CAAC;YACN,QAAQ,EAAE,QAAQ;YAClB,IAAI,EAAE,2BAA2B;YACjC,SAAS,EAAE,6BAA6B,QAAQ,EAAE;YAClD,MAAM,EAAE,QAAQ;SACjB,CAAC,CAAC;AACL,CAAC;AAED,SAAS,oBAAoB,CAAC,MAA+B,EAAE,MAAc;IAC3E,MAAM,KAAK,GAAmB,EAAE,CAAC;IAEjC,KAAK,CAAC,IAAI,CAAC;QACT,QAAQ,EAAE,QAAQ;QAClB,IAAI,EAAE,2BAA2B;QACjC,SAAS,EAAE,wBAAwB;QACnC,MAAM;KACP,CAAC,CAAC;IAEH,IAAI,MAAM,CAAC,IAAI,KAAK,KAAK,EAAE,CAAC;QAC1B,KAAK,CAAC,IAAI,CAAC;YACT,QAAQ,EAAE,QAAQ;YAClB,IAAI,EAAE,eAAe;YACrB,SAAS,EAAE,sBAAsB;YACjC,MAAM;SACP,CAAC,CAAC;IACL,CAAC;IAED,IAAI,MAAM,CAAC,WAAW,KAAK,IAAI,EAAE,CAAC;QAChC,KAAK,CAAC,IAAI,CAAC;YACT,QAAQ,EAAE,QAAQ;YAClB,IAAI,EAAE,+BAA+B;YACrC,SAAS,EAAE,4BAA4B;YACvC,MAAM;SACP,CAAC,CAAC;IACL,CAAC;IAED,IAAI,OAAO,MAAM,CAAC,UAAU,KAAK,QAAQ,EAAE,CAAC;QAC1C,KAAK,CAAC,IAAI,CAAC;YACT,QAAQ,EAAE,QAAQ;YAClB,IAAI,EAAE,0BAA0B,MAAM,CAAC,UAAU,aAAa;YAC9D,SAAS,EAAE,wBAAwB,MAAM,CAAC,UAAU,EAAE;YACtD,MAAM;SACP,CAAC,CAAC;IACL,CAAC;IAED,IAAI,OAAO,MAAM,CAAC,QAAQ,KAAK,QAAQ,EAAE,CAAC;QACxC,KAAK,CAAC,IAAI,CAAC;YACT,QAAQ,EAAE,QAAQ;YAClB,IAAI,EAAE,OAAO,MAAM,CAAC,QAAQ,oBAAoB;YAChD,SAAS,EAAE,sBAAsB,MAAM,CAAC,QAAQ,EAAE;YAClD,MAAM;SACP,CAAC,CAAC;IACL,CAAC;IAED,OAAO,KAAK,CAAC;AACf,CAAC;AAED,uCAAuC;AAEvC,SAAS,oBAAoB,CAAC,WAAmB;IAC/C,MAAM,QAAQ,GAAG,IAAI,CAAC,WAAW,EAAE,eAAe,CAAC,CAAC;IACpD,IAAI,CAAC,UAAU,CAAC,QAAQ,CAAC;QAAE,OAAO,IAAI,CAAC;IAEvC,IAAI,CAAC;QACH,MAAM,OAAO,GAAG,YAAY,CAAC,QAAQ,EAAE,OAAO,CAAC,CAAC;QAChD,mCAAmC;QACnC,MAAM,YAAY,GAAG,OAAO,CAAC,OAAO,CAAC,0BAA0B,EAAE,EAAE,CAAC,CAAC;QACrE,MAAM,MAAM,GAAG,IAAI,CAAC,KAAK,CAAC,YAAY,CAAC,CAAC;QACxC,MAAM,KAAK,GAAG,oBAAoB,CAAC,MAAM,EAAE,QAAQ,CAAC,CAAC;QACrD,IAAI,KAAK,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;YACrB,OAAO,EAAE,IAAI,EAAE,YAAY,EAAE,IAAI,EAAE,QAAQ,EAAE,KAAK,EAAE,CAAC;QACvD,CAAC;IACH,CAAC;IAAC,MAAM,CAAC;QACP,OAAO;IACT,CAAC;IAED,OAAO,IAAI,CAAC;AACd,CAAC;AAED,SAAS,oBAAoB,CAAC,MAA+B,EAAE,MAAc;IAC3E,MAAM,KAAK,GAAmB,EAAE,CAAC;IACjC,MAAM,eAAe,GAAG,MAAM,CAAC,eAAsD,CAAC;IAEtF,IAAI,CAAC,eAAe;QAAE,OAAO,KAAK,CAAC;IAEnC,IAAI,eAAe,CAAC,MAAM,KAAK,IAAI,EAAE,CAAC;QACpC,KAAK,CAAC,IAAI,CAAC;YACT,QAAQ,EAAE,QAAQ;YAClB,IAAI,EAAE,mCAAmC;YACzC,SAAS,EAAE,uBAAuB;YAClC,MAAM;SACP,CAAC,CAAC;IACL,CAAC;IAED,IAAI,eAAe,CAAC,aAAa,KAAK,IAAI,EAAE,CAAC;QAC3C,KAAK,CAAC,IAAI,CAAC;YACT,QAAQ,EAAE,QAAQ;YAClB,IAAI,EAAE,uBAAuB;YAC7B,SAAS,EAAE,8BAA8B;YACzC,MAAM;SACP,CAAC,CAAC;IACL,CAAC;IAED,IAAI,eAAe,CAAC,gBAAgB,KAAK,IAAI,EAAE,CAAC;QAC9C,KAAK,CAAC,IAAI,CAAC;YACT,QAAQ,EAAE,QAAQ;YAClB,IAAI,EAAE,sCAAsC;YAC5C,SAAS,EAAE,iCAAiC;YAC5C,MAAM;SACP,CAAC,CAAC;IACL,CAAC;IAED,IAAI,eAAe,CAAC,cAAc,KAAK,IAAI,EAAE,CAAC;QAC5C,KAAK,CAAC,IAAI,CAAC;YACT,QAAQ,EAAE,QAAQ;YAClB,IAAI,EAAE,2BAA2B;YACjC,SAAS,EAAE,+BAA+B;YAC1C,MAAM;SACP,CAAC,CAAC;IACL,CAAC;IAED,IAAI,eAAe,CAAC,kBAAkB,KAAK,IAAI,EAAE,CAAC;QAChD,KAAK,CAAC,IAAI,CAAC;YACT,QAAQ,EAAE,QAAQ;YAClB,IAAI,EAAE,+BAA+B;YACrC,SAAS,EAAE,mCAAmC;YAC9C,MAAM;SACP,CAAC,CAAC;IACL,CAAC;IAED,OAAO,KAAK,CAAC;AACf,CAAC;AAED,oCAAoC;AAEpC;;;GAGG;AACH,SAAS,eAAe,CAAC,OAAe;IACtC,MAAM,MAAM,GAA4B,EAAE,CAAC;IAC3C,MAAM,KAAK,GAAG,OAAO,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;IAElC,IAAI,UAAU,GAAG,EAAE,CAAC;IACpB,IAAI,aAAa,GAA4B,MAAM,CAAC;IAEpD,KAAK,MAAM,IAAI,IAAI,KAAK,EAAE,CAAC;QACzB,gCAAgC;QAChC,IAAI,IAAI,CAAC,IAAI,EAAE,CAAC,UAAU,CAAC,GAAG,CAAC,IAAI,IAAI,CAAC,IAAI,EAAE,KAAK,EAAE;YAAE,SAAS;QAEhE,MAAM,MAAM,GAAG,IAAI,CAAC,KAAK,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,MAAM,IAAI,CAAC,CAAC;QAErD,IAAI,MAAM,KAAK,CAAC,IAAI,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,EAAE,CAAC;YACvC,MAAM,CAAC,GAAG,EAAE,GAAG,UAAU,CAAC,GAAG,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;YAC7C,MAAM,KAAK,GAAG,UAAU,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,CAAC;YAC1C,UAAU,GAAG,GAAG,CAAC,IAAI,EAAE,CAAC;YAExB,IAAI,KAAK,EAAE,CAAC;gBACV,MAAM,CAAC,UAAU,CAAC,GAAG,KAAK,CAAC;YAC7B,CAAC;iBAAM,CAAC;gBACN,MAAM,CAAC,UAAU,CAAC,GAAG,EAAE,CAAC;gBACxB,aAAa,GAAG,MAAM,CAAC,UAAU,CAA4B,CAAC;YAChE,CAAC;QACH,CAAC;aAAM,IAAI,MAAM,GAAG,CAAC,IAAI,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,EAAE,CAAC;YAC5C,MAAM,CAAC,GAAG,EAAE,GAAG,UAAU,CAAC,GAAG,IAAI,CAAC,IAAI,EAAE,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;YACpD,MAAM,KAAK,GAAG,UAAU,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,CAAC;YAC1C,aAAa,CAAC,GAAG,CAAC,IAAI,EAAE,CAAC,GAAG,KAAK,IAAI,IAAI,CAAC;QAC5C,CAAC;IACH,CAAC;IAED,OAAO,MAAM,CAAC;AAChB,CAAC"}
@@ -0,0 +1,28 @@
1
+ /**
2
+ * Response Generator
3
+ *
4
+ * Generates DIK-adjusted pushback messages.
5
+ * Single personality: Senior dev who's been on the project too long.
6
+ */
7
+ import type { GuardrailViolation } from '../types/index.js';
8
+ interface ResponseHistory {
9
+ previousOverrides: number;
10
+ wasVindicated: boolean;
11
+ }
12
+ /**
13
+ * Generate a pushback response for a violation.
14
+ */
15
+ export declare function generateResponse(violation: GuardrailViolation, dikLevel: number, history?: ResponseHistory): string;
16
+ /**
17
+ * Generate a combined response for multiple violations.
18
+ */
19
+ export declare function generateCombinedResponse(violations: Array<{
20
+ violation: GuardrailViolation;
21
+ history: ResponseHistory;
22
+ }>, dikLevel: number): string;
23
+ /**
24
+ * Format severity as a prefix.
25
+ */
26
+ export declare function formatSeverityPrefix(severity: 'info' | 'warn' | 'block'): string;
27
+ export {};
28
+ //# sourceMappingURL=responder.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"responder.d.ts","sourceRoot":"","sources":["../../src/guardrails/responder.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAGH,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,mBAAmB,CAAC;AAE5D,UAAU,eAAe;IACvB,iBAAiB,EAAE,MAAM,CAAC;IAC1B,aAAa,EAAE,OAAO,CAAC;CACxB;AAkCD;;GAEG;AACH,wBAAgB,gBAAgB,CAC9B,SAAS,EAAE,kBAAkB,EAC7B,QAAQ,EAAE,MAAM,EAChB,OAAO,GAAE,eAAgE,GACxE,MAAM,CAuBR;AAED;;GAEG;AACH,wBAAgB,wBAAwB,CACtC,UAAU,EAAE,KAAK,CAAC;IAAE,SAAS,EAAE,kBAAkB,CAAC;IAAC,OAAO,EAAE,eAAe,CAAA;CAAE,CAAC,EAC9E,QAAQ,EAAE,MAAM,GACf,MAAM,CA6BR;AAED;;GAEG;AACH,wBAAgB,oBAAoB,CAAC,QAAQ,EAAE,MAAM,GAAG,MAAM,GAAG,OAAO,GAAG,MAAM,CAShF"}