{"version":3,"sources":["/home/mkabumattar/work/withrawi/rawi/dist/chunk-6HMUXVQZ.cjs","../src/cli/commands/history.command.ts"],"names":["createHistoryCommand","historyCommand","Command","chalk","DEFAULT_PROFILE","options","handleHistoryAction","sessionType","dbManager","DatabaseManager","searchOptions","pageSize","messages","table","Table","message","truncateText","formatRelativeTime"],"mappings":"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","file":"/home/mkabumattar/work/withrawi/rawi/dist/chunk-6HMUXVQZ.cjs","sourcesContent":[null,"import {select} from '@inquirer/prompts';\nimport chalk from 'chalk';\nimport Table from 'cli-table3';\nimport {Command} from 'commander';\nimport {DatabaseManager} from '../../core/database/manager.js';\nimport {\n  DEFAULT_HISTORY_LIMIT,\n  DEFAULT_PROFILE,\n} from '../../core/shared/constants.js';\nimport type {ChatHistoryOptions} from '../../core/shared/types.js';\nimport {formatRelativeTime, truncateText} from '../../core/shared/utils.js';\n\nexport const createHistoryCommand = (): Command => {\n  const historyCommand = new Command('history');\n\n  historyCommand.description(\n    [\n      chalk.bold('Manage chat history and sessions.'),\n      '',\n      chalk.gray('Search, filter, export, and clean up your AI chat history.'),\n      chalk.gray('Use \"rawi history ask\", \"rawi history chat\",'),\n      chalk.gray('or \"rawi history exec\" to view specific session types.'),\n      '─'.repeat(80),\n    ].join('\\n'),\n  );\n\n  historyCommand\n    .command('ask')\n    .description(\n      [\n        chalk.bold('Show ask session history.'),\n        '',\n        chalk.gray('View and search your ask sessions and messages.'),\n      ].join('\\n'),\n    )\n    .option(\n      '-p, --profile <profile>',\n      chalk.white('Profile to show history for'),\n      DEFAULT_PROFILE,\n    )\n    .option(\n      '-l, --limit <number>',\n      chalk.white('Number of sessions to show'),\n      DEFAULT_HISTORY_LIMIT.toString(),\n    )\n    .option('--all', chalk.white('Show all sessions without pagination limit'))\n    .option('--all-profiles', chalk.white('Show sessions from all profiles'))\n    .option(\n      '-s, --search <query>',\n      chalk.white('Search messages containing text'),\n    )\n    .option('--provider <provider>', chalk.white('Filter by AI provider'))\n    .option('--model <model>', chalk.white('Filter by AI model'))\n    .option(\n      '--from <date>',\n      chalk.white('Show sessions from date (YYYY-MM-DD)'),\n    )\n    .option('--to <date>', chalk.white('Show sessions to date (YYYY-MM-DD)'))\n    .action(async (options) => {\n      await handleHistoryAction(options, 'ask');\n    });\n\n  historyCommand\n    .command('chat')\n    .description(\n      [\n        chalk.bold('Show chat session history.'),\n        '',\n        chalk.gray('View and search your chat sessions and messages.'),\n      ].join('\\n'),\n    )\n    .option(\n      '-p, --profile <profile>',\n      chalk.white('Profile to show history for'),\n      DEFAULT_PROFILE,\n    )\n    .option(\n      '-l, --limit <number>',\n      chalk.white('Number of sessions to show'),\n      DEFAULT_HISTORY_LIMIT.toString(),\n    )\n    .option('--all', chalk.white('Show all sessions without pagination limit'))\n    .option('--all-profiles', chalk.white('Show sessions from all profiles'))\n    .option(\n      '-s, --search <query>',\n      chalk.white('Search messages containing text'),\n    )\n    .option('--provider <provider>', chalk.white('Filter by AI provider'))\n    .option('--model <model>', chalk.white('Filter by AI model'))\n    .option(\n      '--from <date>',\n      chalk.white('Show sessions from date (YYYY-MM-DD)'),\n    )\n    .option('--to <date>', chalk.white('Show sessions to date (YYYY-MM-DD)'))\n    .action(async (options) => {\n      await handleHistoryAction(options, 'chat');\n    });\n\n  historyCommand\n    .command('exec')\n    .description(\n      [\n        chalk.bold('Show exec session history.'),\n        '',\n        chalk.gray('View and search your exec sessions and messages.'),\n      ].join('\\n'),\n    )\n    .option(\n      '-p, --profile <profile>',\n      chalk.white('Profile to show history for'),\n      DEFAULT_PROFILE,\n    )\n    .option(\n      '-l, --limit <number>',\n      chalk.white('Number of sessions to show'),\n      DEFAULT_HISTORY_LIMIT.toString(),\n    )\n    .option('--all', chalk.white('Show all sessions without pagination limit'))\n    .option('--all-profiles', chalk.white('Show sessions from all profiles'))\n    .option(\n      '-s, --search <query>',\n      chalk.white('Search messages containing text'),\n    )\n    .option('--provider <provider>', chalk.white('Filter by AI provider'))\n    .option('--model <model>', chalk.white('Filter by AI model'))\n    .option(\n      '--from <date>',\n      chalk.white('Show sessions from date (YYYY-MM-DD)'),\n    )\n    .option('--to <date>', chalk.white('Show sessions to date (YYYY-MM-DD)'))\n    .action(async (options) => {\n      await handleHistoryAction(options, 'exec');\n    });\n\n  return historyCommand;\n};\n\nasync function handleHistoryAction(\n  options: any,\n  sessionType: 'ask' | 'chat' | 'exec',\n): Promise<void> {\n  let dbManager: DatabaseManager | null = null;\n\n  try {\n    dbManager = new DatabaseManager();\n\n    const searchOptions: ChatHistoryOptions = {\n      profile: options.allProfiles ? undefined : options.profile,\n      limit: options.all\n        ? 1000\n        : Number.parseInt(options.limit, 10) || DEFAULT_HISTORY_LIMIT,\n      search: options.search,\n      provider: options.provider,\n      model: options.model,\n      fromDate: options.from,\n      toDate: options.to,\n      type: sessionType,\n    };\n\n    const pageSize = 10;\n\n    if (options.search) {\n      const messages = await dbManager.searchMessages(searchOptions);\n      if (messages.length === 0) {\n        console.log(chalk.yellow('📭 No messages found matching your search.'));\n        return;\n      }\n      console.log(\n        chalk.cyan(`🔍 Found ${messages.length} ${sessionType} messages:`),\n      );\n      console.log();\n      const table = new Table({\n        head: [\n          chalk.cyan('Session'),\n          chalk.cyan('Role'),\n          chalk.cyan('Content'),\n          chalk.cyan('Time'),\n          chalk.cyan('Provider/Model'),\n        ],\n        style: {head: ['cyan']},\n        colWidths: [15, 10, 35, 15, 20],\n        wordWrap: true,\n      });\n\n      for (const message of messages) {\n        table.push([\n          truncateText(message.sessionId || 'Unknown', 13),\n          message.role === 'user' ? chalk.blue('User') : chalk.green('AI'),\n          truncateText(message.content, 33),\n          formatRelativeTime(message.timestamp),\n          `${message.provider || 'N/A'}/${truncateText(message.model || 'N/A', 8)}`,\n        ]);\n      }\n\n      console.log(table.toString());\n      return;\n    }\n\n    const sessions = await dbManager.getSessions(searchOptions);\n    if (sessions.length === 0) {\n      console.log(\n        chalk.yellow(`📭 No ${sessionType} sessions found for this profile.`),\n      );\n      console.log();\n      console.log(chalk.gray('💡 Tips:'));\n      console.log(\n        chalk.gray(\n          `  • Start a new ${sessionType} session: rawi ${sessionType} <your-question>`,\n        ),\n      );\n      console.log(chalk.gray('  • Use --all-profiles to search all profiles'));\n      return;\n    }\n\n    console.log(\n      chalk.cyan(\n        `📚 ${sessionType.charAt(0).toUpperCase() + sessionType.slice(1)} Session History (${sessions.length} sessions):`,\n      ),\n    );\n    console.log();\n\n    const totalPages = Math.ceil(sessions.length / pageSize);\n    let page = 0;\n\n    const renderPage = (pageIdx: number) => {\n      const table = new Table({\n        head: [\n          chalk.cyan('Title'),\n          chalk.cyan('ID'),\n          chalk.cyan('Profile'),\n          chalk.cyan('Messages'),\n          chalk.cyan('Updated'),\n        ],\n        style: {head: ['cyan']},\n        colWidths: [22, 38, 12, 10, 18],\n        wordWrap: true,\n      });\n\n      sessions\n        .slice(pageIdx * pageSize, (pageIdx + 1) * pageSize)\n        .forEach((session) => {\n          table.push([\n            truncateText(session.title || 'Untitled', 20),\n            session.id,\n            session.profile,\n            session.messageCount?.toString() || '0',\n            formatRelativeTime(session.updatedAt),\n          ]);\n        });\n\n      console.log(table.toString());\n      console.log();\n      console.log(\n        chalk.gray(\n          `Page ${pageIdx + 1} of ${totalPages} | Total: ${sessions.length} sessions`,\n        ),\n      );\n      console.log();\n      console.log(chalk.gray('💡 Tips:'));\n      console.log(\n        chalk.gray(\n          `  • Use --session <id> with ${sessionType} command to continue a session`,\n        ),\n      );\n      console.log(\n        chalk.gray('  • Use --search <query> to search message content'),\n      );\n    };\n\n    if (sessions.length <= pageSize) {\n      renderPage(0);\n      return;\n    }\n\n    renderPage(page);\n\n    while (page < totalPages - 1) {\n      const action = await select({\n        message: 'What would you like to do?',\n        choices: [\n          {name: 'Next page', value: 'next'},\n          {name: 'Previous page', value: 'prev', disabled: page === 0},\n          {name: 'Exit', value: 'exit'},\n        ],\n      });\n\n      if (action === 'exit') {\n        break;\n      }\n      if (action === 'next' && page < totalPages - 1) {\n        page++;\n        renderPage(page);\n      } else if (action === 'prev' && page > 0) {\n        page--;\n        renderPage(page);\n      }\n    }\n  } catch (error) {\n    console.error(\n      chalk.red(\n        `❌ Error fetching ${sessionType} history: ${error instanceof Error ? error.message : String(error)}`,\n      ),\n    );\n    process.exit(1);\n  } finally {\n    if (dbManager) {\n      dbManager.close();\n    }\n  }\n}\n"]}