import { CONFIG, STATE } from './State.js'; import { displayHunterResults } from '../ui/Components.js'; import { updateHUD } from '../ui/HUD.js'; /** Runs a dimension hunter query on the selected thread and updates camera + HUD. */ export function runHunterQuery(camera, criteria) { const { tokenIndex, operator, value, limit = 10 } = criteria; const thread = STATE.threads[tokenIndex]; if (!thread) return; STATE.hunterResults = []; const embedding = thread.embedding; const allMatches = []; for (let i = 0; i < embedding.length; i++) { const val = embedding[i]; let match = false; if (operator === '>') match = val > value; else if (operator === '<') match = val < value; else if (operator === 'abs>') match = Math.abs(val) > value; if (match) { allMatches.push({ index: i, value: val }); } } allMatches.sort((a, b) => Math.abs(b.value) - Math.abs(a.value)); const topMatches = allMatches.slice(0, limit); STATE.hunterResults = topMatches.map(m => m.index); STATE.hunterActive = true; STATE.hunterIndex = 0; displayHunterResults(topMatches); if (STATE.hunterResults.length > 0) { if (CONFIG.debug) console.log(`[HUNTER] Found ${allMatches.length} matches. Showing top ${limit}.`); STATE.currentSelectedIndex = STATE.hunterResults[0]; const x = STATE.currentSelectedIndex * CONFIG.pointSpacing; camera.position.set(x, 0, CONFIG.inspectionDistance); camera.lookAt(x, 0, 0); } else if (CONFIG.debug) { console.log('[HUNTER] No matches found.'); } updateHUD(); }