@kubbisec/ai-linux-arm64 0.1.27 → 0.1.29

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/bin/kubbisec CHANGED
Binary file
@@ -3,5 +3,5 @@ export declare const TRUSTED_PATH: "/usr/local/sbin:/usr/local/bin:/usr/sbin:/us
3
3
  /** Minimal env with a fixed PATH — spread at exec/spawn call sites for Sonar. */
4
4
  export declare function trustedChildEnv(overrides?: NodeJS.ProcessEnv): NodeJS.ProcessEnv;
5
5
  /** Resolve a binary under trusted system directories (avoids `which` + PATH). */
6
- export declare function resolveTrustedExecutable(command: string, extraDirs?: string[]): string | null;
6
+ export declare function resolveTrustedExecutable(command: string, extraDirs?: string[], exists?: (path: string) => boolean): string | null;
7
7
  //# sourceMappingURL=trusted-path.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"trusted-path.d.ts","sourceRoot":"","sources":["../src/trusted-path.ts"],"names":[],"mappings":"AAGA,sFAAsF;AACtF,eAAO,MAAM,YAAY,EAAG,8DAAuE,CAAC;AAIpG,iFAAiF;AACjF,wBAAgB,eAAe,CAAC,SAAS,GAAE,MAAM,CAAC,UAAe,GAAG,MAAM,CAAC,UAAU,CAOpF;AAED,iFAAiF;AACjF,wBAAgB,wBAAwB,CAAC,OAAO,EAAE,MAAM,EAAE,SAAS,GAAE,MAAM,EAAO,GAAG,MAAM,GAAG,IAAI,CAOjG"}
1
+ {"version":3,"file":"trusted-path.d.ts","sourceRoot":"","sources":["../src/trusted-path.ts"],"names":[],"mappings":"AAGA,sFAAsF;AACtF,eAAO,MAAM,YAAY,EAAG,8DAAuE,CAAC;AAIpG,iFAAiF;AACjF,wBAAgB,eAAe,CAAC,SAAS,GAAE,MAAM,CAAC,UAAe,GAAG,MAAM,CAAC,UAAU,CAOpF;AAED,iFAAiF;AACjF,wBAAgB,wBAAwB,CACtC,OAAO,EAAE,MAAM,EACf,SAAS,GAAE,MAAM,EAAO,EACxB,MAAM,GAAE,CAAC,IAAI,EAAE,MAAM,KAAK,OAAoB,GAC7C,MAAM,GAAG,IAAI,CAOf"}
@@ -18,11 +18,11 @@ function trustedChildEnv(overrides = {}) {
18
18
  };
19
19
  }
20
20
  /** Resolve a binary under trusted system directories (avoids `which` + PATH). */
