skill-deliverable.mjs 2.4 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970
  1. #!/usr/bin/env node
  2. /**
  3. * skill-deliverable CLI — 交付物自动上报
  4. * Usage:
  5. * skill-deliverable check # 检查容器身份+凭据
  6. * skill-deliverable report ... # 上报交付物
  7. * skill-deliverable list # 列出上报记录
  8. * skill-deliverable init # 初始化凭据
  9. */
  10. import { resolveAgentId, resolveSessionToken, report, list } from '../lib/index.mjs';
  11. const [cmd, ...args] = process.argv.slice(2);
  12. switch (cmd) {
  13. case 'check': {
  14. const agentId = resolveAgentId();
  15. const token = resolveSessionToken();
  16. console.log(JSON.stringify({
  17. agentId: agentId || '(缺失)',
  18. sessionToken: token ? token.slice(0, 12) + '...' : '(缺失)',
  19. status: (agentId && token) ? 'ready' : 'incomplete',
  20. hostname: require('os').hostname(),
  21. }, null, 2));
  22. break;
  23. }
  24. case 'report': {
  25. const title = getArg('--title');
  26. const summary = getArg('--summary') || '';
  27. const project = getArg('--project') || '';
  28. const artifacts = parseArg('--artifacts') || [];
  29. const tags = parseArg('--tags') || [];
  30. if (!title) { console.error('--title 必填'); process.exit(1); }
  31. const r = await report({ agentId: resolveAgentId(), title, summary, project, artifacts, tags });
  32. console.log(JSON.stringify(r, null, 2));
  33. break;
  34. }
  35. case 'list': {
  36. const limit = parseInt(getArg('--limit') || '5', 10);
  37. const items = await list({ limit });
  38. console.log(JSON.stringify(items, null, 2));
  39. break;
  40. }
  41. case 'init': {
  42. console.log('→ 凭据自举:尝试从 ~/.fmode/ 或 env 读取...');
  43. const token = resolveSessionToken();
  44. if (token) {
  45. console.log('✅ 已有 sessionToken,无需初始化');
  46. } else {
  47. console.error('❌ 无 sessionToken。请设置 FMODE_SESSION_TOKEN 或登录 FMODE Studio');
  48. process.exit(1);
  49. }
  50. break;
  51. }
  52. default:
  53. console.log(`用法: skill-deliverable <check|report|list|init>
  54. check 检查容器身份+凭据状态
  55. report 上报交付物 (--title <必填> --summary --project --artifacts --tags)
  56. list 最近上报记录 (--limit)
  57. init 初始化凭据`);
  58. }
  59. function getArg(name) {
  60. const i = args.indexOf(name);
  61. return i >= 0 ? args[i + 1] : undefined;
  62. }
  63. function parseArg(name) {
  64. const v = getArg(name);
  65. if (!v) return undefined;
  66. try { return JSON.parse(v); } catch { return v.split(','); }
  67. }