๐Ÿ“„ memory.ts  โ€ข  2658 bytes
import { t } from '../i18n.js'
import { searchMemory, getSummary } from '../memory/memoryManager.js'

export async function handleMemoryCommand(
  trimmed: string,
  ACCENT: string,
  MUTED: string,
  SUCCESS: string,
  ERROR: string,
  color: any
): Promise<boolean> {
  if (!trimmed.startsWith('/memory')) return false

  const query = trimmed.slice(8).trim()
  if (!query) {
    // ๆ˜พ็คบ่ฎฐๅฟ†็ณป็ปŸ็Šถๆ€
    try {
      const stats = getSummary()
      console.log('')
      console.log(`  ${ACCENT}๐Ÿง  ${t('memory.system_title')}${color.reset}`)
      console.log(`  ${ACCENT}โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€${color.reset}`)
      console.log(`    ${MUTED}${t('memory.sessions')}: ${stats.sessions}${color.reset}`)
      console.log(`    ${MUTED}${t('memory.messages')}: ${stats.messages}${color.reset}`)
      console.log(`    ${MUTED}${t('memory.vectors')}: ${stats.vectors}${color.reset}`)
      console.log(`    ${MUTED}${t('memory.backfill_status')} ${stats.backfillStatus.running ? t('memory.status_running') : t('memory.status_stopped')}${color.reset}`)
      console.log('')
      console.log(`  ${MUTED}${t('memory.usage_hint')}${color.reset}`)
      console.log(`  ${MUTED}${t("memory.op_hint")}${color.reset}`)
      console.log('')
    } catch (e) {
      console.log(`  ${ERROR}${t('memory.not_initialized')}${color.reset}`)
    }
  } else {
    // ๆ‰ง่กŒ่ฏญไน‰ๆœ็ดข
    console.log(`  ${MUTED}๐Ÿ” ${t('memory.search_query')} "${query}"${color.reset}`)
    try {
      const results = await searchMemory(query, undefined, 10)
      if (results.length === 0) {
        console.log(`  ${MUTED}${t('memory.no_results')}${color.reset}`)
      } else {
        console.log('')
        console.log(`  ${ACCENT}${t('memory.found_results', {count: String(results.length)})}${color.reset}`)
        console.log(`  ${ACCENT}โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€${color.reset}`)
        for (const r of results) {
          const preview = r.content.slice(0, 100) + (r.content.length > 100 ? '...' : '')
          const sourceTag = r.source === 'vec' ? '[VEC]' : '[FTS]'
          const ts = r.created_at ? r.created_at.slice(5, 16) : ''
          console.log(`    ${sourceTag} ${MUTED}[${ts} ${r.session_id?.slice(0, 8)}]${color.reset} ${preview}`)
        }
        console.log('')
      }
    } catch (e) {
      console.log(`  ${ERROR}${t('memory.search_failed')} ${e}${color.reset}`)
    }
  }
  return true
}