@i4ctime/q-ring 0.3.1 → 0.3.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/dist/index.js CHANGED
@@ -392,6 +392,15 @@ async function promptSecret(message) {
392
392
  }
393
393
 
394
394
  // src/cli/commands.ts
395
+ function safeStr(s) {
396
+ return s == null ? "" : `${s}`;
397
+ }
398
+ function safeNum(n) {
399
+ return n == null ? 0 : Number(n);
400
+ }
401
+ function safeArr(arr) {
402
+ return arr ? arr.map((x) => typeof x === "string" ? safeStr(x) : x) : [];
403
+ }
395
404
  function buildOpts(cmd) {
396
405
  let scope;
397
406
  if (cmd.global) scope = "global";
@@ -484,34 +493,34 @@ function createProgram() {
484
493
  const maxKeyLen = Math.max(...entries.map((e) => e.key.length));
485
494
  for (const entry of entries) {
486
495
  const parts = [];
487
- parts.push(c.dim("[") + scopeColor(entry.scope) + c.dim("]"));
488
- parts.push(c.bold(entry.key.padEnd(maxKeyLen)));
489
- if (entry.envelope?.states) {
490
- const envs = Object.keys(entry.envelope.states);
496
+ const key = safeStr(entry.key);
497
+ const scope = safeStr(entry.scope);
498
+ const envs = entry.envelope?.states ? Object.keys(entry.envelope.states).map(safeStr) : null;
499
+ const entangledCount = safeNum(entry.envelope?.meta.entangled?.length);
500
+ const accessCount = safeNum(entry.envelope?.meta.accessCount);
501
+ const tags = safeArr(entry.envelope?.meta.tags);
502
+ const decayPct = safeNum(entry.decay?.lifetimePercent);
503
+ const expired = !!entry.decay?.isExpired;
504
+ const timeLeft = safeStr(entry.decay?.timeRemaining);
505
+ parts.push(c.dim("[") + scopeColor(scope) + c.dim("]"));
506
+ parts.push(c.bold(key.padEnd(maxKeyLen)));
507
+ if (envs) {
491
508
  parts.push(c.magenta(`[${envs.join("|")}]`));
492
509
  }
493
- if (entry.decay && (entry.decay.lifetimePercent > 0 || entry.decay.isExpired)) {
494
- parts.push(
495
- decayIndicator(entry.decay.lifetimePercent, entry.decay.isExpired)
496
- );
497
- if (entry.decay.timeRemaining && !entry.decay.isExpired) {
498
- parts.push(c.dim(entry.decay.timeRemaining));
510
+ if (entry.decay && (decayPct > 0 || expired)) {
511
+ parts.push(decayIndicator(decayPct, expired));
512
+ if (timeLeft && !expired) {
513
+ parts.push(c.dim(timeLeft));
499
514
  }
500
515
  }
501
- if (entry.envelope?.meta.entangled && entry.envelope.meta.entangled.length > 0) {
502
- parts.push(
503
- c.cyan(`${SYMBOLS.link} ${entry.envelope.meta.entangled.length}`)
504
- );
516
+ if (entangledCount > 0) {
517
+ parts.push(c.cyan(`${SYMBOLS.link} ${entangledCount}`));
505
518
  }
506
- if (entry.envelope && entry.envelope.meta.accessCount > 0) {
507
- parts.push(
508
- c.dim(`${SYMBOLS.eye} ${entry.envelope.meta.accessCount}`)
509
- );
519
+ if (accessCount > 0) {
520
+ parts.push(c.dim(`${SYMBOLS.eye} ${accessCount}`));
510
521
  }
511
- if (entry.envelope?.meta.tags && entry.envelope.meta.tags.length > 0) {
512
- parts.push(
513
- c.dim(entry.envelope.meta.tags.map((t) => `#${t}`).join(" "))
514
- );
522
+ if (tags.length > 0) {
523
+ parts.push(c.dim(tags.map((t) => `#${t}`).join(" ")));
515
524
  }
516
525
  console.log(` ${parts.join(" ")}`);
517
526
  }
@@ -526,14 +535,30 @@ function createProgram() {
526
535
  }
527
536
  const { envelope, scope } = result;
528
537
  const decay = checkDecay(envelope);
538
+ const safeScope = safeStr(scope);
539
+ const createdAt = safeStr(envelope.meta.createdAt);
540
+ const updatedAt = safeStr(envelope.meta.updatedAt);
541
+ const accessCount = safeNum(envelope.meta.accessCount);
542
+ const lastAccess = safeStr(envelope.meta.lastAccessedAt);
543
+ const desc = safeStr(envelope.meta.description);
544
+ const tags = safeArr(envelope.meta.tags);
545
+ const entangled = (envelope.meta.entangled ?? []).map((l) => ({
546
+ service: safeStr(l.service),
547
+ key: safeStr(l.key)
548
+ }));
549
+ const stateEnvs = envelope.states ? Object.keys(envelope.states).map(safeStr) : null;
550
+ const defaultEnv = safeStr(envelope.defaultEnv);
551
+ const decayTime = safeStr(decay.timeRemaining);
552
+ const decayPct = safeNum(decay.lifetimePercent);
553
+ const expired = !!decay.isExpired;
529
554
  console.log(`
530
555
  ${c.bold(SYMBOLS.key + " " + key)}`);
531
- console.log(` ${c.dim("scope:")} ${scopeColor(scope)}`);
532
- if (envelope.states) {
556
+ console.log(` ${c.dim("scope:")} ${scopeColor(safeScope)}`);
557
+ if (stateEnvs) {
533
558
  console.log(` ${c.dim("type:")} ${c.magenta("superposition")}`);
534
559
  console.log(` ${c.dim("states:")}`);
535
- for (const [env, _] of Object.entries(envelope.states)) {
536
- const isDefault = env === envelope.defaultEnv;
560
+ for (const env of stateEnvs) {
561
+ const isDefault = env === defaultEnv;
537
562
  console.log(
538
563
  ` ${envBadge(env)} ${isDefault ? c.dim("(default)") : ""}`
539
564
  );
@@ -541,32 +566,28 @@ function createProgram() {
541
566
  } else {
542
567
  console.log(` ${c.dim("type:")} ${c.green("collapsed")}`);
543
568
  }
544
- console.log(` ${c.dim("created:")} ${envelope.meta.createdAt}`);
545
- console.log(` ${c.dim("updated:")} ${envelope.meta.updatedAt}`);
546
- console.log(
547
- ` ${c.dim("accessed:")} ${envelope.meta.accessCount} times`
548
- );
549
- if (envelope.meta.lastAccessedAt) {
550
- console.log(
551
- ` ${c.dim("last read:")} ${envelope.meta.lastAccessedAt}`
552
- );
569
+ console.log(` ${c.dim("created:")} ${createdAt}`);
570
+ console.log(` ${c.dim("updated:")} ${updatedAt}`);
571
+ console.log(` ${c.dim("accessed:")} ${accessCount} times`);
572
+ if (lastAccess) {
573
+ console.log(` ${c.dim("last read:")} ${lastAccess}`);
553
574
  }
554
- if (envelope.meta.description) {
555
- console.log(` ${c.dim("desc:")} ${envelope.meta.description}`);
575
+ if (desc) {
576
+ console.log(` ${c.dim("desc:")} ${desc}`);
556
577
  }
557
- if (envelope.meta.tags && envelope.meta.tags.length > 0) {
578
+ if (tags.length > 0) {
558
579
  console.log(
559
- ` ${c.dim("tags:")} ${envelope.meta.tags.map((t) => c.cyan(`#${t}`)).join(" ")}`
580
+ ` ${c.dim("tags:")} ${tags.map((t) => c.cyan(`#${t}`)).join(" ")}`
560
581
  );
561
582
  }
562
- if (decay.timeRemaining) {
583
+ if (decayTime) {
563
584
  console.log(
564
- ` ${c.dim("decay:")} ${decayIndicator(decay.lifetimePercent, decay.isExpired)} ${decay.timeRemaining}`
585
+ ` ${c.dim("decay:")} ${decayIndicator(decayPct, expired)} ${decayTime}`
565
586
  );
566
587
  }
567
- if (envelope.meta.entangled && envelope.meta.entangled.length > 0) {
588
+ if (entangled.length > 0) {
568
589
  console.log(` ${c.dim("entangled:")}`);
569
- for (const link of envelope.meta.entangled) {
590
+ for (const link of entangled) {
570
591
  console.log(` ${SYMBOLS.link} ${link.service}/${link.key}`);
571
592
  }
572
593
  }
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\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 // Scope badge\n parts.push(c.dim(\"[\") + scopeColor(entry.scope) + c.dim(\"]\"));\n\n // Key name\n parts.push(c.bold(entry.key.padEnd(maxKeyLen)));\n\n // Superposition indicator\n if (entry.envelope?.states) {\n const envs = Object.keys(entry.envelope.states);\n parts.push(c.magenta(`[${envs.join(\"|\")}]`));\n }\n\n // Decay indicator\n if (entry.decay && (entry.decay.lifetimePercent > 0 || entry.decay.isExpired)) {\n parts.push(\n decayIndicator(entry.decay.lifetimePercent, entry.decay.isExpired),\n );\n if (entry.decay.timeRemaining && !entry.decay.isExpired) {\n parts.push(c.dim(entry.decay.timeRemaining));\n }\n }\n\n // Entanglement indicator\n if (\n entry.envelope?.meta.entangled &&\n entry.envelope.meta.entangled.length > 0\n ) {\n parts.push(\n c.cyan(`${SYMBOLS.link} ${entry.envelope.meta.entangled.length}`),\n );\n }\n\n // Access count\n if (entry.envelope && entry.envelope.meta.accessCount > 0) {\n parts.push(\n c.dim(`${SYMBOLS.eye} ${entry.envelope.meta.accessCount}`),\n );\n }\n\n // Tags\n if (entry.envelope?.meta.tags && entry.envelope.meta.tags.length > 0) {\n parts.push(\n c.dim(entry.envelope.meta.tags.map((t) => `#${t}`).join(\" \")),\n );\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 console.log(`\\n ${c.bold(SYMBOLS.key + \" \" + key)}`);\n console.log(` ${c.dim(\"scope:\")} ${scopeColor(scope)}`);\n\n if (envelope.states) {\n console.log(` ${c.dim(\"type:\")} ${c.magenta(\"superposition\")}`);\n console.log(` ${c.dim(\"states:\")}`);\n for (const [env, _] of Object.entries(envelope.states)) {\n const isDefault = env === envelope.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:\")} ${envelope.meta.createdAt}`);\n console.log(` ${c.dim(\"updated:\")} ${envelope.meta.updatedAt}`);\n console.log(\n ` ${c.dim(\"accessed:\")} ${envelope.meta.accessCount} times`,\n );\n\n if (envelope.meta.lastAccessedAt) {\n console.log(\n ` ${c.dim(\"last read:\")} ${envelope.meta.lastAccessedAt}`,\n );\n }\n\n if (envelope.meta.description) {\n console.log(` ${c.dim(\"desc:\")} ${envelope.meta.description}`);\n }\n\n if (envelope.meta.tags && envelope.meta.tags.length > 0) {\n console.log(\n ` ${c.dim(\"tags:\")} ${envelope.meta.tags.map((t) => c.cyan(`#${t}`)).join(\" \")}`,\n );\n }\n\n if (decay.timeRemaining) {\n console.log(\n ` ${c.dim(\"decay:\")} ${decayIndicator(decay.lifetimePercent, decay.isExpired)} ${decay.timeRemaining}`,\n );\n }\n\n if (\n envelope.meta.entangled &&\n envelope.meta.entangled.length > 0\n ) {\n console.log(` ${c.dim(\"entangled:\")}`);\n for (const link of envelope.meta.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/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"]}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@i4ctime/q-ring",
3
- "version": "0.3.1",
3
+ "version": "0.3.2",
4
4
  "mcpName": "io.github.I4cTime/q-ring",
5
5
  "description": "Quantum keyring for AI coding tools — Cursor, Kiro, Claude Code. Secrets, superposition, entanglement, MCP.",
6
6
  "type": "module",