文件预览

config.js

查看 Evolver 技能包中的文件内容。

文件内容

src/config.js

// Centralized configuration for evolver runtime thresholds and timeouts.
// All values support environment variable override where specified.
// Groups: network, solidify, evolution, ops, limits.

function envInt(key, fallback) {
  const v = process.env[key];
  if (v === undefined || v === '') return fallback;
  const n = parseInt(v, 10);
  return isNaN(n) ? fallback : n;
}

function envFloat(key, fallback) {
  const v = process.env[key];
  if (v === undefined || v === '') return fallback;
  const n = parseFloat(v);
  return isNaN(n) ? fallback : n;
}

function envStr(key, fallback) {
  const v = process.env[key];
  return (v !== undefined && v !== '') ? v : fallback;
}

// --- Network & A2A ---

const HELLO_TIMEOUT_MS = envInt('EVOLVER_HELLO_TIMEOUT_MS', 15000);
const HEARTBEAT_TIMEOUT_MS = envInt('EVOLVER_HEARTBEAT_TIMEOUT_MS', 10000);
const HEARTBEAT_INTERVAL_MS = envInt('HEARTBEAT_INTERVAL_MS', 360000);
const HEARTBEAT_FIRST_DELAY_MS = envInt('EVOLVER_HEARTBEAT_FIRST_DELAY_MS', 30000);
const EVENT_POLL_TIMEOUT_MS = envInt('EVOLVER_EVENT_POLL_TIMEOUT_MS', 60000);
const HTTP_TRANSPORT_TIMEOUT_MS = envInt('EVOLVER_HTTP_TRANSPORT_TIMEOUT_MS', 15000);
const SECRET_CACHE_TTL_MS = envInt('EVOLVER_SECRET_CACHE_TTL_MS', 60000);
const HUB_SEARCH_TIMEOUT_MS = envInt('EVOLVER_HUB_SEARCH_TIMEOUT_MS', 8000);

// --- Solidify & Validation ---

const VALIDATION_TIMEOUT_MS = envInt('EVOLVER_VALIDATION_TIMEOUT_MS', 180000);
const CANARY_TIMEOUT_MS = envInt('EVOLVER_CANARY_TIMEOUT_MS', 30000);
const CAPSULE_CONTENT_MAX_CHARS = envInt('EVOLVER_CAPSULE_MAX_CHARS', 8000);
const SOLIDIFY_MAX_RETRIES = envInt('SOLIDIFY_MAX_RETRIES', 2);
const SOLIDIFY_RETRY_INTERVAL_MS = envInt('EVOLVER_SOLIDIFY_RETRY_INTERVAL_MS', 1000);
const MIN_PUBLISH_SCORE = envFloat('EVOLVER_MIN_PUBLISH_SCORE', 0.78);
const BROADCAST_SCORE_THRESHOLD = 0.7;
const BROADCAST_SUCCESS_STREAK = 2;
const MAX_REGEX_PATTERN_LEN = 1024;

// --- Evolution Loop ---

const REPAIR_LOOP_THRESHOLD = envInt('EVOLVER_REPAIR_LOOP_THRESHOLD', 3);
const SESSION_ARCHIVE_TRIGGER = envInt('EVOLVER_SESSION_ARCHIVE_TRIGGER', 100);
const SESSION_ARCHIVE_KEEP = envInt('EVOLVER_SESSION_ARCHIVE_KEEP', 50);
const MEMORY_FRAGMENT_MAX_CHARS = envInt('EVOLVER_MEMORY_FRAGMENT_MAX_CHARS', 50000);
const IDLE_FETCH_INTERVAL_MS = envInt('EVOLVER_IDLE_FETCH_INTERVAL_MS', 600000);
const PROMPT_MAX_CHARS = envInt('EVOLVER_PROMPT_MAX_CHARS', 24000);
const ACTIVE_WINDOW_MS = 24 * 60 * 60 * 1000;
const TARGET_BYTES = 120000;
const PER_FILE_BYTES = 20000;
const PER_SESSION_BYTES = 20000;
const RECENCY_GUARD_MS = 30 * 1000;
const DORMANT_TTL_MS = 3600 * 1000;
const PACKAGE_DESC_CACHE_TTL_MS = 6 * 60 * 60 * 1000;
const MEMORY_GRAPH_READ_LIMIT = 1000;
const NARRATIVE_SUMMARY_MAX_CHARS = 3000;

// --- Ops ---

const MAX_SILENCE_MS = envInt('EVOLVER_MAX_SILENCE_MS', 30 * 60 * 1000);
const CLEANUP_MAX_AGE_MS = envInt('EVOLVER_CLEANUP_MAX_AGE_MS', 24 * 60 * 60 * 1000);
const CLEANUP_MIN_KEEP = envInt('EVOLVER_CLEANUP_MIN_KEEP', 10);
const CLEANUP_MAX_FILES = envInt('EVOLVER_CLEANUP_MAX_FILES', 10);
const LOCK_MAX_AGE_MS = envInt('EVOLVER_LOCK_MAX_AGE_MS', 10 * 60 * 1000);

// --- Leak Check ---

const LEAK_CHECK_MODE = envStr('EVOLVER_LEAK_CHECK', 'warn');

module.exports = {
  // Network
  HELLO_TIMEOUT_MS,
  HEARTBEAT_TIMEOUT_MS,
  HEARTBEAT_INTERVAL_MS,
  HEARTBEAT_FIRST_DELAY_MS,
  EVENT_POLL_TIMEOUT_MS,
  HTTP_TRANSPORT_TIMEOUT_MS,
  SECRET_CACHE_TTL_MS,
  HUB_SEARCH_TIMEOUT_MS,
  // Solidify
  VALIDATION_TIMEOUT_MS,
  CANARY_TIMEOUT_MS,
  CAPSULE_CONTENT_MAX_CHARS,
  SOLIDIFY_MAX_RETRIES,
  SOLIDIFY_RETRY_INTERVAL_MS,
  MIN_PUBLISH_SCORE,
  BROADCAST_SCORE_THRESHOLD,
  BROADCAST_SUCCESS_STREAK,
  MAX_REGEX_PATTERN_LEN,
  // Evolution
  REPAIR_LOOP_THRESHOLD,
  SESSION_ARCHIVE_TRIGGER,
  SESSION_ARCHIVE_KEEP,
  MEMORY_FRAGMENT_MAX_CHARS,
  IDLE_FETCH_INTERVAL_MS,
  PROMPT_MAX_CHARS,
  ACTIVE_WINDOW_MS,
  TARGET_BYTES,
  PER_FILE_BYTES,
  PER_SESSION_BYTES,
  RECENCY_GUARD_MS,
  DORMANT_TTL_MS,
  PACKAGE_DESC_CACHE_TTL_MS,
  MEMORY_GRAPH_READ_LIMIT,
  NARRATIVE_SUMMARY_MAX_CHARS,
  // Ops
  MAX_SILENCE_MS,
  CLEANUP_MAX_AGE_MS,
  CLEANUP_MIN_KEEP,
  CLEANUP_MAX_FILES,
  LOCK_MAX_AGE_MS,
  // Security
  LEAK_CHECK_MODE,
  // Helpers
  envInt,
  envFloat,
  envStr,
};