Ctrl K
ComunidadGuías…

scripts/_sbx_nicky_keys.mjs

Rama main · réplica de lectura del repositorio original.

Archivo original ↗Preguntar a KiBot
// READ-ONLY openhermit: Nicky model config + secrets, vs a working amiko/deepseek-flash twin.
import pg from 'pg';
const c = new pg.Client({ connectionString: process.env.DATABASE_URL });
await c.connect();
const q = async (s,p)=>(await c.query(s,p)).rows;

// secrets table columns
const cols = await q(`select column_name from information_schema.columns where table_schema='openhermit' and table_name='agent_secrets' order by ordinal_position`);
console.log('agent_secrets columns:', cols.map(x=>x.column_name).join(', '));

const TW = [["cmv65sb2g000007jqrr2w3571","Nicky (BROKEN)"],["cmv465akm000007l5nedpujvs","勋哥 (BROKEN)"],["cmv6bawgy000707jmrtoqiu2r","幺儿 (WORKING)"],["cmv3xucop000007jykxlh5igz","刘美美 (WORKING)"]];

for (const [id,label] of TW) {
  console.log(`\n===== ${label} =====`);
  const a=(await q(`select config_json from openhermit.agents where agent_id=$1`,[id]))[0];
  const cfg=JSON.parse(a?.config_json||'{}');
  console.log('  model:', JSON.stringify(cfg.model));
  // secrets: show key names + whether value present, NOT the secret value
  const secs = await q(`select * from openhermit.agent_secrets where agent_id=$1`,[id]);
  if(!secs.length) console.log('  secrets: (none)');
  for (const s of secs) {
    const redacted = {};
    for (const [k,v] of Object.entries(s)) {
      if (k==='agent_id') continue;
      if (typeof v==='string' && v.length>8 && /key|secret|token|value|val/i.test(k)) redacted[k]=`<${v.length} chars: ${v.slice(0,4)}…${v.slice(-2)}>`;
      else redacted[k]=v;
    }
    console.log('  secret:', JSON.stringify(redacted));
  }
}

// How does amiko provider auth? check for env-level key names on the gateway (names only)
console.log('\n=== amiko-related env var NAMES present (values hidden) ===');
console.log(Object.keys(process.env).filter(k=>/amiko|deepseek|model|api_key|provider|router/i.test(k)).sort().join(', '));
await c.end();