Skip to main content

Overview

The extractSignals() function scans session logs, memory files, and user input to extract structured signals that drive gene selection and evolution intent. Location: src/gep/signals.js:137

Function Signature

function extractSignals({ recentSessionTranscript, todayLog, memorySnippet, userSnippet, recentEvents })

Parameters

recentSessionTranscript
string
required
Recent session logs (tail of active sessions)
todayLog
string
required
Today’s evolution log
memorySnippet
string
required
Content from MEMORY.md
userSnippet
string
required
Content from USER.md
recentEvents
EvolutionEvent[]
required
Recent evolution events for de-duplication

Return Value

signals
string[]
Array of extracted signal strings (unique, de-duplicated)

Signal Categories

Defensive Signals (Errors)

Location: src/gep/signals.js:150
// Refined error detection regex
var errorHit = /\[error\]|error:|exception:|iserror":true|"status":\s*"error"|错误\s*[::]|异常\s*[::]/.test(lower);
if (errorHit) signals.push('log_error');

// Error signature for reproducibility
var errLine = lines.find(l => /\b(typeerror|referenceerror|syntaxerror)\b\s*:|error\s*:/i.test(l));
if (errLine) {
  var clipped = errLine.replace(/\s+/g, ' ').slice(0, 260);
  signals.push('errsig:' + clipped);
}
Defensive Signals:
  • log_error - Generic error detected
  • errsig:<signature> - Specific error signature with details
  • memory_missing - MEMORY.md file not found
  • user_missing - USER.md file not found
  • integration_key_missing - Required API key missing
  • session_logs_missing - No session logs found
  • protocol_drift - Protocol deviation detected

Recurring Error Detection

Location: src/gep/signals.js:186
var errorCounts = {};
var errPatterns = corpus.match(/(?:LLM error|"error"|"status":\s*"error")[^}]{0,200}/gi) || [];
for (var ep of errPatterns) {
  var key = ep.replace(/\s+/g, ' ').slice(0, 100);
  errorCounts[key] = (errorCounts[key] || 0) + 1;
}

var recurringErrors = Object.entries(errorCounts).filter(e => e[1] >= 3);
if (recurringErrors.length > 0) {
  signals.push('recurring_error');
  var topErr = recurringErrors.sort((a, b) => b[1] - a[1])[0];
  signals.push('recurring_errsig(' + topErr[1] + 'x):' + topErr[0].slice(0, 150));
}
Output: recurring_errsig(5x):LLM error Unsupported MIME type image/gif

Opportunity Signals (Innovation)

Location: src/gep/signals.js:2
const OPPORTUNITY_SIGNALS = [
  'user_feature_request',
  'user_improvement_suggestion',
  'perf_bottleneck',
  'capability_gap',
  'stable_success_plateau',
  'external_opportunity',
  'recurring_error',
  'unsupported_input_type',
  'evolution_stagnation_detected',
  'repair_loop_detected',
  'force_innovation_after_repair_loop',
];

Feature Request Extraction (4 languages)

Location: src/gep/signals.js:211
// English
var featEn = corpus.match(/\b(add|implement|create|build|make)\b[^.?!\n]{3,120}\b(feature|function|module|capability)\b/i);
if (featEn) featureRequestSnippet = featEn[0].trim().slice(0, 200);

// Chinese (Simplified)
if (/加个|实现一下|做个|想要\s*一个/.test(corpus)) {
  var featZh = corpus.match(/.{0,100}(加个|实现一下|做个|想要\s*一个).{0,100}/);
  if (featZh) featureRequestSnippet = featZh[0].trim().slice(0, 200);
}

// Chinese (Traditional)
if (/加個|實現一下|做個|想要一個/.test(corpus)) {
  var featTw = corpus.match(/.{0,100}(加個|實現一下|做個|想要一個).{0,100}/);
}

// Japanese
if (/追加|実装|作って|機能を/.test(corpus)) {
  var featJa = corpus.match(/.{0,100}(追加|実装|作って|機能を).{0,100}/);
}

if (featureRequestSnippet) {
  signals.push('user_feature_request:' + featureRequestSnippet);
}
Output: user_feature_request:add support for image/gif uploads to the card renderer

Improvement Suggestion (4 languages)

Location: src/gep/signals.js:244
if (!errorHit) {
  var impEn = corpus.match(/.{0,80}\b(should be|could be better|improve|enhance|refactor)\b.{0,80}/i);
  if (impEn) improvementSnippet = impEn[0].trim().slice(0, 200);
  
  if (!improvementSnippet && /改进一下|优化一下|简化|重构/.test(corpus)) {
    var impZh = corpus.match(/.{0,100}(改进一下|优化一下|简化|重构).{0,100}/);
  }
  
  if (improvementSnippet) {
    signals.push('user_improvement_suggestion:' + improvementSnippet);
  }
}

