@neurcode-ai/cli 0.9.34 → 0.9.36

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 +2 -1
  2. package/dist/api-client.d.ts +59 -1
  3. package/dist/api-client.d.ts.map +1 -1
  4. package/dist/api-client.js +16 -1
  5. package/dist/api-client.js.map +1 -1
  6. package/dist/commands/ask.d.ts.map +1 -1
  7. package/dist/commands/ask.js +15 -2
  8. package/dist/commands/ask.js.map +1 -1
  9. package/dist/commands/plan.d.ts.map +1 -1
  10. package/dist/commands/plan.js +81 -2
  11. package/dist/commands/plan.js.map +1 -1
  12. package/dist/commands/policy.d.ts.map +1 -1
  13. package/dist/commands/policy.js +377 -20
  14. package/dist/commands/policy.js.map +1 -1
  15. package/dist/commands/verify.d.ts +8 -0
  16. package/dist/commands/verify.d.ts.map +1 -1
  17. package/dist/commands/verify.js +454 -59
  18. package/dist/commands/verify.js.map +1 -1
  19. package/dist/index.js +102 -0
  20. package/dist/index.js.map +1 -1
  21. package/dist/utils/change-contract.d.ts +55 -0
  22. package/dist/utils/change-contract.d.ts.map +1 -0
  23. package/dist/utils/change-contract.js +158 -0
  24. package/dist/utils/change-contract.js.map +1 -0
  25. package/dist/utils/policy-audit.d.ts +2 -2
  26. package/dist/utils/policy-audit.d.ts.map +1 -1
  27. package/dist/utils/policy-audit.js.map +1 -1
  28. package/dist/utils/policy-compiler.d.ts +68 -0
  29. package/dist/utils/policy-compiler.d.ts.map +1 -0
  30. package/dist/utils/policy-compiler.js +170 -0
  31. package/dist/utils/policy-compiler.js.map +1 -0
  32. package/dist/utils/policy-exceptions.d.ts +11 -1
  33. package/dist/utils/policy-exceptions.d.ts.map +1 -1
  34. package/dist/utils/policy-exceptions.js +94 -6
  35. package/dist/utils/policy-exceptions.js.map +1 -1
  36. package/dist/utils/policy-governance.d.ts +22 -1
  37. package/dist/utils/policy-governance.d.ts.map +1 -1
  38. package/dist/utils/policy-governance.js +178 -14
  39. package/dist/utils/policy-governance.js.map +1 -1
  40. package/dist/utils/policy-packs.d.ts +1 -1
  41. package/dist/utils/policy-packs.d.ts.map +1 -1
  42. package/dist/utils/policy-packs.js +185 -0
  43. package/dist/utils/policy-packs.js.map +1 -1
  44. package/dist/utils/project-root.d.ts +16 -0
  45. package/dist/utils/project-root.d.ts.map +1 -1
  46. package/dist/utils/project-root.js +123 -9
  47. package/dist/utils/project-root.js.map +1 -1
  48. package/dist/utils/scope-telemetry.d.ts +21 -0
  49. package/dist/utils/scope-telemetry.d.ts.map +1 -0
  50. package/dist/utils/scope-telemetry.js +35 -0
  51. package/dist/utils/scope-telemetry.js.map +1 -0
  52. package/package.json +15 -12
  53. package/LICENSE +0 -201
@@ -19,14 +19,21 @@ export interface PolicyExceptionEntry {
19
19
  }
20
20
  export interface PolicyExceptionEligibility {
21
21
  usable: boolean;
22
- reason: 'eligible' | 'expired_or_inactive' | 'approval_required' | 'insufficient_approvals' | 'self_approval_only' | 'approver_not_allowed';
22
+ reason: 'eligible' | 'expired_or_inactive' | 'reason_required' | 'duration_exceeds_max' | 'approval_required' | 'critical_approvals_required' | 'insufficient_approvals' | 'self_approval_only' | 'approver_not_allowed';
23
23
  effectiveApprovalCount: number;
24
+ requiredApprovals: number;
25
+ critical: boolean;
24
26
  }
25
27
  export interface PolicyExceptionApplyOptions {
26
28
  requireApproval: boolean;
27
29
  minApprovals: number;
28
30
  disallowSelfApproval: boolean;
29
31
  allowedApprovers: string[];
32
+ requireReason: boolean;
33
+ minReasonLength: number;
34
+ maxExpiryDays: number;
35
+ criticalRulePatterns: string[];
36
+ criticalMinApprovals: number;
30
37
  }
