@i4ctime/q-ring 0.3.2 → 0.4.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
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/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 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 } from \"../core/collapse.js\";\nimport { checkDecay } 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 { 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.2.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 .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 };\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 .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 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 .action((cmd) => {\n const opts = buildOpts(cmd);\n const output = exportSecrets({ ...opts, format: cmd.format });\n process.stdout.write(output + \"\\n\");\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 // ─── 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 // ─── 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 { 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 newValue = generateSecret({ format: \"api-key\" });\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 }\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","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","program"]}
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":"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","names":["randomBytes","randomBytes","program","value","provHint","result","icon","hook"]}