Tool Usage Analytics

Location: src/gep/signals.js:283
var toolUsage = {};
var toolMatches = corpus.match(/\[TOOL:\s*([\w-]+)\]/g) || [];

// Extract exec commands to identify benign loops
var execCommands = corpus.match(/exec: (node\s+[\w\/\.-]+\.js\s+ensure)/g) || [];
var benignExecCount = execCommands.length;

for (var toolMatch of toolMatches) {
  var toolName = toolMatch.match(/\[TOOL:\s*([\w-]+)\]/)[1];
  toolUsage[toolName] = (toolUsage[toolName] || 0) + 1;
}

// Adjust exec count by subtracting benign commands
if (toolUsage['exec']) {
  toolUsage['exec'] = Math.max(0, toolUsage['exec'] - benignExecCount);
}

Object.keys(toolUsage).forEach(tool => {
  if (toolUsage[tool] >= 10) {
    signals.push('high_tool_usage:' + tool);
  }
  if (tool === 'exec' && toolUsage[tool] >= 5) {
    signals.push('repeated_tool_usage:exec');
  }
});

Signal De-duplication

Location: src/gep/signals.js:27

Recent History Analysis

function analyzeRecentHistory(recentEvents) {
  var recent = recentEvents.slice(-10);
  var signalFreq = {};
  var tail = recent.slice(-8);
  
  for (var evt of tail) {
    var sigs = Array.isArray(evt.signals) ? evt.signals : [];
    for (var s of sigs) {
      // Normalize: strip details suffix
      var key = s.startsWith('errsig:') ? 'errsig'
        : s.startsWith('user_feature_request:') ? 'user_feature_request'
        : s;
      signalFreq[key] = (signalFreq[key] || 0) + 1;
    }
  }
  
  // Suppress signals that appeared in 3+ of the last 8 events
  var suppressedSignals = new Set();
  for (var [sig, count] of Object.entries(signalFreq)) {
    if (count >= 3) suppressedSignals.add(sig);
  }
  
  return { suppressedSignals, recentIntents, consecutiveRepairCount };
}

De-duplication Application

Location: src/gep/signals.js:321
if (history.suppressedSignals.size > 0) {
  var beforeDedup = signals.length;
  signals = signals.filter(s => {
    var key = s.startsWith('errsig:') ? 'errsig'
      : s.startsWith('user_feature_request:') ? 'user_feature_request'
      : s;
    return !history.suppressedSignals.has(key);
  });
  
  if (beforeDedup > 0 && signals.length === 0) {
    // All signals were suppressed = system is stable but stuck in a loop
    signals.push('evolution_stagnation_detected');
    signals.push('stable_success_plateau');
  }
}

Force Innovation Logic

Location: src/gep/signals.js:341

After Consecutive Repairs

if (history.consecutiveRepairCount >= 3) {
  // Remove repair-only signals and inject innovation signals
  signals = signals.filter(s =>
    s !== 'log_error' && !s.startsWith('errsig:') && !s.startsWith('recurring_errsig')
  );
  if (signals.length === 0) {
    signals.push('repair_loop_detected');
    signals.push('stable_success_plateau');
  }
  signals.push('force_innovation_after_repair_loop');
}

After Empty Cycles

Location: src/gep/signals.js:355
if (history.emptyCycleCount >= 4) {
  signals = signals.filter(s =>
    s !== 'log_error' && !s.startsWith('errsig:')
  );
  if (!signals.includes('empty_cycle_loop_detected')) {
    signals.push('empty_cycle_loop_detected');
  }
  if (!signals.includes('stable_success_plateau')) {
    signals.push('stable_success_plateau');
  }
}

Saturation Detection

Location: src/gep/signals.js:366
// When consecutive empty cycles pile up, signal graceful degradation
if (history.consecutiveEmptyCycles >= 5) {
  signals.push('force_steady_state');
  signals.push('evolution_saturation');
} else if (history.consecutiveEmptyCycles >= 3) {
  signals.push('evolution_saturation');
}

Example Usage

const signals = extractSignals({
  recentSessionTranscript: readRealSessionLog(),
  todayLog: readRecentLog(TODAY_LOG),
  memorySnippet: readMemorySnippet(),
  userSnippet: readUserSnippet(),
  recentEvents: readAllEvents().slice(-80),
});

console.log('Extracted signals:', signals);
// Output: ['log_error', 'errsig:TypeError: Cannot read property...', 'user_feature_request:add image support']

Build docs developers (and LLMs) love