UNPKG

cw-ai-backlog

Version:

AI-powered tool to generate backlog items from meeting documents and output to Google Sheets

93 lines (77 loc) 3.22 kB
const { Command } = require('commander'); const path = require('path'); const fs = require('fs-extra'); const chalk = require('chalk'); const ora = require('ora'); const { parseFile } = require('./parsers'); const { generateBacklog } = require('./openai'); const { loadConfig } = require('./config'); const { writeBacklogToSheets } = require('./sheets'); const { setupConfigInteractive } = require('./setup'); // 讀取 package.json 獲取版本號 const packageJson = require('../package.json'); const program = new Command(); program .name('ai-backlog') .description('Generate backlog items from meeting documents using AI and output to Google Sheets') .version(packageJson.version); program .argument('[input]', '會議檔案路徑或 Google Docs 連結') .option('-c, --config <path>', '配置檔案路徑', './ai_backlog.config.js') .option('--setup', '執行互動式配置設定') .option('--show-config', '顯示配置檔案位置') .option('--edit-config', '快速編輯全域配置檔案') .action(async (input, options) => { let spinner; try { // 如果使用者要執行互動式設定 if (options.setup) { await setupConfigInteractive(); return; } // 如果使用者要查看配置檔案位置 if (options.showConfig) { const { showConfigPaths } = require('./config'); await showConfigPaths(); return; } // 如果使用者要編輯配置檔案 if (options.editConfig) { const { editGlobalConfig } = require('./config'); await editGlobalConfig(); return; } if (!input) { console.error(chalk.red('❌ 請提供會議檔案路徑或 Google Docs 連結')); console.log(chalk.yellow('💡 如果是第一次使用,請執行: ai-backlog --setup')); process.exit(1); } spinner = ora('正在載入配置...').start(); // 載入配置 const config = await loadConfig(options.config); spinner.succeed('配置載入完成'); // 解析檔案內容 spinner.start('正在解析檔案內容...'); const content = await parseFile(input, config); spinner.succeed('檔案解析完成'); // 生成 backlog spinner.start('正在使用 AI 生成 backlog...'); const backlogItems = await generateBacklog(content, config); spinner.succeed('Backlog 生成完成'); // 寫入 Google Sheets spinner.start('正在寫入 Google Sheets...'); const result = await writeBacklogToSheets(backlogItems, config); spinner.succeed('Backlog 已成功寫入 Google Sheets'); console.log(chalk.blue(`\n📊 共生成 ${backlogItems.length} 個 backlog 項目`)); console.log(chalk.green(`📋 工作表名稱: ${result.sheetName}`)); console.log(chalk.cyan(`🔗 工作表連結: ${result.url}`)); console.log(chalk.yellow('\n💡 請記得填寫 Area、Iteration、BacklogLink、AssignedTo 和 MoSCoW 欄位')); } catch (error) { if (spinner) { spinner.fail('執行失敗'); } console.error(chalk.red('❌ 錯誤:'), error.message); process.exit(1); } }); program.parse();