verify-session-task.mjs 2.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960
  1. #!/usr/bin/env node
  2. /**
  3. * 验证容器是否已上报会话级 `task` 字段(2026-11-11)
  4. *
  5. * 用途:App 顶栏要显示「本会话在做什么」,依赖 `currentSessions[].task`。
  6. * 这个脚本直接回读云端,比看容器自述可靠。
  7. *
  8. * 用法:node scripts/verify-session-task.mjs
  9. */
  10. import { readFileSync } from 'node:fs';
  11. import { homedir } from 'node:os';
  12. import { join } from 'node:path';
  13. const F = 'https://server.fmode.cn/api/functions';
  14. const AGENT = 'agent-node-lj-test';
  15. const tok = JSON.parse(readFileSync(join(homedir(), '.fmode/config/user.json'), 'utf8')).sessionToken;
  16. const r = await fetch(F, {
  17. method: 'POST',
  18. headers: { 'Content-Type': 'application/json' },
  19. body: JSON.stringify({ id: 'xlosi3m46q', token: tok, params: { agentId: AGENT } }),
  20. });
  21. const j = await r.json();
  22. const a = j.agent ?? j.result ?? j;
  23. const ex = typeof a.extra === 'string' ? JSON.parse(a.extra) : a.extra;
  24. const list = ex?.currentSessions ?? [];
  25. console.log('=== 容器上报的 currentSessions ===\n');
  26. if (!list.length) {
  27. console.log('⚠️ 列表为空 —— 容器可能没有活动会话,先发一条消息再跑本脚本');
  28. process.exit(1);
  29. }
  30. for (const s of list) {
  31. console.log(` status = ${s.status}`);
  32. console.log(` key = ${s.sessionKey}`);
  33. console.log(` userId = ${s.userId ?? '(无)'}`);
  34. console.log(` task = ${s.task ?? '(无)'}`);
  35. console.log(` 字段 = ${Object.keys(s).sort().join(', ')}`);
  36. console.log('');
  37. }
  38. console.log('=== 判定 ===');
  39. const hasField = list.some((s) => 'task' in s);
  40. const running = list.filter((s) => s.status === 'running');
  41. const runningWithTask = running.filter((s) => typeof s.task === 'string' && s.task.trim());
  42. console.log(`有 task 字段的条目:${list.filter((s) => 'task' in s).length} / ${list.length}`);
  43. console.log(`running 条目:${running.length},其中带 task:${runningWithTask.length}`);
  44. if (!hasField) {
  45. console.log('\n❌ 未发现 task 字段 —— 容器还没改完,或没重启 gateway');
  46. process.exit(1);
  47. }
  48. if (running.length && !runningWithTask.length) {
  49. console.log('\n⚠️ 有 running 会话但没带 task —— 容器需要修');
  50. process.exit(1);
  51. }
  52. console.log('\n✅ task 字段已就绪,App 顶栏可以显示本会话任务名');
  53. if (runningWithTask[0]) console.log(` 示例:${runningWithTask[0].task}`);