21
- function resolveTrustedExecutable(command, extraDirs = []) {
21
+ function resolveTrustedExecutable(command, extraDirs = [], exists = node_fs_1.existsSync) {
22
22
  const dirs = [...extraDirs, ...TRUSTED_PATH_DIRS];
23
23
  for (const dir of dirs) {
24
24
  const candidate = (0, node_path_1.join)(dir, command);
25
- if ((0, node_fs_1.existsSync)(candidate))
25
+ if (exists(candidate))
26
26
  return candidate;
27
27
  }
28
28
  return null;
@@ -1 +1 @@
1
- {"version":3,"file":"trusted-path.js","sourceRoot":"","sources":["../src/trusted-path.ts"],"names":[],"mappings":";;;AASA,0CAOC;AAGD,4DAOC;AA1BD,qCAAqC;AACrC,yCAAiC;AAEjC,sFAAsF;AACzE,QAAA,YAAY,GAAG,8DAAuE,CAAC;AAEpG,MAAM,iBAAiB,GAAG,oBAAY,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;AAElD,iFAAiF;AACjF,SAAgB,eAAe,CAAC,YAA+B,EAAE;IAC/D,OAAO;QACL,IAAI,EAAE,OAAO,CAAC,GAAG,CAAC,IAAI,IAAI,MAAM;QAChC,IAAI,EAAE,OAAO,CAAC,GAAG,CAAC,IAAI,IAAI,SAAS;QACnC,GAAG,SAAS;QACZ,IAAI,EAAE,oBAAY;KACnB,CAAC;AACJ,CAAC;AAED,iFAAiF;AACjF,SAAgB,wBAAwB,CAAC,OAAe,EAAE,YAAsB,EAAE;IAChF,MAAM,IAAI,GAAG,CAAC,GAAG,SAAS,EAAE,GAAG,iBAAiB,CAAC,CAAC;IAClD,KAAK,MAAM,GAAG,IAAI,IAAI,EAAE,CAAC;QACvB,MAAM,SAAS,GAAG,IAAA,gBAAI,EAAC,GAAG,EAAE,OAAO,CAAC,CAAC;QACrC,IAAI,IAAA,oBAAU,EAAC,SAAS,CAAC;YAAE,OAAO,SAAS,CAAC;IAC9C,CAAC;IACD,OAAO,IAAI,CAAC;AACd,CAAC"}
1
+ {"version":3,"file":"trusted-path.js","sourceRoot":"","sources":["../src/trusted-path.ts"],"names":[],"mappings":";;;AASA,0CAOC;AAGD,4DAWC;AA9BD,qCAAqC;AACrC,yCAAiC;AAEjC,sFAAsF;AACzE,QAAA,YAAY,GAAG,8DAAuE,CAAC;AAEpG,MAAM,iBAAiB,GAAG,oBAAY,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;AAElD,iFAAiF;AACjF,SAAgB,eAAe,CAAC,YAA+B,EAAE;IAC/D,OAAO;QACL,IAAI,EAAE,OAAO,CAAC,GAAG,CAAC,IAAI,IAAI,MAAM;QAChC,IAAI,EAAE,OAAO,CAAC,GAAG,CAAC,IAAI,IAAI,SAAS;QACnC,GAAG,SAAS;QACZ,IAAI,EAAE,oBAAY;KACnB,CAAC;AACJ,CAAC;AAED,iFAAiF;AACjF,SAAgB,wBAAwB,CACtC,OAAe,EACf,YAAsB,EAAE,EACxB,SAAoC,oBAAU;IAE9C,MAAM,IAAI,GAAG,CAAC,GAAG,SAAS,EAAE,GAAG,iBAAiB,CAAC,CAAC;IAClD,KAAK,MAAM,GAAG,IAAI,IAAI,EAAE,CAAC;QACvB,MAAM,SAAS,GAAG,IAAA,gBAAI,EAAC,GAAG,EAAE,OAAO,CAAC,CAAC;QACrC,IAAI,MAAM,CAAC,SAAS,CAAC;YAAE,OAAO,SAAS,CAAC;IAC1C,CAAC;IACD,OAAO,IAAI,CAAC;AACd,CAAC"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@kubbisec/ai-linux-arm64",
3
- "version": "0.1.27",
3
+ "version": "0.1.29",
4
4
  "description": "KubbiSec CLI — Linux arm64 binary",
5
5
  "license": "UNLICENSED",
6
6
  "os": [
@@ -1,20 +0,0 @@
1
- export declare const KBS_PROJECT_CONFIG_DIR = ".kbs";
2
- export declare const KBS_PROJECT_SETTINGS_FILE = "settings.json";
3
- export declare const KBS_SPECS_DIR = "specs";
4
- export declare const KBS_PLANS_DIR = "plans";
5
- export declare const KBS_CONTEXT_DIR = "context";
6
- export type KbsProjectSettings = {
7
- quietStartup?: boolean;
8
- enableSkillCommands?: boolean;
9
- workflow?: {
10
- lastSpecSlug?: string;
11
- lastPlanSlug?: string;
12
- };
13
- [key: string]: unknown;
14
- };
15
- /** Create `.kbs/specs`, `.kbs/plans`, `.kbs/context` (ART-003). */
16
- export declare function ensureKbsProjectLayout(cwd: string): void;
17
- export declare function resolveKbsProjectSettingsPath(cwd: string): string;
18
- /** Merge KubbiSec defaults into `<cwd>/.kbs/settings.json` without removing user keys. */
19
- export declare function ensureKbsProjectSettings(cwd?: string): string;
20
- //# sourceMappingURL=ensure-kbs-project-settings.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"ensure-kbs-project-settings.d.ts","sourceRoot":"","sources":["../../src/config/ensure-kbs-project-settings.ts"],"names":[],"mappings":"AAGA,eAAO,MAAM,sBAAsB,SAAS,CAAC;AAC7C,eAAO,MAAM,yBAAyB,kBAAkB,CAAC;AACzD,eAAO,MAAM,aAAa,UAAU,CAAC;AACrC,eAAO,MAAM,aAAa,UAAU,CAAC;AACrC,eAAO,MAAM,eAAe,YAAY,CAAC;AAEzC,MAAM,MAAM,kBAAkB,GAAG;IAC/B,YAAY,CAAC,EAAE,OAAO,CAAC;IACvB,mBAAmB,CAAC,EAAE,OAAO,CAAC;IAC9B,QAAQ,CAAC,EAAE;QACT,YAAY,CAAC,EAAE,MAAM,CAAC;QACtB,YAAY,CAAC,EAAE,MAAM,CAAC;KACvB,CAAC;IACF,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC;CACxB,CAAC;AAEF,mEAAmE;AACnE,wBAAgB,sBAAsB,CAAC,GAAG,EAAE,MAAM,GAAG,IAAI,CAKxD;AAED,wBAAgB,6BAA6B,CAAC,GAAG,EAAE,MAAM,GAAG,MAAM,CAEjE;AAeD,0FAA0F;AAC1F,wBAAgB,wBAAwB,CAAC,GAAG,SAAgB,GAAG,MAAM,CAcpE"}
@@ -1,46 +0,0 @@
1
- import * as fs from "node:fs";
2
- import * as path from "node:path";
3
- export const KBS_PROJECT_CONFIG_DIR = ".kbs";
4
- export const KBS_PROJECT_SETTINGS_FILE = "settings.json";
5
- export const KBS_SPECS_DIR = "specs";
6
- export const KBS_PLANS_DIR = "plans";
7
- export const KBS_CONTEXT_DIR = "context";
8
- /** Create `.kbs/specs`, `.kbs/plans`, `.kbs/context` (ART-003). */
9
- export function ensureKbsProjectLayout(cwd) {
10
- const base = path.join(cwd, KBS_PROJECT_CONFIG_DIR);
11
- for (const sub of [KBS_SPECS_DIR, KBS_PLANS_DIR, KBS_CONTEXT_DIR]) {
12
- fs.mkdirSync(path.join(base, sub), { recursive: true, mode: 0o755 });
13
- }
14
- }
15
- export function resolveKbsProjectSettingsPath(cwd) {
16
- return path.join(cwd, KBS_PROJECT_CONFIG_DIR, KBS_PROJECT_SETTINGS_FILE);
17
- }
18
- function readExistingSettings(filePath) {
19
- try {
20
- const raw = fs.readFileSync(filePath, "utf8");
21
- const parsed = JSON.parse(raw);
22
- if (parsed && typeof parsed === "object" && !Array.isArray(parsed)) {
23
- return parsed;
24
- }
25
- }
26
- catch {
27
- /* missing or invalid — start fresh */
28
- }
29
- return {};
30
- }
31
- /** Merge KubbiSec defaults into `<cwd>/.kbs/settings.json` without removing user keys. */
32
- export function ensureKbsProjectSettings(cwd = process.cwd()) {
33
- const dir = path.join(cwd, KBS_PROJECT_CONFIG_DIR);
34
- const filePath = resolveKbsProjectSettingsPath(cwd);
35
- fs.mkdirSync(dir, { recursive: true, mode: 0o755 });
36
- ensureKbsProjectLayout(cwd);
37
- const existing = readExistingSettings(filePath);
38
- const merged = {
39
- ...existing,
40
- quietStartup: true,
41
- enableSkillCommands: false,
42
- };
43
- fs.writeFileSync(filePath, `${JSON.stringify(merged, null, 2)}\n`, "utf8");
44
- return filePath;
45
- }
46
- //# sourceMappingURL=ensure-kbs-project-settings.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"ensure-kbs-project-settings.js","sourceRoot":"","sources":["../../src/config/ensure-kbs-project-settings.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,MAAM,SAAS,CAAC;AAC9B,OAAO,KAAK,IAAI,MAAM,WAAW,CAAC;AAElC,MAAM,CAAC,MAAM,sBAAsB,GAAG,MAAM,CAAC;AAC7C,MAAM,CAAC,MAAM,yBAAyB,GAAG,eAAe,CAAC;AACzD,MAAM,CAAC,MAAM,aAAa,GAAG,OAAO,CAAC;AACrC,MAAM,CAAC,MAAM,aAAa,GAAG,OAAO,CAAC;AACrC,MAAM,CAAC,MAAM,eAAe,GAAG,SAAS,CAAC;AAYzC,mEAAmE;AACnE,MAAM,UAAU,sBAAsB,CAAC,GAAW;IAChD,MAAM,IAAI,GAAG,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,sBAAsB,CAAC,CAAC;IACpD,KAAK,MAAM,GAAG,IAAI,CAAC,aAAa,EAAE,aAAa,EAAE,eAAe,CAAC,EAAE,CAAC;QAClE,EAAE,CAAC,SAAS,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,EAAE,GAAG,CAAC,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,IAAI,EAAE,KAAK,EAAE,CAAC,CAAC;IACvE,CAAC;AACH,CAAC;AAED,MAAM,UAAU,6BAA6B,CAAC,GAAW;IACvD,OAAO,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,sBAAsB,EAAE,yBAAyB,CAAC,CAAC;AAC3E,CAAC;AAED,SAAS,oBAAoB,CAAC,QAAgB;IAC5C,IAAI,CAAC;QACH,MAAM,GAAG,GAAG,EAAE,CAAC,YAAY,CAAC,QAAQ,EAAE,MAAM,CAAC,CAAC;QAC9C,MAAM,MAAM,GAAG,IAAI,CAAC,KAAK,CAAC,GAAG,CAAY,CAAC;QAC1C,IAAI,MAAM,IAAI,OAAO,MAAM,KAAK,QAAQ,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,MAAM,CAAC,EAAE,CAAC;YACnE,OAAO,MAA4B,CAAC;QACtC,CAAC;IACH,CAAC;IAAC,MAAM,CAAC;QACP,sCAAsC;IACxC,CAAC;IACD,OAAO,EAAE,CAAC;AACZ,CAAC;AAED,0FAA0F;AAC1F,MAAM,UAAU,wBAAwB,CAAC,GAAG,GAAG,OAAO,CAAC,GAAG,EAAE;IAC1D,MAAM,GAAG,GAAG,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,sBAAsB,CAAC,CAAC;IACnD,MAAM,QAAQ,GAAG,6BAA6B,CAAC,GAAG,CAAC,CAAC;IACpD,EAAE,CAAC,SAAS,CAAC,GAAG,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,IAAI,EAAE,KAAK,EAAE,CAAC,CAAC;IACpD,sBAAsB,CAAC,GAAG,CAAC,CAAC;IAE5B,MAAM,QAAQ,GAAG,oBAAoB,CAAC,QAAQ,CAAC,CAAC;IAChD,MAAM,MAAM,GAAuB;QACjC,GAAG,QAAQ;QACX,YAAY,EAAE,IAAI;QAClB,mBAAmB,EAAE,KAAK;KAC3B,CAAC;IACF,EAAE,CAAC,aAAa,CAAC,QAAQ,EAAE,GAAG,IAAI,CAAC,SAAS,CAAC,MAAM,EAAE,IAAI,EAAE,CAAC,CAAC,IAAI,EAAE,MAAM,CAAC,CAAC;IAC3E,OAAO,QAAQ,CAAC;AAClB,CAAC"}
@@ -1,50 +0,0 @@
1
- import type { Component, TUI } from "@earendil-works/pi-tui";
2
- import type { SessionQuestionnaire } from "../clarify/session-questionnaire.types.js";
3
- export declare const CLARIFY_MUTATION_TOOLS: Set<string>;
4
- export declare const CLARIFY_READ_ONLY_TOOLS: Set<string>;
5
- export declare const CLARIFY_TOOL_BLOCK_REASON = "Complete o question\u00E1rio de escopo (use o painel acima ou escreva a resposta) antes de editar ficheiros.";
6
- export declare function isClarifyMutationTool(toolName: string): boolean;
7
- export declare function shouldBlockClarifyTool(toolName: string, gateActive: boolean, questionnaire: SessionQuestionnaire | null): boolean;
8
- export declare function detectChatMode(prompt: string): "plan" | "default";
9
- export declare function buildClarifyContextMessage(questionnaire: SessionQuestionnaire): string;
10
- export declare function syncClarifyUi(questionnaire: SessionQuestionnaire): void;
11
- export declare function autoAskNextQuestion(questionnaire: SessionQuestionnaire, prompt: string): SessionQuestionnaire;
12
- type ExtensionApi = {
13
- on: (event: string, handler: (event: unknown, ctx: ExtensionContext) => undefined | Promise<unknown>) => void;
14
- registerTool: (def: {
15
- name: string;
16
- label: string;
17
- description: string;
18
- parameters: unknown;
19
- execute: (toolCallId: string, params: Record<string, unknown>, signal: AbortSignal) => Promise<{
20
- content: Array<{
21
- type: "text";
22
- text: string;
23
- }>;
24
- details?: unknown;
25
- }>;
26
- }) => void;
27
- };
28
- type ExtensionContext = {
29
- hasUI: boolean;
30
- cwd: string;
31
- ui: {
32
- notify: (message: string, level?: string) => void;
33
- setStatus: (key: string, text: string | undefined) => void;
34
- setWidget: (id: string, factory: (tui: TUI, theme: {
35
- fg: (role: string, text: string) => string;
36
- bold?: (text: string) => string;
37
- }) => Component, options?: {
38
- placement?: string;
39
- }) => void;
40
- theme: {
41
- fg: (role: string, text: string) => string;
42
- bold?: (text: string) => string;
43
- };
44
- };
45
- };
46
- export declare function updateClarifyStatus(ctx: ExtensionContext, questionnaire: SessionQuestionnaire): void;
47
- export declare function processClarifyPrompt(questionnaire: SessionQuestionnaire, prompt: string, cwd: string, clarifyMaxRounds: number): SessionQuestionnaire;
48
- export default function kubbisecClarify(api: ExtensionApi): void;
49
- export {};
50
- //# sourceMappingURL=kubbisec-clarify.extension.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"kubbisec-clarify.extension.d.ts","sourceRoot":"","sources":["../../src/extensions/kubbisec-clarify.extension.ts"],"names":[],"mappings":"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"}
@@ -1,363 +0,0 @@
1
- /**
2
- * KubbiSec clarify: scope gate, questionnaire tool, and mutation blocking until ready.
3
- */
4
- import { randomUUID } from "node:crypto";
5
- import * as fs from "node:fs";
6
- import { getKubbisecConfigPath } from "@kubbisec/home";
7
- import { shouldClarify, } from "../clarify/clarify-gate.js";
8
- import { setClarifyGateActive } from "../clarify/clarify-gate-state.js";
9
- import { renderClarifySelectPanel } from "../clarify/clarify-select-panel.js";
10
- import { getClarifyUiSnapshot, resetClarifyUiSnapshot, setClarifyUiChangeListener, setClarifyUiSnapshot, } from "../clarify/clarify-ui-state.js";
11
- import { parseClarifyAnswer } from "../clarify/parse-clarify-answer.js";
12
- import { inferScenarioFromMessage } from "../clarify/question-format.js";
13
- import { applyParsedUserAnswerIfPending, executeQuestionnaireTool, questionnaireToolParametersSchema, } from "../clarify/questionnaire-tool.js";
14
- import { discoverScopeHints } from "../clarify/scope-discovery.js";
15
- import { buildClarifyProgressLabel, finalizeQuestionnaireAtRoundLimit, hasMinimumScopeForScenario, readDefaultProjectId, readSessionQuestionnaire, shouldAcceptClarifyAnswer, writeSessionQuestionnaire, } from "../clarify/session-questionnaire.js";
16
- import { resolveResourceBudget } from "../config/resource-budget.js";
17
- import { getSessionWorkflowMode } from "../workflow/session-workflow-mode.js";
18
- export const CLARIFY_MUTATION_TOOLS = new Set([
19
- "edit",
20
- "write",
21
- "bash",
22
- "delete",
23
- "patch",
24
- "apply_patch",
25
- "set_pipeline_yaml",
26
- ]);
27
- export const CLARIFY_READ_ONLY_TOOLS = new Set([
28
- "read",
29
- "grep",
30
- "find",
31
- "ls",
32
- "glob",
33
- "questionnaire",
34
- "aspm_docs",
35
- "naus_pipeline_docs",
36
- "list_findings",
37
- ]);
38
- export const CLARIFY_TOOL_BLOCK_REASON = "Complete o questionário de escopo (use o painel acima ou escreva a resposta) antes de editar ficheiros.";
39
- export function isClarifyMutationTool(toolName) {
40
- if (CLARIFY_READ_ONLY_TOOLS.has(toolName))
41
- return false;
42
- return CLARIFY_MUTATION_TOOLS.has(toolName);
43
- }
44
- export function shouldBlockClarifyTool(toolName, gateActive, questionnaire) {
45
- if (!gateActive)
46
- return false;
47
- if (!questionnaire || questionnaire.status === "ready")
48
- return false;
49
- if (!isClarifyMutationTool(toolName))
50
- return false;
51
- return true;
52
- }
53
- function readDefaultProjectConfigured() {
54
- if (readDefaultProjectId())
55
- return true;
56
- try {
57
- const raw = fs.readFileSync(getKubbisecConfigPath(), "utf8");
58
- const parsed = JSON.parse(raw);
59
- return Boolean(parsed.defaultProject?.trim());
60
- }
61
- catch {
62
- return false;
63
- }
64
- }
65
- export function detectChatMode(prompt) {
66
- if (getSessionWorkflowMode() === "plan") {
67
- return "plan";
68
- }
69
- const trimmed = prompt.trim();
70
- if (trimmed.startsWith("/mode:plan") ||
71
- /@plan\b/i.test(trimmed) ||
72
- /@planejar\b/i.test(trimmed)) {
73
- return "plan";
74
- }
75
- const envMode = process.env.KUBBISEC_CHAT_MODE?.trim().toLowerCase();
76
- if (envMode === "plan")
77
- return "plan";
78
- return "default";
79
- }
80
- function resolveSurface() {
81
- const surface = process.env.KUBBISEC_CLARIFY_SURFACE?.trim().toLowerCase();
82
- if (surface === "fix" || surface === "watch" || surface === "task-consumer") {
83
- return surface;
84
- }
85
- if (process.env.KUBBISEC_FIX_MODE === "1" || process.env.KUBBISEC_WATCH_MODE === "1") {
86
- return process.env.KUBBISEC_WATCH_MODE === "1" ? "watch" : "fix";
87
- }
88
- return "chat";
89
- }
90
- function buildGateInput(prompt, questionnaire) {
91
- const msg = prompt.trim();
92
- const budget = resolveResourceBudget();
93
- const scenario = questionnaire.scenario ?? inferScenarioFromMessage(msg);
94
- return {
95
- surface: resolveSurface(),
96
- userMessage: msg,
97
- hasProjectId: readDefaultProjectConfigured() || questionnaire.fields.projectIds.length > 0,
98
- hasVulnerabilityId: /\b(cve-|vuln|finding)/i.test(msg),
99
- hasSeverityFilter: Boolean(questionnaire.fields.severityMin) || /\b(severity|critical|high)\b/i.test(msg),
100
- mode: detectChatMode(msg),
101
- scenario,
102
- questionnaireStatus: questionnaire.status,
103
- fields: questionnaire.fields,
104
- historyCount: questionnaire.history.length,
105
- clarifyMaxRounds: budget.clarifyMaxRounds,
106
- };
107
- }
108
- export function buildClarifyContextMessage(questionnaire) {
109
- const panelReady = questionnaire.awaitingUserAnswer && questionnaire.pending?.questionMarkdown;
110
- return `[SCOPE GATE — internal only, never repeat to user]
111
- ${panelReady ? "Questionnaire panel is visible — do NOT ask user to look at the panel." : "Scope still missing — questionnaire auto-ask may run."}
112
- Read-only until scope ready. User-facing replies: max 2 sentences; no chain-of-thought.
113
- ${questionnaire.awaitingUserAnswer ? "Wait for panel answer or free text." : "Use questionnaire record if user already gave scope in prose."}`;
114
- }
115
- function extractQuestionText(markdown) {
116
- for (const line of markdown.split("\n")) {
117
- const trimmed = line.trim();
118
- if (trimmed && !/^[A-D]\)/.test(trimmed))
119
- return trimmed;
120
- }
121
- return markdown.split("\n")[0]?.trim() ?? "";
122
- }
123
- export function syncClarifyUi(questionnaire) {
124
- if (questionnaire.status === "ready") {
125
- setClarifyUiSnapshot({
126
- phase: "ready",
127
- progressLabel: null,
128
- questionMarkdown: null,
129
- questionText: null,
130
- optionLabels: [],
131
- selected: [],
132
- focusedIndex: 0,
133
- });
134
- return;
135
- }
136
- if (!questionnaire.awaitingUserAnswer || !questionnaire.pending?.questionMarkdown) {
137
- setClarifyUiSnapshot({
138
- phase: "idle",
139
- progressLabel: null,
140
- questionMarkdown: null,
141
- questionText: null,
142
- optionLabels: [],
143
- selected: [],
144
- focusedIndex: 0,
145
- });
146
- return;
147
- }
148
- const pending = questionnaire.pending;
149
- setClarifyUiSnapshot({
150
- phase: "asking",
151
- progressLabel: buildClarifyProgressLabel(questionnaire),
152
- questionMarkdown: pending.questionMarkdown,
153
- questionText: extractQuestionText(pending.questionMarkdown),
154
- optionLabels: pending.optionLabels,
155
- selectionMode: pending.selectionMode ?? "single",
156
- selected: [],
157
- focusedIndex: 0,
158
- });
159
- }
160
- function applyDiscoveredScope(questionnaire, prompt, cwd) {
161
- const discovered = discoverScopeHints(cwd, prompt);
162
- if (!discovered.fields || Object.keys(discovered.fields).length === 0) {
163
- return questionnaire;
164
- }
165
- const result = executeQuestionnaireTool(questionnaire, {
166
- action: "record",
167
- scenario: discovered.scenario,
168
- fields: discovered.fields,
169
- });
170
- return result.questionnaire;
171
- }
172
- export function autoAskNextQuestion(questionnaire, prompt) {
173
- if (questionnaire.awaitingUserAnswer || questionnaire.status === "ready") {
174
- return questionnaire;
175
- }
176
- const scenario = questionnaire.scenario ?? inferScenarioFromMessage(prompt);
177
- const result = executeQuestionnaireTool(questionnaire, {
178
- action: "ask",
179
- scenario,
180
- });
181
- if (!result.ok)
182
- return questionnaire;
183
- return result.questionnaire;
184
- }
185
- function maybeMarkReady(questionnaire) {
186
- const scenario = questionnaire.scenario ?? "remediation";
187
- if (questionnaire.status === "collecting" &&
188
- !questionnaire.awaitingUserAnswer &&
189
- hasMinimumScopeForScenario(scenario, questionnaire.fields)) {
190
- return { ...questionnaire, status: "ready", pending: null };
191
- }
192
- return questionnaire;
193
- }
194
- export function updateClarifyStatus(ctx, questionnaire) {
195
- if (!ctx.hasUI)
196
- return;
197
- if (questionnaire.status === "ready") {
198
- ctx.ui.setStatus("kubbisec-clarify", undefined);
199
- return;
200
- }
201
- if (questionnaire.awaitingUserAnswer) {
202
- ctx.ui.setStatus("kubbisec-clarify", ctx.ui.theme.fg("warning", `questionário · ${questionnaire.status}`));
203
- return;
204
- }
205
- ctx.ui.setStatus("kubbisec-clarify", undefined);
206
- }
207
- export function processClarifyPrompt(questionnaire, prompt, cwd, clarifyMaxRounds) {
208
- let next = questionnaire;
209
- if (next.status === "collecting" && prompt.trim()) {
210
- const selectionMode = next.pending?.selectionMode ?? "single";
211
- const parsed = parseClarifyAnswer(prompt, selectionMode);
212
- if (shouldAcceptClarifyAnswer(next, parsed)) {
213
- next = applyParsedUserAnswerIfPending(next, parsed);
214
- next = finalizeQuestionnaireAtRoundLimit(next, clarifyMaxRounds);
215
- next = maybeMarkReady(next);
216
- }
217
- }
218
- next = applyDiscoveredScope(next, prompt, cwd);
219
- next = maybeMarkReady(next);
220
- return next;
221
- }
222
- export default function kubbisecClarify(api) {
223
- const sessionId = randomUUID();
224
- let questionnaire = readSessionQuestionnaire(process.cwd(), sessionId);
225
- let gateActive = false;
226
- let clarifyWidgetRegistered = false;
227
- let lastUserMessage = "";
228
- let sessionCwd = process.cwd();
229
- function persist(ctx, next) {
230
- questionnaire = next;
231
- try {
232
- writeSessionQuestionnaire(ctx.cwd, next);
233
- }
234
- catch (error) {
235
- console.warn("[kubbisec-clarify] Failed to persist session questionnaire:", error);
236
- }
237
- updateClarifyStatus(ctx, next);
238
- syncClarifyUi(next);
239
- }
240
- function ensureClarifyWidget(ctx) {
241
- if (!ctx.hasUI || clarifyWidgetRegistered)
242
- return;
243
- clarifyWidgetRegistered = true;
244
- ctx.ui.setWidget("kubbisec-clarify-panel", (tui, theme) => {
245
- setClarifyUiChangeListener(() => {
246
- tui.requestRender();
247
- });
248
- return {
249
- dispose() {
250
- setClarifyUiChangeListener(undefined);
251
- },
252
- invalidate() {
253
- tui.requestRender();
254
- },
255
- render(w) {
256
- return renderClarifySelectPanel(w, getClarifyUiSnapshot(), theme);
257
- },
258
- };
259
- }, { placement: "aboveEditor" });
260
- }
261
- api.registerTool({
262
- name: "questionnaire",
263
- label: "Scope questionnaire",
264
- description: "Format and track contextual scope questions (ask/record/status/complete). KubbiSec renders options in the panel above the editor.",
265
- parameters: questionnaireToolParametersSchema(),
266
- async execute(_toolCallId, params) {
267
- const input = params;
268
- const result = executeQuestionnaireTool(questionnaire, input, lastUserMessage);
269
- questionnaire = result.questionnaire;
270
- try {
271
- writeSessionQuestionnaire(sessionCwd, questionnaire);
272
- }
273
- catch {
274
- // best effort
275
- }
276
- syncClarifyUi(questionnaire);
277
- return {
278
- content: [{ type: "text", text: result.message }],
279
- details: { ok: result.ok, status: result.status, action: result.action },
280
- };
281
- },
282
- });
283
- api.on("session_start", async (_event, ctx) => {
284
- sessionCwd = ctx.cwd;
285
- questionnaire = readSessionQuestionnaire(ctx.cwd, sessionId);
286
- gateActive = false;
287
- setClarifyGateActive(false);
288
- lastUserMessage = "";
289
- resetClarifyUiSnapshot();
290
- ensureClarifyWidget(ctx);
291
- updateClarifyStatus(ctx, questionnaire);
292
- syncClarifyUi(questionnaire);
293
- });
294
- api.on("session_shutdown", async () => {
295
- resetClarifyUiSnapshot();
296
- setClarifyGateActive(false);
297
- });
298
- api.on("before_agent_start", async (event, ctx) => {
299
- const { prompt } = event;
300
- lastUserMessage = prompt;
301
- const surface = resolveSurface();
302
- ensureClarifyWidget(ctx);
303
- if (surface !== "chat") {
304
- gateActive = false;
305
- setClarifyGateActive(false);
306
- resetClarifyUiSnapshot();
307
- return undefined;
308
- }
309
- const budget = resolveResourceBudget();
310
- let next = readSessionQuestionnaire(ctx.cwd, questionnaire.sessionId);
311
- next = processClarifyPrompt(next, prompt, ctx.cwd, budget.clarifyMaxRounds);
312
- const gateInput = buildGateInput(prompt, next);
313
- gateActive = shouldClarify(gateInput);
314
- setClarifyGateActive(gateActive);
315
- if (!gateActive) {
316
- next = maybeMarkReady(next);
317
- persist(ctx, next);
318
- return undefined;
319
- }
320
- if (next.status === "collecting" && !next.awaitingUserAnswer) {
321
- next = autoAskNextQuestion(next, prompt);
322
- next = maybeMarkReady(next);
323
- persist(ctx, next);
324
- if (next.awaitingUserAnswer) {
325
- return {
326
- message: {
327
- customType: "kubbisec-clarify",
328
- content: buildClarifyContextMessage(next),
329
- display: false,
330
- },
331
- };
332
- }
333
- return {
334
- message: {
335
- customType: "kubbisec-clarify",
336
- content: buildClarifyContextMessage(next),
337
- display: false,
338
- },
339
- };
340
- }
341
- persist(ctx, next);
342
- return undefined;
343
- });
344
- api.on("tool_call", async (event, ctx) => {
345
- const surface = resolveSurface();
346
- if (surface !== "chat") {
347
- return undefined;
348
- }
349
- questionnaire = readSessionQuestionnaire(ctx.cwd, questionnaire.sessionId);
350
- const { toolName } = event;
351
- if (toolName === "questionnaire") {
352
- return undefined;
353
- }
354
- if (!shouldBlockClarifyTool(toolName, gateActive, questionnaire)) {
355
- return undefined;
356
- }
357
- return {
358
- block: true,
359
- reason: CLARIFY_TOOL_BLOCK_REASON,
360
- };
361
- });
362
- }
363
- //# sourceMappingURL=kubbisec-clarify.extension.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"kubbisec-clarify.extension.js","sourceRoot":"","sources":["../../src/extensions/kubbisec-clarify.extension.ts"],"names":[],"mappings":"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"}
@@ -1,2 +0,0 @@
1
- export {};
2
- //# sourceMappingURL=redaction.test.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"redaction.test.d.ts","sourceRoot":"","sources":["../src/redaction.test.ts"],"names":[],"mappings":""}
@@ -1,626 +0,0 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });
3
- const vitest_1 = require("vitest");
4
- const redaction_1 = require("./redaction");
5
- // ---------------------------------------------------------------------------
6
- // Helpers
7
- // ---------------------------------------------------------------------------
8
- function makeReport(overrides = {}) {
9
- return {
10
- source: "GITLEAKS",
11
- scanType: "secrets",
12
- target: "repo",
13
- metadata: {},
14
- vulnerabilities: [],
15
- ...overrides,
16
- };
17
- }
18
- function makeVuln(rawData = {}) {
19
- return {
20
- title: "test",
21
- rawData,
22
- };
23
- }
24
- // ---------------------------------------------------------------------------
25
- // Gitleaks rawData
26
- // ---------------------------------------------------------------------------
27
- (0, vitest_1.describe)("sanitizeReportPayload — Gitleaks rawData", () => {
28
- (0, vitest_1.it)("redacts GitHub PAT (ghp_ prefix)", () => {
29
- const report = makeReport({
30
- vulnerabilities: [
31
- makeVuln({
32
- RuleID: "github-pat",
33
- Secret: "ghp_1234567890abcdefghijklmnopqrst",
34
- File: "config.yml",
35
- }),
36
- ],
37
- });
38
- const sanitized = (0, redaction_1.sanitizeReportPayload)(report);
39
- (0, vitest_1.expect)(sanitized.vulnerabilities[0].rawData.Secret).toBe(redaction_1.REDACTED_VALUE);
40
- (0, vitest_1.expect)(sanitized.vulnerabilities[0].rawData.RuleID).toBe("github-pat");
41
- (0, vitest_1.expect)(sanitized.vulnerabilities[0].rawData.File).toBe("config.yml");
42
- });
43
- (0, vitest_1.it)("redacts GitHub PAT variants (gho_, ghu_, ghs_, ghr_)", () => {
44
- for (const prefix of ["gho_", "ghu_", "ghs_", "ghr_"]) {
45
- const pat = `${prefix}1234567890abcdefghijklmnopqrst`;
46
- const report = makeReport({
47
- vulnerabilities: [makeVuln({ Secret: pat })],
48
- });
49
- const sanitized = (0, redaction_1.sanitizeReportPayload)(report);
50
- (0, vitest_1.expect)(sanitized.vulnerabilities[0].rawData.Secret).toBe(redaction_1.REDACTED_VALUE);
51
- }
52
- });
53
- (0, vitest_1.it)("redacts AWS access key (AKIA prefix)", () => {
54
- const report = makeReport({
55
- vulnerabilities: [
56
- makeVuln({
57
- Secret: "AKIAIOSFODNN7EXAMPLE",
58
- RuleID: "aws-access-key",
59
- }),
60
- ],
61
- });
62
- const sanitized = (0, redaction_1.sanitizeReportPayload)(report);
63
- (0, vitest_1.expect)(sanitized.vulnerabilities[0].rawData.Secret).toBe(redaction_1.REDACTED_VALUE);
64
- });
65
- (0, vitest_1.it)("redacts AWS temporary key (ASIA prefix)", () => {
66
- const report = makeReport({
67
- vulnerabilities: [
68
- makeVuln({ Secret: "ASIAIOSFODNN7EXAMPLE" }),
69
- ],
70
- });
71
- const sanitized = (0, redaction_1.sanitizeReportPayload)(report);
72
- (0, vitest_1.expect)(sanitized.vulnerabilities[0].rawData.Secret).toBe(redaction_1.REDACTED_VALUE);
73
- });
74
- (0, vitest_1.it)("redacts generic secret key", () => {
75
- const report = makeReport({
76
- vulnerabilities: [
77
- makeVuln({
78
- Secret: "my-super-secret-value",
79
- RuleID: "generic-api-key",
80
- }),
81
- ],
82
- });
83
- const sanitized = (0, redaction_1.sanitizeReportPayload)(report);
84
- (0, vitest_1.expect)(sanitized.vulnerabilities[0].rawData.Secret).toBe(redaction_1.REDACTED_VALUE);
85
- });
86
- (0, vitest_1.it)("redacts Match field (exact sensitive key)", () => {
87
- const report = makeReport({
88
- vulnerabilities: [
89
- makeVuln({
90
- Match: "GH_TOKEN=ghp_abc123def456ghi789jkl",
91
- RuleID: "github-pat",
92
- }),
93
- ],
94
- });
95
- const sanitized = (0, redaction_1.sanitizeReportPayload)(report);
96
- (0, vitest_1.expect)(sanitized.vulnerabilities[0].rawData.Match).toBe(redaction_1.REDACTED_VALUE);
97
- });
98
- (0, vitest_1.it)("preserves non-sensitive Gitleaks fields", () => {
99
- const report = makeReport({
100
- vulnerabilities: [
101
- makeVuln({
102
- RuleID: "rule-001",
103
- File: "src/config.ts",
104
- StartLine: 42,
105
- EndLine: 42,
106
- Entropy: 3.5,
107
- }),
108
- ],
109
- });
110
- const sanitized = (0, redaction_1.sanitizeReportPayload)(report);
111
- (0, vitest_1.expect)(sanitized.vulnerabilities[0].rawData.RuleID).toBe("rule-001");
112
- (0, vitest_1.expect)(sanitized.vulnerabilities[0].rawData.File).toBe("src/config.ts");
113
- (0, vitest_1.expect)(sanitized.vulnerabilities[0].rawData.StartLine).toBe(42);
114
- (0, vitest_1.expect)(sanitized.vulnerabilities[0].rawData.EndLine).toBe(42);
115
- (0, vitest_1.expect)(sanitized.vulnerabilities[0].rawData.Entropy).toBe(3.5);
116
- });
117
- });
118
- // ---------------------------------------------------------------------------
119
- // Trivy rawData
120
- // ---------------------------------------------------------------------------
121
- (0, vitest_1.describe)("sanitizeReportPayload — Trivy rawData", () => {
122
- (0, vitest_1.it)("redacts Bearer token in string values", () => {
123
- const report = makeReport({
124
- vulnerabilities: [
125
- makeVuln({
126
- detail: "Exposed: Bearer eyJhbGciOiJSUzI1NiIsInR5cCI6IkpXVCJ9.long.payload",
127
- pkgName: "app",
128
- }),
129
- ],
130
- });
131
- const sanitized = (0, redaction_1.sanitizeReportPayload)(report);
132
- (0, vitest_1.expect)(sanitized.vulnerabilities[0].rawData.detail).toBe("Exposed: Bearer [REDACTED]");
133
- });
134
- (0, vitest_1.it)("redacts Basic auth in string values", () => {
135
- const report = makeReport({
136
- vulnerabilities: [
137
- makeVuln({
138
- detail: "Auth header uses Basic dXNlcjpwYXNzd29yZA==",
139
- }),
140
- ],
141
- });
142
- const sanitized = (0, redaction_1.sanitizeReportPayload)(report);
143
- (0, vitest_1.expect)(sanitized.vulnerabilities[0].rawData.detail).toBe("Auth header uses Basic [REDACTED]");
144
- });
145
- (0, vitest_1.it)("redacts URLs with embedded credentials", () => {
146
- const report = makeReport({
147
- vulnerabilities: [
148
- makeVuln({
149
- detail: "Connection string: postgres://admin:s3cret@db.example.com:5432/mydb",
150
- }),
151
- ],
152
- });
153
- const sanitized = (0, redaction_1.sanitizeReportPayload)(report);
154
- (0, vitest_1.expect)(sanitized.vulnerabilities[0].rawData.detail).toBe("Connection string: postgres://[REDACTED]@db.example.com:5432/mydb");
155
- });
156
- (0, vitest_1.it)("redacts env-var-style secret patterns (KEY=VALUE)", () => {
157
- const report = makeReport({
158
- vulnerabilities: [
159
- makeVuln({
160
- lineContent: "export DATABASE_PASSWORD=supersecret123 && npm start",
161
- }),
162
- ],
163
- });
164
- const sanitized = (0, redaction_1.sanitizeReportPayload)(report);
165
- (0, vitest_1.expect)(sanitized.vulnerabilities[0].rawData.lineContent).toBe("export DATABASE_PASSWORD=[REDACTED] && npm start");
166
- });
167
- (0, vitest_1.it)("redacts nested sensitive objects in Trivy misconfig", () => {
168
- const report = makeReport({
169
- vulnerabilities: [
170
- makeVuln({
171
- misconfig: {
172
- config: {
173
- credentials: {
174
- accessKey: "AKIAIOSFODNN7EXAMPLE",
175
- secretKey: "wJalrXUtnFEMI/K7MDENG/bPxRfiCY",
176
- },
177
- },
178
- type: "kubernetes",
179
- },
180
- }),
181
- ],
182
- });
183
- const sanitized = (0, redaction_1.sanitizeReportPayload)(report);
184
- const misconfig = sanitized.vulnerabilities[0].rawData
185
- .misconfig;
186
- const config = misconfig.config;
187
- const creds = config.credentials;
188
- (0, vitest_1.expect)(creds.accessKey).toBe(redaction_1.REDACTED_VALUE);
189
- (0, vitest_1.expect)(creds.secretKey).toBe(redaction_1.REDACTED_VALUE);
190
- (0, vitest_1.expect)(misconfig.type).toBe("kubernetes");
191
- });
192
- });
193
- // ---------------------------------------------------------------------------
194
- // Metadata — headers and env vars
195
- // ---------------------------------------------------------------------------
196
- (0, vitest_1.describe)("sanitizeReportPayload — metadata headers", () => {
197
- (0, vitest_1.it)("redacts authorization header", () => {
198
- const report = makeReport({
199
- metadata: {
200
- headers: {
201
- authorization: "Bearer ghp_abc123",
202
- accept: "application/json",
203
- },
204
- },
205
- });
206
- const sanitized = (0, redaction_1.sanitizeReportPayload)(report);
207
- (0, vitest_1.expect)(sanitized.metadata.headers.authorization).toBe(redaction_1.REDACTED_VALUE);
208
- (0, vitest_1.expect)(sanitized.metadata.headers.accept).toBe("application/json");
209
- });
210
- (0, vitest_1.it)("redacts cookie header", () => {
211
- const report = makeReport({
212
- metadata: {
213
- headers: {
214
- cookie: "session=abc123; token=secret",
215
- },
216
- },
217
- });
218
- const sanitized = (0, redaction_1.sanitizeReportPayload)(report);
219
- (0, vitest_1.expect)(sanitized.metadata.headers.cookie).toBe(redaction_1.REDACTED_VALUE);
220
- });
221
- (0, vitest_1.it)("redacts x-api-key header", () => {
222
- const report = makeReport({
223
- metadata: {
224
- headers: {
225
- "x-api-key": "sk-live-12345",
226
- },
227
- },
228
- });
229
- const sanitized = (0, redaction_1.sanitizeReportPayload)(report);
230
- (0, vitest_1.expect)(sanitized.metadata.headers["x-api-key"]).toBe(redaction_1.REDACTED_VALUE);
231
- });
232
- (0, vitest_1.it)("redacts proxy-authorization header", () => {
233
- const report = makeReport({
234
- metadata: {
235
- headers: {
236
- "proxy-authorization": "Basic dXNlcjpwYXNz",
237
- },
238
- },
239
- });
240
- const sanitized = (0, redaction_1.sanitizeReportPayload)(report);
241
- (0, vitest_1.expect)(sanitized.metadata.headers["proxy-authorization"]).toBe(redaction_1.REDACTED_VALUE);
242
- });
243
- (0, vitest_1.it)("redacts set-cookie header", () => {
244
- const report = makeReport({
245
- metadata: {
246
- headers: {
247
- "set-cookie": "id=abc; HttpOnly",
248
- },
249
- },
250
- });
251
- const sanitized = (0, redaction_1.sanitizeReportPayload)(report);
252
- (0, vitest_1.expect)(sanitized.metadata.headers["set-cookie"]).toBe(redaction_1.REDACTED_VALUE);
253
- });
254
- (0, vitest_1.it)("preserves non-sensitive headers", () => {
255
- const report = makeReport({
256
- metadata: {
257
- headers: {
258
- "content-type": "application/json",
259
- accept: "text/html",
260
- "user-agent": "curl/7.88",
261
- },
262
- },
263
- });
264
- const sanitized = (0, redaction_1.sanitizeReportPayload)(report);
265
- (0, vitest_1.expect)(sanitized.metadata.headers["content-type"]).toBe("application/json");
266
- (0, vitest_1.expect)(sanitized.metadata.headers.accept).toBe("text/html");
267
- (0, vitest_1.expect)(sanitized.metadata.headers["user-agent"]).toBe("curl/7.88");
268
- });
269
- });
270
- (0, vitest_1.describe)("sanitizeReportPayload — metadata env vars", () => {
271
- (0, vitest_1.it)("redacts GITHUB_TOKEN", () => {
272
- const report = makeReport({
273
- metadata: {
274
- env: {
275
- GITHUB_TOKEN: "ghp_abc123",
276
- NODE_ENV: "production",
277
- },
278
- },
279
- });
280
- const sanitized = (0, redaction_1.sanitizeReportPayload)(report);
281
- (0, vitest_1.expect)(sanitized.metadata.env.GITHUB_TOKEN).toBe(redaction_1.REDACTED_VALUE);
282
- (0, vitest_1.expect)(sanitized.metadata.env.NODE_ENV).toBe("production");
283
- });
284
- (0, vitest_1.it)("redacts AWS_SECRET_ACCESS_KEY", () => {
285
- const report = makeReport({
286
- metadata: {
287
- env: {
288
- AWS_SECRET_ACCESS_KEY: "wJalrXUtnFEMI/K7MDENG",
289
- },
290
- },
291
- });
292
- const sanitized = (0, redaction_1.sanitizeReportPayload)(report);
293
- (0, vitest_1.expect)(sanitized.metadata.env.AWS_SECRET_ACCESS_KEY).toBe(redaction_1.REDACTED_VALUE);
294
- });
295
- (0, vitest_1.it)("redacts DATABASE_URL with embedded password", () => {
296
- const report = makeReport({
297
- metadata: {
298
- env: {
299
- DATABASE_URL: "postgres://admin:s3cret@db:5432/mydb",
300
- },
301
- },
302
- });
303
- const sanitized = (0, redaction_1.sanitizeReportPayload)(report);
304
- (0, vitest_1.expect)(sanitized.metadata.env.DATABASE_URL).toBe("postgres://[REDACTED]@db:5432/mydb");
305
- });
306
- (0, vitest_1.it)("redacts any key containing 'token' in env", () => {
307
- const report = makeReport({
308
- metadata: {
309
- env: {
310
- MY_CUSTOM_TOKEN: "some-value",
311
- SAFE_VAR: "ok",
312
- },
313
- },
314
- });
315
- const sanitized = (0, redaction_1.sanitizeReportPayload)(report);
316
- (0, vitest_1.expect)(sanitized.metadata.env.MY_CUSTOM_TOKEN).toBe(redaction_1.REDACTED_VALUE);
317
- (0, vitest_1.expect)(sanitized.metadata.env.SAFE_VAR).toBe("ok");
318
- });
319
- (0, vitest_1.it)("redacts any key containing 'secret' in env", () => {
320
- const report = makeReport({
321
- metadata: {
322
- env: {
323
- JWT_SECRET: "my-jwt-secret",
324
- },
325
- },
326
- });
327
- const sanitized = (0, redaction_1.sanitizeReportPayload)(report);
328
- (0, vitest_1.expect)(sanitized.metadata.env.JWT_SECRET).toBe(redaction_1.REDACTED_VALUE);
329
- });
330
- (0, vitest_1.it)("redacts any key containing 'password' in env", () => {
331
- const report = makeReport({
332
- metadata: {
333
- env: {
334
- DB_PASSWORD: "p4ssw0rd",
335
- },
336
- },
337
- });
338
- const sanitized = (0, redaction_1.sanitizeReportPayload)(report);
339
- (0, vitest_1.expect)(sanitized.metadata.env.DB_PASSWORD).toBe(redaction_1.REDACTED_VALUE);
340
- });
341
- });
342
- // ---------------------------------------------------------------------------
343
- // secretHash and fingerprint preservation
344
- // ---------------------------------------------------------------------------
345
- (0, vitest_1.describe)("sanitizeReportPayload — secretHash and fingerprint preserved", () => {
346
- (0, vitest_1.it)("preserves secretHash in rawData", () => {
347
- const report = makeReport({
348
- vulnerabilities: [
349
- makeVuln({
350
- Secret: "ghp_abc123def456",
351
- secretHash: "sha256:e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855",
352
- }),
353
- ],
354
- });
355
- const sanitized = (0, redaction_1.sanitizeReportPayload)(report);
356
- (0, vitest_1.expect)(sanitized.vulnerabilities[0].rawData.Secret).toBe(redaction_1.REDACTED_VALUE);
357
- (0, vitest_1.expect)(sanitized.vulnerabilities[0].rawData.secretHash).toBe("sha256:e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855");
358
- });
359
- (0, vitest_1.it)("preserves fingerprint in rawData", () => {
360
- const report = makeReport({
361
- vulnerabilities: [
362
- makeVuln({
363
- fingerprint: "abc123def456abc123def456abc123def456abc123def456abc123def456ab12",
364
- Secret: "a-real-secret",
365
- }),
366
- ],
367
- });
368
- const sanitized = (0, redaction_1.sanitizeReportPayload)(report);
369
- (0, vitest_1.expect)(sanitized.vulnerabilities[0].rawData.Secret).toBe(redaction_1.REDACTED_VALUE);
370
- (0, vitest_1.expect)(sanitized.vulnerabilities[0].rawData.fingerprint).toBe("abc123def456abc123def456abc123def456abc123def456abc123def456ab12");
371
- });
372
- (0, vitest_1.it)("preserves SecretHash (mixed case)", () => {
373
- const report = makeReport({
374
- vulnerabilities: [
375
- makeVuln({
376
- SecretHash: "sha256:abcdef123456",
377
- }),
378
- ],
379
- });
380
- const sanitized = (0, redaction_1.sanitizeReportPayload)(report);
381
- (0, vitest_1.expect)(sanitized.vulnerabilities[0].rawData.SecretHash).toBe("sha256:abcdef123456");
382
- });
383
- (0, vitest_1.it)("preserves FINGERPRINT (uppercase)", () => {
384
- const report = makeReport({
385
- vulnerabilities: [
386
- makeVuln({
387
- FINGERPRINT: "fp-001-abc-def",
388
- }),
389
- ],
390
- });
391
- const sanitized = (0, redaction_1.sanitizeReportPayload)(report);
392
- (0, vitest_1.expect)(sanitized.vulnerabilities[0].rawData.FINGERPRINT).toBe("fp-001-abc-def");
393
- });
394
- });
395
- // ---------------------------------------------------------------------------
396
- // Redaction options
397
- // ---------------------------------------------------------------------------
398
- (0, vitest_1.describe)("sanitizeReportPayload — options", () => {
399
- (0, vitest_1.it)("skips metadata redaction when redactMetadata=false", () => {
400
- const report = makeReport({
401
- metadata: {
402
- env: {
403
- SECRET_KEY: "should-not-be-redacted",
404
- },
405
- },
406
- vulnerabilities: [makeVuln({ Secret: "ghp_abc123" })],
407
- });
408
- const sanitized = (0, redaction_1.sanitizeReportPayload)(report, {
409
- redactMetadata: false,
410
- });
411
- // metadata NOT redacted
412
- (0, vitest_1.expect)(sanitized.metadata.env.SECRET_KEY).toBe("should-not-be-redacted");
413
- // rawData still redacted
414
- (0, vitest_1.expect)(sanitized.vulnerabilities[0].rawData.Secret).toBe(redaction_1.REDACTED_VALUE);
415
- });
416
- (0, vitest_1.it)("skips rawData redaction when redactRawData=false", () => {
417
- const report = makeReport({
418
- metadata: {
419
- env: {
420
- GITHUB_TOKEN: "ghp_abc123",
421
- },
422
- },
423
- vulnerabilities: [makeVuln({ Secret: "ghp_abc123def456" })],
424
- });
425
- const sanitized = (0, redaction_1.sanitizeReportPayload)(report, {
426
- redactRawData: false,
427
- });
428
- // metadata still redacted
429
- (0, vitest_1.expect)(sanitized.metadata.env.GITHUB_TOKEN).toBe(redaction_1.REDACTED_VALUE);
430
- // rawData NOT redacted
431
- (0, vitest_1.expect)(sanitized.vulnerabilities[0].rawData.Secret).toBe("ghp_abc123def456");
432
- });
433
- (0, vitest_1.it)("skips both when both options are false", () => {
434
- const report = makeReport({
435
- metadata: {
436
- env: { API_KEY: "keep-it" },
437
- },
438
- vulnerabilities: [makeVuln({ Secret: "keep-it-too" })],
439
- });
440
- const sanitized = (0, redaction_1.sanitizeReportPayload)(report, {
441
- redactRawData: false,
442
- redactMetadata: false,
443
- });
444
- (0, vitest_1.expect)(sanitized.metadata.env.API_KEY).toBe("keep-it");
445
- (0, vitest_1.expect)(sanitized.vulnerabilities[0].rawData.Secret).toBe("keep-it-too");
446
- });
447
- (0, vitest_1.it)("defaults to redacting everything", () => {
448
- const report = makeReport({
449
- metadata: { env: { TOKEN: "redact-me" } },
450
- vulnerabilities: [makeVuln({ Secret: "redact-me-too" })],
451
- });
452
- const sanitized = (0, redaction_1.sanitizeReportPayload)(report);
453
- (0, vitest_1.expect)(sanitized.metadata.env.TOKEN).toBe(redaction_1.REDACTED_VALUE);
454
- (0, vitest_1.expect)(sanitized.vulnerabilities[0].rawData.Secret).toBe(redaction_1.REDACTED_VALUE);
455
- });
456
- });
457
- // ---------------------------------------------------------------------------
458
- // Edge cases
459
- // ---------------------------------------------------------------------------
460
- (0, vitest_1.describe)("sanitizeReportPayload — edge cases", () => {
461
- (0, vitest_1.it)("handles report with no metadata and no vulnerabilities", () => {
462
- const report = makeReport();
463
- delete report.metadata;
464
- delete report.vulnerabilities;
465
- const sanitized = (0, redaction_1.sanitizeReportPayload)(report);
466
- (0, vitest_1.expect)(sanitized.source).toBe("GITLEAKS");
467
- (0, vitest_1.expect)(sanitized).not.toHaveProperty("metadata");
468
- (0, vitest_1.expect)(sanitized).not.toHaveProperty("vulnerabilities");
469
- });
470
- (0, vitest_1.it)("handles empty metadata and empty vulnerabilities", () => {
471
- const report = makeReport({
472
- metadata: {},
473
- vulnerabilities: [],
474
- });
475
- const sanitized = (0, redaction_1.sanitizeReportPayload)(report);
476
- (0, vitest_1.expect)(sanitized.metadata).toEqual({});
477
- (0, vitest_1.expect)(sanitized.vulnerabilities).toEqual([]);
478
- });
479
- (0, vitest_1.it)("handles vulnerability with no rawData", () => {
480
- const report = makeReport({
481
- vulnerabilities: [{ title: "no-raw-data" }],
482
- });
483
- const sanitized = (0, redaction_1.sanitizeReportPayload)(report);
484
- (0, vitest_1.expect)(sanitized.vulnerabilities[0].title).toBe("no-raw-data");
485
- (0, vitest_1.expect)(sanitized.vulnerabilities[0]).not.toHaveProperty("rawData");
486
- });
487
- (0, vitest_1.it)("handles null and undefined values in rawData", () => {
488
- const report = makeReport({
489
- vulnerabilities: [
490
- makeVuln({
491
- key1: null,
492
- key2: undefined,
493
- key3: "safe-value",
494
- Secret: "redact-me",
495
- }),
496
- ],
497
- });
498
- const sanitized = (0, redaction_1.sanitizeReportPayload)(report);
499
- (0, vitest_1.expect)(sanitized.vulnerabilities[0].rawData.key1).toBeNull();
500
- (0, vitest_1.expect)(sanitized.vulnerabilities[0].rawData.key2).toBeUndefined();
501
- (0, vitest_1.expect)(sanitized.vulnerabilities[0].rawData.key3).toBe("safe-value");
502
- (0, vitest_1.expect)(sanitized.vulnerabilities[0].rawData.Secret).toBe(redaction_1.REDACTED_VALUE);
503
- });
504
- (0, vitest_1.it)("redacts secrets in arrays", () => {
505
- const report = makeReport({
506
- vulnerabilities: [
507
- makeVuln({
508
- tokens: ["ghp_abc123", "safe-public-id"],
509
- secrets: ["AKIAIOSFODNN7"],
510
- }),
511
- ],
512
- });
513
- const sanitized = (0, redaction_1.sanitizeReportPayload)(report);
514
- // Bearer/GitHub patterns are redacted at string level
515
- (0, vitest_1.expect)(sanitized.vulnerabilities[0].rawData.tokens).toEqual([
516
- redaction_1.REDACTED_VALUE,
517
- "safe-public-id",
518
- ]);
519
- // "secrets" key is sensitive so entire value is REDACTED
520
- (0, vitest_1.expect)(sanitized.vulnerabilities[0].rawData.secrets).toBe(redaction_1.REDACTED_VALUE);
521
- });
522
- (0, vitest_1.it)("redacts at max depth", () => {
523
- // Build a deeply nested object with a secret at level 25
524
- let nested = { Secret: "deep-secret" };
525
- for (let i = 0; i < 24; i++) {
526
- nested = { level: nested };
527
- }
528
- const report = makeReport({
529
- vulnerabilities: [makeVuln({ deep: nested })],
530
- });
531
- const sanitized = (0, redaction_1.sanitizeReportPayload)(report);
532
- // At depth >= 20, value is replaced with [REDACTED]
533
- const deep = sanitized.vulnerabilities[0].rawData.deep;
534
- let current = deep;
535
- for (let i = 0; i < 19; i++) {
536
- current = current.level;
537
- }
538
- (0, vitest_1.expect)(current).toBe(redaction_1.REDACTED_VALUE);
539
- });
540
- (0, vitest_1.it)("preserves report-level fields not named metadata/vulnerabilities", () => {
541
- const report = makeReport({
542
- source: "TRIVY",
543
- scanType: "vuln",
544
- target: "registry/app:latest",
545
- extraField: "preserve-me",
546
- });
547
- const sanitized = (0, redaction_1.sanitizeReportPayload)(report);
548
- (0, vitest_1.expect)(sanitized.source).toBe("TRIVY");
549
- (0, vitest_1.expect)(sanitized.scanType).toBe("vuln");
550
- (0, vitest_1.expect)(sanitized.target).toBe("registry/app:latest");
551
- (0, vitest_1.expect)(sanitized.extraField).toBe("preserve-me");
552
- });
553
- (0, vitest_1.it)("redacts env-var key=value pattern in non-env context", () => {
554
- const report = makeReport({
555
- vulnerabilities: [
556
- makeVuln({
557
- log: "Starting with SONAR_TOKEN=abc123def and DB_PASSWORD=p4ss",
558
- }),
559
- ],
560
- });
561
- const sanitized = (0, redaction_1.sanitizeReportPayload)(report);
562
- (0, vitest_1.expect)(sanitized.vulnerabilities[0].rawData.log).toBe("Starting with SONAR_TOKEN=[REDACTED] and DB_PASSWORD=[REDACTED]");
563
- });
564
- });
565
- // ---------------------------------------------------------------------------
566
- // redactSensitiveData (standalone)
567
- // ---------------------------------------------------------------------------
568
- (0, vitest_1.describe)("redactSensitiveData — standalone", () => {
569
- (0, vitest_1.it)("redacts top-level sensitive keys", () => {
570
- (0, vitest_1.expect)((0, redaction_1.redactSensitiveData)({ password: "pw123", name: "safe" })).toEqual({
571
- password: redaction_1.REDACTED_VALUE,
572
- name: "safe",
573
- });
574
- });
575
- (0, vitest_1.it)("redacts nested sensitive keys", () => {
576
- (0, vitest_1.expect)((0, redaction_1.redactSensitiveData)({
577
- config: { apiKey: "sk-123", host: "localhost" },
578
- })).toEqual({
579
- config: { apiKey: redaction_1.REDACTED_VALUE, host: "localhost" },
580
- });
581
- });
582
- (0, vitest_1.it)("redacts Bearer/Basic/auth patterns in string values", () => {
583
- (0, vitest_1.expect)((0, redaction_1.redactSensitiveData)({
584
- headerValue: "Bearer abc123def456ghi789",
585
- })).toEqual({
586
- headerValue: `Bearer ${redaction_1.REDACTED_VALUE}`,
587
- });
588
- });
589
- (0, vitest_1.it)("redacts GitHub PAT in any string value", () => {
590
- (0, vitest_1.expect)((0, redaction_1.redactSensitiveData)({
591
- log: "found token ghp_1234567890abcdefghijklmnopqrst here",
592
- })).toEqual({
593
- log: `found token ${redaction_1.REDACTED_VALUE} here`,
594
- });
595
- });
596
- (0, vitest_1.it)("redacts AWS key in any string value", () => {
597
- (0, vitest_1.expect)((0, redaction_1.redactSensitiveData)({
598
- output: "key is AKIAIOSFODNN7EXAMPLE exposed",
599
- })).toEqual({
600
- output: `key is ${redaction_1.REDACTED_VALUE} exposed`,
601
- });
602
- });
603
- (0, vitest_1.it)("redacts URL credentials", () => {
604
- (0, vitest_1.expect)((0, redaction_1.redactSensitiveData)({
605
- url: "https://user:pass@host/path",
606
- })).toEqual({
607
- url: `https://${redaction_1.REDACTED_VALUE}@host/path`,
608
- });
609
- });
610
- (0, vitest_1.it)("preserves secretHash and fingerprint as keys", () => {
611
- (0, vitest_1.expect)((0, redaction_1.redactSensitiveData)({
612
- secretHash: "sha256:abc123",
613
- fingerprint: "fp-001",
614
- })).toEqual({
615
- secretHash: "sha256:abc123",
616
- fingerprint: "fp-001",
617
- });
618
- });
619
- (0, vitest_1.it)("passes through primitives unchanged", () => {
620
- (0, vitest_1.expect)((0, redaction_1.redactSensitiveData)("plain string")).toBe("plain string");
621
- (0, vitest_1.expect)((0, redaction_1.redactSensitiveData)(42)).toBe(42);
622
- (0, vitest_1.expect)((0, redaction_1.redactSensitiveData)(true)).toBe(true);
623
- (0, vitest_1.expect)((0, redaction_1.redactSensitiveData)(null)).toBeNull();
624
- });
625
- });
626
- //# sourceMappingURL=redaction.test.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"redaction.test.js","sourceRoot":"","sources":["../src/redaction.test.ts"],"names":[],"mappings":";;AAAA,mCAA8C;AAC9C,2CAIqB;AAErB,8EAA8E;AAC9E,UAAU;AACV,8EAA8E;AAE9E,SAAS,UAAU,CAAC,YAAqC,EAAE;IACzD,OAAO;QACL,MAAM,EAAE,UAAU;QAClB,QAAQ,EAAE,SAAS;QACnB,MAAM,EAAE,MAAM;QACd,QAAQ,EAAE,EAAE;QACZ,eAAe,EAAE,EAAE;QACnB,GAAG,SAAS;KACb,CAAC;AACJ,CAAC;AAED,SAAS,QAAQ,CAAC,UAAmC,EAAE;IACrD,OAAO;QACL,KAAK,EAAE,MAAM;QACb,OAAO;KACR,CAAC;AACJ,CAAC;AAED,8EAA8E;AAC9E,mBAAmB;AACnB,8EAA8E;AAE9E,IAAA,iBAAQ,EAAC,0CAA0C,EAAE,GAAG,EAAE;IACxD,IAAA,WAAE,EAAC,kCAAkC,EAAE,GAAG,EAAE;QAC1C,MAAM,MAAM,GAAG,UAAU,CAAC;YACxB,eAAe,EAAE;gBACf,QAAQ,CAAC;oBACP,MAAM,EAAE,YAAY;oBACpB,MAAM,EAAE,oCAAoC;oBAC5C,IAAI,EAAE,YAAY;iBACnB,CAAC;aACH;SACF,CAAC,CAAC;QACH,MAAM,SAAS,GAAG,IAAA,iCAAqB,EAAC,MAAM,CAAC,CAAC;QAChD,IAAA,eAAM,EAAC,SAAS,CAAC,eAAgB,CAAC,CAAC,CAAC,CAAC,OAAQ,CAAC,MAAM,CAAC,CAAC,IAAI,CAAC,0BAAc,CAAC,CAAC;QAC3E,IAAA,eAAM,EAAC,SAAS,CAAC,eAAgB,CAAC,CAAC,CAAC,CAAC,OAAQ,CAAC,MAAM,CAAC,CAAC,IAAI,CAAC,YAAY,CAAC,CAAC;QACzE,IAAA,eAAM,EAAC,SAAS,CAAC,eAAgB,CAAC,CAAC,CAAC,CAAC,OAAQ,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,YAAY,CAAC,CAAC;IACzE,CAAC,CAAC,CAAC;IAEH,IAAA,WAAE,EAAC,sDAAsD,EAAE,GAAG,EAAE;QAC9D,KAAK,MAAM,MAAM,IAAI,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,CAAC,EAAE,CAAC;YACtD,MAAM,GAAG,GAAG,GAAG,MAAM,gCAAgC,CAAC;YACtD,MAAM,MAAM,GAAG,UAAU,CAAC;gBACxB,eAAe,EAAE,CAAC,QAAQ,CAAC,EAAE,MAAM,EAAE,GAAG,EAAE,CAAC,CAAC;aAC7C,CAAC,CAAC;YACH,MAAM,SAAS,GAAG,IAAA,iCAAqB,EAAC,MAAM,CAAC,CAAC;YAChD,IAAA,eAAM,EAAC,SAAS,CAAC,eAAgB,CAAC,CAAC,CAAC,CAAC,OAAQ,CAAC,MAAM,CAAC,CAAC,IAAI,CAAC,0BAAc,CAAC,CAAC;QAC7E,CAAC;IACH,CAAC,CAAC,CAAC;IAEH,IAAA,WAAE,EAAC,sCAAsC,EAAE,GAAG,EAAE;QAC9C,MAAM,MAAM,GAAG,UAAU,CAAC;YACxB,eAAe,EAAE;gBACf,QAAQ,CAAC;oBACP,MAAM,EAAE,sBAAsB;oBAC9B,MAAM,EAAE,gBAAgB;iBACzB,CAAC;aACH;SACF,CAAC,CAAC;QACH,MAAM,SAAS,GAAG,IAAA,iCAAqB,EAAC,MAAM,CAAC,CAAC;QAChD,IAAA,eAAM,EAAC,SAAS,CAAC,eAAgB,CAAC,CAAC,CAAC,CAAC,OAAQ,CAAC,MAAM,CAAC,CAAC,IAAI,CAAC,0BAAc,CAAC,CAAC;IAC7E,CAAC,CAAC,CAAC;IAEH,IAAA,WAAE,EAAC,yCAAyC,EAAE,GAAG,EAAE;QACjD,MAAM,MAAM,GAAG,UAAU,CAAC;YACxB,eAAe,EAAE;gBACf,QAAQ,CAAC,EAAE,MAAM,EAAE,sBAAsB,EAAE,CAAC;aAC7C;SACF,CAAC,CAAC;QACH,MAAM,SAAS,GAAG,IAAA,iCAAqB,EAAC,MAAM,CAAC,CAAC;QAChD,IAAA,eAAM,EAAC,SAAS,CAAC,eAAgB,CAAC,CAAC,CAAC,CAAC,OAAQ,CAAC,MAAM,CAAC,CAAC,IAAI,CAAC,0BAAc,CAAC,CAAC;IAC7E,CAAC,CAAC,CAAC;IAEH,IAAA,WAAE,EAAC,4BAA4B,EAAE,GAAG,EAAE;QACpC,MAAM,MAAM,GAAG,UAAU,CAAC;YACxB,eAAe,EAAE;gBACf,QAAQ,CAAC;oBACP,MAAM,EAAE,uBAAuB;oBAC/B,MAAM,EAAE,iBAAiB;iBAC1B,CAAC;aACH;SACF,CAAC,CAAC;QACH,MAAM,SAAS,GAAG,IAAA,iCAAqB,EAAC,MAAM,CAAC,CAAC;QAChD,IAAA,eAAM,EAAC,SAAS,CAAC,eAAgB,CAAC,CAAC,CAAC,CAAC,OAAQ,CAAC,MAAM,CAAC,CAAC,IAAI,CAAC,0BAAc,CAAC,CAAC;IAC7E,CAAC,CAAC,CAAC;IAEH,IAAA,WAAE,EAAC,2CAA2C,EAAE,GAAG,EAAE;QACnD,MAAM,MAAM,GAAG,UAAU,CAAC;YACxB,eAAe,EAAE;gBACf,QAAQ,CAAC;oBACP,KAAK,EAAE,oCAAoC;oBAC3C,MAAM,EAAE,YAAY;iBACrB,CAAC;aACH;SACF,CAAC,CAAC;QACH,MAAM,SAAS,GAAG,IAAA,iCAAqB,EAAC,MAAM,CAAC,CAAC;QAChD,IAAA,eAAM,EAAC,SAAS,CAAC,eAAgB,CAAC,CAAC,CAAC,CAAC,OAAQ,CAAC,KAAK,CAAC,CAAC,IAAI,CAAC,0BAAc,CAAC,CAAC;IAC5E,CAAC,CAAC,CAAC;IAEH,IAAA,WAAE,EAAC,yCAAyC,EAAE,GAAG,EAAE;QACjD,MAAM,MAAM,GAAG,UAAU,CAAC;YACxB,eAAe,EAAE;gBACf,QAAQ,CAAC;oBACP,MAAM,EAAE,UAAU;oBAClB,IAAI,EAAE,eAAe;oBACrB,SAAS,EAAE,EAAE;oBACb,OAAO,EAAE,EAAE;oBACX,OAAO,EAAE,GAAG;iBACb,CAAC;aACH;SACF,CAAC,CAAC;QACH,MAAM,SAAS,GAAG,IAAA,iCAAqB,EAAC,MAAM,CAAC,CAAC;QAChD,IAAA,eAAM,EAAC,SAAS,CAAC,eAAgB,CAAC,CAAC,CAAC,CAAC,OAAQ,CAAC,MAAM,CAAC,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC;QACvE,IAAA,eAAM,EAAC,SAAS,CAAC,eAAgB,CAAC,CAAC,CAAC,CAAC,OAAQ,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,eAAe,CAAC,CAAC;QAC1E,IAAA,eAAM,EAAC,SAAS,CAAC,eAAgB,CAAC,CAAC,CAAC,CAAC,OAAQ,CAAC,SAAS,CAAC,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;QAClE,IAAA,eAAM,EAAC,SAAS,CAAC,eAAgB,CAAC,CAAC,CAAC,CAAC,OAAQ,CAAC,OAAO,CAAC,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;QAChE,IAAA,eAAM,EAAC,SAAS,CAAC,eAAgB,CAAC,CAAC,CAAC,CAAC,OAAQ,CAAC,OAAO,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;IACnE,CAAC,CAAC,CAAC;AACL,CAAC,CAAC,CAAC;AAEH,8EAA8E;AAC9E,gBAAgB;AAChB,8EAA8E;AAE9E,IAAA,iBAAQ,EAAC,uCAAuC,EAAE,GAAG,EAAE;IACrD,IAAA,WAAE,EAAC,uCAAuC,EAAE,GAAG,EAAE;QAC/C,MAAM,MAAM,GAAG,UAAU,CAAC;YACxB,eAAe,EAAE;gBACf,QAAQ,CAAC;oBACP,MAAM,EAAE,mEAAmE;oBAC3E,OAAO,EAAE,KAAK;iBACf,CAAC;aACH;SACF,CAAC,CAAC;QACH,MAAM,SAAS,GAAG,IAAA,iCAAqB,EAAC,MAAM,CAAC,CAAC;QAChD,IAAA,eAAM,EAAC,SAAS,CAAC,eAAgB,CAAC,CAAC,CAAC,CAAC,OAAQ,CAAC,MAAM,CAAC,CAAC,IAAI,CACxD,4BAA4B,CAC7B,CAAC;IACJ,CAAC,CAAC,CAAC;IAEH,IAAA,WAAE,EAAC,qCAAqC,EAAE,GAAG,EAAE;QAC7C,MAAM,MAAM,GAAG,UAAU,CAAC;YACxB,eAAe,EAAE;gBACf,QAAQ,CAAC;oBACP,MAAM,EAAE,6CAA6C;iBACtD,CAAC;aACH;SACF,CAAC,CAAC;QACH,MAAM,SAAS,GAAG,IAAA,iCAAqB,EAAC,MAAM,CAAC,CAAC;QAChD,IAAA,eAAM,EAAC,SAAS,CAAC,eAAgB,CAAC,CAAC,CAAC,CAAC,OAAQ,CAAC,MAAM,CAAC,CAAC,IAAI,CACxD,mCAAmC,CACpC,CAAC;IACJ,CAAC,CAAC,CAAC;IAEH,IAAA,WAAE,EAAC,wCAAwC,EAAE,GAAG,EAAE;QAChD,MAAM,MAAM,GAAG,UAAU,CAAC;YACxB,eAAe,EAAE;gBACf,QAAQ,CAAC;oBACP,MAAM,EAAE,qEAAqE;iBAC9E,CAAC;aACH;SACF,CAAC,CAAC;QACH,MAAM,SAAS,GAAG,IAAA,iCAAqB,EAAC,MAAM,CAAC,CAAC;QAChD,IAAA,eAAM,EAAC,SAAS,CAAC,eAAgB,CAAC,CAAC,CAAC,CAAC,OAAQ,CAAC,MAAM,CAAC,CAAC,IAAI,CACxD,mEAAmE,CACpE,CAAC;IACJ,CAAC,CAAC,CAAC;IAEH,IAAA,WAAE,EAAC,mDAAmD,EAAE,GAAG,EAAE;QAC3D,MAAM,MAAM,GAAG,UAAU,CAAC;YACxB,eAAe,EAAE;gBACf,QAAQ,CAAC;oBACP,WAAW,EAAE,sDAAsD;iBACpE,CAAC;aACH;SACF,CAAC,CAAC;QACH,MAAM,SAAS,GAAG,IAAA,iCAAqB,EAAC,MAAM,CAAC,CAAC;QAChD,IAAA,eAAM,EAAC,SAAS,CAAC,eAAgB,CAAC,CAAC,CAAC,CAAC,OAAQ,CAAC,WAAW,CAAC,CAAC,IAAI,CAC7D,kDAAkD,CACnD,CAAC;IACJ,CAAC,CAAC,CAAC;IAEH,IAAA,WAAE,EAAC,qDAAqD,EAAE,GAAG,EAAE;QAC7D,MAAM,MAAM,GAAG,UAAU,CAAC;YACxB,eAAe,EAAE;gBACf,QAAQ,CAAC;oBACP,SAAS,EAAE;wBACT,MAAM,EAAE;4BACN,WAAW,EAAE;gCACX,SAAS,EAAE,sBAAsB;gCACjC,SAAS,EAAE,gCAAgC;6BAC5C;yBACF;wBACD,IAAI,EAAE,YAAY;qBACnB;iBACF,CAAC;aACH;SACF,CAAC,CAAC;QACH,MAAM,SAAS,GAAG,IAAA,iCAAqB,EAAC,MAAM,CAAC,CAAC;QAChD,MAAM,SAAS,GAAG,SAAS,CAAC,eAAgB,CAAC,CAAC,CAAC,CAAC,OAAQ;aACrD,SAAoC,CAAC;QACxC,MAAM,MAAM,GAAG,SAAS,CAAC,MAAiC,CAAC;QAC3D,MAAM,KAAK,GAAG,MAAM,CAAC,WAAsC,CAAC;QAC5D,IAAA,eAAM,EAAC,KAAK,CAAC,SAAS,CAAC,CAAC,IAAI,CAAC,0BAAc,CAAC,CAAC;QAC7C,IAAA,eAAM,EAAC,KAAK,CAAC,SAAS,CAAC,CAAC,IAAI,CAAC,0BAAc,CAAC,CAAC;QAC7C,IAAA,eAAM,EAAC,SAAS,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,YAAY,CAAC,CAAC;IAC5C,CAAC,CAAC,CAAC;AACL,CAAC,CAAC,CAAC;AAEH,8EAA8E;AAC9E,kCAAkC;AAClC,8EAA8E;AAE9E,IAAA,iBAAQ,EAAC,0CAA0C,EAAE,GAAG,EAAE;IACxD,IAAA,WAAE,EAAC,8BAA8B,EAAE,GAAG,EAAE;QACtC,MAAM,MAAM,GAAG,UAAU,CAAC;YACxB,QAAQ,EAAE;gBACR,OAAO,EAAE;oBACP,aAAa,EAAE,mBAAmB;oBAClC,MAAM,EAAE,kBAAkB;iBAC3B;aACF;SACF,CAAC,CAAC;QACH,MAAM,SAAS,GAAG,IAAA,iCAAqB,EAAC,MAAM,CAAC,CAAC;QAChD,IAAA,eAAM,EAAC,SAAS,CAAC,QAAS,CAAC,OAAO,CAAC,aAAa,CAAC,CAAC,IAAI,CAAC,0BAAc,CAAC,CAAC;QACvE,IAAA,eAAM,EAAC,SAAS,CAAC,QAAS,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC,IAAI,CAAC,kBAAkB,CAAC,CAAC;IACtE,CAAC,CAAC,CAAC;IAEH,IAAA,WAAE,EAAC,uBAAuB,EAAE,GAAG,EAAE;QAC/B,MAAM,MAAM,GAAG,UAAU,CAAC;YACxB,QAAQ,EAAE;gBACR,OAAO,EAAE;oBACP,MAAM,EAAE,8BAA8B;iBACvC;aACF;SACF,CAAC,CAAC;QACH,MAAM,SAAS,GAAG,IAAA,iCAAqB,EAAC,MAAM,CAAC,CAAC;QAChD,IAAA,eAAM,EAAC,SAAS,CAAC,QAAS,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC,IAAI,CAAC,0BAAc,CAAC,CAAC;IAClE,CAAC,CAAC,CAAC;IAEH,IAAA,WAAE,EAAC,0BAA0B,EAAE,GAAG,EAAE;QAClC,MAAM,MAAM,GAAG,UAAU,CAAC;YACxB,QAAQ,EAAE;gBACR,OAAO,EAAE;oBACP,WAAW,EAAE,eAAe;iBAC7B;aACF;SACF,CAAC,CAAC;QACH,MAAM,SAAS,GAAG,IAAA,iCAAqB,EAAC,MAAM,CAAC,CAAC;QAChD,IAAA,eAAM,EAAC,SAAS,CAAC,QAAS,CAAC,OAAO,CAAC,WAAW,CAAC,CAAC,CAAC,IAAI,CAAC,0BAAc,CAAC,CAAC;IACxE,CAAC,CAAC,CAAC;IAEH,IAAA,WAAE,EAAC,oCAAoC,EAAE,GAAG,EAAE;QAC5C,MAAM,MAAM,GAAG,UAAU,CAAC;YACxB,QAAQ,EAAE;gBACR,OAAO,EAAE;oBACP,qBAAqB,EAAE,oBAAoB;iBAC5C;aACF;SACF,CAAC,CAAC;QACH,MAAM,SAAS,GAAG,IAAA,iCAAqB,EAAC,MAAM,CAAC,CAAC;QAChD,IAAA,eAAM,EAAC,SAAS,CAAC,QAAS,CAAC,OAAO,CAAC,qBAAqB,CAAC,CAAC,CAAC,IAAI,CAAC,0BAAc,CAAC,CAAC;IAClF,CAAC,CAAC,CAAC;IAEH,IAAA,WAAE,EAAC,2BAA2B,EAAE,GAAG,EAAE;QACnC,MAAM,MAAM,GAAG,UAAU,CAAC;YACxB,QAAQ,EAAE;gBACR,OAAO,EAAE;oBACP,YAAY,EAAE,kBAAkB;iBACjC;aACF;SACF,CAAC,CAAC;QACH,MAAM,SAAS,GAAG,IAAA,iCAAqB,EAAC,MAAM,CAAC,CAAC;QAChD,IAAA,eAAM,EAAC,SAAS,CAAC,QAAS,CAAC,OAAO,CAAC,YAAY,CAAC,CAAC,CAAC,IAAI,CAAC,0BAAc,CAAC,CAAC;IACzE,CAAC,CAAC,CAAC;IAEH,IAAA,WAAE,EAAC,iCAAiC,EAAE,GAAG,EAAE;QACzC,MAAM,MAAM,GAAG,UAAU,CAAC;YACxB,QAAQ,EAAE;gBACR,OAAO,EAAE;oBACP,cAAc,EAAE,kBAAkB;oBAClC,MAAM,EAAE,WAAW;oBACnB,YAAY,EAAE,WAAW;iBAC1B;aACF;SACF,CAAC,CAAC;QACH,MAAM,SAAS,GAAG,IAAA,iCAAqB,EAAC,MAAM,CAAC,CAAC;QAChD,IAAA,eAAM,EAAC,SAAS,CAAC,QAAS,CAAC,OAAO,CAAC,cAAc,CAAC,CAAC,CAAC,IAAI,CAAC,kBAAkB,CAAC,CAAC;QAC7E,IAAA,eAAM,EAAC,SAAS,CAAC,QAAS,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC;QAC7D,IAAA,eAAM,EAAC,SAAS,CAAC,QAAS,CAAC,OAAO,CAAC,YAAY,CAAC,CAAC,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC;IACtE,CAAC,CAAC,CAAC;AACL,CAAC,CAAC,CAAC;AAEH,IAAA,iBAAQ,EAAC,2CAA2C,EAAE,GAAG,EAAE;IACzD,IAAA,WAAE,EAAC,sBAAsB,EAAE,GAAG,EAAE;QAC9B,MAAM,MAAM,GAAG,UAAU,CAAC;YACxB,QAAQ,EAAE;gBACR,GAAG,EAAE;oBACH,YAAY,EAAE,YAAY;oBAC1B,QAAQ,EAAE,YAAY;iBACvB;aACF;SACF,CAAC,CAAC;QACH,MAAM,SAAS,GAAG,IAAA,iCAAqB,EAAC,MAAM,CAAC,CAAC;QAChD,IAAA,eAAM,EAAC,SAAS,CAAC,QAAS,CAAC,GAAG,CAAC,YAAY,CAAC,CAAC,IAAI,CAAC,0BAAc,CAAC,CAAC;QAClE,IAAA,eAAM,EAAC,SAAS,CAAC,QAAS,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC,IAAI,CAAC,YAAY,CAAC,CAAC;IAC9D,CAAC,CAAC,CAAC;IAEH,IAAA,WAAE,EAAC,+BAA+B,EAAE,GAAG,EAAE;QACvC,MAAM,MAAM,GAAG,UAAU,CAAC;YACxB,QAAQ,EAAE;gBACR,GAAG,EAAE;oBACH,qBAAqB,EAAE,uBAAuB;iBAC/C;aACF;SACF,CAAC,CAAC;QACH,MAAM,SAAS,GAAG,IAAA,iCAAqB,EAAC,MAAM,CAAC,CAAC;QAChD,IAAA,eAAM,EAAC,SAAS,CAAC,QAAS,CAAC,GAAG,CAAC,qBAAqB,CAAC,CAAC,IAAI,CAAC,0BAAc,CAAC,CAAC;IAC7E,CAAC,CAAC,CAAC;IAEH,IAAA,WAAE,EAAC,6CAA6C,EAAE,GAAG,EAAE;QACrD,MAAM,MAAM,GAAG,UAAU,CAAC;YACxB,QAAQ,EAAE;gBACR,GAAG,EAAE;oBACH,YAAY,EAAE,sCAAsC;iBACrD;aACF;SACF,CAAC,CAAC;QACH,MAAM,SAAS,GAAG,IAAA,iCAAqB,EAAC,MAAM,CAAC,CAAC;QAChD,IAAA,eAAM,EAAC,SAAS,CAAC,QAAS,CAAC,GAAG,CAAC,YAAY,CAAC,CAAC,IAAI,CAC/C,oCAAoC,CACrC,CAAC;IACJ,CAAC,CAAC,CAAC;IAEH,IAAA,WAAE,EAAC,2CAA2C,EAAE,GAAG,EAAE;QACnD,MAAM,MAAM,GAAG,UAAU,CAAC;YACxB,QAAQ,EAAE;gBACR,GAAG,EAAE;oBACH,eAAe,EAAE,YAAY;oBAC7B,QAAQ,EAAE,IAAI;iBACf;aACF;SACF,CAAC,CAAC;QACH,MAAM,SAAS,GAAG,IAAA,iCAAqB,EAAC,MAAM,CAAC,CAAC;QAChD,IAAA,eAAM,EAAC,SAAS,CAAC,QAAS,CAAC,GAAG,CAAC,eAAe,CAAC,CAAC,IAAI,CAAC,0BAAc,CAAC,CAAC;QACrE,IAAA,eAAM,EAAC,SAAS,CAAC,QAAS,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;IACtD,CAAC,CAAC,CAAC;IAEH,IAAA,WAAE,EAAC,4CAA4C,EAAE,GAAG,EAAE;QACpD,MAAM,MAAM,GAAG,UAAU,CAAC;YACxB,QAAQ,EAAE;gBACR,GAAG,EAAE;oBACH,UAAU,EAAE,eAAe;iBAC5B;aACF;SACF,CAAC,CAAC;QACH,MAAM,SAAS,GAAG,IAAA,iCAAqB,EAAC,MAAM,CAAC,CAAC;QAChD,IAAA,eAAM,EAAC,SAAS,CAAC,QAAS,CAAC,GAAG,CAAC,UAAU,CAAC,CAAC,IAAI,CAAC,0BAAc,CAAC,CAAC;IAClE,CAAC,CAAC,CAAC;IAEH,IAAA,WAAE,EAAC,8CAA8C,EAAE,GAAG,EAAE;QACtD,MAAM,MAAM,GAAG,UAAU,CAAC;YACxB,QAAQ,EAAE;gBACR,GAAG,EAAE;oBACH,WAAW,EAAE,UAAU;iBACxB;aACF;SACF,CAAC,CAAC;QACH,MAAM,SAAS,GAAG,IAAA,iCAAqB,EAAC,MAAM,CAAC,CAAC;QAChD,IAAA,eAAM,EAAC,SAAS,CAAC,QAAS,CAAC,GAAG,CAAC,WAAW,CAAC,CAAC,IAAI,CAAC,0BAAc,CAAC,CAAC;IACnE,CAAC,CAAC,CAAC;AACL,CAAC,CAAC,CAAC;AAEH,8EAA8E;AAC9E,0CAA0C;AAC1C,8EAA8E;AAE9E,IAAA,iBAAQ,EAAC,8DAA8D,EAAE,GAAG,EAAE;IAC5E,IAAA,WAAE,EAAC,iCAAiC,EAAE,GAAG,EAAE;QACzC,MAAM,MAAM,GAAG,UAAU,CAAC;YACxB,eAAe,EAAE;gBACf,QAAQ,CAAC;oBACP,MAAM,EAAE,kBAAkB;oBAC1B,UAAU,EAAE,yEAAyE;iBACtF,CAAC;aACH;SACF,CAAC,CAAC;QACH,MAAM,SAAS,GAAG,IAAA,iCAAqB,EAAC,MAAM,CAAC,CAAC;QAChD,IAAA,eAAM,EAAC,SAAS,CAAC,eAAgB,CAAC,CAAC,CAAC,CAAC,OAAQ,CAAC,MAAM,CAAC,CAAC,IAAI,CAAC,0BAAc,CAAC,CAAC;QAC3E,IAAA,eAAM,EAAC,SAAS,CAAC,eAAgB,CAAC,CAAC,CAAC,CAAC,OAAQ,CAAC,UAAU,CAAC,CAAC,IAAI,CAC5D,yEAAyE,CAC1E,CAAC;IACJ,CAAC,CAAC,CAAC;IAEH,IAAA,WAAE,EAAC,kCAAkC,EAAE,GAAG,EAAE;QAC1C,MAAM,MAAM,GAAG,UAAU,CAAC;YACxB,eAAe,EAAE;gBACf,QAAQ,CAAC;oBACP,WAAW,EAAE,kEAAkE;oBAC/E,MAAM,EAAE,eAAe;iBACxB,CAAC;aACH;SACF,CAAC,CAAC;QACH,MAAM,SAAS,GAAG,IAAA,iCAAqB,EAAC,MAAM,CAAC,CAAC;QAChD,IAAA,eAAM,EAAC,SAAS,CAAC,eAAgB,CAAC,CAAC,CAAC,CAAC,OAAQ,CAAC,MAAM,CAAC,CAAC,IAAI,CAAC,0BAAc,CAAC,CAAC;QAC3E,IAAA,eAAM,EAAC,SAAS,CAAC,eAAgB,CAAC,CAAC,CAAC,CAAC,OAAQ,CAAC,WAAW,CAAC,CAAC,IAAI,CAC7D,kEAAkE,CACnE,CAAC;IACJ,CAAC,CAAC,CAAC;IAEH,IAAA,WAAE,EAAC,mCAAmC,EAAE,GAAG,EAAE;QAC3C,MAAM,MAAM,GAAG,UAAU,CAAC;YACxB,eAAe,EAAE;gBACf,QAAQ,CAAC;oBACP,UAAU,EAAE,qBAAqB;iBAClC,CAAC;aACH;SACF,CAAC,CAAC;QACH,MAAM,SAAS,GAAG,IAAA,iCAAqB,EAAC,MAAM,CAAC,CAAC;QAChD,IAAA,eAAM,EAAC,SAAS,CAAC,eAAgB,CAAC,CAAC,CAAC,CAAC,OAAQ,CAAC,UAAU,CAAC,CAAC,IAAI,CAC5D,qBAAqB,CACtB,CAAC;IACJ,CAAC,CAAC,CAAC;IAEH,IAAA,WAAE,EAAC,mCAAmC,EAAE,GAAG,EAAE;QAC3C,MAAM,MAAM,GAAG,UAAU,CAAC;YACxB,eAAe,EAAE;gBACf,QAAQ,CAAC;oBACP,WAAW,EAAE,gBAAgB;iBAC9B,CAAC;aACH;SACF,CAAC,CAAC;QACH,MAAM,SAAS,GAAG,IAAA,iCAAqB,EAAC,MAAM,CAAC,CAAC;QAChD,IAAA,eAAM,EAAC,SAAS,CAAC,eAAgB,CAAC,CAAC,CAAC,CAAC,OAAQ,CAAC,WAAW,CAAC,CAAC,IAAI,CAC7D,gBAAgB,CACjB,CAAC;IACJ,CAAC,CAAC,CAAC;AACL,CAAC,CAAC,CAAC;AAEH,8EAA8E;AAC9E,oBAAoB;AACpB,8EAA8E;AAE9E,IAAA,iBAAQ,EAAC,iCAAiC,EAAE,GAAG,EAAE;IAC/C,IAAA,WAAE,EAAC,oDAAoD,EAAE,GAAG,EAAE;QAC5D,MAAM,MAAM,GAAG,UAAU,CAAC;YACxB,QAAQ,EAAE;gBACR,GAAG,EAAE;oBACH,UAAU,EAAE,wBAAwB;iBACrC;aACF;YACD,eAAe,EAAE,CAAC,QAAQ,CAAC,EAAE,MAAM,EAAE,YAAY,EAAE,CAAC,CAAC;SACtD,CAAC,CAAC;QACH,MAAM,SAAS,GAAG,IAAA,iCAAqB,EAAC,MAAM,EAAE;YAC9C,cAAc,EAAE,KAAK;SACtB,CAAC,CAAC;QACH,wBAAwB;QACxB,IAAA,eAAM,EAAC,SAAS,CAAC,QAAS,CAAC,GAAG,CAAC,UAAU,CAAC,CAAC,IAAI,CAAC,wBAAwB,CAAC,CAAC;QAC1E,yBAAyB;QACzB,IAAA,eAAM,EAAC,SAAS,CAAC,eAAgB,CAAC,CAAC,CAAC,CAAC,OAAQ,CAAC,MAAM,CAAC,CAAC,IAAI,CAAC,0BAAc,CAAC,CAAC;IAC7E,CAAC,CAAC,CAAC;IAEH,IAAA,WAAE,EAAC,kDAAkD,EAAE,GAAG,EAAE;QAC1D,MAAM,MAAM,GAAG,UAAU,CAAC;YACxB,QAAQ,EAAE;gBACR,GAAG,EAAE;oBACH,YAAY,EAAE,YAAY;iBAC3B;aACF;YACD,eAAe,EAAE,CAAC,QAAQ,CAAC,EAAE,MAAM,EAAE,kBAAkB,EAAE,CAAC,CAAC;SAC5D,CAAC,CAAC;QACH,MAAM,SAAS,GAAG,IAAA,iCAAqB,EAAC,MAAM,EAAE;YAC9C,aAAa,EAAE,KAAK;SACrB,CAAC,CAAC;QACH,0BAA0B;QAC1B,IAAA,eAAM,EAAC,SAAS,CAAC,QAAS,CAAC,GAAG,CAAC,YAAY,CAAC,CAAC,IAAI,CAAC,0BAAc,CAAC,CAAC;QAClE,uBAAuB;QACvB,IAAA,eAAM,EAAC,SAAS,CAAC,eAAgB,CAAC,CAAC,CAAC,CAAC,OAAQ,CAAC,MAAM,CAAC,CAAC,IAAI,CACxD,kBAAkB,CACnB,CAAC;IACJ,CAAC,CAAC,CAAC;IAEH,IAAA,WAAE,EAAC,wCAAwC,EAAE,GAAG,EAAE;QAChD,MAAM,MAAM,GAAG,UAAU,CAAC;YACxB,QAAQ,EAAE;gBACR,GAAG,EAAE,EAAE,OAAO,EAAE,SAAS,EAAE;aAC5B;YACD,eAAe,EAAE,CAAC,QAAQ,CAAC,EAAE,MAAM,EAAE,aAAa,EAAE,CAAC,CAAC;SACvD,CAAC,CAAC;QACH,MAAM,SAAS,GAAG,IAAA,iCAAqB,EAAC,MAAM,EAAE;YAC9C,aAAa,EAAE,KAAK;YACpB,cAAc,EAAE,KAAK;SACtB,CAAC,CAAC;QACH,IAAA,eAAM,EAAC,SAAS,CAAC,QAAS,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC;QACxD,IAAA,eAAM,EAAC,SAAS,CAAC,eAAgB,CAAC,CAAC,CAAC,CAAC,OAAQ,CAAC,MAAM,CAAC,CAAC,IAAI,CAAC,aAAa,CAAC,CAAC;IAC5E,CAAC,CAAC,CAAC;IAEH,IAAA,WAAE,EAAC,kCAAkC,EAAE,GAAG,EAAE;QAC1C,MAAM,MAAM,GAAG,UAAU,CAAC;YACxB,QAAQ,EAAE,EAAE,GAAG,EAAE,EAAE,KAAK,EAAE,WAAW,EAAE,EAAE;YACzC,eAAe,EAAE,CAAC,QAAQ,CAAC,EAAE,MAAM,EAAE,eAAe,EAAE,CAAC,CAAC;SACzD,CAAC,CAAC;QACH,MAAM,SAAS,GAAG,IAAA,iCAAqB,EAAC,MAAM,CAAC,CAAC;QAChD,IAAA,eAAM,EAAC,SAAS,CAAC,QAAS,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC,IAAI,CAAC,0BAAc,CAAC,CAAC;QAC3D,IAAA,eAAM,EAAC,SAAS,CAAC,eAAgB,CAAC,CAAC,CAAC,CAAC,OAAQ,CAAC,MAAM,CAAC,CAAC,IAAI,CAAC,0BAAc,CAAC,CAAC;IAC7E,CAAC,CAAC,CAAC;AACL,CAAC,CAAC,CAAC;AAEH,8EAA8E;AAC9E,aAAa;AACb,8EAA8E;AAE9E,IAAA,iBAAQ,EAAC,oCAAoC,EAAE,GAAG,EAAE;IAClD,IAAA,WAAE,EAAC,wDAAwD,EAAE,GAAG,EAAE;QAChE,MAAM,MAAM,GAAG,UAAU,EAAE,CAAC;QAC5B,OAAQ,MAAkC,CAAC,QAAQ,CAAC;QACpD,OAAQ,MAAkC,CAAC,eAAe,CAAC;QAC3D,MAAM,SAAS,GAAG,IAAA,iCAAqB,EAAC,MAAM,CAAC,CAAC;QAChD,IAAA,eAAM,EAAC,SAAS,CAAC,MAAM,CAAC,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC;QAC1C,IAAA,eAAM,EAAC,SAAS,CAAC,CAAC,GAAG,CAAC,cAAc,CAAC,UAAU,CAAC,CAAC;QACjD,IAAA,eAAM,EAAC,SAAS,CAAC,CAAC,GAAG,CAAC,cAAc,CAAC,iBAAiB,CAAC,CAAC;IAC1D,CAAC,CAAC,CAAC;IAEH,IAAA,WAAE,EAAC,kDAAkD,EAAE,GAAG,EAAE;QAC1D,MAAM,MAAM,GAAG,UAAU,CAAC;YACxB,QAAQ,EAAE,EAAE;YACZ,eAAe,EAAE,EAAE;SACpB,CAAC,CAAC;QACH,MAAM,SAAS,GAAG,IAAA,iCAAqB,EAAC,MAAM,CAAC,CAAC;QAChD,IAAA,eAAM,EAAC,SAAS,CAAC,QAAQ,CAAC,CAAC,OAAO,CAAC,EAAE,CAAC,CAAC;QACvC,IAAA,eAAM,EAAC,SAAS,CAAC,eAAe,CAAC,CAAC,OAAO,CAAC,EAAE,CAAC,CAAC;IAChD,CAAC,CAAC,CAAC;IAEH,IAAA,WAAE,EAAC,uCAAuC,EAAE,GAAG,EAAE;QAC/C,MAAM,MAAM,GAAG,UAAU,CAAC;YACxB,eAAe,EAAE,CAAC,EAAE,KAAK,EAAE,aAAa,EAAE,CAAC;SAC5C,CAAC,CAAC;QACH,MAAM,SAAS,GAAG,IAAA,iCAAqB,EAAC,MAAM,CAAC,CAAC;QAChD,IAAA,eAAM,EAAC,SAAS,CAAC,eAAgB,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,IAAI,CAAC,aAAa,CAAC,CAAC;QAChE,IAAA,eAAM,EAAC,SAAS,CAAC,eAAgB,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,cAAc,CAAC,SAAS,CAAC,CAAC;IACtE,CAAC,CAAC,CAAC;IAEH,IAAA,WAAE,EAAC,8CAA8C,EAAE,GAAG,EAAE;QACtD,MAAM,MAAM,GAAG,UAAU,CAAC;YACxB,eAAe,EAAE;gBACf,QAAQ,CAAC;oBACP,IAAI,EAAE,IAAI;oBACV,IAAI,EAAE,SAAS;oBACf,IAAI,EAAE,YAAY;oBAClB,MAAM,EAAE,WAAW;iBACO,CAAC;aAC9B;SACF,CAAC,CAAC;QACH,MAAM,SAAS,GAAG,IAAA,iCAAqB,EAAC,MAAM,CAAC,CAAC;QAChD,IAAA,eAAM,EAAC,SAAS,CAAC,eAAgB,CAAC,CAAC,CAAC,CAAC,OAAQ,CAAC,IAAI,CAAC,CAAC,QAAQ,EAAE,CAAC;QAC/D,IAAA,eAAM,EAAC,SAAS,CAAC,eAAgB,CAAC,CAAC,CAAC,CAAC,OAAQ,CAAC,IAAI,CAAC,CAAC,aAAa,EAAE,CAAC;QACpE,IAAA,eAAM,EAAC,SAAS,CAAC,eAAgB,CAAC,CAAC,CAAC,CAAC,OAAQ,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,YAAY,CAAC,CAAC;QACvE,IAAA,eAAM,EAAC,SAAS,CAAC,eAAgB,CAAC,CAAC,CAAC,CAAC,OAAQ,CAAC,MAAM,CAAC,CAAC,IAAI,CAAC,0BAAc,CAAC,CAAC;IAC7E,CAAC,CAAC,CAAC;IAEH,IAAA,WAAE,EAAC,2BAA2B,EAAE,GAAG,EAAE;QACnC,MAAM,MAAM,GAAG,UAAU,CAAC;YACxB,eAAe,EAAE;gBACf,QAAQ,CAAC;oBACP,MAAM,EAAE,CAAC,YAAY,EAAE,gBAAgB,CAAC;oBACxC,OAAO,EAAE,CAAC,eAAe,CAAC;iBAC3B,CAAC;aACH;SACF,CAAC,CAAC;QACH,MAAM,SAAS,GAAG,IAAA,iCAAqB,EAAC,MAAM,CAAC,CAAC;QAChD,sDAAsD;QACtD,IAAA,eAAM,EAAC,SAAS,CAAC,eAAgB,CAAC,CAAC,CAAC,CAAC,OAAQ,CAAC,MAAM,CAAC,CAAC,OAAO,CAAC;YAC5D,0BAAc;YACd,gBAAgB;SACjB,CAAC,CAAC;QACH,yDAAyD;QACzD,IAAA,eAAM,EAAC,SAAS,CAAC,eAAgB,CAAC,CAAC,CAAC,CAAC,OAAQ,CAAC,OAAO,CAAC,CAAC,IAAI,CAAC,0BAAc,CAAC,CAAC;IAC9E,CAAC,CAAC,CAAC;IAEH,IAAA,WAAE,EAAC,sBAAsB,EAAE,GAAG,EAAE;QAC9B,yDAAyD;QACzD,IAAI,MAAM,GAA4B,EAAE,MAAM,EAAE,aAAa,EAAE,CAAC;QAChE,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,EAAE,EAAE,CAAC,EAAE,EAAE,CAAC;YAC5B,MAAM,GAAG,EAAE,KAAK,EAAE,MAAM,EAAE,CAAC;QAC7B,CAAC;QACD,MAAM,MAAM,GAAG,UAAU,CAAC;YACxB,eAAe,EAAE,CAAC,QAAQ,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,CAAC,CAAC;SAC9C,CAAC,CAAC;QACH,MAAM,SAAS,GAAG,IAAA,iCAAqB,EAAC,MAAM,CAAC,CAAC;QAChD,oDAAoD;QACpD,MAAM,IAAI,GAAG,SAAS,CAAC,eAAgB,CAAC,CAAC,CAAC,CAAC,OAAQ,CAAC,IAGnD,CAAC;QACF,IAAI,OAAO,GAAY,IAAI,CAAC;QAC5B,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,EAAE,EAAE,CAAC,EAAE,EAAE,CAAC;YAC5B,OAAO,GAAI,OAAmC,CAAC,KAAK,CAAC;QACvD,CAAC;QACD,IAAA,eAAM,EAAC,OAAO,CAAC,CAAC,IAAI,CAAC,0BAAc,CAAC,CAAC;IACvC,CAAC,CAAC,CAAC;IAEH,IAAA,WAAE,EAAC,kEAAkE,EAAE,GAAG,EAAE;QAC1E,MAAM,MAAM,GAAG,UAAU,CAAC;YACxB,MAAM,EAAE,OAAO;YACf,QAAQ,EAAE,MAAM;YAChB,MAAM,EAAE,qBAAqB;YAC7B,UAAU,EAAE,aAAa;SAC1B,CAAC,CAAC;QACH,MAAM,SAAS,GAAG,IAAA,iCAAqB,EAAC,MAAM,CAAC,CAAC;QAChD,IAAA,eAAM,EAAC,SAAS,CAAC,MAAM,CAAC,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;QACvC,IAAA,eAAM,EAAC,SAAS,CAAC,QAAQ,CAAC,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;QACxC,IAAA,eAAM,EAAC,SAAS,CAAC,MAAM,CAAC,CAAC,IAAI,CAAC,qBAAqB,CAAC,CAAC;QACrD,IAAA,eAAM,EAAC,SAAS,CAAC,UAAU,CAAC,CAAC,IAAI,CAAC,aAAa,CAAC,CAAC;IACnD,CAAC,CAAC,CAAC;IAEH,IAAA,WAAE,EAAC,sDAAsD,EAAE,GAAG,EAAE;QAC9D,MAAM,MAAM,GAAG,UAAU,CAAC;YACxB,eAAe,EAAE;gBACf,QAAQ,CAAC;oBACP,GAAG,EAAE,0DAA0D;iBAChE,CAAC;aACH;SACF,CAAC,CAAC;QACH,MAAM,SAAS,GAAG,IAAA,iCAAqB,EAAC,MAAM,CAAC,CAAC;QAChD,IAAA,eAAM,EAAC,SAAS,CAAC,eAAgB,CAAC,CAAC,CAAC,CAAC,OAAQ,CAAC,GAAG,CAAC,CAAC,IAAI,CACrD,iEAAiE,CAClE,CAAC;IACJ,CAAC,CAAC,CAAC;AACL,CAAC,CAAC,CAAC;AAEH,8EAA8E;AAC9E,mCAAmC;AACnC,8EAA8E;AAE9E,IAAA,iBAAQ,EAAC,kCAAkC,EAAE,GAAG,EAAE;IAChD,IAAA,WAAE,EAAC,kCAAkC,EAAE,GAAG,EAAE;QAC1C,IAAA,eAAM,EACJ,IAAA,+BAAmB,EAAC,EAAE,QAAQ,EAAE,OAAO,EAAE,IAAI,EAAE,MAAM,EAAE,CAAC,CACzD,CAAC,OAAO,CAAC;YACR,QAAQ,EAAE,0BAAc;YACxB,IAAI,EAAE,MAAM;SACb,CAAC,CAAC;IACL,CAAC,CAAC,CAAC;IAEH,IAAA,WAAE,EAAC,+BAA+B,EAAE,GAAG,EAAE;QACvC,IAAA,eAAM,EACJ,IAAA,+BAAmB,EAAC;YAClB,MAAM,EAAE,EAAE,MAAM,EAAE,QAAQ,EAAE,IAAI,EAAE,WAAW,EAAE;SAChD,CAAC,CACH,CAAC,OAAO,CAAC;YACR,MAAM,EAAE,EAAE,MAAM,EAAE,0BAAc,EAAE,IAAI,EAAE,WAAW,EAAE;SACtD,CAAC,CAAC;IACL,CAAC,CAAC,CAAC;IAEH,IAAA,WAAE,EAAC,qDAAqD,EAAE,GAAG,EAAE;QAC7D,IAAA,eAAM,EACJ,IAAA,+BAAmB,EAAC;YAClB,WAAW,EAAE,2BAA2B;SACzC,CAAC,CACH,CAAC,OAAO,CAAC;YACR,WAAW,EAAE,UAAU,0BAAc,EAAE;SACxC,CAAC,CAAC;IACL,CAAC,CAAC,CAAC;IAEH,IAAA,WAAE,EAAC,wCAAwC,EAAE,GAAG,EAAE;QAChD,IAAA,eAAM,EACJ,IAAA,+BAAmB,EAAC;YAClB,GAAG,EAAE,qDAAqD;SAC3D,CAAC,CACH,CAAC,OAAO,CAAC;YACR,GAAG,EAAE,eAAe,0BAAc,OAAO;SAC1C,CAAC,CAAC;IACL,CAAC,CAAC,CAAC;IAEH,IAAA,WAAE,EAAC,qCAAqC,EAAE,GAAG,EAAE;QAC7C,IAAA,eAAM,EACJ,IAAA,+BAAmB,EAAC;YAClB,MAAM,EAAE,qCAAqC;SAC9C,CAAC,CACH,CAAC,OAAO,CAAC;YACR,MAAM,EAAE,UAAU,0BAAc,UAAU;SAC3C,CAAC,CAAC;IACL,CAAC,CAAC,CAAC;IAEH,IAAA,WAAE,EAAC,yBAAyB,EAAE,GAAG,EAAE;QACjC,IAAA,eAAM,EACJ,IAAA,+BAAmB,EAAC;YAClB,GAAG,EAAE,6BAA6B;SACnC,CAAC,CACH,CAAC,OAAO,CAAC;YACR,GAAG,EAAE,WAAW,0BAAc,YAAY;SAC3C,CAAC,CAAC;IACL,CAAC,CAAC,CAAC;IAEH,IAAA,WAAE,EAAC,8CAA8C,EAAE,GAAG,EAAE;QACtD,IAAA,eAAM,EACJ,IAAA,+BAAmB,EAAC;YAClB,UAAU,EAAE,eAAe;YAC3B,WAAW,EAAE,QAAQ;SACtB,CAAC,CACH,CAAC,OAAO,CAAC;YACR,UAAU,EAAE,eAAe;YAC3B,WAAW,EAAE,QAAQ;SACtB,CAAC,CAAC;IACL,CAAC,CAAC,CAAC;IAEH,IAAA,WAAE,EAAC,qCAAqC,EAAE,GAAG,EAAE;QAC7C,IAAA,eAAM,EAAC,IAAA,+BAAmB,EAAC,cAAc,CAAC,CAAC,CAAC,IAAI,CAAC,cAAc,CAAC,CAAC;QACjE,IAAA,eAAM,EAAC,IAAA,+BAAmB,EAAC,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;QACzC,IAAA,eAAM,EAAC,IAAA,+BAAmB,EAAC,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QAC7C,IAAA,eAAM,EAAC,IAAA,+BAAmB,EAAC,IAAI,CAAC,CAAC,CAAC,QAAQ,EAAE,CAAC;IAC/C,CAAC,CAAC,CAAC;AACL,CAAC,CAAC,CAAC"}