@i4ctime/q-ring 0.4.0 → 0.9.2
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +341 -10
- package/dist/{chunk-IGNU622R.js → chunk-5JBU7TWN.js} +715 -124
- package/dist/chunk-5JBU7TWN.js.map +1 -0
- package/dist/chunk-WG4ZKN7Q.js +1632 -0
- package/dist/chunk-WG4ZKN7Q.js.map +1 -0
- package/dist/{dashboard-32PCZF7D.js → dashboard-JT5ZNLT5.js} +41 -16
- package/dist/dashboard-JT5ZNLT5.js.map +1 -0
- package/dist/{dashboard-HVIQO6NT.js → dashboard-Q5OQRQCX.js} +41 -16
- package/dist/dashboard-Q5OQRQCX.js.map +1 -0
- package/dist/index.js +1213 -39
- package/dist/index.js.map +1 -1
- package/dist/mcp.js +1066 -48
- package/dist/mcp.js.map +1 -1
- package/package.json +1 -1
- package/dist/chunk-6IQ5SFLI.js +0 -967
- package/dist/chunk-6IQ5SFLI.js.map +0 -1
- package/dist/chunk-IGNU622R.js.map +0 -1
- package/dist/dashboard-32PCZF7D.js.map +0 -1
- package/dist/dashboard-HVIQO6NT.js.map +0 -1
package/dist/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/cli/commands.ts","../src/core/noise.ts","../src/utils/colors.ts","../src/core/agent.ts","../src/core/teleport.ts","../src/core/import.ts","../src/core/validate.ts","../src/utils/prompt.ts","../src/index.ts"],"sourcesContent":["import { Command } from \"commander\";\nimport {\n getSecret,\n setSecret,\n deleteSecret,\n listSecrets,\n exportSecrets,\n hasSecret,\n getEnvelope,\n entangleSecrets,\n disentangleSecrets,\n type KeyringOptions,\n type SetSecretOptions,\n} from \"../core/keyring.js\";\nimport { startAgent, runHealthScan } from \"../core/agent.js\";\nimport type { Scope } from \"../core/scope.js\";\nimport { collapseEnvironment, readProjectConfig } from \"../core/collapse.js\";\nimport { checkDecay, type DecayStatus } from \"../core/envelope.js\";\nimport { queryAudit, detectAnomalies } from \"../core/observer.js\";\nimport { generateSecret, estimateEntropy, type NoiseFormat } from \"../core/noise.js\";\nimport { tunnelCreate, tunnelRead, tunnelDestroy, tunnelList } from \"../core/tunnel.js\";\nimport { teleportPack, teleportUnpack } from \"../core/teleport.js\";\nimport { importDotenv } from \"../core/import.js\";\nimport { validateSecret, registry as providerRegistry } from \"../core/validate.js\";\nimport {\n registerHook,\n removeHook,\n listHooks as listAllHooks,\n enableHook,\n disableHook,\n fireHooks,\n type HookType,\n type HookAction,\n} from \"../core/hooks.js\";\nimport { writeFileSync } from \"node:fs\";\nimport { promptSecret } from \"../utils/prompt.js\";\nimport { c, scopeColor, decayIndicator, envBadge, SYMBOLS } from \"../utils/colors.js\";\n\n/**\n * Break the CodeQL taint chain from getPassword → console.log.\n * Copies a string value so static analysis no longer considers it\n * \"sensitive data returned by getPassword\".\n */\nfunction safeStr(s: string | undefined | null): string {\n return s == null ? \"\" : `${s}`;\n}\nfunction safeNum(n: number | undefined | null): number {\n return n == null ? 0 : Number(n);\n}\nfunction safeArr<T>(arr: T[] | undefined | null): T[] {\n return arr ? arr.map((x) => (typeof x === \"string\" ? safeStr(x) : x) as T) : [];\n}\n\nfunction buildOpts(cmd: {\n global?: boolean;\n project?: boolean;\n projectPath?: string;\n env?: string;\n}): KeyringOptions {\n let scope: Scope | undefined;\n if (cmd.global) scope = \"global\";\n else if (cmd.project) scope = \"project\";\n\n const projectPath =\n cmd.projectPath ?? (cmd.project ? process.cwd() : undefined);\n\n if (scope === \"project\" && !projectPath) {\n throw new Error(\"Project path is required for project scope\");\n }\n\n return {\n scope,\n projectPath: projectPath ?? process.cwd(),\n env: cmd.env,\n source: \"cli\",\n };\n}\n\nexport function createProgram(): Command {\n const program = new Command()\n .name(\"qring\")\n .description(\n `${c.bold(\"q-ring\")} ${c.dim(\"— quantum keyring for AI coding tools\")}`,\n )\n .version(\"0.4.0\");\n\n // ─── Core Commands ───\n\n program\n .command(\"set <key> [value]\")\n .description(\"Store a secret (with optional quantum metadata)\")\n .option(\"-g, --global\", \"Store in global scope\")\n .option(\"-p, --project\", \"Store in project scope (uses cwd)\")\n .option(\"--project-path <path>\", \"Explicit project path\")\n .option(\"-e, --env <env>\", \"Set value for a specific environment (superposition)\")\n .option(\"--ttl <seconds>\", \"Time-to-live in seconds (quantum decay)\", parseInt)\n .option(\"--expires <iso>\", \"Expiry timestamp (ISO 8601)\")\n .option(\"--description <desc>\", \"Human-readable description\")\n .option(\"--tags <tags>\", \"Comma-separated tags\")\n .option(\"--rotation-format <format>\", \"Format for auto-rotation (api-key, password, uuid, hex, base64, alphanumeric, token)\")\n .option(\"--rotation-prefix <prefix>\", \"Prefix for auto-rotation (e.g. sk-)\")\n .action(async (key: string, value: string | undefined, cmd) => {\n const opts = buildOpts(cmd);\n\n if (!value) {\n value = await promptSecret(`${SYMBOLS.key} Enter value for ${c.bold(key)}: `);\n if (!value) {\n console.error(c.red(`${SYMBOLS.cross} No value provided, aborting.`));\n process.exit(1);\n }\n }\n\n const setOpts: SetSecretOptions = {\n ...opts,\n ttlSeconds: cmd.ttl,\n expiresAt: cmd.expires,\n description: cmd.description,\n tags: cmd.tags?.split(\",\").map((t: string) => t.trim()),\n rotationFormat: cmd.rotationFormat,\n rotationPrefix: cmd.rotationPrefix,\n };\n\n // If --env is specified, set as a superposition state\n if (cmd.env) {\n const existing = getEnvelope(key, opts);\n const states = existing?.envelope?.states ?? {};\n states[cmd.env] = value;\n\n // Preserve existing simple value as \"default\" state if migrating\n if (existing?.envelope?.value && !states[\"default\"]) {\n states[\"default\"] = existing.envelope.value;\n }\n\n setOpts.states = states;\n setOpts.defaultEnv = existing?.envelope?.defaultEnv ?? cmd.env;\n setSecret(key, \"\", setOpts);\n\n console.log(\n `${SYMBOLS.check} ${c.green(\"saved\")} ${c.bold(key)} ${envBadge(cmd.env)} ${c.dim(`[${scopeColor(opts.scope ?? \"global\")}]`)}`,\n );\n } else {\n setSecret(key, value, setOpts);\n const extras: string[] = [];\n if (cmd.ttl) extras.push(`${SYMBOLS.clock} ttl=${cmd.ttl}s`);\n if (cmd.description) extras.push(c.dim(cmd.description));\n\n console.log(\n `${SYMBOLS.check} ${c.green(\"saved\")} ${c.bold(key)} ${c.dim(`[${scopeColor(opts.scope ?? \"global\")}]`)} ${extras.join(\" \")}`,\n );\n }\n });\n\n program\n .command(\"get <key>\")\n .description(\"Retrieve a secret (collapses superposition if needed)\")\n .option(\"-g, --global\", \"Look only in global scope\")\n .option(\"-p, --project\", \"Look only in project scope\")\n .option(\"--project-path <path>\", \"Explicit project path\")\n .option(\"-e, --env <env>\", \"Force a specific environment\")\n .action((key: string, cmd) => {\n const opts = buildOpts(cmd);\n const value = getSecret(key, opts);\n\n if (value === null) {\n console.error(c.red(`${SYMBOLS.cross} Secret \"${key}\" not found`));\n process.exit(1);\n }\n\n process.stdout.write(value);\n });\n\n program\n .command(\"delete <key>\")\n .alias(\"rm\")\n .description(\"Remove a secret from the keyring\")\n .option(\"-g, --global\", \"Delete from global scope only\")\n .option(\"-p, --project\", \"Delete from project scope only\")\n .option(\"--project-path <path>\", \"Explicit project path\")\n .action((key: string, cmd) => {\n const opts = buildOpts(cmd);\n const deleted = deleteSecret(key, opts);\n\n if (deleted) {\n console.log(`${SYMBOLS.check} ${c.green(\"deleted\")} ${c.bold(key)}`);\n } else {\n console.error(c.red(`${SYMBOLS.cross} Secret \"${key}\" not found`));\n process.exit(1);\n }\n });\n\n program\n .command(\"list\")\n .alias(\"ls\")\n .description(\"List all secrets with quantum status indicators\")\n .option(\"-g, --global\", \"List global scope only\")\n .option(\"-p, --project\", \"List project scope only\")\n .option(\"--project-path <path>\", \"Explicit project path\")\n .option(\"--show-decay\", \"Show decay/expiry status\")\n .option(\"-t, --tag <tag>\", \"Filter by tag\")\n .option(\"--expired\", \"Show only expired secrets\")\n .option(\"--stale\", \"Show only stale secrets (75%+ decay)\")\n .option(\"-f, --filter <pattern>\", \"Glob pattern on key name\")\n .action((cmd) => {\n const opts = buildOpts(cmd);\n let entries = listSecrets(opts);\n\n if (cmd.tag) {\n entries = entries.filter((e) =>\n e.envelope?.meta.tags?.includes(cmd.tag),\n );\n }\n if (cmd.expired) {\n entries = entries.filter((e) => e.decay?.isExpired);\n }\n if (cmd.stale) {\n entries = entries.filter(\n (e) => e.decay?.isStale && !e.decay?.isExpired,\n );\n }\n if (cmd.filter) {\n const regex = new RegExp(\n \"^\" + cmd.filter.replace(/\\*/g, \".*\") + \"$\",\n \"i\",\n );\n entries = entries.filter((e) => regex.test(e.key));\n }\n\n if (entries.length === 0) {\n console.log(c.dim(\"No secrets found\"));\n return;\n }\n\n console.log(\n c.bold(`\\n ${SYMBOLS.key} q-ring secrets (${entries.length})\\n`),\n );\n\n const maxKeyLen = Math.max(...entries.map((e) => e.key.length));\n\n for (const entry of entries) {\n const parts: string[] = [];\n\n const key = safeStr(entry.key);\n const scope = safeStr(entry.scope) as Scope;\n const envs = entry.envelope?.states ? Object.keys(entry.envelope.states).map(safeStr) : null;\n const entangledCount = safeNum(entry.envelope?.meta.entangled?.length);\n const accessCount = safeNum(entry.envelope?.meta.accessCount);\n const tags = safeArr(entry.envelope?.meta.tags);\n const decayPct = safeNum(entry.decay?.lifetimePercent);\n const expired = !!entry.decay?.isExpired;\n const timeLeft = safeStr(entry.decay?.timeRemaining);\n\n parts.push(c.dim(\"[\") + scopeColor(scope) + c.dim(\"]\"));\n parts.push(c.bold(key.padEnd(maxKeyLen)));\n\n if (envs) {\n parts.push(c.magenta(`[${envs.join(\"|\")}]`));\n }\n\n if (entry.decay && (decayPct > 0 || expired)) {\n parts.push(decayIndicator(decayPct, expired));\n if (timeLeft && !expired) {\n parts.push(c.dim(timeLeft));\n }\n }\n\n if (entangledCount > 0) {\n parts.push(c.cyan(`${SYMBOLS.link} ${entangledCount}`));\n }\n\n if (accessCount > 0) {\n parts.push(c.dim(`${SYMBOLS.eye} ${accessCount}`));\n }\n\n if (tags.length > 0) {\n parts.push(c.dim(tags.map((t) => `#${t}`).join(\" \")));\n }\n\n console.log(` ${parts.join(\" \")}`);\n }\n\n console.log();\n });\n\n program\n .command(\"inspect <key>\")\n .description(\"Show full quantum state of a secret\")\n .option(\"-g, --global\", \"Inspect global scope only\")\n .option(\"-p, --project\", \"Inspect project scope only\")\n .option(\"--project-path <path>\", \"Explicit project path\")\n .action((key: string, cmd) => {\n const opts = buildOpts(cmd);\n const result = getEnvelope(key, opts);\n\n if (!result) {\n console.error(c.red(`${SYMBOLS.cross} Secret \"${key}\" not found`));\n process.exit(1);\n }\n\n const { envelope, scope } = result;\n const decay = checkDecay(envelope);\n\n const safeScope = safeStr(scope) as Scope;\n const createdAt = safeStr(envelope.meta.createdAt);\n const updatedAt = safeStr(envelope.meta.updatedAt);\n const accessCount = safeNum(envelope.meta.accessCount);\n const lastAccess = safeStr(envelope.meta.lastAccessedAt);\n const desc = safeStr(envelope.meta.description);\n const tags = safeArr(envelope.meta.tags);\n const entangled = (envelope.meta.entangled ?? []).map((l) => ({\n service: safeStr(l.service),\n key: safeStr(l.key),\n }));\n const stateEnvs = envelope.states ? Object.keys(envelope.states).map(safeStr) : null;\n const defaultEnv = safeStr(envelope.defaultEnv);\n const decayTime = safeStr(decay.timeRemaining);\n const decayPct = safeNum(decay.lifetimePercent);\n const expired = !!decay.isExpired;\n\n console.log(`\\n ${c.bold(SYMBOLS.key + \" \" + key)}`);\n console.log(` ${c.dim(\"scope:\")} ${scopeColor(safeScope)}`);\n\n if (stateEnvs) {\n console.log(` ${c.dim(\"type:\")} ${c.magenta(\"superposition\")}`);\n console.log(` ${c.dim(\"states:\")}`);\n for (const env of stateEnvs) {\n const isDefault = env === defaultEnv;\n console.log(\n ` ${envBadge(env)} ${isDefault ? c.dim(\"(default)\") : \"\"}`,\n );\n }\n } else {\n console.log(` ${c.dim(\"type:\")} ${c.green(\"collapsed\")}`);\n }\n\n console.log(` ${c.dim(\"created:\")} ${createdAt}`);\n console.log(` ${c.dim(\"updated:\")} ${updatedAt}`);\n console.log(` ${c.dim(\"accessed:\")} ${accessCount} times`);\n\n if (lastAccess) {\n console.log(` ${c.dim(\"last read:\")} ${lastAccess}`);\n }\n\n if (desc) {\n console.log(` ${c.dim(\"desc:\")} ${desc}`);\n }\n\n if (tags.length > 0) {\n console.log(\n ` ${c.dim(\"tags:\")} ${tags.map((t) => c.cyan(`#${t}`)).join(\" \")}`,\n );\n }\n\n if (decayTime) {\n console.log(\n ` ${c.dim(\"decay:\")} ${decayIndicator(decayPct, expired)} ${decayTime}`,\n );\n }\n\n if (entangled.length > 0) {\n console.log(` ${c.dim(\"entangled:\")}`);\n for (const link of entangled) {\n console.log(` ${SYMBOLS.link} ${link.service}/${link.key}`);\n }\n }\n\n console.log();\n });\n\n program\n .command(\"export\")\n .description(\"Export secrets as .env or JSON (collapses superposition)\")\n .option(\"-f, --format <format>\", \"Output format: env or json\", \"env\")\n .option(\"-g, --global\", \"Export global scope only\")\n .option(\"-p, --project\", \"Export project scope only\")\n .option(\"--project-path <path>\", \"Explicit project path\")\n .option(\"-e, --env <env>\", \"Force environment for collapse\")\n .option(\"-k, --keys <keys>\", \"Comma-separated key names to export\")\n .option(\"-t, --tags <tags>\", \"Comma-separated tags to filter by\")\n .action((cmd) => {\n const opts = buildOpts(cmd);\n const output = exportSecrets({\n ...opts,\n format: cmd.format,\n keys: cmd.keys?.split(\",\").map((k: string) => k.trim()),\n tags: cmd.tags?.split(\",\").map((t: string) => t.trim()),\n });\n process.stdout.write(output + \"\\n\");\n });\n\n program\n .command(\"import <file>\")\n .description(\"Import secrets from a .env file\")\n .option(\"-g, --global\", \"Import to global scope\")\n .option(\"-p, --project\", \"Import to project scope\")\n .option(\"--project-path <path>\", \"Explicit project path\")\n .option(\"-e, --env <env>\", \"Environment context\")\n .option(\"--skip-existing\", \"Skip keys that already exist\")\n .option(\"--dry-run\", \"Preview what would be imported without saving\")\n .action((file: string, cmd) => {\n const opts = buildOpts(cmd);\n\n const result = importDotenv(file, {\n scope: opts.scope as \"global\" | \"project\" | undefined,\n projectPath: opts.projectPath,\n source: \"cli\",\n skipExisting: cmd.skipExisting,\n dryRun: cmd.dryRun,\n });\n\n if (cmd.dryRun) {\n console.log(\n `\\n ${SYMBOLS.package} ${c.bold(\"Dry run\")} — would import ${result.imported.length} of ${result.total} secrets:\\n`,\n );\n for (const key of result.imported) {\n console.log(` ${SYMBOLS.key} ${c.bold(key)}`);\n }\n if (result.skipped.length > 0) {\n console.log(`\\n ${c.dim(`Skipped (existing): ${result.skipped.join(\", \")}`)}`);\n }\n } else {\n console.log(\n `${SYMBOLS.check} ${c.green(\"imported\")} ${result.imported.length} secret(s) from ${c.bold(file)}`,\n );\n if (result.skipped.length > 0) {\n console.log(\n c.dim(` skipped ${result.skipped.length} existing: ${result.skipped.join(\", \")}`),\n );\n }\n }\n\n console.log();\n });\n\n program\n .command(\"check\")\n .description(\"Validate project secrets against .q-ring.json manifest\")\n .option(\"--project-path <path>\", \"Project path (defaults to cwd)\")\n .action((cmd) => {\n const projectPath = cmd.projectPath ?? process.cwd();\n const config = readProjectConfig(projectPath);\n\n if (!config?.secrets || Object.keys(config.secrets).length === 0) {\n console.error(\n c.red(`${SYMBOLS.cross} No secrets manifest found in .q-ring.json`),\n );\n console.log(\n c.dim(' Add a \"secrets\" field to your .q-ring.json to define required secrets.'),\n );\n process.exit(1);\n }\n\n console.log(\n c.bold(`\\n ${SYMBOLS.shield} Project secret manifest check\\n`),\n );\n\n let present = 0;\n let missing = 0;\n let expiredCount = 0;\n let staleCount = 0;\n\n for (const [key, manifest] of Object.entries(config.secrets)) {\n const result = getEnvelope(key, { projectPath, source: \"cli\" });\n\n if (!result) {\n if (manifest.required !== false) {\n missing++;\n console.log(\n ` ${c.red(SYMBOLS.cross)} ${c.bold(key)} ${c.red(\"MISSING\")} ${manifest.description ? c.dim(`— ${manifest.description}`) : \"\"}`,\n );\n } else {\n console.log(\n ` ${c.dim(SYMBOLS.cross)} ${c.bold(key)} ${c.dim(\"optional, not set\")} ${manifest.description ? c.dim(`— ${manifest.description}`) : \"\"}`,\n );\n }\n continue;\n }\n\n const decay = checkDecay(result.envelope);\n\n if (decay.isExpired) {\n expiredCount++;\n console.log(\n ` ${c.red(SYMBOLS.warning)} ${c.bold(key)} ${c.bgRed(c.white(\" EXPIRED \"))} ${manifest.description ? c.dim(`— ${manifest.description}`) : \"\"}`,\n );\n } else if (decay.isStale) {\n staleCount++;\n console.log(\n ` ${c.yellow(SYMBOLS.warning)} ${c.bold(key)} ${c.yellow(`stale (${decay.lifetimePercent}%)`)} ${manifest.description ? c.dim(`— ${manifest.description}`) : \"\"}`,\n );\n } else {\n present++;\n console.log(\n ` ${c.green(SYMBOLS.check)} ${c.bold(key)} ${c.green(\"OK\")} ${manifest.description ? c.dim(`— ${manifest.description}`) : \"\"}`,\n );\n }\n }\n\n const total = Object.keys(config.secrets).length;\n console.log(\n `\\n ${c.bold(`${total} declared`)} ${c.green(`${present} present`)} ${c.yellow(`${staleCount} stale`)} ${c.red(`${expiredCount} expired`)} ${c.red(`${missing} missing`)}`,\n );\n\n if (missing > 0) {\n console.log(\n `\\n ${c.red(\"Project is NOT ready — missing required secrets.\")}`,\n );\n } else if (expiredCount > 0) {\n console.log(\n `\\n ${c.yellow(\"Project has expired secrets that need rotation.\")}`,\n );\n } else {\n console.log(\n `\\n ${c.green(`${SYMBOLS.check} Project is ready — all required secrets present.`)}`,\n );\n }\n\n console.log();\n\n if (missing > 0) process.exit(1);\n });\n\n program\n .command(\"validate [key]\")\n .description(\"Test if a secret is actually valid with its target service\")\n .option(\"-g, --global\", \"Global scope only\")\n .option(\"-p, --project\", \"Project scope only\")\n .option(\"--project-path <path>\", \"Explicit project path\")\n .option(\"--provider <name>\", \"Force a specific provider (openai, stripe, github, aws, http)\")\n .option(\"--all\", \"Validate all secrets that have a detectable provider\")\n .option(\"--manifest\", \"Only validate manifest-declared secrets (with --all)\")\n .option(\"--list-providers\", \"List all available providers\")\n .action(async (key: string | undefined, cmd) => {\n if (cmd.listProviders) {\n console.log(c.bold(`\\n ${SYMBOLS.shield} Available validation providers\\n`));\n for (const p of providerRegistry.listProviders()) {\n const prefixes = p.prefixes?.length ? c.dim(` (${p.prefixes.join(\", \")})`) : \"\";\n console.log(` ${c.cyan(p.name.padEnd(10))} ${p.description}${prefixes}`);\n }\n console.log();\n return;\n }\n\n if (!key && !cmd.all) {\n console.error(c.red(`${SYMBOLS.cross} Provide a key name or use --all`));\n process.exit(1);\n }\n\n const opts = buildOpts(cmd);\n\n if (cmd.all) {\n let entries = listSecrets(opts);\n const projectPath = cmd.projectPath ?? process.cwd();\n\n if (cmd.manifest) {\n const config = readProjectConfig(projectPath);\n if (config?.secrets) {\n const manifestKeys = new Set(Object.keys(config.secrets));\n entries = entries.filter((e) => manifestKeys.has(e.key));\n }\n }\n\n console.log(c.bold(`\\n ${SYMBOLS.shield} Validating secrets\\n`));\n\n let validated = 0;\n let skipped = 0;\n\n for (const entry of entries) {\n const value = getSecret(entry.key, { ...opts, scope: entry.scope });\n if (!value) { skipped++; continue; }\n\n const provHint = entry.envelope?.meta.provider ?? cmd.provider;\n const result = await validateSecret(value, { provider: provHint });\n\n if (result.status === \"unknown\") { skipped++; continue; }\n\n validated++;\n const icon = result.status === \"valid\" ? c.green(SYMBOLS.check)\n : result.status === \"invalid\" ? c.red(SYMBOLS.cross)\n : c.yellow(SYMBOLS.warning);\n const statusText = result.status === \"valid\" ? c.green(\"valid\")\n : result.status === \"invalid\" ? c.red(\"invalid\")\n : c.yellow(\"error\");\n\n console.log(\n ` ${icon} ${c.bold(entry.key.padEnd(24))} ${statusText} ${c.dim(`(${result.provider}, ${result.latencyMs}ms)`)}${result.status !== \"valid\" ? ` ${c.dim(\"— \" + result.message)}` : \"\"}`,\n );\n }\n\n console.log(`\\n ${c.dim(`${validated} validated, ${skipped} skipped (no provider)`)}\\n`);\n return;\n }\n\n const value = getSecret(key!, opts);\n if (!value) {\n console.error(c.red(`${SYMBOLS.cross} Secret \"${key}\" not found`));\n process.exit(1);\n }\n\n const envelope = getEnvelope(key!, opts);\n const provHint = envelope?.envelope.meta.provider ?? cmd.provider;\n const result = await validateSecret(value, { provider: provHint });\n\n const icon = result.status === \"valid\" ? c.green(SYMBOLS.check)\n : result.status === \"invalid\" ? c.red(SYMBOLS.cross)\n : result.status === \"error\" ? c.yellow(SYMBOLS.warning)\n : c.dim(\"○\");\n\n console.log(`\\n ${icon} ${c.bold(key!)} ${result.status} ${c.dim(`(${result.provider}, ${result.latencyMs}ms)`)}`);\n if (result.message && result.status !== \"valid\") {\n console.log(` ${c.dim(result.message)}`);\n }\n console.log();\n });\n\n // ─── Quantum Commands ───\n\n program\n .command(\"env\")\n .description(\"Show detected environment (wavefunction collapse context)\")\n .option(\"--project-path <path>\", \"Project path for detection\")\n .action((cmd) => {\n const result = collapseEnvironment({\n projectPath: cmd.projectPath ?? process.cwd(),\n });\n\n if (result) {\n console.log(\n `${SYMBOLS.zap} ${c.bold(\"Collapsed environment:\")} ${envBadge(result.env)} ${c.dim(`(source: ${result.source})`)}`,\n );\n } else {\n console.log(\n c.dim(\"No environment detected. Set QRING_ENV, NODE_ENV, or create .q-ring.json\"),\n );\n }\n });\n\n program\n .command(\"generate\")\n .alias(\"gen\")\n .description(\"Generate a cryptographic secret (quantum noise)\")\n .option(\n \"-f, --format <format>\",\n \"Format: hex, base64, alphanumeric, uuid, api-key, token, password\",\n \"api-key\",\n )\n .option(\"-l, --length <n>\", \"Length (bytes or chars depending on format)\", parseInt)\n .option(\"--prefix <prefix>\", \"Prefix for api-key/token format\")\n .option(\"-s, --save <key>\", \"Save the generated secret to keyring with this key\")\n .option(\"-g, --global\", \"Save to global scope\")\n .option(\"-p, --project\", \"Save to project scope\")\n .option(\"--project-path <path>\", \"Explicit project path\")\n .action((cmd) => {\n const secret = generateSecret({\n format: cmd.format as NoiseFormat,\n length: cmd.length,\n prefix: cmd.prefix,\n });\n\n const entropy = estimateEntropy(secret);\n\n if (cmd.save) {\n const opts = buildOpts(cmd);\n setSecret(cmd.save, secret, opts);\n console.log(\n `${SYMBOLS.sparkle} ${c.green(\"generated & saved\")} ${c.bold(cmd.save)} ${c.dim(`(${cmd.format}, ${entropy} bits entropy)`)}`,\n );\n } else {\n process.stdout.write(secret);\n if (process.stdout.isTTY) {\n console.log(\n `\\n${c.dim(`format: ${cmd.format} | entropy: ~${entropy} bits`)}`,\n );\n }\n }\n });\n\n program\n .command(\"entangle <sourceKey> <targetKey>\")\n .description(\"Link two secrets — rotating one updates the other\")\n .option(\"-g, --global\", \"Both in global scope\")\n .option(\"--source-project <path>\", \"Source project path\")\n .option(\"--target-project <path>\", \"Target project path\")\n .action(\n (\n sourceKey: string,\n targetKey: string,\n cmd,\n ) => {\n const sourceOpts: KeyringOptions = {\n scope: cmd.sourceProject ? \"project\" : \"global\",\n projectPath: cmd.sourceProject ?? process.cwd(),\n source: \"cli\",\n };\n const targetOpts: KeyringOptions = {\n scope: cmd.targetProject ? \"project\" : \"global\",\n projectPath: cmd.targetProject ?? process.cwd(),\n source: \"cli\",\n };\n\n entangleSecrets(sourceKey, sourceOpts, targetKey, targetOpts);\n console.log(\n `${SYMBOLS.link} ${c.cyan(\"entangled\")} ${c.bold(sourceKey)} ${SYMBOLS.arrow} ${c.bold(targetKey)}`,\n );\n },\n );\n\n program\n .command(\"disentangle <sourceKey> <targetKey>\")\n .description(\"Unlink two entangled secrets\")\n .option(\"-g, --global\", \"Both in global scope\")\n .option(\"--source-project <path>\", \"Source project path\")\n .option(\"--target-project <path>\", \"Target project path\")\n .action(\n (\n sourceKey: string,\n targetKey: string,\n cmd,\n ) => {\n const sourceOpts: KeyringOptions = {\n scope: cmd.sourceProject ? \"project\" : \"global\",\n projectPath: cmd.sourceProject ?? process.cwd(),\n source: \"cli\",\n };\n const targetOpts: KeyringOptions = {\n scope: cmd.targetProject ? \"project\" : \"global\",\n projectPath: cmd.targetProject ?? process.cwd(),\n source: \"cli\",\n };\n\n disentangleSecrets(sourceKey, sourceOpts, targetKey, targetOpts);\n console.log(\n `${SYMBOLS.link} ${c.yellow(\"disentangled\")} ${c.bold(sourceKey)} ${SYMBOLS.arrow} ${c.bold(targetKey)}`,\n );\n },\n );\n\n // ─── Tunneling Commands ───\n\n const tunnel = program\n .command(\"tunnel\")\n .description(\"Ephemeral in-memory secrets (quantum tunneling)\");\n\n tunnel\n .command(\"create <value>\")\n .description(\"Create a tunneled secret (returns tunnel ID)\")\n .option(\"--ttl <seconds>\", \"Auto-expire after N seconds\", parseInt)\n .option(\"--max-reads <n>\", \"Self-destruct after N reads\", parseInt)\n .action((value: string, cmd) => {\n const id = tunnelCreate(value, {\n ttlSeconds: cmd.ttl,\n maxReads: cmd.maxReads,\n });\n\n console.log(`${SYMBOLS.ghost} ${c.magenta(\"tunneled\")} ${c.bold(id)}`);\n\n const extras: string[] = [];\n if (cmd.ttl) extras.push(`ttl=${cmd.ttl}s`);\n if (cmd.maxReads) extras.push(`max-reads=${cmd.maxReads}`);\n if (extras.length) console.log(c.dim(` ${extras.join(\" | \")}`));\n });\n\n tunnel\n .command(\"read <id>\")\n .description(\"Read a tunneled secret (may self-destruct)\")\n .action((id: string) => {\n const value = tunnelRead(id);\n if (value === null) {\n console.error(\n c.red(`${SYMBOLS.cross} Tunnel \"${id}\" not found or expired`),\n );\n process.exit(1);\n }\n process.stdout.write(value);\n });\n\n tunnel\n .command(\"destroy <id>\")\n .description(\"Destroy a tunneled secret immediately\")\n .action((id: string) => {\n const destroyed = tunnelDestroy(id);\n if (destroyed) {\n console.log(`${SYMBOLS.check} ${c.green(\"destroyed\")} ${id}`);\n } else {\n console.error(\n c.red(`${SYMBOLS.cross} Tunnel \"${id}\" not found`),\n );\n process.exit(1);\n }\n });\n\n tunnel\n .command(\"list\")\n .alias(\"ls\")\n .description(\"List active tunnels\")\n .action(() => {\n const tunnels = tunnelList();\n if (tunnels.length === 0) {\n console.log(c.dim(\"No active tunnels\"));\n return;\n }\n\n console.log(c.bold(`\\n ${SYMBOLS.ghost} Active tunnels (${tunnels.length})\\n`));\n for (const t of tunnels) {\n const parts = [c.bold(t.id)];\n parts.push(c.dim(`reads: ${t.accessCount}`));\n if (t.maxReads) parts.push(c.dim(`max: ${t.maxReads}`));\n if (t.expiresAt) {\n const remaining = Math.max(0, Math.floor((t.expiresAt - Date.now()) / 1000));\n parts.push(c.dim(`expires: ${remaining}s`));\n }\n console.log(` ${SYMBOLS.ghost} ${parts.join(\" \")}`);\n }\n console.log();\n });\n\n // ─── Teleportation Commands ───\n\n const tp = program\n .command(\"teleport\")\n .alias(\"tp\")\n .description(\"Encrypted secret sharing (quantum teleportation)\");\n\n tp.command(\"pack\")\n .description(\"Pack secrets into an encrypted bundle\")\n .option(\"-k, --keys <keys>\", \"Comma-separated key names to pack\")\n .option(\"-g, --global\", \"Pack global scope\")\n .option(\"-p, --project\", \"Pack project scope\")\n .option(\"--project-path <path>\", \"Explicit project path\")\n .action(async (cmd) => {\n const opts = buildOpts(cmd);\n const passphrase = await promptSecret(\n `${SYMBOLS.lock} Enter passphrase for encryption: `,\n );\n if (!passphrase) {\n console.error(c.red(\"Passphrase required\"));\n process.exit(1);\n }\n\n const entries = listSecrets(opts);\n let keys: string[] | undefined;\n if (cmd.keys) {\n keys = cmd.keys.split(\",\").map((k: string) => k.trim());\n }\n\n const secrets: { key: string; value: string; scope?: string }[] = [];\n for (const entry of entries) {\n if (keys && !keys.includes(entry.key)) continue;\n const value = getSecret(entry.key, { ...opts, scope: entry.scope });\n if (value !== null) {\n secrets.push({ key: entry.key, value, scope: entry.scope });\n }\n }\n\n if (secrets.length === 0) {\n console.error(c.red(\"No secrets to pack\"));\n process.exit(1);\n }\n\n const bundle = teleportPack(secrets, passphrase);\n process.stdout.write(bundle);\n if (process.stdout.isTTY) {\n console.log(\n `\\n${SYMBOLS.package} ${c.green(\"packed\")} ${secrets.length} secret(s)`,\n );\n }\n });\n\n tp.command(\"unpack [bundle]\")\n .description(\"Unpack and import secrets from an encrypted bundle\")\n .option(\"-g, --global\", \"Import to global scope\")\n .option(\"-p, --project\", \"Import to project scope\")\n .option(\"--project-path <path>\", \"Explicit project path\")\n .option(\"--dry-run\", \"Show what would be imported without saving\")\n .action(async (bundle: string | undefined, cmd) => {\n if (!bundle) {\n // Read from stdin\n const chunks: Buffer[] = [];\n for await (const chunk of process.stdin) {\n chunks.push(chunk);\n }\n bundle = Buffer.concat(chunks).toString(\"utf8\").trim();\n }\n\n const passphrase = await promptSecret(\n `${SYMBOLS.lock} Enter passphrase for decryption: `,\n );\n\n try {\n const payload = teleportUnpack(bundle, passphrase);\n\n if (cmd.dryRun) {\n console.log(\n `\\n${SYMBOLS.package} ${c.bold(\"Would import\")} (${payload.secrets.length} secrets):\\n`,\n );\n for (const s of payload.secrets) {\n console.log(` ${SYMBOLS.key} ${c.bold(s.key)} ${c.dim(`[${s.scope ?? \"global\"}]`)}`);\n }\n return;\n }\n\n const opts = buildOpts(cmd);\n for (const s of payload.secrets) {\n setSecret(s.key, s.value, opts);\n }\n\n console.log(\n `${SYMBOLS.check} ${c.green(\"imported\")} ${payload.secrets.length} secret(s) from teleport bundle`,\n );\n } catch {\n console.error(\n c.red(`${SYMBOLS.cross} Failed to unpack: wrong passphrase or corrupted bundle`),\n );\n process.exit(1);\n }\n });\n\n // ─── Observer / Audit Commands ───\n\n program\n .command(\"audit\")\n .description(\"View the audit log (observer effect)\")\n .option(\"-k, --key <key>\", \"Filter by key\")\n .option(\n \"-a, --action <action>\",\n \"Filter by action (read, write, delete, etc.)\",\n )\n .option(\"-n, --limit <n>\", \"Number of events to show\", parseInt, 20)\n .option(\"--anomalies\", \"Detect access anomalies\")\n .action((cmd) => {\n if (cmd.anomalies) {\n const anomalies = detectAnomalies(cmd.key);\n if (anomalies.length === 0) {\n console.log(\n `${SYMBOLS.shield} ${c.green(\"No anomalies detected\")}`,\n );\n return;\n }\n\n console.log(\n `\\n${SYMBOLS.warning} ${c.bold(c.yellow(`${anomalies.length} anomaly/anomalies detected`))}\\n`,\n );\n for (const a of anomalies) {\n console.log(` ${c.yellow(a.type)} ${a.description}`);\n }\n console.log();\n return;\n }\n\n const events = queryAudit({\n key: cmd.key,\n action: cmd.action,\n limit: cmd.limit,\n });\n\n if (events.length === 0) {\n console.log(c.dim(\"No audit events found\"));\n return;\n }\n\n console.log(\n c.bold(`\\n ${SYMBOLS.eye} Audit log (${events.length} events)\\n`),\n );\n\n for (const event of events) {\n const ts = new Date(event.timestamp).toLocaleString();\n const actionColor =\n event.action === \"read\"\n ? c.blue\n : event.action === \"write\"\n ? c.green\n : event.action === \"delete\"\n ? c.red\n : c.yellow;\n\n const parts = [\n c.dim(ts),\n actionColor(event.action.padEnd(8)),\n event.key ? c.bold(event.key) : \"\",\n event.scope ? c.dim(`[${event.scope}]`) : \"\",\n event.detail ? c.dim(event.detail) : \"\",\n ];\n\n console.log(` ${parts.filter(Boolean).join(\" \")}`);\n }\n console.log();\n });\n\n // ─── Health Check ───\n\n program\n .command(\"health\")\n .description(\"Check the health of all secrets\")\n .option(\"-g, --global\", \"Check global scope only\")\n .option(\"-p, --project\", \"Check project scope only\")\n .option(\"--project-path <path>\", \"Explicit project path\")\n .action((cmd) => {\n const opts = buildOpts(cmd);\n const entries = listSecrets(opts);\n\n if (entries.length === 0) {\n console.log(c.dim(\"No secrets to check\"));\n return;\n }\n\n console.log(\n c.bold(`\\n ${SYMBOLS.shield} Secret health report\\n`),\n );\n\n let healthy = 0;\n let stale = 0;\n let expired = 0;\n let noDecay = 0;\n\n for (const entry of entries) {\n if (!entry.decay || !entry.decay.timeRemaining) {\n noDecay++;\n continue;\n }\n\n if (entry.decay.isExpired) {\n expired++;\n console.log(\n ` ${c.red(SYMBOLS.cross)} ${c.bold(entry.key)} ${c.bgRed(c.white(\" EXPIRED \"))}`,\n );\n } else if (entry.decay.isStale) {\n stale++;\n console.log(\n ` ${c.yellow(SYMBOLS.warning)} ${c.bold(entry.key)} ${c.yellow(`stale (${entry.decay.lifetimePercent}%, ${entry.decay.timeRemaining} left)`)}`,\n );\n } else {\n healthy++;\n }\n }\n\n console.log(\n `\\n ${c.green(`${SYMBOLS.check} ${healthy} healthy`)} ${c.yellow(`${SYMBOLS.warning} ${stale} stale`)} ${c.red(`${SYMBOLS.cross} ${expired} expired`)} ${c.dim(`${noDecay} no decay`)}`,\n );\n\n // Check for anomalies\n const anomalies = detectAnomalies();\n if (anomalies.length > 0) {\n console.log(\n `\\n ${c.yellow(`${SYMBOLS.warning} ${anomalies.length} access anomaly/anomalies detected`)} ${c.dim(\"(run: qring audit --anomalies)\")}`,\n );\n }\n\n console.log();\n });\n\n // ─── Hooks ───\n\n const hook = program\n .command(\"hook\")\n .description(\"Manage secret change hooks (callbacks on write/delete/rotate)\");\n\n hook\n .command(\"add\")\n .description(\"Register a new hook\")\n .option(\"--key <key>\", \"Trigger on exact key match\")\n .option(\"--key-pattern <pattern>\", \"Trigger on key glob pattern (e.g. DB_*)\")\n .option(\"--tag <tag>\", \"Trigger on secrets with this tag\")\n .option(\"--scope <scope>\", \"Trigger only for this scope (global or project)\")\n .option(\"--action <actions>\", \"Comma-separated actions: write,delete,rotate\", \"write,delete,rotate\")\n .option(\"--exec <command>\", \"Shell command to execute\")\n .option(\"--url <url>\", \"HTTP URL to POST to\")\n .option(\"--signal-target <target>\", \"Process name or PID to signal\")\n .option(\"--signal-name <signal>\", \"Signal to send (default: SIGHUP)\", \"SIGHUP\")\n .option(\"--description <desc>\", \"Human-readable description\")\n .action((cmd) => {\n let type: HookType;\n if (cmd.exec) type = \"shell\";\n else if (cmd.url) type = \"http\";\n else if (cmd.signalTarget) type = \"signal\";\n else {\n console.error(c.red(`${SYMBOLS.cross} Specify --exec, --url, or --signal-target`));\n process.exit(1);\n }\n\n if (!cmd.key && !cmd.keyPattern && !cmd.tag) {\n console.error(c.red(`${SYMBOLS.cross} Specify at least one match criterion: --key, --key-pattern, or --tag`));\n process.exit(1);\n }\n\n const actions = cmd.action.split(\",\").map((a: string) => a.trim()) as HookAction[];\n\n const entry = registerHook({\n type,\n match: {\n key: cmd.key,\n keyPattern: cmd.keyPattern,\n tag: cmd.tag,\n scope: cmd.scope as \"global\" | \"project\" | undefined,\n action: actions,\n },\n command: cmd.exec,\n url: cmd.url,\n signal: cmd.signalTarget ? { target: cmd.signalTarget, signal: cmd.signalName } : undefined,\n description: cmd.description,\n enabled: true,\n });\n\n console.log(`${SYMBOLS.check} ${c.green(\"registered\")} hook ${c.bold(entry.id)} (${type})`);\n if (cmd.key) console.log(c.dim(` key: ${cmd.key}`));\n if (cmd.keyPattern) console.log(c.dim(` pattern: ${cmd.keyPattern}`));\n if (cmd.tag) console.log(c.dim(` tag: ${cmd.tag}`));\n });\n\n hook\n .command(\"list\")\n .alias(\"ls\")\n .description(\"List all registered hooks\")\n .action(() => {\n const hooks = listAllHooks();\n if (hooks.length === 0) {\n console.log(c.dim(\"No hooks registered\"));\n return;\n }\n\n console.log(c.bold(`\\n ${SYMBOLS.zap} Registered hooks (${hooks.length})\\n`));\n\n for (const h of hooks) {\n const status = h.enabled ? c.green(\"on\") : c.red(\"off\");\n const matchParts: string[] = [];\n if (h.match.key) matchParts.push(`key=${h.match.key}`);\n if (h.match.keyPattern) matchParts.push(`pattern=${h.match.keyPattern}`);\n if (h.match.tag) matchParts.push(`tag=${h.match.tag}`);\n if (h.match.scope) matchParts.push(`scope=${h.match.scope}`);\n if (h.match.action?.length) matchParts.push(`actions=${h.match.action.join(\",\")}`);\n\n const target = h.type === \"shell\" ? h.command\n : h.type === \"http\" ? h.url\n : h.signal ? `${h.signal.target} (${h.signal.signal ?? \"SIGHUP\"})`\n : \"?\";\n\n console.log(` ${c.bold(h.id)} [${status}] ${c.cyan(h.type)} ${c.dim(matchParts.join(\" \"))}`);\n console.log(` ${c.dim(\"→\")} ${target}${h.description ? ` ${c.dim(`— ${h.description}`)}` : \"\"}`);\n }\n console.log();\n });\n\n hook\n .command(\"remove <id>\")\n .alias(\"rm\")\n .description(\"Remove a hook by ID\")\n .action((id: string) => {\n if (removeHook(id)) {\n console.log(`${SYMBOLS.check} ${c.green(\"removed\")} hook ${c.bold(id)}`);\n } else {\n console.error(c.red(`${SYMBOLS.cross} Hook \"${id}\" not found`));\n process.exit(1);\n }\n });\n\n hook\n .command(\"enable <id>\")\n .description(\"Enable a hook\")\n .action((id: string) => {\n if (enableHook(id)) {\n console.log(`${SYMBOLS.check} ${c.green(\"enabled\")} hook ${c.bold(id)}`);\n } else {\n console.error(c.red(`${SYMBOLS.cross} Hook \"${id}\" not found`));\n process.exit(1);\n }\n });\n\n hook\n .command(\"disable <id>\")\n .description(\"Disable a hook\")\n .action((id: string) => {\n if (disableHook(id)) {\n console.log(`${SYMBOLS.check} ${c.yellow(\"disabled\")} hook ${c.bold(id)}`);\n } else {\n console.error(c.red(`${SYMBOLS.cross} Hook \"${id}\" not found`));\n process.exit(1);\n }\n });\n\n hook\n .command(\"test <id>\")\n .description(\"Dry-run a hook with a mock payload\")\n .action(async (id: string) => {\n const hooks = listAllHooks();\n const h = hooks.find((hook) => hook.id === id);\n if (!h) {\n console.error(c.red(`${SYMBOLS.cross} Hook \"${id}\" not found`));\n process.exit(1);\n }\n\n console.log(c.dim(`Testing hook ${id} (${h.type})...\\n`));\n\n const payload = {\n action: \"write\" as const,\n key: h.match.key ?? \"TEST_KEY\",\n scope: h.match.scope ?? \"global\",\n timestamp: new Date().toISOString(),\n source: \"cli\" as const,\n };\n\n const results = await fireHooks(payload);\n const result = results.find((r) => r.hookId === id);\n\n if (result) {\n const icon = result.success ? c.green(SYMBOLS.check) : c.red(SYMBOLS.cross);\n console.log(` ${icon} ${result.message}`);\n } else {\n console.log(c.yellow(` ${SYMBOLS.warning} Hook did not match the test payload`));\n }\n console.log();\n });\n\n // ─── Env Generate ───\n\n program\n .command(\"env:generate\")\n .description(\"Generate a .env file from the project manifest (.q-ring.json)\")\n .option(\"--project-path <path>\", \"Project path (defaults to cwd)\")\n .option(\"-o, --output <file>\", \"Output file path (defaults to stdout)\")\n .option(\"-e, --env <env>\", \"Force environment for superposition collapse\")\n .action((cmd) => {\n const projectPath = cmd.projectPath ?? process.cwd();\n const config = readProjectConfig(projectPath);\n\n if (!config?.secrets || Object.keys(config.secrets).length === 0) {\n console.error(\n c.red(`${SYMBOLS.cross} No secrets manifest found in .q-ring.json`),\n );\n process.exit(1);\n }\n\n const opts = buildOpts(cmd);\n const lines: string[] = [];\n const warnings: string[] = [];\n\n for (const [key, manifest] of Object.entries(config.secrets)) {\n const value = getSecret(key, { ...opts, projectPath, source: \"cli\" });\n\n if (value === null) {\n if (manifest.required !== false) {\n warnings.push(`MISSING (required): ${key}`);\n }\n lines.push(`# ${key}= ${manifest.description ? `# ${manifest.description}` : \"\"}`);\n continue;\n }\n\n const result = getEnvelope(key, { projectPath, source: \"cli\" });\n if (result) {\n const decay = checkDecay(result.envelope);\n if (decay.isExpired) {\n warnings.push(`EXPIRED: ${key}`);\n } else if (decay.isStale) {\n warnings.push(`STALE (${decay.lifetimePercent}%): ${key}`);\n }\n }\n\n const escaped = value\n .replace(/\\\\/g, \"\\\\\\\\\")\n .replace(/\"/g, '\\\\\"')\n .replace(/\\n/g, \"\\\\n\");\n lines.push(`${key}=\"${escaped}\"`);\n }\n\n const output = lines.join(\"\\n\") + \"\\n\";\n\n if (cmd.output) {\n writeFileSync(cmd.output, output);\n console.log(\n `${SYMBOLS.check} ${c.green(\"generated\")} ${c.bold(cmd.output)} (${Object.keys(config.secrets).length} keys)`,\n );\n } else {\n process.stdout.write(output);\n }\n\n if (warnings.length > 0 && process.stderr.isTTY) {\n console.error();\n for (const w of warnings) {\n console.error(` ${c.yellow(SYMBOLS.warning)} ${w}`);\n }\n console.error();\n }\n });\n\n // ─── Status Dashboard ───\n\n program\n .command(\"status\")\n .description(\"Launch the quantum status dashboard in your browser\")\n .option(\"--port <port>\", \"Port to serve on\", \"9876\")\n .option(\"--no-open\", \"Don't auto-open the browser\")\n .action(async (cmd) => {\n const { startDashboardServer } = await import(\"../core/dashboard.js\");\n const { exec } = await import(\"node:child_process\");\n const { platform } = await import(\"node:os\");\n\n const port = Number(cmd.port);\n const { close } = startDashboardServer({ port });\n const url = `http://127.0.0.1:${port}`;\n\n console.log(\n `\\n ${SYMBOLS.zap} ${c.bold(\"q-ring quantum status dashboard\")}\\n`,\n );\n console.log(` ${c.cyan(url)}\\n`);\n console.log(c.dim(\" Press Ctrl+C to stop\\n\"));\n\n if (cmd.open !== false) {\n const openCmd =\n platform() === \"darwin\" ? \"open\" : platform() === \"win32\" ? \"start\" : \"xdg-open\";\n exec(`${openCmd} ${url}`);\n }\n\n const shutdown = () => {\n console.log(`\\n${c.dim(\" dashboard stopped\")}`);\n close();\n process.exit(0);\n };\n process.on(\"SIGINT\", shutdown);\n process.on(\"SIGTERM\", shutdown);\n\n await new Promise(() => {});\n });\n\n // ─── Agent Mode ───\n\n program\n .command(\"agent\")\n .description(\"Start the autonomous agent (background monitor)\")\n .option(\n \"-i, --interval <seconds>\",\n \"Scan interval in seconds\",\n parseInt,\n 60,\n )\n .option(\"--auto-rotate\", \"Auto-rotate expired secrets\")\n .option(\"-v, --verbose\", \"Verbose output with all warnings\")\n .option(\"--project-path <paths>\", \"Comma-separated project paths to monitor\")\n .option(\"--once\", \"Run a single scan and exit (no daemon)\")\n .action(async (cmd) => {\n const projectPaths = cmd.projectPath\n ? cmd.projectPath.split(\",\").map((p: string) => p.trim())\n : [process.cwd()];\n\n if (cmd.once) {\n const report = runHealthScan({\n autoRotate: cmd.autoRotate,\n projectPaths,\n verbose: cmd.verbose,\n });\n\n // Output as JSON for programmatic use\n console.log(JSON.stringify(report, null, 2));\n return;\n }\n\n await startAgent({\n intervalSeconds: cmd.interval,\n autoRotate: cmd.autoRotate,\n projectPaths,\n verbose: cmd.verbose,\n });\n });\n\n return program;\n}\n","/**\n * Quantum Noise: cryptographic secret generation.\n * Generates high-entropy values in common formats.\n */\n\nimport { randomBytes, randomInt } from \"node:crypto\";\n\nexport type NoiseFormat =\n | \"hex\"\n | \"base64\"\n | \"alphanumeric\"\n | \"uuid\"\n | \"api-key\"\n | \"token\"\n | \"password\";\n\nexport interface NoiseOptions {\n format?: NoiseFormat;\n /** Length in bytes (for hex/base64) or characters (for alphanumeric/password) */\n length?: number;\n /** Prefix for api-key format (e.g., \"sk-\", \"pk-\") */\n prefix?: string;\n}\n\nconst ALPHA_NUM =\n \"ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789\";\nconst PASSWORD_CHARS =\n \"ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789!@#$%^&*()-_=+[]{}|;:,.<>?\";\n\nfunction randomString(charset: string, length: number): string {\n let result = \"\";\n for (let i = 0; i < length; i++) {\n result += charset[randomInt(charset.length)];\n }\n return result;\n}\n\nexport function generateSecret(opts: NoiseOptions = {}): string {\n const format = opts.format ?? \"api-key\";\n\n switch (format) {\n case \"hex\": {\n const len = opts.length ?? 32;\n return randomBytes(len).toString(\"hex\");\n }\n\n case \"base64\": {\n const len = opts.length ?? 32;\n return randomBytes(len).toString(\"base64url\");\n }\n\n case \"alphanumeric\": {\n const len = opts.length ?? 32;\n return randomString(ALPHA_NUM, len);\n }\n\n case \"uuid\": {\n const bytes = randomBytes(16);\n bytes[6] = (bytes[6] & 0x0f) | 0x40; // version 4\n bytes[8] = (bytes[8] & 0x3f) | 0x80; // variant 1\n const hex = bytes.toString(\"hex\");\n return [\n hex.slice(0, 8),\n hex.slice(8, 12),\n hex.slice(12, 16),\n hex.slice(16, 20),\n hex.slice(20, 32),\n ].join(\"-\");\n }\n\n case \"api-key\": {\n const prefix = opts.prefix ?? \"qr_\";\n const len = opts.length ?? 48;\n return prefix + randomString(ALPHA_NUM, len);\n }\n\n case \"token\": {\n const prefix = opts.prefix ?? \"\";\n const len = opts.length ?? 64;\n return prefix + randomBytes(len).toString(\"base64url\");\n }\n\n case \"password\": {\n const len = opts.length ?? 24;\n let pw = randomString(PASSWORD_CHARS, len);\n\n // Guarantee at least one of each class\n const hasUpper = /[A-Z]/.test(pw);\n const hasLower = /[a-z]/.test(pw);\n const hasDigit = /[0-9]/.test(pw);\n const hasSpecial = /[^A-Za-z0-9]/.test(pw);\n\n if (!hasUpper) pw = replaceAt(pw, randomInt(len), randomString(\"ABCDEFGHIJKLMNOPQRSTUVWXYZ\", 1));\n if (!hasLower) pw = replaceAt(pw, randomInt(len), randomString(\"abcdefghijklmnopqrstuvwxyz\", 1));\n if (!hasDigit) pw = replaceAt(pw, randomInt(len), randomString(\"0123456789\", 1));\n if (!hasSpecial) pw = replaceAt(pw, randomInt(len), randomString(\"!@#$%^&*()-_=+\", 1));\n\n return pw;\n }\n\n default:\n return randomBytes(32).toString(\"hex\");\n }\n}\n\nfunction replaceAt(str: string, index: number, char: string): string {\n return str.slice(0, index) + char + str.slice(index + 1);\n}\n\n/**\n * Estimate the entropy of a secret in bits.\n */\nexport function estimateEntropy(secret: string): number {\n const charsets = [\n { regex: /[a-z]/, size: 26 },\n { regex: /[A-Z]/, size: 26 },\n { regex: /[0-9]/, size: 10 },\n { regex: /[^A-Za-z0-9]/, size: 32 },\n ];\n\n let poolSize = 0;\n for (const { regex, size } of charsets) {\n if (regex.test(secret)) poolSize += size;\n }\n\n return poolSize > 0 ? Math.floor(Math.log2(poolSize) * secret.length) : 0;\n}\n","/**\n * Minimal ANSI color helpers. No dependencies.\n */\n\nconst enabled = process.stdout.isTTY !== false && !process.env.NO_COLOR;\n\nfunction wrap(code: string, text: string): string {\n return enabled ? `\\x1b[${code}m${text}\\x1b[0m` : text;\n}\n\nexport const c = {\n bold: (t: string) => wrap(\"1\", t),\n dim: (t: string) => wrap(\"2\", t),\n italic: (t: string) => wrap(\"3\", t),\n underline: (t: string) => wrap(\"4\", t),\n\n red: (t: string) => wrap(\"31\", t),\n green: (t: string) => wrap(\"32\", t),\n yellow: (t: string) => wrap(\"33\", t),\n blue: (t: string) => wrap(\"34\", t),\n magenta: (t: string) => wrap(\"35\", t),\n cyan: (t: string) => wrap(\"36\", t),\n white: (t: string) => wrap(\"37\", t),\n gray: (t: string) => wrap(\"90\", t),\n\n bgRed: (t: string) => wrap(\"41\", t),\n bgGreen: (t: string) => wrap(\"42\", t),\n bgYellow: (t: string) => wrap(\"43\", t),\n bgBlue: (t: string) => wrap(\"44\", t),\n bgMagenta: (t: string) => wrap(\"45\", t),\n bgCyan: (t: string) => wrap(\"46\", t),\n};\n\nexport function scopeColor(scope: string): string {\n return scope === \"project\" ? c.cyan(scope) : c.blue(scope);\n}\n\nexport function decayIndicator(percent: number, expired: boolean): string {\n if (expired) return c.bgRed(c.white(\" EXPIRED \"));\n if (percent >= 90) return c.red(`[decay ${percent}%]`);\n if (percent >= 75) return c.yellow(`[decay ${percent}%]`);\n if (percent > 0) return c.green(`[decay ${percent}%]`);\n return \"\";\n}\n\nexport function envBadge(env: string): string {\n switch (env) {\n case \"prod\":\n return c.bgRed(c.white(` ${env} `));\n case \"staging\":\n return c.bgYellow(c.white(` ${env} `));\n case \"dev\":\n return c.bgGreen(c.white(` ${env} `));\n case \"test\":\n return c.bgBlue(c.white(` ${env} `));\n default:\n return c.bgMagenta(c.white(` ${env} `));\n }\n}\n\nexport const SYMBOLS = {\n check: enabled ? \"\\u2713\" : \"[ok]\",\n cross: enabled ? \"\\u2717\" : \"[x]\",\n arrow: enabled ? \"\\u2192\" : \"->\",\n dot: enabled ? \"\\u2022\" : \"*\",\n lock: enabled ? \"\\u{1f512}\" : \"[locked]\",\n key: enabled ? \"\\u{1f511}\" : \"[key]\",\n link: enabled ? \"\\u{1f517}\" : \"[link]\",\n warning: enabled ? \"\\u26a0\\ufe0f\" : \"[!]\",\n clock: enabled ? \"\\u23f0\" : \"[time]\",\n shield: enabled ? \"\\u{1f6e1}\\ufe0f\" : \"[shield]\",\n zap: enabled ? \"\\u26a1\" : \"[zap]\",\n eye: enabled ? \"\\u{1f441}\\ufe0f\" : \"[eye]\",\n ghost: enabled ? \"\\u{1f47b}\" : \"[ghost]\",\n package: enabled ? \"\\u{1f4e6}\" : \"[pkg]\",\n sparkle: enabled ? \"\\u2728\" : \"[*]\",\n} as const;\n","/**\n * Quantum Agent: autonomous background monitor for secret health.\n *\n * Runs as a long-lived process that periodically:\n * - Checks for expired/stale secrets (decay monitoring)\n * - Detects access anomalies (observer analysis)\n * - Logs health reports\n * - Can trigger rotation callbacks\n *\n * Designed to run as `qring agent` or be invoked by the MCP server.\n */\n\nimport { listSecrets, getEnvelope, setSecret, type KeyringOptions } from \"./keyring.js\";\nimport { checkDecay, type QuantumEnvelope } from \"./envelope.js\";\nimport { detectAnomalies, logAudit, queryAudit } from \"./observer.js\";\nimport { generateSecret } from \"./noise.js\";\nimport { findEntangled } from \"./entanglement.js\";\nimport { fireHooks } from \"./hooks.js\";\nimport { c, SYMBOLS, decayIndicator } from \"../utils/colors.js\";\n\nexport interface AgentConfig {\n /** Check interval in seconds (default: 60) */\n intervalSeconds: number;\n /** Auto-rotate expired secrets with generated values */\n autoRotate: boolean;\n /** Project paths to monitor */\n projectPaths: string[];\n /** Verbose output */\n verbose: boolean;\n}\n\nexport interface AgentReport {\n timestamp: string;\n totalSecrets: number;\n healthy: number;\n stale: number;\n expired: number;\n anomalies: number;\n rotated: string[];\n warnings: string[];\n}\n\nfunction defaultConfig(): AgentConfig {\n return {\n intervalSeconds: 60,\n autoRotate: false,\n projectPaths: [process.cwd()],\n verbose: false,\n };\n}\n\nexport function runHealthScan(config: Partial<AgentConfig> = {}): AgentReport {\n const cfg = { ...defaultConfig(), ...config };\n\n const report: AgentReport = {\n timestamp: new Date().toISOString(),\n totalSecrets: 0,\n healthy: 0,\n stale: 0,\n expired: 0,\n anomalies: 0,\n rotated: [],\n warnings: [],\n };\n\n // Scan global scope\n const globalEntries = listSecrets({ scope: \"global\", source: \"agent\" });\n\n // Scan project scopes\n const projectEntries = cfg.projectPaths.flatMap((pp) =>\n listSecrets({ scope: \"project\", projectPath: pp, source: \"agent\" }),\n );\n\n const allEntries = [...globalEntries, ...projectEntries];\n report.totalSecrets = allEntries.length;\n\n for (const entry of allEntries) {\n if (!entry.envelope) continue;\n\n const decay = checkDecay(entry.envelope);\n\n if (decay.isExpired) {\n report.expired++;\n report.warnings.push(\n `EXPIRED: ${entry.key} [${entry.scope}] — expired ${decay.timeRemaining}`,\n );\n\n if (cfg.autoRotate) {\n const fmt = (entry.envelope?.meta.rotationFormat ?? \"api-key\") as import(\"./noise.js\").NoiseFormat;\n const prefix = entry.envelope?.meta.rotationPrefix;\n const newValue = generateSecret({ format: fmt, prefix });\n setSecret(entry.key, newValue, {\n scope: entry.scope,\n projectPath: cfg.projectPaths[0],\n source: \"agent\",\n });\n report.rotated.push(entry.key);\n logAudit({\n action: \"write\",\n key: entry.key,\n scope: entry.scope,\n source: \"agent\",\n detail: \"auto-rotated by agent (expired)\",\n });\n fireHooks({\n action: \"rotate\",\n key: entry.key,\n scope: entry.scope,\n timestamp: new Date().toISOString(),\n source: \"agent\",\n }, entry.envelope?.meta.tags).catch(() => {});\n }\n } else if (decay.isStale) {\n report.stale++;\n report.warnings.push(\n `STALE: ${entry.key} [${entry.scope}] — ${decay.lifetimePercent}% lifetime, ${decay.timeRemaining} remaining`,\n );\n } else {\n report.healthy++;\n }\n }\n\n // Check for anomalies\n const anomalies = detectAnomalies();\n report.anomalies = anomalies.length;\n for (const a of anomalies) {\n report.warnings.push(`ANOMALY [${a.type}]: ${a.description}`);\n }\n\n return report;\n}\n\nfunction formatReport(report: AgentReport, verbose: boolean): string {\n const lines: string[] = [];\n\n lines.push(\n `${c.bold(`${SYMBOLS.shield} q-ring agent scan`)} ${c.dim(report.timestamp)}`,\n );\n lines.push(\n ` ${c.dim(\"secrets:\")} ${report.totalSecrets} ${c.green(`${SYMBOLS.check} ${report.healthy}`)} ${c.yellow(`${SYMBOLS.warning} ${report.stale}`)} ${c.red(`${SYMBOLS.cross} ${report.expired}`)} ${c.dim(`anomalies: ${report.anomalies}`)}`,\n );\n\n if (report.rotated.length > 0) {\n lines.push(\n ` ${c.cyan(`${SYMBOLS.zap} auto-rotated:`)} ${report.rotated.join(\", \")}`,\n );\n }\n\n if (verbose && report.warnings.length > 0) {\n lines.push(\"\");\n for (const w of report.warnings) {\n if (w.startsWith(\"EXPIRED\")) lines.push(` ${c.red(w)}`);\n else if (w.startsWith(\"STALE\")) lines.push(` ${c.yellow(w)}`);\n else if (w.startsWith(\"ANOMALY\")) lines.push(` ${c.magenta(w)}`);\n else lines.push(` ${w}`);\n }\n }\n\n return lines.join(\"\\n\");\n}\n\n/**\n * Run the agent as a continuous background monitor.\n */\nexport async function startAgent(config: Partial<AgentConfig> = {}): Promise<void> {\n const cfg = { ...defaultConfig(), ...config };\n\n console.log(\n `${c.bold(`${SYMBOLS.zap} q-ring agent started`)} ${c.dim(`(interval: ${cfg.intervalSeconds}s, auto-rotate: ${cfg.autoRotate})`)}`,\n );\n console.log(\n c.dim(` monitoring: global + ${cfg.projectPaths.length} project(s)`),\n );\n console.log();\n\n const scan = () => {\n const report = runHealthScan(cfg);\n console.log(formatReport(report, cfg.verbose));\n\n if (report.warnings.length > 0 || cfg.verbose) {\n console.log();\n }\n };\n\n // Initial scan\n scan();\n\n // Continuous monitoring\n const interval = setInterval(scan, cfg.intervalSeconds * 1000);\n\n // Graceful shutdown\n const shutdown = () => {\n clearInterval(interval);\n console.log(`\\n${c.dim(\"q-ring agent stopped\")}`);\n process.exit(0);\n };\n\n process.on(\"SIGINT\", shutdown);\n process.on(\"SIGTERM\", shutdown);\n\n // Keep alive\n await new Promise(() => {});\n}\n","/**\n * Quantum Teleportation: securely share/transfer secrets between machines.\n *\n * Generates encrypted bundles that can be shared via any channel.\n * The recipient decrypts with a shared passphrase (out-of-band exchange).\n * Uses AES-256-GCM with PBKDF2-derived keys.\n */\n\nimport {\n randomBytes,\n createCipheriv,\n createDecipheriv,\n pbkdf2Sync,\n} from \"node:crypto\";\n\nconst ALGORITHM = \"aes-256-gcm\";\nconst KEY_LENGTH = 32;\nconst IV_LENGTH = 16;\nconst SALT_LENGTH = 32;\nconst TAG_LENGTH = 16;\nconst PBKDF2_ITERATIONS = 100000;\n\nexport interface TeleportBundle {\n /** Format version */\n v: 1;\n /** Base64-encoded encrypted payload */\n data: string;\n /** Base64-encoded salt for key derivation */\n salt: string;\n /** Base64-encoded initialization vector */\n iv: string;\n /** Base64-encoded auth tag */\n tag: string;\n /** ISO timestamp of creation */\n createdAt: string;\n /** Number of secrets in the bundle */\n count: number;\n}\n\nexport interface TeleportPayload {\n secrets: { key: string; value: string; scope?: string }[];\n exportedAt: string;\n exportedBy?: string;\n}\n\nfunction deriveKey(passphrase: string, salt: Buffer): Buffer {\n return pbkdf2Sync(passphrase, salt, PBKDF2_ITERATIONS, KEY_LENGTH, \"sha512\");\n}\n\n/**\n * Pack secrets into an encrypted teleport bundle.\n */\nexport function teleportPack(\n secrets: { key: string; value: string; scope?: string }[],\n passphrase: string,\n): string {\n const payload: TeleportPayload = {\n secrets,\n exportedAt: new Date().toISOString(),\n };\n\n const plaintext = JSON.stringify(payload);\n const salt = randomBytes(SALT_LENGTH);\n const iv = randomBytes(IV_LENGTH);\n const key = deriveKey(passphrase, salt);\n\n const cipher = createCipheriv(ALGORITHM, key, iv);\n const encrypted = Buffer.concat([\n cipher.update(plaintext, \"utf8\"),\n cipher.final(),\n ]);\n const tag = cipher.getAuthTag();\n\n const bundle: TeleportBundle = {\n v: 1,\n data: encrypted.toString(\"base64\"),\n salt: salt.toString(\"base64\"),\n iv: iv.toString(\"base64\"),\n tag: tag.toString(\"base64\"),\n createdAt: new Date().toISOString(),\n count: secrets.length,\n };\n\n return Buffer.from(JSON.stringify(bundle)).toString(\"base64\");\n}\n\n/**\n * Unpack and decrypt a teleport bundle.\n */\nexport function teleportUnpack(\n encoded: string,\n passphrase: string,\n): TeleportPayload {\n const bundleJson = Buffer.from(encoded, \"base64\").toString(\"utf8\");\n const bundle: TeleportBundle = JSON.parse(bundleJson);\n\n if (bundle.v !== 1) {\n throw new Error(`Unsupported teleport bundle version: ${bundle.v}`);\n }\n\n const salt = Buffer.from(bundle.salt, \"base64\");\n const iv = Buffer.from(bundle.iv, \"base64\");\n const tag = Buffer.from(bundle.tag, \"base64\");\n const encrypted = Buffer.from(bundle.data, \"base64\");\n const key = deriveKey(passphrase, salt);\n\n const decipher = createDecipheriv(ALGORITHM, key, iv);\n decipher.setAuthTag(tag);\n\n const decrypted = Buffer.concat([\n decipher.update(encrypted),\n decipher.final(),\n ]);\n\n return JSON.parse(decrypted.toString(\"utf8\"));\n}\n","/**\n * Import module: parse .env files and bulk-store secrets into q-ring.\n */\n\nimport { readFileSync } from \"node:fs\";\nimport { setSecret, hasSecret, type SetSecretOptions } from \"./keyring.js\";\n\nexport interface ImportOptions {\n scope?: \"global\" | \"project\";\n projectPath?: string;\n env?: string;\n source?: \"cli\" | \"mcp\" | \"agent\" | \"api\";\n skipExisting?: boolean;\n dryRun?: boolean;\n}\n\nexport interface ImportResult {\n imported: string[];\n skipped: string[];\n total: number;\n}\n\n/**\n * Parse .env content into key-value pairs.\n * Handles comments, blank lines, quoted values, and basic multiline.\n */\nexport function parseDotenv(content: string): Map<string, string> {\n const result = new Map<string, string>();\n const lines = content.split(/\\r?\\n/);\n\n for (let i = 0; i < lines.length; i++) {\n const line = lines[i].trim();\n\n if (!line || line.startsWith(\"#\")) continue;\n\n const eqIdx = line.indexOf(\"=\");\n if (eqIdx === -1) continue;\n\n const key = line.slice(0, eqIdx).trim();\n let value = line.slice(eqIdx + 1).trim();\n\n if (\n (value.startsWith('\"') && value.endsWith('\"')) ||\n (value.startsWith(\"'\") && value.endsWith(\"'\"))\n ) {\n value = value.slice(1, -1);\n }\n\n value = value\n .replace(/\\\\n/g, \"\\n\")\n .replace(/\\\\r/g, \"\\r\")\n .replace(/\\\\t/g, \"\\t\")\n .replace(/\\\\\\\\/g, \"\\\\\")\n .replace(/\\\\\"/g, '\"');\n\n if (value.includes(\"#\") && !line.includes('\"') && !line.includes(\"'\")) {\n value = value.split(\"#\")[0].trim();\n }\n\n if (key) result.set(key, value);\n }\n\n return result;\n}\n\n/**\n * Import secrets from a .env file path or raw content string.\n */\nexport function importDotenv(\n filePathOrContent: string,\n options: ImportOptions = {},\n): ImportResult {\n let content: string;\n\n try {\n content = readFileSync(filePathOrContent, \"utf8\");\n } catch {\n content = filePathOrContent;\n }\n\n const pairs = parseDotenv(content);\n const result: ImportResult = {\n imported: [],\n skipped: [],\n total: pairs.size,\n };\n\n for (const [key, value] of pairs) {\n if (options.skipExisting && hasSecret(key, {\n scope: options.scope,\n projectPath: options.projectPath,\n source: options.source ?? \"cli\",\n })) {\n result.skipped.push(key);\n continue;\n }\n\n if (options.dryRun) {\n result.imported.push(key);\n continue;\n }\n\n const setOpts: SetSecretOptions = {\n scope: options.scope ?? \"global\",\n projectPath: options.projectPath ?? process.cwd(),\n source: options.source ?? \"cli\",\n };\n\n setSecret(key, value, setOpts);\n result.imported.push(key);\n }\n\n return result;\n}\n","/**\n * Secret Liveness Validation: test if a secret is actually valid\n * with its target service using a pluggable provider system.\n */\n\nimport { request as httpsRequest } from \"node:https\";\nimport { request as httpRequest } from \"node:http\";\n\nexport interface ValidationResult {\n valid: boolean;\n status: \"valid\" | \"invalid\" | \"error\" | \"unknown\";\n message: string;\n latencyMs: number;\n provider: string;\n}\n\nexport interface Provider {\n name: string;\n description: string;\n /** Prefixes that auto-detect to this provider */\n prefixes?: string[];\n validate(value: string): Promise<ValidationResult>;\n}\n\nfunction makeRequest(\n url: string,\n headers: Record<string, string>,\n timeoutMs = 10000,\n): Promise<{ statusCode: number; body: string }> {\n return new Promise((resolve, reject) => {\n const parsedUrl = new URL(url);\n const reqFn = parsedUrl.protocol === \"https:\" ? httpsRequest : httpRequest;\n const req = reqFn(\n url,\n { method: \"GET\", headers, timeout: timeoutMs },\n (res) => {\n let body = \"\";\n res.on(\"data\", (chunk) => (body += chunk));\n res.on(\"end\", () =>\n resolve({ statusCode: res.statusCode ?? 0, body }),\n );\n },\n );\n req.on(\"error\", reject);\n req.on(\"timeout\", () => {\n req.destroy();\n reject(new Error(\"Request timed out\"));\n });\n req.end();\n });\n}\n\nexport class ProviderRegistry {\n private providers = new Map<string, Provider>();\n\n register(provider: Provider): void {\n this.providers.set(provider.name, provider);\n }\n\n get(name: string): Provider | undefined {\n return this.providers.get(name);\n }\n\n detectProvider(\n value: string,\n hints?: { provider?: string; prefix?: string },\n ): Provider | undefined {\n if (hints?.provider) {\n return this.providers.get(hints.provider);\n }\n\n for (const provider of this.providers.values()) {\n if (provider.prefixes) {\n for (const pfx of provider.prefixes) {\n if (value.startsWith(pfx)) return provider;\n }\n }\n }\n\n return undefined;\n }\n\n listProviders(): Provider[] {\n return [...this.providers.values()];\n }\n}\n\n// ─── Built-in Providers ───\n\nconst openaiProvider: Provider = {\n name: \"openai\",\n description: \"OpenAI API key validation\",\n prefixes: [\"sk-\"],\n async validate(value: string): Promise<ValidationResult> {\n const start = Date.now();\n try {\n const { statusCode } = await makeRequest(\n \"https://api.openai.com/v1/models?limit=1\",\n {\n Authorization: `Bearer ${value}`,\n \"User-Agent\": \"q-ring-validator/1.0\",\n },\n );\n const latencyMs = Date.now() - start;\n\n if (statusCode === 200)\n return { valid: true, status: \"valid\", message: \"API key is valid\", latencyMs, provider: \"openai\" };\n if (statusCode === 401)\n return { valid: false, status: \"invalid\", message: \"Invalid or revoked API key\", latencyMs, provider: \"openai\" };\n if (statusCode === 429)\n return { valid: true, status: \"error\", message: \"Rate limited — key may be valid\", latencyMs, provider: \"openai\" };\n return { valid: false, status: \"error\", message: `Unexpected status ${statusCode}`, latencyMs, provider: \"openai\" };\n } catch (err) {\n return { valid: false, status: \"error\", message: `${err instanceof Error ? err.message : \"Network error\"}`, latencyMs: Date.now() - start, provider: \"openai\" };\n }\n },\n};\n\nconst stripeProvider: Provider = {\n name: \"stripe\",\n description: \"Stripe API key validation\",\n prefixes: [\"sk_live_\", \"sk_test_\", \"rk_live_\", \"rk_test_\", \"pk_live_\", \"pk_test_\"],\n async validate(value: string): Promise<ValidationResult> {\n const start = Date.now();\n try {\n const { statusCode } = await makeRequest(\n \"https://api.stripe.com/v1/balance\",\n {\n Authorization: `Bearer ${value}`,\n \"User-Agent\": \"q-ring-validator/1.0\",\n },\n );\n const latencyMs = Date.now() - start;\n\n if (statusCode === 200)\n return { valid: true, status: \"valid\", message: \"API key is valid\", latencyMs, provider: \"stripe\" };\n if (statusCode === 401)\n return { valid: false, status: \"invalid\", message: \"Invalid or revoked API key\", latencyMs, provider: \"stripe\" };\n if (statusCode === 429)\n return { valid: true, status: \"error\", message: \"Rate limited — key may be valid\", latencyMs, provider: \"stripe\" };\n return { valid: false, status: \"error\", message: `Unexpected status ${statusCode}`, latencyMs, provider: \"stripe\" };\n } catch (err) {\n return { valid: false, status: \"error\", message: `${err instanceof Error ? err.message : \"Network error\"}`, latencyMs: Date.now() - start, provider: \"stripe\" };\n }\n },\n};\n\nconst githubProvider: Provider = {\n name: \"github\",\n description: \"GitHub token validation\",\n prefixes: [\"ghp_\", \"gho_\", \"ghu_\", \"ghs_\", \"ghr_\", \"github_pat_\"],\n async validate(value: string): Promise<ValidationResult> {\n const start = Date.now();\n try {\n const { statusCode } = await makeRequest(\n \"https://api.github.com/user\",\n {\n Authorization: `token ${value}`,\n \"User-Agent\": \"q-ring-validator/1.0\",\n Accept: \"application/vnd.github+json\",\n },\n );\n const latencyMs = Date.now() - start;\n\n if (statusCode === 200)\n return { valid: true, status: \"valid\", message: \"Token is valid\", latencyMs, provider: \"github\" };\n if (statusCode === 401)\n return { valid: false, status: \"invalid\", message: \"Invalid or expired token\", latencyMs, provider: \"github\" };\n if (statusCode === 403)\n return { valid: false, status: \"invalid\", message: \"Token lacks required permissions\", latencyMs, provider: \"github\" };\n if (statusCode === 429)\n return { valid: true, status: \"error\", message: \"Rate limited — token may be valid\", latencyMs, provider: \"github\" };\n return { valid: false, status: \"error\", message: `Unexpected status ${statusCode}`, latencyMs, provider: \"github\" };\n } catch (err) {\n return { valid: false, status: \"error\", message: `${err instanceof Error ? err.message : \"Network error\"}`, latencyMs: Date.now() - start, provider: \"github\" };\n }\n },\n};\n\nconst awsProvider: Provider = {\n name: \"aws\",\n description: \"AWS access key validation (checks key format only — full STS validation requires secret key + region)\",\n prefixes: [\"AKIA\", \"ASIA\"],\n async validate(value: string): Promise<ValidationResult> {\n const start = Date.now();\n const latencyMs = Date.now() - start;\n\n if (/^(AKIA|ASIA)[A-Z0-9]{16}$/.test(value)) {\n return { valid: true, status: \"unknown\", message: \"Valid AWS access key format (STS validation requires secret key)\", latencyMs, provider: \"aws\" };\n }\n return { valid: false, status: \"invalid\", message: \"Invalid AWS access key format\", latencyMs, provider: \"aws\" };\n },\n};\n\nconst httpProvider: Provider = {\n name: \"http\",\n description: \"Generic HTTP endpoint validation\",\n async validate(value: string, url?: string): Promise<ValidationResult> {\n const start = Date.now();\n\n if (!url) {\n return { valid: false, status: \"unknown\", message: \"No validation URL configured\", latencyMs: 0, provider: \"http\" };\n }\n\n try {\n const { statusCode } = await makeRequest(url, {\n Authorization: `Bearer ${value}`,\n \"User-Agent\": \"q-ring-validator/1.0\",\n });\n const latencyMs = Date.now() - start;\n\n if (statusCode >= 200 && statusCode < 300)\n return { valid: true, status: \"valid\", message: `Endpoint returned ${statusCode}`, latencyMs, provider: \"http\" };\n if (statusCode === 401 || statusCode === 403)\n return { valid: false, status: \"invalid\", message: `Authentication failed (${statusCode})`, latencyMs, provider: \"http\" };\n return { valid: false, status: \"error\", message: `Unexpected status ${statusCode}`, latencyMs, provider: \"http\" };\n } catch (err) {\n return { valid: false, status: \"error\", message: `${err instanceof Error ? err.message : \"Network error\"}`, latencyMs: Date.now() - start, provider: \"http\" };\n }\n },\n};\n\nexport const registry = new ProviderRegistry();\nregistry.register(openaiProvider);\nregistry.register(stripeProvider);\nregistry.register(githubProvider);\nregistry.register(awsProvider);\nregistry.register(httpProvider);\n\n/**\n * Validate a secret value against its detected or specified provider.\n */\nexport async function validateSecret(\n value: string,\n opts?: { provider?: string; validationUrl?: string },\n): Promise<ValidationResult> {\n const provider = opts?.provider\n ? registry.get(opts.provider)\n : registry.detectProvider(value);\n\n if (!provider) {\n return {\n valid: false,\n status: \"unknown\",\n message: \"No provider detected — set a provider in the manifest or secret metadata\",\n latencyMs: 0,\n provider: \"none\",\n };\n }\n\n if (provider.name === \"http\" && opts?.validationUrl) {\n return (provider as any).validate(value, opts.validationUrl);\n }\n\n return provider.validate(value);\n}\n","import { createInterface } from \"node:readline\";\n\nexport async function promptSecret(message: string): Promise<string> {\n const rl = createInterface({\n input: process.stdin,\n output: process.stderr,\n terminal: true,\n });\n\n return new Promise((resolve) => {\n process.stderr.write(message);\n\n const stdin = process.stdin;\n const wasRaw = stdin.isRaw;\n if (stdin.isTTY && stdin.setRawMode) {\n stdin.setRawMode(true);\n }\n\n let input = \"\";\n\n const onData = (chunk: Buffer) => {\n const char = chunk.toString(\"utf8\");\n if (char === \"\\n\" || char === \"\\r\") {\n stdin.removeListener(\"data\", onData);\n if (stdin.isTTY && stdin.setRawMode) {\n stdin.setRawMode(wasRaw ?? false);\n }\n process.stderr.write(\"\\n\");\n rl.close();\n resolve(input);\n } else if (char === \"\\u0003\") {\n process.exit(1);\n } else if (char === \"\\u007F\" || char === \"\\b\") {\n input = input.slice(0, -1);\n } else {\n input += char;\n }\n };\n\n stdin.on(\"data\", onData);\n });\n}\n","import { createProgram } from \"./cli/commands.js\";\n\nconst program = createProgram();\nprogram.parse();\n"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA,SAAS,eAAe;;;ACKxB,SAAS,aAAa,iBAAiB;AAmBvC,IAAM,YACJ;AACF,IAAM,iBACJ;AAEF,SAAS,aAAa,SAAiB,QAAwB;AAC7D,MAAI,SAAS;AACb,WAAS,IAAI,GAAG,IAAI,QAAQ,KAAK;AAC/B,cAAU,QAAQ,UAAU,QAAQ,MAAM,CAAC;AAAA,EAC7C;AACA,SAAO;AACT;AAEO,SAAS,eAAe,OAAqB,CAAC,GAAW;AAC9D,QAAM,SAAS,KAAK,UAAU;AAE9B,UAAQ,QAAQ;AAAA,IACd,KAAK,OAAO;AACV,YAAM,MAAM,KAAK,UAAU;AAC3B,aAAO,YAAY,GAAG,EAAE,SAAS,KAAK;AAAA,IACxC;AAAA,IAEA,KAAK,UAAU;AACb,YAAM,MAAM,KAAK,UAAU;AAC3B,aAAO,YAAY,GAAG,EAAE,SAAS,WAAW;AAAA,IAC9C;AAAA,IAEA,KAAK,gBAAgB;AACnB,YAAM,MAAM,KAAK,UAAU;AAC3B,aAAO,aAAa,WAAW,GAAG;AAAA,IACpC;AAAA,IAEA,KAAK,QAAQ;AACX,YAAM,QAAQ,YAAY,EAAE;AAC5B,YAAM,CAAC,IAAK,MAAM,CAAC,IAAI,KAAQ;AAC/B,YAAM,CAAC,IAAK,MAAM,CAAC,IAAI,KAAQ;AAC/B,YAAM,MAAM,MAAM,SAAS,KAAK;AAChC,aAAO;AAAA,QACL,IAAI,MAAM,GAAG,CAAC;AAAA,QACd,IAAI,MAAM,GAAG,EAAE;AAAA,QACf,IAAI,MAAM,IAAI,EAAE;AAAA,QAChB,IAAI,MAAM,IAAI,EAAE;AAAA,QAChB,IAAI,MAAM,IAAI,EAAE;AAAA,MAClB,EAAE,KAAK,GAAG;AAAA,IACZ;AAAA,IAEA,KAAK,WAAW;AACd,YAAM,SAAS,KAAK,UAAU;AAC9B,YAAM,MAAM,KAAK,UAAU;AAC3B,aAAO,SAAS,aAAa,WAAW,GAAG;AAAA,IAC7C;AAAA,IAEA,KAAK,SAAS;AACZ,YAAM,SAAS,KAAK,UAAU;AAC9B,YAAM,MAAM,KAAK,UAAU;AAC3B,aAAO,SAAS,YAAY,GAAG,EAAE,SAAS,WAAW;AAAA,IACvD;AAAA,IAEA,KAAK,YAAY;AACf,YAAM,MAAM,KAAK,UAAU;AAC3B,UAAI,KAAK,aAAa,gBAAgB,GAAG;AAGzC,YAAM,WAAW,QAAQ,KAAK,EAAE;AAChC,YAAM,WAAW,QAAQ,KAAK,EAAE;AAChC,YAAM,WAAW,QAAQ,KAAK,EAAE;AAChC,YAAM,aAAa,eAAe,KAAK,EAAE;AAEzC,UAAI,CAAC,SAAU,MAAK,UAAU,IAAI,UAAU,GAAG,GAAG,aAAa,8BAA8B,CAAC,CAAC;AAC/F,UAAI,CAAC,SAAU,MAAK,UAAU,IAAI,UAAU,GAAG,GAAG,aAAa,8BAA8B,CAAC,CAAC;AAC/F,UAAI,CAAC,SAAU,MAAK,UAAU,IAAI,UAAU,GAAG,GAAG,aAAa,cAAc,CAAC,CAAC;AAC/E,UAAI,CAAC,WAAY,MAAK,UAAU,IAAI,UAAU,GAAG,GAAG,aAAa,kBAAkB,CAAC,CAAC;AAErF,aAAO;AAAA,IACT;AAAA,IAEA;AACE,aAAO,YAAY,EAAE,EAAE,SAAS,KAAK;AAAA,EACzC;AACF;AAEA,SAAS,UAAU,KAAa,OAAe,MAAsB;AACnE,SAAO,IAAI,MAAM,GAAG,KAAK,IAAI,OAAO,IAAI,MAAM,QAAQ,CAAC;AACzD;AAKO,SAAS,gBAAgB,QAAwB;AACtD,QAAM,WAAW;AAAA,IACf,EAAE,OAAO,SAAS,MAAM,GAAG;AAAA,IAC3B,EAAE,OAAO,SAAS,MAAM,GAAG;AAAA,IAC3B,EAAE,OAAO,SAAS,MAAM,GAAG;AAAA,IAC3B,EAAE,OAAO,gBAAgB,MAAM,GAAG;AAAA,EACpC;AAEA,MAAI,WAAW;AACf,aAAW,EAAE,OAAO,KAAK,KAAK,UAAU;AACtC,QAAI,MAAM,KAAK,MAAM,EAAG,aAAY;AAAA,EACtC;AAEA,SAAO,WAAW,IAAI,KAAK,MAAM,KAAK,KAAK,QAAQ,IAAI,OAAO,MAAM,IAAI;AAC1E;;;AC1HA,IAAM,UAAU,QAAQ,OAAO,UAAU,SAAS,CAAC,QAAQ,IAAI;AAE/D,SAAS,KAAK,MAAc,MAAsB;AAChD,SAAO,UAAU,QAAQ,IAAI,IAAI,IAAI,YAAY;AACnD;AAEO,IAAM,IAAI;AAAA,EACf,MAAM,CAAC,MAAc,KAAK,KAAK,CAAC;AAAA,EAChC,KAAK,CAAC,MAAc,KAAK,KAAK,CAAC;AAAA,EAC/B,QAAQ,CAAC,MAAc,KAAK,KAAK,CAAC;AAAA,EAClC,WAAW,CAAC,MAAc,KAAK,KAAK,CAAC;AAAA,EAErC,KAAK,CAAC,MAAc,KAAK,MAAM,CAAC;AAAA,EAChC,OAAO,CAAC,MAAc,KAAK,MAAM,CAAC;AAAA,EAClC,QAAQ,CAAC,MAAc,KAAK,MAAM,CAAC;AAAA,EACnC,MAAM,CAAC,MAAc,KAAK,MAAM,CAAC;AAAA,EACjC,SAAS,CAAC,MAAc,KAAK,MAAM,CAAC;AAAA,EACpC,MAAM,CAAC,MAAc,KAAK,MAAM,CAAC;AAAA,EACjC,OAAO,CAAC,MAAc,KAAK,MAAM,CAAC;AAAA,EAClC,MAAM,CAAC,MAAc,KAAK,MAAM,CAAC;AAAA,EAEjC,OAAO,CAAC,MAAc,KAAK,MAAM,CAAC;AAAA,EAClC,SAAS,CAAC,MAAc,KAAK,MAAM,CAAC;AAAA,EACpC,UAAU,CAAC,MAAc,KAAK,MAAM,CAAC;AAAA,EACrC,QAAQ,CAAC,MAAc,KAAK,MAAM,CAAC;AAAA,EACnC,WAAW,CAAC,MAAc,KAAK,MAAM,CAAC;AAAA,EACtC,QAAQ,CAAC,MAAc,KAAK,MAAM,CAAC;AACrC;AAEO,SAAS,WAAW,OAAuB;AAChD,SAAO,UAAU,YAAY,EAAE,KAAK,KAAK,IAAI,EAAE,KAAK,KAAK;AAC3D;AAEO,SAAS,eAAe,SAAiB,SAA0B;AACxE,MAAI,QAAS,QAAO,EAAE,MAAM,EAAE,MAAM,WAAW,CAAC;AAChD,MAAI,WAAW,GAAI,QAAO,EAAE,IAAI,UAAU,OAAO,IAAI;AACrD,MAAI,WAAW,GAAI,QAAO,EAAE,OAAO,UAAU,OAAO,IAAI;AACxD,MAAI,UAAU,EAAG,QAAO,EAAE,MAAM,UAAU,OAAO,IAAI;AACrD,SAAO;AACT;AAEO,SAAS,SAAS,KAAqB;AAC5C,UAAQ,KAAK;AAAA,IACX,KAAK;AACH,aAAO,EAAE,MAAM,EAAE,MAAM,IAAI,GAAG,GAAG,CAAC;AAAA,IACpC,KAAK;AACH,aAAO,EAAE,SAAS,EAAE,MAAM,IAAI,GAAG,GAAG,CAAC;AAAA,IACvC,KAAK;AACH,aAAO,EAAE,QAAQ,EAAE,MAAM,IAAI,GAAG,GAAG,CAAC;AAAA,IACtC,KAAK;AACH,aAAO,EAAE,OAAO,EAAE,MAAM,IAAI,GAAG,GAAG,CAAC;AAAA,IACrC;AACE,aAAO,EAAE,UAAU,EAAE,MAAM,IAAI,GAAG,GAAG,CAAC;AAAA,EAC1C;AACF;AAEO,IAAM,UAAU;AAAA,EACrB,OAAO,UAAU,WAAW;AAAA,EAC5B,OAAO,UAAU,WAAW;AAAA,EAC5B,OAAO,UAAU,WAAW;AAAA,EAC5B,KAAK,UAAU,WAAW;AAAA,EAC1B,MAAM,UAAU,cAAc;AAAA,EAC9B,KAAK,UAAU,cAAc;AAAA,EAC7B,MAAM,UAAU,cAAc;AAAA,EAC9B,SAAS,UAAU,iBAAiB;AAAA,EACpC,OAAO,UAAU,WAAW;AAAA,EAC5B,QAAQ,UAAU,oBAAoB;AAAA,EACtC,KAAK,UAAU,WAAW;AAAA,EAC1B,KAAK,UAAU,oBAAoB;AAAA,EACnC,OAAO,UAAU,cAAc;AAAA,EAC/B,SAAS,UAAU,cAAc;AAAA,EACjC,SAAS,UAAU,WAAW;AAChC;;;AClCA,SAAS,gBAA6B;AACpC,SAAO;AAAA,IACL,iBAAiB;AAAA,IACjB,YAAY;AAAA,IACZ,cAAc,CAAC,QAAQ,IAAI,CAAC;AAAA,IAC5B,SAAS;AAAA,EACX;AACF;AAEO,SAAS,cAAc,SAA+B,CAAC,GAAgB;AAC5E,QAAM,MAAM,EAAE,GAAG,cAAc,GAAG,GAAG,OAAO;AAE5C,QAAM,SAAsB;AAAA,IAC1B,YAAW,oBAAI,KAAK,GAAE,YAAY;AAAA,IAClC,cAAc;AAAA,IACd,SAAS;AAAA,IACT,OAAO;AAAA,IACP,SAAS;AAAA,IACT,WAAW;AAAA,IACX,SAAS,CAAC;AAAA,IACV,UAAU,CAAC;AAAA,EACb;AAGA,QAAM,gBAAgB,YAAY,EAAE,OAAO,UAAU,QAAQ,QAAQ,CAAC;AAGtE,QAAM,iBAAiB,IAAI,aAAa;AAAA,IAAQ,CAAC,OAC/C,YAAY,EAAE,OAAO,WAAW,aAAa,IAAI,QAAQ,QAAQ,CAAC;AAAA,EACpE;AAEA,QAAM,aAAa,CAAC,GAAG,eAAe,GAAG,cAAc;AACvD,SAAO,eAAe,WAAW;AAEjC,aAAW,SAAS,YAAY;AAC9B,QAAI,CAAC,MAAM,SAAU;AAErB,UAAM,QAAQ,WAAW,MAAM,QAAQ;AAEvC,QAAI,MAAM,WAAW;AACnB,aAAO;AACP,aAAO,SAAS;AAAA,QACd,YAAY,MAAM,GAAG,KAAK,MAAM,KAAK,oBAAe,MAAM,aAAa;AAAA,MACzE;AAEA,UAAI,IAAI,YAAY;AAClB,cAAM,MAAO,MAAM,UAAU,KAAK,kBAAkB;AACpD,cAAM,SAAS,MAAM,UAAU,KAAK;AACpC,cAAM,WAAW,eAAe,EAAE,QAAQ,KAAK,OAAO,CAAC;AACvD,kBAAU,MAAM,KAAK,UAAU;AAAA,UAC7B,OAAO,MAAM;AAAA,UACb,aAAa,IAAI,aAAa,CAAC;AAAA,UAC/B,QAAQ;AAAA,QACV,CAAC;AACD,eAAO,QAAQ,KAAK,MAAM,GAAG;AAC7B,iBAAS;AAAA,UACP,QAAQ;AAAA,UACR,KAAK,MAAM;AAAA,UACX,OAAO,MAAM;AAAA,UACb,QAAQ;AAAA,UACR,QAAQ;AAAA,QACV,CAAC;AACD,kBAAU;AAAA,UACR,QAAQ;AAAA,UACR,KAAK,MAAM;AAAA,UACX,OAAO,MAAM;AAAA,UACb,YAAW,oBAAI,KAAK,GAAE,YAAY;AAAA,UAClC,QAAQ;AAAA,QACV,GAAG,MAAM,UAAU,KAAK,IAAI,EAAE,MAAM,MAAM;AAAA,QAAC,CAAC;AAAA,MAC9C;AAAA,IACF,WAAW,MAAM,SAAS;AACxB,aAAO;AACP,aAAO,SAAS;AAAA,QACd,UAAU,MAAM,GAAG,KAAK,MAAM,KAAK,YAAO,MAAM,eAAe,eAAe,MAAM,aAAa;AAAA,MACnG;AAAA,IACF,OAAO;AACL,aAAO;AAAA,IACT;AAAA,EACF;AAGA,QAAM,YAAY,gBAAgB;AAClC,SAAO,YAAY,UAAU;AAC7B,aAAW,KAAK,WAAW;AACzB,WAAO,SAAS,KAAK,YAAY,EAAE,IAAI,MAAM,EAAE,WAAW,EAAE;AAAA,EAC9D;AAEA,SAAO;AACT;AAEA,SAAS,aAAa,QAAqB,SAA0B;AACnE,QAAM,QAAkB,CAAC;AAEzB,QAAM;AAAA,IACJ,GAAG,EAAE,KAAK,GAAG,QAAQ,MAAM,oBAAoB,CAAC,IAAI,EAAE,IAAI,OAAO,SAAS,CAAC;AAAA,EAC7E;AACA,QAAM;AAAA,IACJ,KAAK,EAAE,IAAI,UAAU,CAAC,IAAI,OAAO,YAAY,KAAK,EAAE,MAAM,GAAG,QAAQ,KAAK,IAAI,OAAO,OAAO,EAAE,CAAC,KAAK,EAAE,OAAO,GAAG,QAAQ,OAAO,IAAI,OAAO,KAAK,EAAE,CAAC,KAAK,EAAE,IAAI,GAAG,QAAQ,KAAK,IAAI,OAAO,OAAO,EAAE,CAAC,KAAK,EAAE,IAAI,cAAc,OAAO,SAAS,EAAE,CAAC;AAAA,EAChP;AAEA,MAAI,OAAO,QAAQ,SAAS,GAAG;AAC7B,UAAM;AAAA,MACJ,KAAK,EAAE,KAAK,GAAG,QAAQ,GAAG,gBAAgB,CAAC,IAAI,OAAO,QAAQ,KAAK,IAAI,CAAC;AAAA,IAC1E;AAAA,EACF;AAEA,MAAI,WAAW,OAAO,SAAS,SAAS,GAAG;AACzC,UAAM,KAAK,EAAE;AACb,eAAW,KAAK,OAAO,UAAU;AAC/B,UAAI,EAAE,WAAW,SAAS,EAAG,OAAM,KAAK,KAAK,EAAE,IAAI,CAAC,CAAC,EAAE;AAAA,eAC9C,EAAE,WAAW,OAAO,EAAG,OAAM,KAAK,KAAK,EAAE,OAAO,CAAC,CAAC,EAAE;AAAA,eACpD,EAAE,WAAW,SAAS,EAAG,OAAM,KAAK,KAAK,EAAE,QAAQ,CAAC,CAAC,EAAE;AAAA,UAC3D,OAAM,KAAK,KAAK,CAAC,EAAE;AAAA,IAC1B;AAAA,EACF;AAEA,SAAO,MAAM,KAAK,IAAI;AACxB;AAKA,eAAsB,WAAW,SAA+B,CAAC,GAAkB;AACjF,QAAM,MAAM,EAAE,GAAG,cAAc,GAAG,GAAG,OAAO;AAE5C,UAAQ;AAAA,IACN,GAAG,EAAE,KAAK,GAAG,QAAQ,GAAG,uBAAuB,CAAC,IAAI,EAAE,IAAI,cAAc,IAAI,eAAe,mBAAmB,IAAI,UAAU,GAAG,CAAC;AAAA,EAClI;AACA,UAAQ;AAAA,IACN,EAAE,IAAI,0BAA0B,IAAI,aAAa,MAAM,aAAa;AAAA,EACtE;AACA,UAAQ,IAAI;AAEZ,QAAM,OAAO,MAAM;AACjB,UAAM,SAAS,cAAc,GAAG;AAChC,YAAQ,IAAI,aAAa,QAAQ,IAAI,OAAO,CAAC;AAE7C,QAAI,OAAO,SAAS,SAAS,KAAK,IAAI,SAAS;AAC7C,cAAQ,IAAI;AAAA,IACd;AAAA,EACF;AAGA,OAAK;AAGL,QAAM,WAAW,YAAY,MAAM,IAAI,kBAAkB,GAAI;AAG7D,QAAM,WAAW,MAAM;AACrB,kBAAc,QAAQ;AACtB,YAAQ,IAAI;AAAA,EAAK,EAAE,IAAI,sBAAsB,CAAC,EAAE;AAChD,YAAQ,KAAK,CAAC;AAAA,EAChB;AAEA,UAAQ,GAAG,UAAU,QAAQ;AAC7B,UAAQ,GAAG,WAAW,QAAQ;AAG9B,QAAM,IAAI,QAAQ,MAAM;AAAA,EAAC,CAAC;AAC5B;;;AClMA;AAAA,EACE,eAAAA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,OACK;AAEP,IAAM,YAAY;AAClB,IAAM,aAAa;AACnB,IAAM,YAAY;AAClB,IAAM,cAAc;AAEpB,IAAM,oBAAoB;AAyB1B,SAAS,UAAU,YAAoB,MAAsB;AAC3D,SAAO,WAAW,YAAY,MAAM,mBAAmB,YAAY,QAAQ;AAC7E;AAKO,SAAS,aACd,SACA,YACQ;AACR,QAAM,UAA2B;AAAA,IAC/B;AAAA,IACA,aAAY,oBAAI,KAAK,GAAE,YAAY;AAAA,EACrC;AAEA,QAAM,YAAY,KAAK,UAAU,OAAO;AACxC,QAAM,OAAOC,aAAY,WAAW;AACpC,QAAM,KAAKA,aAAY,SAAS;AAChC,QAAM,MAAM,UAAU,YAAY,IAAI;AAEtC,QAAM,SAAS,eAAe,WAAW,KAAK,EAAE;AAChD,QAAM,YAAY,OAAO,OAAO;AAAA,IAC9B,OAAO,OAAO,WAAW,MAAM;AAAA,IAC/B,OAAO,MAAM;AAAA,EACf,CAAC;AACD,QAAM,MAAM,OAAO,WAAW;AAE9B,QAAM,SAAyB;AAAA,IAC7B,GAAG;AAAA,IACH,MAAM,UAAU,SAAS,QAAQ;AAAA,IACjC,MAAM,KAAK,SAAS,QAAQ;AAAA,IAC5B,IAAI,GAAG,SAAS,QAAQ;AAAA,IACxB,KAAK,IAAI,SAAS,QAAQ;AAAA,IAC1B,YAAW,oBAAI,KAAK,GAAE,YAAY;AAAA,IAClC,OAAO,QAAQ;AAAA,EACjB;AAEA,SAAO,OAAO,KAAK,KAAK,UAAU,MAAM,CAAC,EAAE,SAAS,QAAQ;AAC9D;AAKO,SAAS,eACd,SACA,YACiB;AACjB,QAAM,aAAa,OAAO,KAAK,SAAS,QAAQ,EAAE,SAAS,MAAM;AACjE,QAAM,SAAyB,KAAK,MAAM,UAAU;AAEpD,MAAI,OAAO,MAAM,GAAG;AAClB,UAAM,IAAI,MAAM,wCAAwC,OAAO,CAAC,EAAE;AAAA,EACpE;AAEA,QAAM,OAAO,OAAO,KAAK,OAAO,MAAM,QAAQ;AAC9C,QAAM,KAAK,OAAO,KAAK,OAAO,IAAI,QAAQ;AAC1C,QAAM,MAAM,OAAO,KAAK,OAAO,KAAK,QAAQ;AAC5C,QAAM,YAAY,OAAO,KAAK,OAAO,MAAM,QAAQ;AACnD,QAAM,MAAM,UAAU,YAAY,IAAI;AAEtC,QAAM,WAAW,iBAAiB,WAAW,KAAK,EAAE;AACpD,WAAS,WAAW,GAAG;AAEvB,QAAM,YAAY,OAAO,OAAO;AAAA,IAC9B,SAAS,OAAO,SAAS;AAAA,IACzB,SAAS,MAAM;AAAA,EACjB,CAAC;AAED,SAAO,KAAK,MAAM,UAAU,SAAS,MAAM,CAAC;AAC9C;;;AC/GA,SAAS,oBAAoB;AAsBtB,SAAS,YAAY,SAAsC;AAChE,QAAM,SAAS,oBAAI,IAAoB;AACvC,QAAM,QAAQ,QAAQ,MAAM,OAAO;AAEnC,WAAS,IAAI,GAAG,IAAI,MAAM,QAAQ,KAAK;AACrC,UAAM,OAAO,MAAM,CAAC,EAAE,KAAK;AAE3B,QAAI,CAAC,QAAQ,KAAK,WAAW,GAAG,EAAG;AAEnC,UAAM,QAAQ,KAAK,QAAQ,GAAG;AAC9B,QAAI,UAAU,GAAI;AAElB,UAAM,MAAM,KAAK,MAAM,GAAG,KAAK,EAAE,KAAK;AACtC,QAAI,QAAQ,KAAK,MAAM,QAAQ,CAAC,EAAE,KAAK;AAEvC,QACG,MAAM,WAAW,GAAG,KAAK,MAAM,SAAS,GAAG,KAC3C,MAAM,WAAW,GAAG,KAAK,MAAM,SAAS,GAAG,GAC5C;AACA,cAAQ,MAAM,MAAM,GAAG,EAAE;AAAA,IAC3B;AAEA,YAAQ,MACL,QAAQ,QAAQ,IAAI,EACpB,QAAQ,QAAQ,IAAI,EACpB,QAAQ,QAAQ,GAAI,EACpB,QAAQ,SAAS,IAAI,EACrB,QAAQ,QAAQ,GAAG;AAEtB,QAAI,MAAM,SAAS,GAAG,KAAK,CAAC,KAAK,SAAS,GAAG,KAAK,CAAC,KAAK,SAAS,GAAG,GAAG;AACrE,cAAQ,MAAM,MAAM,GAAG,EAAE,CAAC,EAAE,KAAK;AAAA,IACnC;AAEA,QAAI,IAAK,QAAO,IAAI,KAAK,KAAK;AAAA,EAChC;AAEA,SAAO;AACT;AAKO,SAAS,aACd,mBACA,UAAyB,CAAC,GACZ;AACd,MAAI;AAEJ,MAAI;AACF,cAAU,aAAa,mBAAmB,MAAM;AAAA,EAClD,QAAQ;AACN,cAAU;AAAA,EACZ;AAEA,QAAM,QAAQ,YAAY,OAAO;AACjC,QAAM,SAAuB;AAAA,IAC3B,UAAU,CAAC;AAAA,IACX,SAAS,CAAC;AAAA,IACV,OAAO,MAAM;AAAA,EACf;AAEA,aAAW,CAAC,KAAK,KAAK,KAAK,OAAO;AAChC,QAAI,QAAQ,gBAAgB,UAAU,KAAK;AAAA,MACzC,OAAO,QAAQ;AAAA,MACf,aAAa,QAAQ;AAAA,MACrB,QAAQ,QAAQ,UAAU;AAAA,IAC5B,CAAC,GAAG;AACF,aAAO,QAAQ,KAAK,GAAG;AACvB;AAAA,IACF;AAEA,QAAI,QAAQ,QAAQ;AAClB,aAAO,SAAS,KAAK,GAAG;AACxB;AAAA,IACF;AAEA,UAAM,UAA4B;AAAA,MAChC,OAAO,QAAQ,SAAS;AAAA,MACxB,aAAa,QAAQ,eAAe,QAAQ,IAAI;AAAA,MAChD,QAAQ,QAAQ,UAAU;AAAA,IAC5B;AAEA,cAAU,KAAK,OAAO,OAAO;AAC7B,WAAO,SAAS,KAAK,GAAG;AAAA,EAC1B;AAEA,SAAO;AACT;;;AC5GA,SAAS,WAAW,oBAAoB;AACxC,SAAS,WAAW,mBAAmB;AAkBvC,SAAS,YACP,KACA,SACA,YAAY,KACmC;AAC/C,SAAO,IAAI,QAAQ,CAAC,SAAS,WAAW;AACtC,UAAM,YAAY,IAAI,IAAI,GAAG;AAC7B,UAAM,QAAQ,UAAU,aAAa,WAAW,eAAe;AAC/D,UAAM,MAAM;AAAA,MACV;AAAA,MACA,EAAE,QAAQ,OAAO,SAAS,SAAS,UAAU;AAAA,MAC7C,CAAC,QAAQ;AACP,YAAI,OAAO;AACX,YAAI,GAAG,QAAQ,CAAC,UAAW,QAAQ,KAAM;AACzC,YAAI;AAAA,UAAG;AAAA,UAAO,MACZ,QAAQ,EAAE,YAAY,IAAI,cAAc,GAAG,KAAK,CAAC;AAAA,QACnD;AAAA,MACF;AAAA,IACF;AACA,QAAI,GAAG,SAAS,MAAM;AACtB,QAAI,GAAG,WAAW,MAAM;AACtB,UAAI,QAAQ;AACZ,aAAO,IAAI,MAAM,mBAAmB,CAAC;AAAA,IACvC,CAAC;AACD,QAAI,IAAI;AAAA,EACV,CAAC;AACH;AAEO,IAAM,mBAAN,MAAuB;AAAA,EACpB,YAAY,oBAAI,IAAsB;AAAA,EAE9C,SAAS,UAA0B;AACjC,SAAK,UAAU,IAAI,SAAS,MAAM,QAAQ;AAAA,EAC5C;AAAA,EAEA,IAAI,MAAoC;AACtC,WAAO,KAAK,UAAU,IAAI,IAAI;AAAA,EAChC;AAAA,EAEA,eACE,OACA,OACsB;AACtB,QAAI,OAAO,UAAU;AACnB,aAAO,KAAK,UAAU,IAAI,MAAM,QAAQ;AAAA,IAC1C;AAEA,eAAW,YAAY,KAAK,UAAU,OAAO,GAAG;AAC9C,UAAI,SAAS,UAAU;AACrB,mBAAW,OAAO,SAAS,UAAU;AACnC,cAAI,MAAM,WAAW,GAAG,EAAG,QAAO;AAAA,QACpC;AAAA,MACF;AAAA,IACF;AAEA,WAAO;AAAA,EACT;AAAA,EAEA,gBAA4B;AAC1B,WAAO,CAAC,GAAG,KAAK,UAAU,OAAO,CAAC;AAAA,EACpC;AACF;AAIA,IAAM,iBAA2B;AAAA,EAC/B,MAAM;AAAA,EACN,aAAa;AAAA,EACb,UAAU,CAAC,KAAK;AAAA,EAChB,MAAM,SAAS,OAA0C;AACvD,UAAM,QAAQ,KAAK,IAAI;AACvB,QAAI;AACF,YAAM,EAAE,WAAW,IAAI,MAAM;AAAA,QAC3B;AAAA,QACA;AAAA,UACE,eAAe,UAAU,KAAK;AAAA,UAC9B,cAAc;AAAA,QAChB;AAAA,MACF;AACA,YAAM,YAAY,KAAK,IAAI,IAAI;AAE/B,UAAI,eAAe;AACjB,eAAO,EAAE,OAAO,MAAM,QAAQ,SAAS,SAAS,oBAAoB,WAAW,UAAU,SAAS;AACpG,UAAI,eAAe;AACjB,eAAO,EAAE,OAAO,OAAO,QAAQ,WAAW,SAAS,8BAA8B,WAAW,UAAU,SAAS;AACjH,UAAI,eAAe;AACjB,eAAO,EAAE,OAAO,MAAM,QAAQ,SAAS,SAAS,wCAAmC,WAAW,UAAU,SAAS;AACnH,aAAO,EAAE,OAAO,OAAO,QAAQ,SAAS,SAAS,qBAAqB,UAAU,IAAI,WAAW,UAAU,SAAS;AAAA,IACpH,SAAS,KAAK;AACZ,aAAO,EAAE,OAAO,OAAO,QAAQ,SAAS,SAAS,GAAG,eAAe,QAAQ,IAAI,UAAU,eAAe,IAAI,WAAW,KAAK,IAAI,IAAI,OAAO,UAAU,SAAS;AAAA,IAChK;AAAA,EACF;AACF;AAEA,IAAM,iBAA2B;AAAA,EAC/B,MAAM;AAAA,EACN,aAAa;AAAA,EACb,UAAU,CAAC,YAAY,YAAY,YAAY,YAAY,YAAY,UAAU;AAAA,EACjF,MAAM,SAAS,OAA0C;AACvD,UAAM,QAAQ,KAAK,IAAI;AACvB,QAAI;AACF,YAAM,EAAE,WAAW,IAAI,MAAM;AAAA,QAC3B;AAAA,QACA;AAAA,UACE,eAAe,UAAU,KAAK;AAAA,UAC9B,cAAc;AAAA,QAChB;AAAA,MACF;AACA,YAAM,YAAY,KAAK,IAAI,IAAI;AAE/B,UAAI,eAAe;AACjB,eAAO,EAAE,OAAO,MAAM,QAAQ,SAAS,SAAS,oBAAoB,WAAW,UAAU,SAAS;AACpG,UAAI,eAAe;AACjB,eAAO,EAAE,OAAO,OAAO,QAAQ,WAAW,SAAS,8BAA8B,WAAW,UAAU,SAAS;AACjH,UAAI,eAAe;AACjB,eAAO,EAAE,OAAO,MAAM,QAAQ,SAAS,SAAS,wCAAmC,WAAW,UAAU,SAAS;AACnH,aAAO,EAAE,OAAO,OAAO,QAAQ,SAAS,SAAS,qBAAqB,UAAU,IAAI,WAAW,UAAU,SAAS;AAAA,IACpH,SAAS,KAAK;AACZ,aAAO,EAAE,OAAO,OAAO,QAAQ,SAAS,SAAS,GAAG,eAAe,QAAQ,IAAI,UAAU,eAAe,IAAI,WAAW,KAAK,IAAI,IAAI,OAAO,UAAU,SAAS;AAAA,IAChK;AAAA,EACF;AACF;AAEA,IAAM,iBAA2B;AAAA,EAC/B,MAAM;AAAA,EACN,aAAa;AAAA,EACb,UAAU,CAAC,QAAQ,QAAQ,QAAQ,QAAQ,QAAQ,aAAa;AAAA,EAChE,MAAM,SAAS,OAA0C;AACvD,UAAM,QAAQ,KAAK,IAAI;AACvB,QAAI;AACF,YAAM,EAAE,WAAW,IAAI,MAAM;AAAA,QAC3B;AAAA,QACA;AAAA,UACE,eAAe,SAAS,KAAK;AAAA,UAC7B,cAAc;AAAA,UACd,QAAQ;AAAA,QACV;AAAA,MACF;AACA,YAAM,YAAY,KAAK,IAAI,IAAI;AAE/B,UAAI,eAAe;AACjB,eAAO,EAAE,OAAO,MAAM,QAAQ,SAAS,SAAS,kBAAkB,WAAW,UAAU,SAAS;AAClG,UAAI,eAAe;AACjB,eAAO,EAAE,OAAO,OAAO,QAAQ,WAAW,SAAS,4BAA4B,WAAW,UAAU,SAAS;AAC/G,UAAI,eAAe;AACjB,eAAO,EAAE,OAAO,OAAO,QAAQ,WAAW,SAAS,oCAAoC,WAAW,UAAU,SAAS;AACvH,UAAI,eAAe;AACjB,eAAO,EAAE,OAAO,MAAM,QAAQ,SAAS,SAAS,0CAAqC,WAAW,UAAU,SAAS;AACrH,aAAO,EAAE,OAAO,OAAO,QAAQ,SAAS,SAAS,qBAAqB,UAAU,IAAI,WAAW,UAAU,SAAS;AAAA,IACpH,SAAS,KAAK;AACZ,aAAO,EAAE,OAAO,OAAO,QAAQ,SAAS,SAAS,GAAG,eAAe,QAAQ,IAAI,UAAU,eAAe,IAAI,WAAW,KAAK,IAAI,IAAI,OAAO,UAAU,SAAS;AAAA,IAChK;AAAA,EACF;AACF;AAEA,IAAM,cAAwB;AAAA,EAC5B,MAAM;AAAA,EACN,aAAa;AAAA,EACb,UAAU,CAAC,QAAQ,MAAM;AAAA,EACzB,MAAM,SAAS,OAA0C;AACvD,UAAM,QAAQ,KAAK,IAAI;AACvB,UAAM,YAAY,KAAK,IAAI,IAAI;AAE/B,QAAI,4BAA4B,KAAK,KAAK,GAAG;AAC3C,aAAO,EAAE,OAAO,MAAM,QAAQ,WAAW,SAAS,oEAAoE,WAAW,UAAU,MAAM;AAAA,IACnJ;AACA,WAAO,EAAE,OAAO,OAAO,QAAQ,WAAW,SAAS,iCAAiC,WAAW,UAAU,MAAM;AAAA,EACjH;AACF;AAEA,IAAM,eAAyB;AAAA,EAC7B,MAAM;AAAA,EACN,aAAa;AAAA,EACb,MAAM,SAAS,OAAe,KAAyC;AACrE,UAAM,QAAQ,KAAK,IAAI;AAEvB,QAAI,CAAC,KAAK;AACR,aAAO,EAAE,OAAO,OAAO,QAAQ,WAAW,SAAS,gCAAgC,WAAW,GAAG,UAAU,OAAO;AAAA,IACpH;AAEA,QAAI;AACF,YAAM,EAAE,WAAW,IAAI,MAAM,YAAY,KAAK;AAAA,QAC5C,eAAe,UAAU,KAAK;AAAA,QAC9B,cAAc;AAAA,MAChB,CAAC;AACD,YAAM,YAAY,KAAK,IAAI,IAAI;AAE/B,UAAI,cAAc,OAAO,aAAa;AACpC,eAAO,EAAE,OAAO,MAAM,QAAQ,SAAS,SAAS,qBAAqB,UAAU,IAAI,WAAW,UAAU,OAAO;AACjH,UAAI,eAAe,OAAO,eAAe;AACvC,eAAO,EAAE,OAAO,OAAO,QAAQ,WAAW,SAAS,0BAA0B,UAAU,KAAK,WAAW,UAAU,OAAO;AAC1H,aAAO,EAAE,OAAO,OAAO,QAAQ,SAAS,SAAS,qBAAqB,UAAU,IAAI,WAAW,UAAU,OAAO;AAAA,IAClH,SAAS,KAAK;AACZ,aAAO,EAAE,OAAO,OAAO,QAAQ,SAAS,SAAS,GAAG,eAAe,QAAQ,IAAI,UAAU,eAAe,IAAI,WAAW,KAAK,IAAI,IAAI,OAAO,UAAU,OAAO;AAAA,IAC9J;AAAA,EACF;AACF;AAEO,IAAM,WAAW,IAAI,iBAAiB;AAC7C,SAAS,SAAS,cAAc;AAChC,SAAS,SAAS,cAAc;AAChC,SAAS,SAAS,cAAc;AAChC,SAAS,SAAS,WAAW;AAC7B,SAAS,SAAS,YAAY;AAK9B,eAAsB,eACpB,OACA,MAC2B;AAC3B,QAAM,WAAW,MAAM,WACnB,SAAS,IAAI,KAAK,QAAQ,IAC1B,SAAS,eAAe,KAAK;AAEjC,MAAI,CAAC,UAAU;AACb,WAAO;AAAA,MACL,OAAO;AAAA,MACP,QAAQ;AAAA,MACR,SAAS;AAAA,MACT,WAAW;AAAA,MACX,UAAU;AAAA,IACZ;AAAA,EACF;AAEA,MAAI,SAAS,SAAS,UAAU,MAAM,eAAe;AACnD,WAAQ,SAAiB,SAAS,OAAO,KAAK,aAAa;AAAA,EAC7D;AAEA,SAAO,SAAS,SAAS,KAAK;AAChC;;;AN7NA,SAAS,qBAAqB;;;AOlC9B,SAAS,uBAAuB;AAEhC,eAAsB,aAAa,SAAkC;AACnE,QAAM,KAAK,gBAAgB;AAAA,IACzB,OAAO,QAAQ;AAAA,IACf,QAAQ,QAAQ;AAAA,IAChB,UAAU;AAAA,EACZ,CAAC;AAED,SAAO,IAAI,QAAQ,CAAC,YAAY;AAC9B,YAAQ,OAAO,MAAM,OAAO;AAE5B,UAAM,QAAQ,QAAQ;AACtB,UAAM,SAAS,MAAM;AACrB,QAAI,MAAM,SAAS,MAAM,YAAY;AACnC,YAAM,WAAW,IAAI;AAAA,IACvB;AAEA,QAAI,QAAQ;AAEZ,UAAM,SAAS,CAAC,UAAkB;AAChC,YAAM,OAAO,MAAM,SAAS,MAAM;AAClC,UAAI,SAAS,QAAQ,SAAS,MAAM;AAClC,cAAM,eAAe,QAAQ,MAAM;AACnC,YAAI,MAAM,SAAS,MAAM,YAAY;AACnC,gBAAM,WAAW,UAAU,KAAK;AAAA,QAClC;AACA,gBAAQ,OAAO,MAAM,IAAI;AACzB,WAAG,MAAM;AACT,gBAAQ,KAAK;AAAA,MACf,WAAW,SAAS,KAAU;AAC5B,gBAAQ,KAAK,CAAC;AAAA,MAChB,WAAW,SAAS,UAAY,SAAS,MAAM;AAC7C,gBAAQ,MAAM,MAAM,GAAG,EAAE;AAAA,MAC3B,OAAO;AACL,iBAAS;AAAA,MACX;AAAA,IACF;AAEA,UAAM,GAAG,QAAQ,MAAM;AAAA,EACzB,CAAC;AACH;;;APEA,SAAS,QAAQ,GAAsC;AACrD,SAAO,KAAK,OAAO,KAAK,GAAG,CAAC;AAC9B;AACA,SAAS,QAAQ,GAAsC;AACrD,SAAO,KAAK,OAAO,IAAI,OAAO,CAAC;AACjC;AACA,SAAS,QAAW,KAAkC;AACpD,SAAO,MAAM,IAAI,IAAI,CAAC,MAAO,OAAO,MAAM,WAAW,QAAQ,CAAC,IAAI,CAAO,IAAI,CAAC;AAChF;AAEA,SAAS,UAAU,KAKA;AACjB,MAAI;AACJ,MAAI,IAAI,OAAQ,SAAQ;AAAA,WACf,IAAI,QAAS,SAAQ;AAE9B,QAAM,cACJ,IAAI,gBAAgB,IAAI,UAAU,QAAQ,IAAI,IAAI;AAEpD,MAAI,UAAU,aAAa,CAAC,aAAa;AACvC,UAAM,IAAI,MAAM,4CAA4C;AAAA,EAC9D;AAEA,SAAO;AAAA,IACL;AAAA,IACA,aAAa,eAAe,QAAQ,IAAI;AAAA,IACxC,KAAK,IAAI;AAAA,IACT,QAAQ;AAAA,EACV;AACF;AAEO,SAAS,gBAAyB;AACvC,QAAMC,WAAU,IAAI,QAAQ,EACzB,KAAK,OAAO,EACZ;AAAA,IACC,GAAG,EAAE,KAAK,QAAQ,CAAC,IAAI,EAAE,IAAI,4CAAuC,CAAC;AAAA,EACvE,EACC,QAAQ,OAAO;AAIlB,EAAAA,SACG,QAAQ,mBAAmB,EAC3B,YAAY,iDAAiD,EAC7D,OAAO,gBAAgB,uBAAuB,EAC9C,OAAO,iBAAiB,mCAAmC,EAC3D,OAAO,yBAAyB,uBAAuB,EACvD,OAAO,mBAAmB,sDAAsD,EAChF,OAAO,mBAAmB,2CAA2C,QAAQ,EAC7E,OAAO,mBAAmB,6BAA6B,EACvD,OAAO,wBAAwB,4BAA4B,EAC3D,OAAO,iBAAiB,sBAAsB,EAC9C,OAAO,8BAA8B,sFAAsF,EAC3H,OAAO,8BAA8B,qCAAqC,EAC1E,OAAO,OAAO,KAAa,OAA2B,QAAQ;AAC7D,UAAM,OAAO,UAAU,GAAG;AAE1B,QAAI,CAAC,OAAO;AACV,cAAQ,MAAM,aAAa,GAAG,QAAQ,GAAG,oBAAoB,EAAE,KAAK,GAAG,CAAC,IAAI;AAC5E,UAAI,CAAC,OAAO;AACV,gBAAQ,MAAM,EAAE,IAAI,GAAG,QAAQ,KAAK,+BAA+B,CAAC;AACpE,gBAAQ,KAAK,CAAC;AAAA,MAChB;AAAA,IACF;AAEA,UAAM,UAA4B;AAAA,MAChC,GAAG;AAAA,MACH,YAAY,IAAI;AAAA,MAChB,WAAW,IAAI;AAAA,MACf,aAAa,IAAI;AAAA,MACjB,MAAM,IAAI,MAAM,MAAM,GAAG,EAAE,IAAI,CAAC,MAAc,EAAE,KAAK,CAAC;AAAA,MACtD,gBAAgB,IAAI;AAAA,MACpB,gBAAgB,IAAI;AAAA,IACtB;AAGA,QAAI,IAAI,KAAK;AACX,YAAM,WAAW,YAAY,KAAK,IAAI;AACtC,YAAM,SAAS,UAAU,UAAU,UAAU,CAAC;AAC9C,aAAO,IAAI,GAAG,IAAI;AAGlB,UAAI,UAAU,UAAU,SAAS,CAAC,OAAO,SAAS,GAAG;AACnD,eAAO,SAAS,IAAI,SAAS,SAAS;AAAA,MACxC;AAEA,cAAQ,SAAS;AACjB,cAAQ,aAAa,UAAU,UAAU,cAAc,IAAI;AAC3D,gBAAU,KAAK,IAAI,OAAO;AAE1B,cAAQ;AAAA,QACN,GAAG,QAAQ,KAAK,IAAI,EAAE,MAAM,OAAO,CAAC,IAAI,EAAE,KAAK,GAAG,CAAC,IAAI,SAAS,IAAI,GAAG,CAAC,IAAI,EAAE,IAAI,IAAI,WAAW,KAAK,SAAS,QAAQ,CAAC,GAAG,CAAC;AAAA,MAC9H;AAAA,IACF,OAAO;AACL,gBAAU,KAAK,OAAO,OAAO;AAC7B,YAAM,SAAmB,CAAC;AAC1B,UAAI,IAAI,IAAK,QAAO,KAAK,GAAG,QAAQ,KAAK,QAAQ,IAAI,GAAG,GAAG;AAC3D,UAAI,IAAI,YAAa,QAAO,KAAK,EAAE,IAAI,IAAI,WAAW,CAAC;AAEvD,cAAQ;AAAA,QACN,GAAG,QAAQ,KAAK,IAAI,EAAE,MAAM,OAAO,CAAC,IAAI,EAAE,KAAK,GAAG,CAAC,IAAI,EAAE,IAAI,IAAI,WAAW,KAAK,SAAS,QAAQ,CAAC,GAAG,CAAC,IAAI,OAAO,KAAK,GAAG,CAAC;AAAA,MAC7H;AAAA,IACF;AAAA,EACF,CAAC;AAEH,EAAAA,SACG,QAAQ,WAAW,EACnB,YAAY,uDAAuD,EACnE,OAAO,gBAAgB,2BAA2B,EAClD,OAAO,iBAAiB,4BAA4B,EACpD,OAAO,yBAAyB,uBAAuB,EACvD,OAAO,mBAAmB,8BAA8B,EACxD,OAAO,CAAC,KAAa,QAAQ;AAC5B,UAAM,OAAO,UAAU,GAAG;AAC1B,UAAM,QAAQ,UAAU,KAAK,IAAI;AAEjC,QAAI,UAAU,MAAM;AAClB,cAAQ,MAAM,EAAE,IAAI,GAAG,QAAQ,KAAK,YAAY,GAAG,aAAa,CAAC;AACjE,cAAQ,KAAK,CAAC;AAAA,IAChB;AAEA,YAAQ,OAAO,MAAM,KAAK;AAAA,EAC5B,CAAC;AAEH,EAAAA,SACG,QAAQ,cAAc,EACtB,MAAM,IAAI,EACV,YAAY,kCAAkC,EAC9C,OAAO,gBAAgB,+BAA+B,EACtD,OAAO,iBAAiB,gCAAgC,EACxD,OAAO,yBAAyB,uBAAuB,EACvD,OAAO,CAAC,KAAa,QAAQ;AAC5B,UAAM,OAAO,UAAU,GAAG;AAC1B,UAAM,UAAU,aAAa,KAAK,IAAI;AAEtC,QAAI,SAAS;AACX,cAAQ,IAAI,GAAG,QAAQ,KAAK,IAAI,EAAE,MAAM,SAAS,CAAC,IAAI,EAAE,KAAK,GAAG,CAAC,EAAE;AAAA,IACrE,OAAO;AACL,cAAQ,MAAM,EAAE,IAAI,GAAG,QAAQ,KAAK,YAAY,GAAG,aAAa,CAAC;AACjE,cAAQ,KAAK,CAAC;AAAA,IAChB;AAAA,EACF,CAAC;AAEH,EAAAA,SACG,QAAQ,MAAM,EACd,MAAM,IAAI,EACV,YAAY,iDAAiD,EAC7D,OAAO,gBAAgB,wBAAwB,EAC/C,OAAO,iBAAiB,yBAAyB,EACjD,OAAO,yBAAyB,uBAAuB,EACvD,OAAO,gBAAgB,0BAA0B,EACjD,OAAO,mBAAmB,eAAe,EACzC,OAAO,aAAa,2BAA2B,EAC/C,OAAO,WAAW,sCAAsC,EACxD,OAAO,0BAA0B,0BAA0B,EAC3D,OAAO,CAAC,QAAQ;AACf,UAAM,OAAO,UAAU,GAAG;AAC1B,QAAI,UAAU,YAAY,IAAI;AAE9B,QAAI,IAAI,KAAK;AACX,gBAAU,QAAQ;AAAA,QAAO,CAAC,MACxB,EAAE,UAAU,KAAK,MAAM,SAAS,IAAI,GAAG;AAAA,MACzC;AAAA,IACF;AACA,QAAI,IAAI,SAAS;AACf,gBAAU,QAAQ,OAAO,CAAC,MAAM,EAAE,OAAO,SAAS;AAAA,IACpD;AACA,QAAI,IAAI,OAAO;AACb,gBAAU,QAAQ;AAAA,QAChB,CAAC,MAAM,EAAE,OAAO,WAAW,CAAC,EAAE,OAAO;AAAA,MACvC;AAAA,IACF;AACA,QAAI,IAAI,QAAQ;AACd,YAAM,QAAQ,IAAI;AAAA,QAChB,MAAM,IAAI,OAAO,QAAQ,OAAO,IAAI,IAAI;AAAA,QACxC;AAAA,MACF;AACA,gBAAU,QAAQ,OAAO,CAAC,MAAM,MAAM,KAAK,EAAE,GAAG,CAAC;AAAA,IACnD;AAEA,QAAI,QAAQ,WAAW,GAAG;AACxB,cAAQ,IAAI,EAAE,IAAI,kBAAkB,CAAC;AACrC;AAAA,IACF;AAEA,YAAQ;AAAA,MACN,EAAE,KAAK;AAAA,IAAO,QAAQ,GAAG,oBAAoB,QAAQ,MAAM;AAAA,CAAK;AAAA,IAClE;AAEA,UAAM,YAAY,KAAK,IAAI,GAAG,QAAQ,IAAI,CAAC,MAAM,EAAE,IAAI,MAAM,CAAC;AAE9D,eAAW,SAAS,SAAS;AAC3B,YAAM,QAAkB,CAAC;AAEzB,YAAM,MAAM,QAAQ,MAAM,GAAG;AAC7B,YAAM,QAAQ,QAAQ,MAAM,KAAK;AACjC,YAAM,OAAO,MAAM,UAAU,SAAS,OAAO,KAAK,MAAM,SAAS,MAAM,EAAE,IAAI,OAAO,IAAI;AACxF,YAAM,iBAAiB,QAAQ,MAAM,UAAU,KAAK,WAAW,MAAM;AACrE,YAAM,cAAc,QAAQ,MAAM,UAAU,KAAK,WAAW;AAC5D,YAAM,OAAO,QAAQ,MAAM,UAAU,KAAK,IAAI;AAC9C,YAAM,WAAW,QAAQ,MAAM,OAAO,eAAe;AACrD,YAAM,UAAU,CAAC,CAAC,MAAM,OAAO;AAC/B,YAAM,WAAW,QAAQ,MAAM,OAAO,aAAa;AAEnD,YAAM,KAAK,EAAE,IAAI,GAAG,IAAI,WAAW,KAAK,IAAI,EAAE,IAAI,GAAG,CAAC;AACtD,YAAM,KAAK,EAAE,KAAK,IAAI,OAAO,SAAS,CAAC,CAAC;AAExC,UAAI,MAAM;AACR,cAAM,KAAK,EAAE,QAAQ,IAAI,KAAK,KAAK,GAAG,CAAC,GAAG,CAAC;AAAA,MAC7C;AAEA,UAAI,MAAM,UAAU,WAAW,KAAK,UAAU;AAC5C,cAAM,KAAK,eAAe,UAAU,OAAO,CAAC;AAC5C,YAAI,YAAY,CAAC,SAAS;AACxB,gBAAM,KAAK,EAAE,IAAI,QAAQ,CAAC;AAAA,QAC5B;AAAA,MACF;AAEA,UAAI,iBAAiB,GAAG;AACtB,cAAM,KAAK,EAAE,KAAK,GAAG,QAAQ,IAAI,IAAI,cAAc,EAAE,CAAC;AAAA,MACxD;AAEA,UAAI,cAAc,GAAG;AACnB,cAAM,KAAK,EAAE,IAAI,GAAG,QAAQ,GAAG,IAAI,WAAW,EAAE,CAAC;AAAA,MACnD;AAEA,UAAI,KAAK,SAAS,GAAG;AACnB,cAAM,KAAK,EAAE,IAAI,KAAK,IAAI,CAAC,MAAM,IAAI,CAAC,EAAE,EAAE,KAAK,GAAG,CAAC,CAAC;AAAA,MACtD;AAEA,cAAQ,IAAI,KAAK,MAAM,KAAK,IAAI,CAAC,EAAE;AAAA,IACrC;AAEA,YAAQ,IAAI;AAAA,EACd,CAAC;AAEH,EAAAA,SACG,QAAQ,eAAe,EACvB,YAAY,qCAAqC,EACjD,OAAO,gBAAgB,2BAA2B,EAClD,OAAO,iBAAiB,4BAA4B,EACpD,OAAO,yBAAyB,uBAAuB,EACvD,OAAO,CAAC,KAAa,QAAQ;AAC5B,UAAM,OAAO,UAAU,GAAG;AAC1B,UAAM,SAAS,YAAY,KAAK,IAAI;AAEpC,QAAI,CAAC,QAAQ;AACX,cAAQ,MAAM,EAAE,IAAI,GAAG,QAAQ,KAAK,YAAY,GAAG,aAAa,CAAC;AACjE,cAAQ,KAAK,CAAC;AAAA,IAChB;AAEA,UAAM,EAAE,UAAU,MAAM,IAAI;AAC5B,UAAM,QAAQ,WAAW,QAAQ;AAEjC,UAAM,YAAY,QAAQ,KAAK;AAC/B,UAAM,YAAY,QAAQ,SAAS,KAAK,SAAS;AACjD,UAAM,YAAY,QAAQ,SAAS,KAAK,SAAS;AACjD,UAAM,cAAc,QAAQ,SAAS,KAAK,WAAW;AACrD,UAAM,aAAa,QAAQ,SAAS,KAAK,cAAc;AACvD,UAAM,OAAO,QAAQ,SAAS,KAAK,WAAW;AAC9C,UAAM,OAAO,QAAQ,SAAS,KAAK,IAAI;AACvC,UAAM,aAAa,SAAS,KAAK,aAAa,CAAC,GAAG,IAAI,CAAC,OAAO;AAAA,MAC5D,SAAS,QAAQ,EAAE,OAAO;AAAA,MAC1B,KAAK,QAAQ,EAAE,GAAG;AAAA,IACpB,EAAE;AACF,UAAM,YAAY,SAAS,SAAS,OAAO,KAAK,SAAS,MAAM,EAAE,IAAI,OAAO,IAAI;AAChF,UAAM,aAAa,QAAQ,SAAS,UAAU;AAC9C,UAAM,YAAY,QAAQ,MAAM,aAAa;AAC7C,UAAM,WAAW,QAAQ,MAAM,eAAe;AAC9C,UAAM,UAAU,CAAC,CAAC,MAAM;AAExB,YAAQ,IAAI;AAAA,IAAO,EAAE,KAAK,QAAQ,MAAM,MAAM,GAAG,CAAC,EAAE;AACpD,YAAQ,IAAI,KAAK,EAAE,IAAI,QAAQ,CAAC,QAAQ,WAAW,SAAS,CAAC,EAAE;AAE/D,QAAI,WAAW;AACb,cAAQ,IAAI,KAAK,EAAE,IAAI,OAAO,CAAC,SAAS,EAAE,QAAQ,eAAe,CAAC,EAAE;AACpE,cAAQ,IAAI,KAAK,EAAE,IAAI,SAAS,CAAC,EAAE;AACnC,iBAAW,OAAO,WAAW;AAC3B,cAAM,YAAY,QAAQ;AAC1B,gBAAQ;AAAA,UACN,OAAO,SAAS,GAAG,CAAC,IAAI,YAAY,EAAE,IAAI,WAAW,IAAI,EAAE;AAAA,QAC7D;AAAA,MACF;AAAA,IACF,OAAO;AACL,cAAQ,IAAI,KAAK,EAAE,IAAI,OAAO,CAAC,SAAS,EAAE,MAAM,WAAW,CAAC,EAAE;AAAA,IAChE;AAEA,YAAQ,IAAI,KAAK,EAAE,IAAI,UAAU,CAAC,MAAM,SAAS,EAAE;AACnD,YAAQ,IAAI,KAAK,EAAE,IAAI,UAAU,CAAC,MAAM,SAAS,EAAE;AACnD,YAAQ,IAAI,KAAK,EAAE,IAAI,WAAW,CAAC,KAAK,WAAW,QAAQ;AAE3D,QAAI,YAAY;AACd,cAAQ,IAAI,KAAK,EAAE,IAAI,YAAY,CAAC,IAAI,UAAU,EAAE;AAAA,IACtD;AAEA,QAAI,MAAM;AACR,cAAQ,IAAI,KAAK,EAAE,IAAI,OAAO,CAAC,SAAS,IAAI,EAAE;AAAA,IAChD;AAEA,QAAI,KAAK,SAAS,GAAG;AACnB,cAAQ;AAAA,QACN,KAAK,EAAE,IAAI,OAAO,CAAC,SAAS,KAAK,IAAI,CAAC,MAAM,EAAE,KAAK,IAAI,CAAC,EAAE,CAAC,EAAE,KAAK,GAAG,CAAC;AAAA,MACxE;AAAA,IACF;AAEA,QAAI,WAAW;AACb,cAAQ;AAAA,QACN,KAAK,EAAE,IAAI,QAAQ,CAAC,QAAQ,eAAe,UAAU,OAAO,CAAC,IAAI,SAAS;AAAA,MAC5E;AAAA,IACF;AAEA,QAAI,UAAU,SAAS,GAAG;AACxB,cAAQ,IAAI,KAAK,EAAE,IAAI,YAAY,CAAC,EAAE;AACtC,iBAAW,QAAQ,WAAW;AAC5B,gBAAQ,IAAI,OAAO,QAAQ,IAAI,IAAI,KAAK,OAAO,IAAI,KAAK,GAAG,EAAE;AAAA,MAC/D;AAAA,IACF;AAEA,YAAQ,IAAI;AAAA,EACd,CAAC;AAEH,EAAAA,SACG,QAAQ,QAAQ,EAChB,YAAY,0DAA0D,EACtE,OAAO,yBAAyB,8BAA8B,KAAK,EACnE,OAAO,gBAAgB,0BAA0B,EACjD,OAAO,iBAAiB,2BAA2B,EACnD,OAAO,yBAAyB,uBAAuB,EACvD,OAAO,mBAAmB,gCAAgC,EAC1D,OAAO,qBAAqB,qCAAqC,EACjE,OAAO,qBAAqB,mCAAmC,EAC/D,OAAO,CAAC,QAAQ;AACf,UAAM,OAAO,UAAU,GAAG;AAC1B,UAAM,SAAS,cAAc;AAAA,MAC3B,GAAG;AAAA,MACH,QAAQ,IAAI;AAAA,MACZ,MAAM,IAAI,MAAM,MAAM,GAAG,EAAE,IAAI,CAAC,MAAc,EAAE,KAAK,CAAC;AAAA,MACtD,MAAM,IAAI,MAAM,MAAM,GAAG,EAAE,IAAI,CAAC,MAAc,EAAE,KAAK,CAAC;AAAA,IACxD,CAAC;AACD,YAAQ,OAAO,MAAM,SAAS,IAAI;AAAA,EACpC,CAAC;AAEH,EAAAA,SACG,QAAQ,eAAe,EACvB,YAAY,iCAAiC,EAC7C,OAAO,gBAAgB,wBAAwB,EAC/C,OAAO,iBAAiB,yBAAyB,EACjD,OAAO,yBAAyB,uBAAuB,EACvD,OAAO,mBAAmB,qBAAqB,EAC/C,OAAO,mBAAmB,8BAA8B,EACxD,OAAO,aAAa,+CAA+C,EACnE,OAAO,CAAC,MAAc,QAAQ;AAC7B,UAAM,OAAO,UAAU,GAAG;AAE1B,UAAM,SAAS,aAAa,MAAM;AAAA,MAChC,OAAO,KAAK;AAAA,MACZ,aAAa,KAAK;AAAA,MAClB,QAAQ;AAAA,MACR,cAAc,IAAI;AAAA,MAClB,QAAQ,IAAI;AAAA,IACd,CAAC;AAED,QAAI,IAAI,QAAQ;AACd,cAAQ;AAAA,QACN;AAAA,IAAO,QAAQ,OAAO,IAAI,EAAE,KAAK,SAAS,CAAC,wBAAmB,OAAO,SAAS,MAAM,OAAO,OAAO,KAAK;AAAA;AAAA,MACzG;AACA,iBAAW,OAAO,OAAO,UAAU;AACjC,gBAAQ,IAAI,KAAK,QAAQ,GAAG,IAAI,EAAE,KAAK,GAAG,CAAC,EAAE;AAAA,MAC/C;AACA,UAAI,OAAO,QAAQ,SAAS,GAAG;AAC7B,gBAAQ,IAAI;AAAA,IAAO,EAAE,IAAI,uBAAuB,OAAO,QAAQ,KAAK,IAAI,CAAC,EAAE,CAAC,EAAE;AAAA,MAChF;AAAA,IACF,OAAO;AACL,cAAQ;AAAA,QACN,GAAG,QAAQ,KAAK,IAAI,EAAE,MAAM,UAAU,CAAC,IAAI,OAAO,SAAS,MAAM,mBAAmB,EAAE,KAAK,IAAI,CAAC;AAAA,MAClG;AACA,UAAI,OAAO,QAAQ,SAAS,GAAG;AAC7B,gBAAQ;AAAA,UACN,EAAE,IAAI,aAAa,OAAO,QAAQ,MAAM,cAAc,OAAO,QAAQ,KAAK,IAAI,CAAC,EAAE;AAAA,QACnF;AAAA,MACF;AAAA,IACF;AAEA,YAAQ,IAAI;AAAA,EACd,CAAC;AAEH,EAAAA,SACG,QAAQ,OAAO,EACf,YAAY,wDAAwD,EACpE,OAAO,yBAAyB,gCAAgC,EAChE,OAAO,CAAC,QAAQ;AACf,UAAM,cAAc,IAAI,eAAe,QAAQ,IAAI;AACnD,UAAM,SAAS,kBAAkB,WAAW;AAE5C,QAAI,CAAC,QAAQ,WAAW,OAAO,KAAK,OAAO,OAAO,EAAE,WAAW,GAAG;AAChE,cAAQ;AAAA,QACN,EAAE,IAAI,GAAG,QAAQ,KAAK,4CAA4C;AAAA,MACpE;AACA,cAAQ;AAAA,QACN,EAAE,IAAI,0EAA0E;AAAA,MAClF;AACA,cAAQ,KAAK,CAAC;AAAA,IAChB;AAEA,YAAQ;AAAA,MACN,EAAE,KAAK;AAAA,IAAO,QAAQ,MAAM;AAAA,CAAkC;AAAA,IAChE;AAEA,QAAI,UAAU;AACd,QAAI,UAAU;AACd,QAAI,eAAe;AACnB,QAAI,aAAa;AAEjB,eAAW,CAAC,KAAK,QAAQ,KAAK,OAAO,QAAQ,OAAO,OAAO,GAAG;AAC5D,YAAM,SAAS,YAAY,KAAK,EAAE,aAAa,QAAQ,MAAM,CAAC;AAE9D,UAAI,CAAC,QAAQ;AACX,YAAI,SAAS,aAAa,OAAO;AAC/B;AACA,kBAAQ;AAAA,YACN,KAAK,EAAE,IAAI,QAAQ,KAAK,CAAC,IAAI,EAAE,KAAK,GAAG,CAAC,IAAI,EAAE,IAAI,SAAS,CAAC,IAAI,SAAS,cAAc,EAAE,IAAI,UAAK,SAAS,WAAW,EAAE,IAAI,EAAE;AAAA,UAChI;AAAA,QACF,OAAO;AACL,kBAAQ;AAAA,YACN,KAAK,EAAE,IAAI,QAAQ,KAAK,CAAC,IAAI,EAAE,KAAK,GAAG,CAAC,IAAI,EAAE,IAAI,mBAAmB,CAAC,IAAI,SAAS,cAAc,EAAE,IAAI,UAAK,SAAS,WAAW,EAAE,IAAI,EAAE;AAAA,UAC1I;AAAA,QACF;AACA;AAAA,MACF;AAEA,YAAM,QAAQ,WAAW,OAAO,QAAQ;AAExC,UAAI,MAAM,WAAW;AACnB;AACA,gBAAQ;AAAA,UACN,KAAK,EAAE,IAAI,QAAQ,OAAO,CAAC,IAAI,EAAE,KAAK,GAAG,CAAC,IAAI,EAAE,MAAM,EAAE,MAAM,WAAW,CAAC,CAAC,IAAI,SAAS,cAAc,EAAE,IAAI,UAAK,SAAS,WAAW,EAAE,IAAI,EAAE;AAAA,QAC/I;AAAA,MACF,WAAW,MAAM,SAAS;AACxB;AACA,gBAAQ;AAAA,UACN,KAAK,EAAE,OAAO,QAAQ,OAAO,CAAC,IAAI,EAAE,KAAK,GAAG,CAAC,IAAI,EAAE,OAAO,UAAU,MAAM,eAAe,IAAI,CAAC,IAAI,SAAS,cAAc,EAAE,IAAI,UAAK,SAAS,WAAW,EAAE,IAAI,EAAE;AAAA,QAClK;AAAA,MACF,OAAO;AACL;AACA,gBAAQ;AAAA,UACN,KAAK,EAAE,MAAM,QAAQ,KAAK,CAAC,IAAI,EAAE,KAAK,GAAG,CAAC,IAAI,EAAE,MAAM,IAAI,CAAC,IAAI,SAAS,cAAc,EAAE,IAAI,UAAK,SAAS,WAAW,EAAE,IAAI,EAAE;AAAA,QAC/H;AAAA,MACF;AAAA,IACF;AAEA,UAAM,QAAQ,OAAO,KAAK,OAAO,OAAO,EAAE;AAC1C,YAAQ;AAAA,MACN;AAAA,IAAO,EAAE,KAAK,GAAG,KAAK,WAAW,CAAC,KAAK,EAAE,MAAM,GAAG,OAAO,UAAU,CAAC,KAAK,EAAE,OAAO,GAAG,UAAU,QAAQ,CAAC,KAAK,EAAE,IAAI,GAAG,YAAY,UAAU,CAAC,KAAK,EAAE,IAAI,GAAG,OAAO,UAAU,CAAC;AAAA,IAC/K;AAEA,QAAI,UAAU,GAAG;AACf,cAAQ;AAAA,QACN;AAAA,IAAO,EAAE,IAAI,uDAAkD,CAAC;AAAA,MAClE;AAAA,IACF,WAAW,eAAe,GAAG;AAC3B,cAAQ;AAAA,QACN;AAAA,IAAO,EAAE,OAAO,iDAAiD,CAAC;AAAA,MACpE;AAAA,IACF,OAAO;AACL,cAAQ;AAAA,QACN;AAAA,IAAO,EAAE,MAAM,GAAG,QAAQ,KAAK,wDAAmD,CAAC;AAAA,MACrF;AAAA,IACF;AAEA,YAAQ,IAAI;AAEZ,QAAI,UAAU,EAAG,SAAQ,KAAK,CAAC;AAAA,EACjC,CAAC;AAEH,EAAAA,SACG,QAAQ,gBAAgB,EACxB,YAAY,4DAA4D,EACxE,OAAO,gBAAgB,mBAAmB,EAC1C,OAAO,iBAAiB,oBAAoB,EAC5C,OAAO,yBAAyB,uBAAuB,EACvD,OAAO,qBAAqB,+DAA+D,EAC3F,OAAO,SAAS,sDAAsD,EACtE,OAAO,cAAc,sDAAsD,EAC3E,OAAO,oBAAoB,8BAA8B,EACzD,OAAO,OAAO,KAAyB,QAAQ;AAC9C,QAAI,IAAI,eAAe;AACrB,cAAQ,IAAI,EAAE,KAAK;AAAA,IAAO,QAAQ,MAAM;AAAA,CAAmC,CAAC;AAC5E,iBAAW,KAAK,SAAiB,cAAc,GAAG;AAChD,cAAM,WAAW,EAAE,UAAU,SAAS,EAAE,IAAI,KAAK,EAAE,SAAS,KAAK,IAAI,CAAC,GAAG,IAAI;AAC7E,gBAAQ,IAAI,KAAK,EAAE,KAAK,EAAE,KAAK,OAAO,EAAE,CAAC,CAAC,IAAI,EAAE,WAAW,GAAG,QAAQ,EAAE;AAAA,MAC1E;AACA,cAAQ,IAAI;AACZ;AAAA,IACF;AAEA,QAAI,CAAC,OAAO,CAAC,IAAI,KAAK;AACpB,cAAQ,MAAM,EAAE,IAAI,GAAG,QAAQ,KAAK,kCAAkC,CAAC;AACvE,cAAQ,KAAK,CAAC;AAAA,IAChB;AAEA,UAAM,OAAO,UAAU,GAAG;AAE1B,QAAI,IAAI,KAAK;AACX,UAAI,UAAU,YAAY,IAAI;AAC9B,YAAM,cAAc,IAAI,eAAe,QAAQ,IAAI;AAEnD,UAAI,IAAI,UAAU;AAChB,cAAM,SAAS,kBAAkB,WAAW;AAC5C,YAAI,QAAQ,SAAS;AACnB,gBAAM,eAAe,IAAI,IAAI,OAAO,KAAK,OAAO,OAAO,CAAC;AACxD,oBAAU,QAAQ,OAAO,CAAC,MAAM,aAAa,IAAI,EAAE,GAAG,CAAC;AAAA,QACzD;AAAA,MACF;AAEA,cAAQ,IAAI,EAAE,KAAK;AAAA,IAAO,QAAQ,MAAM;AAAA,CAAuB,CAAC;AAEhE,UAAI,YAAY;AAChB,UAAI,UAAU;AAEd,iBAAW,SAAS,SAAS;AAC3B,cAAMC,SAAQ,UAAU,MAAM,KAAK,EAAE,GAAG,MAAM,OAAO,MAAM,MAAM,CAAC;AAClE,YAAI,CAACA,QAAO;AAAE;AAAW;AAAA,QAAU;AAEnC,cAAMC,YAAW,MAAM,UAAU,KAAK,YAAY,IAAI;AACtD,cAAMC,UAAS,MAAM,eAAeF,QAAO,EAAE,UAAUC,UAAS,CAAC;AAEjE,YAAIC,QAAO,WAAW,WAAW;AAAE;AAAW;AAAA,QAAU;AAExD;AACA,cAAMC,QAAOD,QAAO,WAAW,UAAU,EAAE,MAAM,QAAQ,KAAK,IAC1DA,QAAO,WAAW,YAAY,EAAE,IAAI,QAAQ,KAAK,IACjD,EAAE,OAAO,QAAQ,OAAO;AAC5B,cAAM,aAAaA,QAAO,WAAW,UAAU,EAAE,MAAM,OAAO,IAC1DA,QAAO,WAAW,YAAY,EAAE,IAAI,SAAS,IAC7C,EAAE,OAAO,OAAO;AAEpB,gBAAQ;AAAA,UACN,KAAKC,KAAI,IAAI,EAAE,KAAK,MAAM,IAAI,OAAO,EAAE,CAAC,CAAC,IAAI,UAAU,KAAK,EAAE,IAAI,IAAID,QAAO,QAAQ,KAAKA,QAAO,SAAS,KAAK,CAAC,GAAGA,QAAO,WAAW,UAAU,IAAI,EAAE,IAAI,YAAOA,QAAO,OAAO,CAAC,KAAK,EAAE;AAAA,QACxL;AAAA,MACF;AAEA,cAAQ,IAAI;AAAA,IAAO,EAAE,IAAI,GAAG,SAAS,eAAe,OAAO,wBAAwB,CAAC;AAAA,CAAI;AACxF;AAAA,IACF;AAEA,UAAM,QAAQ,UAAU,KAAM,IAAI;AAClC,QAAI,CAAC,OAAO;AACV,cAAQ,MAAM,EAAE,IAAI,GAAG,QAAQ,KAAK,YAAY,GAAG,aAAa,CAAC;AACjE,cAAQ,KAAK,CAAC;AAAA,IAChB;AAEA,UAAM,WAAW,YAAY,KAAM,IAAI;AACvC,UAAM,WAAW,UAAU,SAAS,KAAK,YAAY,IAAI;AACzD,UAAM,SAAS,MAAM,eAAe,OAAO,EAAE,UAAU,SAAS,CAAC;AAEjE,UAAM,OAAO,OAAO,WAAW,UAAU,EAAE,MAAM,QAAQ,KAAK,IAC1D,OAAO,WAAW,YAAY,EAAE,IAAI,QAAQ,KAAK,IACjD,OAAO,WAAW,UAAU,EAAE,OAAO,QAAQ,OAAO,IACpD,EAAE,IAAI,QAAG;AAEb,YAAQ,IAAI;AAAA,IAAO,IAAI,IAAI,EAAE,KAAK,GAAI,CAAC,KAAK,OAAO,MAAM,KAAK,EAAE,IAAI,IAAI,OAAO,QAAQ,KAAK,OAAO,SAAS,KAAK,CAAC,EAAE;AACpH,QAAI,OAAO,WAAW,OAAO,WAAW,SAAS;AAC/C,cAAQ,IAAI,OAAO,EAAE,IAAI,OAAO,OAAO,CAAC,EAAE;AAAA,IAC5C;AACA,YAAQ,IAAI;AAAA,EACd,CAAC;AAIH,EAAAH,SACG,QAAQ,KAAK,EACb,YAAY,2DAA2D,EACvE,OAAO,yBAAyB,4BAA4B,EAC5D,OAAO,CAAC,QAAQ;AACf,UAAM,SAAS,oBAAoB;AAAA,MACjC,aAAa,IAAI,eAAe,QAAQ,IAAI;AAAA,IAC9C,CAAC;AAED,QAAI,QAAQ;AACV,cAAQ;AAAA,QACN,GAAG,QAAQ,GAAG,IAAI,EAAE,KAAK,wBAAwB,CAAC,IAAI,SAAS,OAAO,GAAG,CAAC,IAAI,EAAE,IAAI,YAAY,OAAO,MAAM,GAAG,CAAC;AAAA,MACnH;AAAA,IACF,OAAO;AACL,cAAQ;AAAA,QACN,EAAE,IAAI,0EAA0E;AAAA,MAClF;AAAA,IACF;AAAA,EACF,CAAC;AAEH,EAAAA,SACG,QAAQ,UAAU,EAClB,MAAM,KAAK,EACX,YAAY,iDAAiD,EAC7D;AAAA,IACC;AAAA,IACA;AAAA,IACA;AAAA,EACF,EACC,OAAO,oBAAoB,+CAA+C,QAAQ,EAClF,OAAO,qBAAqB,iCAAiC,EAC7D,OAAO,oBAAoB,oDAAoD,EAC/E,OAAO,gBAAgB,sBAAsB,EAC7C,OAAO,iBAAiB,uBAAuB,EAC/C,OAAO,yBAAyB,uBAAuB,EACvD,OAAO,CAAC,QAAQ;AACf,UAAM,SAAS,eAAe;AAAA,MAC5B,QAAQ,IAAI;AAAA,MACZ,QAAQ,IAAI;AAAA,MACZ,QAAQ,IAAI;AAAA,IACd,CAAC;AAED,UAAM,UAAU,gBAAgB,MAAM;AAEtC,QAAI,IAAI,MAAM;AACZ,YAAM,OAAO,UAAU,GAAG;AAC1B,gBAAU,IAAI,MAAM,QAAQ,IAAI;AAChC,cAAQ;AAAA,QACN,GAAG,QAAQ,OAAO,IAAI,EAAE,MAAM,mBAAmB,CAAC,IAAI,EAAE,KAAK,IAAI,IAAI,CAAC,IAAI,EAAE,IAAI,IAAI,IAAI,MAAM,KAAK,OAAO,gBAAgB,CAAC;AAAA,MAC7H;AAAA,IACF,OAAO;AACL,cAAQ,OAAO,MAAM,MAAM;AAC3B,UAAI,QAAQ,OAAO,OAAO;AACxB,gBAAQ;AAAA,UACN;AAAA,EAAK,EAAE,IAAI,WAAW,IAAI,MAAM,gBAAgB,OAAO,OAAO,CAAC;AAAA,QACjE;AAAA,MACF;AAAA,IACF;AAAA,EACF,CAAC;AAEH,EAAAA,SACG,QAAQ,kCAAkC,EAC1C,YAAY,wDAAmD,EAC/D,OAAO,gBAAgB,sBAAsB,EAC7C,OAAO,2BAA2B,qBAAqB,EACvD,OAAO,2BAA2B,qBAAqB,EACvD;AAAA,IACC,CACE,WACA,WACA,QACG;AACH,YAAM,aAA6B;AAAA,QACjC,OAAO,IAAI,gBAAgB,YAAY;AAAA,QACvC,aAAa,IAAI,iBAAiB,QAAQ,IAAI;AAAA,QAC9C,QAAQ;AAAA,MACV;AACA,YAAM,aAA6B;AAAA,QACjC,OAAO,IAAI,gBAAgB,YAAY;AAAA,QACvC,aAAa,IAAI,iBAAiB,QAAQ,IAAI;AAAA,QAC9C,QAAQ;AAAA,MACV;AAEA,sBAAgB,WAAW,YAAY,WAAW,UAAU;AAC5D,cAAQ;AAAA,QACN,GAAG,QAAQ,IAAI,IAAI,EAAE,KAAK,WAAW,CAAC,IAAI,EAAE,KAAK,SAAS,CAAC,IAAI,QAAQ,KAAK,IAAI,EAAE,KAAK,SAAS,CAAC;AAAA,MACnG;AAAA,IACF;AAAA,EACF;AAEF,EAAAA,SACG,QAAQ,qCAAqC,EAC7C,YAAY,8BAA8B,EAC1C,OAAO,gBAAgB,sBAAsB,EAC7C,OAAO,2BAA2B,qBAAqB,EACvD,OAAO,2BAA2B,qBAAqB,EACvD;AAAA,IACC,CACE,WACA,WACA,QACG;AACH,YAAM,aAA6B;AAAA,QACjC,OAAO,IAAI,gBAAgB,YAAY;AAAA,QACvC,aAAa,IAAI,iBAAiB,QAAQ,IAAI;AAAA,QAC9C,QAAQ;AAAA,MACV;AACA,YAAM,aAA6B;AAAA,QACjC,OAAO,IAAI,gBAAgB,YAAY;AAAA,QACvC,aAAa,IAAI,iBAAiB,QAAQ,IAAI;AAAA,QAC9C,QAAQ;AAAA,MACV;AAEA,yBAAmB,WAAW,YAAY,WAAW,UAAU;AAC/D,cAAQ;AAAA,QACN,GAAG,QAAQ,IAAI,IAAI,EAAE,OAAO,cAAc,CAAC,IAAI,EAAE,KAAK,SAAS,CAAC,IAAI,QAAQ,KAAK,IAAI,EAAE,KAAK,SAAS,CAAC;AAAA,MACxG;AAAA,IACF;AAAA,EACF;AAIF,QAAM,SAASA,SACZ,QAAQ,QAAQ,EAChB,YAAY,iDAAiD;AAEhE,SACG,QAAQ,gBAAgB,EACxB,YAAY,8CAA8C,EAC1D,OAAO,mBAAmB,+BAA+B,QAAQ,EACjE,OAAO,mBAAmB,+BAA+B,QAAQ,EACjE,OAAO,CAAC,OAAe,QAAQ;AAC9B,UAAM,KAAK,aAAa,OAAO;AAAA,MAC7B,YAAY,IAAI;AAAA,MAChB,UAAU,IAAI;AAAA,IAChB,CAAC;AAED,YAAQ,IAAI,GAAG,QAAQ,KAAK,IAAI,EAAE,QAAQ,UAAU,CAAC,IAAI,EAAE,KAAK,EAAE,CAAC,EAAE;AAErE,UAAM,SAAmB,CAAC;AAC1B,QAAI,IAAI,IAAK,QAAO,KAAK,OAAO,IAAI,GAAG,GAAG;AAC1C,QAAI,IAAI,SAAU,QAAO,KAAK,aAAa,IAAI,QAAQ,EAAE;AACzD,QAAI,OAAO,OAAQ,SAAQ,IAAI,EAAE,IAAI,KAAK,OAAO,KAAK,KAAK,CAAC,EAAE,CAAC;AAAA,EACjE,CAAC;AAEH,SACG,QAAQ,WAAW,EACnB,YAAY,4CAA4C,EACxD,OAAO,CAAC,OAAe;AACtB,UAAM,QAAQ,WAAW,EAAE;AAC3B,QAAI,UAAU,MAAM;AAClB,cAAQ;AAAA,QACN,EAAE,IAAI,GAAG,QAAQ,KAAK,YAAY,EAAE,wBAAwB;AAAA,MAC9D;AACA,cAAQ,KAAK,CAAC;AAAA,IAChB;AACA,YAAQ,OAAO,MAAM,KAAK;AAAA,EAC5B,CAAC;AAEH,SACG,QAAQ,cAAc,EACtB,YAAY,uCAAuC,EACnD,OAAO,CAAC,OAAe;AACtB,UAAM,YAAY,cAAc,EAAE;AAClC,QAAI,WAAW;AACb,cAAQ,IAAI,GAAG,QAAQ,KAAK,IAAI,EAAE,MAAM,WAAW,CAAC,IAAI,EAAE,EAAE;AAAA,IAC9D,OAAO;AACL,cAAQ;AAAA,QACN,EAAE,IAAI,GAAG,QAAQ,KAAK,YAAY,EAAE,aAAa;AAAA,MACnD;AACA,cAAQ,KAAK,CAAC;AAAA,IAChB;AAAA,EACF,CAAC;AAEH,SACG,QAAQ,MAAM,EACd,MAAM,IAAI,EACV,YAAY,qBAAqB,EACjC,OAAO,MAAM;AACZ,UAAM,UAAU,WAAW;AAC3B,QAAI,QAAQ,WAAW,GAAG;AACxB,cAAQ,IAAI,EAAE,IAAI,mBAAmB,CAAC;AACtC;AAAA,IACF;AAEA,YAAQ,IAAI,EAAE,KAAK;AAAA,IAAO,QAAQ,KAAK,oBAAoB,QAAQ,MAAM;AAAA,CAAK,CAAC;AAC/E,eAAW,KAAK,SAAS;AACvB,YAAM,QAAQ,CAAC,EAAE,KAAK,EAAE,EAAE,CAAC;AAC3B,YAAM,KAAK,EAAE,IAAI,UAAU,EAAE,WAAW,EAAE,CAAC;AAC3C,UAAI,EAAE,SAAU,OAAM,KAAK,EAAE,IAAI,QAAQ,EAAE,QAAQ,EAAE,CAAC;AACtD,UAAI,EAAE,WAAW;AACf,cAAM,YAAY,KAAK,IAAI,GAAG,KAAK,OAAO,EAAE,YAAY,KAAK,IAAI,KAAK,GAAI,CAAC;AAC3E,cAAM,KAAK,EAAE,IAAI,YAAY,SAAS,GAAG,CAAC;AAAA,MAC5C;AACA,cAAQ,IAAI,KAAK,QAAQ,KAAK,IAAI,MAAM,KAAK,IAAI,CAAC,EAAE;AAAA,IACtD;AACA,YAAQ,IAAI;AAAA,EACd,CAAC;AAIH,QAAM,KAAKA,SACR,QAAQ,UAAU,EAClB,MAAM,IAAI,EACV,YAAY,kDAAkD;AAEjE,KAAG,QAAQ,MAAM,EACd,YAAY,uCAAuC,EACnD,OAAO,qBAAqB,mCAAmC,EAC/D,OAAO,gBAAgB,mBAAmB,EAC1C,OAAO,iBAAiB,oBAAoB,EAC5C,OAAO,yBAAyB,uBAAuB,EACvD,OAAO,OAAO,QAAQ;AACrB,UAAM,OAAO,UAAU,GAAG;AAC1B,UAAM,aAAa,MAAM;AAAA,MACvB,GAAG,QAAQ,IAAI;AAAA,IACjB;AACA,QAAI,CAAC,YAAY;AACf,cAAQ,MAAM,EAAE,IAAI,qBAAqB,CAAC;AAC1C,cAAQ,KAAK,CAAC;AAAA,IAChB;AAEA,UAAM,UAAU,YAAY,IAAI;AAChC,QAAI;AACJ,QAAI,IAAI,MAAM;AACZ,aAAO,IAAI,KAAK,MAAM,GAAG,EAAE,IAAI,CAAC,MAAc,EAAE,KAAK,CAAC;AAAA,IACxD;AAEA,UAAM,UAA4D,CAAC;AACnE,eAAW,SAAS,SAAS;AAC3B,UAAI,QAAQ,CAAC,KAAK,SAAS,MAAM,GAAG,EAAG;AACvC,YAAM,QAAQ,UAAU,MAAM,KAAK,EAAE,GAAG,MAAM,OAAO,MAAM,MAAM,CAAC;AAClE,UAAI,UAAU,MAAM;AAClB,gBAAQ,KAAK,EAAE,KAAK,MAAM,KAAK,OAAO,OAAO,MAAM,MAAM,CAAC;AAAA,MAC5D;AAAA,IACF;AAEA,QAAI,QAAQ,WAAW,GAAG;AACxB,cAAQ,MAAM,EAAE,IAAI,oBAAoB,CAAC;AACzC,cAAQ,KAAK,CAAC;AAAA,IAChB;AAEA,UAAM,SAAS,aAAa,SAAS,UAAU;AAC/C,YAAQ,OAAO,MAAM,MAAM;AAC3B,QAAI,QAAQ,OAAO,OAAO;AACxB,cAAQ;AAAA,QACN;AAAA,EAAK,QAAQ,OAAO,IAAI,EAAE,MAAM,QAAQ,CAAC,IAAI,QAAQ,MAAM;AAAA,MAC7D;AAAA,IACF;AAAA,EACF,CAAC;AAEH,KAAG,QAAQ,iBAAiB,EACzB,YAAY,oDAAoD,EAChE,OAAO,gBAAgB,wBAAwB,EAC/C,OAAO,iBAAiB,yBAAyB,EACjD,OAAO,yBAAyB,uBAAuB,EACvD,OAAO,aAAa,4CAA4C,EAChE,OAAO,OAAO,QAA4B,QAAQ;AACjD,QAAI,CAAC,QAAQ;AAEX,YAAM,SAAmB,CAAC;AAC1B,uBAAiB,SAAS,QAAQ,OAAO;AACvC,eAAO,KAAK,KAAK;AAAA,MACnB;AACA,eAAS,OAAO,OAAO,MAAM,EAAE,SAAS,MAAM,EAAE,KAAK;AAAA,IACvD;AAEA,UAAM,aAAa,MAAM;AAAA,MACvB,GAAG,QAAQ,IAAI;AAAA,IACjB;AAEA,QAAI;AACF,YAAM,UAAU,eAAe,QAAQ,UAAU;AAEjD,UAAI,IAAI,QAAQ;AACd,gBAAQ;AAAA,UACN;AAAA,EAAK,QAAQ,OAAO,IAAI,EAAE,KAAK,cAAc,CAAC,KAAK,QAAQ,QAAQ,MAAM;AAAA;AAAA,QAC3E;AACA,mBAAW,KAAK,QAAQ,SAAS;AAC/B,kBAAQ,IAAI,KAAK,QAAQ,GAAG,IAAI,EAAE,KAAK,EAAE,GAAG,CAAC,IAAI,EAAE,IAAI,IAAI,EAAE,SAAS,QAAQ,GAAG,CAAC,EAAE;AAAA,QACtF;AACA;AAAA,MACF;AAEA,YAAM,OAAO,UAAU,GAAG;AAC1B,iBAAW,KAAK,QAAQ,SAAS;AAC/B,kBAAU,EAAE,KAAK,EAAE,OAAO,IAAI;AAAA,MAChC;AAEA,cAAQ;AAAA,QACN,GAAG,QAAQ,KAAK,IAAI,EAAE,MAAM,UAAU,CAAC,IAAI,QAAQ,QAAQ,MAAM;AAAA,MACnE;AAAA,IACF,QAAQ;AACN,cAAQ;AAAA,QACN,EAAE,IAAI,GAAG,QAAQ,KAAK,yDAAyD;AAAA,MACjF;AACA,cAAQ,KAAK,CAAC;AAAA,IAChB;AAAA,EACF,CAAC;AAIH,EAAAA,SACG,QAAQ,OAAO,EACf,YAAY,sCAAsC,EAClD,OAAO,mBAAmB,eAAe,EACzC;AAAA,IACC;AAAA,IACA;AAAA,EACF,EACC,OAAO,mBAAmB,4BAA4B,UAAU,EAAE,EAClE,OAAO,eAAe,yBAAyB,EAC/C,OAAO,CAAC,QAAQ;AACf,QAAI,IAAI,WAAW;AACjB,YAAM,YAAY,gBAAgB,IAAI,GAAG;AACzC,UAAI,UAAU,WAAW,GAAG;AAC1B,gBAAQ;AAAA,UACN,GAAG,QAAQ,MAAM,IAAI,EAAE,MAAM,uBAAuB,CAAC;AAAA,QACvD;AACA;AAAA,MACF;AAEA,cAAQ;AAAA,QACN;AAAA,EAAK,QAAQ,OAAO,IAAI,EAAE,KAAK,EAAE,OAAO,GAAG,UAAU,MAAM,6BAA6B,CAAC,CAAC;AAAA;AAAA,MAC5F;AACA,iBAAW,KAAK,WAAW;AACzB,gBAAQ,IAAI,KAAK,EAAE,OAAO,EAAE,IAAI,CAAC,IAAI,EAAE,WAAW,EAAE;AAAA,MACtD;AACA,cAAQ,IAAI;AACZ;AAAA,IACF;AAEA,UAAM,SAAS,WAAW;AAAA,MACxB,KAAK,IAAI;AAAA,MACT,QAAQ,IAAI;AAAA,MACZ,OAAO,IAAI;AAAA,IACb,CAAC;AAED,QAAI,OAAO,WAAW,GAAG;AACvB,cAAQ,IAAI,EAAE,IAAI,uBAAuB,CAAC;AAC1C;AAAA,IACF;AAEA,YAAQ;AAAA,MACN,EAAE,KAAK;AAAA,IAAO,QAAQ,GAAG,eAAe,OAAO,MAAM;AAAA,CAAY;AAAA,IACnE;AAEA,eAAW,SAAS,QAAQ;AAC1B,YAAM,KAAK,IAAI,KAAK,MAAM,SAAS,EAAE,eAAe;AACpD,YAAM,cACJ,MAAM,WAAW,SACb,EAAE,OACF,MAAM,WAAW,UACf,EAAE,QACF,MAAM,WAAW,WACf,EAAE,MACF,EAAE;AAEZ,YAAM,QAAQ;AAAA,QACZ,EAAE,IAAI,EAAE;AAAA,QACR,YAAY,MAAM,OAAO,OAAO,CAAC,CAAC;AAAA,QAClC,MAAM,MAAM,EAAE,KAAK,MAAM,GAAG,IAAI;AAAA,QAChC,MAAM,QAAQ,EAAE,IAAI,IAAI,MAAM,KAAK,GAAG,IAAI;AAAA,QAC1C,MAAM,SAAS,EAAE,IAAI,MAAM,MAAM,IAAI;AAAA,MACvC;AAEA,cAAQ,IAAI,KAAK,MAAM,OAAO,OAAO,EAAE,KAAK,IAAI,CAAC,EAAE;AAAA,IACrD;AACA,YAAQ,IAAI;AAAA,EACd,CAAC;AAIH,EAAAA,SACG,QAAQ,QAAQ,EAChB,YAAY,iCAAiC,EAC7C,OAAO,gBAAgB,yBAAyB,EAChD,OAAO,iBAAiB,0BAA0B,EAClD,OAAO,yBAAyB,uBAAuB,EACvD,OAAO,CAAC,QAAQ;AACf,UAAM,OAAO,UAAU,GAAG;AAC1B,UAAM,UAAU,YAAY,IAAI;AAEhC,QAAI,QAAQ,WAAW,GAAG;AACxB,cAAQ,IAAI,EAAE,IAAI,qBAAqB,CAAC;AACxC;AAAA,IACF;AAEA,YAAQ;AAAA,MACN,EAAE,KAAK;AAAA,IAAO,QAAQ,MAAM;AAAA,CAAyB;AAAA,IACvD;AAEA,QAAI,UAAU;AACd,QAAI,QAAQ;AACZ,QAAI,UAAU;AACd,QAAI,UAAU;AAEd,eAAW,SAAS,SAAS;AAC3B,UAAI,CAAC,MAAM,SAAS,CAAC,MAAM,MAAM,eAAe;AAC9C;AACA;AAAA,MACF;AAEA,UAAI,MAAM,MAAM,WAAW;AACzB;AACA,gBAAQ;AAAA,UACN,KAAK,EAAE,IAAI,QAAQ,KAAK,CAAC,IAAI,EAAE,KAAK,MAAM,GAAG,CAAC,IAAI,EAAE,MAAM,EAAE,MAAM,WAAW,CAAC,CAAC;AAAA,QACjF;AAAA,MACF,WAAW,MAAM,MAAM,SAAS;AAC9B;AACA,gBAAQ;AAAA,UACN,KAAK,EAAE,OAAO,QAAQ,OAAO,CAAC,IAAI,EAAE,KAAK,MAAM,GAAG,CAAC,IAAI,EAAE,OAAO,UAAU,MAAM,MAAM,eAAe,MAAM,MAAM,MAAM,aAAa,QAAQ,CAAC;AAAA,QAC/I;AAAA,MACF,OAAO;AACL;AAAA,MACF;AAAA,IACF;AAEA,YAAQ;AAAA,MACN;AAAA,IAAO,EAAE,MAAM,GAAG,QAAQ,KAAK,IAAI,OAAO,UAAU,CAAC,KAAK,EAAE,OAAO,GAAG,QAAQ,OAAO,IAAI,KAAK,QAAQ,CAAC,KAAK,EAAE,IAAI,GAAG,QAAQ,KAAK,IAAI,OAAO,UAAU,CAAC,KAAK,EAAE,IAAI,GAAG,OAAO,WAAW,CAAC;AAAA,IAC3L;AAGA,UAAM,YAAY,gBAAgB;AAClC,QAAI,UAAU,SAAS,GAAG;AACxB,cAAQ;AAAA,QACN;AAAA,IAAO,EAAE,OAAO,GAAG,QAAQ,OAAO,IAAI,UAAU,MAAM,oCAAoC,CAAC,IAAI,EAAE,IAAI,gCAAgC,CAAC;AAAA,MACxI;AAAA,IACF;AAEA,YAAQ,IAAI;AAAA,EACd,CAAC;AAIH,QAAM,OAAOA,SACV,QAAQ,MAAM,EACd,YAAY,+DAA+D;AAE9E,OACG,QAAQ,KAAK,EACb,YAAY,qBAAqB,EACjC,OAAO,eAAe,4BAA4B,EAClD,OAAO,2BAA2B,yCAAyC,EAC3E,OAAO,eAAe,kCAAkC,EACxD,OAAO,mBAAmB,iDAAiD,EAC3E,OAAO,sBAAsB,gDAAgD,qBAAqB,EAClG,OAAO,oBAAoB,0BAA0B,EACrD,OAAO,eAAe,qBAAqB,EAC3C,OAAO,4BAA4B,+BAA+B,EAClE,OAAO,0BAA0B,oCAAoC,QAAQ,EAC7E,OAAO,wBAAwB,4BAA4B,EAC3D,OAAO,CAAC,QAAQ;AACf,QAAI;AACJ,QAAI,IAAI,KAAM,QAAO;AAAA,aACZ,IAAI,IAAK,QAAO;AAAA,aAChB,IAAI,aAAc,QAAO;AAAA,SAC7B;AACH,cAAQ,MAAM,EAAE,IAAI,GAAG,QAAQ,KAAK,4CAA4C,CAAC;AACjF,cAAQ,KAAK,CAAC;AAAA,IAChB;AAEA,QAAI,CAAC,IAAI,OAAO,CAAC,IAAI,cAAc,CAAC,IAAI,KAAK;AAC3C,cAAQ,MAAM,EAAE,IAAI,GAAG,QAAQ,KAAK,uEAAuE,CAAC;AAC5G,cAAQ,KAAK,CAAC;AAAA,IAChB;AAEA,UAAM,UAAU,IAAI,OAAO,MAAM,GAAG,EAAE,IAAI,CAAC,MAAc,EAAE,KAAK,CAAC;AAEjE,UAAM,QAAQ,aAAa;AAAA,MACzB;AAAA,MACA,OAAO;AAAA,QACL,KAAK,IAAI;AAAA,QACT,YAAY,IAAI;AAAA,QAChB,KAAK,IAAI;AAAA,QACT,OAAO,IAAI;AAAA,QACX,QAAQ;AAAA,MACV;AAAA,MACA,SAAS,IAAI;AAAA,MACb,KAAK,IAAI;AAAA,MACT,QAAQ,IAAI,eAAe,EAAE,QAAQ,IAAI,cAAc,QAAQ,IAAI,WAAW,IAAI;AAAA,MAClF,aAAa,IAAI;AAAA,MACjB,SAAS;AAAA,IACX,CAAC;AAED,YAAQ,IAAI,GAAG,QAAQ,KAAK,IAAI,EAAE,MAAM,YAAY,CAAC,SAAS,EAAE,KAAK,MAAM,EAAE,CAAC,KAAK,IAAI,GAAG;AAC1F,QAAI,IAAI,IAAK,SAAQ,IAAI,EAAE,IAAI,UAAU,IAAI,GAAG,EAAE,CAAC;AACnD,QAAI,IAAI,WAAY,SAAQ,IAAI,EAAE,IAAI,cAAc,IAAI,UAAU,EAAE,CAAC;AACrE,QAAI,IAAI,IAAK,SAAQ,IAAI,EAAE,IAAI,UAAU,IAAI,GAAG,EAAE,CAAC;AAAA,EACrD,CAAC;AAEH,OACG,QAAQ,MAAM,EACd,MAAM,IAAI,EACV,YAAY,2BAA2B,EACvC,OAAO,MAAM;AACZ,UAAM,QAAQ,UAAa;AAC3B,QAAI,MAAM,WAAW,GAAG;AACtB,cAAQ,IAAI,EAAE,IAAI,qBAAqB,CAAC;AACxC;AAAA,IACF;AAEA,YAAQ,IAAI,EAAE,KAAK;AAAA,IAAO,QAAQ,GAAG,sBAAsB,MAAM,MAAM;AAAA,CAAK,CAAC;AAE7E,eAAW,KAAK,OAAO;AACrB,YAAM,SAAS,EAAE,UAAU,EAAE,MAAM,IAAI,IAAI,EAAE,IAAI,KAAK;AACtD,YAAM,aAAuB,CAAC;AAC9B,UAAI,EAAE,MAAM,IAAK,YAAW,KAAK,OAAO,EAAE,MAAM,GAAG,EAAE;AACrD,UAAI,EAAE,MAAM,WAAY,YAAW,KAAK,WAAW,EAAE,MAAM,UAAU,EAAE;AACvE,UAAI,EAAE,MAAM,IAAK,YAAW,KAAK,OAAO,EAAE,MAAM,GAAG,EAAE;AACrD,UAAI,EAAE,MAAM,MAAO,YAAW,KAAK,SAAS,EAAE,MAAM,KAAK,EAAE;AAC3D,UAAI,EAAE,MAAM,QAAQ,OAAQ,YAAW,KAAK,WAAW,EAAE,MAAM,OAAO,KAAK,GAAG,CAAC,EAAE;AAEjF,YAAM,SAAS,EAAE,SAAS,UAAU,EAAE,UAClC,EAAE,SAAS,SAAS,EAAE,MACtB,EAAE,SAAS,GAAG,EAAE,OAAO,MAAM,KAAK,EAAE,OAAO,UAAU,QAAQ,MAC7D;AAEJ,cAAQ,IAAI,KAAK,EAAE,KAAK,EAAE,EAAE,CAAC,MAAM,MAAM,MAAM,EAAE,KAAK,EAAE,IAAI,CAAC,KAAK,EAAE,IAAI,WAAW,KAAK,GAAG,CAAC,CAAC,EAAE;AAC/F,cAAQ,IAAI,OAAO,EAAE,IAAI,QAAG,CAAC,IAAI,MAAM,GAAG,EAAE,cAAc,KAAK,EAAE,IAAI,UAAK,EAAE,WAAW,EAAE,CAAC,KAAK,EAAE,EAAE;AAAA,IACrG;AACA,YAAQ,IAAI;AAAA,EACd,CAAC;AAEH,OACG,QAAQ,aAAa,EACrB,MAAM,IAAI,EACV,YAAY,qBAAqB,EACjC,OAAO,CAAC,OAAe;AACtB,QAAI,WAAW,EAAE,GAAG;AAClB,cAAQ,IAAI,GAAG,QAAQ,KAAK,IAAI,EAAE,MAAM,SAAS,CAAC,SAAS,EAAE,KAAK,EAAE,CAAC,EAAE;AAAA,IACzE,OAAO;AACL,cAAQ,MAAM,EAAE,IAAI,GAAG,QAAQ,KAAK,UAAU,EAAE,aAAa,CAAC;AAC9D,cAAQ,KAAK,CAAC;AAAA,IAChB;AAAA,EACF,CAAC;AAEH,OACG,QAAQ,aAAa,EACrB,YAAY,eAAe,EAC3B,OAAO,CAAC,OAAe;AACtB,QAAI,WAAW,EAAE,GAAG;AAClB,cAAQ,IAAI,GAAG,QAAQ,KAAK,IAAI,EAAE,MAAM,SAAS,CAAC,SAAS,EAAE,KAAK,EAAE,CAAC,EAAE;AAAA,IACzE,OAAO;AACL,cAAQ,MAAM,EAAE,IAAI,GAAG,QAAQ,KAAK,UAAU,EAAE,aAAa,CAAC;AAC9D,cAAQ,KAAK,CAAC;AAAA,IAChB;AAAA,EACF,CAAC;AAEH,OACG,QAAQ,cAAc,EACtB,YAAY,gBAAgB,EAC5B,OAAO,CAAC,OAAe;AACtB,QAAI,YAAY,EAAE,GAAG;AACnB,cAAQ,IAAI,GAAG,QAAQ,KAAK,IAAI,EAAE,OAAO,UAAU,CAAC,SAAS,EAAE,KAAK,EAAE,CAAC,EAAE;AAAA,IAC3E,OAAO;AACL,cAAQ,MAAM,EAAE,IAAI,GAAG,QAAQ,KAAK,UAAU,EAAE,aAAa,CAAC;AAC9D,cAAQ,KAAK,CAAC;AAAA,IAChB;AAAA,EACF,CAAC;AAEH,OACG,QAAQ,WAAW,EACnB,YAAY,oCAAoC,EAChD,OAAO,OAAO,OAAe;AAC5B,UAAM,QAAQ,UAAa;AAC3B,UAAM,IAAI,MAAM,KAAK,CAACK,UAASA,MAAK,OAAO,EAAE;AAC7C,QAAI,CAAC,GAAG;AACN,cAAQ,MAAM,EAAE,IAAI,GAAG,QAAQ,KAAK,UAAU,EAAE,aAAa,CAAC;AAC9D,cAAQ,KAAK,CAAC;AAAA,IAChB;AAEA,YAAQ,IAAI,EAAE,IAAI,gBAAgB,EAAE,KAAK,EAAE,IAAI;AAAA,CAAQ,CAAC;AAExD,UAAM,UAAU;AAAA,MACd,QAAQ;AAAA,MACR,KAAK,EAAE,MAAM,OAAO;AAAA,MACpB,OAAO,EAAE,MAAM,SAAS;AAAA,MACxB,YAAW,oBAAI,KAAK,GAAE,YAAY;AAAA,MAClC,QAAQ;AAAA,IACV;AAEA,UAAM,UAAU,MAAM,UAAU,OAAO;AACvC,UAAM,SAAS,QAAQ,KAAK,CAAC,MAAM,EAAE,WAAW,EAAE;AAElD,QAAI,QAAQ;AACV,YAAM,OAAO,OAAO,UAAU,EAAE,MAAM,QAAQ,KAAK,IAAI,EAAE,IAAI,QAAQ,KAAK;AAC1E,cAAQ,IAAI,KAAK,IAAI,IAAI,OAAO,OAAO,EAAE;AAAA,IAC3C,OAAO;AACL,cAAQ,IAAI,EAAE,OAAO,KAAK,QAAQ,OAAO,sCAAsC,CAAC;AAAA,IAClF;AACA,YAAQ,IAAI;AAAA,EACd,CAAC;AAIH,EAAAL,SACG,QAAQ,cAAc,EACtB,YAAY,+DAA+D,EAC3E,OAAO,yBAAyB,gCAAgC,EAChE,OAAO,uBAAuB,uCAAuC,EACrE,OAAO,mBAAmB,8CAA8C,EACxE,OAAO,CAAC,QAAQ;AACf,UAAM,cAAc,IAAI,eAAe,QAAQ,IAAI;AACnD,UAAM,SAAS,kBAAkB,WAAW;AAE5C,QAAI,CAAC,QAAQ,WAAW,OAAO,KAAK,OAAO,OAAO,EAAE,WAAW,GAAG;AAChE,cAAQ;AAAA,QACN,EAAE,IAAI,GAAG,QAAQ,KAAK,4CAA4C;AAAA,MACpE;AACA,cAAQ,KAAK,CAAC;AAAA,IAChB;AAEA,UAAM,OAAO,UAAU,GAAG;AAC1B,UAAM,QAAkB,CAAC;AACzB,UAAM,WAAqB,CAAC;AAE5B,eAAW,CAAC,KAAK,QAAQ,KAAK,OAAO,QAAQ,OAAO,OAAO,GAAG;AAC5D,YAAM,QAAQ,UAAU,KAAK,EAAE,GAAG,MAAM,aAAa,QAAQ,MAAM,CAAC;AAEpE,UAAI,UAAU,MAAM;AAClB,YAAI,SAAS,aAAa,OAAO;AAC/B,mBAAS,KAAK,uBAAuB,GAAG,EAAE;AAAA,QAC5C;AACA,cAAM,KAAK,KAAK,GAAG,KAAK,SAAS,cAAc,KAAK,SAAS,WAAW,KAAK,EAAE,EAAE;AACjF;AAAA,MACF;AAEA,YAAM,SAAS,YAAY,KAAK,EAAE,aAAa,QAAQ,MAAM,CAAC;AAC9D,UAAI,QAAQ;AACV,cAAM,QAAQ,WAAW,OAAO,QAAQ;AACxC,YAAI,MAAM,WAAW;AACnB,mBAAS,KAAK,YAAY,GAAG,EAAE;AAAA,QACjC,WAAW,MAAM,SAAS;AACxB,mBAAS,KAAK,UAAU,MAAM,eAAe,OAAO,GAAG,EAAE;AAAA,QAC3D;AAAA,MACF;AAEA,YAAM,UAAU,MACb,QAAQ,OAAO,MAAM,EACrB,QAAQ,MAAM,KAAK,EACnB,QAAQ,OAAO,KAAK;AACvB,YAAM,KAAK,GAAG,GAAG,KAAK,OAAO,GAAG;AAAA,IAClC;AAEA,UAAM,SAAS,MAAM,KAAK,IAAI,IAAI;AAElC,QAAI,IAAI,QAAQ;AACd,oBAAc,IAAI,QAAQ,MAAM;AAChC,cAAQ;AAAA,QACN,GAAG,QAAQ,KAAK,IAAI,EAAE,MAAM,WAAW,CAAC,IAAI,EAAE,KAAK,IAAI,MAAM,CAAC,KAAK,OAAO,KAAK,OAAO,OAAO,EAAE,MAAM;AAAA,MACvG;AAAA,IACF,OAAO;AACL,cAAQ,OAAO,MAAM,MAAM;AAAA,IAC7B;AAEA,QAAI,SAAS,SAAS,KAAK,QAAQ,OAAO,OAAO;AAC/C,cAAQ,MAAM;AACd,iBAAW,KAAK,UAAU;AACxB,gBAAQ,MAAM,KAAK,EAAE,OAAO,QAAQ,OAAO,CAAC,IAAI,CAAC,EAAE;AAAA,MACrD;AACA,cAAQ,MAAM;AAAA,IAChB;AAAA,EACF,CAAC;AAIH,EAAAA,SACG,QAAQ,QAAQ,EAChB,YAAY,qDAAqD,EACjE,OAAO,iBAAiB,oBAAoB,MAAM,EAClD,OAAO,aAAa,6BAA6B,EACjD,OAAO,OAAO,QAAQ;AACrB,UAAM,EAAE,qBAAqB,IAAI,MAAM,OAAO,yBAAsB;AACpE,UAAM,EAAE,KAAK,IAAI,MAAM,OAAO,eAAoB;AAClD,UAAM,EAAE,SAAS,IAAI,MAAM,OAAO,IAAS;AAE3C,UAAM,OAAO,OAAO,IAAI,IAAI;AAC5B,UAAM,EAAE,MAAM,IAAI,qBAAqB,EAAE,KAAK,CAAC;AAC/C,UAAM,MAAM,oBAAoB,IAAI;AAEpC,YAAQ;AAAA,MACN;AAAA,IAAO,QAAQ,GAAG,IAAI,EAAE,KAAK,iCAAiC,CAAC;AAAA;AAAA,IACjE;AACA,YAAQ,IAAI,KAAK,EAAE,KAAK,GAAG,CAAC;AAAA,CAAI;AAChC,YAAQ,IAAI,EAAE,IAAI,0BAA0B,CAAC;AAE7C,QAAI,IAAI,SAAS,OAAO;AACtB,YAAM,UACJ,SAAS,MAAM,WAAW,SAAS,SAAS,MAAM,UAAU,UAAU;AACxE,WAAK,GAAG,OAAO,IAAI,GAAG,EAAE;AAAA,IAC1B;AAEA,UAAM,WAAW,MAAM;AACrB,cAAQ,IAAI;AAAA,EAAK,EAAE,IAAI,qBAAqB,CAAC,EAAE;AAC/C,YAAM;AACN,cAAQ,KAAK,CAAC;AAAA,IAChB;AACA,YAAQ,GAAG,UAAU,QAAQ;AAC7B,YAAQ,GAAG,WAAW,QAAQ;AAE9B,UAAM,IAAI,QAAQ,MAAM;AAAA,IAAC,CAAC;AAAA,EAC5B,CAAC;AAIH,EAAAA,SACG,QAAQ,OAAO,EACf,YAAY,iDAAiD,EAC7D;AAAA,IACC;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,EACF,EACC,OAAO,iBAAiB,6BAA6B,EACrD,OAAO,iBAAiB,kCAAkC,EAC1D,OAAO,0BAA0B,0CAA0C,EAC3E,OAAO,UAAU,wCAAwC,EACzD,OAAO,OAAO,QAAQ;AACrB,UAAM,eAAe,IAAI,cACrB,IAAI,YAAY,MAAM,GAAG,EAAE,IAAI,CAAC,MAAc,EAAE,KAAK,CAAC,IACtD,CAAC,QAAQ,IAAI,CAAC;AAElB,QAAI,IAAI,MAAM;AACZ,YAAM,SAAS,cAAc;AAAA,QAC3B,YAAY,IAAI;AAAA,QAChB;AAAA,QACA,SAAS,IAAI;AAAA,MACf,CAAC;AAGD,cAAQ,IAAI,KAAK,UAAU,QAAQ,MAAM,CAAC,CAAC;AAC3C;AAAA,IACF;AAEA,UAAM,WAAW;AAAA,MACf,iBAAiB,IAAI;AAAA,MACrB,YAAY,IAAI;AAAA,MAChB;AAAA,MACA,SAAS,IAAI;AAAA,IACf,CAAC;AAAA,EACH,CAAC;AAEH,SAAOA;AACT;;;AQ/0CA,IAAM,UAAU,cAAc;AAC9B,QAAQ,MAAM;","names":["randomBytes","randomBytes","program","value","provHint","result","icon","hook"]}
|
|
1
|
+
{"version":3,"sources":["../src/cli/commands.ts","../src/core/noise.ts","../src/utils/colors.ts","../src/core/agent.ts","../src/core/teleport.ts","../src/core/import.ts","../src/core/exec.ts","../src/core/scan.ts","../src/core/linter.ts","../src/core/validate.ts","../src/core/context.ts","../src/core/memory.ts","../src/hooks/precommit.ts","../src/utils/prompt.ts","../src/index.ts"],"sourcesContent":["import { Command } from \"commander\";\nimport {\n getSecret,\n setSecret,\n deleteSecret,\n listSecrets,\n exportSecrets,\n hasSecret,\n getEnvelope,\n entangleSecrets,\n disentangleSecrets,\n type KeyringOptions,\n type SetSecretOptions,\n} from \"../core/keyring.js\";\nimport { startAgent, runHealthScan } from \"../core/agent.js\";\nimport type { Scope } from \"../core/scope.js\";\nimport { collapseEnvironment, readProjectConfig } from \"../core/collapse.js\";\nimport { checkDecay, type DecayStatus } from \"../core/envelope.js\";\nimport { queryAudit, detectAnomalies, verifyAuditChain, exportAudit } from \"../core/observer.js\";\nimport { generateSecret, estimateEntropy, type NoiseFormat } from \"../core/noise.js\";\nimport { tunnelCreate, tunnelRead, tunnelDestroy, tunnelList } from \"../core/tunnel.js\";\nimport { teleportPack, teleportUnpack } from \"../core/teleport.js\";\nimport { importDotenv } from \"../core/import.js\";\nimport { execCommand } from \"../core/exec.js\";\nimport { scanCodebase } from \"../core/scan.js\";\nimport { lintFiles } from \"../core/linter.js\";\nimport { grantApproval, revokeApproval, listApprovals } from \"../core/approval.js\";\nimport { getProjectContext } from \"../core/context.js\";\nimport { remember, recall, listMemory, forget, clearMemory } from \"../core/memory.js\";\nimport { installPreCommitHook, uninstallPreCommitHook, runPreCommitScan } from \"../hooks/precommit.js\";\nimport { validateSecret, rotateWithProvider, ciValidateBatch, registry as providerRegistry } from \"../core/validate.js\";\nimport {\n registerHook,\n removeHook,\n listHooks as listAllHooks,\n enableHook,\n disableHook,\n fireHooks,\n type HookType,\n type HookAction,\n} from \"../core/hooks.js\";\nimport { writeFileSync, readFileSync, existsSync } from \"node:fs\";\nimport { promptSecret } from \"../utils/prompt.js\";\nimport { c, scopeColor, decayIndicator, envBadge, SYMBOLS } from \"../utils/colors.js\";\nimport { getPolicySummary, checkToolPolicy, checkKeyReadPolicy, checkExecPolicy } from \"../core/policy.js\";\n\n/**\n * Break the CodeQL taint chain from getPassword → console.log.\n * Copies a string value so static analysis no longer considers it\n * \"sensitive data returned by getPassword\".\n */\nfunction safeStr(s: string | undefined | null): string {\n return s == null ? \"\" : `${s}`;\n}\nfunction safeNum(n: number | undefined | null): number {\n return n == null ? 0 : Number(n);\n}\nfunction safeArr<T>(arr: T[] | undefined | null): T[] {\n return arr ? arr.map((x) => (typeof x === \"string\" ? safeStr(x) : x) as T) : [];\n}\n\nfunction buildOpts(cmd: {\n global?: boolean;\n project?: boolean;\n team?: string;\n org?: string;\n projectPath?: string;\n env?: string;\n}): KeyringOptions {\n let scope: Scope | undefined;\n if (cmd.global) scope = \"global\";\n else if (cmd.project) scope = \"project\";\n else if (cmd.team) scope = \"team\";\n else if (cmd.org) scope = \"org\";\n\n const projectPath =\n cmd.projectPath ?? (cmd.project ? process.cwd() : undefined);\n\n if (scope === \"project\" && !projectPath) {\n throw new Error(\"Project path is required for project scope\");\n }\n\n return {\n scope,\n projectPath: projectPath ?? process.cwd(),\n teamId: cmd.team,\n orgId: cmd.org,\n env: cmd.env,\n source: \"cli\",\n };\n}\n\nexport function createProgram(): Command {\n const program = new Command()\n .name(\"qring\")\n .description(\n `${c.bold(\"q-ring\")} ${c.dim(\"— quantum keyring for AI coding tools\")}`,\n )\n .version(\"0.4.0\");\n\n // ─── Core Commands ───\n\n program\n .command(\"set <key> [value]\")\n .description(\"Store a secret (with optional quantum metadata)\")\n .option(\"-g, --global\", \"Store in global scope\")\n .option(\"-p, --project\", \"Store in project scope (uses cwd)\")\n .option(\"--team <id>\", \"Store in team scope\")\n .option(\"--org <id>\", \"Store in org scope\")\n .option(\"--project-path <path>\", \"Explicit project path\")\n .option(\"-e, --env <env>\", \"Set value for a specific environment (superposition)\")\n .option(\"--ttl <seconds>\", \"Time-to-live in seconds (quantum decay)\", parseInt)\n .option(\"--expires <iso>\", \"Expiry timestamp (ISO 8601)\")\n .option(\"--description <desc>\", \"Human-readable description\")\n .option(\"--tags <tags>\", \"Comma-separated tags\")\n .option(\"--rotation-format <format>\", \"Format for auto-rotation (api-key, password, uuid, hex, base64, alphanumeric, token)\")\n .option(\"--rotation-prefix <prefix>\", \"Prefix for auto-rotation (e.g. sk-)\")\n .option(\"--requires-approval\", \"Require explicit user approval for MCP agents to read\")\n .option(\"--jit-provider <provider>\", \"Use a Just-In-Time provider to dynamically generate this secret\")\n .action(async (key: string, value: string | undefined, cmd) => {\n const opts = buildOpts(cmd);\n\n if (!value) {\n value = await promptSecret(`${SYMBOLS.key} Enter value for ${c.bold(key)}: `);\n if (!value) {\n console.error(c.red(`${SYMBOLS.cross} No value provided, aborting.`));\n process.exit(1);\n }\n }\n\n const setOpts: SetSecretOptions = {\n ...opts,\n ttlSeconds: cmd.ttl,\n expiresAt: cmd.expires,\n description: cmd.description,\n tags: cmd.tags?.split(\",\").map((t: string) => t.trim()),\n rotationFormat: cmd.rotationFormat,\n rotationPrefix: cmd.rotationPrefix,\n requiresApproval: cmd.requiresApproval,\n jitProvider: cmd.jitProvider,\n };\n\n // If --env is specified, set as a superposition state\n if (cmd.env) {\n const existing = getEnvelope(key, opts);\n const states = existing?.envelope?.states ?? {};\n states[cmd.env] = value;\n\n // Preserve existing simple value as \"default\" state if migrating\n if (existing?.envelope?.value && !states[\"default\"]) {\n states[\"default\"] = existing.envelope.value;\n }\n\n setOpts.states = states;\n setOpts.defaultEnv = existing?.envelope?.defaultEnv ?? cmd.env;\n setSecret(key, \"\", setOpts);\n\n console.log(\n `${SYMBOLS.check} ${c.green(\"saved\")} ${c.bold(key)} ${envBadge(cmd.env)} ${c.dim(`[${scopeColor(opts.scope ?? \"global\")}]`)}`,\n );\n } else {\n setSecret(key, value, setOpts);\n const extras: string[] = [];\n if (cmd.ttl) extras.push(`${SYMBOLS.clock} ttl=${cmd.ttl}s`);\n if (cmd.description) extras.push(c.dim(cmd.description));\n\n console.log(\n `${SYMBOLS.check} ${c.green(\"saved\")} ${c.bold(key)} ${c.dim(`[${scopeColor(opts.scope ?? \"global\")}]`)} ${extras.join(\" \")}`,\n );\n }\n });\n\n program\n .command(\"get <key>\")\n .description(\"Retrieve a secret (collapses superposition if needed)\")\n .option(\"-g, --global\", \"Look only in global scope\")\n .option(\"-p, --project\", \"Look only in project scope\")\n .option(\"--team <id>\", \"Look only in team scope\")\n .option(\"--org <id>\", \"Look only in org scope\")\n .option(\"--project-path <path>\", \"Explicit project path\")\n .option(\"-e, --env <env>\", \"Force a specific environment\")\n .action((key: string, cmd) => {\n const opts = buildOpts(cmd);\n const value = getSecret(key, opts);\n\n if (value === null) {\n console.error(c.red(`${SYMBOLS.cross} Secret \"${key}\" not found`));\n process.exit(1);\n }\n\n process.stdout.write(value);\n });\n\n program\n .command(\"delete <key>\")\n .alias(\"rm\")\n .description(\"Remove a secret from the keyring\")\n .option(\"-g, --global\", \"Delete from global scope only\")\n .option(\"-p, --project\", \"Delete from project scope only\")\n .option(\"--project-path <path>\", \"Explicit project path\")\n .action((key: string, cmd) => {\n const opts = buildOpts(cmd);\n const deleted = deleteSecret(key, opts);\n\n if (deleted) {\n console.log(`${SYMBOLS.check} ${c.green(\"deleted\")} ${c.bold(key)}`);\n } else {\n console.error(c.red(`${SYMBOLS.cross} Secret \"${key}\" not found`));\n process.exit(1);\n }\n });\n\n program\n .command(\"list\")\n .alias(\"ls\")\n .description(\"List all secrets with quantum status indicators\")\n .option(\"-g, --global\", \"List global scope only\")\n .option(\"-p, --project\", \"List project scope only\")\n .option(\"--team <id>\", \"List team scope only\")\n .option(\"--org <id>\", \"List org scope only\")\n .option(\"--project-path <path>\", \"Explicit project path\")\n .option(\"--show-decay\", \"Show decay/expiry status\")\n .option(\"-t, --tag <tag>\", \"Filter by tag\")\n .option(\"--expired\", \"Show only expired secrets\")\n .option(\"--stale\", \"Show only stale secrets (75%+ decay)\")\n .option(\"-f, --filter <pattern>\", \"Glob pattern on key name\")\n .action((cmd) => {\n const opts = buildOpts(cmd);\n let entries = listSecrets(opts);\n\n if (cmd.tag) {\n entries = entries.filter((e) =>\n e.envelope?.meta.tags?.includes(cmd.tag),\n );\n }\n if (cmd.expired) {\n entries = entries.filter((e) => e.decay?.isExpired);\n }\n if (cmd.stale) {\n entries = entries.filter(\n (e) => e.decay?.isStale && !e.decay?.isExpired,\n );\n }\n if (cmd.filter) {\n const regex = new RegExp(\n \"^\" + cmd.filter.replace(/\\*/g, \".*\") + \"$\",\n \"i\",\n );\n entries = entries.filter((e) => regex.test(e.key));\n }\n\n if (entries.length === 0) {\n console.log(c.dim(\"No secrets found\"));\n return;\n }\n\n console.log(\n c.bold(`\\n ${SYMBOLS.key} q-ring secrets (${entries.length})\\n`),\n );\n\n const maxKeyLen = Math.max(...entries.map((e) => e.key.length));\n\n for (const entry of entries) {\n const parts: string[] = [];\n\n const key = safeStr(entry.key);\n const scope = safeStr(entry.scope) as Scope;\n const envs = entry.envelope?.states ? Object.keys(entry.envelope.states).map(safeStr) : null;\n const entangledCount = safeNum(entry.envelope?.meta.entangled?.length);\n const accessCount = safeNum(entry.envelope?.meta.accessCount);\n const tags = safeArr(entry.envelope?.meta.tags);\n const decayPct = safeNum(entry.decay?.lifetimePercent);\n const expired = !!entry.decay?.isExpired;\n const timeLeft = safeStr(entry.decay?.timeRemaining);\n\n parts.push(c.dim(\"[\") + scopeColor(scope) + c.dim(\"]\"));\n parts.push(c.bold(key.padEnd(maxKeyLen)));\n\n if (envs) {\n parts.push(c.magenta(`[${envs.join(\"|\")}]`));\n }\n\n if (entry.decay && (decayPct > 0 || expired)) {\n parts.push(decayIndicator(decayPct, expired));\n if (timeLeft && !expired) {\n parts.push(c.dim(timeLeft));\n }\n }\n\n if (entangledCount > 0) {\n parts.push(c.cyan(`${SYMBOLS.link} ${entangledCount}`));\n }\n\n if (accessCount > 0) {\n parts.push(c.dim(`${SYMBOLS.eye} ${accessCount}`));\n }\n\n if (tags.length > 0) {\n parts.push(c.dim(tags.map((t) => `#${t}`).join(\" \")));\n }\n\n console.log(` ${parts.join(\" \")}`);\n }\n\n console.log();\n });\n\n program\n .command(\"inspect <key>\")\n .description(\"Show full quantum state of a secret\")\n .option(\"-g, --global\", \"Inspect global scope only\")\n .option(\"-p, --project\", \"Inspect project scope only\")\n .option(\"--project-path <path>\", \"Explicit project path\")\n .action((key: string, cmd) => {\n const opts = buildOpts(cmd);\n const result = getEnvelope(key, opts);\n\n if (!result) {\n console.error(c.red(`${SYMBOLS.cross} Secret \"${key}\" not found`));\n process.exit(1);\n }\n\n const { envelope, scope } = result;\n const decay = checkDecay(envelope);\n\n const safeScope = safeStr(scope) as Scope;\n const createdAt = safeStr(envelope.meta.createdAt);\n const updatedAt = safeStr(envelope.meta.updatedAt);\n const accessCount = safeNum(envelope.meta.accessCount);\n const lastAccess = safeStr(envelope.meta.lastAccessedAt);\n const desc = safeStr(envelope.meta.description);\n const tags = safeArr(envelope.meta.tags);\n const entangled = (envelope.meta.entangled ?? []).map((l) => ({\n service: safeStr(l.service),\n key: safeStr(l.key),\n }));\n const stateEnvs = envelope.states ? Object.keys(envelope.states).map(safeStr) : null;\n const defaultEnv = safeStr(envelope.defaultEnv);\n const decayTime = safeStr(decay.timeRemaining);\n const decayPct = safeNum(decay.lifetimePercent);\n const expired = !!decay.isExpired;\n\n console.log(`\\n ${c.bold(SYMBOLS.key + \" \" + key)}`);\n console.log(` ${c.dim(\"scope:\")} ${scopeColor(safeScope)}`);\n\n if (stateEnvs) {\n console.log(` ${c.dim(\"type:\")} ${c.magenta(\"superposition\")}`);\n console.log(` ${c.dim(\"states:\")}`);\n for (const env of stateEnvs) {\n const isDefault = env === defaultEnv;\n console.log(\n ` ${envBadge(env)} ${isDefault ? c.dim(\"(default)\") : \"\"}`,\n );\n }\n } else {\n console.log(` ${c.dim(\"type:\")} ${c.green(\"collapsed\")}`);\n }\n\n console.log(` ${c.dim(\"created:\")} ${createdAt}`);\n console.log(` ${c.dim(\"updated:\")} ${updatedAt}`);\n console.log(` ${c.dim(\"accessed:\")} ${accessCount} times`);\n\n if (lastAccess) {\n console.log(` ${c.dim(\"last read:\")} ${lastAccess}`);\n }\n\n if (desc) {\n console.log(` ${c.dim(\"desc:\")} ${desc}`);\n }\n\n if (tags.length > 0) {\n console.log(\n ` ${c.dim(\"tags:\")} ${tags.map((t) => c.cyan(`#${t}`)).join(\" \")}`,\n );\n }\n\n if (decayTime) {\n console.log(\n ` ${c.dim(\"decay:\")} ${decayIndicator(decayPct, expired)} ${decayTime}`,\n );\n }\n\n if (entangled.length > 0) {\n console.log(` ${c.dim(\"entangled:\")}`);\n for (const link of entangled) {\n console.log(` ${SYMBOLS.link} ${link.service}/${link.key}`);\n }\n }\n\n console.log();\n });\n\n program\n .command(\"export\")\n .description(\"Export secrets as .env or JSON (collapses superposition)\")\n .option(\"-f, --format <format>\", \"Output format: env or json\", \"env\")\n .option(\"-g, --global\", \"Export global scope only\")\n .option(\"-p, --project\", \"Export project scope only\")\n .option(\"--project-path <path>\", \"Explicit project path\")\n .option(\"-e, --env <env>\", \"Force environment for collapse\")\n .option(\"-k, --keys <keys>\", \"Comma-separated key names to export\")\n .option(\"-t, --tags <tags>\", \"Comma-separated tags to filter by\")\n .action((cmd) => {\n const opts = buildOpts(cmd);\n const output = exportSecrets({\n ...opts,\n format: cmd.format,\n keys: cmd.keys?.split(\",\").map((k: string) => k.trim()),\n tags: cmd.tags?.split(\",\").map((t: string) => t.trim()),\n });\n process.stdout.write(output + \"\\n\");\n });\n\n program\n .command(\"import <file>\")\n .description(\"Import secrets from a .env file\")\n .option(\"-g, --global\", \"Import to global scope\")\n .option(\"-p, --project\", \"Import to project scope\")\n .option(\"--project-path <path>\", \"Explicit project path\")\n .option(\"-e, --env <env>\", \"Environment context\")\n .option(\"--skip-existing\", \"Skip keys that already exist\")\n .option(\"--dry-run\", \"Preview what would be imported without saving\")\n .action((file: string, cmd) => {\n const opts = buildOpts(cmd);\n\n const result = importDotenv(file, {\n scope: opts.scope as \"global\" | \"project\" | undefined,\n projectPath: opts.projectPath,\n source: \"cli\",\n skipExisting: cmd.skipExisting,\n dryRun: cmd.dryRun,\n });\n\n if (cmd.dryRun) {\n console.log(\n `\\n ${SYMBOLS.package} ${c.bold(\"Dry run\")} — would import ${result.imported.length} of ${result.total} secrets:\\n`,\n );\n for (const key of result.imported) {\n console.log(` ${SYMBOLS.key} ${c.bold(key)}`);\n }\n if (result.skipped.length > 0) {\n console.log(`\\n ${c.dim(`Skipped (existing): ${result.skipped.join(\", \")}`)}`);\n }\n } else {\n console.log(\n `${SYMBOLS.check} ${c.green(\"imported\")} ${result.imported.length} secret(s) from ${c.bold(file)}`,\n );\n if (result.skipped.length > 0) {\n console.log(\n c.dim(` skipped ${result.skipped.length} existing: ${result.skipped.join(\", \")}`),\n );\n }\n }\n\n console.log();\n });\n\n program\n .command(\"check\")\n .description(\"Validate project secrets against .q-ring.json manifest\")\n .option(\"--project-path <path>\", \"Project path (defaults to cwd)\")\n .action((cmd) => {\n const projectPath = cmd.projectPath ?? process.cwd();\n const config = readProjectConfig(projectPath);\n\n if (!config?.secrets || Object.keys(config.secrets).length === 0) {\n console.error(\n c.red(`${SYMBOLS.cross} No secrets manifest found in .q-ring.json`),\n );\n console.log(\n c.dim(' Add a \"secrets\" field to your .q-ring.json to define required secrets.'),\n );\n process.exit(1);\n }\n\n console.log(\n c.bold(`\\n ${SYMBOLS.shield} Project secret manifest check\\n`),\n );\n\n let present = 0;\n let missing = 0;\n let expiredCount = 0;\n let staleCount = 0;\n\n for (const [key, manifest] of Object.entries(config.secrets)) {\n const result = getEnvelope(key, { projectPath, source: \"cli\" });\n\n if (!result) {\n if (manifest.required !== false) {\n missing++;\n console.log(\n ` ${c.red(SYMBOLS.cross)} ${c.bold(key)} ${c.red(\"MISSING\")} ${manifest.description ? c.dim(`— ${manifest.description}`) : \"\"}`,\n );\n } else {\n console.log(\n ` ${c.dim(SYMBOLS.cross)} ${c.bold(key)} ${c.dim(\"optional, not set\")} ${manifest.description ? c.dim(`— ${manifest.description}`) : \"\"}`,\n );\n }\n continue;\n }\n\n const decay = checkDecay(result.envelope);\n\n if (decay.isExpired) {\n expiredCount++;\n console.log(\n ` ${c.red(SYMBOLS.warning)} ${c.bold(key)} ${c.bgRed(c.white(\" EXPIRED \"))} ${manifest.description ? c.dim(`— ${manifest.description}`) : \"\"}`,\n );\n } else if (decay.isStale) {\n staleCount++;\n console.log(\n ` ${c.yellow(SYMBOLS.warning)} ${c.bold(key)} ${c.yellow(`stale (${decay.lifetimePercent}%)`)} ${manifest.description ? c.dim(`— ${manifest.description}`) : \"\"}`,\n );\n } else {\n present++;\n console.log(\n ` ${c.green(SYMBOLS.check)} ${c.bold(key)} ${c.green(\"OK\")} ${manifest.description ? c.dim(`— ${manifest.description}`) : \"\"}`,\n );\n }\n }\n\n const total = Object.keys(config.secrets).length;\n console.log(\n `\\n ${c.bold(`${total} declared`)} ${c.green(`${present} present`)} ${c.yellow(`${staleCount} stale`)} ${c.red(`${expiredCount} expired`)} ${c.red(`${missing} missing`)}`,\n );\n\n if (missing > 0) {\n console.log(\n `\\n ${c.red(\"Project is NOT ready — missing required secrets.\")}`,\n );\n } else if (expiredCount > 0) {\n console.log(\n `\\n ${c.yellow(\"Project has expired secrets that need rotation.\")}`,\n );\n } else {\n console.log(\n `\\n ${c.green(`${SYMBOLS.check} Project is ready — all required secrets present.`)}`,\n );\n }\n\n console.log();\n\n if (missing > 0) process.exit(1);\n });\n\n program\n .command(\"validate [key]\")\n .description(\"Test if a secret is actually valid with its target service\")\n .option(\"-g, --global\", \"Global scope only\")\n .option(\"-p, --project\", \"Project scope only\")\n .option(\"--project-path <path>\", \"Explicit project path\")\n .option(\"--provider <name>\", \"Force a specific provider (openai, stripe, github, aws, http)\")\n .option(\"--all\", \"Validate all secrets that have a detectable provider\")\n .option(\"--manifest\", \"Only validate manifest-declared secrets (with --all)\")\n .option(\"--list-providers\", \"List all available providers\")\n .action(async (key: string | undefined, cmd) => {\n if (cmd.listProviders) {\n console.log(c.bold(`\\n ${SYMBOLS.shield} Available validation providers\\n`));\n for (const p of providerRegistry.listProviders()) {\n const prefixes = p.prefixes?.length ? c.dim(` (${p.prefixes.join(\", \")})`) : \"\";\n console.log(` ${c.cyan(p.name.padEnd(10))} ${p.description}${prefixes}`);\n }\n console.log();\n return;\n }\n\n if (!key && !cmd.all) {\n console.error(c.red(`${SYMBOLS.cross} Provide a key name or use --all`));\n process.exit(1);\n }\n\n const opts = buildOpts(cmd);\n\n if (cmd.all) {\n let entries = listSecrets(opts);\n const projectPath = cmd.projectPath ?? process.cwd();\n\n if (cmd.manifest) {\n const config = readProjectConfig(projectPath);\n if (config?.secrets) {\n const manifestKeys = new Set(Object.keys(config.secrets));\n entries = entries.filter((e) => manifestKeys.has(e.key));\n }\n }\n\n console.log(c.bold(`\\n ${SYMBOLS.shield} Validating secrets\\n`));\n\n let validated = 0;\n let skipped = 0;\n\n for (const entry of entries) {\n const value = getSecret(entry.key, { ...opts, scope: entry.scope });\n if (!value) { skipped++; continue; }\n\n const provHint = entry.envelope?.meta.provider ?? cmd.provider;\n const result = await validateSecret(value, { provider: provHint });\n\n if (result.status === \"unknown\") { skipped++; continue; }\n\n validated++;\n const icon = result.status === \"valid\" ? c.green(SYMBOLS.check)\n : result.status === \"invalid\" ? c.red(SYMBOLS.cross)\n : c.yellow(SYMBOLS.warning);\n const statusText = result.status === \"valid\" ? c.green(\"valid\")\n : result.status === \"invalid\" ? c.red(\"invalid\")\n : c.yellow(\"error\");\n\n console.log(\n ` ${icon} ${c.bold(entry.key.padEnd(24))} ${statusText} ${c.dim(`(${result.provider}, ${result.latencyMs}ms)`)}${result.status !== \"valid\" ? ` ${c.dim(\"— \" + result.message)}` : \"\"}`,\n );\n }\n\n console.log(`\\n ${c.dim(`${validated} validated, ${skipped} skipped (no provider)`)}\\n`);\n return;\n }\n\n const value = getSecret(key!, opts);\n if (!value) {\n console.error(c.red(`${SYMBOLS.cross} Secret \"${key}\" not found`));\n process.exit(1);\n }\n\n const envelope = getEnvelope(key!, opts);\n const provHint = envelope?.envelope.meta.provider ?? cmd.provider;\n const result = await validateSecret(value, { provider: provHint });\n\n const icon = result.status === \"valid\" ? c.green(SYMBOLS.check)\n : result.status === \"invalid\" ? c.red(SYMBOLS.cross)\n : result.status === \"error\" ? c.yellow(SYMBOLS.warning)\n : c.dim(\"○\");\n\n console.log(`\\n ${icon} ${c.bold(key!)} ${result.status} ${c.dim(`(${result.provider}, ${result.latencyMs}ms)`)}`);\n if (result.message && result.status !== \"valid\") {\n console.log(` ${c.dim(result.message)}`);\n }\n console.log();\n });\n\n program\n .command(\"exec <command...>\")\n .description(\"Run a command with secrets injected into its environment (output auto-redacted)\")\n .option(\"-g, --global\", \"Inject global scope secrets only\")\n .option(\"-p, --project\", \"Inject project scope secrets only\")\n .option(\"--project-path <path>\", \"Explicit project path\")\n .option(\"-e, --env <env>\", \"Environment context\")\n .option(\"-k, --keys <keys>\", \"Comma-separated key names to inject\")\n .option(\"-t, --tags <tags>\", \"Comma-separated tags to filter by\")\n .option(\"--profile <name>\", \"Exec profile: unrestricted, restricted, ci\")\n .action(async (commandArgs: string[], cmd) => {\n const opts = buildOpts(cmd);\n const command = commandArgs[0];\n const args = commandArgs.slice(1);\n\n try {\n const { code } = await execCommand({\n ...opts,\n command,\n args,\n keys: cmd.keys?.split(\",\").map((k: string) => k.trim()),\n tags: cmd.tags?.split(\",\").map((t: string) => t.trim()),\n profile: cmd.profile,\n });\n process.exit(code);\n } catch (err) {\n console.error(c.red(`${SYMBOLS.cross} Exec failed: ${err instanceof Error ? err.message : String(err)}`));\n process.exit(1);\n }\n });\n\n program\n .command(\"scan [dir]\")\n .description(\"Scan a codebase for hardcoded secrets\")\n .option(\"--fix\", \"Auto-replace hardcoded secrets with process.env references and store in q-ring\")\n .option(\"-g, --global\", \"Store fixed secrets in global scope\")\n .option(\"-p, --project\", \"Store fixed secrets in project scope\")\n .option(\"--project-path <path>\", \"Explicit project path\")\n .action((dir: string | undefined, cmd) => {\n const targetDir = dir ?? process.cwd();\n const fixMode = cmd.fix === true;\n console.log(`\\n ${SYMBOLS.eye} Scanning ${c.bold(targetDir)} for secrets...${fixMode ? c.yellow(\" [--fix mode]\") : \"\"}\\n`);\n \n const results = scanCodebase(targetDir);\n \n if (results.length === 0) {\n console.log(` ${c.green(SYMBOLS.check)} No hardcoded secrets found. Awesome!\\n`);\n return;\n }\n \n if (fixMode) {\n const fileSet = new Set(results.map(r => r.file.startsWith(\"/\") ? r.file : `${targetDir}/${r.file}`));\n const opts = buildOpts(cmd);\n const lintResults = lintFiles([...fileSet], { fix: true, scope: opts.scope, projectPath: opts.projectPath });\n const fixedCount = lintResults.filter(r => r.fixed).length;\n console.log(` ${c.green(SYMBOLS.check)} Fixed ${fixedCount} secrets — replaced with process.env references and stored in q-ring.\\n`);\n return;\n }\n \n for (const res of results) {\n console.log(` ${c.red(SYMBOLS.cross)} ${c.bold(res.file)}:${res.line}`);\n console.log(` ${c.dim(\"Key:\")} ${c.cyan(res.keyName)}`);\n console.log(` ${c.dim(\"Entropy:\")} ${res.entropy > 4 ? c.red(res.entropy.toString()) : c.yellow(res.entropy.toString())}`);\n console.log(` ${c.dim(\"Context:\")} ${res.context}`);\n console.log();\n }\n \n console.log(` ${c.red(`Found ${results.length} potential secrets.`)} Use ${c.bold(\"qring scan --fix\")} to auto-migrate them.\\n`);\n });\n\n program\n .command(\"lint <files...>\")\n .description(\"Lint specific files for hardcoded secrets (with optional auto-fix)\")\n .option(\"--fix\", \"Replace hardcoded secrets with process.env references and store in q-ring\")\n .option(\"-g, --global\", \"Store fixed secrets in global scope\")\n .option(\"-p, --project\", \"Store fixed secrets in project scope\")\n .option(\"--project-path <path>\", \"Explicit project path\")\n .action((files: string[], cmd) => {\n const opts = buildOpts(cmd);\n const results = lintFiles(files, { fix: cmd.fix, scope: opts.scope, projectPath: opts.projectPath });\n\n if (results.length === 0) {\n console.log(`\\n ${c.green(SYMBOLS.check)} No hardcoded secrets found in ${files.length} file(s).\\n`);\n return;\n }\n\n for (const res of results) {\n const status = res.fixed ? c.green(\"fixed\") : c.red(\"found\");\n console.log(` ${res.fixed ? c.green(SYMBOLS.check) : c.red(SYMBOLS.cross)} ${c.bold(res.file)}:${res.line} [${status}]`);\n console.log(` ${c.dim(\"Key:\")} ${c.cyan(res.keyName)}`);\n console.log(` ${c.dim(\"Entropy:\")} ${res.entropy > 4 ? c.red(res.entropy.toString()) : c.yellow(res.entropy.toString())}`);\n console.log();\n }\n\n const fixedCount = results.filter(r => r.fixed).length;\n if (cmd.fix && fixedCount > 0) {\n console.log(` ${c.green(`Fixed ${fixedCount} secret(s)`)} — replaced with env references and stored in q-ring.\\n`);\n } else {\n console.log(` ${c.red(`Found ${results.length} potential secret(s).`)} Use ${c.bold(\"--fix\")} to auto-migrate.\\n`);\n }\n });\n\n // ─── Context & AI Tools ───\n\n program\n .command(\"context\")\n .alias(\"describe\")\n .description(\"Show safe, redacted project context for AI agents (no secret values exposed)\")\n .option(\"-g, --global\", \"Global scope only\")\n .option(\"-p, --project\", \"Project scope only\")\n .option(\"--project-path <path>\", \"Explicit project path\")\n .option(\"--json\", \"Output as JSON (for MCP / programmatic use)\")\n .action((cmd) => {\n const opts = buildOpts(cmd);\n const context = getProjectContext(opts);\n\n if (cmd.json) {\n console.log(JSON.stringify(context, null, 2));\n return;\n }\n\n console.log(`\\n${SYMBOLS.zap} ${c.bold(\"Project Context for AI Assistant\")}`);\n console.log(` Project: ${c.cyan(context.projectPath)}`);\n\n if (context.environment) {\n console.log(` Environment: ${envBadge(context.environment.env)} ${c.dim(`(${context.environment.source})`)}`);\n }\n\n console.log(`\\n${c.bold(\" Secrets:\")} ${context.totalSecrets} total ${c.dim(`(${context.expiredCount} expired, ${context.staleCount} stale, ${context.protectedCount} protected)`)}`);\n for (const s of context.secrets) {\n const tags = s.tags?.length ? c.dim(` [${s.tags.join(\",\")}]`) : \"\";\n const flags: string[] = [];\n if (s.requiresApproval) flags.push(c.yellow(\"locked\"));\n if (s.jitProvider) flags.push(c.magenta(\"jit\"));\n if (s.hasStates) flags.push(c.blue(\"superposition\"));\n if (s.isExpired) flags.push(c.red(\"expired\"));\n else if (s.isStale) flags.push(c.yellow(\"stale\"));\n const flagStr = flags.length ? ` ${flags.join(\" \")}` : \"\";\n console.log(` ${c.bold(s.key)} ${scopeColor(s.scope)}${tags}${flagStr}`);\n }\n\n if (context.manifest) {\n console.log(`\\n${c.bold(\" Manifest:\")} ${context.manifest.declared} declared`);\n if (context.manifest.missing.length > 0) {\n console.log(` ${c.red(\"Missing:\")} ${context.manifest.missing.join(\", \")}`);\n } else {\n console.log(` ${c.green(SYMBOLS.check)} All manifest secrets present`);\n }\n }\n\n console.log(`\\n${c.bold(\" Providers:\")} ${context.validationProviders.join(\", \") || \"none\"}`);\n console.log(`${c.bold(\" JIT Providers:\")} ${context.jitProviders.join(\", \") || \"none\"}`);\n console.log(`${c.bold(\" Hooks:\")} ${context.hooksCount} registered`);\n\n if (context.recentActions.length > 0) {\n console.log(`\\n${c.bold(\" Recent Activity:\")} (last ${context.recentActions.length})`);\n for (const a of context.recentActions.slice(0, 8)) {\n const ts = new Date(a.timestamp).toLocaleTimeString();\n console.log(` ${c.dim(ts)} ${a.action}${a.key ? ` ${c.bold(a.key)}` : \"\"} ${c.dim(`(${a.source})`)}`);\n }\n }\n\n console.log();\n });\n\n // ─── Agent Memory ───\n\n program\n .command(\"remember <key> <value>\")\n .description(\"Store a key-value pair in encrypted agent memory (persists across sessions)\")\n .action((key: string, value: string) => {\n remember(key, value);\n console.log(`${SYMBOLS.check} ${c.green(\"remembered\")} ${c.bold(key)}`);\n });\n\n program\n .command(\"recall [key]\")\n .description(\"Retrieve a value from agent memory, or list all keys\")\n .action((key?: string) => {\n if (!key) {\n const entries = listMemory();\n if (entries.length === 0) {\n console.log(c.dim(\"Agent memory is empty.\"));\n return;\n }\n console.log(`\\n${SYMBOLS.zap} ${c.bold(\"Agent Memory\")} (${entries.length} entries)\\n`);\n for (const e of entries) {\n console.log(` ${c.bold(e.key)} ${c.dim(new Date(e.updatedAt).toLocaleString())}`);\n }\n console.log();\n return;\n }\n\n const value = recall(key);\n if (value === null) {\n console.log(c.dim(`No memory found for \"${key}\"`));\n } else {\n console.log(safeStr(value));\n }\n });\n\n program\n .command(\"forget <key>\")\n .description(\"Delete a key from agent memory\")\n .option(\"--all\", \"Clear all agent memory\")\n .action((key: string, cmd) => {\n if (cmd.all) {\n clearMemory();\n console.log(`${SYMBOLS.check} ${c.yellow(\"cleared\")} all agent memory`);\n return;\n }\n const removed = forget(key);\n if (removed) {\n console.log(`${SYMBOLS.check} ${c.yellow(\"forgot\")} ${c.bold(key)}`);\n } else {\n console.log(c.dim(`No memory found for \"${key}\"`));\n }\n });\n\n // ─── Approval Commands ───\n\n program\n .command(\"approve <key>\")\n .description(\"Grant a scoped, reasoned, HMAC-verified approval token for MCP secret access\")\n .option(\"-g, --global\", \"Global scope\")\n .option(\"-p, --project\", \"Project scope\")\n .option(\"--project-path <path>\", \"Explicit project path\")\n .option(\"--for <seconds>\", \"Duration of approval in seconds\", parseInt, 3600)\n .option(\"--reason <text>\", \"Reason for granting approval\")\n .option(\"--revoke\", \"Revoke an existing approval\")\n .option(\"--list\", \"List all approvals\")\n .action((key: string, cmd) => {\n const opts = buildOpts(cmd);\n const scope = opts.scope ?? \"global\";\n\n if (cmd.list) {\n const approvals = listApprovals();\n if (approvals.length === 0) {\n console.log(c.dim(\" No active approvals\"));\n return;\n }\n for (const a of approvals) {\n const status = a.tampered\n ? c.red(\"TAMPERED\")\n : a.valid\n ? c.green(\"active\")\n : c.dim(\"expired\");\n const ttl = Math.max(0, Math.round((new Date(a.expiresAt).getTime() - Date.now()) / 1000));\n console.log(` ${status} ${c.bold(a.key)} [${a.scope}] reason=${c.dim(a.reason)} ttl=${ttl}s granted-by=${a.grantedBy}`);\n }\n return;\n }\n\n if (cmd.revoke) {\n const revoked = revokeApproval(key, scope);\n if (revoked) {\n console.log(`${SYMBOLS.check} ${c.yellow(\"revoked\")} approval for ${c.bold(key)}`);\n } else {\n console.log(c.dim(` No active approval found for ${key}`));\n }\n return;\n }\n\n const entry = grantApproval(key, scope, cmd.for, {\n reason: cmd.reason ?? \"manual approval\",\n });\n console.log(`${SYMBOLS.check} ${c.green(\"approved\")} ${c.bold(key)} for ${cmd.for}s`);\n console.log(c.dim(` id=${entry.id} reason=\"${entry.reason}\" expires=${entry.expiresAt}`));\n });\n\n program\n .command(\"approvals\")\n .description(\"List all approval tokens with verification status\")\n .action(() => {\n const approvals = listApprovals();\n if (approvals.length === 0) {\n console.log(c.dim(\" No approvals found\"));\n return;\n }\n\n console.log(c.bold(\"\\n🔐 Approval Tokens\\n\"));\n for (const a of approvals) {\n const status = a.tampered\n ? c.red(`${SYMBOLS.cross} TAMPERED`)\n : a.valid\n ? c.green(`${SYMBOLS.check} active`)\n : c.dim(`${SYMBOLS.warning} expired`);\n const ttl = Math.max(0, Math.round((new Date(a.expiresAt).getTime() - Date.now()) / 1000));\n console.log(` ${status} ${c.bold(a.key)} [${a.scope}]`);\n console.log(c.dim(` id=${a.id} reason=\"${a.reason}\" ttl=${ttl}s by=${a.grantedBy}`));\n if (a.workspace) console.log(c.dim(` workspace=${a.workspace}`));\n }\n console.log();\n });\n\n // ─── Pre-Commit Hook ───\n\n program\n .command(\"hook:install\")\n .description(\"Install a git pre-commit hook that scans for hardcoded secrets\")\n .option(\"--project-path <path>\", \"Repository path\")\n .action((cmd) => {\n const result = installPreCommitHook(cmd.projectPath);\n if (result.installed) {\n console.log(`${SYMBOLS.check} ${c.green(result.message)} at ${c.dim(result.path)}`);\n } else {\n console.log(`${SYMBOLS.cross} ${c.red(result.message)}`);\n }\n });\n\n program\n .command(\"hook:uninstall\")\n .description(\"Remove the q-ring pre-commit hook\")\n .option(\"--project-path <path>\", \"Repository path\")\n .action((cmd) => {\n const removed = uninstallPreCommitHook(cmd.projectPath);\n if (removed) {\n console.log(`${SYMBOLS.check} ${c.green(\"Pre-commit hook removed\")}`);\n } else {\n console.log(c.dim(\"No q-ring pre-commit hook found\"));\n }\n });\n\n program\n .command(\"hook:run\")\n .description(\"Run the pre-commit secret scan (called by the git hook)\")\n .action(() => {\n const code = runPreCommitScan();\n process.exit(code);\n });\n\n // ─── Wizard ───\n\n program\n .command(\"wizard <name>\")\n .description(\"Set up a new service integration with secrets, manifest, and hooks\")\n .option(\"--keys <keys>\", \"Comma-separated secret key names to create (e.g. API_KEY,API_SECRET)\")\n .option(\"--provider <provider>\", \"Validation provider (e.g. openai, stripe, github)\")\n .option(\"--tags <tags>\", \"Comma-separated tags for all secrets\")\n .option(\"--hook-exec <cmd>\", \"Shell command to run when any of these secrets change\")\n .option(\"-g, --global\", \"Global scope\")\n .option(\"-p, --project\", \"Project scope\")\n .option(\"--project-path <path>\", \"Explicit project path\")\n .action(async (name: string, cmd) => {\n const opts = buildOpts(cmd);\n const prefix = name.toUpperCase().replace(/[^A-Z0-9]/g, \"_\");\n const tags = cmd.tags?.split(\",\").map((t: string) => t.trim()) ?? [name.toLowerCase()];\n const provider = cmd.provider;\n\n let keyNames: string[];\n if (cmd.keys) {\n keyNames = cmd.keys.split(\",\").map((k: string) => k.trim());\n } else {\n keyNames = [`${prefix}_API_KEY`, `${prefix}_API_SECRET`];\n }\n\n console.log(`\\n${SYMBOLS.zap} ${c.bold(`Setting up service: ${name}`)}\\n`);\n\n // Create secrets\n for (const key of keyNames) {\n const value = generateSecret({ format: \"api-key\", prefix: `${prefix.toLowerCase()}_` });\n setSecret(key, value, {\n ...opts,\n tags,\n provider,\n description: `Auto-generated by wizard for ${name}`,\n });\n console.log(` ${c.green(SYMBOLS.check)} Created ${c.bold(key)}`);\n }\n\n // Update manifest if it exists\n const projectPath = opts.projectPath ?? process.cwd();\n const manifestPath = `${projectPath}/.q-ring.json`;\n let config: any = {};\n try {\n if (existsSync(manifestPath)) {\n config = JSON.parse(readFileSync(manifestPath, \"utf8\"));\n }\n } catch { /* ignore */ }\n\n if (!config.secrets) config.secrets = {};\n for (const key of keyNames) {\n config.secrets[key] = {\n required: true,\n description: `${name} integration`,\n ...(provider ? { provider } : {}),\n };\n }\n\n writeFileSync(manifestPath, JSON.stringify(config, null, 2) + \"\\n\", \"utf8\");\n console.log(` ${c.green(SYMBOLS.check)} Updated ${c.dim(\".q-ring.json\")} manifest`);\n\n // Register hook if requested\n if (cmd.hookExec) {\n for (const key of keyNames) {\n registerHook({\n type: \"shell\" as HookType,\n match: { key, action: [\"write\" as HookAction, \"delete\" as HookAction] },\n command: cmd.hookExec,\n description: `${name} wizard hook`,\n enabled: true,\n });\n }\n console.log(` ${c.green(SYMBOLS.check)} Registered hook: ${c.dim(cmd.hookExec)}`);\n }\n\n console.log(`\\n ${c.green(\"Done!\")} Service \"${name}\" is ready with ${keyNames.length} secrets.\\n`);\n });\n\n // ─── Analytics ───\n\n program\n .command(\"analyze\")\n .description(\"Analyze secret usage patterns and provide optimization suggestions\")\n .option(\"-g, --global\", \"Global scope only\")\n .option(\"-p, --project\", \"Project scope only\")\n .option(\"--project-path <path>\", \"Explicit project path\")\n .action((cmd) => {\n const opts = buildOpts(cmd);\n const entries = listSecrets({ ...opts, silent: true });\n const audit = queryAudit({ limit: 1000 });\n\n console.log(`\\n${SYMBOLS.zap} ${c.bold(\"Secret Usage Analysis\")}\\n`);\n\n // Access frequency\n const accessMap = new Map<string, number>();\n for (const e of audit) {\n if (e.action === \"read\" && e.key) {\n accessMap.set(e.key, (accessMap.get(e.key) || 0) + 1);\n }\n }\n\n // Most accessed\n const sorted = [...accessMap.entries()].sort((a, b) => b[1] - a[1]);\n if (sorted.length > 0) {\n console.log(` ${c.bold(\"Most accessed:\")}`);\n for (const [key, count] of sorted.slice(0, 5)) {\n console.log(` ${c.bold(key)} — ${c.cyan(count.toString())} reads`);\n }\n console.log();\n }\n\n // Never accessed\n const neverAccessed = entries.filter((e) => {\n const count = e.envelope?.meta.accessCount ?? 0;\n return count === 0;\n });\n if (neverAccessed.length > 0) {\n console.log(` ${c.bold(\"Never accessed:\")} ${c.yellow(neverAccessed.length.toString())} secrets`);\n for (const e of neverAccessed.slice(0, 8)) {\n const age = e.envelope?.meta.createdAt\n ? c.dim(`(created ${new Date(e.envelope.meta.createdAt).toLocaleDateString()})`)\n : \"\";\n console.log(` ${c.dim(SYMBOLS.cross)} ${e.key} ${age}`);\n }\n console.log();\n }\n\n // Expired / stale\n const expired = entries.filter((e) => e.decay?.isExpired);\n const stale = entries.filter((e) => e.decay?.isStale && !e.decay?.isExpired);\n if (expired.length > 0) {\n console.log(` ${c.red(\"Expired:\")} ${expired.length} secrets need rotation or cleanup`);\n for (const e of expired.slice(0, 5)) {\n console.log(` ${c.red(SYMBOLS.cross)} ${e.key}`);\n }\n console.log();\n }\n if (stale.length > 0) {\n console.log(` ${c.yellow(\"Stale (>75% lifetime):\")} ${stale.length} secrets approaching expiry`);\n for (const e of stale.slice(0, 5)) {\n console.log(` ${c.yellow(SYMBOLS.warning)} ${e.key} ${c.dim(`(${e.decay?.timeRemaining} remaining)`)}`);\n }\n console.log();\n }\n\n // Scope suggestions\n const globalOnly = entries.filter((e) => e.scope === \"global\");\n const withProjectTags = globalOnly.filter(\n (e) => e.envelope?.meta.tags?.some((t) => [\"backend\", \"frontend\", \"db\", \"api\"].includes(t)),\n );\n if (withProjectTags.length > 0) {\n console.log(` ${c.bold(\"Scope suggestions:\")}`);\n console.log(` ${withProjectTags.length} global secret(s) have project-specific tags — consider moving to project scope`);\n console.log();\n }\n\n // Rotation suggestions\n const noRotation = entries.filter(\n (e) => !e.envelope?.meta.rotationFormat && !e.decay?.isExpired,\n );\n if (noRotation.length > 0) {\n console.log(` ${c.bold(\"Rotation suggestions:\")}`);\n console.log(` ${noRotation.length} secret(s) have no rotation format set`);\n console.log(` Use ${c.bold(\"qring set <key> <value> --rotation-format api-key\")} to enable auto-rotation`);\n console.log();\n }\n\n // Summary\n console.log(` ${c.bold(\"Summary:\")}`);\n console.log(` Total secrets: ${entries.length}`);\n console.log(` Active: ${entries.length - expired.length}`);\n console.log(` Expired: ${expired.length}`);\n console.log(` Stale: ${stale.length}`);\n console.log(` Never accessed: ${neverAccessed.length}`);\n console.log(` With rotation config: ${entries.length - noRotation.length}`);\n console.log();\n });\n\n // ─── Quantum Commands ───\n\n program\n .command(\"env\")\n .description(\"Show detected environment (wavefunction collapse context)\")\n .option(\"--project-path <path>\", \"Project path for detection\")\n .action((cmd) => {\n const result = collapseEnvironment({\n projectPath: cmd.projectPath ?? process.cwd(),\n });\n\n if (result) {\n console.log(\n `${SYMBOLS.zap} ${c.bold(\"Collapsed environment:\")} ${envBadge(result.env)} ${c.dim(`(source: ${result.source})`)}`,\n );\n } else {\n console.log(\n c.dim(\"No environment detected. Set QRING_ENV, NODE_ENV, or create .q-ring.json\"),\n );\n }\n });\n\n program\n .command(\"generate\")\n .alias(\"gen\")\n .description(\"Generate a cryptographic secret (quantum noise)\")\n .option(\n \"-f, --format <format>\",\n \"Format: hex, base64, alphanumeric, uuid, api-key, token, password\",\n \"api-key\",\n )\n .option(\"-l, --length <n>\", \"Length (bytes or chars depending on format)\", parseInt)\n .option(\"--prefix <prefix>\", \"Prefix for api-key/token format\")\n .option(\"-s, --save <key>\", \"Save the generated secret to keyring with this key\")\n .option(\"-g, --global\", \"Save to global scope\")\n .option(\"-p, --project\", \"Save to project scope\")\n .option(\"--project-path <path>\", \"Explicit project path\")\n .action((cmd) => {\n const secret = generateSecret({\n format: cmd.format as NoiseFormat,\n length: cmd.length,\n prefix: cmd.prefix,\n });\n\n const entropy = estimateEntropy(secret);\n\n if (cmd.save) {\n const opts = buildOpts(cmd);\n setSecret(cmd.save, secret, opts);\n console.log(\n `${SYMBOLS.sparkle} ${c.green(\"generated & saved\")} ${c.bold(cmd.save)} ${c.dim(`(${cmd.format}, ${entropy} bits entropy)`)}`,\n );\n } else {\n process.stdout.write(secret);\n if (process.stdout.isTTY) {\n console.log(\n `\\n${c.dim(`format: ${cmd.format} | entropy: ~${entropy} bits`)}`,\n );\n }\n }\n });\n\n program\n .command(\"entangle <sourceKey> <targetKey>\")\n .description(\"Link two secrets — rotating one updates the other\")\n .option(\"-g, --global\", \"Both in global scope\")\n .option(\"--source-project <path>\", \"Source project path\")\n .option(\"--target-project <path>\", \"Target project path\")\n .action(\n (\n sourceKey: string,\n targetKey: string,\n cmd,\n ) => {\n const sourceOpts: KeyringOptions = {\n scope: cmd.sourceProject ? \"project\" : \"global\",\n projectPath: cmd.sourceProject ?? process.cwd(),\n source: \"cli\",\n };\n const targetOpts: KeyringOptions = {\n scope: cmd.targetProject ? \"project\" : \"global\",\n projectPath: cmd.targetProject ?? process.cwd(),\n source: \"cli\",\n };\n\n entangleSecrets(sourceKey, sourceOpts, targetKey, targetOpts);\n console.log(\n `${SYMBOLS.link} ${c.cyan(\"entangled\")} ${c.bold(sourceKey)} ${SYMBOLS.arrow} ${c.bold(targetKey)}`,\n );\n },\n );\n\n program\n .command(\"disentangle <sourceKey> <targetKey>\")\n .description(\"Unlink two entangled secrets\")\n .option(\"-g, --global\", \"Both in global scope\")\n .option(\"--source-project <path>\", \"Source project path\")\n .option(\"--target-project <path>\", \"Target project path\")\n .action(\n (\n sourceKey: string,\n targetKey: string,\n cmd,\n ) => {\n const sourceOpts: KeyringOptions = {\n scope: cmd.sourceProject ? \"project\" : \"global\",\n projectPath: cmd.sourceProject ?? process.cwd(),\n source: \"cli\",\n };\n const targetOpts: KeyringOptions = {\n scope: cmd.targetProject ? \"project\" : \"global\",\n projectPath: cmd.targetProject ?? process.cwd(),\n source: \"cli\",\n };\n\n disentangleSecrets(sourceKey, sourceOpts, targetKey, targetOpts);\n console.log(\n `${SYMBOLS.link} ${c.yellow(\"disentangled\")} ${c.bold(sourceKey)} ${SYMBOLS.arrow} ${c.bold(targetKey)}`,\n );\n },\n );\n\n // ─── Tunneling Commands ───\n\n const tunnel = program\n .command(\"tunnel\")\n .description(\"Ephemeral in-memory secrets (quantum tunneling)\");\n\n tunnel\n .command(\"create <value>\")\n .description(\"Create a tunneled secret (returns tunnel ID)\")\n .option(\"--ttl <seconds>\", \"Auto-expire after N seconds\", parseInt)\n .option(\"--max-reads <n>\", \"Self-destruct after N reads\", parseInt)\n .action((value: string, cmd) => {\n const id = tunnelCreate(value, {\n ttlSeconds: cmd.ttl,\n maxReads: cmd.maxReads,\n });\n\n console.log(`${SYMBOLS.ghost} ${c.magenta(\"tunneled\")} ${c.bold(id)}`);\n\n const extras: string[] = [];\n if (cmd.ttl) extras.push(`ttl=${cmd.ttl}s`);\n if (cmd.maxReads) extras.push(`max-reads=${cmd.maxReads}`);\n if (extras.length) console.log(c.dim(` ${extras.join(\" | \")}`));\n });\n\n tunnel\n .command(\"read <id>\")\n .description(\"Read a tunneled secret (may self-destruct)\")\n .action((id: string) => {\n const value = tunnelRead(id);\n if (value === null) {\n console.error(\n c.red(`${SYMBOLS.cross} Tunnel \"${id}\" not found or expired`),\n );\n process.exit(1);\n }\n process.stdout.write(value);\n });\n\n tunnel\n .command(\"destroy <id>\")\n .description(\"Destroy a tunneled secret immediately\")\n .action((id: string) => {\n const destroyed = tunnelDestroy(id);\n if (destroyed) {\n console.log(`${SYMBOLS.check} ${c.green(\"destroyed\")} ${id}`);\n } else {\n console.error(\n c.red(`${SYMBOLS.cross} Tunnel \"${id}\" not found`),\n );\n process.exit(1);\n }\n });\n\n tunnel\n .command(\"list\")\n .alias(\"ls\")\n .description(\"List active tunnels\")\n .action(() => {\n const tunnels = tunnelList();\n if (tunnels.length === 0) {\n console.log(c.dim(\"No active tunnels\"));\n return;\n }\n\n console.log(c.bold(`\\n ${SYMBOLS.ghost} Active tunnels (${tunnels.length})\\n`));\n for (const t of tunnels) {\n const parts = [c.bold(t.id)];\n parts.push(c.dim(`reads: ${t.accessCount}`));\n if (t.maxReads) parts.push(c.dim(`max: ${t.maxReads}`));\n if (t.expiresAt) {\n const remaining = Math.max(0, Math.floor((t.expiresAt - Date.now()) / 1000));\n parts.push(c.dim(`expires: ${remaining}s`));\n }\n console.log(` ${SYMBOLS.ghost} ${parts.join(\" \")}`);\n }\n console.log();\n });\n\n // ─── Teleportation Commands ───\n\n const tp = program\n .command(\"teleport\")\n .alias(\"tp\")\n .description(\"Encrypted secret sharing (quantum teleportation)\");\n\n tp.command(\"pack\")\n .description(\"Pack secrets into an encrypted bundle\")\n .option(\"-k, --keys <keys>\", \"Comma-separated key names to pack\")\n .option(\"-g, --global\", \"Pack global scope\")\n .option(\"-p, --project\", \"Pack project scope\")\n .option(\"--project-path <path>\", \"Explicit project path\")\n .action(async (cmd) => {\n const opts = buildOpts(cmd);\n const passphrase = await promptSecret(\n `${SYMBOLS.lock} Enter passphrase for encryption: `,\n );\n if (!passphrase) {\n console.error(c.red(\"Passphrase required\"));\n process.exit(1);\n }\n\n const entries = listSecrets(opts);\n let keys: string[] | undefined;\n if (cmd.keys) {\n keys = cmd.keys.split(\",\").map((k: string) => k.trim());\n }\n\n const secrets: { key: string; value: string; scope?: string }[] = [];\n for (const entry of entries) {\n if (keys && !keys.includes(entry.key)) continue;\n const value = getSecret(entry.key, { ...opts, scope: entry.scope });\n if (value !== null) {\n secrets.push({ key: entry.key, value, scope: entry.scope });\n }\n }\n\n if (secrets.length === 0) {\n console.error(c.red(\"No secrets to pack\"));\n process.exit(1);\n }\n\n const bundle = teleportPack(secrets, passphrase);\n process.stdout.write(bundle);\n if (process.stdout.isTTY) {\n console.log(\n `\\n${SYMBOLS.package} ${c.green(\"packed\")} ${secrets.length} secret(s)`,\n );\n }\n });\n\n tp.command(\"unpack [bundle]\")\n .description(\"Unpack and import secrets from an encrypted bundle\")\n .option(\"-g, --global\", \"Import to global scope\")\n .option(\"-p, --project\", \"Import to project scope\")\n .option(\"--project-path <path>\", \"Explicit project path\")\n .option(\"--dry-run\", \"Show what would be imported without saving\")\n .action(async (bundle: string | undefined, cmd) => {\n if (!bundle) {\n // Read from stdin\n const chunks: Buffer[] = [];\n for await (const chunk of process.stdin) {\n chunks.push(chunk);\n }\n bundle = Buffer.concat(chunks).toString(\"utf8\").trim();\n }\n\n const passphrase = await promptSecret(\n `${SYMBOLS.lock} Enter passphrase for decryption: `,\n );\n\n try {\n const payload = teleportUnpack(bundle, passphrase);\n\n if (cmd.dryRun) {\n console.log(\n `\\n${SYMBOLS.package} ${c.bold(\"Would import\")} (${payload.secrets.length} secrets):\\n`,\n );\n for (const s of payload.secrets) {\n console.log(` ${SYMBOLS.key} ${c.bold(s.key)} ${c.dim(`[${s.scope ?? \"global\"}]`)}`);\n }\n return;\n }\n\n const opts = buildOpts(cmd);\n for (const s of payload.secrets) {\n setSecret(s.key, s.value, opts);\n }\n\n console.log(\n `${SYMBOLS.check} ${c.green(\"imported\")} ${payload.secrets.length} secret(s) from teleport bundle`,\n );\n } catch {\n console.error(\n c.red(`${SYMBOLS.cross} Failed to unpack: wrong passphrase or corrupted bundle`),\n );\n process.exit(1);\n }\n });\n\n // ─── Observer / Audit Commands ───\n\n program\n .command(\"audit\")\n .description(\"View the audit log (observer effect)\")\n .option(\"-k, --key <key>\", \"Filter by key\")\n .option(\n \"-a, --action <action>\",\n \"Filter by action (read, write, delete, etc.)\",\n )\n .option(\"-n, --limit <n>\", \"Number of events to show\", parseInt, 20)\n .option(\"--anomalies\", \"Detect access anomalies\")\n .action((cmd) => {\n if (cmd.anomalies) {\n const anomalies = detectAnomalies(cmd.key);\n if (anomalies.length === 0) {\n console.log(\n `${SYMBOLS.shield} ${c.green(\"No anomalies detected\")}`,\n );\n return;\n }\n\n console.log(\n `\\n${SYMBOLS.warning} ${c.bold(c.yellow(`${anomalies.length} anomaly/anomalies detected`))}\\n`,\n );\n for (const a of anomalies) {\n console.log(` ${c.yellow(a.type)} ${a.description}`);\n }\n console.log();\n return;\n }\n\n const events = queryAudit({\n key: cmd.key,\n action: cmd.action,\n limit: cmd.limit,\n });\n\n if (events.length === 0) {\n console.log(c.dim(\"No audit events found\"));\n return;\n }\n\n console.log(\n c.bold(`\\n ${SYMBOLS.eye} Audit log (${events.length} events)\\n`),\n );\n\n for (const event of events) {\n const ts = new Date(event.timestamp).toLocaleString();\n const actionColor =\n event.action === \"read\"\n ? c.blue\n : event.action === \"write\"\n ? c.green\n : event.action === \"delete\"\n ? c.red\n : c.yellow;\n\n const parts = [\n c.dim(ts),\n actionColor(event.action.padEnd(8)),\n event.key ? c.bold(event.key) : \"\",\n event.scope ? c.dim(`[${event.scope}]`) : \"\",\n event.detail ? c.dim(event.detail) : \"\",\n ];\n\n console.log(` ${parts.filter(Boolean).join(\" \")}`);\n }\n console.log();\n });\n\n program\n .command(\"audit:verify\")\n .description(\"Verify the integrity of the audit hash chain\")\n .action(() => {\n const result = verifyAuditChain();\n if (result.totalEvents === 0) {\n console.log(c.dim(\" No audit events to verify\"));\n return;\n }\n\n if (result.intact) {\n console.log(`${SYMBOLS.shield} ${c.green(\"Audit chain intact\")} — ${result.totalEvents} events verified`);\n } else {\n console.log(`${SYMBOLS.cross} ${c.red(\"Audit chain BROKEN\")} at event #${result.brokenAt}`);\n console.log(c.dim(` ${result.validEvents}/${result.totalEvents} events valid before break`));\n if (result.brokenEvent) {\n console.log(c.dim(` Broken event: ${result.brokenEvent.timestamp} ${result.brokenEvent.action} ${result.brokenEvent.key ?? \"\"}`));\n }\n process.exitCode = 1;\n }\n });\n\n program\n .command(\"audit:export\")\n .description(\"Export audit events in a portable format\")\n .option(\"--since <date>\", \"Start date (ISO 8601)\")\n .option(\"--until <date>\", \"End date (ISO 8601)\")\n .option(\"--format <fmt>\", \"Output format: jsonl, json, csv\", \"jsonl\")\n .option(\"-o, --output <file>\", \"Write to file instead of stdout\")\n .action((cmd) => {\n const output = exportAudit({\n since: cmd.since,\n until: cmd.until,\n format: cmd.format,\n });\n\n if (cmd.output) {\n writeFileSync(cmd.output, output);\n console.log(`${SYMBOLS.check} Exported to ${cmd.output}`);\n } else {\n console.log(output);\n }\n });\n\n // ─── Health Check ───\n\n program\n .command(\"health\")\n .description(\"Check the health of all secrets\")\n .option(\"-g, --global\", \"Check global scope only\")\n .option(\"-p, --project\", \"Check project scope only\")\n .option(\"--project-path <path>\", \"Explicit project path\")\n .action((cmd) => {\n const opts = buildOpts(cmd);\n const entries = listSecrets(opts);\n\n if (entries.length === 0) {\n console.log(c.dim(\"No secrets to check\"));\n return;\n }\n\n console.log(\n c.bold(`\\n ${SYMBOLS.shield} Secret health report\\n`),\n );\n\n let healthy = 0;\n let stale = 0;\n let expired = 0;\n let noDecay = 0;\n\n for (const entry of entries) {\n if (!entry.decay || !entry.decay.timeRemaining) {\n noDecay++;\n continue;\n }\n\n if (entry.decay.isExpired) {\n expired++;\n console.log(\n ` ${c.red(SYMBOLS.cross)} ${c.bold(entry.key)} ${c.bgRed(c.white(\" EXPIRED \"))}`,\n );\n } else if (entry.decay.isStale) {\n stale++;\n console.log(\n ` ${c.yellow(SYMBOLS.warning)} ${c.bold(entry.key)} ${c.yellow(`stale (${entry.decay.lifetimePercent}%, ${entry.decay.timeRemaining} left)`)}`,\n );\n } else {\n healthy++;\n }\n }\n\n console.log(\n `\\n ${c.green(`${SYMBOLS.check} ${healthy} healthy`)} ${c.yellow(`${SYMBOLS.warning} ${stale} stale`)} ${c.red(`${SYMBOLS.cross} ${expired} expired`)} ${c.dim(`${noDecay} no decay`)}`,\n );\n\n // Check for anomalies\n const anomalies = detectAnomalies();\n if (anomalies.length > 0) {\n console.log(\n `\\n ${c.yellow(`${SYMBOLS.warning} ${anomalies.length} access anomaly/anomalies detected`)} ${c.dim(\"(run: qring audit --anomalies)\")}`,\n );\n }\n\n console.log();\n });\n\n // ─── Hooks ───\n\n const hook = program\n .command(\"hook\")\n .description(\"Manage secret change hooks (callbacks on write/delete/rotate)\");\n\n hook\n .command(\"add\")\n .description(\"Register a new hook\")\n .option(\"--key <key>\", \"Trigger on exact key match\")\n .option(\"--key-pattern <pattern>\", \"Trigger on key glob pattern (e.g. DB_*)\")\n .option(\"--tag <tag>\", \"Trigger on secrets with this tag\")\n .option(\"--scope <scope>\", \"Trigger only for this scope (global or project)\")\n .option(\"--action <actions>\", \"Comma-separated actions: write,delete,rotate\", \"write,delete,rotate\")\n .option(\"--exec <command>\", \"Shell command to execute\")\n .option(\"--url <url>\", \"HTTP URL to POST to\")\n .option(\"--signal-target <target>\", \"Process name or PID to signal\")\n .option(\"--signal-name <signal>\", \"Signal to send (default: SIGHUP)\", \"SIGHUP\")\n .option(\"--description <desc>\", \"Human-readable description\")\n .action((cmd) => {\n let type: HookType;\n if (cmd.exec) type = \"shell\";\n else if (cmd.url) type = \"http\";\n else if (cmd.signalTarget) type = \"signal\";\n else {\n console.error(c.red(`${SYMBOLS.cross} Specify --exec, --url, or --signal-target`));\n process.exit(1);\n }\n\n if (!cmd.key && !cmd.keyPattern && !cmd.tag) {\n console.error(c.red(`${SYMBOLS.cross} Specify at least one match criterion: --key, --key-pattern, or --tag`));\n process.exit(1);\n }\n\n const actions = cmd.action.split(\",\").map((a: string) => a.trim()) as HookAction[];\n\n const entry = registerHook({\n type,\n match: {\n key: cmd.key,\n keyPattern: cmd.keyPattern,\n tag: cmd.tag,\n scope: cmd.scope as \"global\" | \"project\" | undefined,\n action: actions,\n },\n command: cmd.exec,\n url: cmd.url,\n signal: cmd.signalTarget ? { target: cmd.signalTarget, signal: cmd.signalName } : undefined,\n description: cmd.description,\n enabled: true,\n });\n\n console.log(`${SYMBOLS.check} ${c.green(\"registered\")} hook ${c.bold(entry.id)} (${type})`);\n if (cmd.key) console.log(c.dim(` key: ${cmd.key}`));\n if (cmd.keyPattern) console.log(c.dim(` pattern: ${cmd.keyPattern}`));\n if (cmd.tag) console.log(c.dim(` tag: ${cmd.tag}`));\n });\n\n hook\n .command(\"list\")\n .alias(\"ls\")\n .description(\"List all registered hooks\")\n .action(() => {\n const hooks = listAllHooks();\n if (hooks.length === 0) {\n console.log(c.dim(\"No hooks registered\"));\n return;\n }\n\n console.log(c.bold(`\\n ${SYMBOLS.zap} Registered hooks (${hooks.length})\\n`));\n\n for (const h of hooks) {\n const status = h.enabled ? c.green(\"on\") : c.red(\"off\");\n const matchParts: string[] = [];\n if (h.match.key) matchParts.push(`key=${h.match.key}`);\n if (h.match.keyPattern) matchParts.push(`pattern=${h.match.keyPattern}`);\n if (h.match.tag) matchParts.push(`tag=${h.match.tag}`);\n if (h.match.scope) matchParts.push(`scope=${h.match.scope}`);\n if (h.match.action?.length) matchParts.push(`actions=${h.match.action.join(\",\")}`);\n\n const target = h.type === \"shell\" ? h.command\n : h.type === \"http\" ? h.url\n : h.signal ? `${h.signal.target} (${h.signal.signal ?? \"SIGHUP\"})`\n : \"?\";\n\n console.log(` ${c.bold(h.id)} [${status}] ${c.cyan(h.type)} ${c.dim(matchParts.join(\" \"))}`);\n console.log(` ${c.dim(\"→\")} ${target}${h.description ? ` ${c.dim(`— ${h.description}`)}` : \"\"}`);\n }\n console.log();\n });\n\n hook\n .command(\"remove <id>\")\n .alias(\"rm\")\n .description(\"Remove a hook by ID\")\n .action((id: string) => {\n if (removeHook(id)) {\n console.log(`${SYMBOLS.check} ${c.green(\"removed\")} hook ${c.bold(id)}`);\n } else {\n console.error(c.red(`${SYMBOLS.cross} Hook \"${id}\" not found`));\n process.exit(1);\n }\n });\n\n hook\n .command(\"enable <id>\")\n .description(\"Enable a hook\")\n .action((id: string) => {\n if (enableHook(id)) {\n console.log(`${SYMBOLS.check} ${c.green(\"enabled\")} hook ${c.bold(id)}`);\n } else {\n console.error(c.red(`${SYMBOLS.cross} Hook \"${id}\" not found`));\n process.exit(1);\n }\n });\n\n hook\n .command(\"disable <id>\")\n .description(\"Disable a hook\")\n .action((id: string) => {\n if (disableHook(id)) {\n console.log(`${SYMBOLS.check} ${c.yellow(\"disabled\")} hook ${c.bold(id)}`);\n } else {\n console.error(c.red(`${SYMBOLS.cross} Hook \"${id}\" not found`));\n process.exit(1);\n }\n });\n\n hook\n .command(\"test <id>\")\n .description(\"Dry-run a hook with a mock payload\")\n .action(async (id: string) => {\n const hooks = listAllHooks();\n const h = hooks.find((hook) => hook.id === id);\n if (!h) {\n console.error(c.red(`${SYMBOLS.cross} Hook \"${id}\" not found`));\n process.exit(1);\n }\n\n console.log(c.dim(`Testing hook ${id} (${h.type})...\\n`));\n\n const payload = {\n action: \"write\" as const,\n key: h.match.key ?? \"TEST_KEY\",\n scope: h.match.scope ?? \"global\",\n timestamp: new Date().toISOString(),\n source: \"cli\" as const,\n };\n\n const results = await fireHooks(payload);\n const result = results.find((r) => r.hookId === id);\n\n if (result) {\n const icon = result.success ? c.green(SYMBOLS.check) : c.red(SYMBOLS.cross);\n console.log(` ${icon} ${result.message}`);\n } else {\n console.log(c.yellow(` ${SYMBOLS.warning} Hook did not match the test payload`));\n }\n console.log();\n });\n\n // ─── Env Generate ───\n\n program\n .command(\"env:generate\")\n .description(\"Generate a .env file from the project manifest (.q-ring.json)\")\n .option(\"--project-path <path>\", \"Project path (defaults to cwd)\")\n .option(\"-o, --output <file>\", \"Output file path (defaults to stdout)\")\n .option(\"-e, --env <env>\", \"Force environment for superposition collapse\")\n .action((cmd) => {\n const projectPath = cmd.projectPath ?? process.cwd();\n const config = readProjectConfig(projectPath);\n\n if (!config?.secrets || Object.keys(config.secrets).length === 0) {\n console.error(\n c.red(`${SYMBOLS.cross} No secrets manifest found in .q-ring.json`),\n );\n process.exit(1);\n }\n\n const opts = buildOpts(cmd);\n const lines: string[] = [];\n const warnings: string[] = [];\n\n for (const [key, manifest] of Object.entries(config.secrets)) {\n const value = getSecret(key, { ...opts, projectPath, source: \"cli\" });\n\n if (value === null) {\n if (manifest.required !== false) {\n warnings.push(`MISSING (required): ${key}`);\n }\n lines.push(`# ${key}= ${manifest.description ? `# ${manifest.description}` : \"\"}`);\n continue;\n }\n\n const result = getEnvelope(key, { projectPath, source: \"cli\" });\n if (result) {\n const decay = checkDecay(result.envelope);\n if (decay.isExpired) {\n warnings.push(`EXPIRED: ${key}`);\n } else if (decay.isStale) {\n warnings.push(`STALE (${decay.lifetimePercent}%): ${key}`);\n }\n }\n\n const escaped = value\n .replace(/\\\\/g, \"\\\\\\\\\")\n .replace(/\"/g, '\\\\\"')\n .replace(/\\n/g, \"\\\\n\");\n lines.push(`${key}=\"${escaped}\"`);\n }\n\n const output = lines.join(\"\\n\") + \"\\n\";\n\n if (cmd.output) {\n writeFileSync(cmd.output, output);\n console.log(\n `${SYMBOLS.check} ${c.green(\"generated\")} ${c.bold(cmd.output)} (${Object.keys(config.secrets).length} keys)`,\n );\n } else {\n process.stdout.write(output);\n }\n\n if (warnings.length > 0 && process.stderr.isTTY) {\n console.error();\n for (const w of warnings) {\n console.error(` ${c.yellow(SYMBOLS.warning)} ${w}`);\n }\n console.error();\n }\n });\n\n // ─── Status Dashboard ───\n\n program\n .command(\"status\")\n .description(\"Launch the quantum status dashboard in your browser\")\n .option(\"--port <port>\", \"Port to serve on\", \"9876\")\n .option(\"--no-open\", \"Don't auto-open the browser\")\n .action(async (cmd) => {\n const { startDashboardServer } = await import(\"../core/dashboard.js\");\n const { exec } = await import(\"node:child_process\");\n const { platform } = await import(\"node:os\");\n\n const port = Number(cmd.port);\n const { close } = startDashboardServer({ port });\n const url = `http://127.0.0.1:${port}`;\n\n console.log(\n `\\n ${SYMBOLS.zap} ${c.bold(\"q-ring quantum status dashboard\")}\\n`,\n );\n console.log(` ${c.cyan(url)}\\n`);\n console.log(c.dim(\" Press Ctrl+C to stop\\n\"));\n\n if (cmd.open !== false) {\n const openCmd =\n platform() === \"darwin\" ? \"open\" : platform() === \"win32\" ? \"start\" : \"xdg-open\";\n exec(`${openCmd} ${url}`);\n }\n\n const shutdown = () => {\n console.log(`\\n${c.dim(\" dashboard stopped\")}`);\n close();\n process.exit(0);\n };\n process.on(\"SIGINT\", shutdown);\n process.on(\"SIGTERM\", shutdown);\n\n await new Promise(() => {});\n });\n\n // ─── Agent Mode ───\n\n program\n .command(\"agent\")\n .description(\"Start the autonomous agent (background monitor)\")\n .option(\n \"-i, --interval <seconds>\",\n \"Scan interval in seconds\",\n parseInt,\n 60,\n )\n .option(\"--auto-rotate\", \"Auto-rotate expired secrets\")\n .option(\"-v, --verbose\", \"Verbose output with all warnings\")\n .option(\"--project-path <paths>\", \"Comma-separated project paths to monitor\")\n .option(\"--once\", \"Run a single scan and exit (no daemon)\")\n .action(async (cmd) => {\n const projectPaths = cmd.projectPath\n ? cmd.projectPath.split(\",\").map((p: string) => p.trim())\n : [process.cwd()];\n\n if (cmd.once) {\n const report = runHealthScan({\n autoRotate: cmd.autoRotate,\n projectPaths,\n verbose: cmd.verbose,\n });\n\n // Output as JSON for programmatic use\n console.log(JSON.stringify(report, null, 2));\n return;\n }\n\n await startAgent({\n intervalSeconds: cmd.interval,\n autoRotate: cmd.autoRotate,\n projectPaths,\n verbose: cmd.verbose,\n });\n });\n\n // ─── Rotation & CI ───\n\n program\n .command(\"rotate <key>\")\n .description(\"Attempt issuer-native rotation of a secret via its provider\")\n .option(\"-g, --global\", \"Global scope\")\n .option(\"-p, --project\", \"Project scope\")\n .option(\"--project-path <path>\", \"Explicit project path\")\n .option(\"--provider <name>\", \"Force a specific provider\")\n .action(async (key: string, cmd) => {\n const opts = buildOpts(cmd);\n const value = getSecret(key, opts);\n if (!value) {\n console.error(c.red(`${SYMBOLS.cross} Secret \"${key}\" not found`));\n process.exitCode = 1;\n return;\n }\n\n const result = await rotateWithProvider(value, cmd.provider);\n if (result.rotated && result.newValue) {\n setSecret(key, result.newValue, { ...opts, scope: opts.scope ?? \"global\" });\n console.log(`${SYMBOLS.check} ${c.green(\"Rotated\")} ${c.bold(key)} via ${result.provider}`);\n console.log(c.dim(` ${result.message}`));\n } else {\n console.log(c.yellow(`${SYMBOLS.warning} ${result.message}`));\n }\n });\n\n program\n .command(\"ci:validate\")\n .description(\"CI-oriented batch validation of all secrets (exit code 1 on failure)\")\n .option(\"-g, --global\", \"Global scope\")\n .option(\"-p, --project\", \"Project scope\")\n .option(\"--project-path <path>\", \"Explicit project path\")\n .option(\"--json\", \"Output as JSON\")\n .action(async (cmd) => {\n const opts = buildOpts(cmd);\n const entries = listSecrets(opts);\n\n const secrets = entries\n .map((e) => {\n const val = getSecret(e.key, { ...opts, scope: e.scope, silent: true });\n if (!val) return null;\n const provider = e.envelope?.meta.provider;\n const validationUrl = e.envelope?.meta.validationUrl;\n return { key: e.key, value: val, provider, validationUrl };\n })\n .filter((s): s is NonNullable<typeof s> => s !== null);\n\n if (secrets.length === 0) {\n console.log(c.dim(\"No secrets to validate\"));\n return;\n }\n\n const report = await ciValidateBatch(secrets);\n\n if (cmd.json) {\n console.log(JSON.stringify(report, null, 2));\n } else {\n console.log(c.bold(`\\n CI Secret Validation: ${report.results.length} secrets\\n`));\n for (const r of report.results) {\n const icon = r.validation.valid ? SYMBOLS.check : SYMBOLS.cross;\n const color = r.validation.valid ? c.green : c.red;\n console.log(` ${icon} ${color(r.key)} [${r.validation.provider}] ${r.validation.message}`);\n if (r.requiresRotation) console.log(c.dim(` → rotation required`));\n }\n console.log();\n\n if (!report.allValid) {\n console.log(c.red(` ${report.failCount} secret(s) failed validation`));\n process.exitCode = 1;\n } else {\n console.log(c.green(` All secrets valid`));\n }\n }\n });\n\n // ─── Policy ───\n\n program\n .command(\"policy\")\n .description(\"Show project governance policy summary\")\n .option(\"--json\", \"Output as JSON\")\n .action((cmd) => {\n const summary = getPolicySummary();\n if (cmd.json) {\n console.log(JSON.stringify(summary, null, 2));\n return;\n }\n\n console.log(c.bold(\"\\n⚖ Governance Policy\\n\"));\n\n if (!summary.hasMcpPolicy && !summary.hasExecPolicy && !summary.hasSecretPolicy) {\n console.log(c.dim(\" No policy configured in .q-ring.json\"));\n console.log(c.dim(\" Add a \\\"policy\\\" section to enable governance controls.\\n\"));\n return;\n }\n\n if (summary.hasMcpPolicy) {\n console.log(c.cyan(\" MCP Policy:\"));\n const m = summary.details.mcp!;\n if (m.allowTools) console.log(c.green(` Allow tools: ${m.allowTools.join(\", \")}`));\n if (m.denyTools) console.log(c.red(` Deny tools: ${m.denyTools.join(\", \")}`));\n if (m.readableKeys) console.log(c.green(` Readable keys: ${m.readableKeys.join(\", \")}`));\n if (m.deniedKeys) console.log(c.red(` Denied keys: ${m.deniedKeys.join(\", \")}`));\n if (m.deniedTags) console.log(c.red(` Denied tags: ${m.deniedTags.join(\", \")}`));\n }\n\n if (summary.hasExecPolicy) {\n console.log(c.cyan(\" Exec Policy:\"));\n const e = summary.details.exec!;\n if (e.allowCommands) console.log(c.green(` Allow commands: ${e.allowCommands.join(\", \")}`));\n if (e.denyCommands) console.log(c.red(` Deny commands: ${e.denyCommands.join(\", \")}`));\n if (e.maxRuntimeSeconds) console.log(` Max runtime: ${e.maxRuntimeSeconds}s`);\n if (e.allowNetwork !== undefined) console.log(` Allow network: ${e.allowNetwork}`);\n }\n\n if (summary.hasSecretPolicy) {\n console.log(c.cyan(\" Secret Lifecycle Policy:\"));\n const s = summary.details.secrets!;\n if (s.requireApprovalForTags) console.log(` Require approval for tags: ${s.requireApprovalForTags.join(\", \")}`);\n if (s.maxTtlSeconds) console.log(` Max TTL: ${s.maxTtlSeconds}s`);\n }\n\n console.log();\n });\n\n return program;\n}\n","/**\n * Quantum Noise: cryptographic secret generation.\n * Generates high-entropy values in common formats.\n */\n\nimport { randomBytes, randomInt } from \"node:crypto\";\n\nexport type NoiseFormat =\n | \"hex\"\n | \"base64\"\n | \"alphanumeric\"\n | \"uuid\"\n | \"api-key\"\n | \"token\"\n | \"password\";\n\nexport interface NoiseOptions {\n format?: NoiseFormat;\n /** Length in bytes (for hex/base64) or characters (for alphanumeric/password) */\n length?: number;\n /** Prefix for api-key format (e.g., \"sk-\", \"pk-\") */\n prefix?: string;\n}\n\nconst ALPHA_NUM =\n \"ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789\";\nconst PASSWORD_CHARS =\n \"ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789!@#$%^&*()-_=+[]{}|;:,.<>?\";\n\nfunction randomString(charset: string, length: number): string {\n let result = \"\";\n for (let i = 0; i < length; i++) {\n result += charset[randomInt(charset.length)];\n }\n return result;\n}\n\nexport function generateSecret(opts: NoiseOptions = {}): string {\n const format = opts.format ?? \"api-key\";\n\n switch (format) {\n case \"hex\": {\n const len = opts.length ?? 32;\n return randomBytes(len).toString(\"hex\");\n }\n\n case \"base64\": {\n const len = opts.length ?? 32;\n return randomBytes(len).toString(\"base64url\");\n }\n\n case \"alphanumeric\": {\n const len = opts.length ?? 32;\n return randomString(ALPHA_NUM, len);\n }\n\n case \"uuid\": {\n const bytes = randomBytes(16);\n bytes[6] = (bytes[6] & 0x0f) | 0x40; // version 4\n bytes[8] = (bytes[8] & 0x3f) | 0x80; // variant 1\n const hex = bytes.toString(\"hex\");\n return [\n hex.slice(0, 8),\n hex.slice(8, 12),\n hex.slice(12, 16),\n hex.slice(16, 20),\n hex.slice(20, 32),\n ].join(\"-\");\n }\n\n case \"api-key\": {\n const prefix = opts.prefix ?? \"qr_\";\n const len = opts.length ?? 48;\n return prefix + randomString(ALPHA_NUM, len);\n }\n\n case \"token\": {\n const prefix = opts.prefix ?? \"\";\n const len = opts.length ?? 64;\n return prefix + randomBytes(len).toString(\"base64url\");\n }\n\n case \"password\": {\n const len = opts.length ?? 24;\n let pw = randomString(PASSWORD_CHARS, len);\n\n // Guarantee at least one of each class\n const hasUpper = /[A-Z]/.test(pw);\n const hasLower = /[a-z]/.test(pw);\n const hasDigit = /[0-9]/.test(pw);\n const hasSpecial = /[^A-Za-z0-9]/.test(pw);\n\n if (!hasUpper) pw = replaceAt(pw, randomInt(len), randomString(\"ABCDEFGHIJKLMNOPQRSTUVWXYZ\", 1));\n if (!hasLower) pw = replaceAt(pw, randomInt(len), randomString(\"abcdefghijklmnopqrstuvwxyz\", 1));\n if (!hasDigit) pw = replaceAt(pw, randomInt(len), randomString(\"0123456789\", 1));\n if (!hasSpecial) pw = replaceAt(pw, randomInt(len), randomString(\"!@#$%^&*()-_=+\", 1));\n\n return pw;\n }\n\n default:\n return randomBytes(32).toString(\"hex\");\n }\n}\n\nfunction replaceAt(str: string, index: number, char: string): string {\n return str.slice(0, index) + char + str.slice(index + 1);\n}\n\n/**\n * Estimate the entropy of a secret in bits.\n */\nexport function estimateEntropy(secret: string): number {\n const charsets = [\n { regex: /[a-z]/, size: 26 },\n { regex: /[A-Z]/, size: 26 },\n { regex: /[0-9]/, size: 10 },\n { regex: /[^A-Za-z0-9]/, size: 32 },\n ];\n\n let poolSize = 0;\n for (const { regex, size } of charsets) {\n if (regex.test(secret)) poolSize += size;\n }\n\n return poolSize > 0 ? Math.floor(Math.log2(poolSize) * secret.length) : 0;\n}\n","/**\n * Minimal ANSI color helpers. No dependencies.\n */\n\nconst enabled = process.stdout.isTTY !== false && !process.env.NO_COLOR;\n\nfunction wrap(code: string, text: string): string {\n return enabled ? `\\x1b[${code}m${text}\\x1b[0m` : text;\n}\n\nexport const c = {\n bold: (t: string) => wrap(\"1\", t),\n dim: (t: string) => wrap(\"2\", t),\n italic: (t: string) => wrap(\"3\", t),\n underline: (t: string) => wrap(\"4\", t),\n\n red: (t: string) => wrap(\"31\", t),\n green: (t: string) => wrap(\"32\", t),\n yellow: (t: string) => wrap(\"33\", t),\n blue: (t: string) => wrap(\"34\", t),\n magenta: (t: string) => wrap(\"35\", t),\n cyan: (t: string) => wrap(\"36\", t),\n white: (t: string) => wrap(\"37\", t),\n gray: (t: string) => wrap(\"90\", t),\n\n bgRed: (t: string) => wrap(\"41\", t),\n bgGreen: (t: string) => wrap(\"42\", t),\n bgYellow: (t: string) => wrap(\"43\", t),\n bgBlue: (t: string) => wrap(\"44\", t),\n bgMagenta: (t: string) => wrap(\"45\", t),\n bgCyan: (t: string) => wrap(\"46\", t),\n};\n\nexport function scopeColor(scope: string): string {\n return scope === \"project\" ? c.cyan(scope) : c.blue(scope);\n}\n\nexport function decayIndicator(percent: number, expired: boolean): string {\n if (expired) return c.bgRed(c.white(\" EXPIRED \"));\n if (percent >= 90) return c.red(`[decay ${percent}%]`);\n if (percent >= 75) return c.yellow(`[decay ${percent}%]`);\n if (percent > 0) return c.green(`[decay ${percent}%]`);\n return \"\";\n}\n\nexport function envBadge(env: string): string {\n switch (env) {\n case \"prod\":\n return c.bgRed(c.white(` ${env} `));\n case \"staging\":\n return c.bgYellow(c.white(` ${env} `));\n case \"dev\":\n return c.bgGreen(c.white(` ${env} `));\n case \"test\":\n return c.bgBlue(c.white(` ${env} `));\n default:\n return c.bgMagenta(c.white(` ${env} `));\n }\n}\n\nexport const SYMBOLS = {\n check: enabled ? \"\\u2713\" : \"[ok]\",\n cross: enabled ? \"\\u2717\" : \"[x]\",\n arrow: enabled ? \"\\u2192\" : \"->\",\n dot: enabled ? \"\\u2022\" : \"*\",\n lock: enabled ? \"\\u{1f512}\" : \"[locked]\",\n key: enabled ? \"\\u{1f511}\" : \"[key]\",\n link: enabled ? \"\\u{1f517}\" : \"[link]\",\n warning: enabled ? \"\\u26a0\\ufe0f\" : \"[!]\",\n clock: enabled ? \"\\u23f0\" : \"[time]\",\n shield: enabled ? \"\\u{1f6e1}\\ufe0f\" : \"[shield]\",\n zap: enabled ? \"\\u26a1\" : \"[zap]\",\n eye: enabled ? \"\\u{1f441}\\ufe0f\" : \"[eye]\",\n ghost: enabled ? \"\\u{1f47b}\" : \"[ghost]\",\n package: enabled ? \"\\u{1f4e6}\" : \"[pkg]\",\n sparkle: enabled ? \"\\u2728\" : \"[*]\",\n} as const;\n","/**\n * Quantum Agent: autonomous background monitor for secret health.\n *\n * Runs as a long-lived process that periodically:\n * - Checks for expired/stale secrets (decay monitoring)\n * - Detects access anomalies (observer analysis)\n * - Logs health reports\n * - Can trigger rotation callbacks\n *\n * Designed to run as `qring agent` or be invoked by the MCP server.\n */\n\nimport { listSecrets, getEnvelope, setSecret, type KeyringOptions } from \"./keyring.js\";\nimport { checkDecay, type QuantumEnvelope } from \"./envelope.js\";\nimport { detectAnomalies, logAudit, queryAudit } from \"./observer.js\";\nimport { generateSecret } from \"./noise.js\";\nimport { findEntangled } from \"./entanglement.js\";\nimport { fireHooks } from \"./hooks.js\";\nimport { c, SYMBOLS, decayIndicator } from \"../utils/colors.js\";\n\nexport interface AgentConfig {\n /** Check interval in seconds (default: 60) */\n intervalSeconds: number;\n /** Auto-rotate expired secrets with generated values */\n autoRotate: boolean;\n /** Project paths to monitor */\n projectPaths: string[];\n /** Verbose output */\n verbose: boolean;\n}\n\nexport interface AgentReport {\n timestamp: string;\n totalSecrets: number;\n healthy: number;\n stale: number;\n expired: number;\n anomalies: number;\n rotated: string[];\n warnings: string[];\n}\n\nfunction defaultConfig(): AgentConfig {\n return {\n intervalSeconds: 60,\n autoRotate: false,\n projectPaths: [process.cwd()],\n verbose: false,\n };\n}\n\nexport function runHealthScan(config: Partial<AgentConfig> = {}): AgentReport {\n const cfg = { ...defaultConfig(), ...config };\n\n const report: AgentReport = {\n timestamp: new Date().toISOString(),\n totalSecrets: 0,\n healthy: 0,\n stale: 0,\n expired: 0,\n anomalies: 0,\n rotated: [],\n warnings: [],\n };\n\n // Scan global scope\n const globalEntries = listSecrets({ scope: \"global\", source: \"agent\" });\n\n // Scan project scopes\n const projectEntries = cfg.projectPaths.flatMap((pp) =>\n listSecrets({ scope: \"project\", projectPath: pp, source: \"agent\" }),\n );\n\n const allEntries = [...globalEntries, ...projectEntries];\n report.totalSecrets = allEntries.length;\n\n for (const entry of allEntries) {\n if (!entry.envelope) continue;\n\n const decay = checkDecay(entry.envelope);\n\n if (decay.isExpired) {\n report.expired++;\n report.warnings.push(\n `EXPIRED: ${entry.key} [${entry.scope}] — expired ${decay.timeRemaining}`,\n );\n\n if (cfg.autoRotate) {\n const fmt = (entry.envelope?.meta.rotationFormat ?? \"api-key\") as import(\"./noise.js\").NoiseFormat;\n const prefix = entry.envelope?.meta.rotationPrefix;\n const newValue = generateSecret({ format: fmt, prefix });\n setSecret(entry.key, newValue, {\n scope: entry.scope,\n projectPath: cfg.projectPaths[0],\n source: \"agent\",\n });\n report.rotated.push(entry.key);\n logAudit({\n action: \"write\",\n key: entry.key,\n scope: entry.scope,\n source: \"agent\",\n detail: \"auto-rotated by agent (expired)\",\n });\n fireHooks({\n action: \"rotate\",\n key: entry.key,\n scope: entry.scope,\n timestamp: new Date().toISOString(),\n source: \"agent\",\n }, entry.envelope?.meta.tags).catch(() => {});\n }\n } else if (decay.isStale) {\n report.stale++;\n report.warnings.push(\n `STALE: ${entry.key} [${entry.scope}] — ${decay.lifetimePercent}% lifetime, ${decay.timeRemaining} remaining`,\n );\n } else {\n report.healthy++;\n }\n }\n\n // Check for anomalies\n const anomalies = detectAnomalies();\n report.anomalies = anomalies.length;\n for (const a of anomalies) {\n report.warnings.push(`ANOMALY [${a.type}]: ${a.description}`);\n }\n\n return report;\n}\n\nfunction formatReport(report: AgentReport, verbose: boolean): string {\n const lines: string[] = [];\n\n lines.push(\n `${c.bold(`${SYMBOLS.shield} q-ring agent scan`)} ${c.dim(report.timestamp)}`,\n );\n lines.push(\n ` ${c.dim(\"secrets:\")} ${report.totalSecrets} ${c.green(`${SYMBOLS.check} ${report.healthy}`)} ${c.yellow(`${SYMBOLS.warning} ${report.stale}`)} ${c.red(`${SYMBOLS.cross} ${report.expired}`)} ${c.dim(`anomalies: ${report.anomalies}`)}`,\n );\n\n if (report.rotated.length > 0) {\n lines.push(\n ` ${c.cyan(`${SYMBOLS.zap} auto-rotated:`)} ${report.rotated.join(\", \")}`,\n );\n }\n\n if (verbose && report.warnings.length > 0) {\n lines.push(\"\");\n for (const w of report.warnings) {\n if (w.startsWith(\"EXPIRED\")) lines.push(` ${c.red(w)}`);\n else if (w.startsWith(\"STALE\")) lines.push(` ${c.yellow(w)}`);\n else if (w.startsWith(\"ANOMALY\")) lines.push(` ${c.magenta(w)}`);\n else lines.push(` ${w}`);\n }\n }\n\n return lines.join(\"\\n\");\n}\n\n/**\n * Run the agent as a continuous background monitor.\n */\nexport async function startAgent(config: Partial<AgentConfig> = {}): Promise<void> {\n const cfg = { ...defaultConfig(), ...config };\n\n console.log(\n `${c.bold(`${SYMBOLS.zap} q-ring agent started`)} ${c.dim(`(interval: ${cfg.intervalSeconds}s, auto-rotate: ${cfg.autoRotate})`)}`,\n );\n console.log(\n c.dim(` monitoring: global + ${cfg.projectPaths.length} project(s)`),\n );\n console.log();\n\n const scan = () => {\n const report = runHealthScan(cfg);\n console.log(formatReport(report, cfg.verbose));\n\n if (report.warnings.length > 0 || cfg.verbose) {\n console.log();\n }\n };\n\n // Initial scan\n scan();\n\n // Continuous monitoring\n const interval = setInterval(scan, cfg.intervalSeconds * 1000);\n\n // Graceful shutdown\n const shutdown = () => {\n clearInterval(interval);\n console.log(`\\n${c.dim(\"q-ring agent stopped\")}`);\n process.exit(0);\n };\n\n process.on(\"SIGINT\", shutdown);\n process.on(\"SIGTERM\", shutdown);\n\n // Keep alive\n await new Promise(() => {});\n}\n","/**\n * Quantum Teleportation: securely share/transfer secrets between machines.\n *\n * Generates encrypted bundles that can be shared via any channel.\n * The recipient decrypts with a shared passphrase (out-of-band exchange).\n * Uses AES-256-GCM with PBKDF2-derived keys.\n */\n\nimport {\n randomBytes,\n createCipheriv,\n createDecipheriv,\n pbkdf2Sync,\n} from \"node:crypto\";\n\nconst ALGORITHM = \"aes-256-gcm\";\nconst KEY_LENGTH = 32;\nconst IV_LENGTH = 16;\nconst SALT_LENGTH = 32;\nconst TAG_LENGTH = 16;\nconst PBKDF2_ITERATIONS = 100000;\n\nexport interface TeleportBundle {\n /** Format version */\n v: 1;\n /** Base64-encoded encrypted payload */\n data: string;\n /** Base64-encoded salt for key derivation */\n salt: string;\n /** Base64-encoded initialization vector */\n iv: string;\n /** Base64-encoded auth tag */\n tag: string;\n /** ISO timestamp of creation */\n createdAt: string;\n /** Number of secrets in the bundle */\n count: number;\n}\n\nexport interface TeleportPayload {\n secrets: { key: string; value: string; scope?: string }[];\n exportedAt: string;\n exportedBy?: string;\n}\n\nfunction deriveKey(passphrase: string, salt: Buffer): Buffer {\n return pbkdf2Sync(passphrase, salt, PBKDF2_ITERATIONS, KEY_LENGTH, \"sha512\");\n}\n\n/**\n * Pack secrets into an encrypted teleport bundle.\n */\nexport function teleportPack(\n secrets: { key: string; value: string; scope?: string }[],\n passphrase: string,\n): string {\n const payload: TeleportPayload = {\n secrets,\n exportedAt: new Date().toISOString(),\n };\n\n const plaintext = JSON.stringify(payload);\n const salt = randomBytes(SALT_LENGTH);\n const iv = randomBytes(IV_LENGTH);\n const key = deriveKey(passphrase, salt);\n\n const cipher = createCipheriv(ALGORITHM, key, iv);\n const encrypted = Buffer.concat([\n cipher.update(plaintext, \"utf8\"),\n cipher.final(),\n ]);\n const tag = cipher.getAuthTag();\n\n const bundle: TeleportBundle = {\n v: 1,\n data: encrypted.toString(\"base64\"),\n salt: salt.toString(\"base64\"),\n iv: iv.toString(\"base64\"),\n tag: tag.toString(\"base64\"),\n createdAt: new Date().toISOString(),\n count: secrets.length,\n };\n\n return Buffer.from(JSON.stringify(bundle)).toString(\"base64\");\n}\n\n/**\n * Unpack and decrypt a teleport bundle.\n */\nexport function teleportUnpack(\n encoded: string,\n passphrase: string,\n): TeleportPayload {\n const bundleJson = Buffer.from(encoded, \"base64\").toString(\"utf8\");\n const bundle: TeleportBundle = JSON.parse(bundleJson);\n\n if (bundle.v !== 1) {\n throw new Error(`Unsupported teleport bundle version: ${bundle.v}`);\n }\n\n const salt = Buffer.from(bundle.salt, \"base64\");\n const iv = Buffer.from(bundle.iv, \"base64\");\n const tag = Buffer.from(bundle.tag, \"base64\");\n const encrypted = Buffer.from(bundle.data, \"base64\");\n const key = deriveKey(passphrase, salt);\n\n const decipher = createDecipheriv(ALGORITHM, key, iv);\n decipher.setAuthTag(tag);\n\n const decrypted = Buffer.concat([\n decipher.update(encrypted),\n decipher.final(),\n ]);\n\n return JSON.parse(decrypted.toString(\"utf8\"));\n}\n","/**\n * Import module: parse .env files and bulk-store secrets into q-ring.\n */\n\nimport { readFileSync } from \"node:fs\";\nimport { setSecret, hasSecret, type SetSecretOptions } from \"./keyring.js\";\n\nexport interface ImportOptions {\n scope?: \"global\" | \"project\";\n projectPath?: string;\n env?: string;\n source?: \"cli\" | \"mcp\" | \"agent\" | \"api\";\n skipExisting?: boolean;\n dryRun?: boolean;\n}\n\nexport interface ImportResult {\n imported: string[];\n skipped: string[];\n total: number;\n}\n\n/**\n * Parse .env content into key-value pairs.\n * Handles comments, blank lines, quoted values, and basic multiline.\n */\nexport function parseDotenv(content: string): Map<string, string> {\n const result = new Map<string, string>();\n const lines = content.split(/\\r?\\n/);\n\n for (let i = 0; i < lines.length; i++) {\n const line = lines[i].trim();\n\n if (!line || line.startsWith(\"#\")) continue;\n\n const eqIdx = line.indexOf(\"=\");\n if (eqIdx === -1) continue;\n\n const key = line.slice(0, eqIdx).trim();\n let value = line.slice(eqIdx + 1).trim();\n\n if (\n (value.startsWith('\"') && value.endsWith('\"')) ||\n (value.startsWith(\"'\") && value.endsWith(\"'\"))\n ) {\n value = value.slice(1, -1);\n }\n\n value = value\n .replace(/\\\\n/g, \"\\n\")\n .replace(/\\\\r/g, \"\\r\")\n .replace(/\\\\t/g, \"\\t\")\n .replace(/\\\\\\\\/g, \"\\\\\")\n .replace(/\\\\\"/g, '\"');\n\n if (value.includes(\"#\") && !line.includes('\"') && !line.includes(\"'\")) {\n value = value.split(\"#\")[0].trim();\n }\n\n if (key) result.set(key, value);\n }\n\n return result;\n}\n\n/**\n * Import secrets from a .env file path or raw content string.\n */\nexport function importDotenv(\n filePathOrContent: string,\n options: ImportOptions = {},\n): ImportResult {\n let content: string;\n\n try {\n content = readFileSync(filePathOrContent, \"utf8\");\n } catch {\n content = filePathOrContent;\n }\n\n const pairs = parseDotenv(content);\n const result: ImportResult = {\n imported: [],\n skipped: [],\n total: pairs.size,\n };\n\n for (const [key, value] of pairs) {\n if (options.skipExisting && hasSecret(key, {\n scope: options.scope,\n projectPath: options.projectPath,\n source: options.source ?? \"cli\",\n })) {\n result.skipped.push(key);\n continue;\n }\n\n if (options.dryRun) {\n result.imported.push(key);\n continue;\n }\n\n const setOpts: SetSecretOptions = {\n scope: options.scope ?? \"global\",\n projectPath: options.projectPath ?? process.cwd(),\n source: options.source ?? \"cli\",\n };\n\n setSecret(key, value, setOpts);\n result.imported.push(key);\n }\n\n return result;\n}\n","/**\n * Secure Execution & Auto-Redaction\n *\n * Runs child processes with project secrets injected into the environment.\n * Captures stdout/stderr and redacts any known secret values before they\n * are printed to the terminal or returned to the MCP agent.\n *\n * Exec profiles restrict which commands may be run, with optional\n * network and timeout controls.\n */\n\nimport { spawn } from \"node:child_process\";\nimport { Transform } from \"node:stream\";\nimport { listSecrets, getSecret, type KeyringOptions } from \"./keyring.js\";\nimport { checkDecay } from \"./envelope.js\";\nimport { checkExecPolicy, getExecMaxRuntime } from \"./policy.js\";\n\nexport interface ExecProfile {\n name: string;\n allowCommands?: string[];\n denyCommands?: string[];\n maxRuntimeSeconds?: number;\n allowNetwork?: boolean;\n stripEnvVars?: string[];\n}\n\nconst BUILTIN_PROFILES: Record<string, ExecProfile> = {\n unrestricted: { name: \"unrestricted\" },\n restricted: {\n name: \"restricted\",\n denyCommands: [\"curl\", \"wget\", \"ssh\", \"scp\", \"nc\", \"netcat\", \"ncat\"],\n maxRuntimeSeconds: 30,\n allowNetwork: false,\n stripEnvVars: [\"HTTP_PROXY\", \"HTTPS_PROXY\", \"ALL_PROXY\"],\n },\n ci: {\n name: \"ci\",\n maxRuntimeSeconds: 300,\n allowNetwork: true,\n denyCommands: [\"rm -rf /\", \"mkfs\", \"dd if=\"],\n },\n};\n\nexport function getProfile(name?: string): ExecProfile {\n if (!name) return BUILTIN_PROFILES.unrestricted;\n return BUILTIN_PROFILES[name] ?? { name };\n}\n\nexport function listProfiles(): ExecProfile[] {\n return Object.values(BUILTIN_PROFILES);\n}\n\nexport interface ExecOptions extends KeyringOptions {\n tags?: string[];\n keys?: string[];\n command: string;\n args: string[];\n /** If true, return output as string instead of piping to process.stdout */\n captureOutput?: boolean;\n /** Exec profile name (unrestricted, restricted, ci) */\n profile?: string;\n}\n\nexport interface ExecResult {\n code: number;\n stdout: string;\n stderr: string;\n}\n\nexport class RedactionTransform extends Transform {\n private patterns: { value: string; replacement: string }[] = [];\n private tail: string = \"\";\n private maxLen: number = 0;\n\n constructor(secretsToRedact: string[]) {\n super();\n // Only redact secrets > 5 chars to avoid destroying output\n const validSecrets = secretsToRedact.filter((s) => s.length > 5);\n // Sort by length descending to match longest first\n validSecrets.sort((a, b) => b.length - a.length);\n\n this.patterns = validSecrets.map((s) => ({\n value: s,\n replacement: \"[QRING:REDACTED]\",\n }));\n\n if (validSecrets.length > 0) {\n this.maxLen = validSecrets[0].length;\n }\n }\n\n _transform(chunk: Buffer | string, encoding: string, callback: () => void) {\n if (this.patterns.length === 0) {\n this.push(chunk);\n return callback();\n }\n\n const text = this.tail + chunk.toString();\n let redacted = text;\n\n for (const { value, replacement } of this.patterns) {\n redacted = redacted.split(value).join(replacement);\n }\n\n if (redacted.length < this.maxLen) {\n this.tail = redacted;\n return callback();\n }\n\n const outputLen = redacted.length - this.maxLen + 1;\n const output = redacted.slice(0, outputLen);\n this.tail = redacted.slice(outputLen);\n\n this.push(output);\n callback();\n }\n\n _flush(callback: () => void) {\n if (this.tail) {\n let final = this.tail;\n for (const { value, replacement } of this.patterns) {\n final = final.split(value).join(replacement);\n }\n this.push(final);\n }\n callback();\n }\n}\n\nexport async function execCommand(opts: ExecOptions): Promise<ExecResult> {\n const profile = getProfile(opts.profile);\n const fullCommand = [opts.command, ...opts.args].join(\" \");\n\n const policyDecision = checkExecPolicy(fullCommand, opts.projectPath);\n if (!policyDecision.allowed) {\n throw new Error(`Policy Denied: ${policyDecision.reason}`);\n }\n\n if (profile.denyCommands) {\n const denied = profile.denyCommands.find((d) => fullCommand.includes(d));\n if (denied) {\n throw new Error(`Exec profile \"${profile.name}\" denies command containing \"${denied}\"`);\n }\n }\n if (profile.allowCommands) {\n const allowed = profile.allowCommands.some((a) => fullCommand.startsWith(a));\n if (!allowed) {\n throw new Error(`Exec profile \"${profile.name}\" does not allow command \"${opts.command}\"`);\n }\n }\n\n const envMap: Record<string, string> = {};\n for (const [k, v] of Object.entries(process.env)) {\n if (v !== undefined) envMap[k] = v;\n }\n\n if (profile.stripEnvVars) {\n for (const key of profile.stripEnvVars) {\n delete envMap[key];\n }\n }\n\n const secretsToRedact = new Set<string>();\n\n let entries = listSecrets({\n scope: opts.scope,\n projectPath: opts.projectPath,\n source: opts.source ?? \"cli\",\n silent: true, // list silently\n });\n\n if (opts.keys?.length) {\n const keySet = new Set(opts.keys);\n entries = entries.filter((e) => keySet.has(e.key));\n }\n\n if (opts.tags?.length) {\n entries = entries.filter((e) =>\n opts.tags!.some((t) => e.envelope?.meta.tags?.includes(t)),\n );\n }\n\n for (const entry of entries) {\n if (entry.envelope) {\n const decay = checkDecay(entry.envelope);\n if (decay.isExpired) continue;\n }\n\n const val = getSecret(entry.key, {\n scope: entry.scope,\n projectPath: opts.projectPath,\n env: opts.env,\n source: opts.source ?? \"cli\",\n silent: false, // Log access for execution\n });\n\n if (val !== null) {\n envMap[entry.key] = val;\n if (val.length > 5) {\n secretsToRedact.add(val);\n }\n }\n }\n\n const maxRuntime = profile.maxRuntimeSeconds ?? getExecMaxRuntime(opts.projectPath);\n\n return new Promise((resolve, reject) => {\n // Enforce network restrictions for profiles that disallow network access.\n const networkTools = new Set([\n \"curl\", \"wget\", \"ping\", \"nc\", \"netcat\", \"ssh\", \"telnet\", \"ftp\", \"dig\", \"nslookup\",\n ]);\n\n if (profile.allowNetwork === false && networkTools.has(opts.command)) {\n const msg = `[QRING] Execution blocked: network access is disabled for profile \"${profile.name}\", command \"${opts.command}\" is considered network-related`;\n if (opts.captureOutput) {\n return resolve({ code: 126, stdout: \"\", stderr: msg });\n }\n process.stderr.write(msg + \"\\n\");\n return resolve({ code: 126, stdout: \"\", stderr: \"\" });\n }\n\n const child = spawn(opts.command, opts.args, {\n env: envMap,\n stdio: [\"inherit\", \"pipe\", \"pipe\"],\n shell: false,\n });\n\n let timedOut = false;\n let timer: ReturnType<typeof setTimeout> | undefined;\n\n if (maxRuntime) {\n timer = setTimeout(() => {\n timedOut = true;\n child.kill(\"SIGKILL\");\n }, maxRuntime * 1000);\n }\n\n const stdoutRedact = new RedactionTransform([...secretsToRedact]);\n const stderrRedact = new RedactionTransform([...secretsToRedact]);\n\n if (child.stdout) child.stdout.pipe(stdoutRedact);\n if (child.stderr) child.stderr.pipe(stderrRedact);\n\n let stdoutStr = \"\";\n let stderrStr = \"\";\n\n if (opts.captureOutput) {\n stdoutRedact.on(\"data\", (d) => (stdoutStr += d.toString()));\n stderrRedact.on(\"data\", (d) => (stderrStr += d.toString()));\n } else {\n stdoutRedact.pipe(process.stdout);\n stderrRedact.pipe(process.stderr);\n }\n\n child.on(\"close\", (code) => {\n if (timer) clearTimeout(timer);\n if (timedOut) {\n resolve({ code: 124, stdout: stdoutStr, stderr: stderrStr + `\\n[QRING] Process killed: exceeded ${maxRuntime}s runtime limit` });\n } else {\n resolve({ code: code ?? 0, stdout: stdoutStr, stderr: stderrStr });\n }\n });\n\n child.on(\"error\", (err) => {\n if (timer) clearTimeout(timer);\n reject(err);\n });\n });\n}\n","/**\n * Codebase Secret Scanner\n *\n * Scans a directory for hardcoded secrets using regex heuristics\n * and Shannon entropy analysis. Useful for migrating legacy codebases\n * into q-ring.\n */\n\nimport { readFileSync, readdirSync, statSync } from \"node:fs\";\nimport { join } from \"node:path\";\n\nexport interface ScanResult {\n file: string;\n line: number;\n keyName: string;\n match: string;\n context: string;\n entropy: number;\n}\n\nconst IGNORE_DIRS = new Set([\n \"node_modules\",\n \".git\",\n \".next\",\n \"dist\",\n \"build\",\n \"coverage\",\n \".cursor\",\n \"venv\",\n \"__pycache__\",\n]);\n\nconst IGNORE_EXTS = new Set([\n \".png\", \".jpg\", \".jpeg\", \".gif\", \".ico\", \".svg\", \".webp\",\n \".mp4\", \".mp3\", \".wav\", \".ogg\",\n \".pdf\", \".zip\", \".tar\", \".gz\", \".xz\",\n \".ttf\", \".woff\", \".woff2\", \".eot\",\n \".exe\", \".dll\", \".so\", \".dylib\",\n \".lock\",\n]);\n\n// Matches common secret assignments: API_KEY = \"sk-...\" or { password: '...' }\nconst SECRET_KEYWORDS = /((?:api_?key|secret|token|password|auth|credential|access_?key)[a-z0-9_]*)\\s*[:=]\\s*(['\"])([^'\"]+)\\2/i;\n\nfunction calculateEntropy(str: string): number {\n if (!str) return 0;\n const len = str.length;\n const frequencies = new Map<string, number>();\n\n for (let i = 0; i < len; i++) {\n const char = str[i];\n frequencies.set(char, (frequencies.get(char) || 0) + 1);\n }\n\n let entropy = 0;\n for (const count of frequencies.values()) {\n const p = count / len;\n entropy -= p * Math.log2(p);\n }\n\n return entropy;\n}\n\nexport function scanCodebase(dir: string): ScanResult[] {\n const results: ScanResult[] = [];\n\n function walk(currentDir: string) {\n let entries;\n try {\n entries = readdirSync(currentDir);\n } catch {\n return;\n }\n\n for (const entry of entries) {\n if (IGNORE_DIRS.has(entry)) continue;\n\n const fullPath = join(currentDir, entry);\n let stat;\n try {\n stat = statSync(fullPath);\n } catch {\n continue;\n }\n\n if (stat.isDirectory()) {\n walk(fullPath);\n } else if (stat.isFile()) {\n const ext = fullPath.slice(fullPath.lastIndexOf(\".\")).toLowerCase();\n if (IGNORE_EXTS.has(ext) || entry.endsWith(\".lock\")) continue;\n\n let content;\n try {\n // Read chunk to check if binary\n content = readFileSync(fullPath, \"utf8\");\n } catch {\n continue; // skip unreadable\n }\n\n // Quick heuristic: ignore files with null bytes\n if (content.includes(\"\\0\")) continue;\n\n const lines = content.split(/\\r?\\n/);\n for (let i = 0; i < lines.length; i++) {\n const line = lines[i];\n // Skip long lines (minified code)\n if (line.length > 500) continue;\n\n const match = line.match(SECRET_KEYWORDS);\n if (match) {\n const varName = match[1];\n const value = match[3];\n\n // Ignore very short strings or obvious placeholders\n if (value.length < 8) continue;\n const lowerValue = value.toLowerCase();\n if (\n lowerValue.includes(\"example\") ||\n lowerValue.includes(\"your_\") ||\n lowerValue.includes(\"placeholder\") ||\n lowerValue.includes(\"replace_me\")\n ) {\n continue;\n }\n\n const entropy = calculateEntropy(value);\n\n // Flag if entropy is decently high (e.g. > 3.5) or looks like a known prefix\n if (entropy > 3.5 || value.startsWith(\"sk-\") || value.startsWith(\"ghp_\")) {\n // Convert absolute path to relative for cleaner output\n const relPath = fullPath.startsWith(dir)\n ? fullPath.slice(dir.length).replace(/^[/\\\\]+/, \"\")\n : fullPath;\n\n results.push({\n file: relPath || fullPath,\n line: i + 1,\n keyName: varName,\n match: value,\n context: line.trim(),\n entropy: parseFloat(entropy.toFixed(2)),\n });\n }\n }\n }\n }\n }\n }\n\n walk(dir);\n return results;\n}\n","/**\n * Secret-Aware Linter\n *\n * Scans individual files (or staged git content) for hardcoded secrets and\n * optionally rewrites them with `process.env.KEY` references, storing the\n * discovered values in q-ring.\n */\n\nimport { readFileSync, writeFileSync, existsSync } from \"node:fs\";\nimport { basename, extname } from \"node:path\";\nimport { type ScanResult } from \"./scan.js\";\nimport { setSecret, hasSecret } from \"./keyring.js\";\n\nexport interface LintResult extends ScanResult {\n fixed: boolean;\n}\n\nexport interface LintOptions {\n fix?: boolean;\n scope?: import(\"./scope.js\").Scope;\n projectPath?: string;\n}\n\nconst ENV_REF_BY_EXT: Record<string, (key: string) => string> = {\n \".ts\": (k) => `process.env.${k}`,\n \".tsx\": (k) => `process.env.${k}`,\n \".js\": (k) => `process.env.${k}`,\n \".jsx\": (k) => `process.env.${k}`,\n \".mjs\": (k) => `process.env.${k}`,\n \".cjs\": (k) => `process.env.${k}`,\n \".py\": (k) => `os.environ[\"${k}\"]`,\n \".rb\": (k) => `ENV[\"${k}\"]`,\n \".go\": (k) => `os.Getenv(\"${k}\")`,\n \".rs\": (k) => `std::env::var(\"${k}\")`,\n \".java\": (k) => `System.getenv(\"${k}\")`,\n \".kt\": (k) => `System.getenv(\"${k}\")`,\n \".cs\": (k) => `Environment.GetEnvironmentVariable(\"${k}\")`,\n \".php\": (k) => `getenv('${k}')`,\n \".sh\": (k) => `\\${${k}}`,\n \".bash\": (k) => `\\${${k}}`,\n};\n\nfunction getEnvRef(filePath: string, keyName: string): string {\n const ext = extname(filePath).toLowerCase();\n const formatter = ENV_REF_BY_EXT[ext];\n return formatter ? formatter(keyName) : `process.env.${keyName}`;\n}\n\n/**\n * Lint specific files for hardcoded secrets.\n */\nexport function lintFiles(\n files: string[],\n opts: LintOptions = {},\n): LintResult[] {\n const results: LintResult[] = [];\n\n for (const file of files) {\n if (!existsSync(file)) continue;\n\n let content: string;\n try {\n content = readFileSync(file, \"utf8\");\n } catch {\n continue;\n }\n\n if (content.includes(\"\\0\")) continue;\n\n const SECRET_KEYWORDS =\n /((?:api_?key|secret|token|password|auth|credential|access_?key)[a-z0-9_]*)\\s*[:=]\\s*(['\"])([^'\"]+)\\2/gi;\n\n const lines = content.split(/\\r?\\n/);\n const fixes: Array<{ line: number; original: string; replacement: string; keyName: string; value: string }> = [];\n\n for (let i = 0; i < lines.length; i++) {\n const line = lines[i];\n if (line.length > 500) continue;\n\n let match: RegExpExecArray | null;\n SECRET_KEYWORDS.lastIndex = 0;\n\n while ((match = SECRET_KEYWORDS.exec(line)) !== null) {\n const varName = match[1].toUpperCase();\n const quote = match[2];\n const value = match[3];\n\n if (value.length < 8) continue;\n const lv = value.toLowerCase();\n if (\n lv.includes(\"example\") ||\n lv.includes(\"your_\") ||\n lv.includes(\"placeholder\") ||\n lv.includes(\"replace_me\") ||\n lv.includes(\"xxx\")\n ) continue;\n\n const entropy = calculateEntropy(value);\n if (entropy <= 3.5 && !value.startsWith(\"sk-\") && !value.startsWith(\"ghp_\")) continue;\n\n const shouldFix = opts.fix === true;\n\n if (shouldFix) {\n const envRef = getEnvRef(file, varName);\n fixes.push({\n line: i,\n original: `${quote}${value}${quote}`,\n replacement: envRef,\n keyName: varName,\n value,\n });\n }\n\n results.push({\n file,\n line: i + 1,\n keyName: varName,\n match: value,\n context: line.trim(),\n entropy: parseFloat(entropy.toFixed(2)),\n fixed: shouldFix,\n });\n }\n }\n\n if (opts.fix && fixes.length > 0) {\n const fixLines = content.split(/\\r?\\n/);\n // Apply fixes in reverse order to preserve line positions\n for (const fix of fixes.reverse()) {\n const lineIdx = fix.line;\n if (lineIdx >= 0 && lineIdx < fixLines.length) {\n fixLines[lineIdx] = fixLines[lineIdx].replace(fix.original, fix.replacement);\n }\n\n if (!hasSecret(fix.keyName, { scope: opts.scope, projectPath: opts.projectPath })) {\n setSecret(fix.keyName, fix.value, {\n scope: opts.scope ?? \"global\",\n projectPath: opts.projectPath,\n source: \"cli\",\n description: `Auto-imported from ${basename(file)}:${fix.line + 1}`,\n });\n }\n }\n\n writeFileSync(file, fixLines.join(\"\\n\"), \"utf8\");\n }\n }\n\n return results;\n}\n\nfunction calculateEntropy(str: string): number {\n if (!str) return 0;\n const len = str.length;\n const frequencies = new Map<string, number>();\n for (let i = 0; i < len; i++) {\n const ch = str[i];\n frequencies.set(ch, (frequencies.get(ch) || 0) + 1);\n }\n let entropy = 0;\n for (const count of frequencies.values()) {\n const p = count / len;\n entropy -= p * Math.log2(p);\n }\n return entropy;\n}\n","/**\n * Secret Liveness Validation: test if a secret is actually valid\n * with its target service using a pluggable provider system.\n */\n\nimport { httpRequest_ } from \"../utils/http-request.js\";\nimport { generateSecret, type NoiseFormat } from \"./noise.js\";\n\nexport interface ValidationResult {\n valid: boolean;\n status: \"valid\" | \"invalid\" | \"error\" | \"unknown\";\n message: string;\n latencyMs: number;\n provider: string;\n}\n\nexport interface Provider {\n name: string;\n description: string;\n /** Prefixes that auto-detect to this provider */\n prefixes?: string[];\n validate(value: string): Promise<ValidationResult>;\n}\n\nfunction makeRequest(\n url: string,\n headers: Record<string, string>,\n timeoutMs = 10000,\n): Promise<{ statusCode: number; body: string }> {\n return httpRequest_({ url, method: \"GET\", headers, timeoutMs });\n}\n\nexport class ProviderRegistry {\n private providers = new Map<string, Provider>();\n\n register(provider: Provider): void {\n this.providers.set(provider.name, provider);\n }\n\n get(name: string): Provider | undefined {\n return this.providers.get(name);\n }\n\n detectProvider(\n value: string,\n hints?: { provider?: string; prefix?: string },\n ): Provider | undefined {\n if (hints?.provider) {\n return this.providers.get(hints.provider);\n }\n\n for (const provider of this.providers.values()) {\n if (provider.prefixes) {\n for (const pfx of provider.prefixes) {\n if (value.startsWith(pfx)) return provider;\n }\n }\n }\n\n return undefined;\n }\n\n listProviders(): Provider[] {\n return [...this.providers.values()];\n }\n}\n\n// ─── Built-in Providers ───\n\nconst openaiProvider: Provider = {\n name: \"openai\",\n description: \"OpenAI API key validation\",\n prefixes: [\"sk-\"],\n async validate(value: string): Promise<ValidationResult> {\n const start = Date.now();\n try {\n const { statusCode } = await makeRequest(\n \"https://api.openai.com/v1/models?limit=1\",\n {\n Authorization: `Bearer ${value}`,\n \"User-Agent\": \"q-ring-validator/1.0\",\n },\n );\n const latencyMs = Date.now() - start;\n\n if (statusCode === 200)\n return { valid: true, status: \"valid\", message: \"API key is valid\", latencyMs, provider: \"openai\" };\n if (statusCode === 401)\n return { valid: false, status: \"invalid\", message: \"Invalid or revoked API key\", latencyMs, provider: \"openai\" };\n if (statusCode === 429)\n return { valid: true, status: \"error\", message: \"Rate limited — key may be valid\", latencyMs, provider: \"openai\" };\n return { valid: false, status: \"error\", message: `Unexpected status ${statusCode}`, latencyMs, provider: \"openai\" };\n } catch (err) {\n return { valid: false, status: \"error\", message: `${err instanceof Error ? err.message : \"Network error\"}`, latencyMs: Date.now() - start, provider: \"openai\" };\n }\n },\n};\n\nconst stripeProvider: Provider = {\n name: \"stripe\",\n description: \"Stripe API key validation\",\n prefixes: [\"sk_live_\", \"sk_test_\", \"rk_live_\", \"rk_test_\", \"pk_live_\", \"pk_test_\"],\n async validate(value: string): Promise<ValidationResult> {\n const start = Date.now();\n try {\n const { statusCode } = await makeRequest(\n \"https://api.stripe.com/v1/balance\",\n {\n Authorization: `Bearer ${value}`,\n \"User-Agent\": \"q-ring-validator/1.0\",\n },\n );\n const latencyMs = Date.now() - start;\n\n if (statusCode === 200)\n return { valid: true, status: \"valid\", message: \"API key is valid\", latencyMs, provider: \"stripe\" };\n if (statusCode === 401)\n return { valid: false, status: \"invalid\", message: \"Invalid or revoked API key\", latencyMs, provider: \"stripe\" };\n if (statusCode === 429)\n return { valid: true, status: \"error\", message: \"Rate limited — key may be valid\", latencyMs, provider: \"stripe\" };\n return { valid: false, status: \"error\", message: `Unexpected status ${statusCode}`, latencyMs, provider: \"stripe\" };\n } catch (err) {\n return { valid: false, status: \"error\", message: `${err instanceof Error ? err.message : \"Network error\"}`, latencyMs: Date.now() - start, provider: \"stripe\" };\n }\n },\n};\n\nconst githubProvider: Provider = {\n name: \"github\",\n description: \"GitHub token validation\",\n prefixes: [\"ghp_\", \"gho_\", \"ghu_\", \"ghs_\", \"ghr_\", \"github_pat_\"],\n async validate(value: string): Promise<ValidationResult> {\n const start = Date.now();\n try {\n const { statusCode } = await makeRequest(\n \"https://api.github.com/user\",\n {\n Authorization: `token ${value}`,\n \"User-Agent\": \"q-ring-validator/1.0\",\n Accept: \"application/vnd.github+json\",\n },\n );\n const latencyMs = Date.now() - start;\n\n if (statusCode === 200)\n return { valid: true, status: \"valid\", message: \"Token is valid\", latencyMs, provider: \"github\" };\n if (statusCode === 401)\n return { valid: false, status: \"invalid\", message: \"Invalid or expired token\", latencyMs, provider: \"github\" };\n if (statusCode === 403)\n return { valid: false, status: \"invalid\", message: \"Token lacks required permissions\", latencyMs, provider: \"github\" };\n if (statusCode === 429)\n return { valid: true, status: \"error\", message: \"Rate limited — token may be valid\", latencyMs, provider: \"github\" };\n return { valid: false, status: \"error\", message: `Unexpected status ${statusCode}`, latencyMs, provider: \"github\" };\n } catch (err) {\n return { valid: false, status: \"error\", message: `${err instanceof Error ? err.message : \"Network error\"}`, latencyMs: Date.now() - start, provider: \"github\" };\n }\n },\n};\n\nconst awsProvider: Provider = {\n name: \"aws\",\n description: \"AWS access key validation (checks key format only — full STS validation requires secret key + region)\",\n prefixes: [\"AKIA\", \"ASIA\"],\n async validate(value: string): Promise<ValidationResult> {\n const start = Date.now();\n const latencyMs = Date.now() - start;\n\n if (/^(AKIA|ASIA)[A-Z0-9]{16}$/.test(value)) {\n return { valid: true, status: \"unknown\", message: \"Valid AWS access key format (STS validation requires secret key)\", latencyMs, provider: \"aws\" };\n }\n return { valid: false, status: \"invalid\", message: \"Invalid AWS access key format\", latencyMs, provider: \"aws\" };\n },\n};\n\nconst httpProvider: Provider = {\n name: \"http\",\n description: \"Generic HTTP endpoint validation\",\n async validate(value: string, url?: string): Promise<ValidationResult> {\n const start = Date.now();\n\n if (!url) {\n return { valid: false, status: \"unknown\", message: \"No validation URL configured\", latencyMs: 0, provider: \"http\" };\n }\n\n try {\n const { statusCode } = await makeRequest(url, {\n Authorization: `Bearer ${value}`,\n \"User-Agent\": \"q-ring-validator/1.0\",\n });\n const latencyMs = Date.now() - start;\n\n if (statusCode >= 200 && statusCode < 300)\n return { valid: true, status: \"valid\", message: `Endpoint returned ${statusCode}`, latencyMs, provider: \"http\" };\n if (statusCode === 401 || statusCode === 403)\n return { valid: false, status: \"invalid\", message: `Authentication failed (${statusCode})`, latencyMs, provider: \"http\" };\n return { valid: false, status: \"error\", message: `Unexpected status ${statusCode}`, latencyMs, provider: \"http\" };\n } catch (err) {\n return { valid: false, status: \"error\", message: `${err instanceof Error ? err.message : \"Network error\"}`, latencyMs: Date.now() - start, provider: \"http\" };\n }\n },\n};\n\nexport const registry = new ProviderRegistry();\nregistry.register(openaiProvider);\nregistry.register(stripeProvider);\nregistry.register(githubProvider);\nregistry.register(awsProvider);\nregistry.register(httpProvider);\n\n/**\n * Validate a secret value against its detected or specified provider.\n */\nexport async function validateSecret(\n value: string,\n opts?: { provider?: string; validationUrl?: string },\n): Promise<ValidationResult> {\n const provider = opts?.provider\n ? registry.get(opts.provider)\n : registry.detectProvider(value);\n\n if (!provider) {\n return {\n valid: false,\n status: \"unknown\",\n message: \"No provider detected — set a provider in the manifest or secret metadata\",\n latencyMs: 0,\n provider: \"none\",\n };\n }\n\n if (provider.name === \"http\" && opts?.validationUrl) {\n return (provider as any).validate(value, opts.validationUrl);\n }\n\n return provider.validate(value);\n}\n\n// ─── Rotation Support ───\n\nexport interface RotationResult {\n rotated: boolean;\n provider: string;\n message: string;\n newValue?: string;\n}\n\nexport interface RotatableProvider extends Provider {\n rotate?(currentValue: string): Promise<RotationResult>;\n supportsRotation: boolean;\n}\n\n/**\n * Attempt provider-native rotation of a secret.\n * Falls back to local generation if the provider does not support native rotation.\n */\nexport async function rotateWithProvider(\n value: string,\n providerName?: string,\n): Promise<RotationResult> {\n const provider = providerName\n ? registry.get(providerName)\n : registry.detectProvider(value);\n\n if (!provider) {\n return { rotated: false, provider: \"none\", message: \"No provider detected for rotation\" };\n }\n\n const rotatable = provider as RotatableProvider;\n if (rotatable.supportsRotation && rotatable.rotate) {\n return rotatable.rotate(value);\n }\n\n // Fall back to local generation\n const format: NoiseFormat = \"api-key\";\n const newValue = generateSecret({ format, length: 48 });\n return {\n rotated: true,\n provider: provider.name,\n message: `Provider \"${provider.name}\" does not support native rotation — generated new value locally`,\n newValue,\n };\n}\n\n// ─── CI Scan ───\n\nexport interface CiScanResult {\n key: string;\n validation: ValidationResult;\n requiresRotation: boolean;\n}\n\n/**\n * CI-oriented batch validation: validates all secrets and returns\n * a structured report suitable for CI pipeline gating.\n */\nexport async function ciValidateBatch(\n secrets: { key: string; value: string; provider?: string; validationUrl?: string }[],\n): Promise<{ results: CiScanResult[]; allValid: boolean; failCount: number }> {\n const results: CiScanResult[] = [];\n\n for (const s of secrets) {\n const validation = await validateSecret(s.value, {\n provider: s.provider,\n validationUrl: s.validationUrl,\n });\n\n results.push({\n key: s.key,\n validation,\n requiresRotation: validation.status === \"invalid\",\n });\n }\n\n const failCount = results.filter((r) => !r.validation.valid).length;\n\n return { results, allValid: failCount === 0, failCount };\n}\n","/**\n * Self-Documenting Project Context for AI Agents\n *\n * Provides a safe, redacted view of the project's secrets, configuration,\n * and state without ever exposing actual secret values.\n */\n\nimport { existsSync, readFileSync } from \"node:fs\";\nimport { join } from \"node:path\";\nimport { listSecrets } from \"./keyring.js\";\nimport { collapseEnvironment, readProjectConfig } from \"./collapse.js\";\nimport { checkDecay } from \"./envelope.js\";\nimport { queryAudit } from \"./observer.js\";\nimport { listHooks } from \"./hooks.js\";\nimport { registry as providerRegistry } from \"./validate.js\";\nimport { registry as jitRegistry } from \"./provision.js\";\nimport type { KeyringOptions } from \"./keyring.js\";\n\nexport interface SecretSummary {\n key: string;\n scope: string;\n tags?: string[];\n description?: string;\n provider?: string;\n requiresApproval?: boolean;\n jitProvider?: string;\n hasStates: boolean;\n isExpired: boolean;\n isStale: boolean;\n timeRemaining: string | null;\n accessCount: number;\n lastAccessed: string | null;\n rotationFormat?: string;\n}\n\nexport interface ProjectContext {\n projectPath: string;\n environment: {\n env: string;\n source: string;\n } | null;\n secrets: SecretSummary[];\n totalSecrets: number;\n expiredCount: number;\n staleCount: number;\n protectedCount: number;\n manifest: {\n declared: number;\n missing: string[];\n } | null;\n validationProviders: string[];\n jitProviders: string[];\n hooksCount: number;\n recentActions: Array<{\n action: string;\n key?: string;\n source: string;\n timestamp: string;\n }>;\n}\n\nexport function getProjectContext(opts: KeyringOptions = {}): ProjectContext {\n const projectPath = opts.projectPath ?? process.cwd();\n const envResult = collapseEnvironment({ projectPath });\n\n const secretsList = listSecrets({\n ...opts,\n projectPath,\n silent: true,\n });\n\n let expiredCount = 0;\n let staleCount = 0;\n let protectedCount = 0;\n\n const secrets: SecretSummary[] = secretsList.map((entry) => {\n const meta = entry.envelope?.meta;\n const decay = entry.decay;\n\n if (decay?.isExpired) expiredCount++;\n if (decay?.isStale) staleCount++;\n if (meta?.requiresApproval) protectedCount++;\n\n return {\n key: entry.key,\n scope: entry.scope,\n tags: meta?.tags,\n description: meta?.description,\n provider: meta?.provider,\n requiresApproval: meta?.requiresApproval,\n jitProvider: meta?.jitProvider,\n hasStates: !!(entry.envelope?.states && Object.keys(entry.envelope.states).length > 0),\n isExpired: decay?.isExpired ?? false,\n isStale: decay?.isStale ?? false,\n timeRemaining: decay?.timeRemaining ?? null,\n accessCount: meta?.accessCount ?? 0,\n lastAccessed: meta?.lastAccessedAt ?? null,\n rotationFormat: meta?.rotationFormat,\n };\n });\n\n // Manifest analysis\n let manifest: ProjectContext[\"manifest\"] = null;\n const config = readProjectConfig(projectPath);\n if (config?.secrets) {\n const declaredKeys = Object.keys(config.secrets);\n const existingKeys = new Set(secrets.map((s) => s.key));\n const missing = declaredKeys.filter((k) => !existingKeys.has(k));\n manifest = { declared: declaredKeys.length, missing };\n }\n\n // Recent audit activity (last 20 events, redacted)\n const recentEvents = queryAudit({ limit: 20 });\n const recentActions = recentEvents.map((e) => ({\n action: e.action,\n key: e.key,\n source: e.source,\n timestamp: e.timestamp,\n }));\n\n return {\n projectPath,\n environment: envResult\n ? { env: envResult.env, source: envResult.source }\n : null,\n secrets,\n totalSecrets: secrets.length,\n expiredCount,\n staleCount,\n protectedCount,\n manifest,\n validationProviders: providerRegistry.listProviders().map((p) => p.name),\n jitProviders: jitRegistry.listProviders().map((p) => p.name),\n hooksCount: listHooks().length,\n recentActions,\n };\n}\n","/**\n * Agent Memory — Persistent State Across Sessions\n *\n * Stores key-value pairs in an encrypted JSON file so the AI agent\n * can remember decisions, rotations performed, and project-specific\n * context between conversations.\n *\n * Data is encrypted using AES-256-GCM derived from a machine-specific\n * fingerprint (hostname + username), so it only decrypts on the same machine.\n */\n\nimport { existsSync, readFileSync, writeFileSync, mkdirSync } from \"node:fs\";\nimport { join } from \"node:path\";\nimport { homedir, hostname, userInfo } from \"node:os\";\nimport { createCipheriv, createDecipheriv, createHash, randomBytes } from \"node:crypto\";\n\nconst MEMORY_FILE = \"agent-memory.enc\";\n\nfunction getMemoryDir(): string {\n const dir = join(homedir(), \".config\", \"q-ring\");\n if (!existsSync(dir)) {\n mkdirSync(dir, { recursive: true });\n }\n return dir;\n}\n\nfunction getMemoryPath(): string {\n return join(getMemoryDir(), MEMORY_FILE);\n}\n\nfunction deriveKey(): Buffer {\n const fingerprint = `qring-memory:${hostname()}:${userInfo().username}`;\n return createHash(\"sha256\").update(fingerprint).digest();\n}\n\nfunction encrypt(data: string): string {\n const key = deriveKey();\n const iv = randomBytes(12);\n const cipher = createCipheriv(\"aes-256-gcm\", key, iv);\n const encrypted = Buffer.concat([cipher.update(data, \"utf8\"), cipher.final()]);\n const tag = cipher.getAuthTag();\n // Format: iv:tag:ciphertext (all base64)\n return `${iv.toString(\"base64\")}:${tag.toString(\"base64\")}:${encrypted.toString(\"base64\")}`;\n}\n\nfunction decrypt(blob: string): string {\n const parts = blob.split(\":\");\n if (parts.length !== 3) throw new Error(\"Invalid encrypted format\");\n const iv = Buffer.from(parts[0], \"base64\");\n const tag = Buffer.from(parts[1], \"base64\");\n const encrypted = Buffer.from(parts[2], \"base64\");\n\n const key = deriveKey();\n const decipher = createDecipheriv(\"aes-256-gcm\", key, iv);\n decipher.setAuthTag(tag);\n return decipher.update(encrypted) + decipher.final(\"utf8\");\n}\n\ninterface MemoryStore {\n entries: Record<string, { value: string; updatedAt: string }>;\n}\n\nfunction loadStore(): MemoryStore {\n const path = getMemoryPath();\n if (!existsSync(path)) {\n return { entries: {} };\n }\n try {\n const raw = readFileSync(path, \"utf8\");\n const decrypted = decrypt(raw);\n return JSON.parse(decrypted);\n } catch {\n return { entries: {} };\n }\n}\n\nfunction saveStore(store: MemoryStore): void {\n const json = JSON.stringify(store);\n const encrypted = encrypt(json);\n writeFileSync(getMemoryPath(), encrypted, \"utf8\");\n}\n\n/**\n * Store a value in agent memory.\n */\nexport function remember(key: string, value: string): void {\n const store = loadStore();\n store.entries[key] = {\n value,\n updatedAt: new Date().toISOString(),\n };\n saveStore(store);\n}\n\n/**\n * Retrieve a value from agent memory.\n */\nexport function recall(key: string): string | null {\n const store = loadStore();\n return store.entries[key]?.value ?? null;\n}\n\n/**\n * List all keys in agent memory.\n */\nexport function listMemory(): Array<{ key: string; updatedAt: string }> {\n const store = loadStore();\n return Object.entries(store.entries).map(([key, entry]) => ({\n key,\n updatedAt: entry.updatedAt,\n }));\n}\n\n/**\n * Delete a key from agent memory.\n */\nexport function forget(key: string): boolean {\n const store = loadStore();\n if (key in store.entries) {\n delete store.entries[key];\n saveStore(store);\n return true;\n }\n return false;\n}\n\n/**\n * Clear all agent memory.\n */\nexport function clearMemory(): void {\n saveStore({ entries: {} });\n}\n","/**\n * Git Pre-Commit Hook for Secret Scanning\n *\n * Scans staged files for hardcoded secrets using the q-ring scanner.\n * If any are found, blocks the commit and reports locations.\n *\n * Install via: qring hook:install\n * Runs via: .git/hooks/pre-commit\n */\n\nimport { execSync } from \"node:child_process\";\nimport { existsSync, writeFileSync, chmodSync, readFileSync, unlinkSync } from \"node:fs\";\nimport { join } from \"node:path\";\nimport { lintFiles } from \"../core/linter.js\";\n\n/**\n * Get the list of staged files from git.\n */\nfunction getStagedFiles(): string[] {\n try {\n const output = execSync(\"git diff --cached --name-only --diff-filter=ACM\", {\n encoding: \"utf8\",\n stdio: [\"pipe\", \"pipe\", \"pipe\"],\n });\n return output\n .split(\"\\n\")\n .map((f) => f.trim())\n .filter((f) => f.length > 0);\n } catch {\n return [];\n }\n}\n\n/**\n * Run the pre-commit scan on staged files.\n * Returns exit code 0 (clean) or 1 (secrets found).\n */\nexport function runPreCommitScan(): number {\n const staged = getStagedFiles();\n if (staged.length === 0) return 0;\n\n const results = lintFiles(staged);\n\n if (results.length === 0) return 0;\n\n console.error(\"\\n[q-ring] Pre-commit scan found hardcoded secrets:\\n\");\n for (const r of results) {\n console.error(` ${r.file}:${r.line} ${r.keyName} (entropy: ${r.entropy})`);\n }\n console.error(\n `\\n[q-ring] Commit blocked. Use \"qring scan --fix\" to auto-migrate, or \"git commit --no-verify\" to bypass.\\n`,\n );\n\n return 1;\n}\n\nconst HOOK_SCRIPT = `#!/bin/sh\n# q-ring pre-commit hook — scans staged files for hardcoded secrets\nnpx qring hook:run 2>&1\nexit $?\n`;\n\n/**\n * Install the pre-commit hook into the repository's .git/hooks directory.\n */\nexport function installPreCommitHook(repoPath?: string): { installed: boolean; path: string; message: string } {\n const root = repoPath ?? process.cwd();\n const hooksDir = join(root, \".git\", \"hooks\");\n\n if (!existsSync(join(root, \".git\"))) {\n return { installed: false, path: \"\", message: \"Not a git repository\" };\n }\n\n const hookPath = join(hooksDir, \"pre-commit\");\n\n if (existsSync(hookPath)) {\n const existing = readFileSync(hookPath, \"utf8\");\n if (existing.includes(\"q-ring\")) {\n return { installed: true, path: hookPath, message: \"Hook already installed\" };\n }\n // Prepend to existing hook\n writeFileSync(hookPath, HOOK_SCRIPT + \"\\n\" + existing, \"utf8\");\n } else {\n writeFileSync(hookPath, HOOK_SCRIPT, \"utf8\");\n }\n\n chmodSync(hookPath, 0o755);\n return { installed: true, path: hookPath, message: \"Pre-commit hook installed\" };\n}\n\n/**\n * Uninstall the pre-commit hook.\n */\nexport function uninstallPreCommitHook(repoPath?: string): boolean {\n const root = repoPath ?? process.cwd();\n const hookPath = join(root, \".git\", \"hooks\", \"pre-commit\");\n\n if (!existsSync(hookPath)) return false;\n\n const content = readFileSync(hookPath, \"utf8\");\n if (!content.includes(\"q-ring\")) return false;\n\n // Remove q-ring lines\n const lines = content.split(\"\\n\");\n const cleaned = lines.filter(\n (l) => !l.includes(\"q-ring\") && !l.includes(\"npx qring hook:run\"),\n );\n\n if (cleaned.filter((l) => l.trim() && !l.startsWith(\"#!\")).length === 0) {\n // Nothing left, delete the file\n unlinkSync(hookPath);\n } else {\n writeFileSync(hookPath, cleaned.join(\"\\n\"), \"utf8\");\n }\n\n return true;\n}\n","import { createInterface } from \"node:readline\";\n\nexport async function promptSecret(message: string): Promise<string> {\n const rl = createInterface({\n input: process.stdin,\n output: process.stderr,\n terminal: true,\n });\n\n return new Promise((resolve) => {\n process.stderr.write(message);\n\n const stdin = process.stdin;\n const wasRaw = stdin.isRaw;\n if (stdin.isTTY && stdin.setRawMode) {\n stdin.setRawMode(true);\n }\n\n let input = \"\";\n\n const onData = (chunk: Buffer) => {\n const char = chunk.toString(\"utf8\");\n if (char === \"\\n\" || char === \"\\r\") {\n stdin.removeListener(\"data\", onData);\n if (stdin.isTTY && stdin.setRawMode) {\n stdin.setRawMode(wasRaw ?? false);\n }\n process.stderr.write(\"\\n\");\n rl.close();\n resolve(input);\n } else if (char === \"\\u0003\") {\n process.exit(1);\n } else if (char === \"\\u007F\" || char === \"\\b\") {\n input = input.slice(0, -1);\n } else {\n input += char;\n }\n };\n\n stdin.on(\"data\", onData);\n });\n}\n","import { createProgram } from \"./cli/commands.js\";\n\nconst program = createProgram();\nprogram.parse();\n"],"mappings":"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","names":["randomBytes","randomBytes","readFileSync","readFileSync","readFileSync","SECRET_KEYWORDS","calculateEntropy","registry","registry","existsSync","readFileSync","writeFileSync","join","createCipheriv","createDecipheriv","randomBytes","deriveKey","existsSync","writeFileSync","readFileSync","join","join","existsSync","readFileSync","writeFileSync","writeFileSync","readFileSync","existsSync","program","registry","value","provHint","result","icon","existsSync","readFileSync","writeFileSync","hook"]}
|