31
38
  export interface PolicyExceptionDecision {
32
39
  remainingViolations: Array<{
@@ -54,6 +61,9 @@ export interface PolicyExceptionDecision {
54
61
  line?: number;
55
62
  exceptionId: string;
56
63
  eligibilityReason: Exclude<PolicyExceptionEligibility['reason'], 'eligible'>;
64
+ requiredApprovals: number;
65
+ effectiveApprovals: number;
66
+ critical: boolean;
57
67
  }>;
58
68
  matchedExceptionIds: string[];
59
69
  activeExceptions: PolicyExceptionEntry[];
@@ -1 +1 @@
1
- {"version":3,"file":"policy-exceptions.d.ts","sourceRoot":"","sources":["../../src/utils/policy-exceptions.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"policy-exceptions.d.ts","sourceRoot":"","sources":["../../src/utils/policy-exceptions.ts"],"names":[],"mappings":"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"}
@@ -11,6 +11,7 @@ exports.pruneExpiredPolicyExceptions = pruneExpiredPolicyExceptions;
11
11
  exports.applyPolicyExceptions = applyPolicyExceptions;
12
12
  const fs_1 = require("fs");
13
13
  const path_1 = require("path");
14
+ const policy_governance_1 = require("./policy-governance");
14
15
  const POLICY_EXCEPTIONS_FILENAME = 'neurcode.policy.exceptions.json';
15
16
  const LEGACY_POLICY_EXCEPTIONS_RELATIVE_PATH = ['.neurcode', 'policies', 'policy-exceptions.json'];
16
17
  function normalizePath(value) {
@@ -72,19 +73,70 @@ function normalizeApprovals(value) {
72
73
  }
73
74
  return Array.from(latestByApprover.values()).sort((a, b) => a.approvedAt.localeCompare(b.approvedAt));
74
75
  }
75
- function evaluatePolicyExceptionEligibility(entry, options) {
76
+ function evaluatePolicyExceptionEligibility(entry, options, rule) {
76
77
  if (!entry.active || !isFutureIso(entry.expiresAt)) {
77
78
  return {
78
79
  usable: false,
79
80
  reason: 'expired_or_inactive',
80
81
  effectiveApprovalCount: 0,
82
+ requiredApprovals: 0,
83
+ critical: false,
81
84
  };
82
85
  }
86
+ if (options.requireReason) {
87
+ const reasonLength = (entry.reason || '').trim().length;
88
+ if (reasonLength < options.minReasonLength) {
89
+ return {
90
+ usable: false,
91
+ reason: 'reason_required',
92
+ effectiveApprovalCount: 0,
93
+ requiredApprovals: 0,
94
+ critical: false,
95
+ };
96
+ }
97
+ }
98
+ if (Number.isFinite(options.maxExpiryDays) && options.maxExpiryDays > 0) {
99
+ const createdMs = Date.parse(entry.createdAt);
100
+ const expiryMs = Date.parse(entry.expiresAt);
101
+ if (Number.isFinite(createdMs) && Number.isFinite(expiryMs) && expiryMs > createdMs) {
102
+ const windowMs = options.maxExpiryDays * 24 * 60 * 60 * 1000;
103
+ if (expiryMs - createdMs > windowMs) {
104
+ return {
105
+ usable: false,
106
+ reason: 'duration_exceeds_max',
107
+ effectiveApprovalCount: 0,
108
+ requiredApprovals: 0,
109
+ critical: false,
110
+ };
111
+ }
112
+ }
113
+ }
114
+ const requiredApprovalResolution = (0, policy_governance_1.resolveRequiredApprovalsForRule)(rule, {
115
+ schemaVersion: 2,
116
+ exceptionApprovals: {
117
+ required: options.requireApproval,
118
+ minApprovals: options.minApprovals,
119
+ disallowSelfApproval: options.disallowSelfApproval,
120
+ allowedApprovers: options.allowedApprovers,
121
+ requireReason: options.requireReason,
122
+ minReasonLength: options.minReasonLength,
123
+ maxExpiryDays: options.maxExpiryDays,
124
+ criticalRulePatterns: options.criticalRulePatterns,
125
+ criticalMinApprovals: options.criticalMinApprovals,
126
+ },
127
+ audit: {
128
+ requireIntegrity: false,
129
+ },
130
+ });
131
+ const requiredApprovals = requiredApprovalResolution.requiredApprovals;
132
+ const critical = requiredApprovalResolution.critical;
83
133
  if (!options.requireApproval) {
84
134
  return {
85
135
  usable: true,
86
136
  reason: 'eligible',
87
137
  effectiveApprovalCount: 0,
138
+ requiredApprovals,
139
+ critical,
88
140
  };
89
141
  }
90
142
  const allowedApprovers = normalizeActorList(options.allowedApprovers || []);
@@ -100,11 +152,13 @@ function evaluatePolicyExceptionEligibility(entry, options) {
100
152
  return true;
101
153
  });
102
154
  const effectiveApprovalCount = acceptedApprovals.length;
103
- if (effectiveApprovalCount >= Math.max(1, options.minApprovals)) {
155
+ if (effectiveApprovalCount >= requiredApprovals) {
104
156
  return {
105
157
  usable: true,
106
158
  reason: 'eligible',
107
159
  effectiveApprovalCount,
160
+ requiredApprovals,
161
+ critical,
108
162
  };
109
163
  }
110
164
  if (entry.approvals.length === 0) {
@@ -112,6 +166,8 @@ function evaluatePolicyExceptionEligibility(entry, options) {
112
166
  usable: false,
113
167
  reason: 'approval_required',
114
168
  effectiveApprovalCount,
169
+ requiredApprovals,
170
+ critical,
115
171
  };
116
172
  }
117
173
  if (options.disallowSelfApproval && entry.approvals.length > 0 && acceptedApprovals.length === 0) {
@@ -121,6 +177,8 @@ function evaluatePolicyExceptionEligibility(entry, options) {
121
177
  usable: false,
122
178
  reason: 'self_approval_only',
123
179
  effectiveApprovalCount,
180
+ requiredApprovals,
181
+ critical,
124
182
  };
125
183
  }
126
184
  }
@@ -129,12 +187,25 @@ function evaluatePolicyExceptionEligibility(entry, options) {
129
187
  usable: false,
130
188
  reason: 'approver_not_allowed',
131
189
  effectiveApprovalCount,
190
+ requiredApprovals,
191
+ critical,
192
+ };
193
+ }
194
+ if (critical && entry.approvals.length > 0) {
195
+ return {
196
+ usable: false,
197
+ reason: 'critical_approvals_required',
198
+ effectiveApprovalCount,
199
+ requiredApprovals,
200
+ critical,
132
201
  };
133
202
  }
134
203
  return {
135
204
  usable: false,
136
205
  reason: 'insufficient_approvals',
137
206
  effectiveApprovalCount,
207
+ requiredApprovals,
208
+ critical,
138
209
  };
139
210
  }
140
211
  function getPolicyExceptionsPath(cwd) {
@@ -329,16 +400,26 @@ function applyPolicyExceptions(violations, exceptions, options) {
329
400
  : 1,
330
401
  disallowSelfApproval: options?.disallowSelfApproval !== false,
331
402
  allowedApprovers: Array.isArray(options?.allowedApprovers) ? options.allowedApprovers : [],
403
+ requireReason: options?.requireReason !== false,
404
+ minReasonLength: Number.isFinite(options?.minReasonLength)
405
+ ? Math.max(8, Math.floor(Number(options?.minReasonLength)))
406
+ : 12,
407
+ maxExpiryDays: Number.isFinite(options?.maxExpiryDays)
408
+ ? Math.max(1, Math.floor(Number(options?.maxExpiryDays)))
409
+ : 30,
410
+ criticalRulePatterns: Array.isArray(options?.criticalRulePatterns) ? options.criticalRulePatterns : [],
411
+ criticalMinApprovals: Number.isFinite(options?.criticalMinApprovals)
412
+ ? Math.max(2, Math.floor(Number(options?.criticalMinApprovals)))
413
+ : 2,
332
414
  };
333
415
  const activeExceptions = exceptions.filter((entry) => entry.active && isFutureIso(entry.expiresAt));
334
- const usableExceptions = activeExceptions.filter((entry) => evaluatePolicyExceptionEligibility(entry, applyOptions).usable);
416
+ const usableExceptions = activeExceptions.filter((entry) => evaluatePolicyExceptionEligibility(entry, applyOptions, entry.rulePattern).usable);
335
417
  const suppressedViolations = [];
336
418
  const blockedViolations = [];
337
419
  const remainingViolations = [];
338
420
  const matchedExceptionIds = new Set();
339
421
  const exceptionMatchers = activeExceptions.map((entry) => ({
340
422
  entry,
341
- eligibility: evaluatePolicyExceptionEligibility(entry, applyOptions),
342
423
  ruleRegex: toRegexFromPattern(entry.rulePattern),
343
424
  fileRegex: toRegexFromPattern(normalizePath(entry.filePattern || '*')),
344
425
  }));
@@ -354,7 +435,11 @@ function applyPolicyExceptions(violations, exceptions, options) {
354
435
  remainingViolations.push(violation);
355
436
  continue;
356
437
  }
357
- const usable = candidates.find((candidate) => candidate.eligibility.usable);
438
+ const evaluatedCandidates = candidates.map((candidate) => ({
439
+ ...candidate,
440
+ eligibility: evaluatePolicyExceptionEligibility(candidate.entry, applyOptions, violationRule),
441
+ }));
442
+ const usable = evaluatedCandidates.find((candidate) => candidate.eligibility.usable);
358
443
  if (usable) {
359
444
  matchedExceptionIds.add(usable.entry.id);
360
445
  suppressedViolations.push({
@@ -365,7 +450,7 @@ function applyPolicyExceptions(violations, exceptions, options) {
365
450
  });
366
451
  continue;
367
452
  }
368
- const blocked = candidates[0];
453
+ const blocked = evaluatedCandidates[0];
369
454
  const blockedReason = blocked.eligibility.reason === 'eligible'
370
455
  ? 'insufficient_approvals'
371
456
  : blocked.eligibility.reason;
@@ -374,6 +459,9 @@ function applyPolicyExceptions(violations, exceptions, options) {
374
459
  ...violation,
375
460
  exceptionId: blocked.entry.id,
376
461
  eligibilityReason: blockedReason,
462
+ requiredApprovals: blocked.eligibility.requiredApprovals,
463
+ effectiveApprovals: blocked.eligibility.effectiveApprovalCount,
464
+ critical: blocked.eligibility.critical,
377
465
  });
378
466
  remainingViolations.push(violation);
379
467
  }
@@ -1 +1 @@
1
- {"version":3,"file":"policy-exceptions.js","sourceRoot":"","sources":["../../src/utils/policy-exceptions.ts"],"names":[],"mappings":";;AAmOA,0DAEC;AAWD,oDA6CC;AAED,sDAQC;AAED,oDASC;AAED,gDAwDC;AAED,wDAgDC;AAED,sDAiBC;AAED,oEAYC;AAED,sDAsFC;AAvhBD,2BAA6D;AAC7D,+BAA4B;AA+E5B,MAAM,0BAA0B,GAAG,iCAAiC,CAAC;AACrE,MAAM,sCAAsC,GAAG,CAAC,WAAW,EAAE,UAAU,EAAE,wBAAwB,CAAC,CAAC;AAEnG,SAAS,aAAa,CAAC,KAAa;IAClC,OAAO,KAAK,CAAC,OAAO,CAAC,KAAK,EAAE,GAAG,CAAC,CAAC,IAAI,EAAE,CAAC;AAC1C,CAAC;AAED,SAAS,cAAc,CAAC,KAAa;IACnC,OAAO,KAAK,CAAC,IAAI,EAAE,CAAC,WAAW,EAAE,CAAC;AACpC,CAAC;AAED,SAAS,kBAAkB,CAAC,KAAe;IACzC,OAAO,KAAK,CAAC,IAAI,CAAC,IAAI,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,cAAc,CAAC,IAAI,CAAC,CAAC,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAClG,CAAC,CAAC,aAAa,CAAC,CAAC,CAAC,CACnB,CAAC;AACJ,CAAC;AAED,SAAS,kBAAkB,CAAC,OAAe;IACzC,MAAM,UAAU,GAAG,OAAO,CAAC,IAAI,EAAE,CAAC;IAClC,IAAI,UAAU,CAAC,MAAM,KAAK,CAAC,IAAI,UAAU,KAAK,GAAG,EAAE,CAAC;QAClD,OAAO,OAAO,CAAC;IACjB,CAAC;IAED,IAAI,UAAU,CAAC,UAAU,CAAC,GAAG,CAAC,IAAI,UAAU,CAAC,QAAQ,CAAC,GAAG,CAAC,IAAI,UAAU,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QACpF,IAAI,CAAC;YACH,OAAO,IAAI,MAAM,CAAC,UAAU,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC;QAClD,CAAC;QAAC,MAAM,CAAC;YACP,qCAAqC;QACvC,CAAC;IACH,CAAC;IAED,MAAM,OAAO,GAAG,UAAU,CAAC,OAAO,CAAC,mBAAmB,EAAE,MAAM,CAAC,CAAC;IAChE,MAAM,QAAQ,GAAG,OAAO,CAAC,OAAO,CAAC,KAAK,EAAE,IAAI,CAAC,CAAC,OAAO,CAAC,KAAK,EAAE,GAAG,CAAC,CAAC;IAClE,OAAO,IAAI,MAAM,CAAC,IAAI,QAAQ,GAAG,EAAE,GAAG,CAAC,CAAC;AAC1C,CAAC;AAED,SAAS,WAAW,CAAC,KAAa;IAChC,MAAM,IAAI,GAAG,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC;IAC/B,OAAO,MAAM,CAAC,QAAQ,CAAC,IAAI,CAAC,IAAI,IAAI,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC;AACpD,CAAC;AAED,SAAS,6BAA6B,CAAC,GAAW;IAChD,OAAO,IAAA,WAAI,EAAC,GAAG,EAAE,GAAG,sCAAsC,CAAC,CAAC;AAC9D,CAAC;AAED,SAAS,kBAAkB,CAAC,KAAc;IACxC,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC;QAAE,OAAO,EAAE,CAAC;IACrC,MAAM,SAAS,GAAG,KAAK;SACpB,MAAM,CAAC,CAAC,IAAI,EAAmC,EAAE,CAAC,CAAC,CAAC,IAAI,IAAI,OAAO,IAAI,KAAK,QAAQ,CAAC;SACrF,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE;QACZ,MAAM,QAAQ,GAAG,OAAO,IAAI,CAAC,QAAQ,KAAK,QAAQ,CAAC,CAAC,CAAC,IAAI,CAAC,QAAQ,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;QAC/E,IAAI,CAAC,QAAQ;YAAE,OAAO,IAAI,CAAC;QAC3B,OAAO;YACL,QAAQ;YACR,UAAU,EACR,OAAO,IAAI,CAAC,UAAU,KAAK,QAAQ,IAAI,MAAM,CAAC,QAAQ,CAAC,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC;gBACjF,CAAC,CAAC,IAAI,IAAI,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC,WAAW,EAAE;gBACzC,CAAC,CAAC,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE;YAC9B,OAAO,EAAE,OAAO,IAAI,CAAC,OAAO,KAAK,QAAQ,IAAI,IAAI,CAAC,OAAO,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,OAAO,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC,IAAI;SAC9F,CAAC;IACJ,CAAC,CAAC;SACD,MAAM,CAAC,CAAC,IAAI,EAAmC,EAAE,CAAC,IAAI,KAAK,IAAI,CAAC;SAChE,IAAI,CAAC,CAAC,IAAI,EAAE,KAAK,EAAE,EAAE,CAAC,IAAI,CAAC,UAAU,CAAC,aAAa,CAAC,KAAK,CAAC,UAAU,CAAC,CAAC,CAAC;IAE1E,qDAAqD;IACrD,MAAM,gBAAgB,GAAG,IAAI,GAAG,EAAmC,CAAC;IACpE,KAAK,MAAM,QAAQ,IAAI,SAAS,EAAE,CAAC;QACjC,gBAAgB,CAAC,GAAG,CAAC,cAAc,CAAC,QAAQ,CAAC,QAAQ,CAAC,EAAE,QAAQ,CAAC,CAAC;IACpE,CAAC;IACD,OAAO,KAAK,CAAC,IAAI,CAAC,gBAAgB,CAAC,MAAM,EAAE,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,UAAU,CAAC,aAAa,CAAC,CAAC,CAAC,UAAU,CAAC,CAAC,CAAC;AACxG,CAAC;AAED,SAAS,kCAAkC,CACzC,KAA2B,EAC3B,OAAoC;IAEpC,IAAI,CAAC,KAAK,CAAC,MAAM,IAAI,CAAC,WAAW,CAAC,KAAK,CAAC,SAAS,CAAC,EAAE,CAAC;QACnD,OAAO;YACL,MAAM,EAAE,KAAK;YACb,MAAM,EAAE,qBAAqB;YAC7B,sBAAsB,EAAE,CAAC;SAC1B,CAAC;IACJ,CAAC;IAED,IAAI,CAAC,OAAO,CAAC,eAAe,EAAE,CAAC;QAC7B,OAAO;YACL,MAAM,EAAE,IAAI;YACZ,MAAM,EAAE,UAAU;YAClB,sBAAsB,EAAE,CAAC;SAC1B,CAAC;IACJ,CAAC;IAED,MAAM,gBAAgB,GAAG,kBAAkB,CAAC,OAAO,CAAC,gBAAgB,IAAI,EAAE,CAAC,CAAC;IAC5E,MAAM,WAAW,GAAG,cAAc,CAAC,KAAK,CAAC,WAAW,IAAI,KAAK,CAAC,SAAS,IAAI,EAAE,CAAC,CAAC;IAC/E,MAAM,iBAAiB,GAAG,KAAK,CAAC,SAAS,CAAC,MAAM,CAAC,CAAC,QAAQ,EAAE,EAAE;QAC5D,MAAM,KAAK,GAAG,cAAc,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAAC;QAChD,IAAI,CAAC,KAAK;YAAE,OAAO,KAAK,CAAC;QACzB,IAAI,gBAAgB,CAAC,MAAM,GAAG,CAAC,IAAI,CAAC,gBAAgB,CAAC,QAAQ,CAAC,KAAK,CAAC;YAAE,OAAO,KAAK,CAAC;QACnF,IAAI,OAAO,CAAC,oBAAoB,IAAI,WAAW,IAAI,KAAK,KAAK,WAAW;YAAE,OAAO,KAAK,CAAC;QACvF,OAAO,IAAI,CAAC;IACd,CAAC,CAAC,CAAC;IAEH,MAAM,sBAAsB,GAAG,iBAAiB,CAAC,MAAM,CAAC;IACxD,IAAI,sBAAsB,IAAI,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,OAAO,CAAC,YAAY,CAAC,EAAE,CAAC;QAChE,OAAO;YACL,MAAM,EAAE,IAAI;YACZ,MAAM,EAAE,UAAU;YAClB,sBAAsB;SACvB,CAAC;IACJ,CAAC;IAED,IAAI,KAAK,CAAC,SAAS,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QACjC,OAAO;YACL,MAAM,EAAE,KAAK;YACb,MAAM,EAAE,mBAAmB;YAC3B,sBAAsB;SACvB,CAAC;IACJ,CAAC;IAED,IAAI,OAAO,CAAC,oBAAoB,IAAI,KAAK,CAAC,SAAS,CAAC,MAAM,GAAG,CAAC,IAAI,iBAAiB,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QACjG,MAAM,QAAQ,GAAG,KAAK,CAAC,SAAS,CAAC,KAAK,CACpC,CAAC,QAAQ,EAAE,EAAE,CAAC,cAAc,CAAC,QAAQ,CAAC,QAAQ,CAAC,KAAK,WAAW,CAChE,CAAC;QACF,IAAI,QAAQ,EAAE,CAAC;YACb,OAAO;gBACL,MAAM,EAAE,KAAK;gBACb,MAAM,EAAE,oBAAoB;gBAC5B,sBAAsB;aACvB,CAAC;QACJ,CAAC;IACH,CAAC;IAED,IAAI,gBAAgB,CAAC,MAAM,GAAG,CAAC,IAAI,iBAAiB,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QAClE,OAAO;YACL,MAAM,EAAE,KAAK;YACb,MAAM,EAAE,sBAAsB;YAC9B,sBAAsB;SACvB,CAAC;IACJ,CAAC;IAED,OAAO;QACL,MAAM,EAAE,KAAK;QACb,MAAM,EAAE,wBAAwB;QAChC,sBAAsB;KACvB,CAAC;AACJ,CAAC;AAED,SAAgB,uBAAuB,CAAC,GAAW;IACjD,OAAO,IAAA,WAAI,EAAC,GAAG,EAAE,0BAA0B,CAAC,CAAC;AAC/C,CAAC;AAED,SAAS,+BAA+B,CAAC,GAAW;IAClD,MAAM,aAAa,GAAG,uBAAuB,CAAC,GAAG,CAAC,CAAC;IACnD,IAAI,IAAA,eAAU,EAAC,aAAa,CAAC,EAAE,CAAC;QAC9B,OAAO,aAAa,CAAC;IACvB,CAAC;IACD,MAAM,UAAU,GAAG,6BAA6B,CAAC,GAAG,CAAC,CAAC;IACtD,OAAO,IAAA,eAAU,EAAC,UAAU,CAAC,CAAC,CAAC,CAAC,UAAU,CAAC,CAAC,CAAC,aAAa,CAAC;AAC7D,CAAC;AAED,SAAgB,oBAAoB,CAAC,GAAW;IAC9C,MAAM,IAAI,GAAG,+BAA+B,CAAC,GAAG,CAAC,CAAC;IAClD,IAAI,CAAC,IAAA,eAAU,EAAC,IAAI,CAAC,EAAE,CAAC;QACtB,OAAO,EAAE,CAAC;IACZ,CAAC;IAED,IAAI,CAAC;QACH,MAAM,GAAG,GAAG,IAAA,iBAAY,EAAC,IAAI,EAAE,OAAO,CAAC,CAAC;QACxC,MAAM,MAAM,GAAG,IAAI,CAAC,KAAK,CAAC,GAAG,CAAwB,CAAC;QACtD,IAAI,CAAC,MAAM,IAAI,MAAM,CAAC,aAAa,KAAK,CAAC,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,MAAM,CAAC,UAAU,CAAC,EAAE,CAAC;YAC/E,OAAO,EAAE,CAAC;QACZ,CAAC;QACD,OAAO,MAAM,CAAC,UAAU;aACrB,MAAM,CAAC,CAAC,KAAK,EAAE,EAAE;YAChB,IAAI,CAAC,KAAK,IAAI,OAAO,KAAK,KAAK,QAAQ;gBAAE,OAAO,KAAK,CAAC;YACtD,OAAO,CACL,OAAO,KAAK,CAAC,EAAE,KAAK,QAAQ;gBAC5B,OAAO,KAAK,CAAC,WAAW,KAAK,QAAQ;gBACrC,OAAO,KAAK,CAAC,WAAW,KAAK,QAAQ;gBACrC,OAAO,KAAK,CAAC,MAAM,KAAK,QAAQ;gBAChC,OAAO,KAAK,CAAC,SAAS,KAAK,QAAQ,CACpC,CAAC;QACJ,CAAC,CAAC;aACD,GAAG,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,CAAC;YACf,GAAG,KAAK;YACR,MAAM,EAAE,OAAO,KAAK,CAAC,MAAM,KAAK,QAAQ,IAAI,KAAK,CAAC,MAAM,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC,CAAC,IAAI;YACrF,SAAS,EAAE,OAAO,KAAK,CAAC,SAAS,KAAK,QAAQ,IAAI,KAAK,CAAC,SAAS,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC,KAAK,CAAC,SAAS,CAAC,CAAC,CAAC,SAAS;YACtG,WAAW,EACT,OAAO,KAAK,CAAC,WAAW,KAAK,QAAQ,IAAI,KAAK,CAAC,WAAW,CAAC,IAAI,EAAE;gBAC/D,CAAC,CAAC,KAAK,CAAC,WAAW,CAAC,IAAI,EAAE;gBAC1B,CAAC,CAAC,OAAO,KAAK,CAAC,SAAS,KAAK,QAAQ,IAAI,KAAK,CAAC,SAAS,CAAC,IAAI,EAAE;oBAC7D,CAAC,CAAC,KAAK,CAAC,SAAS,CAAC,IAAI,EAAE;oBACxB,CAAC,CAAC,SAAS;YACjB,SAAS,EAAE,OAAO,KAAK,CAAC,SAAS,KAAK,QAAQ,CAAC,CAAC,CAAC,KAAK,CAAC,SAAS,CAAC,CAAC,CAAC,IAAI,IAAI,CAAC,CAAC,CAAC,CAAC,WAAW,EAAE;YAC5F,MAAM,EAAE,KAAK,CAAC,MAAM,KAAK,KAAK;YAC9B,QAAQ,EACN,KAAK,CAAC,QAAQ,KAAK,OAAO,IAAI,KAAK,CAAC,QAAQ,KAAK,MAAM,IAAI,KAAK,CAAC,QAAQ,KAAK,OAAO;gBACnF,CAAC,CAAC,KAAK,CAAC,QAAQ;gBAChB,CAAC,CAAC,IAAI;YACV,SAAS,EAAE,kBAAkB,CAAC,KAAK,CAAC,SAAS,CAAC;SAC/C,CAAC,CAAC;aACF,IAAI,CAAC,CAAC,IAAI,EAAE,KAAK,EAAE,EAAE,CAAC,KAAK,CAAC,SAAS,CAAC,aAAa,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC,CAAC;IAC1E,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,EAAE,CAAC;IACZ,CAAC;AACH,CAAC;AAED,SAAgB,qBAAqB,CAAC,GAAW,EAAE,OAA+B;IAChF,MAAM,IAAI,GAAG,uBAAuB,CAAC,GAAG,CAAC,CAAC;IAC1C,MAAM,OAAO,GAAwB;QACnC,aAAa,EAAE,CAAC;QAChB,UAAU,EAAE,OAAO;KACpB,CAAC;IACF,IAAA,kBAAa,EAAC,IAAI,EAAE,IAAI,CAAC,SAAS,CAAC,OAAO,EAAE,IAAI,EAAE,CAAC,CAAC,GAAG,IAAI,EAAE,OAAO,CAAC,CAAC;IACtE,OAAO,IAAI,CAAC;AACd,CAAC;AAED,SAAgB,oBAAoB,CAAC,GAAW;IAK9C,MAAM,GAAG,GAAG,oBAAoB,CAAC,GAAG,CAAC,CAAC;IACtC,MAAM,MAAM,GAAG,GAAG,CAAC,MAAM,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,KAAK,CAAC,MAAM,IAAI,WAAW,CAAC,KAAK,CAAC,SAAS,CAAC,CAAC,CAAC;IACnF,MAAM,OAAO,GAAG,GAAG,CAAC,MAAM,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,CAAC,KAAK,CAAC,MAAM,IAAI,CAAC,WAAW,CAAC,KAAK,CAAC,SAAS,CAAC,CAAC,CAAC;IACtF,OAAO,EAAE,GAAG,EAAE,MAAM,EAAE,OAAO,EAAE,CAAC;AAClC,CAAC;AAED,SAAgB,kBAAkB,CAChC,GAAW,EACX,KASC;IAED,MAAM,WAAW,GAAG,KAAK,CAAC,WAAW,CAAC,IAAI,EAAE,CAAC;IAC7C,MAAM,WAAW,GAAG,aAAa,CAAC,KAAK,CAAC,WAAW,IAAI,GAAG,CAAC,CAAC;IAC5D,MAAM,MAAM,GAAG,KAAK,CAAC,MAAM,CAAC,IAAI,EAAE,CAAC;IACnC,MAAM,SAAS,GAAG,KAAK,CAAC,SAAS,CAAC,IAAI,EAAE,CAAC;IACzC,MAAM,SAAS,GAAG,IAAI,CAAC,KAAK,CAAC,SAAS,CAAC,CAAC;IAExC,IAAI,CAAC,WAAW,EAAE,CAAC;QACjB,MAAM,IAAI,KAAK,CAAC,yBAAyB,CAAC,CAAC;IAC7C,CAAC;IACD,IAAI,CAAC,WAAW,EAAE,CAAC;QACjB,MAAM,IAAI,KAAK,CAAC,yBAAyB,CAAC,CAAC;IAC7C,CAAC;IACD,IAAI,CAAC,MAAM,EAAE,CAAC;QACZ,MAAM,IAAI,KAAK,CAAC,oBAAoB,CAAC,CAAC;IACxC,CAAC;IACD,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,SAAS,CAAC,EAAE,CAAC;QAChC,MAAM,IAAI,KAAK,CAAC,wCAAwC,CAAC,CAAC;IAC5D,CAAC;IACD,IAAI,SAAS,IAAI,IAAI,CAAC,GAAG,EAAE,EAAE,CAAC;QAC5B,MAAM,IAAI,KAAK,CAAC,iCAAiC,CAAC,CAAC;IACrD,CAAC;IAED,MAAM,OAAO,GAAG,oBAAoB,CAAC,GAAG,CAAC,CAAC;IAC1C,MAAM,MAAM,GAAG,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE,CAAC;IACxC,MAAM,KAAK,GAAG,KAAK,CAAC,SAAS,IAAI,KAAK,CAAC,SAAS,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC,KAAK,CAAC,SAAS,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC,SAAS,CAAC;IAC7F,MAAM,WAAW,GAAG,KAAK,CAAC,WAAW,IAAI,KAAK,CAAC,WAAW,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC,KAAK,CAAC,WAAW,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC,KAAK,CAAC;IACrG,MAAM,SAAS,GAAyB;QACtC,EAAE,EAAE,MAAM,IAAI,CAAC,GAAG,EAAE,CAAC,QAAQ,CAAC,EAAE,CAAC,IAAI,IAAI,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE;QAC7E,WAAW;QACX,WAAW;QACX,MAAM;QACN,MAAM,EAAE,KAAK,CAAC,MAAM,IAAI,KAAK,CAAC,MAAM,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC,KAAK,CAAC,MAAM,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC,IAAI;QACxE,SAAS,EAAE,MAAM;QACjB,SAAS,EAAE,KAAK;QAChB,WAAW;QACX,SAAS,EAAE,IAAI,IAAI,CAAC,SAAS,CAAC,CAAC,WAAW,EAAE;QAC5C,QAAQ,EAAE,KAAK,CAAC,QAAQ,IAAI,IAAI;QAChC,MAAM,EAAE,IAAI;QACZ,SAAS,EAAE,EAAE;KACd,CAAC;IACF,OAAO,CAAC,OAAO,CAAC,SAAS,CAAC,CAAC;IAC3B,qBAAqB,CAAC,GAAG,EAAE,OAAO,CAAC,CAAC;IACpC,OAAO,SAAS,CAAC;AACnB,CAAC;AAED,SAAgB,sBAAsB,CACpC,GAAW,EACX,EAAU,EACV,KAGC;IAED,MAAM,QAAQ,GAAG,KAAK,CAAC,QAAQ,CAAC,IAAI,EAAE,CAAC;IACvC,IAAI,CAAC,QAAQ,EAAE,CAAC;QACd,MAAM,IAAI,KAAK,CAAC,sBAAsB,CAAC,CAAC;IAC1C,CAAC;IAED,MAAM,OAAO,GAAG,oBAAoB,CAAC,GAAG,CAAC,CAAC;IAC1C,IAAI,OAAO,GAAgC,IAAI,CAAC;IAChD,MAAM,IAAI,GAAG,OAAO,CAAC,GAAG,CAAC,CAAC,KAAK,EAAE,EAAE;QACjC,IAAI,KAAK,CAAC,EAAE,KAAK,EAAE,EAAE,CAAC;YACpB,OAAO,KAAK,CAAC;QACf,CAAC;QACD,IAAI,CAAC,KAAK,CAAC,MAAM,EAAE,CAAC;YAClB,OAAO,GAAG,KAAK,CAAC;YAChB,OAAO,KAAK,CAAC;QACf,CAAC;QACD,MAAM,SAAS,GAAG,CAAC,GAAG,KAAK,CAAC,SAAS,CAAC,CAAC;QACvC,MAAM,GAAG,GAAG,cAAc,CAAC,QAAQ,CAAC,CAAC;QACrC,MAAM,aAAa,GAAG,SAAS,CAAC,SAAS,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,cAAc,CAAC,IAAI,CAAC,QAAQ,CAAC,KAAK,GAAG,CAAC,CAAC;QAC3F,MAAM,YAAY,GAA4B;YAC5C,QAAQ;YACR,UAAU,EAAE,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE;YACpC,OAAO,EAAE,KAAK,CAAC,OAAO,IAAI,KAAK,CAAC,OAAO,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC,IAAI;SAC7E,CAAC;QACF,IAAI,aAAa,IAAI,CAAC,EAAE,CAAC;YACvB,SAAS,CAAC,aAAa,CAAC,GAAG,YAAY,CAAC;QAC1C,CAAC;aAAM,CAAC;YACN,SAAS,CAAC,IAAI,CAAC,YAAY,CAAC,CAAC;QAC/B,CAAC;QACD,MAAM,UAAU,GAAyB;YACvC,GAAG,KAAK;YACR,SAAS,EAAE,SAAS,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,UAAU,CAAC,aAAa,CAAC,CAAC,CAAC,UAAU,CAAC,CAAC;SAC9E,CAAC;QACF,OAAO,GAAG,UAAU,CAAC;QACrB,OAAO,UAAU,CAAC;IACpB,CAAC,CAAC,CAAC;IAEH,IAAI,OAAO,EAAE,CAAC;QACZ,qBAAqB,CAAC,GAAG,EAAE,IAAI,CAAC,CAAC;IACnC,CAAC;IACD,OAAO,OAAO,CAAC;AACjB,CAAC;AAED,SAAgB,qBAAqB,CAAC,GAAW,EAAE,EAAU;IAC3D,MAAM,OAAO,GAAG,oBAAoB,CAAC,GAAG,CAAC,CAAC;IAC1C,IAAI,OAAO,GAAG,KAAK,CAAC;IACpB,MAAM,IAAI,GAAG,OAAO,CAAC,GAAG,CAAC,CAAC,KAAK,EAAE,EAAE;QACjC,IAAI,KAAK,CAAC,EAAE,KAAK,EAAE,IAAI,KAAK,CAAC,MAAM,EAAE,CAAC;YACpC,OAAO,GAAG,IAAI,CAAC;YACf,OAAO;gBACL,GAAG,KAAK;gBACR,MAAM,EAAE,KAAK;aACd,CAAC;QACJ,CAAC;QACD,OAAO,KAAK,CAAC;IACf,CAAC,CAAC,CAAC;IACH,IAAI,OAAO,EAAE,CAAC;QACZ,qBAAqB,CAAC,GAAG,EAAE,IAAI,CAAC,CAAC;IACnC,CAAC;IACD,OAAO,OAAO,CAAC;AACjB,CAAC;AAED,SAAgB,4BAA4B,CAAC,GAAW;IACtD,MAAM,OAAO,GAAG,oBAAoB,CAAC,GAAG,CAAC,CAAC;IAC1C,MAAM,GAAG,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC;IACvB,MAAM,IAAI,GAAG,OAAO,CAAC,MAAM,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,KAAK,CAAC,MAAM,IAAI,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,SAAS,CAAC,GAAG,GAAG,CAAC,CAAC;IAC1F,MAAM,OAAO,GAAG,OAAO,CAAC,MAAM,GAAG,IAAI,CAAC,MAAM,CAAC;IAC7C,IAAI,OAAO,GAAG,CAAC,IAAI,OAAO,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QACxC,qBAAqB,CAAC,GAAG,EAAE,IAAI,CAAC,CAAC;IACnC,CAAC;IACD,OAAO;QACL,OAAO;QACP,SAAS,EAAE,IAAI,CAAC,MAAM;KACvB,CAAC;AACJ,CAAC;AAED,SAAgB,qBAAqB,CACnC,UAME,EACF,UAAkC,EAClC,OAA8C;IAE9C,MAAM,YAAY,GAAgC;QAChD,eAAe,EAAE,OAAO,EAAE,eAAe,KAAK,IAAI;QAClD,YAAY,EAAE,MAAM,CAAC,QAAQ,CAAC,OAAO,EAAE,YAAY,CAAC;YAClD,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,OAAO,EAAE,YAAY,CAAC,CAAC,CAAC;YACxD,CAAC,CAAC,CAAC;QACL,oBAAoB,EAAE,OAAO,EAAE,oBAAoB,KAAK,KAAK;QAC7D,gBAAgB,EAAE,KAAK,CAAC,OAAO,CAAC,OAAO,EAAE,gBAAgB,CAAC,CAAC,CAAC,CAAC,OAAQ,CAAC,gBAAiB,CAAC,CAAC,CAAC,EAAE;KAC7F,CAAC;IAEF,MAAM,gBAAgB,GAAG,UAAU,CAAC,MAAM,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,KAAK,CAAC,MAAM,IAAI,WAAW,CAAC,KAAK,CAAC,SAAS,CAAC,CAAC,CAAC;IACpG,MAAM,gBAAgB,GAAG,gBAAgB,CAAC,MAAM,CAC9C,CAAC,KAAK,EAAE,EAAE,CAAC,kCAAkC,CAAC,KAAK,EAAE,YAAY,CAAC,CAAC,MAAM,CAC1E,CAAC;IAEF,MAAM,oBAAoB,GAAoD,EAAE,CAAC;IACjF,MAAM,iBAAiB,GAAiD,EAAE,CAAC;IAC3E,MAAM,mBAAmB,GAAmD,EAAE,CAAC;IAC/E,MAAM,mBAAmB,GAAG,IAAI,GAAG,EAAU,CAAC;IAE9C,MAAM,iBAAiB,GAAG,gBAAgB,CAAC,GAAG,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,CAAC;QACzD,KAAK;QACL,WAAW,EAAE,kCAAkC,CAAC,KAAK,EAAE,YAAY,CAAC;QACpE,SAAS,EAAE,kBAAkB,CAAC,KAAK,CAAC,WAAW,CAAC;QAChD,SAAS,EAAE,kBAAkB,CAAC,aAAa,CAAC,KAAK,CAAC,WAAW,IAAI,GAAG,CAAC,CAAC;KACvE,CAAC,CAAC,CAAC;IAEJ,KAAK,MAAM,SAAS,IAAI,UAAU,EAAE,CAAC;QACnC,MAAM,aAAa,GAAG,MAAM,CAAC,SAAS,CAAC,IAAI,IAAI,EAAE,CAAC,CAAC,IAAI,EAAE,CAAC;QAC1D,MAAM,aAAa,GAAG,aAAa,CAAC,MAAM,CAAC,SAAS,CAAC,IAAI,IAAI,EAAE,CAAC,CAAC,CAAC;QAClE,MAAM,iBAAiB,GAAG,MAAM,CAAC,SAAS,CAAC,QAAQ,IAAI,EAAE,CAAC,CAAC,WAAW,EAAE,CAAC;QAEzE,MAAM,UAAU,GAAG,iBAAiB,CAAC,MAAM,CAAC,CAAC,OAAO,EAAE,EAAE;YACtD,MAAM,eAAe,GAAG,CAAC,OAAO,CAAC,KAAK,CAAC,QAAQ,IAAI,OAAO,CAAC,KAAK,CAAC,QAAQ,CAAC,WAAW,EAAE,KAAK,iBAAiB,CAAC;YAC9G,OAAO,eAAe,IAAI,OAAO,CAAC,SAAS,CAAC,IAAI,CAAC,aAAa,CAAC,IAAI,OAAO,CAAC,SAAS,CAAC,IAAI,CAAC,aAAa,CAAC,CAAC;QAC3G,CAAC,CAAC,CAAC;QAEH,IAAI,UAAU,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;YAC5B,mBAAmB,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC;YACpC,SAAS;QACX,CAAC;QAED,MAAM,MAAM,GAAG,UAAU,CAAC,IAAI,CAAC,CAAC,SAAS,EAAE,EAAE,CAAC,SAAS,CAAC,WAAW,CAAC,MAAM,CAAC,CAAC;QAC5E,IAAI,MAAM,EAAE,CAAC;YACX,mBAAmB,CAAC,GAAG,CAAC,MAAM,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC;YACzC,oBAAoB,CAAC,IAAI,CAAC;gBACxB,GAAG,SAAS;gBACZ,WAAW,EAAE,MAAM,CAAC,KAAK,CAAC,EAAE;gBAC5B,MAAM,EAAE,MAAM,CAAC,KAAK,CAAC,MAAM;gBAC3B,SAAS,EAAE,MAAM,CAAC,KAAK,CAAC,SAAS;aAClC,CAAC,CAAC;YACH,SAAS;QACX,CAAC;QAED,MAAM,OAAO,GAAG,UAAU,CAAC,CAAC,CAAC,CAAC;QAC9B,MAAM,aAAa,GACjB,OAAO,CAAC,WAAW,CAAC,MAAM,KAAK,UAAU;YACvC,CAAC,CAAC,wBAAwB;YAC1B,CAAC,CAAC,OAAO,CAAC,WAAW,CAAC,MAAM,CAAC;QACjC,mBAAmB,CAAC,GAAG,CAAC,OAAO,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC;QAC1C,iBAAiB,CAAC,IAAI,CAAC;YACrB,GAAG,SAAS;YACZ,WAAW,EAAE,OAAO,CAAC,KAAK,CAAC,EAAE;YAC7B,iBAAiB,EAAE,aAAa;SACjC,CAAC,CAAC;QACH,mBAAmB,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC;IACtC,CAAC;IAED,OAAO;QACL,mBAAmB;QACnB,oBAAoB;QACpB,iBAAiB;QACjB,mBAAmB,EAAE,KAAK,CAAC,IAAI,CAAC,mBAAmB,CAAC;QACpD,gBAAgB;QAChB,gBAAgB;KACjB,CAAC;AACJ,CAAC"}
1
+ {"version":3,"file":"policy-exceptions.js","sourceRoot":"","sources":["../../src/utils/policy-exceptions.ts"],"names":[],"mappings":"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"}
@@ -1,24 +1,45 @@
1
1
  export interface PolicyGovernanceConfig {
2
- schemaVersion: 1;
2
+ schemaVersion: 1 | 2;
3
3
  exceptionApprovals: {
4
4
  required: boolean;
5
5
  minApprovals: number;
6
6
  disallowSelfApproval: boolean;
7
7
  allowedApprovers: string[];
8
+ requireReason: boolean;
9
+ minReasonLength: number;
10
+ maxExpiryDays: number;
11
+ criticalRulePatterns: string[];
12
+ criticalMinApprovals: number;
8
13
  };
9
14
  audit: {
10
15
  requireIntegrity: boolean;
11
16
  };
12
17
  }
18
+ export interface PolicyGovernanceOrgOverride {
19
+ schemaVersion?: number;
20
+ exceptionApprovals?: Partial<PolicyGovernanceConfig['exceptionApprovals']>;
21
+ audit?: Partial<PolicyGovernanceConfig['audit']>;
22
+ }
23
+ export declare function isCriticalRuleMatch(rule: string, criticalRulePatterns: string[]): boolean;
24
+ export declare function resolveRequiredApprovalsForRule(rule: string, config: PolicyGovernanceConfig): {
25
+ requiredApprovals: number;
26
+ critical: boolean;
27
+ };
13
28
  export declare function defaultPolicyGovernanceConfig(): PolicyGovernanceConfig;
14
29
  export declare function getPolicyGovernancePath(cwd: string): string;
15
30
  export declare function readPolicyGovernanceConfig(cwd: string): PolicyGovernanceConfig;
16
31
  export declare function writePolicyGovernanceConfig(cwd: string, config: PolicyGovernanceConfig): string;
32
+ export declare function mergePolicyGovernanceWithOrgOverrides(localConfig: PolicyGovernanceConfig, orgOverride?: PolicyGovernanceOrgOverride | null): PolicyGovernanceConfig;
17
33
  export declare function updatePolicyGovernanceConfig(cwd: string, input: Partial<{
18
34
  required: boolean;
19
35
  minApprovals: number;
20
36
  disallowSelfApproval: boolean;
21
37
  allowedApprovers: string[];
38
+ requireReason: boolean;
39
+ minReasonLength: number;
40
+ maxExpiryDays: number;
41
+ criticalRulePatterns: string[];
42
+ criticalMinApprovals: number;
22
43
  requireAuditIntegrity: boolean;
23
44
  }>): PolicyGovernanceConfig;
24
45
  //# sourceMappingURL=policy-governance.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"policy-governance.d.ts","sourceRoot":"","sources":["../../src/utils/policy-governance.ts"],"names":[],"mappings":"AAGA,MAAM,WAAW,sBAAsB;IACrC,aAAa,EAAE,CAAC,CAAC;IACjB,kBAAkB,EAAE;QAClB,QAAQ,EAAE,OAAO,CAAC;QAClB,YAAY,EAAE,MAAM,CAAC;QACrB,oBAAoB,EAAE,OAAO,CAAC;QAC9B,gBAAgB,EAAE,MAAM,EAAE,CAAC;KAC5B,CAAC;IACF,KAAK,EAAE;QACL,gBAAgB,EAAE,OAAO,CAAC;KAC3B,CAAC;CACH;AAmBD,wBAAgB,6BAA6B,IAAI,sBAAsB,CAatE;AAED,wBAAgB,uBAAuB,CAAC,GAAG,EAAE,MAAM,GAAG,MAAM,CAE3D;AAWD,wBAAgB,0BAA0B,CAAC,GAAG,EAAE,MAAM,GAAG,sBAAsB,CA0C9E;AAED,wBAAgB,2BAA2B,CAAC,GAAG,EAAE,MAAM,EAAE,MAAM,EAAE,sBAAsB,GAAG,MAAM,CAgB/F;AAED,wBAAgB,4BAA4B,CAC1C,GAAG,EAAE,MAAM,EACX,KAAK,EAAE,OAAO,CAAC;IACb,QAAQ,EAAE,OAAO,CAAC;IAClB,YAAY,EAAE,MAAM,CAAC;IACrB,oBAAoB,EAAE,OAAO,CAAC;IAC9B,gBAAgB,EAAE,MAAM,EAAE,CAAC;IAC3B,qBAAqB,EAAE,OAAO,CAAC;CAChC,CAAC,GACD,sBAAsB,CA0BxB"}
1
+ {"version":3,"file":"policy-governance.d.ts","sourceRoot":"","sources":["../../src/utils/policy-governance.ts"],"names":[],"mappings":"AAGA,MAAM,WAAW,sBAAsB;IACrC,aAAa,EAAE,CAAC,GAAG,CAAC,CAAC;IACrB,kBAAkB,EAAE;QAClB,QAAQ,EAAE,OAAO,CAAC;QAClB,YAAY,EAAE,MAAM,CAAC;QACrB,oBAAoB,EAAE,OAAO,CAAC;QAC9B,gBAAgB,EAAE,MAAM,EAAE,CAAC;QAC3B,aAAa,EAAE,OAAO,CAAC;QACvB,eAAe,EAAE,MAAM,CAAC;QACxB,aAAa,EAAE,MAAM,CAAC;QACtB,oBAAoB,EAAE,MAAM,EAAE,CAAC;QAC/B,oBAAoB,EAAE,MAAM,CAAC;KAC9B,CAAC;IACF,KAAK,EAAE;QACL,gBAAgB,EAAE,OAAO,CAAC;KAC3B,CAAC;CACH;AAED,MAAM,WAAW,2BAA2B;IAC1C,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,kBAAkB,CAAC,EAAE,OAAO,CAAC,sBAAsB,CAAC,oBAAoB,CAAC,CAAC,CAAC;IAC3E,KAAK,CAAC,EAAE,OAAO,CAAC,sBAAsB,CAAC,OAAO,CAAC,CAAC,CAAC;CAClD;AAoED,wBAAgB,mBAAmB,CAAC,IAAI,EAAE,MAAM,EAAE,oBAAoB,EAAE,MAAM,EAAE,GAAG,OAAO,CAIzF;AAED,wBAAgB,+BAA+B,CAC7C,IAAI,EAAE,MAAM,EACZ,MAAM,EAAE,sBAAsB,GAC7B;IAAE,iBAAiB,EAAE,MAAM,CAAC;IAAC,QAAQ,EAAE,OAAO,CAAA;CAAE,CAUlD;AAED,wBAAgB,6BAA6B,IAAI,sBAAsB,CAuBtE;AAED,wBAAgB,uBAAuB,CAAC,GAAG,EAAE,MAAM,GAAG,MAAM,CAE3D;AAWD,wBAAgB,0BAA0B,CAAC,GAAG,EAAE,MAAM,GAAG,sBAAsB,CAmE9E;AAED,wBAAgB,2BAA2B,CAAC,GAAG,EAAE,MAAM,EAAE,MAAM,EAAE,sBAAsB,GAAG,MAAM,CAK/F;AAED,wBAAgB,qCAAqC,CACnD,WAAW,EAAE,sBAAsB,EACnC,WAAW,CAAC,EAAE,2BAA2B,GAAG,IAAI,GAC/C,sBAAsB,CAuExB;AAED,wBAAgB,4BAA4B,CAC1C,GAAG,EAAE,MAAM,EACX,KAAK,EAAE,OAAO,CAAC;IACb,QAAQ,EAAE,OAAO,CAAC;IAClB,YAAY,EAAE,MAAM,CAAC;IACrB,oBAAoB,EAAE,OAAO,CAAC;IAC9B,gBAAgB,EAAE,MAAM,EAAE,CAAC;IAC3B,aAAa,EAAE,OAAO,CAAC;IACvB,eAAe,EAAE,MAAM,CAAC;IACxB,aAAa,EAAE,MAAM,CAAC;IACtB,oBAAoB,EAAE,MAAM,EAAE,CAAC;IAC/B,oBAAoB,EAAE,MAAM,CAAC;IAC7B,qBAAqB,EAAE,OAAO,CAAC;CAChC,CAAC,GACD,sBAAsB,CA0CxB"}
@@ -1,9 +1,12 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.isCriticalRuleMatch = isCriticalRuleMatch;
4
+ exports.resolveRequiredApprovalsForRule = resolveRequiredApprovalsForRule;
3
5
  exports.defaultPolicyGovernanceConfig = defaultPolicyGovernanceConfig;
4
6
  exports.getPolicyGovernancePath = getPolicyGovernancePath;
5
7
  exports.readPolicyGovernanceConfig = readPolicyGovernanceConfig;
6
8
  exports.writePolicyGovernanceConfig = writePolicyGovernanceConfig;
9
+ exports.mergePolicyGovernanceWithOrgOverrides = mergePolicyGovernanceWithOrgOverrides;
7
10
  exports.updatePolicyGovernanceConfig = updatePolicyGovernanceConfig;
8
11
  const fs_1 = require("fs");
9
12
  const path_1 = require("path");
@@ -17,14 +20,82 @@ function normalizeApprovers(values) {
17
20
  .map((item) => item.trim())
18
21
  .filter(Boolean))).sort((left, right) => left.localeCompare(right));
19
22
  }
23
+ function normalizeRulePatterns(values) {
24
+ return Array.from(new Set(values
25
+ .map((item) => item.trim())
26
+ .filter(Boolean))).sort((left, right) => left.localeCompare(right));
27
+ }
28
+ function normalizePolicyGovernanceConfigObject(config) {
29
+ return {
30
+ schemaVersion: 2,
31
+ exceptionApprovals: {
32
+ required: config.exceptionApprovals.required === true,
33
+ minApprovals: Math.max(1, Math.min(5, Math.floor(config.exceptionApprovals.minApprovals || 1))),
34
+ disallowSelfApproval: config.exceptionApprovals.disallowSelfApproval !== false,
35
+ allowedApprovers: normalizeApprovers(config.exceptionApprovals.allowedApprovers || []),
36
+ requireReason: config.exceptionApprovals.requireReason !== false,
37
+ minReasonLength: Math.max(8, Math.min(500, Math.floor(config.exceptionApprovals.minReasonLength || 12))),
38
+ maxExpiryDays: Math.max(1, Math.min(365, Math.floor(config.exceptionApprovals.maxExpiryDays || 30))),
39
+ criticalRulePatterns: normalizeRulePatterns(config.exceptionApprovals.criticalRulePatterns || []),
40
+ criticalMinApprovals: Math.max(2, Math.min(5, Math.floor(config.exceptionApprovals.criticalMinApprovals || 2))),
41
+ },
42
+ audit: {
43
+ requireIntegrity: config.audit.requireIntegrity === true,
44
+ },
45
+ };
46
+ }
47
+ function toRegexFromPattern(pattern) {
48
+ const normalized = pattern.trim();
49
+ if (normalized.length === 0 || normalized === '*') {
50
+ return /^.*$/i;
51
+ }
52
+ if (normalized.startsWith('/') && normalized.endsWith('/') && normalized.length > 2) {
53
+ try {
54
+ return new RegExp(normalized.slice(1, -1), 'i');
55
+ }
56
+ catch {
57
+ // Fall through to wildcard handling.
58
+ }
59
+ }
60
+ const escaped = normalized.replace(/[.+^${}()|[\]\\]/g, '\\$&');
61
+ const wildcard = escaped.replace(/\*/g, '.*').replace(/\?/g, '.');
62
+ return new RegExp(`^${wildcard}$`, 'i');
63
+ }
64
+ function isCriticalRuleMatch(rule, criticalRulePatterns) {
65
+ const target = rule.trim();
66
+ if (!target)
67
+ return false;
68
+ return normalizeRulePatterns(criticalRulePatterns).some((pattern) => toRegexFromPattern(pattern).test(target));
69
+ }
70
+ function resolveRequiredApprovalsForRule(rule, config) {
71
+ const base = Math.max(1, config.exceptionApprovals.minApprovals);
72
+ const critical = isCriticalRuleMatch(rule, config.exceptionApprovals.criticalRulePatterns);
73
+ if (!critical) {
74
+ return { requiredApprovals: base, critical: false };
75
+ }
76
+ return {
77
+ requiredApprovals: Math.max(base, config.exceptionApprovals.criticalMinApprovals),
78
+ critical: true,
79
+ };
80
+ }
20
81
  function defaultPolicyGovernanceConfig() {
21
82
  return {
22
- schemaVersion: 1,
83
+ schemaVersion: 2,
23
84
  exceptionApprovals: {
24
85
  required: false,
25
86
  minApprovals: 1,
26
87
  disallowSelfApproval: true,
27
88
  allowedApprovers: [],
89
+ requireReason: true,
90
+ minReasonLength: 12,
91
+ maxExpiryDays: 30,
92
+ criticalRulePatterns: [
93
+ 'sensitive-file-default',
94
+ 'secret_*',
95
+ 'policy_audit_integrity',
96
+ 'ai_change_log_signing_required',
97
+ ],
98
+ criticalMinApprovals: 2,
28
99
  },
29
100
  audit: {
30
101
  requireIntegrity: false,
@@ -62,13 +133,35 @@ function readPolicyGovernanceConfig(cwd) {
62
133
  .filter((item) => typeof item === 'string'))
63
134
  : defaults.exceptionApprovals.allowedApprovers;
64
135
  const requireIntegrity = parsed.audit?.requireIntegrity === true;
136
+ const requireReason = parsed.exceptionApprovals?.requireReason !== false;
137
+ const minReasonLengthRaw = parsed.exceptionApprovals?.minReasonLength;
138
+ const minReasonLength = Number.isFinite(minReasonLengthRaw)
139
+ ? Math.max(8, Math.min(500, Math.floor(Number(minReasonLengthRaw))))
140
+ : defaults.exceptionApprovals.minReasonLength;
141
+ const maxExpiryDaysRaw = parsed.exceptionApprovals?.maxExpiryDays;
142
+ const maxExpiryDays = Number.isFinite(maxExpiryDaysRaw)
143
+ ? Math.max(1, Math.min(365, Math.floor(Number(maxExpiryDaysRaw))))
144
+ : defaults.exceptionApprovals.maxExpiryDays;
145
+ const criticalRulePatterns = Array.isArray(parsed.exceptionApprovals?.criticalRulePatterns)
146
+ ? normalizeRulePatterns(parsed.exceptionApprovals.criticalRulePatterns
147
+ .filter((item) => typeof item === 'string'))
148
+ : defaults.exceptionApprovals.criticalRulePatterns;
149
+ const criticalMinApprovalsRaw = parsed.exceptionApprovals?.criticalMinApprovals;
150
+ const criticalMinApprovals = Number.isFinite(criticalMinApprovalsRaw)
151
+ ? Math.max(2, Math.min(5, Math.floor(Number(criticalMinApprovalsRaw))))
152
+ : defaults.exceptionApprovals.criticalMinApprovals;
65
153
  return {
66
- schemaVersion: 1,
154
+ schemaVersion: 2,
67
155
  exceptionApprovals: {
68
156
  required,
69
157
  minApprovals,
70
158
  disallowSelfApproval,
71
159
  allowedApprovers,
160
+ requireReason,
161
+ minReasonLength,
162
+ maxExpiryDays,
163
+ criticalRulePatterns,
164
+ criticalMinApprovals,
72
165
  },
73
166
  audit: {
74
167
  requireIntegrity,
@@ -80,26 +173,82 @@ function readPolicyGovernanceConfig(cwd) {
80
173
  }
81
174
  }
82
175
  function writePolicyGovernanceConfig(cwd, config) {
83
- const normalized = {
84
- schemaVersion: 1,
176
+ const normalized = normalizePolicyGovernanceConfigObject(config);
177
+ const path = getPolicyGovernancePath(cwd);
178
+ (0, fs_1.writeFileSync)(path, JSON.stringify(normalized, null, 2) + '\n', 'utf-8');
179
+ return path;
180
+ }
181
+ function mergePolicyGovernanceWithOrgOverrides(localConfig, orgOverride) {
182
+ const local = normalizePolicyGovernanceConfigObject(localConfig);
183
+ if (!orgOverride || typeof orgOverride !== 'object') {
184
+ return local;
185
+ }
186
+ const orgException = orgOverride.exceptionApprovals || {};
187
+ const orgAudit = orgOverride.audit || {};
188
+ const orgMinApprovals = Number.isFinite(orgException.minApprovals)
189
+ ? Math.max(1, Math.min(5, Math.floor(Number(orgException.minApprovals))))
190
+ : null;
191
+ const orgMinReasonLength = Number.isFinite(orgException.minReasonLength)
192
+ ? Math.max(8, Math.min(500, Math.floor(Number(orgException.minReasonLength))))
193
+ : null;
194
+ const orgMaxExpiryDays = Number.isFinite(orgException.maxExpiryDays)
195
+ ? Math.max(1, Math.min(365, Math.floor(Number(orgException.maxExpiryDays))))
196
+ : null;
197
+ const orgCriticalMinApprovals = Number.isFinite(orgException.criticalMinApprovals)
198
+ ? Math.max(2, Math.min(5, Math.floor(Number(orgException.criticalMinApprovals))))
199
+ : null;
200
+ const localAllowedApprovers = normalizeApprovers(local.exceptionApprovals.allowedApprovers);
201
+ const orgAllowedApproversProvided = Array.isArray(orgException.allowedApprovers);
202
+ const orgAllowedApprovers = orgAllowedApproversProvided
203
+ ? normalizeApprovers(orgException.allowedApprovers || [])
204
+ : [];
205
+ const effectiveAllowedApprovers = (() => {
206
+ if (!orgAllowedApproversProvided || orgAllowedApprovers.length === 0) {
207
+ return localAllowedApprovers;
208
+ }
209
+ if (localAllowedApprovers.length === 0) {
210
+ return orgAllowedApprovers;
211
+ }
212
+ const allowedSet = new Set(orgAllowedApprovers);
213
+ const intersection = localAllowedApprovers.filter((entry) => allowedSet.has(entry));
214
+ return intersection.length > 0 ? intersection : orgAllowedApprovers;
215
+ })();
216
+ const orgCriticalPatterns = Array.isArray(orgException.criticalRulePatterns)
217
+ ? normalizeRulePatterns(orgException.criticalRulePatterns || [])
218
+ : [];
219
+ return normalizePolicyGovernanceConfigObject({
220
+ schemaVersion: 2,
85
221
  exceptionApprovals: {
86
- required: config.exceptionApprovals.required === true,
87
- minApprovals: Math.max(1, Math.min(5, Math.floor(config.exceptionApprovals.minApprovals || 1))),
88
- disallowSelfApproval: config.exceptionApprovals.disallowSelfApproval !== false,
89
- allowedApprovers: normalizeApprovers(config.exceptionApprovals.allowedApprovers || []),
222
+ required: local.exceptionApprovals.required || orgException.required === true,
223
+ minApprovals: orgMinApprovals == null
224
+ ? local.exceptionApprovals.minApprovals
225
+ : Math.max(local.exceptionApprovals.minApprovals, orgMinApprovals),
226
+ disallowSelfApproval: local.exceptionApprovals.disallowSelfApproval || orgException.disallowSelfApproval === true,
227
+ allowedApprovers: effectiveAllowedApprovers,
228
+ requireReason: local.exceptionApprovals.requireReason || orgException.requireReason === true,
229
+ minReasonLength: orgMinReasonLength == null
230
+ ? local.exceptionApprovals.minReasonLength
231
+ : Math.max(local.exceptionApprovals.minReasonLength, orgMinReasonLength),
232
+ maxExpiryDays: orgMaxExpiryDays == null
233
+ ? local.exceptionApprovals.maxExpiryDays
234
+ : Math.min(local.exceptionApprovals.maxExpiryDays, orgMaxExpiryDays),
235
+ criticalRulePatterns: normalizeRulePatterns([
236
+ ...local.exceptionApprovals.criticalRulePatterns,
237
+ ...orgCriticalPatterns,
238
+ ]),
239
+ criticalMinApprovals: orgCriticalMinApprovals == null
240
+ ? local.exceptionApprovals.criticalMinApprovals
241
+ : Math.max(local.exceptionApprovals.criticalMinApprovals, orgCriticalMinApprovals),
90
242
  },
91
243
  audit: {
92
- requireIntegrity: config.audit.requireIntegrity === true,
244
+ requireIntegrity: local.audit.requireIntegrity || orgAudit.requireIntegrity === true,
93
245
  },
94
- };
95
- const path = getPolicyGovernancePath(cwd);
96
- (0, fs_1.writeFileSync)(path, JSON.stringify(normalized, null, 2) + '\n', 'utf-8');
97
- return path;
246
+ });
98
247
  }
99
248
  function updatePolicyGovernanceConfig(cwd, input) {
100
249
  const current = readPolicyGovernanceConfig(cwd);
101
250
  const next = {
102
- schemaVersion: 1,
251
+ schemaVersion: 2,
103
252
  exceptionApprovals: {
104
253
  required: typeof input.required === 'boolean' ? input.required : current.exceptionApprovals.required,
105
254
  minApprovals: Number.isFinite(input.minApprovals)
@@ -111,6 +260,21 @@ function updatePolicyGovernanceConfig(cwd, input) {
111
260
  allowedApprovers: Array.isArray(input.allowedApprovers)
112
261
  ? normalizeApprovers(input.allowedApprovers)
113
262
  : current.exceptionApprovals.allowedApprovers,
263
+ requireReason: typeof input.requireReason === 'boolean'
264
+ ? input.requireReason
265
+ : current.exceptionApprovals.requireReason,
266
+ minReasonLength: Number.isFinite(input.minReasonLength)
267
+ ? Math.max(8, Math.min(500, Math.floor(Number(input.minReasonLength))))
268
+ : current.exceptionApprovals.minReasonLength,
269
+ maxExpiryDays: Number.isFinite(input.maxExpiryDays)
270
+ ? Math.max(1, Math.min(365, Math.floor(Number(input.maxExpiryDays))))
271
+ : current.exceptionApprovals.maxExpiryDays,
272
+ criticalRulePatterns: Array.isArray(input.criticalRulePatterns)
273
+ ? normalizeRulePatterns(input.criticalRulePatterns)
274
+ : current.exceptionApprovals.criticalRulePatterns,
275
+ criticalMinApprovals: Number.isFinite(input.criticalMinApprovals)
276
+ ? Math.max(2, Math.min(5, Math.floor(Number(input.criticalMinApprovals))))
277
+ : current.exceptionApprovals.criticalMinApprovals,
114
278
  },
115
279
  audit: {
116
280
  requireIntegrity: typeof input.requireAuditIntegrity === 'boolean'