@unbrained/pm-cli 2026.5.3 → 2026.5.4
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/CHANGELOG.md +48 -0
- package/README.md +9 -1
- package/dist/cli/main.js +269 -15
- package/dist/cli/main.js.map +1 -1
- package/dist/core/sentry/helpers.d.ts +15 -2
- package/dist/core/sentry/helpers.js +73 -3
- package/dist/core/sentry/helpers.js.map +1 -1
- package/dist/core/shared/constants.js +3 -0
- package/dist/core/shared/constants.js.map +1 -1
- package/dist/core/telemetry/observability.d.ts +24 -0
- package/dist/core/telemetry/observability.js +185 -0
- package/dist/core/telemetry/observability.js.map +1 -0
- package/dist/core/telemetry/runtime.d.ts +6 -0
- package/dist/core/telemetry/runtime.js +132 -7
- package/dist/core/telemetry/runtime.js.map +1 -1
- package/docs/CONFIGURATION.md +0 -2
- package/docs/RELEASING.md +43 -39
- package/package.json +6 -1
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"runtime.js","sourceRoot":"/","sources":["core/telemetry/runtime.ts"],"names":[],"mappings":"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","sourcesContent":["import crypto from \"node:crypto\";\nimport os from \"node:os\";\nimport path from \"node:path\";\nimport type { GlobalOptions } from \"../shared/command-types.js\";\nimport { appendLineAtomic, readFileIfExists, writeFileAtomic } from \"../fs/fs-utils.js\";\nimport { resolveTelemetryErrorCategory, type TelemetryErrorCategory } from \"../shared/constants.js\";\nimport { nowIso } from \"../shared/time.js\";\nimport { resolveGlobalPmRoot } from \"../store/paths.js\";\nimport { readSettings, writeSettings } from \"../store/settings.js\";\n\nconst TELEMETRY_QUEUE_RELATIVE_PATH = path.join(\"runtime\", \"telemetry\", \"events.jsonl\");\nconst TELEMETRY_STATE_RELATIVE_PATH = path.join(\"runtime\", \"telemetry\", \"state.json\");\nconst TELEMETRY_SCHEMA_VERSION = 1;\nconst TELEMETRY_FLUSH_BATCH_SIZE = 100;\nconst TELEMETRY_MAX_RETRY_DELAY_MS = 3_600_000;\nconst TELEMETRY_RETRY_BASE_DELAY_MS = 30_000;\nconst TELEMETRY_HTTP_TIMEOUT_MS = 5_000;\nconst MILLISECONDS_PER_DAY = 86_400_000;\nconst TELEMETRY_MAX_EVENT_BYTES = 65_536;\nconst TELEMETRY_SANITIZE_MAX_DEPTH = 6;\nconst TELEMETRY_SANITIZE_MAX_ARRAY_ITEMS = 20;\nconst TELEMETRY_MAX_QUEUE_ENTRY_ATTEMPTS = 15;\nconst TELEMETRY_RESULT_PREVIEW_MAX_BYTES = 8_192;\nconst OTEL_TRACES_ENDPOINT_ENV = \"OTEL_EXPORTER_OTLP_TRACES_ENDPOINT\";\nconst OTEL_BASE_ENDPOINT_ENV = \"OTEL_EXPORTER_OTLP_ENDPOINT\";\nconst OTEL_SERVICE_NAME_ENV = \"OTEL_SERVICE_NAME\";\nconst PM_TELEMETRY_DISABLED_ENV = \"PM_TELEMETRY_DISABLED\";\nconst PM_TELEMETRY_DISABLED_VALUES = new Set([\"1\", \"true\", \"yes\", \"on\"]);\nconst PM_TELEMETRY_OTEL_DISABLED_ENV = \"PM_TELEMETRY_OTEL_DISABLED\";\nconst PM_TELEMETRY_OTEL_DISABLED_VALUES = new Set([\"1\", \"true\", \"yes\", \"on\"]);\nconst PM_TELEMETRY_SOURCE_CONTEXT_ENV = \"PM_TELEMETRY_SOURCE_CONTEXT\";\nconst PM_TELEMETRY_SOURCE_CONTEXT_VALUES = [\"user\", \"automation\", \"test\", \"dogfood\", \"audit_smoke\"] as const;\n\nlet _lastFlushPromise: Promise<void> = Promise.resolve();\n\n/** Wait for the most recent background flush to settle. Test-only helper. */\nexport function waitForPendingFlush(): Promise<void> {\n return _lastFlushPromise;\n}\nconst PM_TELEMETRY_SOURCE_CONTEXT_SET = new Set<string>(PM_TELEMETRY_SOURCE_CONTEXT_VALUES);\nconst BOOLEAN_TRUE_VALUES = new Set([\"1\", \"true\", \"yes\", \"on\"]);\nconst PROCESS_SESSION_ID = crypto.randomUUID();\n\nconst SENSITIVE_KEYWORDS = [\n \"token\",\n \"secret\",\n \"password\",\n \"passwd\",\n \"api_key\",\n \"apikey\",\n \"authorization\",\n \"cookie\",\n \"session\",\n \"credentials\",\n \"bearer\",\n] as const;\nconst SENSITIVE_INLINE_KEY_PATTERN =\n \"(?:token|secret|password|passwd|api[_-]?key|apikey|authorization|cookie|session|credentials|bearer)\";\nconst INLINE_SENSITIVE_ASSIGNMENT_PATTERN = new RegExp(\n `\\\\b(${SENSITIVE_INLINE_KEY_PATTERN})\\\\s*([:=])\\\\s*([^\\\\s,;]+)`,\n \"giu\",\n);\nconst INLINE_SENSITIVE_FLAG_PATTERN = new RegExp(\n `(--${SENSITIVE_INLINE_KEY_PATTERN})(=|\\\\s+)([^\\\\s,;]+)`,\n \"giu\",\n);\nconst ABSOLUTE_PATH_TOKEN_PATTERN = /(^|[\\s\"'`(=])\\/(?:[^\\s\"'`),;]+)/g;\nconst EMAIL_PATTERN = /[A-Z0-9._%+-]+@[A-Z0-9.-]+\\.[A-Z]{2,}/giu;\nconst BEARER_TOKEN_PATTERN = /bearer\\s+[a-z0-9._=-]+/giu;\nconst PRIVATE_IP_PATTERN =\n /\\b(?:10\\.(?:25[0-5]|2[0-4]\\d|[01]?\\d?\\d)\\.(?:25[0-5]|2[0-4]\\d|[01]?\\d?\\d)\\.(?:25[0-5]|2[0-4]\\d|[01]?\\d?\\d)|172\\.(?:1[6-9]|2\\d|3[01])\\.(?:25[0-5]|2[0-4]\\d|[01]?\\d?\\d)\\.(?:25[0-5]|2[0-4]\\d|[01]?\\d?\\d)|192\\.168\\.(?:25[0-5]|2[0-4]\\d|[01]?\\d?\\d)\\.(?:25[0-5]|2[0-4]\\d|[01]?\\d?\\d))\\b/g;\n\ninterface TelemetryEvent {\n schema_version: number;\n event_id: string;\n event_type: \"command_start\" | \"command_finish\" | \"command_error\";\n occurred_at: string;\n installation_id: string;\n session_id: string;\n command: string;\n payload: Record<string, unknown>;\n}\n\ninterface QueuedTelemetryEvent {\n event: TelemetryEvent;\n attempts: number;\n last_attempt_at?: string;\n next_attempt_after?: string;\n}\n\ninterface TelemetryRuntimeState {\n last_attempted_flush_at?: string;\n last_successful_flush_at?: string;\n last_failed_flush_at?: string;\n last_failed_flush_error?: string;\n endpoint?: string;\n queue_entries?: number;\n}\n\ntype TelemetryCaptureLevel = \"minimal\" | \"redacted\" | \"max\";\ntype TelemetrySourceContext = (typeof PM_TELEMETRY_SOURCE_CONTEXT_VALUES)[number];\ntype TelemetrySourceContextSource = \"inferred\" | \"env_override\";\n\ninterface ResolvedTelemetrySourceContext {\n source_context: TelemetrySourceContext;\n source_context_source: TelemetrySourceContextSource;\n}\n\nexport interface ActiveTelemetryCommand {\n started_at: string;\n started_at_ms: number;\n command: string;\n pm_version: string;\n source_context: TelemetrySourceContext;\n source_context_source: TelemetrySourceContextSource;\n installation_id: string;\n pm_root_hash: string;\n cwd_hash: string;\n endpoint: string;\n retention_days: number;\n global_pm_root: string;\n capture_level: TelemetryCaptureLevel;\n otel_traces_endpoint?: string;\n otel_trace_id?: string;\n otel_span_id?: string;\n}\n\nexport interface TelemetryCommandContext {\n command: string;\n pm_version: string;\n args: string[];\n options: Record<string, unknown>;\n global: GlobalOptions;\n pm_root: string;\n}\n\nexport interface TelemetryCommandOutcome {\n ok: boolean;\n error?: string;\n result?: unknown;\n exit_code?: number;\n error_code?: string;\n error_category?: TelemetryErrorCategory;\n}\n\nexport interface TelemetryErrorEventContext {\n command: string;\n args: string[];\n options: Record<string, unknown>;\n global: GlobalOptions;\n pm_version: string;\n pm_root: string;\n error_code: string;\n error_message: string;\n exit_code: number;\n error_category?: TelemetryErrorCategory;\n}\n\n\nfunction queuePath(globalPmRoot: string): string {\n return path.join(globalPmRoot, TELEMETRY_QUEUE_RELATIVE_PATH);\n}\n\nfunction runtimeStatePath(globalPmRoot: string): string {\n return path.join(globalPmRoot, TELEMETRY_STATE_RELATIVE_PATH);\n}\n\nasync function readRuntimeState(globalPmRoot: string): Promise<TelemetryRuntimeState> {\n const raw = await readFileIfExists(runtimeStatePath(globalPmRoot));\n if (!raw || raw.trim().length === 0) {\n return {};\n }\n try {\n const parsed = JSON.parse(raw) as TelemetryRuntimeState;\n if (typeof parsed !== \"object\" || parsed === null || Array.isArray(parsed)) {\n return {};\n }\n return parsed;\n } catch {\n return {};\n }\n}\n\nasync function writeRuntimeState(globalPmRoot: string, patch: TelemetryRuntimeState): Promise<void> {\n try {\n const current = await readRuntimeState(globalPmRoot);\n const next: TelemetryRuntimeState = {\n ...current,\n ...patch,\n };\n const normalized = Object.fromEntries(\n Object.entries(next)\n .filter(([, value]) => value !== undefined)\n .sort((left, right) => left[0].localeCompare(right[0])),\n );\n await writeFileAtomic(runtimeStatePath(globalPmRoot), `${JSON.stringify(normalized, null, 2)}\\n`);\n } catch {\n // Runtime state persistence is best effort and must not block command execution.\n }\n}\n\nfunction isSensitiveKey(key: string): boolean {\n const normalized = key.trim().toLowerCase().replaceAll(\"-\", \"_\").replaceAll(/[^a-z0-9_]+/g, \"_\");\n const tokens = normalized.split(\"_\").filter((token) => token.length > 0);\n return SENSITIVE_KEYWORDS.some(\n (keyword) => normalized === keyword || normalized.endsWith(`_${keyword}`) || tokens.includes(keyword),\n );\n}\n\nfunction redactInlineSensitiveAssignments(input: string): string {\n const withoutAssignments = input.replaceAll(\n INLINE_SENSITIVE_ASSIGNMENT_PATTERN,\n (_match: string, key: string, delimiter: string): string => `${key}${delimiter}[redacted]`,\n );\n return withoutAssignments.replaceAll(\n INLINE_SENSITIVE_FLAG_PATTERN,\n (_match: string, flag: string, delimiter: string): string => `${flag}${delimiter}[redacted]`,\n );\n}\n\nfunction redactAbsolutePathTokens(input: string): string {\n return input.replaceAll(\n ABSOLUTE_PATH_TOKEN_PATTERN,\n (_match: string, prefix: string): string => `${prefix}[redacted_path]`,\n );\n}\n\nfunction sanitizeCommonSensitiveTokens(input: string): string {\n const withoutEmails = input.replaceAll(EMAIL_PATTERN, \"[redacted_email]\");\n const withoutBearer = withoutEmails.replaceAll(BEARER_TOKEN_PATTERN, \"bearer [redacted_token]\");\n return withoutBearer.replaceAll(PRIVATE_IP_PATTERN, \"[redacted_ip]\");\n}\n\nfunction sanitizeStringRedacted(input: string): string {\n const withoutCommonSensitiveTokens = sanitizeCommonSensitiveTokens(input);\n const withoutInlineSecrets = redactInlineSensitiveAssignments(withoutCommonSensitiveTokens);\n const withoutAbsolutePaths = redactAbsolutePathTokens(withoutInlineSecrets);\n const trimmed = withoutAbsolutePaths.trim();\n if (trimmed.startsWith(\"/\") && trimmed.length > 1) {\n return \"[redacted_path]\";\n }\n if (withoutAbsolutePaths.length > 512) {\n return `${withoutAbsolutePaths.slice(0, 509)}...`;\n }\n return withoutAbsolutePaths;\n}\n\nfunction sanitizeStringMax(input: string): string {\n const withoutCommonSensitiveTokens = sanitizeCommonSensitiveTokens(input);\n const withoutInlineSecrets = redactInlineSensitiveAssignments(withoutCommonSensitiveTokens);\n const withoutAbsolutePaths = redactAbsolutePathTokens(withoutInlineSecrets);\n const trimmed = withoutAbsolutePaths.trim();\n if (trimmed.startsWith(\"/\") && trimmed.length > 1) {\n return \"[redacted_path]\";\n }\n if (withoutAbsolutePaths.length > 2048) {\n return `${withoutAbsolutePaths.slice(0, 2045)}...`;\n }\n return withoutAbsolutePaths;\n}\n\nfunction sanitizeString(input: string, captureLevel: Exclude<TelemetryCaptureLevel, \"minimal\"> = \"redacted\"): string {\n if (captureLevel === \"max\") {\n return sanitizeStringMax(input);\n }\n return sanitizeStringRedacted(input);\n}\n\nfunction sanitizeValue(\n value: unknown,\n keyHint?: string,\n captureLevel: Exclude<TelemetryCaptureLevel, \"minimal\"> = \"redacted\",\n depth = 0,\n): unknown {\n if (keyHint && isSensitiveKey(keyHint)) {\n return \"[redacted]\";\n }\n if (value === null || value === undefined) {\n return value;\n }\n if (typeof value === \"string\") {\n return sanitizeString(value, captureLevel);\n }\n if (typeof value === \"number\" || typeof value === \"boolean\") {\n return value;\n }\n if (depth >= TELEMETRY_SANITIZE_MAX_DEPTH) {\n return \"[depth_truncated]\";\n }\n if (Array.isArray(value)) {\n return value.slice(0, TELEMETRY_SANITIZE_MAX_ARRAY_ITEMS).map((entry) => sanitizeValue(entry, undefined, captureLevel, depth + 1));\n }\n if (typeof value === \"object\") {\n const record = value as Record<string, unknown>;\n const sanitized: Record<string, unknown> = {};\n for (const [key, nested] of Object.entries(record)) {\n sanitized[key] = sanitizeValue(nested, key, captureLevel, depth + 1);\n }\n return sanitized;\n }\n return String(value);\n}\n\nfunction sanitizeCommandArgs(\n args: string[],\n captureLevel: Exclude<TelemetryCaptureLevel, \"minimal\"> = \"redacted\",\n): string[] {\n const sanitized: string[] = [];\n let nextIsSensitiveValue = false;\n for (const rawArg of args) {\n const arg = sanitizeString(rawArg, captureLevel);\n if (nextIsSensitiveValue) {\n sanitized.push(\"[redacted]\");\n nextIsSensitiveValue = false;\n continue;\n }\n if (arg.startsWith(\"--\")) {\n const withoutPrefix = arg.slice(2);\n const delimiterIndex = withoutPrefix.indexOf(\"=\");\n if (delimiterIndex >= 0) {\n const key = withoutPrefix.slice(0, delimiterIndex);\n const value = withoutPrefix.slice(delimiterIndex + 1);\n if (isSensitiveKey(key)) {\n sanitized.push(`--${key}=[redacted]`);\n } else {\n sanitized.push(`--${key}=${sanitizeString(value, captureLevel)}`);\n }\n continue;\n }\n if (isSensitiveKey(withoutPrefix)) {\n sanitized.push(`--${withoutPrefix}`);\n nextIsSensitiveValue = true;\n continue;\n }\n }\n sanitized.push(arg);\n }\n return sanitized;\n}\n\nfunction normalizeCaptureLevel(value: string | undefined): TelemetryCaptureLevel {\n const normalized = value?.trim().toLowerCase();\n if (normalized === \"minimal\" || normalized === \"redacted\" || normalized === \"max\") {\n return normalized;\n }\n return \"redacted\";\n}\n\nfunction parseBooleanTrueLike(value: string | undefined): boolean {\n return BOOLEAN_TRUE_VALUES.has((value ?? \"\").trim().toLowerCase());\n}\n\nfunction normalizePmVersion(value: string | undefined): string {\n const trimmed = value?.trim() ?? \"\";\n return trimmed.length > 0 ? trimmed : \"0.0.0\";\n}\n\nfunction normalizeTelemetryErrorCode(value: string | undefined): string | undefined {\n const normalized = value?.trim();\n return normalized && normalized.length > 0 ? normalized : undefined;\n}\n\nfunction normalizeTelemetryExitCode(exitCode: number | undefined, ok: boolean): number {\n if (Number.isFinite(exitCode)) {\n return Math.max(0, Math.trunc(exitCode ?? 0));\n }\n return ok ? 0 : 1;\n}\n\nfunction normalizeTelemetryErrorCategory(params: {\n ok: boolean;\n errorCode?: string;\n errorCategory?: TelemetryErrorCategory;\n}): TelemetryErrorCategory | undefined {\n if (params.ok) {\n return undefined;\n }\n if (typeof params.errorCategory === \"string\" && params.errorCategory.trim().length > 0) {\n return params.errorCategory;\n }\n if (typeof params.errorCode === \"string\" && params.errorCode.trim().length > 0) {\n return resolveTelemetryErrorCategory(params.errorCode);\n }\n return \"unknown\";\n}\n\nfunction resolveTelemetrySourceContext(globalOptions: GlobalOptions): ResolvedTelemetrySourceContext {\n const override = (process.env[PM_TELEMETRY_SOURCE_CONTEXT_ENV] ?? \"\").trim().toLowerCase();\n if (PM_TELEMETRY_SOURCE_CONTEXT_SET.has(override)) {\n return {\n source_context: override as TelemetrySourceContext,\n source_context_source: \"env_override\",\n };\n }\n const nodeEnv = (process.env.NODE_ENV ?? \"\").trim().toLowerCase();\n if (typeof process.env.VITEST === \"string\" || typeof process.env.VITEST_WORKER_ID === \"string\" || nodeEnv === \"test\") {\n return {\n source_context: \"test\",\n source_context_source: \"inferred\",\n };\n }\n const nonTty = process.stdin.isTTY !== true || process.stdout.isTTY !== true;\n const ci = parseBooleanTrueLike(process.env.CI);\n const scriptLikeMode = globalOptions.json === true || globalOptions.quiet === true;\n if (nonTty || ci || scriptLikeMode) {\n return {\n source_context: \"automation\",\n source_context_source: \"inferred\",\n };\n }\n return {\n source_context: \"user\",\n source_context_source: \"inferred\",\n };\n}\n\nfunction hashWithInstallationId(installationId: string, value: string): string {\n return crypto.createHash(\"sha256\").update(`${installationId}:${value}`).digest(\"hex\");\n}\n\nfunction telemetryDisabledByEnvironment(): boolean {\n return PM_TELEMETRY_DISABLED_VALUES.has((process.env[PM_TELEMETRY_DISABLED_ENV] ?? \"\").trim().toLowerCase());\n}\n\nfunction resolveOtelTracesEndpoint(): string | null {\n if (PM_TELEMETRY_OTEL_DISABLED_VALUES.has((process.env[PM_TELEMETRY_OTEL_DISABLED_ENV] ?? \"\").trim().toLowerCase())) {\n return null;\n }\n\n const directEndpoint = (process.env[OTEL_TRACES_ENDPOINT_ENV] ?? \"\").trim();\n if (directEndpoint.length > 0) {\n try {\n return new URL(directEndpoint).toString();\n } catch {\n return null;\n }\n }\n\n const baseEndpoint = (process.env[OTEL_BASE_ENDPOINT_ENV] ?? \"\").trim();\n if (baseEndpoint.length === 0) {\n return null;\n }\n\n try {\n const url = new URL(baseEndpoint);\n const normalizedPath = url.pathname.replace(/\\/+$/, \"\");\n if (!normalizedPath.endsWith(\"/v1/traces\")) {\n url.pathname = `${normalizedPath.length === 0 ? \"\" : normalizedPath}/v1/traces`;\n }\n return url.toString();\n } catch {\n return null;\n }\n}\n\nfunction isoToUnixNano(iso: string): string {\n const parsedMs = Date.parse(iso);\n const epochMs = Number.isNaN(parsedMs) ? Date.now() : parsedMs;\n return `${BigInt(epochMs) * 1_000_000n}`;\n}\n\nfunction otlpStringAttribute(key: string, value: string): { key: string; value: { stringValue: string } } {\n return {\n key,\n value: { stringValue: value },\n };\n}\n\nfunction otlpBoolAttribute(key: string, value: boolean): { key: string; value: { boolValue: boolean } } {\n return {\n key,\n value: { boolValue: value },\n };\n}\n\nfunction otlpIntAttribute(key: string, value: number): { key: string; value: { intValue: string } } {\n return {\n key,\n value: { intValue: String(Math.max(0, Math.trunc(value))) },\n };\n}\n\nasync function exportLocalOtelSpan(\n activeCommand: ActiveTelemetryCommand,\n outcome: { ok: boolean; error?: string; exit_code?: number; error_code?: string; error_category?: TelemetryErrorCategory },\n finishedAtIso: string,\n durationMs: number,\n): Promise<void> {\n if (\n typeof activeCommand.otel_traces_endpoint !== \"string\" ||\n activeCommand.otel_traces_endpoint.trim().length === 0 ||\n typeof activeCommand.otel_trace_id !== \"string\" ||\n activeCommand.otel_trace_id.length === 0 ||\n typeof activeCommand.otel_span_id !== \"string\" ||\n activeCommand.otel_span_id.length === 0\n ) {\n return;\n }\n\n const serviceNameCandidate = sanitizeString((process.env[OTEL_SERVICE_NAME_ENV] ?? \"\").trim());\n const serviceName = serviceNameCandidate.length > 0 ? serviceNameCandidate : \"pm-cli\";\n const normalizedExitCode = normalizeTelemetryExitCode(outcome.exit_code, outcome.ok);\n const normalizedErrorCode = normalizeTelemetryErrorCode(outcome.error_code);\n const normalizedErrorCategory = normalizeTelemetryErrorCategory({\n ok: outcome.ok,\n errorCode: normalizedErrorCode,\n errorCategory: outcome.error_category,\n });\n const attributes: Array<\n | ReturnType<typeof otlpStringAttribute>\n | ReturnType<typeof otlpBoolAttribute>\n | ReturnType<typeof otlpIntAttribute>\n > = [\n otlpStringAttribute(\"pm.command\", sanitizeString(activeCommand.command)),\n otlpStringAttribute(\"pm.version\", activeCommand.pm_version),\n otlpStringAttribute(\"pm.source_context\", activeCommand.source_context),\n otlpStringAttribute(\"pm.source_context_source\", activeCommand.source_context_source),\n otlpStringAttribute(\"pm.installation_id\", activeCommand.installation_id),\n otlpStringAttribute(\"pm.session_id\", PROCESS_SESSION_ID),\n otlpStringAttribute(\"pm.pm_root_hash\", activeCommand.pm_root_hash),\n otlpStringAttribute(\"pm.cwd_hash\", activeCommand.cwd_hash),\n otlpBoolAttribute(\"pm.ok\", outcome.ok),\n otlpIntAttribute(\"pm.exit_code\", normalizedExitCode),\n otlpIntAttribute(\"pm.duration_ms\", durationMs),\n ];\n if (typeof normalizedErrorCode === \"string\") {\n attributes.push(otlpStringAttribute(\"pm.error_code\", normalizedErrorCode));\n }\n if (typeof normalizedErrorCategory === \"string\") {\n attributes.push(otlpStringAttribute(\"pm.error_category\", normalizedErrorCategory));\n }\n if (typeof outcome.error === \"string\" && outcome.error.trim().length > 0) {\n attributes.push(otlpStringAttribute(\"pm.error\", sanitizeString(outcome.error)));\n }\n\n const payload = {\n resourceSpans: [\n {\n resource: {\n attributes: [otlpStringAttribute(\"service.name\", serviceName)],\n },\n scopeSpans: [\n {\n scope: {\n name: \"pm-cli.telemetry\",\n version: \"1\",\n },\n spans: [\n {\n traceId: activeCommand.otel_trace_id,\n spanId: activeCommand.otel_span_id,\n name: `pm.command.${sanitizeString(activeCommand.command)}`,\n kind: 1,\n startTimeUnixNano: isoToUnixNano(activeCommand.started_at),\n endTimeUnixNano: isoToUnixNano(finishedAtIso),\n attributes,\n status: {\n code: outcome.ok ? 1 : 2,\n message: outcome.ok ? \"\" : sanitizeString(outcome.error ?? \"command_failed\"),\n },\n },\n ],\n },\n ],\n },\n ],\n };\n\n const response = await fetch(activeCommand.otel_traces_endpoint, {\n method: \"POST\",\n headers: {\n \"content-type\": \"application/json\",\n },\n body: JSON.stringify(payload),\n signal: AbortSignal.timeout(TELEMETRY_HTTP_TIMEOUT_MS),\n });\n if (!response.ok) {\n throw new Error(`local_otel_export_http_${response.status}`);\n }\n}\n\nfunction summarizeResult(\n result: unknown,\n captureLevel: Exclude<TelemetryCaptureLevel, \"minimal\"> = \"redacted\",\n): Record<string, unknown> {\n if (result === null || result === undefined) {\n return { type: \"nullish\" };\n }\n if (typeof result === \"string\") {\n return { type: \"string\", value: sanitizeString(result, captureLevel) };\n }\n if (typeof result === \"number\" || typeof result === \"boolean\") {\n return { type: typeof result, value: result };\n }\n if (Array.isArray(result)) {\n return {\n type: \"array\",\n length: result.length,\n sample: result.slice(0, 5).map((entry) => sanitizeValue(entry, undefined, captureLevel)),\n };\n }\n if (typeof result === \"object\") {\n const record = result as Record<string, unknown>;\n const keys = Object.keys(record).sort((left, right) => left.localeCompare(right));\n const sanitized: Record<string, unknown> = {};\n let previewBytes = 0;\n for (const key of keys.slice(0, 25)) {\n const sanitizedValue = sanitizeValue(record[key], key, captureLevel);\n const entrySize = JSON.stringify(sanitizedValue)?.length ?? 0;\n if (previewBytes + entrySize > TELEMETRY_RESULT_PREVIEW_MAX_BYTES) {\n sanitized[key] = \"[preview_truncated]\";\n break;\n }\n previewBytes += entrySize;\n sanitized[key] = sanitizedValue;\n }\n return {\n type: \"object\",\n key_count: keys.length,\n keys_preview: keys.slice(0, 50),\n preview: sanitized,\n };\n }\n return { type: typeof result, value: String(result) };\n}\n\nfunction buildCommandStartPayload(params: {\n captureLevel: TelemetryCaptureLevel;\n context: TelemetryCommandContext;\n pmVersion: string;\n sourceContext: ResolvedTelemetrySourceContext;\n pmRootHash: string;\n cwdHash: string;\n installationId: string;\n}): Record<string, unknown> {\n const { captureLevel, context, pmVersion, sourceContext, pmRootHash, cwdHash, installationId } = params;\n if (captureLevel === \"minimal\") {\n return {\n capture_level: captureLevel,\n pm_version: pmVersion,\n source_context: sourceContext.source_context,\n source_context_source: sourceContext.source_context_source,\n };\n }\n return {\n pm_version: pmVersion,\n source_context: sourceContext.source_context,\n source_context_source: sourceContext.source_context_source,\n command_args: sanitizeCommandArgs(context.args, captureLevel),\n command_options: sanitizeValue(context.options, undefined, captureLevel) as Record<string, unknown>,\n global_options: sanitizeValue(context.global, undefined, captureLevel) as Record<string, unknown>,\n pm_root_hash: pmRootHash,\n cwd_hash: cwdHash,\n capture_level: captureLevel,\n runtime: {\n node: process.version,\n platform: process.platform,\n arch: process.arch,\n hostname_hash: hashWithInstallationId(installationId, os.hostname()),\n stdin_tty: process.stdin.isTTY === true,\n stdout_tty: process.stdout.isTTY === true,\n },\n };\n}\n\nfunction buildCommandFinishPayload(params: {\n captureLevel: TelemetryCaptureLevel;\n pmVersion: string;\n sourceContext: ResolvedTelemetrySourceContext;\n outcome: TelemetryCommandOutcome;\n durationMs: number;\n startedAt: string;\n exitCode: number;\n errorCode?: string;\n errorCategory?: TelemetryErrorCategory;\n}): Record<string, unknown> {\n const { captureLevel, pmVersion, sourceContext, outcome, durationMs, startedAt, exitCode, errorCode, errorCategory } = params;\n if (captureLevel === \"minimal\") {\n return {\n capture_level: captureLevel,\n pm_version: pmVersion,\n source_context: sourceContext.source_context,\n source_context_source: sourceContext.source_context_source,\n ok: outcome.ok,\n exit_code: exitCode,\n error_code: errorCode,\n error_category: errorCategory,\n error: outcome.error ? sanitizeString(outcome.error, \"redacted\") : undefined,\n duration_ms: durationMs,\n };\n }\n return {\n capture_level: captureLevel,\n pm_version: pmVersion,\n source_context: sourceContext.source_context,\n source_context_source: sourceContext.source_context_source,\n ok: outcome.ok,\n exit_code: exitCode,\n error_code: errorCode,\n error_category: errorCategory,\n error: outcome.error ? sanitizeString(outcome.error, captureLevel) : undefined,\n duration_ms: durationMs,\n started_at: startedAt,\n result_summary: summarizeResult(outcome.result, captureLevel),\n };\n}\n\nfunction buildCommandErrorPayload(params: {\n captureLevel: TelemetryCaptureLevel;\n pmVersion: string;\n sourceContext: ResolvedTelemetrySourceContext;\n command: string;\n args: string[];\n options: Record<string, unknown>;\n pmRootHash: string;\n cwdHash: string;\n installationId: string;\n errorCode: string;\n errorMessage: string;\n errorCategory: TelemetryErrorCategory;\n exitCode: number;\n}): Record<string, unknown> {\n const {\n captureLevel,\n pmVersion,\n sourceContext,\n command,\n args,\n options,\n pmRootHash,\n cwdHash,\n installationId,\n errorCode,\n errorMessage,\n errorCategory,\n exitCode,\n } = params;\n if (captureLevel === \"minimal\") {\n return {\n capture_level: captureLevel,\n pm_version: pmVersion,\n source_context: sourceContext.source_context,\n source_context_source: sourceContext.source_context_source,\n error_code: errorCode,\n error_category: errorCategory,\n exit_code: exitCode,\n error: sanitizeString(errorMessage, \"redacted\"),\n };\n }\n\n return {\n capture_level: captureLevel,\n pm_version: pmVersion,\n source_context: sourceContext.source_context,\n source_context_source: sourceContext.source_context_source,\n attempted_command: sanitizeString(command, captureLevel),\n attempted_args: sanitizeCommandArgs(args, captureLevel),\n attempted_options: sanitizeValue(options, undefined, captureLevel) as Record<string, unknown>,\n error_code: errorCode,\n error_category: errorCategory,\n exit_code: exitCode,\n error: sanitizeString(errorMessage, captureLevel),\n pm_root_hash: pmRootHash,\n cwd_hash: cwdHash,\n runtime: {\n node: process.version,\n platform: process.platform,\n arch: process.arch,\n hostname_hash: hashWithInstallationId(installationId, os.hostname()),\n stdin_tty: process.stdin.isTTY === true,\n stdout_tty: process.stdout.isTTY === true,\n },\n };\n}\n\nasync function ensureInstallationId(\n globalPmRoot: string,\n): Promise<{ installationId: string; endpoint: string; retentionDays: number }> {\n const settings = await readSettings(globalPmRoot);\n let changed = false;\n if (settings.telemetry.installation_id.trim().length === 0) {\n settings.telemetry.installation_id = crypto.randomUUID();\n changed = true;\n }\n if (changed) {\n await writeSettings(globalPmRoot, settings, \"telemetry:install_id\");\n }\n return {\n installationId: settings.telemetry.installation_id,\n endpoint: settings.telemetry.endpoint,\n retentionDays: Math.max(1, Math.trunc(settings.telemetry.retention_days)),\n };\n}\n\nasync function enqueueTelemetryEvent(globalPmRoot: string, event: TelemetryEvent): Promise<void> {\n const queued: QueuedTelemetryEvent = {\n event,\n attempts: 0,\n };\n let serialized = JSON.stringify(queued);\n if (serialized.length > TELEMETRY_MAX_EVENT_BYTES) {\n const trimmed = { ...event, payload: { ...event.payload, result_summary: { truncated: true, reason: \"payload_size_exceeded\", original_bytes: serialized.length } } };\n const trimmedQueued: QueuedTelemetryEvent = { event: trimmed, attempts: 0 };\n serialized = JSON.stringify(trimmedQueued);\n }\n await appendLineAtomic(queuePath(globalPmRoot), serialized);\n}\n\nfunction parseQueueLines(raw: string): QueuedTelemetryEvent[] {\n const entries: QueuedTelemetryEvent[] = [];\n for (const line of raw.split(\"\\n\")) {\n const trimmed = line.trim();\n if (trimmed.length === 0) {\n continue;\n }\n try {\n const parsed = JSON.parse(trimmed) as QueuedTelemetryEvent;\n if (\n parsed &&\n typeof parsed === \"object\" &&\n parsed.event &&\n typeof parsed.event === \"object\" &&\n typeof parsed.attempts === \"number\"\n ) {\n entries.push(parsed);\n }\n } catch {\n // Drop malformed lines to preserve queue forward progress.\n }\n }\n return entries;\n}\n\nfunction nextRetryIso(attempts: number): string {\n const delay = Math.min(TELEMETRY_RETRY_BASE_DELAY_MS * 2 ** Math.max(attempts - 1, 0), TELEMETRY_MAX_RETRY_DELAY_MS);\n return new Date(Date.now() + delay).toISOString();\n}\n\nfunction isDueForRetry(entry: QueuedTelemetryEvent): boolean {\n if (typeof entry.next_attempt_after !== \"string\" || entry.next_attempt_after.trim().length === 0) {\n return true;\n }\n const dueAtMs = Date.parse(entry.next_attempt_after);\n if (Number.isNaN(dueAtMs)) {\n return true;\n }\n return dueAtMs <= Date.now();\n}\n\nfunction retentionCutoffMs(retentionDays: number): number {\n const normalizedDays = Number.isFinite(retentionDays) ? Math.max(1, Math.trunc(retentionDays)) : 1;\n return Date.now() - normalizedDays * MILLISECONDS_PER_DAY;\n}\n\nfunction isExpiredQueueEntry(entry: QueuedTelemetryEvent, cutoffMs: number): boolean {\n const occurredAt = entry.event?.occurred_at;\n if (typeof occurredAt !== \"string\" || occurredAt.trim().length === 0) {\n return false;\n }\n const occurredAtMs = Date.parse(occurredAt);\n if (Number.isNaN(occurredAtMs)) {\n return false;\n }\n return occurredAtMs < cutoffMs;\n}\n\nfunction pruneExpiredQueueEntries(\n entries: QueuedTelemetryEvent[],\n retentionDays: number,\n): { entries: QueuedTelemetryEvent[]; prunedCount: number } {\n const cutoffMs = retentionCutoffMs(retentionDays);\n const retained: QueuedTelemetryEvent[] = [];\n let prunedCount = 0;\n for (const entry of entries) {\n const serializedSize = JSON.stringify(entry).length;\n const oversized = serializedSize > TELEMETRY_MAX_EVENT_BYTES;\n if (oversized || isExpiredQueueEntry(entry, cutoffMs) || entry.attempts >= TELEMETRY_MAX_QUEUE_ENTRY_ATTEMPTS) {\n prunedCount += 1;\n continue;\n }\n retained.push(entry);\n }\n return { entries: retained, prunedCount };\n}\n\nasync function rewriteQueue(globalPmRoot: string, entries: QueuedTelemetryEvent[]): Promise<void> {\n const serialized = entries.map((entry) => JSON.stringify(entry)).join(\"\\n\");\n await writeFileAtomic(queuePath(globalPmRoot), serialized.length > 0 ? `${serialized}\\n` : \"\");\n}\n\nasync function flushQueue(globalPmRoot: string, endpoint: string, retentionDays: number): Promise<void> {\n const normalizedEndpoint = endpoint.trim();\n if (normalizedEndpoint.length === 0) {\n return;\n }\n const raw = await readFileIfExists(queuePath(globalPmRoot));\n if (raw === null || raw.trim().length === 0) {\n await writeRuntimeState(globalPmRoot, {\n endpoint: normalizedEndpoint,\n queue_entries: 0,\n });\n return;\n }\n const queueEntries = parseQueueLines(raw);\n if (queueEntries.length === 0) {\n await writeRuntimeState(globalPmRoot, {\n endpoint: normalizedEndpoint,\n queue_entries: 0,\n });\n return;\n }\n const { entries: retainedEntries, prunedCount } = pruneExpiredQueueEntries(queueEntries, retentionDays);\n if (retainedEntries.length === 0) {\n if (prunedCount > 0) {\n await rewriteQueue(globalPmRoot, []);\n }\n await writeRuntimeState(globalPmRoot, {\n endpoint: normalizedEndpoint,\n queue_entries: 0,\n });\n return;\n }\n const dueEntries = retainedEntries.filter((entry) => isDueForRetry(entry)).slice(0, TELEMETRY_FLUSH_BATCH_SIZE);\n if (dueEntries.length === 0) {\n if (prunedCount > 0) {\n await rewriteQueue(globalPmRoot, retainedEntries);\n }\n await writeRuntimeState(globalPmRoot, {\n endpoint: normalizedEndpoint,\n queue_entries: retainedEntries.length,\n });\n return;\n }\n const dueIds = new Set(dueEntries.map((entry) => entry.event.event_id));\n const attemptTime = nowIso();\n\n try {\n const response = await fetch(normalizedEndpoint, {\n method: \"POST\",\n headers: {\n \"content-type\": \"application/json\",\n },\n body: JSON.stringify({\n schema_version: TELEMETRY_SCHEMA_VERSION,\n events: dueEntries.map((entry) => entry.event),\n }),\n signal: AbortSignal.timeout(TELEMETRY_HTTP_TIMEOUT_MS),\n });\n if (!response.ok) {\n throw new Error(`telemetry_flush_http_${response.status}`);\n }\n const remaining = retainedEntries.filter((entry) => !dueIds.has(entry.event.event_id));\n await rewriteQueue(globalPmRoot, remaining);\n await writeRuntimeState(globalPmRoot, {\n endpoint: normalizedEndpoint,\n queue_entries: remaining.length,\n last_attempted_flush_at: attemptTime,\n last_successful_flush_at: attemptTime,\n last_failed_flush_at: undefined,\n last_failed_flush_error: undefined,\n });\n } catch (error: unknown) {\n const retried = retainedEntries.map((entry) => {\n if (!dueIds.has(entry.event.event_id)) {\n return entry;\n }\n const attempts = entry.attempts + 1;\n return {\n ...entry,\n attempts,\n last_attempt_at: attemptTime,\n next_attempt_after: nextRetryIso(attempts),\n };\n });\n await rewriteQueue(globalPmRoot, retried);\n const errorMessage = (() => {\n if (error instanceof Error) {\n return sanitizeString(error.message, \"redacted\");\n }\n return \"telemetry_flush_failed\";\n })();\n await writeRuntimeState(globalPmRoot, {\n endpoint: normalizedEndpoint,\n queue_entries: retried.length,\n last_attempted_flush_at: attemptTime,\n last_failed_flush_at: attemptTime,\n last_failed_flush_error: errorMessage,\n });\n }\n}\n\nexport async function startTelemetryCommand(context: TelemetryCommandContext): Promise<ActiveTelemetryCommand | null> {\n if (telemetryDisabledByEnvironment()) {\n return null;\n }\n try {\n const globalPmRoot = resolveGlobalPmRoot(process.cwd());\n const settings = await readSettings(globalPmRoot);\n if (!settings.telemetry.enabled) {\n return null;\n }\n const captureLevel = normalizeCaptureLevel(settings.telemetry.capture_level);\n const { installationId, endpoint, retentionDays } = await ensureInstallationId(globalPmRoot);\n const pmVersion = normalizePmVersion(context.pm_version);\n const sourceContext = resolveTelemetrySourceContext(context.global);\n const pmRootHash = hashWithInstallationId(installationId, context.pm_root);\n const cwdHash = hashWithInstallationId(installationId, process.cwd());\n const otelTracesEndpoint = resolveOtelTracesEndpoint();\n const occurredAt = nowIso();\n const event: TelemetryEvent = {\n schema_version: TELEMETRY_SCHEMA_VERSION,\n event_id: crypto.randomUUID(),\n event_type: \"command_start\",\n occurred_at: occurredAt,\n installation_id: installationId,\n session_id: PROCESS_SESSION_ID,\n command: context.command,\n payload: buildCommandStartPayload({\n captureLevel,\n context,\n pmVersion,\n sourceContext,\n pmRootHash,\n cwdHash,\n installationId,\n }),\n };\n await enqueueTelemetryEvent(globalPmRoot, event);\n _lastFlushPromise = flushQueue(globalPmRoot, endpoint, retentionDays).catch(() => {});\n return {\n started_at: occurredAt,\n started_at_ms: Date.now(),\n command: context.command,\n pm_version: pmVersion,\n source_context: sourceContext.source_context,\n source_context_source: sourceContext.source_context_source,\n installation_id: installationId,\n pm_root_hash: pmRootHash,\n cwd_hash: cwdHash,\n endpoint,\n retention_days: retentionDays,\n global_pm_root: globalPmRoot,\n capture_level: captureLevel,\n otel_traces_endpoint: otelTracesEndpoint ?? undefined,\n otel_trace_id: otelTracesEndpoint ? crypto.randomBytes(16).toString(\"hex\") : undefined,\n otel_span_id: otelTracesEndpoint ? crypto.randomBytes(8).toString(\"hex\") : undefined,\n };\n } catch {\n // Telemetry must never block command execution.\n return null;\n }\n}\n\nexport async function finishTelemetryCommand(\n activeCommand: ActiveTelemetryCommand | null,\n outcome: TelemetryCommandOutcome,\n): Promise<void> {\n if (!activeCommand) {\n return;\n }\n try {\n const finishedAt = nowIso();\n const durationMs = Math.max(0, Date.now() - activeCommand.started_at_ms);\n const normalizedErrorCode = normalizeTelemetryErrorCode(outcome.error_code);\n const normalizedErrorCategory = normalizeTelemetryErrorCategory({\n ok: outcome.ok,\n errorCode: normalizedErrorCode,\n errorCategory: outcome.error_category,\n });\n const normalizedExitCode = normalizeTelemetryExitCode(outcome.exit_code, outcome.ok);\n const event: TelemetryEvent = {\n schema_version: TELEMETRY_SCHEMA_VERSION,\n event_id: crypto.randomUUID(),\n event_type: \"command_finish\",\n occurred_at: finishedAt,\n installation_id: activeCommand.installation_id,\n session_id: PROCESS_SESSION_ID,\n command: activeCommand.command,\n payload: buildCommandFinishPayload({\n captureLevel: activeCommand.capture_level,\n pmVersion: activeCommand.pm_version,\n sourceContext: {\n source_context: activeCommand.source_context,\n source_context_source: activeCommand.source_context_source,\n },\n outcome,\n durationMs,\n startedAt: activeCommand.started_at,\n exitCode: normalizedExitCode,\n errorCode: normalizedErrorCode,\n errorCategory: normalizedErrorCategory,\n }),\n };\n await enqueueTelemetryEvent(activeCommand.global_pm_root, event);\n _lastFlushPromise = flushQueue(activeCommand.global_pm_root, activeCommand.endpoint, activeCommand.retention_days).catch(() => {});\n void exportLocalOtelSpan(\n activeCommand,\n {\n ...outcome,\n exit_code: normalizedExitCode,\n error_code: normalizedErrorCode,\n error_category: normalizedErrorCategory,\n },\n finishedAt,\n durationMs,\n ).catch(() => {});\n } catch {\n // Telemetry must never block command execution.\n }\n}\n\nexport async function emitTelemetryErrorEvent(context: TelemetryErrorEventContext): Promise<void> {\n if (telemetryDisabledByEnvironment()) {\n return;\n }\n try {\n const globalPmRoot = resolveGlobalPmRoot(process.cwd());\n const settings = await readSettings(globalPmRoot);\n if (!settings.telemetry.enabled) {\n return;\n }\n const captureLevel = normalizeCaptureLevel(settings.telemetry.capture_level);\n const { installationId, endpoint, retentionDays } = await ensureInstallationId(globalPmRoot);\n const pmVersion = normalizePmVersion(context.pm_version);\n const sourceContext = resolveTelemetrySourceContext(context.global);\n const pmRootHash = hashWithInstallationId(installationId, context.pm_root);\n const cwdHash = hashWithInstallationId(installationId, process.cwd());\n const occurredAt = nowIso();\n const normalizedErrorCode = normalizeTelemetryErrorCode(context.error_code) ?? \"unknown_error\";\n const normalizedErrorCategory =\n context.error_category ?? resolveTelemetryErrorCategory(normalizedErrorCode);\n const normalizedExitCode = normalizeTelemetryExitCode(context.exit_code, false);\n const normalizedCommand = context.command.trim().length > 0 ? context.command : \"<unknown>\";\n\n const event: TelemetryEvent = {\n schema_version: TELEMETRY_SCHEMA_VERSION,\n event_id: crypto.randomUUID(),\n event_type: \"command_error\",\n occurred_at: occurredAt,\n installation_id: installationId,\n session_id: PROCESS_SESSION_ID,\n command: sanitizeString(normalizedCommand, \"redacted\"),\n payload: buildCommandErrorPayload({\n captureLevel,\n pmVersion,\n sourceContext,\n command: normalizedCommand,\n args: context.args,\n options: context.options,\n pmRootHash,\n cwdHash,\n installationId,\n errorCode: normalizedErrorCode,\n errorCategory: normalizedErrorCategory,\n exitCode: normalizedExitCode,\n errorMessage: context.error_message,\n }),\n };\n await enqueueTelemetryEvent(globalPmRoot, event);\n _lastFlushPromise = flushQueue(globalPmRoot, endpoint, retentionDays).catch(() => {});\n } catch {\n // Telemetry must never block command execution.\n }\n}\n"]}
|
|
1
|
+
{"version":3,"file":"runtime.js","sourceRoot":"/","sources":["core/telemetry/runtime.ts"],"names":[],"mappings":"AAAA,OAAO,MAAM,MAAM,aAAa,CAAC;AACjC,OAAO,EAAE,MAAM,SAAS,CAAC;AACzB,OAAO,IAAI,MAAM,WAAW,CAAC;AAE7B,OAAO,EAAE,gBAAgB,EAAE,gBAAgB,EAAE,eAAe,EAAE,MAAM,mBAAmB,CAAC;AACxF,OAAO,EAAE,6BAA6B,EAA+B,MAAM,wBAAwB,CAAC;AACpG,OAAO,EAAE,MAAM,EAAE,MAAM,mBAAmB,CAAC;AAC3C,OAAO,EAAE,mBAAmB,EAAE,MAAM,mBAAmB,CAAC;AACxD,OAAO,EAAE,YAAY,EAAE,aAAa,EAAE,MAAM,sBAAsB,CAAC;AACnE,OAAO,EACL,gCAAgC,EAChC,8BAA8B,EAC9B,uBAAuB,GAIxB,MAAM,oBAAoB,CAAC;AAE5B,MAAM,6BAA6B,GAAG,IAAI,CAAC,IAAI,CAAC,SAAS,EAAE,WAAW,EAAE,cAAc,CAAC,CAAC;AACxF,MAAM,6BAA6B,GAAG,IAAI,CAAC,IAAI,CAAC,SAAS,EAAE,WAAW,EAAE,YAAY,CAAC,CAAC;AACtF,MAAM,wBAAwB,GAAG,CAAC,CAAC;AACnC,MAAM,0BAA0B,GAAG,GAAG,CAAC;AACvC,MAAM,4BAA4B,GAAG,SAAS,CAAC;AAC/C,MAAM,6BAA6B,GAAG,MAAM,CAAC;AAC7C,MAAM,yBAAyB,GAAG,KAAK,CAAC;AACxC,MAAM,oBAAoB,GAAG,UAAU,CAAC;AACxC,MAAM,yBAAyB,GAAG,MAAM,CAAC;AACzC,MAAM,4BAA4B,GAAG,CAAC,CAAC;AACvC,MAAM,kCAAkC,GAAG,EAAE,CAAC;AAC9C,MAAM,kCAAkC,GAAG,EAAE,CAAC;AAC9C,MAAM,kCAAkC,GAAG,KAAK,CAAC;AACjD,MAAM,wBAAwB,GAAG,oCAAoC,CAAC;AACtE,MAAM,sBAAsB,GAAG,6BAA6B,CAAC;AAC7D,MAAM,qBAAqB,GAAG,mBAAmB,CAAC;AAClD,MAAM,yBAAyB,GAAG,uBAAuB,CAAC;AAC1D,MAAM,4BAA4B,GAAG,IAAI,GAAG,CAAC,CAAC,GAAG,EAAE,MAAM,EAAE,KAAK,EAAE,IAAI,CAAC,CAAC,CAAC;AACzE,MAAM,8BAA8B,GAAG,4BAA4B,CAAC;AACpE,MAAM,iCAAiC,GAAG,IAAI,GAAG,CAAC,CAAC,GAAG,EAAE,MAAM,EAAE,KAAK,EAAE,IAAI,CAAC,CAAC,CAAC;AAC9E,MAAM,+BAA+B,GAAG,6BAA6B,CAAC;AACtE,MAAM,kCAAkC,GAAG,CAAC,MAAM,EAAE,YAAY,EAAE,MAAM,EAAE,SAAS,EAAE,aAAa,CAAU,CAAC;AAE7G,IAAI,iBAAiB,GAAkB,OAAO,CAAC,OAAO,EAAE,CAAC;AAEzD,6EAA6E;AAC7E,MAAM,UAAU,mBAAmB;IACjC,OAAO,iBAAiB,CAAC;AAC3B,CAAC;AACD,MAAM,+BAA+B,GAAG,IAAI,GAAG,CAAS,kCAAkC,CAAC,CAAC;AAC5F,MAAM,mBAAmB,GAAG,IAAI,GAAG,CAAC,CAAC,GAAG,EAAE,MAAM,EAAE,KAAK,EAAE,IAAI,CAAC,CAAC,CAAC;AAChE,MAAM,kBAAkB,GAAG,MAAM,CAAC,UAAU,EAAE,CAAC;AAE/C,MAAM,kBAAkB,GAAG;IACzB,OAAO;IACP,QAAQ;IACR,UAAU;IACV,QAAQ;IACR,SAAS;IACT,QAAQ;IACR,eAAe;IACf,QAAQ;IACR,SAAS;IACT,aAAa;IACb,QAAQ;CACA,CAAC;AACX,MAAM,4BAA4B,GAChC,qGAAqG,CAAC;AACxG,MAAM,mCAAmC,GAAG,IAAI,MAAM,CACpD,OAAO,4BAA4B,4BAA4B,EAC/D,KAAK,CACN,CAAC;AACF,MAAM,6BAA6B,GAAG,IAAI,MAAM,CAC9C,MAAM,4BAA4B,sBAAsB,EACxD,KAAK,CACN,CAAC;AACF,MAAM,2BAA2B,GAAG,kCAAkC,CAAC;AACvE,MAAM,aAAa,GAAG,0CAA0C,CAAC;AACjE,MAAM,oBAAoB,GAAG,2BAA2B,CAAC;AACzD,MAAM,kBAAkB,GACtB,uRAAuR,CAAC;AA8F1R,SAAS,SAAS,CAAC,YAAoB;IACrC,OAAO,IAAI,CAAC,IAAI,CAAC,YAAY,EAAE,6BAA6B,CAAC,CAAC;AAChE,CAAC;AAED,SAAS,gBAAgB,CAAC,YAAoB;IAC5C,OAAO,IAAI,CAAC,IAAI,CAAC,YAAY,EAAE,6BAA6B,CAAC,CAAC;AAChE,CAAC;AAED,KAAK,UAAU,gBAAgB,CAAC,YAAoB;IAClD,MAAM,GAAG,GAAG,MAAM,gBAAgB,CAAC,gBAAgB,CAAC,YAAY,CAAC,CAAC,CAAC;IACnE,IAAI,CAAC,GAAG,IAAI,GAAG,CAAC,IAAI,EAAE,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QACpC,OAAO,EAAE,CAAC;IACZ,CAAC;IACD,IAAI,CAAC;QACH,MAAM,MAAM,GAAG,IAAI,CAAC,KAAK,CAAC,GAAG,CAA0B,CAAC;QACxD,IAAI,OAAO,MAAM,KAAK,QAAQ,IAAI,MAAM,KAAK,IAAI,IAAI,KAAK,CAAC,OAAO,CAAC,MAAM,CAAC,EAAE,CAAC;YAC3E,OAAO,EAAE,CAAC;QACZ,CAAC;QACD,OAAO,MAAM,CAAC;IAChB,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,EAAE,CAAC;IACZ,CAAC;AACH,CAAC;AAED,KAAK,UAAU,iBAAiB,CAAC,YAAoB,EAAE,KAA4B;IACjF,IAAI,CAAC;QACH,MAAM,OAAO,GAAG,MAAM,gBAAgB,CAAC,YAAY,CAAC,CAAC;QACrD,MAAM,IAAI,GAA0B;YAClC,GAAG,OAAO;YACV,GAAG,KAAK;SACT,CAAC;QACF,MAAM,UAAU,GAAG,MAAM,CAAC,WAAW,CACnC,MAAM,CAAC,OAAO,CAAC,IAAI,CAAC;aACjB,MAAM,CAAC,CAAC,CAAC,EAAE,KAAK,CAAC,EAAE,EAAE,CAAC,KAAK,KAAK,SAAS,CAAC;aAC1C,IAAI,CAAC,CAAC,IAAI,EAAE,KAAK,EAAE,EAAE,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,aAAa,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,CAC1D,CAAC;QACF,MAAM,eAAe,CAAC,gBAAgB,CAAC,YAAY,CAAC,EAAE,GAAG,IAAI,CAAC,SAAS,CAAC,UAAU,EAAE,IAAI,EAAE,CAAC,CAAC,IAAI,CAAC,CAAC;IACpG,CAAC;IAAC,MAAM,CAAC;QACP,iFAAiF;IACnF,CAAC;AACH,CAAC;AAED,SAAS,cAAc,CAAC,GAAW;IACjC,MAAM,UAAU,GAAG,GAAG,CAAC,IAAI,EAAE,CAAC,WAAW,EAAE,CAAC,UAAU,CAAC,GAAG,EAAE,GAAG,CAAC,CAAC,UAAU,CAAC,cAAc,EAAE,GAAG,CAAC,CAAC;IACjG,MAAM,MAAM,GAAG,UAAU,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,MAAM,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,KAAK,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC;IACzE,OAAO,kBAAkB,CAAC,IAAI,CAC5B,CAAC,OAAO,EAAE,EAAE,CAAC,UAAU,KAAK,OAAO,IAAI,UAAU,CAAC,QAAQ,CAAC,IAAI,OAAO,EAAE,CAAC,IAAI,MAAM,CAAC,QAAQ,CAAC,OAAO,CAAC,CACtG,CAAC;AACJ,CAAC;AAED,SAAS,gCAAgC,CAAC,KAAa;IACrD,MAAM,kBAAkB,GAAG,KAAK,CAAC,UAAU,CACzC,mCAAmC,EACnC,CAAC,MAAc,EAAE,GAAW,EAAE,SAAiB,EAAU,EAAE,CAAC,GAAG,GAAG,GAAG,SAAS,YAAY,CAC3F,CAAC;IACF,OAAO,kBAAkB,CAAC,UAAU,CAClC,6BAA6B,EAC7B,CAAC,MAAc,EAAE,IAAY,EAAE,SAAiB,EAAU,EAAE,CAAC,GAAG,IAAI,GAAG,SAAS,YAAY,CAC7F,CAAC;AACJ,CAAC;AAED,SAAS,wBAAwB,CAAC,KAAa;IAC7C,OAAO,KAAK,CAAC,UAAU,CACrB,2BAA2B,EAC3B,CAAC,MAAc,EAAE,MAAc,EAAU,EAAE,CAAC,GAAG,MAAM,iBAAiB,CACvE,CAAC;AACJ,CAAC;AAED,SAAS,6BAA6B,CAAC,KAAa;IAClD,MAAM,aAAa,GAAG,KAAK,CAAC,UAAU,CAAC,aAAa,EAAE,kBAAkB,CAAC,CAAC;IAC1E,MAAM,aAAa,GAAG,aAAa,CAAC,UAAU,CAAC,oBAAoB,EAAE,yBAAyB,CAAC,CAAC;IAChG,OAAO,aAAa,CAAC,UAAU,CAAC,kBAAkB,EAAE,eAAe,CAAC,CAAC;AACvE,CAAC;AAED,SAAS,sBAAsB,CAAC,KAAa;IAC3C,MAAM,4BAA4B,GAAG,6BAA6B,CAAC,KAAK,CAAC,CAAC;IAC1E,MAAM,oBAAoB,GAAG,gCAAgC,CAAC,4BAA4B,CAAC,CAAC;IAC5F,MAAM,oBAAoB,GAAG,wBAAwB,CAAC,oBAAoB,CAAC,CAAC;IAC5E,MAAM,OAAO,GAAG,oBAAoB,CAAC,IAAI,EAAE,CAAC;IAC5C,IAAI,OAAO,CAAC,UAAU,CAAC,GAAG,CAAC,IAAI,OAAO,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QAClD,OAAO,iBAAiB,CAAC;IAC3B,CAAC;IACD,IAAI,oBAAoB,CAAC,MAAM,GAAG,GAAG,EAAE,CAAC;QACtC,OAAO,GAAG,oBAAoB,CAAC,KAAK,CAAC,CAAC,EAAE,GAAG,CAAC,KAAK,CAAC;IACpD,CAAC;IACD,OAAO,oBAAoB,CAAC;AAC9B,CAAC;AAED,SAAS,iBAAiB,CAAC,KAAa;IACtC,MAAM,4BAA4B,GAAG,6BAA6B,CAAC,KAAK,CAAC,CAAC;IAC1E,MAAM,oBAAoB,GAAG,gCAAgC,CAAC,4BAA4B,CAAC,CAAC;IAC5F,MAAM,oBAAoB,GAAG,wBAAwB,CAAC,oBAAoB,CAAC,CAAC;IAC5E,MAAM,OAAO,GAAG,oBAAoB,CAAC,IAAI,EAAE,CAAC;IAC5C,IAAI,OAAO,CAAC,UAAU,CAAC,GAAG,CAAC,IAAI,OAAO,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QAClD,OAAO,iBAAiB,CAAC;IAC3B,CAAC;IACD,IAAI,oBAAoB,CAAC,MAAM,GAAG,IAAI,EAAE,CAAC;QACvC,OAAO,GAAG,oBAAoB,CAAC,KAAK,CAAC,CAAC,EAAE,IAAI,CAAC,KAAK,CAAC;IACrD,CAAC;IACD,OAAO,oBAAoB,CAAC;AAC9B,CAAC;AAED,SAAS,cAAc,CAAC,KAAa,EAAE,eAA0D,UAAU;IACzG,IAAI,YAAY,KAAK,KAAK,EAAE,CAAC;QAC3B,OAAO,iBAAiB,CAAC,KAAK,CAAC,CAAC;IAClC,CAAC;IACD,OAAO,sBAAsB,CAAC,KAAK,CAAC,CAAC;AACvC,CAAC;AAED,SAAS,aAAa,CACpB,KAAc,EACd,OAAgB,EAChB,eAA0D,UAAU,EACpE,KAAK,GAAG,CAAC;IAET,IAAI,OAAO,IAAI,cAAc,CAAC,OAAO,CAAC,EAAE,CAAC;QACvC,OAAO,YAAY,CAAC;IACtB,CAAC;IACD,IAAI,KAAK,KAAK,IAAI,IAAI,KAAK,KAAK,SAAS,EAAE,CAAC;QAC1C,OAAO,KAAK,CAAC;IACf,CAAC;IACD,IAAI,OAAO,KAAK,KAAK,QAAQ,EAAE,CAAC;QAC9B,OAAO,cAAc,CAAC,KAAK,EAAE,YAAY,CAAC,CAAC;IAC7C,CAAC;IACD,IAAI,OAAO,KAAK,KAAK,QAAQ,IAAI,OAAO,KAAK,KAAK,SAAS,EAAE,CAAC;QAC5D,OAAO,KAAK,CAAC;IACf,CAAC;IACD,IAAI,KAAK,IAAI,4BAA4B,EAAE,CAAC;QAC1C,OAAO,mBAAmB,CAAC;IAC7B,CAAC;IACD,IAAI,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,EAAE,CAAC;QACzB,OAAO,KAAK,CAAC,KAAK,CAAC,CAAC,EAAE,kCAAkC,CAAC,CAAC,GAAG,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,aAAa,CAAC,KAAK,EAAE,SAAS,EAAE,YAAY,EAAE,KAAK,GAAG,CAAC,CAAC,CAAC,CAAC;IACrI,CAAC;IACD,IAAI,OAAO,KAAK,KAAK,QAAQ,EAAE,CAAC;QAC9B,MAAM,MAAM,GAAG,KAAgC,CAAC;QAChD,MAAM,SAAS,GAA4B,EAAE,CAAC;QAC9C,KAAK,MAAM,CAAC,GAAG,EAAE,MAAM,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,MAAM,CAAC,EAAE,CAAC;YACnD,SAAS,CAAC,GAAG,CAAC,GAAG,aAAa,CAAC,MAAM,EAAE,GAAG,EAAE,YAAY,EAAE,KAAK,GAAG,CAAC,CAAC,CAAC;QACvE,CAAC;QACD,OAAO,SAAS,CAAC;IACnB,CAAC;IACD,OAAO,MAAM,CAAC,KAAK,CAAC,CAAC;AACvB,CAAC;AAED,SAAS,mBAAmB,CAC1B,IAAc,EACd,eAA0D,UAAU;IAEpE,MAAM,SAAS,GAAa,EAAE,CAAC;IAC/B,IAAI,oBAAoB,GAAG,KAAK,CAAC;IACjC,KAAK,MAAM,MAAM,IAAI,IAAI,EAAE,CAAC;QAC1B,MAAM,GAAG,GAAG,cAAc,CAAC,MAAM,EAAE,YAAY,CAAC,CAAC;QACjD,IAAI,oBAAoB,EAAE,CAAC;YACzB,SAAS,CAAC,IAAI,CAAC,YAAY,CAAC,CAAC;YAC7B,oBAAoB,GAAG,KAAK,CAAC;YAC7B,SAAS;QACX,CAAC;QACD,IAAI,GAAG,CAAC,UAAU,CAAC,IAAI,CAAC,EAAE,CAAC;YACzB,MAAM,aAAa,GAAG,GAAG,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;YACnC,MAAM,cAAc,GAAG,aAAa,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC;YAClD,IAAI,cAAc,IAAI,CAAC,EAAE,CAAC;gBACxB,MAAM,GAAG,GAAG,aAAa,CAAC,KAAK,CAAC,CAAC,EAAE,cAAc,CAAC,CAAC;gBACnD,MAAM,KAAK,GAAG,aAAa,CAAC,KAAK,CAAC,cAAc,GAAG,CAAC,CAAC,CAAC;gBACtD,IAAI,cAAc,CAAC,GAAG,CAAC,EAAE,CAAC;oBACxB,SAAS,CAAC,IAAI,CAAC,KAAK,GAAG,aAAa,CAAC,CAAC;gBACxC,CAAC;qBAAM,CAAC;oBACN,SAAS,CAAC,IAAI,CAAC,KAAK,GAAG,IAAI,cAAc,CAAC,KAAK,EAAE,YAAY,CAAC,EAAE,CAAC,CAAC;gBACpE,CAAC;gBACD,SAAS;YACX,CAAC;YACD,IAAI,cAAc,CAAC,aAAa,CAAC,EAAE,CAAC;gBAClC,SAAS,CAAC,IAAI,CAAC,KAAK,aAAa,EAAE,CAAC,CAAC;gBACrC,oBAAoB,GAAG,IAAI,CAAC;gBAC5B,SAAS;YACX,CAAC;QACH,CAAC;QACD,SAAS,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;IACtB,CAAC;IACD,OAAO,SAAS,CAAC;AACnB,CAAC;AAED,SAAS,qBAAqB,CAAC,KAAyB;IACtD,MAAM,UAAU,GAAG,KAAK,EAAE,IAAI,EAAE,CAAC,WAAW,EAAE,CAAC;IAC/C,IAAI,UAAU,KAAK,SAAS,IAAI,UAAU,KAAK,UAAU,IAAI,UAAU,KAAK,KAAK,EAAE,CAAC;QAClF,OAAO,UAAU,CAAC;IACpB,CAAC;IACD,OAAO,UAAU,CAAC;AACpB,CAAC;AAED,SAAS,oBAAoB,CAAC,KAAyB;IACrD,OAAO,mBAAmB,CAAC,GAAG,CAAC,CAAC,KAAK,IAAI,EAAE,CAAC,CAAC,IAAI,EAAE,CAAC,WAAW,EAAE,CAAC,CAAC;AACrE,CAAC;AAED,SAAS,kBAAkB,CAAC,KAAyB;IACnD,MAAM,OAAO,GAAG,KAAK,EAAE,IAAI,EAAE,IAAI,EAAE,CAAC;IACpC,OAAO,OAAO,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,OAAO,CAAC;AAChD,CAAC;AAED,SAAS,2BAA2B,CAAC,KAAyB;IAC5D,MAAM,UAAU,GAAG,KAAK,EAAE,IAAI,EAAE,CAAC;IACjC,OAAO,UAAU,IAAI,UAAU,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,UAAU,CAAC,CAAC,CAAC,SAAS,CAAC;AACtE,CAAC;AAED,SAAS,0BAA0B,CAAC,QAA4B,EAAE,EAAW;IAC3E,IAAI,MAAM,CAAC,QAAQ,CAAC,QAAQ,CAAC,EAAE,CAAC;QAC9B,OAAO,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,IAAI,CAAC,KAAK,CAAC,QAAQ,IAAI,CAAC,CAAC,CAAC,CAAC;IAChD,CAAC;IACD,OAAO,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;AACpB,CAAC;AAED,SAAS,+BAA+B,CAAC,MAIxC;IACC,IAAI,MAAM,CAAC,EAAE,EAAE,CAAC;QACd,OAAO,SAAS,CAAC;IACnB,CAAC;IACD,IAAI,OAAO,MAAM,CAAC,aAAa,KAAK,QAAQ,IAAI,MAAM,CAAC,aAAa,CAAC,IAAI,EAAE,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QACvF,OAAO,MAAM,CAAC,aAAa,CAAC;IAC9B,CAAC;IACD,IAAI,OAAO,MAAM,CAAC,SAAS,KAAK,QAAQ,IAAI,MAAM,CAAC,SAAS,CAAC,IAAI,EAAE,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QAC/E,OAAO,6BAA6B,CAAC,MAAM,CAAC,SAAS,CAAC,CAAC;IACzD,CAAC;IACD,OAAO,SAAS,CAAC;AACnB,CAAC;AAED,SAAS,6BAA6B,CAAC,aAA4B;IACjE,MAAM,QAAQ,GAAG,CAAC,OAAO,CAAC,GAAG,CAAC,+BAA+B,CAAC,IAAI,EAAE,CAAC,CAAC,IAAI,EAAE,CAAC,WAAW,EAAE,CAAC;IAC3F,IAAI,+BAA+B,CAAC,GAAG,CAAC,QAAQ,CAAC,EAAE,CAAC;QAClD,OAAO;YACL,cAAc,EAAE,QAAkC;YAClD,qBAAqB,EAAE,cAAc;SACtC,CAAC;IACJ,CAAC;IACD,MAAM,OAAO,GAAG,CAAC,OAAO,CAAC,GAAG,CAAC,QAAQ,IAAI,EAAE,CAAC,CAAC,IAAI,EAAE,CAAC,WAAW,EAAE,CAAC;IAClE,IAAI,OAAO,OAAO,CAAC,GAAG,CAAC,MAAM,KAAK,QAAQ,IAAI,OAAO,OAAO,CAAC,GAAG,CAAC,gBAAgB,KAAK,QAAQ,IAAI,OAAO,KAAK,MAAM,EAAE,CAAC;QACrH,OAAO;YACL,cAAc,EAAE,MAAM;YACtB,qBAAqB,EAAE,UAAU;SAClC,CAAC;IACJ,CAAC;IACD,MAAM,MAAM,GAAG,OAAO,CAAC,KAAK,CAAC,KAAK,KAAK,IAAI,IAAI,OAAO,CAAC,MAAM,CAAC,KAAK,KAAK,IAAI,CAAC;IAC7E,MAAM,EAAE,GAAG,oBAAoB,CAAC,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;IAChD,MAAM,cAAc,GAAG,aAAa,CAAC,IAAI,KAAK,IAAI,IAAI,aAAa,CAAC,KAAK,KAAK,IAAI,CAAC;IACnF,IAAI,MAAM,IAAI,EAAE,IAAI,cAAc,EAAE,CAAC;QACnC,OAAO;YACL,cAAc,EAAE,YAAY;YAC5B,qBAAqB,EAAE,UAAU;SAClC,CAAC;IACJ,CAAC;IACD,OAAO;QACL,cAAc,EAAE,MAAM;QACtB,qBAAqB,EAAE,UAAU;KAClC,CAAC;AACJ,CAAC;AAED,SAAS,sBAAsB,CAAC,cAAsB,EAAE,KAAa;IACnE,OAAO,MAAM,CAAC,UAAU,CAAC,QAAQ,CAAC,CAAC,MAAM,CAAC,GAAG,cAAc,IAAI,KAAK,EAAE,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;AACxF,CAAC;AAED,SAAS,gBAAgB,CAAC,KAAc,EAAE,KAAK,GAAG,CAAC;IACjD,IAAI,KAAK,KAAK,IAAI,IAAI,KAAK,KAAK,SAAS,EAAE,CAAC;QAC1C,OAAO,KAAK,CAAC;IACf,CAAC;IACD,IAAI,OAAO,KAAK,KAAK,QAAQ,IAAI,OAAO,KAAK,KAAK,QAAQ,IAAI,OAAO,KAAK,KAAK,SAAS,EAAE,CAAC;QACzF,OAAO,KAAK,CAAC;IACf,CAAC;IACD,IAAI,KAAK,IAAI,4BAA4B,EAAE,CAAC;QAC1C,OAAO,mBAAmB,CAAC;IAC7B,CAAC;IACD,IAAI,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,EAAE,CAAC;QACzB,OAAO,KAAK,CAAC,KAAK,CAAC,CAAC,EAAE,kCAAkC,CAAC,CAAC,GAAG,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,gBAAgB,CAAC,KAAK,EAAE,KAAK,GAAG,CAAC,CAAC,CAAC,CAAC;IAC/G,CAAC;IACD,IAAI,OAAO,KAAK,KAAK,QAAQ,EAAE,CAAC;QAC9B,MAAM,MAAM,GAAG,KAAgC,CAAC;QAChD,MAAM,UAAU,GAA4B,EAAE,CAAC;QAC/C,MAAM,UAAU,GAAG,MAAM,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,IAAI,CAAC,CAAC,IAAI,EAAE,KAAK,EAAE,EAAE,CAAC,IAAI,CAAC,aAAa,CAAC,KAAK,CAAC,CAAC,CAAC;QACxF,KAAK,MAAM,GAAG,IAAI,UAAU,EAAE,CAAC;YAC7B,UAAU,CAAC,GAAG,CAAC,GAAG,gBAAgB,CAAC,MAAM,CAAC,GAAG,CAAC,EAAE,KAAK,GAAG,CAAC,CAAC,CAAC;QAC7D,CAAC;QACD,OAAO,UAAU,CAAC;IACpB,CAAC;IACD,OAAO,MAAM,CAAC,KAAK,CAAC,CAAC;AACvB,CAAC;AAED,SAAS,kBAAkB,CAAC,cAAsB,EAAE,KAAc;IAChE,OAAO,sBAAsB,CAAC,cAAc,EAAE,IAAI,CAAC,SAAS,CAAC,gBAAgB,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;AACzF,CAAC;AAED,SAAS,eAAe,CAAC,cAAsB,EAAE,IAAc;IAC7D,OAAO;QACL,MAAM,EAAE,IAAI,CAAC,GAAG,CAAC,CAAC,GAAG,EAAE,EAAE,CAAC,sBAAsB,CAAC,cAAc,EAAE,GAAG,CAAC,CAAC;QACtE,MAAM,EAAE,sBAAsB,CAAC,cAAc,EAAE,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;KACpE,CAAC;AACJ,CAAC;AAED,SAAS,6BAA6B,CACpC,cAAsB,EACtB,OAAe,EACf,SAA6B,EAC7B,YAAgC;IAEhC,MAAM,iBAAiB,GAAG,cAAc,CAAC,YAAY,IAAI,EAAE,EAAE,UAAU,CAAC,CAAC;IACzE,MAAM,iBAAiB,GAAG,GAAG,OAAO,SAAS,SAAS,IAAI,eAAe,SAAS,iBAAiB,EAAE,CAAC;IACtG,OAAO,sBAAsB,CAAC,cAAc,EAAE,iBAAiB,CAAC,CAAC;AACnE,CAAC;AAED,SAAS,8BAA8B;IACrC,OAAO,4BAA4B,CAAC,GAAG,CAAC,CAAC,OAAO,CAAC,GAAG,CAAC,yBAAyB,CAAC,IAAI,EAAE,CAAC,CAAC,IAAI,EAAE,CAAC,WAAW,EAAE,CAAC,CAAC;AAC/G,CAAC;AAED,SAAS,yBAAyB;IAChC,IAAI,iCAAiC,CAAC,GAAG,CAAC,CAAC,OAAO,CAAC,GAAG,CAAC,8BAA8B,CAAC,IAAI,EAAE,CAAC,CAAC,IAAI,EAAE,CAAC,WAAW,EAAE,CAAC,EAAE,CAAC;QACpH,OAAO,IAAI,CAAC;IACd,CAAC;IAED,MAAM,cAAc,GAAG,CAAC,OAAO,CAAC,GAAG,CAAC,wBAAwB,CAAC,IAAI,EAAE,CAAC,CAAC,IAAI,EAAE,CAAC;IAC5E,IAAI,cAAc,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QAC9B,IAAI,CAAC;YACH,OAAO,IAAI,GAAG,CAAC,cAAc,CAAC,CAAC,QAAQ,EAAE,CAAC;QAC5C,CAAC;QAAC,MAAM,CAAC;YACP,OAAO,IAAI,CAAC;QACd,CAAC;IACH,CAAC;IAED,MAAM,YAAY,GAAG,CAAC,OAAO,CAAC,GAAG,CAAC,sBAAsB,CAAC,IAAI,EAAE,CAAC,CAAC,IAAI,EAAE,CAAC;IACxE,IAAI,YAAY,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QAC9B,OAAO,IAAI,CAAC;IACd,CAAC;IAED,IAAI,CAAC;QACH,MAAM,GAAG,GAAG,IAAI,GAAG,CAAC,YAAY,CAAC,CAAC;QAClC,MAAM,cAAc,GAAG,GAAG,CAAC,QAAQ,CAAC,OAAO,CAAC,MAAM,EAAE,EAAE,CAAC,CAAC;QACxD,IAAI,CAAC,cAAc,CAAC,QAAQ,CAAC,YAAY,CAAC,EAAE,CAAC;YAC3C,GAAG,CAAC,QAAQ,GAAG,GAAG,cAAc,CAAC,MAAM,KAAK,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,cAAc,YAAY,CAAC;QAClF,CAAC;QACD,OAAO,GAAG,CAAC,QAAQ,EAAE,CAAC;IACxB,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,IAAI,CAAC;IACd,CAAC;AACH,CAAC;AAED,SAAS,aAAa,CAAC,GAAW;IAChC,MAAM,QAAQ,GAAG,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;IACjC,MAAM,OAAO,GAAG,MAAM,CAAC,KAAK,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,GAAG,EAAE,CAAC,CAAC,CAAC,QAAQ,CAAC;IAC/D,OAAO,GAAG,MAAM,CAAC,OAAO,CAAC,GAAG,QAAU,EAAE,CAAC;AAC3C,CAAC;AAED,SAAS,mBAAmB,CAAC,GAAW,EAAE,KAAa;IACrD,OAAO;QACL,GAAG;QACH,KAAK,EAAE,EAAE,WAAW,EAAE,KAAK,EAAE;KAC9B,CAAC;AACJ,CAAC;AAED,SAAS,iBAAiB,CAAC,GAAW,EAAE,KAAc;IACpD,OAAO;QACL,GAAG;QACH,KAAK,EAAE,EAAE,SAAS,EAAE,KAAK,EAAE;KAC5B,CAAC;AACJ,CAAC;AAED,SAAS,gBAAgB,CAAC,GAAW,EAAE,KAAa;IAClD,OAAO;QACL,GAAG;QACH,KAAK,EAAE,EAAE,QAAQ,EAAE,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE;KAC5D,CAAC;AACJ,CAAC;AAED,KAAK,UAAU,mBAAmB,CAChC,aAAqC,EACrC,OAA0H,EAC1H,aAAqB,EACrB,UAAkB;IAElB,IACE,OAAO,aAAa,CAAC,oBAAoB,KAAK,QAAQ;QACtD,aAAa,CAAC,oBAAoB,CAAC,IAAI,EAAE,CAAC,MAAM,KAAK,CAAC;QACtD,OAAO,aAAa,CAAC,aAAa,KAAK,QAAQ;QAC/C,aAAa,CAAC,aAAa,CAAC,MAAM,KAAK,CAAC;QACxC,OAAO,aAAa,CAAC,YAAY,KAAK,QAAQ;QAC9C,aAAa,CAAC,YAAY,CAAC,MAAM,KAAK,CAAC,EACvC,CAAC;QACD,OAAO;IACT,CAAC;IAED,MAAM,oBAAoB,GAAG,cAAc,CAAC,CAAC,OAAO,CAAC,GAAG,CAAC,qBAAqB,CAAC,IAAI,EAAE,CAAC,CAAC,IAAI,EAAE,CAAC,CAAC;IAC/F,MAAM,WAAW,GAAG,oBAAoB,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,oBAAoB,CAAC,CAAC,CAAC,QAAQ,CAAC;IACtF,MAAM,kBAAkB,GAAG,0BAA0B,CAAC,OAAO,CAAC,SAAS,EAAE,OAAO,CAAC,EAAE,CAAC,CAAC;IACrF,MAAM,mBAAmB,GAAG,2BAA2B,CAAC,OAAO,CAAC,UAAU,CAAC,CAAC;IAC5E,MAAM,uBAAuB,GAAG,+BAA+B,CAAC;QAC9D,EAAE,EAAE,OAAO,CAAC,EAAE;QACd,SAAS,EAAE,mBAAmB;QAC9B,aAAa,EAAE,OAAO,CAAC,cAAc;KACtC,CAAC,CAAC;IACH,MAAM,UAAU,GAIZ;QACF,mBAAmB,CAAC,YAAY,EAAE,cAAc,CAAC,aAAa,CAAC,OAAO,CAAC,CAAC;QACxE,mBAAmB,CAAC,YAAY,EAAE,aAAa,CAAC,UAAU,CAAC;QAC3D,mBAAmB,CAAC,mBAAmB,EAAE,aAAa,CAAC,cAAc,CAAC;QACtE,mBAAmB,CAAC,0BAA0B,EAAE,aAAa,CAAC,qBAAqB,CAAC;QACpF,mBAAmB,CAAC,oBAAoB,EAAE,aAAa,CAAC,eAAe,CAAC;QACxE,mBAAmB,CAAC,eAAe,EAAE,kBAAkB,CAAC;QACxD,mBAAmB,CAAC,iBAAiB,EAAE,aAAa,CAAC,YAAY,CAAC;QAClE,mBAAmB,CAAC,aAAa,EAAE,aAAa,CAAC,QAAQ,CAAC;QAC1D,iBAAiB,CAAC,OAAO,EAAE,OAAO,CAAC,EAAE,CAAC;QACtC,gBAAgB,CAAC,cAAc,EAAE,kBAAkB,CAAC;QACpD,gBAAgB,CAAC,gBAAgB,EAAE,UAAU,CAAC;KAC/C,CAAC;IACF,IAAI,OAAO,mBAAmB,KAAK,QAAQ,EAAE,CAAC;QAC5C,UAAU,CAAC,IAAI,CAAC,mBAAmB,CAAC,eAAe,EAAE,mBAAmB,CAAC,CAAC,CAAC;IAC7E,CAAC;IACD,IAAI,OAAO,uBAAuB,KAAK,QAAQ,EAAE,CAAC;QAChD,UAAU,CAAC,IAAI,CAAC,mBAAmB,CAAC,mBAAmB,EAAE,uBAAuB,CAAC,CAAC,CAAC;IACrF,CAAC;IACD,IAAI,OAAO,OAAO,CAAC,KAAK,KAAK,QAAQ,IAAI,OAAO,CAAC,KAAK,CAAC,IAAI,EAAE,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QACzE,UAAU,CAAC,IAAI,CAAC,mBAAmB,CAAC,UAAU,EAAE,cAAc,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;IAClF,CAAC;IAED,MAAM,OAAO,GAAG;QACd,aAAa,EAAE;YACb;gBACE,QAAQ,EAAE;oBACR,UAAU,EAAE,CAAC,mBAAmB,CAAC,cAAc,EAAE,WAAW,CAAC,CAAC;iBAC/D;gBACD,UAAU,EAAE;oBACV;wBACE,KAAK,EAAE;4BACL,IAAI,EAAE,kBAAkB;4BACxB,OAAO,EAAE,GAAG;yBACb;wBACD,KAAK,EAAE;4BACL;gCACE,OAAO,EAAE,aAAa,CAAC,aAAa;gCACpC,MAAM,EAAE,aAAa,CAAC,YAAY;gCAClC,IAAI,EAAE,cAAc,cAAc,CAAC,aAAa,CAAC,OAAO,CAAC,EAAE;gCAC3D,IAAI,EAAE,CAAC;gCACP,iBAAiB,EAAE,aAAa,CAAC,aAAa,CAAC,UAAU,CAAC;gCAC1D,eAAe,EAAE,aAAa,CAAC,aAAa,CAAC;gCAC7C,UAAU;gCACV,MAAM,EAAE;oCACN,IAAI,EAAE,OAAO,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;oCACxB,OAAO,EAAE,OAAO,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,cAAc,CAAC,OAAO,CAAC,KAAK,IAAI,gBAAgB,CAAC;iCAC7E;6BACF;yBACF;qBACF;iBACF;aACF;SACF;KACF,CAAC;IAEF,MAAM,QAAQ,GAAG,MAAM,KAAK,CAAC,aAAa,CAAC,oBAAoB,EAAE;QAC/D,MAAM,EAAE,MAAM;QACd,OAAO,EAAE;YACP,cAAc,EAAE,kBAAkB;SACnC;QACD,IAAI,EAAE,IAAI,CAAC,SAAS,CAAC,OAAO,CAAC;QAC7B,MAAM,EAAE,WAAW,CAAC,OAAO,CAAC,yBAAyB,CAAC;KACvD,CAAC,CAAC;IACH,IAAI,CAAC,QAAQ,CAAC,EAAE,EAAE,CAAC;QACjB,MAAM,IAAI,KAAK,CAAC,0BAA0B,QAAQ,CAAC,MAAM,EAAE,CAAC,CAAC;IAC/D,CAAC;AACH,CAAC;AAED,SAAS,eAAe,CACtB,MAAe,EACf,eAA0D,UAAU;IAEpE,IAAI,MAAM,KAAK,IAAI,IAAI,MAAM,KAAK,SAAS,EAAE,CAAC;QAC5C,OAAO,EAAE,IAAI,EAAE,SAAS,EAAE,CAAC;IAC7B,CAAC;IACD,IAAI,OAAO,MAAM,KAAK,QAAQ,EAAE,CAAC;QAC/B,OAAO,EAAE,IAAI,EAAE,QAAQ,EAAE,KAAK,EAAE,cAAc,CAAC,MAAM,EAAE,YAAY,CAAC,EAAE,CAAC;IACzE,CAAC;IACD,IAAI,OAAO,MAAM,KAAK,QAAQ,IAAI,OAAO,MAAM,KAAK,SAAS,EAAE,CAAC;QAC9D,OAAO,EAAE,IAAI,EAAE,OAAO,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE,CAAC;IAChD,CAAC;IACD,IAAI,KAAK,CAAC,OAAO,CAAC,MAAM,CAAC,EAAE,CAAC;QAC1B,OAAO;YACL,IAAI,EAAE,OAAO;YACb,MAAM,EAAE,MAAM,CAAC,MAAM;YACrB,MAAM,EAAE,MAAM,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,aAAa,CAAC,KAAK,EAAE,SAAS,EAAE,YAAY,CAAC,CAAC;SACzF,CAAC;IACJ,CAAC;IACD,IAAI,OAAO,MAAM,KAAK,QAAQ,EAAE,CAAC;QAC/B,MAAM,MAAM,GAAG,MAAiC,CAAC;QACjD,MAAM,IAAI,GAAG,MAAM,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,IAAI,CAAC,CAAC,IAAI,EAAE,KAAK,EAAE,EAAE,CAAC,IAAI,CAAC,aAAa,CAAC,KAAK,CAAC,CAAC,CAAC;QAClF,MAAM,SAAS,GAA4B,EAAE,CAAC;QAC9C,IAAI,YAAY,GAAG,CAAC,CAAC;QACrB,KAAK,MAAM,GAAG,IAAI,IAAI,CAAC,KAAK,CAAC,CAAC,EAAE,EAAE,CAAC,EAAE,CAAC;YACpC,MAAM,cAAc,GAAG,aAAa,CAAC,MAAM,CAAC,GAAG,CAAC,EAAE,GAAG,EAAE,YAAY,CAAC,CAAC;YACrE,MAAM,SAAS,GAAG,IAAI,CAAC,SAAS,CAAC,cAAc,CAAC,EAAE,MAAM,IAAI,CAAC,CAAC;YAC9D,IAAI,YAAY,GAAG,SAAS,GAAG,kCAAkC,EAAE,CAAC;gBAClE,SAAS,CAAC,GAAG,CAAC,GAAG,qBAAqB,CAAC;gBACvC,MAAM;YACR,CAAC;YACD,YAAY,IAAI,SAAS,CAAC;YAC1B,SAAS,CAAC,GAAG,CAAC,GAAG,cAAc,CAAC;QAClC,CAAC;QACD,OAAO;YACL,IAAI,EAAE,QAAQ;YACd,SAAS,EAAE,IAAI,CAAC,MAAM;YACtB,YAAY,EAAE,IAAI,CAAC,KAAK,CAAC,CAAC,EAAE,EAAE,CAAC;YAC/B,OAAO,EAAE,SAAS;SACnB,CAAC;IACJ,CAAC;IACD,OAAO,EAAE,IAAI,EAAE,OAAO,MAAM,EAAE,KAAK,EAAE,MAAM,CAAC,MAAM,CAAC,EAAE,CAAC;AACxD,CAAC;AAED,SAAS,wBAAwB,CAAC,MAQjC;IACC,MAAM,EAAE,YAAY,EAAE,OAAO,EAAE,SAAS,EAAE,aAAa,EAAE,UAAU,EAAE,OAAO,EAAE,cAAc,EAAE,GAAG,MAAM,CAAC;IACxG,MAAM,eAAe,GAAG,8BAA8B,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC;IACxE,MAAM,UAAU,GAAG,eAAe,CAAC,cAAc,EAAE,OAAO,CAAC,IAAI,CAAC,CAAC;IACjE,MAAM,uBAAuB,GAAG,sBAAsB,CAAC,cAAc,EAAE,GAAG,OAAO,CAAC,OAAO,SAAS,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC;IACjI,MAAM,oBAAoB,GAAG,kBAAkB,CAAC,cAAc,EAAE,OAAO,CAAC,OAAO,CAAC,CAAC;IACjF,MAAM,mBAAmB,GAAG,kBAAkB,CAAC,cAAc,EAAE,OAAO,CAAC,MAAM,CAAC,CAAC;IAC/E,IAAI,YAAY,KAAK,SAAS,EAAE,CAAC;QAC/B,OAAO;YACL,aAAa,EAAE,YAAY;YAC3B,UAAU,EAAE,SAAS;YACrB,cAAc,EAAE,aAAa,CAAC,cAAc;YAC5C,qBAAqB,EAAE,aAAa,CAAC,qBAAqB;YAC1D,gBAAgB,EAAE,eAAe;YACjC,mBAAmB,EAAE,UAAU,CAAC,MAAM;YACtC,yBAAyB,EAAE,uBAAuB;YAClD,sBAAsB,EAAE,oBAAoB;YAC5C,qBAAqB,EAAE,mBAAmB;SAC3C,CAAC;IACJ,CAAC;IACD,OAAO;QACL,UAAU,EAAE,SAAS;QACrB,cAAc,EAAE,aAAa,CAAC,cAAc;QAC5C,qBAAqB,EAAE,aAAa,CAAC,qBAAqB;QAC1D,gBAAgB,EAAE,eAAe;QACjC,YAAY,EAAE,mBAAmB,CAAC,OAAO,CAAC,IAAI,EAAE,YAAY,CAAC;QAC7D,mBAAmB,EAAE,UAAU,CAAC,MAAM;QACtC,mBAAmB,EAAE,UAAU,CAAC,MAAM;QACtC,yBAAyB,EAAE,uBAAuB;QAClD,eAAe,EAAE,aAAa,CAAC,OAAO,CAAC,OAAO,EAAE,SAAS,EAAE,YAAY,CAA4B;QACnG,sBAAsB,EAAE,oBAAoB;QAC5C,cAAc,EAAE,aAAa,CAAC,OAAO,CAAC,MAAM,EAAE,SAAS,EAAE,YAAY,CAA4B;QACjG,qBAAqB,EAAE,mBAAmB;QAC1C,YAAY,EAAE,UAAU;QACxB,QAAQ,EAAE,OAAO;QACjB,aAAa,EAAE,YAAY;QAC3B,OAAO,EAAE;YACP,IAAI,EAAE,OAAO,CAAC,OAAO;YACrB,QAAQ,EAAE,OAAO,CAAC,QAAQ;YAC1B,IAAI,EAAE,OAAO,CAAC,IAAI;YAClB,aAAa,EAAE,sBAAsB,CAAC,cAAc,EAAE,EAAE,CAAC,QAAQ,EAAE,CAAC;YACpE,SAAS,EAAE,OAAO,CAAC,KAAK,CAAC,KAAK,KAAK,IAAI;YACvC,UAAU,EAAE,OAAO,CAAC,MAAM,CAAC,KAAK,KAAK,IAAI;SAC1C;KACF,CAAC;AACJ,CAAC;AAED,SAAS,yBAAyB,CAAC,MAelC;IACC,MAAM,EACJ,YAAY,EACZ,SAAS,EACT,aAAa,EACb,OAAO,EACP,UAAU,EACV,SAAS,EACT,OAAO,EACP,cAAc,EACd,eAAe,EACf,QAAQ,EACR,SAAS,EACT,aAAa,EACb,iBAAiB,EACjB,eAAe,GAChB,GAAG,MAAM,CAAC;IACX,MAAM,gBAAgB,GACpB,OAAO,CAAC,EAAE,KAAK,KAAK;QAClB,CAAC,CAAC,6BAA6B,CAAC,cAAc,EAAE,OAAO,EAAE,SAAS,EAAE,OAAO,CAAC,KAAK,CAAC;QAClF,CAAC,CAAC,SAAS,CAAC;IAChB,IAAI,YAAY,KAAK,SAAS,EAAE,CAAC;QAC/B,OAAO;YACL,aAAa,EAAE,YAAY;YAC3B,UAAU,EAAE,SAAS;YACrB,cAAc,EAAE,aAAa,CAAC,cAAc;YAC5C,qBAAqB,EAAE,aAAa,CAAC,qBAAqB;YAC1D,gBAAgB,EAAE,eAAe;YACjC,kBAAkB,EAAE,iBAAiB;YACrC,gBAAgB,EAAE,eAAe;YACjC,EAAE,EAAE,OAAO,CAAC,EAAE;YACd,SAAS,EAAE,QAAQ;YACnB,UAAU,EAAE,SAAS;YACrB,cAAc,EAAE,aAAa;YAC7B,KAAK,EAAE,OAAO,CAAC,KAAK,CAAC,CAAC,CAAC,cAAc,CAAC,OAAO,CAAC,KAAK,EAAE,UAAU,CAAC,CAAC,CAAC,CAAC,SAAS;YAC5E,iBAAiB,EAAE,gBAAgB;YACnC,WAAW,EAAE,UAAU;SACxB,CAAC;IACJ,CAAC;IACD,OAAO;QACL,aAAa,EAAE,YAAY;QAC3B,UAAU,EAAE,SAAS;QACrB,cAAc,EAAE,aAAa,CAAC,cAAc;QAC5C,qBAAqB,EAAE,aAAa,CAAC,qBAAqB;QAC1D,gBAAgB,EAAE,eAAe;QACjC,kBAAkB,EAAE,iBAAiB;QACrC,gBAAgB,EAAE,eAAe;QACjC,EAAE,EAAE,OAAO,CAAC,EAAE;QACd,SAAS,EAAE,QAAQ;QACnB,UAAU,EAAE,SAAS;QACrB,cAAc,EAAE,aAAa;QAC7B,KAAK,EAAE,OAAO,CAAC,KAAK,CAAC,CAAC,CAAC,cAAc,CAAC,OAAO,CAAC,KAAK,EAAE,YAAY,CAAC,CAAC,CAAC,CAAC,SAAS;QAC9E,iBAAiB,EAAE,gBAAgB;QACnC,WAAW,EAAE,UAAU;QACvB,UAAU,EAAE,SAAS;QACrB,cAAc,EAAE,eAAe,CAAC,OAAO,CAAC,MAAM,EAAE,YAAY,CAAC;KAC9D,CAAC;AACJ,CAAC;AAED,SAAS,wBAAwB,CAAC,MAiBjC;IACC,MAAM,EACJ,YAAY,EACZ,SAAS,EACT,aAAa,EACb,OAAO,EACP,eAAe,EACf,iBAAiB,EACjB,eAAe,EACf,IAAI,EACJ,OAAO,EACP,UAAU,EACV,OAAO,EACP,cAAc,EACd,SAAS,EACT,YAAY,EACZ,aAAa,EACb,QAAQ,GACT,GAAG,MAAM,CAAC;IACX,MAAM,kBAAkB,GAAG,eAAe,CAAC,cAAc,EAAE,IAAI,CAAC,CAAC;IACjE,MAAM,sBAAsB,GAAG,sBAAsB,CAAC,cAAc,EAAE,OAAO,CAAC,CAAC;IAC/E,MAAM,sBAAsB,GAAG,kBAAkB,CAAC,cAAc,EAAE,OAAO,CAAC,CAAC;IAC3E,MAAM,gBAAgB,GAAG,6BAA6B,CAAC,cAAc,EAAE,OAAO,EAAE,SAAS,EAAE,YAAY,CAAC,CAAC;IACzG,IAAI,YAAY,KAAK,SAAS,EAAE,CAAC;QAC/B,OAAO;YACL,aAAa,EAAE,YAAY;YAC3B,UAAU,EAAE,SAAS;YACrB,cAAc,EAAE,aAAa,CAAC,cAAc;YAC5C,qBAAqB,EAAE,aAAa,CAAC,qBAAqB;YAC1D,gBAAgB,EAAE,eAAe;YACjC,kBAAkB,EAAE,iBAAiB;YACrC,gBAAgB,EAAE,eAAe;YACjC,wBAAwB,EAAE,sBAAsB;YAChD,qBAAqB,EAAE,kBAAkB,CAAC,MAAM;YAChD,wBAAwB,EAAE,sBAAsB;YAChD,UAAU,EAAE,SAAS;YACrB,cAAc,EAAE,aAAa;YAC7B,SAAS,EAAE,QAAQ;YACnB,KAAK,EAAE,cAAc,CAAC,YAAY,EAAE,UAAU,CAAC;YAC/C,iBAAiB,EAAE,gBAAgB;SACpC,CAAC;IACJ,CAAC;IAED,OAAO;QACL,aAAa,EAAE,YAAY;QAC3B,UAAU,EAAE,SAAS;QACrB,cAAc,EAAE,aAAa,CAAC,cAAc;QAC5C,qBAAqB,EAAE,aAAa,CAAC,qBAAqB;QAC1D,gBAAgB,EAAE,eAAe;QACjC,kBAAkB,EAAE,iBAAiB;QACrC,gBAAgB,EAAE,eAAe;QACjC,iBAAiB,EAAE,cAAc,CAAC,OAAO,EAAE,YAAY,CAAC;QACxD,wBAAwB,EAAE,sBAAsB;QAChD,cAAc,EAAE,mBAAmB,CAAC,IAAI,EAAE,YAAY,CAAC;QACvD,qBAAqB,EAAE,kBAAkB,CAAC,MAAM;QAChD,qBAAqB,EAAE,kBAAkB,CAAC,MAAM;QAChD,iBAAiB,EAAE,aAAa,CAAC,OAAO,EAAE,SAAS,EAAE,YAAY,CAA4B;QAC7F,wBAAwB,EAAE,sBAAsB;QAChD,UAAU,EAAE,SAAS;QACrB,cAAc,EAAE,aAAa;QAC7B,SAAS,EAAE,QAAQ;QACnB,KAAK,EAAE,cAAc,CAAC,YAAY,EAAE,YAAY,CAAC;QACjD,iBAAiB,EAAE,gBAAgB;QACnC,YAAY,EAAE,UAAU;QACxB,QAAQ,EAAE,OAAO;QACjB,OAAO,EAAE;YACP,IAAI,EAAE,OAAO,CAAC,OAAO;YACrB,QAAQ,EAAE,OAAO,CAAC,QAAQ;YAC1B,IAAI,EAAE,OAAO,CAAC,IAAI;YAClB,aAAa,EAAE,sBAAsB,CAAC,cAAc,EAAE,EAAE,CAAC,QAAQ,EAAE,CAAC;YACpE,SAAS,EAAE,OAAO,CAAC,KAAK,CAAC,KAAK,KAAK,IAAI;YACvC,UAAU,EAAE,OAAO,CAAC,MAAM,CAAC,KAAK,KAAK,IAAI;SAC1C;KACF,CAAC;AACJ,CAAC;AAED,KAAK,UAAU,oBAAoB,CACjC,YAAoB;IAEpB,MAAM,QAAQ,GAAG,MAAM,YAAY,CAAC,YAAY,CAAC,CAAC;IAClD,IAAI,OAAO,GAAG,KAAK,CAAC;IACpB,IAAI,QAAQ,CAAC,SAAS,CAAC,eAAe,CAAC,IAAI,EAAE,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QAC3D,QAAQ,CAAC,SAAS,CAAC,eAAe,GAAG,MAAM,CAAC,UAAU,EAAE,CAAC;QACzD,OAAO,GAAG,IAAI,CAAC;IACjB,CAAC;IACD,IAAI,OAAO,EAAE,CAAC;QACZ,MAAM,aAAa,CAAC,YAAY,EAAE,QAAQ,EAAE,sBAAsB,CAAC,CAAC;IACtE,CAAC;IACD,OAAO;QACL,cAAc,EAAE,QAAQ,CAAC,SAAS,CAAC,eAAe;QAClD,QAAQ,EAAE,QAAQ,CAAC,SAAS,CAAC,QAAQ;QACrC,aAAa,EAAE,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,IAAI,CAAC,KAAK,CAAC,QAAQ,CAAC,SAAS,CAAC,cAAc,CAAC,CAAC;KAC1E,CAAC;AACJ,CAAC;AAED,KAAK,UAAU,qBAAqB,CAAC,YAAoB,EAAE,KAAqB;IAC9E,MAAM,MAAM,GAAyB;QACnC,KAAK;QACL,QAAQ,EAAE,CAAC;KACZ,CAAC;IACF,IAAI,UAAU,GAAG,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC,CAAC;IACxC,IAAI,UAAU,CAAC,MAAM,GAAG,yBAAyB,EAAE,CAAC;QAClD,MAAM,OAAO,GAAG,EAAE,GAAG,KAAK,EAAE,OAAO,EAAE,EAAE,GAAG,KAAK,CAAC,OAAO,EAAE,cAAc,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,MAAM,EAAE,uBAAuB,EAAE,cAAc,EAAE,UAAU,CAAC,MAAM,EAAE,EAAE,EAAE,CAAC;QACrK,MAAM,aAAa,GAAyB,EAAE,KAAK,EAAE,OAAO,EAAE,QAAQ,EAAE,CAAC,EAAE,CAAC;QAC5E,UAAU,GAAG,IAAI,CAAC,SAAS,CAAC,aAAa,CAAC,CAAC;IAC7C,CAAC;IACD,MAAM,gBAAgB,CAAC,SAAS,CAAC,YAAY,CAAC,EAAE,UAAU,CAAC,CAAC;AAC9D,CAAC;AAED,SAAS,eAAe,CAAC,GAAW;IAClC,MAAM,OAAO,GAA2B,EAAE,CAAC;IAC3C,KAAK,MAAM,IAAI,IAAI,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC;QACnC,MAAM,OAAO,GAAG,IAAI,CAAC,IAAI,EAAE,CAAC;QAC5B,IAAI,OAAO,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;YACzB,SAAS;QACX,CAAC;QACD,IAAI,CAAC;YACH,MAAM,MAAM,GAAG,IAAI,CAAC,KAAK,CAAC,OAAO,CAAyB,CAAC;YAC3D,IACE,MAAM;gBACN,OAAO,MAAM,KAAK,QAAQ;gBAC1B,MAAM,CAAC,KAAK;gBACZ,OAAO,MAAM,CAAC,KAAK,KAAK,QAAQ;gBAChC,OAAO,MAAM,CAAC,QAAQ,KAAK,QAAQ,EACnC,CAAC;gBACD,OAAO,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;YACvB,CAAC;QACH,CAAC;QAAC,MAAM,CAAC;YACP,2DAA2D;QAC7D,CAAC;IACH,CAAC;IACD,OAAO,OAAO,CAAC;AACjB,CAAC;AAED,SAAS,YAAY,CAAC,QAAgB;IACpC,MAAM,KAAK,GAAG,IAAI,CAAC,GAAG,CAAC,6BAA6B,GAAG,CAAC,IAAI,IAAI,CAAC,GAAG,CAAC,QAAQ,GAAG,CAAC,EAAE,CAAC,CAAC,EAAE,4BAA4B,CAAC,CAAC;IACrH,OAAO,IAAI,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,GAAG,KAAK,CAAC,CAAC,WAAW,EAAE,CAAC;AACpD,CAAC;AAED,SAAS,aAAa,CAAC,KAA2B;IAChD,IAAI,OAAO,KAAK,CAAC,kBAAkB,KAAK,QAAQ,IAAI,KAAK,CAAC,kBAAkB,CAAC,IAAI,EAAE,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QACjG,OAAO,IAAI,CAAC;IACd,CAAC;IACD,MAAM,OAAO,GAAG,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,kBAAkB,CAAC,CAAC;IACrD,IAAI,MAAM,CAAC,KAAK,CAAC,OAAO,CAAC,EAAE,CAAC;QAC1B,OAAO,IAAI,CAAC;IACd,CAAC;IACD,OAAO,OAAO,IAAI,IAAI,CAAC,GAAG,EAAE,CAAC;AAC/B,CAAC;AAED,SAAS,iBAAiB,CAAC,aAAqB;IAC9C,MAAM,cAAc,GAAG,MAAM,CAAC,QAAQ,CAAC,aAAa,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,IAAI,CAAC,KAAK,CAAC,aAAa,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;IACnG,OAAO,IAAI,CAAC,GAAG,EAAE,GAAG,cAAc,GAAG,oBAAoB,CAAC;AAC5D,CAAC;AAED,SAAS,mBAAmB,CAAC,KAA2B,EAAE,QAAgB;IACxE,MAAM,UAAU,GAAG,KAAK,CAAC,KAAK,EAAE,WAAW,CAAC;IAC5C,IAAI,OAAO,UAAU,KAAK,QAAQ,IAAI,UAAU,CAAC,IAAI,EAAE,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QACrE,OAAO,KAAK,CAAC;IACf,CAAC;IACD,MAAM,YAAY,GAAG,IAAI,CAAC,KAAK,CAAC,UAAU,CAAC,CAAC;IAC5C,IAAI,MAAM,CAAC,KAAK,CAAC,YAAY,CAAC,EAAE,CAAC;QAC/B,OAAO,KAAK,CAAC;IACf,CAAC;IACD,OAAO,YAAY,GAAG,QAAQ,CAAC;AACjC,CAAC;AAED,SAAS,wBAAwB,CAC/B,OAA+B,EAC/B,aAAqB;IAErB,MAAM,QAAQ,GAAG,iBAAiB,CAAC,aAAa,CAAC,CAAC;IAClD,MAAM,QAAQ,GAA2B,EAAE,CAAC;IAC5C,IAAI,WAAW,GAAG,CAAC,CAAC;IACpB,KAAK,MAAM,KAAK,IAAI,OAAO,EAAE,CAAC;QAC5B,MAAM,cAAc,GAAG,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,CAAC,MAAM,CAAC;QACpD,MAAM,SAAS,GAAG,cAAc,GAAG,yBAAyB,CAAC;QAC7D,IAAI,SAAS,IAAI,mBAAmB,CAAC,KAAK,EAAE,QAAQ,CAAC,IAAI,KAAK,CAAC,QAAQ,IAAI,kCAAkC,EAAE,CAAC;YAC9G,WAAW,IAAI,CAAC,CAAC;YACjB,SAAS;QACX,CAAC;QACD,QAAQ,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;IACvB,CAAC;IACD,OAAO,EAAE,OAAO,EAAE,QAAQ,EAAE,WAAW,EAAE,CAAC;AAC5C,CAAC;AAED,KAAK,UAAU,YAAY,CAAC,YAAoB,EAAE,OAA+B;IAC/E,MAAM,UAAU,GAAG,OAAO,CAAC,GAAG,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;IAC5E,MAAM,eAAe,CAAC,SAAS,CAAC,YAAY,CAAC,EAAE,UAAU,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,UAAU,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC;AACjG,CAAC;AAED,KAAK,UAAU,UAAU,CAAC,YAAoB,EAAE,QAAgB,EAAE,aAAqB;IACrF,MAAM,kBAAkB,GAAG,QAAQ,CAAC,IAAI,EAAE,CAAC;IAC3C,IAAI,kBAAkB,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QACpC,OAAO;IACT,CAAC;IACD,MAAM,GAAG,GAAG,MAAM,gBAAgB,CAAC,SAAS,CAAC,YAAY,CAAC,CAAC,CAAC;IAC5D,IAAI,GAAG,KAAK,IAAI,IAAI,GAAG,CAAC,IAAI,EAAE,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QAC5C,MAAM,iBAAiB,CAAC,YAAY,EAAE;YACpC,QAAQ,EAAE,kBAAkB;YAC5B,aAAa,EAAE,CAAC;SACjB,CAAC,CAAC;QACH,OAAO;IACT,CAAC;IACD,MAAM,YAAY,GAAG,eAAe,CAAC,GAAG,CAAC,CAAC;IAC1C,IAAI,YAAY,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QAC9B,MAAM,iBAAiB,CAAC,YAAY,EAAE;YACpC,QAAQ,EAAE,kBAAkB;YAC5B,aAAa,EAAE,CAAC;SACjB,CAAC,CAAC;QACH,OAAO;IACT,CAAC;IACD,MAAM,EAAE,OAAO,EAAE,eAAe,EAAE,WAAW,EAAE,GAAG,wBAAwB,CAAC,YAAY,EAAE,aAAa,CAAC,CAAC;IACxG,IAAI,eAAe,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QACjC,IAAI,WAAW,GAAG,CAAC,EAAE,CAAC;YACpB,MAAM,YAAY,CAAC,YAAY,EAAE,EAAE,CAAC,CAAC;QACvC,CAAC;QACD,MAAM,iBAAiB,CAAC,YAAY,EAAE;YACpC,QAAQ,EAAE,kBAAkB;YAC5B,aAAa,EAAE,CAAC;SACjB,CAAC,CAAC;QACH,OAAO;IACT,CAAC;IACD,MAAM,UAAU,GAAG,eAAe,CAAC,MAAM,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,aAAa,CAAC,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,EAAE,0BAA0B,CAAC,CAAC;IAChH,IAAI,UAAU,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QAC5B,IAAI,WAAW,GAAG,CAAC,EAAE,CAAC;YACpB,MAAM,YAAY,CAAC,YAAY,EAAE,eAAe,CAAC,CAAC;QACpD,CAAC;QACD,MAAM,iBAAiB,CAAC,YAAY,EAAE;YACpC,QAAQ,EAAE,kBAAkB;YAC5B,aAAa,EAAE,eAAe,CAAC,MAAM;SACtC,CAAC,CAAC;QACH,OAAO;IACT,CAAC;IACD,MAAM,MAAM,GAAG,IAAI,GAAG,CAAC,UAAU,CAAC,GAAG,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,KAAK,CAAC,KAAK,CAAC,QAAQ,CAAC,CAAC,CAAC;IACxE,MAAM,WAAW,GAAG,MAAM,EAAE,CAAC;IAC7B,MAAM,cAAc,GAA2B;QAC7C,cAAc,EAAE,kBAAkB;KACnC,CAAC;IACF,MAAM,SAAS,GAAG,OAAO,CAAC,GAAG,CAAC,uBAAuB,EAAE,IAAI,EAAE,CAAC;IAC9D,IAAI,SAAS,EAAE,CAAC;QACd,cAAc,CAAC,oBAAoB,CAAC,GAAG,SAAS,CAAC;IACnD,CAAC;IAED,IAAI,CAAC;QACH,MAAM,QAAQ,GAAG,MAAM,KAAK,CAAC,kBAAkB,EAAE;YAC/C,MAAM,EAAE,MAAM;YACd,OAAO,EAAE,cAAc;YACvB,IAAI,EAAE,IAAI,CAAC,SAAS,CAAC;gBACnB,cAAc,EAAE,wBAAwB;gBACxC,MAAM,EAAE,UAAU,CAAC,GAAG,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,KAAK,CAAC,KAAK,CAAC;aAC/C,CAAC;YACF,MAAM,EAAE,WAAW,CAAC,OAAO,CAAC,yBAAyB,CAAC;SACvD,CAAC,CAAC;QACH,IAAI,CAAC,QAAQ,CAAC,EAAE,EAAE,CAAC;YACjB,MAAM,IAAI,KAAK,CAAC,wBAAwB,QAAQ,CAAC,MAAM,EAAE,CAAC,CAAC;QAC7D,CAAC;QACD,MAAM,SAAS,GAAG,eAAe,CAAC,MAAM,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC,KAAK,CAAC,KAAK,CAAC,QAAQ,CAAC,CAAC,CAAC;QACvF,MAAM,YAAY,CAAC,YAAY,EAAE,SAAS,CAAC,CAAC;QAC5C,MAAM,iBAAiB,CAAC,YAAY,EAAE;YACpC,QAAQ,EAAE,kBAAkB;YAC5B,aAAa,EAAE,SAAS,CAAC,MAAM;YAC/B,uBAAuB,EAAE,WAAW;YACpC,wBAAwB,EAAE,WAAW;YACrC,oBAAoB,EAAE,SAAS;YAC/B,uBAAuB,EAAE,SAAS;SACnC,CAAC,CAAC;IACL,CAAC;IAAC,OAAO,KAAc,EAAE,CAAC;QACxB,MAAM,OAAO,GAAG,eAAe,CAAC,GAAG,CAAC,CAAC,KAAK,EAAE,EAAE;YAC5C,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,KAAK,CAAC,KAAK,CAAC,QAAQ,CAAC,EAAE,CAAC;gBACtC,OAAO,KAAK,CAAC;YACf,CAAC;YACD,MAAM,QAAQ,GAAG,KAAK,CAAC,QAAQ,GAAG,CAAC,CAAC;YACpC,OAAO;gBACL,GAAG,KAAK;gBACR,QAAQ;gBACR,eAAe,EAAE,WAAW;gBAC5B,kBAAkB,EAAE,YAAY,CAAC,QAAQ,CAAC;aAC3C,CAAC;QACJ,CAAC,CAAC,CAAC;QACH,MAAM,YAAY,CAAC,YAAY,EAAE,OAAO,CAAC,CAAC;QAC1C,MAAM,YAAY,GAAG,CAAC,GAAG,EAAE;YACzB,IAAI,KAAK,YAAY,KAAK,EAAE,CAAC;gBAC3B,OAAO,cAAc,CAAC,KAAK,CAAC,OAAO,EAAE,UAAU,CAAC,CAAC;YACnD,CAAC;YACD,OAAO,wBAAwB,CAAC;QAClC,CAAC,CAAC,EAAE,CAAC;QACL,MAAM,iBAAiB,CAAC,YAAY,EAAE;YACpC,QAAQ,EAAE,kBAAkB;YAC5B,aAAa,EAAE,OAAO,CAAC,MAAM;YAC7B,uBAAuB,EAAE,WAAW;YACpC,oBAAoB,EAAE,WAAW;YACjC,uBAAuB,EAAE,YAAY;SACtC,CAAC,CAAC;IACL,CAAC;AACH,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,qBAAqB,CAAC,OAAgC;IAC1E,IAAI,8BAA8B,EAAE,EAAE,CAAC;QACrC,OAAO,IAAI,CAAC;IACd,CAAC;IACD,IAAI,CAAC;QACH,MAAM,YAAY,GAAG,mBAAmB,CAAC,OAAO,CAAC,GAAG,EAAE,CAAC,CAAC;QACxD,MAAM,QAAQ,GAAG,MAAM,YAAY,CAAC,YAAY,CAAC,CAAC;QAClD,IAAI,CAAC,QAAQ,CAAC,SAAS,CAAC,OAAO,EAAE,CAAC;YAChC,OAAO,IAAI,CAAC;QACd,CAAC;QACD,MAAM,YAAY,GAAG,qBAAqB,CAAC,QAAQ,CAAC,SAAS,CAAC,aAAa,CAAC,CAAC;QAC7E,MAAM,EAAE,cAAc,EAAE,QAAQ,EAAE,aAAa,EAAE,GAAG,MAAM,oBAAoB,CAAC,YAAY,CAAC,CAAC;QAC7F,MAAM,SAAS,GAAG,kBAAkB,CAAC,OAAO,CAAC,UAAU,CAAC,CAAC;QACzD,MAAM,aAAa,GAAG,6BAA6B,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC;QACpE,MAAM,UAAU,GAAG,sBAAsB,CAAC,cAAc,EAAE,OAAO,CAAC,OAAO,CAAC,CAAC;QAC3E,MAAM,OAAO,GAAG,sBAAsB,CAAC,cAAc,EAAE,OAAO,CAAC,GAAG,EAAE,CAAC,CAAC;QACtE,MAAM,kBAAkB,GAAG,yBAAyB,EAAE,CAAC;QACvD,MAAM,UAAU,GAAG,MAAM,EAAE,CAAC;QAC5B,MAAM,KAAK,GAAmB;YAC5B,cAAc,EAAE,wBAAwB;YACxC,QAAQ,EAAE,MAAM,CAAC,UAAU,EAAE;YAC7B,UAAU,EAAE,eAAe;YAC3B,WAAW,EAAE,UAAU;YACvB,eAAe,EAAE,cAAc;YAC/B,UAAU,EAAE,kBAAkB;YAC9B,OAAO,EAAE,OAAO,CAAC,OAAO;YACxB,OAAO,EAAE,wBAAwB,CAAC;gBAChC,YAAY;gBACZ,OAAO;gBACP,SAAS;gBACT,aAAa;gBACb,UAAU;gBACV,OAAO;gBACP,cAAc;aACf,CAAC;SACH,CAAC;QACF,MAAM,qBAAqB,CAAC,YAAY,EAAE,KAAK,CAAC,CAAC;QACjD,iBAAiB,GAAG,UAAU,CAAC,YAAY,EAAE,QAAQ,EAAE,aAAa,CAAC,CAAC,KAAK,CAAC,GAAG,EAAE,GAAE,CAAC,CAAC,CAAC;QACtF,MAAM,eAAe,GAAG,8BAA8B,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC;QACxE,OAAO;YACL,UAAU,EAAE,UAAU;YACtB,aAAa,EAAE,IAAI,CAAC,GAAG,EAAE;YACzB,OAAO,EAAE,OAAO,CAAC,OAAO;YACxB,gBAAgB,EAAE,eAAe;YACjC,UAAU,EAAE,SAAS;YACrB,cAAc,EAAE,aAAa,CAAC,cAAc;YAC5C,qBAAqB,EAAE,aAAa,CAAC,qBAAqB;YAC1D,eAAe,EAAE,cAAc;YAC/B,YAAY,EAAE,UAAU;YACxB,QAAQ,EAAE,OAAO;YACjB,QAAQ;YACR,cAAc,EAAE,aAAa;YAC7B,cAAc,EAAE,YAAY;YAC5B,aAAa,EAAE,YAAY;YAC3B,oBAAoB,EAAE,kBAAkB,IAAI,SAAS;YACrD,aAAa,EAAE,kBAAkB,CAAC,CAAC,CAAC,MAAM,CAAC,WAAW,CAAC,EAAE,CAAC,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,SAAS;YACtF,YAAY,EAAE,kBAAkB,CAAC,CAAC,CAAC,MAAM,CAAC,WAAW,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,SAAS;SACrF,CAAC;IACJ,CAAC;IAAC,MAAM,CAAC;QACP,gDAAgD;QAChD,OAAO,IAAI,CAAC;IACd,CAAC;AACH,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,sBAAsB,CAC1C,aAA4C,EAC5C,OAAgC;IAEhC,IAAI,CAAC,aAAa,EAAE,CAAC;QACnB,OAAO;IACT,CAAC;IACD,IAAI,CAAC;QACH,MAAM,UAAU,GAAG,MAAM,EAAE,CAAC;QAC5B,MAAM,UAAU,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,IAAI,CAAC,GAAG,EAAE,GAAG,aAAa,CAAC,aAAa,CAAC,CAAC;QACzE,MAAM,mBAAmB,GAAG,2BAA2B,CACrD,uBAAuB,CAAC;YACtB,EAAE,EAAE,OAAO,CAAC,EAAE;YACd,SAAS,EAAE,OAAO,CAAC,UAAU;YAC7B,YAAY,EAAE,OAAO,CAAC,KAAK;YAC3B,QAAQ,EAAE,OAAO,CAAC,SAAS;SAC5B,CAAC,CACH,CAAC;QACF,MAAM,uBAAuB,GAAG,+BAA+B,CAAC;YAC9D,EAAE,EAAE,OAAO,CAAC,EAAE;YACd,SAAS,EAAE,mBAAmB;YAC9B,aAAa,EAAE,OAAO,CAAC,cAAc;SACtC,CAAC,CAAC;QACH,MAAM,kBAAkB,GAAG,0BAA0B,CAAC,OAAO,CAAC,SAAS,EAAE,OAAO,CAAC,EAAE,CAAC,CAAC;QACrF,MAAM,iBAAiB,GACrB,OAAO,CAAC,kBAAkB;YAC1B,gCAAgC,CAAC;gBAC/B,EAAE,EAAE,OAAO,CAAC,EAAE;gBACd,SAAS,EAAE,mBAAmB;gBAC9B,aAAa,EAAE,uBAAuB;aACvC,CAAC,CAAC;QACL,MAAM,eAAe,GAAG,OAAO,CAAC,gBAAgB,IAAI,SAAS,CAAC;QAC9D,MAAM,KAAK,GAAmB;YAC5B,cAAc,EAAE,wBAAwB;YACxC,QAAQ,EAAE,MAAM,CAAC,UAAU,EAAE;YAC7B,UAAU,EAAE,gBAAgB;YAC5B,WAAW,EAAE,UAAU;YACvB,eAAe,EAAE,aAAa,CAAC,eAAe;YAC9C,UAAU,EAAE,kBAAkB;YAC9B,OAAO,EAAE,aAAa,CAAC,OAAO;YAC9B,OAAO,EAAE,yBAAyB,CAAC;gBACjC,YAAY,EAAE,aAAa,CAAC,aAAa;gBACzC,SAAS,EAAE,aAAa,CAAC,UAAU;gBACnC,aAAa,EAAE;oBACb,cAAc,EAAE,aAAa,CAAC,cAAc;oBAC5C,qBAAqB,EAAE,aAAa,CAAC,qBAAqB;iBAC3D;gBACD,OAAO;gBACP,UAAU;gBACV,SAAS,EAAE,aAAa,CAAC,UAAU;gBACnC,OAAO,EAAE,aAAa,CAAC,OAAO;gBAC9B,cAAc,EAAE,aAAa,CAAC,eAAe;gBAC7C,eAAe,EAAE,aAAa,CAAC,gBAAgB;gBAC/C,QAAQ,EAAE,kBAAkB;gBAC5B,SAAS,EAAE,mBAAmB;gBAC9B,aAAa,EAAE,uBAAuB;gBACtC,iBAAiB;gBACjB,eAAe;aAChB,CAAC;SACH,CAAC;QACF,MAAM,qBAAqB,CAAC,aAAa,CAAC,cAAc,EAAE,KAAK,CAAC,CAAC;QACjE,iBAAiB,GAAG,UAAU,CAAC,aAAa,CAAC,cAAc,EAAE,aAAa,CAAC,QAAQ,EAAE,aAAa,CAAC,cAAc,CAAC,CAAC,KAAK,CAAC,GAAG,EAAE,GAAE,CAAC,CAAC,CAAC;QACnI,KAAK,mBAAmB,CACtB,aAAa,EACb;YACE,GAAG,OAAO;YACV,SAAS,EAAE,kBAAkB;YAC7B,UAAU,EAAE,mBAAmB;YAC/B,cAAc,EAAE,uBAAuB;SACxC,EACD,UAAU,EACV,UAAU,CACX,CAAC,KAAK,CAAC,GAAG,EAAE,GAAE,CAAC,CAAC,CAAC;IACpB,CAAC;IAAC,MAAM,CAAC;QACP,gDAAgD;IAClD,CAAC;AACH,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,uBAAuB,CAAC,OAAmC;IAC/E,IAAI,8BAA8B,EAAE,EAAE,CAAC;QACrC,OAAO;IACT,CAAC;IACD,IAAI,CAAC;QACH,MAAM,YAAY,GAAG,mBAAmB,CAAC,OAAO,CAAC,GAAG,EAAE,CAAC,CAAC;QACxD,MAAM,QAAQ,GAAG,MAAM,YAAY,CAAC,YAAY,CAAC,CAAC;QAClD,IAAI,CAAC,QAAQ,CAAC,SAAS,CAAC,OAAO,EAAE,CAAC;YAChC,OAAO;QACT,CAAC;QACD,MAAM,YAAY,GAAG,qBAAqB,CAAC,QAAQ,CAAC,SAAS,CAAC,aAAa,CAAC,CAAC;QAC7E,MAAM,EAAE,cAAc,EAAE,QAAQ,EAAE,aAAa,EAAE,GAAG,MAAM,oBAAoB,CAAC,YAAY,CAAC,CAAC;QAC7F,MAAM,SAAS,GAAG,kBAAkB,CAAC,OAAO,CAAC,UAAU,CAAC,CAAC;QACzD,MAAM,aAAa,GAAG,6BAA6B,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC;QACpE,MAAM,UAAU,GAAG,sBAAsB,CAAC,cAAc,EAAE,OAAO,CAAC,OAAO,CAAC,CAAC;QAC3E,MAAM,OAAO,GAAG,sBAAsB,CAAC,cAAc,EAAE,OAAO,CAAC,GAAG,EAAE,CAAC,CAAC;QACtE,MAAM,UAAU,GAAG,MAAM,EAAE,CAAC;QAC5B,MAAM,mBAAmB,GACvB,2BAA2B,CACzB,uBAAuB,CAAC;YACtB,EAAE,EAAE,KAAK;YACT,SAAS,EAAE,OAAO,CAAC,UAAU;YAC7B,YAAY,EAAE,OAAO,CAAC,aAAa;YACnC,QAAQ,EAAE,OAAO,CAAC,SAAS;SAC5B,CAAC,CACH,IAAI,eAAe,CAAC;QACvB,MAAM,uBAAuB,GAC3B,OAAO,CAAC,cAAc,IAAI,6BAA6B,CAAC,mBAAmB,CAAC,CAAC;QAC/E,MAAM,kBAAkB,GAAG,0BAA0B,CAAC,OAAO,CAAC,SAAS,EAAE,KAAK,CAAC,CAAC;QAChF,MAAM,iBAAiB,GAAG,OAAO,CAAC,OAAO,CAAC,IAAI,EAAE,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC,CAAC,WAAW,CAAC;QAC5F,MAAM,eAAe,GAAG,8BAA8B,CAAC,iBAAiB,CAAC,CAAC;QAC1E,MAAM,iBAAiB,GACrB,OAAO,CAAC,kBAAkB;YAC1B,gCAAgC,CAAC;gBAC/B,EAAE,EAAE,KAAK;gBACT,SAAS,EAAE,mBAAmB;gBAC9B,aAAa,EAAE,uBAAuB;aACvC,CAAC,CAAC;QACL,MAAM,eAAe,GAAG,OAAO,CAAC,gBAAgB,IAAI,SAAS,CAAC;QAE9D,MAAM,KAAK,GAAmB;YAC5B,cAAc,EAAE,wBAAwB;YACxC,QAAQ,EAAE,MAAM,CAAC,UAAU,EAAE;YAC7B,UAAU,EAAE,eAAe;YAC3B,WAAW,EAAE,UAAU;YACvB,eAAe,EAAE,cAAc;YAC/B,UAAU,EAAE,kBAAkB;YAC9B,OAAO,EAAE,cAAc,CAAC,iBAAiB,EAAE,UAAU,CAAC;YACtD,OAAO,EAAE,wBAAwB,CAAC;gBAChC,YAAY;gBACZ,SAAS;gBACT,aAAa;gBACb,OAAO,EAAE,iBAAiB;gBAC1B,eAAe;gBACf,iBAAiB;gBACjB,eAAe;gBACf,IAAI,EAAE,OAAO,CAAC,IAAI;gBAClB,OAAO,EAAE,OAAO,CAAC,OAAO;gBACxB,UAAU;gBACV,OAAO;gBACP,cAAc;gBACd,SAAS,EAAE,mBAAmB;gBAC9B,aAAa,EAAE,uBAAuB;gBACtC,QAAQ,EAAE,kBAAkB;gBAC5B,YAAY,EAAE,OAAO,CAAC,aAAa;aACpC,CAAC;SACH,CAAC;QACF,MAAM,qBAAqB,CAAC,YAAY,EAAE,KAAK,CAAC,CAAC;QACjD,iBAAiB,GAAG,UAAU,CAAC,YAAY,EAAE,QAAQ,EAAE,aAAa,CAAC,CAAC,KAAK,CAAC,GAAG,EAAE,GAAE,CAAC,CAAC,CAAC;IACxF,CAAC;IAAC,MAAM,CAAC;QACP,gDAAgD;IAClD,CAAC;AACH,CAAC","sourcesContent":["import crypto from \"node:crypto\";\nimport os from \"node:os\";\nimport path from \"node:path\";\nimport type { GlobalOptions } from \"../shared/command-types.js\";\nimport { appendLineAtomic, readFileIfExists, writeFileAtomic } from \"../fs/fs-utils.js\";\nimport { resolveTelemetryErrorCategory, type TelemetryErrorCategory } from \"../shared/constants.js\";\nimport { nowIso } from \"../shared/time.js\";\nimport { resolveGlobalPmRoot } from \"../store/paths.js\";\nimport { readSettings, writeSettings } from \"../store/settings.js\";\nimport {\n deriveTelemetryCommandResolution,\n deriveTelemetryCommandTaxonomy,\n inferTelemetryErrorCode,\n type TelemetryCommandResolution,\n type TelemetryCommandTaxonomy,\n type TelemetryResolutionStage,\n} from \"./observability.js\";\n\nconst TELEMETRY_QUEUE_RELATIVE_PATH = path.join(\"runtime\", \"telemetry\", \"events.jsonl\");\nconst TELEMETRY_STATE_RELATIVE_PATH = path.join(\"runtime\", \"telemetry\", \"state.json\");\nconst TELEMETRY_SCHEMA_VERSION = 1;\nconst TELEMETRY_FLUSH_BATCH_SIZE = 100;\nconst TELEMETRY_MAX_RETRY_DELAY_MS = 3_600_000;\nconst TELEMETRY_RETRY_BASE_DELAY_MS = 30_000;\nconst TELEMETRY_HTTP_TIMEOUT_MS = 5_000;\nconst MILLISECONDS_PER_DAY = 86_400_000;\nconst TELEMETRY_MAX_EVENT_BYTES = 65_536;\nconst TELEMETRY_SANITIZE_MAX_DEPTH = 6;\nconst TELEMETRY_SANITIZE_MAX_ARRAY_ITEMS = 20;\nconst TELEMETRY_MAX_QUEUE_ENTRY_ATTEMPTS = 15;\nconst TELEMETRY_RESULT_PREVIEW_MAX_BYTES = 8_192;\nconst OTEL_TRACES_ENDPOINT_ENV = \"OTEL_EXPORTER_OTLP_TRACES_ENDPOINT\";\nconst OTEL_BASE_ENDPOINT_ENV = \"OTEL_EXPORTER_OTLP_ENDPOINT\";\nconst OTEL_SERVICE_NAME_ENV = \"OTEL_SERVICE_NAME\";\nconst PM_TELEMETRY_DISABLED_ENV = \"PM_TELEMETRY_DISABLED\";\nconst PM_TELEMETRY_DISABLED_VALUES = new Set([\"1\", \"true\", \"yes\", \"on\"]);\nconst PM_TELEMETRY_OTEL_DISABLED_ENV = \"PM_TELEMETRY_OTEL_DISABLED\";\nconst PM_TELEMETRY_OTEL_DISABLED_VALUES = new Set([\"1\", \"true\", \"yes\", \"on\"]);\nconst PM_TELEMETRY_SOURCE_CONTEXT_ENV = \"PM_TELEMETRY_SOURCE_CONTEXT\";\nconst PM_TELEMETRY_SOURCE_CONTEXT_VALUES = [\"user\", \"automation\", \"test\", \"dogfood\", \"audit_smoke\"] as const;\n\nlet _lastFlushPromise: Promise<void> = Promise.resolve();\n\n/** Wait for the most recent background flush to settle. Test-only helper. */\nexport function waitForPendingFlush(): Promise<void> {\n return _lastFlushPromise;\n}\nconst PM_TELEMETRY_SOURCE_CONTEXT_SET = new Set<string>(PM_TELEMETRY_SOURCE_CONTEXT_VALUES);\nconst BOOLEAN_TRUE_VALUES = new Set([\"1\", \"true\", \"yes\", \"on\"]);\nconst PROCESS_SESSION_ID = crypto.randomUUID();\n\nconst SENSITIVE_KEYWORDS = [\n \"token\",\n \"secret\",\n \"password\",\n \"passwd\",\n \"api_key\",\n \"apikey\",\n \"authorization\",\n \"cookie\",\n \"session\",\n \"credentials\",\n \"bearer\",\n] as const;\nconst SENSITIVE_INLINE_KEY_PATTERN =\n \"(?:token|secret|password|passwd|api[_-]?key|apikey|authorization|cookie|session|credentials|bearer)\";\nconst INLINE_SENSITIVE_ASSIGNMENT_PATTERN = new RegExp(\n `\\\\b(${SENSITIVE_INLINE_KEY_PATTERN})\\\\s*([:=])\\\\s*([^\\\\s,;]+)`,\n \"giu\",\n);\nconst INLINE_SENSITIVE_FLAG_PATTERN = new RegExp(\n `(--${SENSITIVE_INLINE_KEY_PATTERN})(=|\\\\s+)([^\\\\s,;]+)`,\n \"giu\",\n);\nconst ABSOLUTE_PATH_TOKEN_PATTERN = /(^|[\\s\"'`(=])\\/(?:[^\\s\"'`),;]+)/g;\nconst EMAIL_PATTERN = /[A-Z0-9._%+-]+@[A-Z0-9.-]+\\.[A-Z]{2,}/giu;\nconst BEARER_TOKEN_PATTERN = /bearer\\s+[a-z0-9._=-]+/giu;\nconst PRIVATE_IP_PATTERN =\n /\\b(?:10\\.(?:25[0-5]|2[0-4]\\d|[01]?\\d?\\d)\\.(?:25[0-5]|2[0-4]\\d|[01]?\\d?\\d)\\.(?:25[0-5]|2[0-4]\\d|[01]?\\d?\\d)|172\\.(?:1[6-9]|2\\d|3[01])\\.(?:25[0-5]|2[0-4]\\d|[01]?\\d?\\d)\\.(?:25[0-5]|2[0-4]\\d|[01]?\\d?\\d)|192\\.168\\.(?:25[0-5]|2[0-4]\\d|[01]?\\d?\\d)\\.(?:25[0-5]|2[0-4]\\d|[01]?\\d?\\d))\\b/g;\n\ninterface TelemetryEvent {\n schema_version: number;\n event_id: string;\n event_type: \"command_start\" | \"command_finish\" | \"command_error\";\n occurred_at: string;\n installation_id: string;\n session_id: string;\n command: string;\n payload: Record<string, unknown>;\n}\n\ninterface QueuedTelemetryEvent {\n event: TelemetryEvent;\n attempts: number;\n last_attempt_at?: string;\n next_attempt_after?: string;\n}\n\ninterface TelemetryRuntimeState {\n last_attempted_flush_at?: string;\n last_successful_flush_at?: string;\n last_failed_flush_at?: string;\n last_failed_flush_error?: string;\n endpoint?: string;\n queue_entries?: number;\n}\n\ntype TelemetryCaptureLevel = \"minimal\" | \"redacted\" | \"max\";\ntype TelemetrySourceContext = (typeof PM_TELEMETRY_SOURCE_CONTEXT_VALUES)[number];\ntype TelemetrySourceContextSource = \"inferred\" | \"env_override\";\n\ninterface ResolvedTelemetrySourceContext {\n source_context: TelemetrySourceContext;\n source_context_source: TelemetrySourceContextSource;\n}\n\nexport interface ActiveTelemetryCommand {\n started_at: string;\n started_at_ms: number;\n command: string;\n command_taxonomy: TelemetryCommandTaxonomy;\n pm_version: string;\n source_context: TelemetrySourceContext;\n source_context_source: TelemetrySourceContextSource;\n installation_id: string;\n pm_root_hash: string;\n cwd_hash: string;\n endpoint: string;\n retention_days: number;\n global_pm_root: string;\n capture_level: TelemetryCaptureLevel;\n otel_traces_endpoint?: string;\n otel_trace_id?: string;\n otel_span_id?: string;\n}\n\nexport interface TelemetryCommandContext {\n command: string;\n pm_version: string;\n args: string[];\n options: Record<string, unknown>;\n global: GlobalOptions;\n pm_root: string;\n}\n\nexport interface TelemetryCommandOutcome {\n ok: boolean;\n error?: string;\n result?: unknown;\n exit_code?: number;\n error_code?: string;\n error_category?: TelemetryErrorCategory;\n command_resolution?: TelemetryCommandResolution;\n resolution_stage?: TelemetryResolutionStage;\n}\n\nexport interface TelemetryErrorEventContext {\n command: string;\n args: string[];\n options: Record<string, unknown>;\n global: GlobalOptions;\n pm_version: string;\n pm_root: string;\n error_code: string;\n error_message: string;\n exit_code: number;\n error_category?: TelemetryErrorCategory;\n command_resolution?: TelemetryCommandResolution;\n resolution_stage?: TelemetryResolutionStage;\n}\n\n\nfunction queuePath(globalPmRoot: string): string {\n return path.join(globalPmRoot, TELEMETRY_QUEUE_RELATIVE_PATH);\n}\n\nfunction runtimeStatePath(globalPmRoot: string): string {\n return path.join(globalPmRoot, TELEMETRY_STATE_RELATIVE_PATH);\n}\n\nasync function readRuntimeState(globalPmRoot: string): Promise<TelemetryRuntimeState> {\n const raw = await readFileIfExists(runtimeStatePath(globalPmRoot));\n if (!raw || raw.trim().length === 0) {\n return {};\n }\n try {\n const parsed = JSON.parse(raw) as TelemetryRuntimeState;\n if (typeof parsed !== \"object\" || parsed === null || Array.isArray(parsed)) {\n return {};\n }\n return parsed;\n } catch {\n return {};\n }\n}\n\nasync function writeRuntimeState(globalPmRoot: string, patch: TelemetryRuntimeState): Promise<void> {\n try {\n const current = await readRuntimeState(globalPmRoot);\n const next: TelemetryRuntimeState = {\n ...current,\n ...patch,\n };\n const normalized = Object.fromEntries(\n Object.entries(next)\n .filter(([, value]) => value !== undefined)\n .sort((left, right) => left[0].localeCompare(right[0])),\n );\n await writeFileAtomic(runtimeStatePath(globalPmRoot), `${JSON.stringify(normalized, null, 2)}\\n`);\n } catch {\n // Runtime state persistence is best effort and must not block command execution.\n }\n}\n\nfunction isSensitiveKey(key: string): boolean {\n const normalized = key.trim().toLowerCase().replaceAll(\"-\", \"_\").replaceAll(/[^a-z0-9_]+/g, \"_\");\n const tokens = normalized.split(\"_\").filter((token) => token.length > 0);\n return SENSITIVE_KEYWORDS.some(\n (keyword) => normalized === keyword || normalized.endsWith(`_${keyword}`) || tokens.includes(keyword),\n );\n}\n\nfunction redactInlineSensitiveAssignments(input: string): string {\n const withoutAssignments = input.replaceAll(\n INLINE_SENSITIVE_ASSIGNMENT_PATTERN,\n (_match: string, key: string, delimiter: string): string => `${key}${delimiter}[redacted]`,\n );\n return withoutAssignments.replaceAll(\n INLINE_SENSITIVE_FLAG_PATTERN,\n (_match: string, flag: string, delimiter: string): string => `${flag}${delimiter}[redacted]`,\n );\n}\n\nfunction redactAbsolutePathTokens(input: string): string {\n return input.replaceAll(\n ABSOLUTE_PATH_TOKEN_PATTERN,\n (_match: string, prefix: string): string => `${prefix}[redacted_path]`,\n );\n}\n\nfunction sanitizeCommonSensitiveTokens(input: string): string {\n const withoutEmails = input.replaceAll(EMAIL_PATTERN, \"[redacted_email]\");\n const withoutBearer = withoutEmails.replaceAll(BEARER_TOKEN_PATTERN, \"bearer [redacted_token]\");\n return withoutBearer.replaceAll(PRIVATE_IP_PATTERN, \"[redacted_ip]\");\n}\n\nfunction sanitizeStringRedacted(input: string): string {\n const withoutCommonSensitiveTokens = sanitizeCommonSensitiveTokens(input);\n const withoutInlineSecrets = redactInlineSensitiveAssignments(withoutCommonSensitiveTokens);\n const withoutAbsolutePaths = redactAbsolutePathTokens(withoutInlineSecrets);\n const trimmed = withoutAbsolutePaths.trim();\n if (trimmed.startsWith(\"/\") && trimmed.length > 1) {\n return \"[redacted_path]\";\n }\n if (withoutAbsolutePaths.length > 512) {\n return `${withoutAbsolutePaths.slice(0, 509)}...`;\n }\n return withoutAbsolutePaths;\n}\n\nfunction sanitizeStringMax(input: string): string {\n const withoutCommonSensitiveTokens = sanitizeCommonSensitiveTokens(input);\n const withoutInlineSecrets = redactInlineSensitiveAssignments(withoutCommonSensitiveTokens);\n const withoutAbsolutePaths = redactAbsolutePathTokens(withoutInlineSecrets);\n const trimmed = withoutAbsolutePaths.trim();\n if (trimmed.startsWith(\"/\") && trimmed.length > 1) {\n return \"[redacted_path]\";\n }\n if (withoutAbsolutePaths.length > 2048) {\n return `${withoutAbsolutePaths.slice(0, 2045)}...`;\n }\n return withoutAbsolutePaths;\n}\n\nfunction sanitizeString(input: string, captureLevel: Exclude<TelemetryCaptureLevel, \"minimal\"> = \"redacted\"): string {\n if (captureLevel === \"max\") {\n return sanitizeStringMax(input);\n }\n return sanitizeStringRedacted(input);\n}\n\nfunction sanitizeValue(\n value: unknown,\n keyHint?: string,\n captureLevel: Exclude<TelemetryCaptureLevel, \"minimal\"> = \"redacted\",\n depth = 0,\n): unknown {\n if (keyHint && isSensitiveKey(keyHint)) {\n return \"[redacted]\";\n }\n if (value === null || value === undefined) {\n return value;\n }\n if (typeof value === \"string\") {\n return sanitizeString(value, captureLevel);\n }\n if (typeof value === \"number\" || typeof value === \"boolean\") {\n return value;\n }\n if (depth >= TELEMETRY_SANITIZE_MAX_DEPTH) {\n return \"[depth_truncated]\";\n }\n if (Array.isArray(value)) {\n return value.slice(0, TELEMETRY_SANITIZE_MAX_ARRAY_ITEMS).map((entry) => sanitizeValue(entry, undefined, captureLevel, depth + 1));\n }\n if (typeof value === \"object\") {\n const record = value as Record<string, unknown>;\n const sanitized: Record<string, unknown> = {};\n for (const [key, nested] of Object.entries(record)) {\n sanitized[key] = sanitizeValue(nested, key, captureLevel, depth + 1);\n }\n return sanitized;\n }\n return String(value);\n}\n\nfunction sanitizeCommandArgs(\n args: string[],\n captureLevel: Exclude<TelemetryCaptureLevel, \"minimal\"> = \"redacted\",\n): string[] {\n const sanitized: string[] = [];\n let nextIsSensitiveValue = false;\n for (const rawArg of args) {\n const arg = sanitizeString(rawArg, captureLevel);\n if (nextIsSensitiveValue) {\n sanitized.push(\"[redacted]\");\n nextIsSensitiveValue = false;\n continue;\n }\n if (arg.startsWith(\"--\")) {\n const withoutPrefix = arg.slice(2);\n const delimiterIndex = withoutPrefix.indexOf(\"=\");\n if (delimiterIndex >= 0) {\n const key = withoutPrefix.slice(0, delimiterIndex);\n const value = withoutPrefix.slice(delimiterIndex + 1);\n if (isSensitiveKey(key)) {\n sanitized.push(`--${key}=[redacted]`);\n } else {\n sanitized.push(`--${key}=${sanitizeString(value, captureLevel)}`);\n }\n continue;\n }\n if (isSensitiveKey(withoutPrefix)) {\n sanitized.push(`--${withoutPrefix}`);\n nextIsSensitiveValue = true;\n continue;\n }\n }\n sanitized.push(arg);\n }\n return sanitized;\n}\n\nfunction normalizeCaptureLevel(value: string | undefined): TelemetryCaptureLevel {\n const normalized = value?.trim().toLowerCase();\n if (normalized === \"minimal\" || normalized === \"redacted\" || normalized === \"max\") {\n return normalized;\n }\n return \"redacted\";\n}\n\nfunction parseBooleanTrueLike(value: string | undefined): boolean {\n return BOOLEAN_TRUE_VALUES.has((value ?? \"\").trim().toLowerCase());\n}\n\nfunction normalizePmVersion(value: string | undefined): string {\n const trimmed = value?.trim() ?? \"\";\n return trimmed.length > 0 ? trimmed : \"0.0.0\";\n}\n\nfunction normalizeTelemetryErrorCode(value: string | undefined): string | undefined {\n const normalized = value?.trim();\n return normalized && normalized.length > 0 ? normalized : undefined;\n}\n\nfunction normalizeTelemetryExitCode(exitCode: number | undefined, ok: boolean): number {\n if (Number.isFinite(exitCode)) {\n return Math.max(0, Math.trunc(exitCode ?? 0));\n }\n return ok ? 0 : 1;\n}\n\nfunction normalizeTelemetryErrorCategory(params: {\n ok: boolean;\n errorCode?: string;\n errorCategory?: TelemetryErrorCategory;\n}): TelemetryErrorCategory | undefined {\n if (params.ok) {\n return undefined;\n }\n if (typeof params.errorCategory === \"string\" && params.errorCategory.trim().length > 0) {\n return params.errorCategory;\n }\n if (typeof params.errorCode === \"string\" && params.errorCode.trim().length > 0) {\n return resolveTelemetryErrorCategory(params.errorCode);\n }\n return \"unknown\";\n}\n\nfunction resolveTelemetrySourceContext(globalOptions: GlobalOptions): ResolvedTelemetrySourceContext {\n const override = (process.env[PM_TELEMETRY_SOURCE_CONTEXT_ENV] ?? \"\").trim().toLowerCase();\n if (PM_TELEMETRY_SOURCE_CONTEXT_SET.has(override)) {\n return {\n source_context: override as TelemetrySourceContext,\n source_context_source: \"env_override\",\n };\n }\n const nodeEnv = (process.env.NODE_ENV ?? \"\").trim().toLowerCase();\n if (typeof process.env.VITEST === \"string\" || typeof process.env.VITEST_WORKER_ID === \"string\" || nodeEnv === \"test\") {\n return {\n source_context: \"test\",\n source_context_source: \"inferred\",\n };\n }\n const nonTty = process.stdin.isTTY !== true || process.stdout.isTTY !== true;\n const ci = parseBooleanTrueLike(process.env.CI);\n const scriptLikeMode = globalOptions.json === true || globalOptions.quiet === true;\n if (nonTty || ci || scriptLikeMode) {\n return {\n source_context: \"automation\",\n source_context_source: \"inferred\",\n };\n }\n return {\n source_context: \"user\",\n source_context_source: \"inferred\",\n };\n}\n\nfunction hashWithInstallationId(installationId: string, value: string): string {\n return crypto.createHash(\"sha256\").update(`${installationId}:${value}`).digest(\"hex\");\n}\n\nfunction normalizeForHash(value: unknown, depth = 0): unknown {\n if (value === null || value === undefined) {\n return value;\n }\n if (typeof value === \"string\" || typeof value === \"number\" || typeof value === \"boolean\") {\n return value;\n }\n if (depth >= TELEMETRY_SANITIZE_MAX_DEPTH) {\n return \"[depth_truncated]\";\n }\n if (Array.isArray(value)) {\n return value.slice(0, TELEMETRY_SANITIZE_MAX_ARRAY_ITEMS).map((entry) => normalizeForHash(entry, depth + 1));\n }\n if (typeof value === \"object\") {\n const record = value as Record<string, unknown>;\n const normalized: Record<string, unknown> = {};\n const sortedKeys = Object.keys(record).sort((left, right) => left.localeCompare(right));\n for (const key of sortedKeys) {\n normalized[key] = normalizeForHash(record[key], depth + 1);\n }\n return normalized;\n }\n return String(value);\n}\n\nfunction hashTelemetryValue(installationId: string, value: unknown): string {\n return hashWithInstallationId(installationId, JSON.stringify(normalizeForHash(value)));\n}\n\nfunction hashCommandArgs(installationId: string, args: string[]): { hashes: string[]; digest: string } {\n return {\n hashes: args.map((arg) => hashWithInstallationId(installationId, arg)),\n digest: hashWithInstallationId(installationId, args.join(\"\\u0000\")),\n };\n}\n\nfunction hashTelemetryErrorFingerprint(\n installationId: string,\n command: string,\n errorCode: string | undefined,\n errorMessage: string | undefined,\n): string {\n const normalizedMessage = sanitizeString(errorMessage ?? \"\", \"redacted\");\n const fingerprintSource = `${command}\\u0000${errorCode ?? \"unknown_error\"}\\u0000${normalizedMessage}`;\n return hashWithInstallationId(installationId, fingerprintSource);\n}\n\nfunction telemetryDisabledByEnvironment(): boolean {\n return PM_TELEMETRY_DISABLED_VALUES.has((process.env[PM_TELEMETRY_DISABLED_ENV] ?? \"\").trim().toLowerCase());\n}\n\nfunction resolveOtelTracesEndpoint(): string | null {\n if (PM_TELEMETRY_OTEL_DISABLED_VALUES.has((process.env[PM_TELEMETRY_OTEL_DISABLED_ENV] ?? \"\").trim().toLowerCase())) {\n return null;\n }\n\n const directEndpoint = (process.env[OTEL_TRACES_ENDPOINT_ENV] ?? \"\").trim();\n if (directEndpoint.length > 0) {\n try {\n return new URL(directEndpoint).toString();\n } catch {\n return null;\n }\n }\n\n const baseEndpoint = (process.env[OTEL_BASE_ENDPOINT_ENV] ?? \"\").trim();\n if (baseEndpoint.length === 0) {\n return null;\n }\n\n try {\n const url = new URL(baseEndpoint);\n const normalizedPath = url.pathname.replace(/\\/+$/, \"\");\n if (!normalizedPath.endsWith(\"/v1/traces\")) {\n url.pathname = `${normalizedPath.length === 0 ? \"\" : normalizedPath}/v1/traces`;\n }\n return url.toString();\n } catch {\n return null;\n }\n}\n\nfunction isoToUnixNano(iso: string): string {\n const parsedMs = Date.parse(iso);\n const epochMs = Number.isNaN(parsedMs) ? Date.now() : parsedMs;\n return `${BigInt(epochMs) * 1_000_000n}`;\n}\n\nfunction otlpStringAttribute(key: string, value: string): { key: string; value: { stringValue: string } } {\n return {\n key,\n value: { stringValue: value },\n };\n}\n\nfunction otlpBoolAttribute(key: string, value: boolean): { key: string; value: { boolValue: boolean } } {\n return {\n key,\n value: { boolValue: value },\n };\n}\n\nfunction otlpIntAttribute(key: string, value: number): { key: string; value: { intValue: string } } {\n return {\n key,\n value: { intValue: String(Math.max(0, Math.trunc(value))) },\n };\n}\n\nasync function exportLocalOtelSpan(\n activeCommand: ActiveTelemetryCommand,\n outcome: { ok: boolean; error?: string; exit_code?: number; error_code?: string; error_category?: TelemetryErrorCategory },\n finishedAtIso: string,\n durationMs: number,\n): Promise<void> {\n if (\n typeof activeCommand.otel_traces_endpoint !== \"string\" ||\n activeCommand.otel_traces_endpoint.trim().length === 0 ||\n typeof activeCommand.otel_trace_id !== \"string\" ||\n activeCommand.otel_trace_id.length === 0 ||\n typeof activeCommand.otel_span_id !== \"string\" ||\n activeCommand.otel_span_id.length === 0\n ) {\n return;\n }\n\n const serviceNameCandidate = sanitizeString((process.env[OTEL_SERVICE_NAME_ENV] ?? \"\").trim());\n const serviceName = serviceNameCandidate.length > 0 ? serviceNameCandidate : \"pm-cli\";\n const normalizedExitCode = normalizeTelemetryExitCode(outcome.exit_code, outcome.ok);\n const normalizedErrorCode = normalizeTelemetryErrorCode(outcome.error_code);\n const normalizedErrorCategory = normalizeTelemetryErrorCategory({\n ok: outcome.ok,\n errorCode: normalizedErrorCode,\n errorCategory: outcome.error_category,\n });\n const attributes: Array<\n | ReturnType<typeof otlpStringAttribute>\n | ReturnType<typeof otlpBoolAttribute>\n | ReturnType<typeof otlpIntAttribute>\n > = [\n otlpStringAttribute(\"pm.command\", sanitizeString(activeCommand.command)),\n otlpStringAttribute(\"pm.version\", activeCommand.pm_version),\n otlpStringAttribute(\"pm.source_context\", activeCommand.source_context),\n otlpStringAttribute(\"pm.source_context_source\", activeCommand.source_context_source),\n otlpStringAttribute(\"pm.installation_id\", activeCommand.installation_id),\n otlpStringAttribute(\"pm.session_id\", PROCESS_SESSION_ID),\n otlpStringAttribute(\"pm.pm_root_hash\", activeCommand.pm_root_hash),\n otlpStringAttribute(\"pm.cwd_hash\", activeCommand.cwd_hash),\n otlpBoolAttribute(\"pm.ok\", outcome.ok),\n otlpIntAttribute(\"pm.exit_code\", normalizedExitCode),\n otlpIntAttribute(\"pm.duration_ms\", durationMs),\n ];\n if (typeof normalizedErrorCode === \"string\") {\n attributes.push(otlpStringAttribute(\"pm.error_code\", normalizedErrorCode));\n }\n if (typeof normalizedErrorCategory === \"string\") {\n attributes.push(otlpStringAttribute(\"pm.error_category\", normalizedErrorCategory));\n }\n if (typeof outcome.error === \"string\" && outcome.error.trim().length > 0) {\n attributes.push(otlpStringAttribute(\"pm.error\", sanitizeString(outcome.error)));\n }\n\n const payload = {\n resourceSpans: [\n {\n resource: {\n attributes: [otlpStringAttribute(\"service.name\", serviceName)],\n },\n scopeSpans: [\n {\n scope: {\n name: \"pm-cli.telemetry\",\n version: \"1\",\n },\n spans: [\n {\n traceId: activeCommand.otel_trace_id,\n spanId: activeCommand.otel_span_id,\n name: `pm.command.${sanitizeString(activeCommand.command)}`,\n kind: 1,\n startTimeUnixNano: isoToUnixNano(activeCommand.started_at),\n endTimeUnixNano: isoToUnixNano(finishedAtIso),\n attributes,\n status: {\n code: outcome.ok ? 1 : 2,\n message: outcome.ok ? \"\" : sanitizeString(outcome.error ?? \"command_failed\"),\n },\n },\n ],\n },\n ],\n },\n ],\n };\n\n const response = await fetch(activeCommand.otel_traces_endpoint, {\n method: \"POST\",\n headers: {\n \"content-type\": \"application/json\",\n },\n body: JSON.stringify(payload),\n signal: AbortSignal.timeout(TELEMETRY_HTTP_TIMEOUT_MS),\n });\n if (!response.ok) {\n throw new Error(`local_otel_export_http_${response.status}`);\n }\n}\n\nfunction summarizeResult(\n result: unknown,\n captureLevel: Exclude<TelemetryCaptureLevel, \"minimal\"> = \"redacted\",\n): Record<string, unknown> {\n if (result === null || result === undefined) {\n return { type: \"nullish\" };\n }\n if (typeof result === \"string\") {\n return { type: \"string\", value: sanitizeString(result, captureLevel) };\n }\n if (typeof result === \"number\" || typeof result === \"boolean\") {\n return { type: typeof result, value: result };\n }\n if (Array.isArray(result)) {\n return {\n type: \"array\",\n length: result.length,\n sample: result.slice(0, 5).map((entry) => sanitizeValue(entry, undefined, captureLevel)),\n };\n }\n if (typeof result === \"object\") {\n const record = result as Record<string, unknown>;\n const keys = Object.keys(record).sort((left, right) => left.localeCompare(right));\n const sanitized: Record<string, unknown> = {};\n let previewBytes = 0;\n for (const key of keys.slice(0, 25)) {\n const sanitizedValue = sanitizeValue(record[key], key, captureLevel);\n const entrySize = JSON.stringify(sanitizedValue)?.length ?? 0;\n if (previewBytes + entrySize > TELEMETRY_RESULT_PREVIEW_MAX_BYTES) {\n sanitized[key] = \"[preview_truncated]\";\n break;\n }\n previewBytes += entrySize;\n sanitized[key] = sanitizedValue;\n }\n return {\n type: \"object\",\n key_count: keys.length,\n keys_preview: keys.slice(0, 50),\n preview: sanitized,\n };\n }\n return { type: typeof result, value: String(result) };\n}\n\nfunction buildCommandStartPayload(params: {\n captureLevel: TelemetryCaptureLevel;\n context: TelemetryCommandContext;\n pmVersion: string;\n sourceContext: ResolvedTelemetrySourceContext;\n pmRootHash: string;\n cwdHash: string;\n installationId: string;\n}): Record<string, unknown> {\n const { captureLevel, context, pmVersion, sourceContext, pmRootHash, cwdHash, installationId } = params;\n const commandTaxonomy = deriveTelemetryCommandTaxonomy(context.command);\n const hashedArgs = hashCommandArgs(installationId, context.args);\n const commandInvocationDigest = hashWithInstallationId(installationId, `${context.command}\\u0000${context.args.join(\"\\u0000\")}`);\n const commandOptionsDigest = hashTelemetryValue(installationId, context.options);\n const globalOptionsDigest = hashTelemetryValue(installationId, context.global);\n if (captureLevel === \"minimal\") {\n return {\n capture_level: captureLevel,\n pm_version: pmVersion,\n source_context: sourceContext.source_context,\n source_context_source: sourceContext.source_context_source,\n command_taxonomy: commandTaxonomy,\n command_args_digest: hashedArgs.digest,\n command_invocation_digest: commandInvocationDigest,\n command_options_digest: commandOptionsDigest,\n global_options_digest: globalOptionsDigest,\n };\n }\n return {\n pm_version: pmVersion,\n source_context: sourceContext.source_context,\n source_context_source: sourceContext.source_context_source,\n command_taxonomy: commandTaxonomy,\n command_args: sanitizeCommandArgs(context.args, captureLevel),\n command_args_hashes: hashedArgs.hashes,\n command_args_digest: hashedArgs.digest,\n command_invocation_digest: commandInvocationDigest,\n command_options: sanitizeValue(context.options, undefined, captureLevel) as Record<string, unknown>,\n command_options_digest: commandOptionsDigest,\n global_options: sanitizeValue(context.global, undefined, captureLevel) as Record<string, unknown>,\n global_options_digest: globalOptionsDigest,\n pm_root_hash: pmRootHash,\n cwd_hash: cwdHash,\n capture_level: captureLevel,\n runtime: {\n node: process.version,\n platform: process.platform,\n arch: process.arch,\n hostname_hash: hashWithInstallationId(installationId, os.hostname()),\n stdin_tty: process.stdin.isTTY === true,\n stdout_tty: process.stdout.isTTY === true,\n },\n };\n}\n\nfunction buildCommandFinishPayload(params: {\n captureLevel: TelemetryCaptureLevel;\n pmVersion: string;\n sourceContext: ResolvedTelemetrySourceContext;\n outcome: TelemetryCommandOutcome;\n durationMs: number;\n startedAt: string;\n command: string;\n installationId: string;\n commandTaxonomy: TelemetryCommandTaxonomy;\n exitCode: number;\n errorCode?: string;\n errorCategory?: TelemetryErrorCategory;\n commandResolution: TelemetryCommandResolution;\n resolutionStage: TelemetryResolutionStage;\n}): Record<string, unknown> {\n const {\n captureLevel,\n pmVersion,\n sourceContext,\n outcome,\n durationMs,\n startedAt,\n command,\n installationId,\n commandTaxonomy,\n exitCode,\n errorCode,\n errorCategory,\n commandResolution,\n resolutionStage,\n } = params;\n const errorFingerprint =\n outcome.ok === false\n ? hashTelemetryErrorFingerprint(installationId, command, errorCode, outcome.error)\n : undefined;\n if (captureLevel === \"minimal\") {\n return {\n capture_level: captureLevel,\n pm_version: pmVersion,\n source_context: sourceContext.source_context,\n source_context_source: sourceContext.source_context_source,\n command_taxonomy: commandTaxonomy,\n command_resolution: commandResolution,\n resolution_stage: resolutionStage,\n ok: outcome.ok,\n exit_code: exitCode,\n error_code: errorCode,\n error_category: errorCategory,\n error: outcome.error ? sanitizeString(outcome.error, \"redacted\") : undefined,\n error_fingerprint: errorFingerprint,\n duration_ms: durationMs,\n };\n }\n return {\n capture_level: captureLevel,\n pm_version: pmVersion,\n source_context: sourceContext.source_context,\n source_context_source: sourceContext.source_context_source,\n command_taxonomy: commandTaxonomy,\n command_resolution: commandResolution,\n resolution_stage: resolutionStage,\n ok: outcome.ok,\n exit_code: exitCode,\n error_code: errorCode,\n error_category: errorCategory,\n error: outcome.error ? sanitizeString(outcome.error, captureLevel) : undefined,\n error_fingerprint: errorFingerprint,\n duration_ms: durationMs,\n started_at: startedAt,\n result_summary: summarizeResult(outcome.result, captureLevel),\n };\n}\n\nfunction buildCommandErrorPayload(params: {\n captureLevel: TelemetryCaptureLevel;\n pmVersion: string;\n sourceContext: ResolvedTelemetrySourceContext;\n command: string;\n commandTaxonomy: TelemetryCommandTaxonomy;\n commandResolution: TelemetryCommandResolution;\n resolutionStage: TelemetryResolutionStage;\n args: string[];\n options: Record<string, unknown>;\n pmRootHash: string;\n cwdHash: string;\n installationId: string;\n errorCode: string;\n errorMessage: string;\n errorCategory: TelemetryErrorCategory;\n exitCode: number;\n}): Record<string, unknown> {\n const {\n captureLevel,\n pmVersion,\n sourceContext,\n command,\n commandTaxonomy,\n commandResolution,\n resolutionStage,\n args,\n options,\n pmRootHash,\n cwdHash,\n installationId,\n errorCode,\n errorMessage,\n errorCategory,\n exitCode,\n } = params;\n const attemptedArgHashes = hashCommandArgs(installationId, args);\n const attemptedCommandDigest = hashWithInstallationId(installationId, command);\n const attemptedOptionsDigest = hashTelemetryValue(installationId, options);\n const errorFingerprint = hashTelemetryErrorFingerprint(installationId, command, errorCode, errorMessage);\n if (captureLevel === \"minimal\") {\n return {\n capture_level: captureLevel,\n pm_version: pmVersion,\n source_context: sourceContext.source_context,\n source_context_source: sourceContext.source_context_source,\n command_taxonomy: commandTaxonomy,\n command_resolution: commandResolution,\n resolution_stage: resolutionStage,\n attempted_command_digest: attemptedCommandDigest,\n attempted_args_digest: attemptedArgHashes.digest,\n attempted_options_digest: attemptedOptionsDigest,\n error_code: errorCode,\n error_category: errorCategory,\n exit_code: exitCode,\n error: sanitizeString(errorMessage, \"redacted\"),\n error_fingerprint: errorFingerprint,\n };\n }\n\n return {\n capture_level: captureLevel,\n pm_version: pmVersion,\n source_context: sourceContext.source_context,\n source_context_source: sourceContext.source_context_source,\n command_taxonomy: commandTaxonomy,\n command_resolution: commandResolution,\n resolution_stage: resolutionStage,\n attempted_command: sanitizeString(command, captureLevel),\n attempted_command_digest: attemptedCommandDigest,\n attempted_args: sanitizeCommandArgs(args, captureLevel),\n attempted_args_hashes: attemptedArgHashes.hashes,\n attempted_args_digest: attemptedArgHashes.digest,\n attempted_options: sanitizeValue(options, undefined, captureLevel) as Record<string, unknown>,\n attempted_options_digest: attemptedOptionsDigest,\n error_code: errorCode,\n error_category: errorCategory,\n exit_code: exitCode,\n error: sanitizeString(errorMessage, captureLevel),\n error_fingerprint: errorFingerprint,\n pm_root_hash: pmRootHash,\n cwd_hash: cwdHash,\n runtime: {\n node: process.version,\n platform: process.platform,\n arch: process.arch,\n hostname_hash: hashWithInstallationId(installationId, os.hostname()),\n stdin_tty: process.stdin.isTTY === true,\n stdout_tty: process.stdout.isTTY === true,\n },\n };\n}\n\nasync function ensureInstallationId(\n globalPmRoot: string,\n): Promise<{ installationId: string; endpoint: string; retentionDays: number }> {\n const settings = await readSettings(globalPmRoot);\n let changed = false;\n if (settings.telemetry.installation_id.trim().length === 0) {\n settings.telemetry.installation_id = crypto.randomUUID();\n changed = true;\n }\n if (changed) {\n await writeSettings(globalPmRoot, settings, \"telemetry:install_id\");\n }\n return {\n installationId: settings.telemetry.installation_id,\n endpoint: settings.telemetry.endpoint,\n retentionDays: Math.max(1, Math.trunc(settings.telemetry.retention_days)),\n };\n}\n\nasync function enqueueTelemetryEvent(globalPmRoot: string, event: TelemetryEvent): Promise<void> {\n const queued: QueuedTelemetryEvent = {\n event,\n attempts: 0,\n };\n let serialized = JSON.stringify(queued);\n if (serialized.length > TELEMETRY_MAX_EVENT_BYTES) {\n const trimmed = { ...event, payload: { ...event.payload, result_summary: { truncated: true, reason: \"payload_size_exceeded\", original_bytes: serialized.length } } };\n const trimmedQueued: QueuedTelemetryEvent = { event: trimmed, attempts: 0 };\n serialized = JSON.stringify(trimmedQueued);\n }\n await appendLineAtomic(queuePath(globalPmRoot), serialized);\n}\n\nfunction parseQueueLines(raw: string): QueuedTelemetryEvent[] {\n const entries: QueuedTelemetryEvent[] = [];\n for (const line of raw.split(\"\\n\")) {\n const trimmed = line.trim();\n if (trimmed.length === 0) {\n continue;\n }\n try {\n const parsed = JSON.parse(trimmed) as QueuedTelemetryEvent;\n if (\n parsed &&\n typeof parsed === \"object\" &&\n parsed.event &&\n typeof parsed.event === \"object\" &&\n typeof parsed.attempts === \"number\"\n ) {\n entries.push(parsed);\n }\n } catch {\n // Drop malformed lines to preserve queue forward progress.\n }\n }\n return entries;\n}\n\nfunction nextRetryIso(attempts: number): string {\n const delay = Math.min(TELEMETRY_RETRY_BASE_DELAY_MS * 2 ** Math.max(attempts - 1, 0), TELEMETRY_MAX_RETRY_DELAY_MS);\n return new Date(Date.now() + delay).toISOString();\n}\n\nfunction isDueForRetry(entry: QueuedTelemetryEvent): boolean {\n if (typeof entry.next_attempt_after !== \"string\" || entry.next_attempt_after.trim().length === 0) {\n return true;\n }\n const dueAtMs = Date.parse(entry.next_attempt_after);\n if (Number.isNaN(dueAtMs)) {\n return true;\n }\n return dueAtMs <= Date.now();\n}\n\nfunction retentionCutoffMs(retentionDays: number): number {\n const normalizedDays = Number.isFinite(retentionDays) ? Math.max(1, Math.trunc(retentionDays)) : 1;\n return Date.now() - normalizedDays * MILLISECONDS_PER_DAY;\n}\n\nfunction isExpiredQueueEntry(entry: QueuedTelemetryEvent, cutoffMs: number): boolean {\n const occurredAt = entry.event?.occurred_at;\n if (typeof occurredAt !== \"string\" || occurredAt.trim().length === 0) {\n return false;\n }\n const occurredAtMs = Date.parse(occurredAt);\n if (Number.isNaN(occurredAtMs)) {\n return false;\n }\n return occurredAtMs < cutoffMs;\n}\n\nfunction pruneExpiredQueueEntries(\n entries: QueuedTelemetryEvent[],\n retentionDays: number,\n): { entries: QueuedTelemetryEvent[]; prunedCount: number } {\n const cutoffMs = retentionCutoffMs(retentionDays);\n const retained: QueuedTelemetryEvent[] = [];\n let prunedCount = 0;\n for (const entry of entries) {\n const serializedSize = JSON.stringify(entry).length;\n const oversized = serializedSize > TELEMETRY_MAX_EVENT_BYTES;\n if (oversized || isExpiredQueueEntry(entry, cutoffMs) || entry.attempts >= TELEMETRY_MAX_QUEUE_ENTRY_ATTEMPTS) {\n prunedCount += 1;\n continue;\n }\n retained.push(entry);\n }\n return { entries: retained, prunedCount };\n}\n\nasync function rewriteQueue(globalPmRoot: string, entries: QueuedTelemetryEvent[]): Promise<void> {\n const serialized = entries.map((entry) => JSON.stringify(entry)).join(\"\\n\");\n await writeFileAtomic(queuePath(globalPmRoot), serialized.length > 0 ? `${serialized}\\n` : \"\");\n}\n\nasync function flushQueue(globalPmRoot: string, endpoint: string, retentionDays: number): Promise<void> {\n const normalizedEndpoint = endpoint.trim();\n if (normalizedEndpoint.length === 0) {\n return;\n }\n const raw = await readFileIfExists(queuePath(globalPmRoot));\n if (raw === null || raw.trim().length === 0) {\n await writeRuntimeState(globalPmRoot, {\n endpoint: normalizedEndpoint,\n queue_entries: 0,\n });\n return;\n }\n const queueEntries = parseQueueLines(raw);\n if (queueEntries.length === 0) {\n await writeRuntimeState(globalPmRoot, {\n endpoint: normalizedEndpoint,\n queue_entries: 0,\n });\n return;\n }\n const { entries: retainedEntries, prunedCount } = pruneExpiredQueueEntries(queueEntries, retentionDays);\n if (retainedEntries.length === 0) {\n if (prunedCount > 0) {\n await rewriteQueue(globalPmRoot, []);\n }\n await writeRuntimeState(globalPmRoot, {\n endpoint: normalizedEndpoint,\n queue_entries: 0,\n });\n return;\n }\n const dueEntries = retainedEntries.filter((entry) => isDueForRetry(entry)).slice(0, TELEMETRY_FLUSH_BATCH_SIZE);\n if (dueEntries.length === 0) {\n if (prunedCount > 0) {\n await rewriteQueue(globalPmRoot, retainedEntries);\n }\n await writeRuntimeState(globalPmRoot, {\n endpoint: normalizedEndpoint,\n queue_entries: retainedEntries.length,\n });\n return;\n }\n const dueIds = new Set(dueEntries.map((entry) => entry.event.event_id));\n const attemptTime = nowIso();\n const requestHeaders: Record<string, string> = {\n \"content-type\": \"application/json\",\n };\n const ingestKey = process.env.PM_TELEMETRY_INGEST_KEY?.trim();\n if (ingestKey) {\n requestHeaders[\"x-pm-telemetry-key\"] = ingestKey;\n }\n\n try {\n const response = await fetch(normalizedEndpoint, {\n method: \"POST\",\n headers: requestHeaders,\n body: JSON.stringify({\n schema_version: TELEMETRY_SCHEMA_VERSION,\n events: dueEntries.map((entry) => entry.event),\n }),\n signal: AbortSignal.timeout(TELEMETRY_HTTP_TIMEOUT_MS),\n });\n if (!response.ok) {\n throw new Error(`telemetry_flush_http_${response.status}`);\n }\n const remaining = retainedEntries.filter((entry) => !dueIds.has(entry.event.event_id));\n await rewriteQueue(globalPmRoot, remaining);\n await writeRuntimeState(globalPmRoot, {\n endpoint: normalizedEndpoint,\n queue_entries: remaining.length,\n last_attempted_flush_at: attemptTime,\n last_successful_flush_at: attemptTime,\n last_failed_flush_at: undefined,\n last_failed_flush_error: undefined,\n });\n } catch (error: unknown) {\n const retried = retainedEntries.map((entry) => {\n if (!dueIds.has(entry.event.event_id)) {\n return entry;\n }\n const attempts = entry.attempts + 1;\n return {\n ...entry,\n attempts,\n last_attempt_at: attemptTime,\n next_attempt_after: nextRetryIso(attempts),\n };\n });\n await rewriteQueue(globalPmRoot, retried);\n const errorMessage = (() => {\n if (error instanceof Error) {\n return sanitizeString(error.message, \"redacted\");\n }\n return \"telemetry_flush_failed\";\n })();\n await writeRuntimeState(globalPmRoot, {\n endpoint: normalizedEndpoint,\n queue_entries: retried.length,\n last_attempted_flush_at: attemptTime,\n last_failed_flush_at: attemptTime,\n last_failed_flush_error: errorMessage,\n });\n }\n}\n\nexport async function startTelemetryCommand(context: TelemetryCommandContext): Promise<ActiveTelemetryCommand | null> {\n if (telemetryDisabledByEnvironment()) {\n return null;\n }\n try {\n const globalPmRoot = resolveGlobalPmRoot(process.cwd());\n const settings = await readSettings(globalPmRoot);\n if (!settings.telemetry.enabled) {\n return null;\n }\n const captureLevel = normalizeCaptureLevel(settings.telemetry.capture_level);\n const { installationId, endpoint, retentionDays } = await ensureInstallationId(globalPmRoot);\n const pmVersion = normalizePmVersion(context.pm_version);\n const sourceContext = resolveTelemetrySourceContext(context.global);\n const pmRootHash = hashWithInstallationId(installationId, context.pm_root);\n const cwdHash = hashWithInstallationId(installationId, process.cwd());\n const otelTracesEndpoint = resolveOtelTracesEndpoint();\n const occurredAt = nowIso();\n const event: TelemetryEvent = {\n schema_version: TELEMETRY_SCHEMA_VERSION,\n event_id: crypto.randomUUID(),\n event_type: \"command_start\",\n occurred_at: occurredAt,\n installation_id: installationId,\n session_id: PROCESS_SESSION_ID,\n command: context.command,\n payload: buildCommandStartPayload({\n captureLevel,\n context,\n pmVersion,\n sourceContext,\n pmRootHash,\n cwdHash,\n installationId,\n }),\n };\n await enqueueTelemetryEvent(globalPmRoot, event);\n _lastFlushPromise = flushQueue(globalPmRoot, endpoint, retentionDays).catch(() => {});\n const commandTaxonomy = deriveTelemetryCommandTaxonomy(context.command);\n return {\n started_at: occurredAt,\n started_at_ms: Date.now(),\n command: context.command,\n command_taxonomy: commandTaxonomy,\n pm_version: pmVersion,\n source_context: sourceContext.source_context,\n source_context_source: sourceContext.source_context_source,\n installation_id: installationId,\n pm_root_hash: pmRootHash,\n cwd_hash: cwdHash,\n endpoint,\n retention_days: retentionDays,\n global_pm_root: globalPmRoot,\n capture_level: captureLevel,\n otel_traces_endpoint: otelTracesEndpoint ?? undefined,\n otel_trace_id: otelTracesEndpoint ? crypto.randomBytes(16).toString(\"hex\") : undefined,\n otel_span_id: otelTracesEndpoint ? crypto.randomBytes(8).toString(\"hex\") : undefined,\n };\n } catch {\n // Telemetry must never block command execution.\n return null;\n }\n}\n\nexport async function finishTelemetryCommand(\n activeCommand: ActiveTelemetryCommand | null,\n outcome: TelemetryCommandOutcome,\n): Promise<void> {\n if (!activeCommand) {\n return;\n }\n try {\n const finishedAt = nowIso();\n const durationMs = Math.max(0, Date.now() - activeCommand.started_at_ms);\n const normalizedErrorCode = normalizeTelemetryErrorCode(\n inferTelemetryErrorCode({\n ok: outcome.ok,\n errorCode: outcome.error_code,\n errorMessage: outcome.error,\n exitCode: outcome.exit_code,\n }),\n );\n const normalizedErrorCategory = normalizeTelemetryErrorCategory({\n ok: outcome.ok,\n errorCode: normalizedErrorCode,\n errorCategory: outcome.error_category,\n });\n const normalizedExitCode = normalizeTelemetryExitCode(outcome.exit_code, outcome.ok);\n const commandResolution =\n outcome.command_resolution ??\n deriveTelemetryCommandResolution({\n ok: outcome.ok,\n errorCode: normalizedErrorCode,\n errorCategory: normalizedErrorCategory,\n });\n const resolutionStage = outcome.resolution_stage ?? \"execute\";\n const event: TelemetryEvent = {\n schema_version: TELEMETRY_SCHEMA_VERSION,\n event_id: crypto.randomUUID(),\n event_type: \"command_finish\",\n occurred_at: finishedAt,\n installation_id: activeCommand.installation_id,\n session_id: PROCESS_SESSION_ID,\n command: activeCommand.command,\n payload: buildCommandFinishPayload({\n captureLevel: activeCommand.capture_level,\n pmVersion: activeCommand.pm_version,\n sourceContext: {\n source_context: activeCommand.source_context,\n source_context_source: activeCommand.source_context_source,\n },\n outcome,\n durationMs,\n startedAt: activeCommand.started_at,\n command: activeCommand.command,\n installationId: activeCommand.installation_id,\n commandTaxonomy: activeCommand.command_taxonomy,\n exitCode: normalizedExitCode,\n errorCode: normalizedErrorCode,\n errorCategory: normalizedErrorCategory,\n commandResolution,\n resolutionStage,\n }),\n };\n await enqueueTelemetryEvent(activeCommand.global_pm_root, event);\n _lastFlushPromise = flushQueue(activeCommand.global_pm_root, activeCommand.endpoint, activeCommand.retention_days).catch(() => {});\n void exportLocalOtelSpan(\n activeCommand,\n {\n ...outcome,\n exit_code: normalizedExitCode,\n error_code: normalizedErrorCode,\n error_category: normalizedErrorCategory,\n },\n finishedAt,\n durationMs,\n ).catch(() => {});\n } catch {\n // Telemetry must never block command execution.\n }\n}\n\nexport async function emitTelemetryErrorEvent(context: TelemetryErrorEventContext): Promise<void> {\n if (telemetryDisabledByEnvironment()) {\n return;\n }\n try {\n const globalPmRoot = resolveGlobalPmRoot(process.cwd());\n const settings = await readSettings(globalPmRoot);\n if (!settings.telemetry.enabled) {\n return;\n }\n const captureLevel = normalizeCaptureLevel(settings.telemetry.capture_level);\n const { installationId, endpoint, retentionDays } = await ensureInstallationId(globalPmRoot);\n const pmVersion = normalizePmVersion(context.pm_version);\n const sourceContext = resolveTelemetrySourceContext(context.global);\n const pmRootHash = hashWithInstallationId(installationId, context.pm_root);\n const cwdHash = hashWithInstallationId(installationId, process.cwd());\n const occurredAt = nowIso();\n const normalizedErrorCode =\n normalizeTelemetryErrorCode(\n inferTelemetryErrorCode({\n ok: false,\n errorCode: context.error_code,\n errorMessage: context.error_message,\n exitCode: context.exit_code,\n }),\n ) ?? \"unknown_error\";\n const normalizedErrorCategory =\n context.error_category ?? resolveTelemetryErrorCategory(normalizedErrorCode);\n const normalizedExitCode = normalizeTelemetryExitCode(context.exit_code, false);\n const normalizedCommand = context.command.trim().length > 0 ? context.command : \"<unknown>\";\n const commandTaxonomy = deriveTelemetryCommandTaxonomy(normalizedCommand);\n const commandResolution =\n context.command_resolution ??\n deriveTelemetryCommandResolution({\n ok: false,\n errorCode: normalizedErrorCode,\n errorCategory: normalizedErrorCategory,\n });\n const resolutionStage = context.resolution_stage ?? \"unknown\";\n\n const event: TelemetryEvent = {\n schema_version: TELEMETRY_SCHEMA_VERSION,\n event_id: crypto.randomUUID(),\n event_type: \"command_error\",\n occurred_at: occurredAt,\n installation_id: installationId,\n session_id: PROCESS_SESSION_ID,\n command: sanitizeString(normalizedCommand, \"redacted\"),\n payload: buildCommandErrorPayload({\n captureLevel,\n pmVersion,\n sourceContext,\n command: normalizedCommand,\n commandTaxonomy,\n commandResolution,\n resolutionStage,\n args: context.args,\n options: context.options,\n pmRootHash,\n cwdHash,\n installationId,\n errorCode: normalizedErrorCode,\n errorCategory: normalizedErrorCategory,\n exitCode: normalizedExitCode,\n errorMessage: context.error_message,\n }),\n };\n await enqueueTelemetryEvent(globalPmRoot, event);\n _lastFlushPromise = flushQueue(globalPmRoot, endpoint, retentionDays).catch(() => {});\n } catch {\n // Telemetry must never block command execution.\n }\n}\n"]}
|
package/docs/CONFIGURATION.md
CHANGED
|
@@ -45,7 +45,6 @@ Precedence:
|
|
|
45
45
|
| `locks.ttl_seconds` | stale lock threshold |
|
|
46
46
|
| `history.missing_stream` | `auto_create` or `strict_error` |
|
|
47
47
|
| `testing.record_results_to_items` | persist bounded linked-test summaries |
|
|
48
|
-
| `telemetry.enabled` / `telemetry.capture_level` | usage diagnostics policy; default enabled with redacted capture |
|
|
49
48
|
| `validation.sprint_release_format` | `warn` or `strict_error` |
|
|
50
49
|
| `validation.parent_reference` | `warn` or `strict_error` |
|
|
51
50
|
| `item_types.definitions[]` | custom item types and type options |
|
|
@@ -58,7 +57,6 @@ Precedence:
|
|
|
58
57
|
| `PM_AUTHOR` | explicit mutation author |
|
|
59
58
|
| `PM_PATH` | override project tracker root for tests or sandboxes |
|
|
60
59
|
| `PM_GLOBAL_PATH` | override global profile root for tests or sandboxes |
|
|
61
|
-
| `PM_TELEMETRY_DISABLED` | disable telemetry and Sentry collection for the current process |
|
|
62
60
|
| `PM_OLLAMA_MODEL` | choose default Ollama embedding model |
|
|
63
61
|
| `PM_DISABLE_OLLAMA_AUTO_DEFAULTS` | disable implicit Ollama search defaults |
|
|
64
62
|
|
package/docs/RELEASING.md
CHANGED
|
@@ -5,9 +5,10 @@ This page is for maintainers cutting npm and GitHub releases. It assumes release
|
|
|
5
5
|
## Agent Quick Context
|
|
6
6
|
|
|
7
7
|
- Release versioning is calendar SemVer-compatible: `YYYY.M.D` or `YYYY.M.D-N`.
|
|
8
|
-
-
|
|
8
|
+
- Daily release preparation is owned by the GitHub Actions auto-release workflow.
|
|
9
|
+
- Publishing is owned by the tag-driven GitHub Actions release workflow.
|
|
9
10
|
- Do not run manual `npm publish`.
|
|
10
|
-
- Run local gates before
|
|
11
|
+
- Run local parity gates before pushing release tags.
|
|
11
12
|
|
|
12
13
|
Tracked documentation work: [pm-1sb2](../.agents/pm/tasks/pm-1sb2.toon).
|
|
13
14
|
|
|
@@ -37,9 +38,34 @@ pnpm version:check
|
|
|
37
38
|
- Keep any `release` environment compatible with free GitHub features. This repository is public, so environment secrets and tag/branch deployment rules are compatible with the free GitHub path; do not add paid-only release gates.
|
|
38
39
|
- Ensure `GITHUB_TOKEN` has `contents: write` for GitHub Release creation.
|
|
39
40
|
- Keep `package.json` repository, homepage, and bugs URLs aligned with `https://github.com/unbraind/pm-cli`.
|
|
40
|
-
- Keep npm automation token settings compatible with provenance publishing. The workflow must keep `id-token: write`, a GitHub-hosted runner, and `npm publish --access public --provenance`.
|
|
41
|
+
- Keep npm automation token settings compatible with provenance publishing. The release workflow must keep `id-token: write`, a GitHub-hosted runner, and `npm publish --access public --provenance`.
|
|
41
42
|
|
|
42
|
-
##
|
|
43
|
+
## Automated Daily Driver
|
|
44
|
+
|
|
45
|
+
`.github/workflows/auto-release.yml` runs once per day and can also be dispatched manually.
|
|
46
|
+
|
|
47
|
+
Policy:
|
|
48
|
+
|
|
49
|
+
- release only when commits exist after the latest release tag
|
|
50
|
+
- release at most once per UTC day by default
|
|
51
|
+
- same-day follow-up release (`YYYY.M.D-N`) is manual-only via `allow_same_day_release=true`
|
|
52
|
+
- release preparation must pass all quality and compatibility gates before commit+tag push
|
|
53
|
+
|
|
54
|
+
Pipeline entrypoint:
|
|
55
|
+
|
|
56
|
+
```bash
|
|
57
|
+
node scripts/release/run-release-pipeline.mjs
|
|
58
|
+
```
|
|
59
|
+
|
|
60
|
+
The pipeline performs:
|
|
61
|
+
|
|
62
|
+
1. change detection + one-release-per-day guard
|
|
63
|
+
2. version bump + changelog promotion from `[Unreleased]`
|
|
64
|
+
3. strict gates (build, typecheck, coverage, static quality, compatibility, security, smoke checks, reliability gate)
|
|
65
|
+
4. release note generation from changelog + pm evidence
|
|
66
|
+
5. commit and tag creation (plus optional push)
|
|
67
|
+
|
|
68
|
+
## Local Release Parity Checklist
|
|
43
69
|
|
|
44
70
|
1. Confirm or compute the version.
|
|
45
71
|
|
|
@@ -59,49 +85,23 @@ Minimum coverage:
|
|
|
59
85
|
- closed issue metadata and history drift checks
|
|
60
86
|
- current-build write mutation and item-count preservation
|
|
61
87
|
|
|
62
|
-
3. Review
|
|
88
|
+
3. Review private reliability signals.
|
|
63
89
|
|
|
64
|
-
Use
|
|
90
|
+
Use maintainer-only local workflows for reliability checks and incident triage. Keep operational details, infrastructure topology, and raw diagnostics out of tracked release documentation and release notes.
|
|
65
91
|
|
|
66
|
-
|
|
92
|
+
If private reliability checks identify repeated user friction, either confirm the current release already contains the remediation with regression coverage or fix it before continuing.
|
|
67
93
|
|
|
68
|
-
|
|
69
|
-
bash scripts/prod/telemetry/stack-health.sh
|
|
70
|
-
bash scripts/prod/telemetry/query-telemetry.sh
|
|
71
|
-
bash scripts/prod/telemetry/analyze-errors.sh "24 hours"
|
|
72
|
-
sentry issue list unbrained/pm-cli --query "is:unresolved" --period 14d --json --fields shortId,title,level,status,priority,count,lastSeen,isUnhandled
|
|
73
|
-
```
|
|
74
|
-
|
|
75
|
-
If telemetry or Sentry identifies repeated user friction, either confirm the current release already contains the remediation with regression coverage or fix it before continuing.
|
|
76
|
-
|
|
77
|
-
4. Update release files.
|
|
78
|
-
|
|
79
|
-
- `package.json`
|
|
80
|
-
- `pnpm-lock.yaml`
|
|
81
|
-
- [CHANGELOG.md](../CHANGELOG.md)
|
|
82
|
-
|
|
83
|
-
5. Generate release notes.
|
|
94
|
+
4. Run the same release pipeline locally.
|
|
84
95
|
|
|
85
96
|
```bash
|
|
86
|
-
|
|
87
|
-
pnpm release:
|
|
88
|
-
```
|
|
89
|
-
|
|
90
|
-
6. Run local gates.
|
|
97
|
+
# Read-only parity check
|
|
98
|
+
pnpm release:pipeline:dry-run
|
|
91
99
|
|
|
92
|
-
|
|
93
|
-
pnpm
|
|
94
|
-
pnpm build
|
|
95
|
-
pnpm typecheck
|
|
96
|
-
pnpm test
|
|
97
|
-
pnpm test:coverage
|
|
98
|
-
node scripts/run-tests.mjs coverage
|
|
99
|
-
pnpm version:check
|
|
100
|
-
pnpm security:scan
|
|
101
|
-
pnpm smoke:npx
|
|
100
|
+
# Full local preparation (version/changelog mutation + local commit/tag)
|
|
101
|
+
pnpm release:pipeline -- --telemetry-mode required
|
|
102
102
|
```
|
|
103
103
|
|
|
104
|
-
|
|
104
|
+
5. Push branch and tag after local green.
|
|
105
105
|
|
|
106
106
|
```bash
|
|
107
107
|
git push origin main
|
|
@@ -118,12 +118,16 @@ git push origin v<version>
|
|
|
118
118
|
- version policy and tag guard
|
|
119
119
|
- secret scan
|
|
120
120
|
- build, typecheck, test, and coverage
|
|
121
|
+
- static quality gate (complexity, duplication, dead/orphan module, file/folder hygiene)
|
|
122
|
+
- temporary-project compatibility gate against latest published tracker data
|
|
123
|
+
- reliability threshold gate (Sentry severity threshold, telemetry policy mode)
|
|
121
124
|
- sandboxed `pm` coverage
|
|
122
125
|
- optional Sentry release metadata and sourcemap upload when `SENTRY_AUTH_TOKEN` is configured
|
|
123
126
|
- npm pack dry run and npx tarball smoke test
|
|
124
127
|
- generated release notes from changelog plus sanitized tracker metadata
|
|
125
128
|
- artifact uploads
|
|
126
129
|
- `npm publish --access public --provenance`
|
|
130
|
+
- post-publish npm/npx/bunx verification
|
|
127
131
|
- GitHub Release creation
|
|
128
132
|
|
|
129
133
|
Monitor:
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@unbrained/pm-cli",
|
|
3
|
-
"version": "2026.5.
|
|
3
|
+
"version": "2026.5.4",
|
|
4
4
|
"description": "Git-native project management CLI for humans and agents.",
|
|
5
5
|
"type": "module",
|
|
6
6
|
"author": "unbrained",
|
|
@@ -56,9 +56,14 @@
|
|
|
56
56
|
"dev": "tsx src/cli.ts",
|
|
57
57
|
"test": "node scripts/run-tests.mjs test",
|
|
58
58
|
"test:coverage": "node scripts/run-tests.mjs coverage",
|
|
59
|
+
"quality:static": "node scripts/release/static-quality-gate.mjs",
|
|
59
60
|
"version:check": "node scripts/release-version.mjs check",
|
|
60
61
|
"version:next": "node scripts/release-version.mjs next",
|
|
61
62
|
"release:notes": "node scripts/generate-release-notes.mjs",
|
|
63
|
+
"release:changelog": "node scripts/release/changelog-promote.mjs",
|
|
64
|
+
"release:gates": "node scripts/release/run-gates.mjs --telemetry-mode best-effort",
|
|
65
|
+
"release:pipeline": "node scripts/release/run-release-pipeline.mjs",
|
|
66
|
+
"release:pipeline:dry-run": "node scripts/release/run-release-pipeline.mjs --dry-run",
|
|
62
67
|
"security:scan": "node scripts/check-secrets.mjs",
|
|
63
68
|
"smoke:npx": "node scripts/smoke-npx-from-pack.mjs",
|
|
64
69
|
"sentry:inject": "sentry-cli sourcemaps inject dist/",
|