const assert = require('assert/strict'); const fs = require('fs'); const os = require('os'); const path = require('path'); const tempDir = fs.mkdtempSync(path.join(os.tmpdir(), 'qiwei-goal-smoke-')); process.env.QIWEI_OUTPUTS_DIR = tempDir; const { qiweiGoalCreatePlan, qiweiGoalGet, qiweiGoalUpdateTask, qiweiGoalImportMeetingActions, } = require('../mcp/src/tools/qiwei-goal-management-run'); async function main() { try { const created = await qiweiGoalCreatePlan({ title: '企微智能办公上线', objective: '让客户可以使用会议、目标推进和智能客服能力', owner: '项目负责人', deadline: '2026-08-31', acceptance: '三类核心场景全部通过验收', milestones: [{ title: '客户试用', deadline: '2026-08-15', tasks: [{ title: '完成客户培训', owner: '实施顾问', deadline: '2026-08-10', acceptance: '培训签到和反馈完成' }], }], }); assert.equal(created.status, 'ok'); assert.equal(created.summary.taskCount, 1); assert.equal(created.summary.progress, 0); assert.equal(created.files.length, 1); const goalId = created.summary.goalId; const taskId = created.data.plan.milestones[0].tasks[0].id; const imported = await qiweiGoalImportMeetingActions({ goalId, meetingTitle: '客户试用推进会', meetingDate: '2026-07-16', actions: [ { title: '整理试用账号', owner: '产品经理', deadline: '2026-07-20' }, { title: '确认第二轮演示时间' }, ], }); assert.equal(imported.status, 'ok'); assert.equal(imported.summary.imported, 2); assert.equal(imported.summary.needsConfirmation, 1); const updated = await qiweiGoalUpdateTask({ goalId, taskId, status: 'done', note: '培训已完成' }); assert.equal(updated.status, 'ok'); assert.equal(updated.summary.done, 1); assert.equal(updated.summary.progress, 33); const detail = await qiweiGoalGet({ goalId }); assert.equal(detail.status, 'ok'); assert.equal(detail.data.plan.milestones.length, 2); assert.equal(detail.summary.taskCount, 3); assert(fs.existsSync(path.join(tempDir, 'goals', 'plans.json'))); process.stdout.write(`${JSON.stringify({ status: 'ok', checks: 4, progress: detail.summary.progress }, null, 2)}\n`); } finally { fs.rmSync(tempDir, { recursive: true, force: true }); } } main().catch(error => { process.stderr.write(`${error.stack || error.message}\n`); process.exitCode = 1; });