文件内容
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,
};