gangvy 5 месяцев назад
Родитель
Сommit
ef568e2a1b
96 измененных файлов с 4577 добавлено и 249 удалено
  1. 3 3
      competitor-analysis/competitor-bsr-tracking/api-config.json
  2. 23 1
      competitor-analysis/competitor-discovery/api-config.json
  3. 3 3
      competitor-analysis/competitor-pricing-analysis/api-config.json
  4. 3 3
      competitor-analysis/competitor-product-comparison/api-config.json
  5. 2 1
      deploy-to-openclaw.ps1
  6. 3 3
      douyin/douyin-comment-replies/api-config.json
  7. 3 3
      douyin/douyin-general-search/api-config.json
  8. 3 3
      douyin/douyin-hashtag-search/api-config.json
  9. 3 3
      douyin/douyin-user-profile/api-config.json
  10. 3 3
      douyin/douyin-user-search/api-config.json
  11. 3 3
      douyin/douyin-video-comments/api-config.json
  12. 3 3
      douyin/douyin-video-detail/api-config.json
  13. 5 5
      jimeng/_update-payment-funid.js
  14. 3 3
      jimeng/jimeng-actor-v2/api-config.json
  15. 3 3
      jimeng/jimeng-actor/api-config.json
  16. 3 3
      jimeng/jimeng-clothes-v2/api-config.json
  17. 3 3
      jimeng/jimeng-img-v4-goods/api-config.json
  18. 3 3
      jimeng/jimeng-img-v4-pod/api-config.json
  19. 3 3
      jimeng/jimeng-img-v4/api-config.json
  20. 3 3
      jimeng/jimeng-img2img-v3/api-config.json
  21. 3 3
      jimeng/jimeng-inpaint/api-config.json
  22. 3 3
      jimeng/jimeng-oh-detect/api-config.json
  23. 3 3
      jimeng/jimeng-oh-generate/api-config.json
  24. 3 3
      jimeng/jimeng-oh-identify/api-config.json
  25. 3 3
      jimeng/jimeng-oh-query/api-config.json
  26. 3 3
      jimeng/jimeng-super-resolution/api-config.json
  27. 3 3
      jimeng/jimeng-task-query/api-config.json
  28. 3 3
      jimeng/jimeng-text2img-v3/api-config.json
  29. 3 3
      jimeng/jimeng-text2img-v31/api-config.json
  30. 3 3
      jimeng/jimeng-video-v3-1080p/api-config.json
  31. 3 3
      jimeng/jimeng-video-v3-720p/api-config.json
  32. 3 3
      jimeng/jimeng-video-v3-pro/api-config.json
  33. 3 3
      review-analysis/review-batch-collection/api-config.json
  34. 3 3
      review-analysis/review-highlight-extraction/api-config.json
  35. 3 3
      review-analysis/review-keyword-cloud/api-config.json
  36. 3 3
      review-analysis/review-pain-point-extraction/api-config.json
  37. 3 3
      review-analysis/review-sentiment-analysis/api-config.json
  38. 64 0
      scripts/mock-balance-server.js
  39. 293 0
      scripts/skill-executor.js
  40. 61 0
      scripts/test-balance-check.js
  41. 3 3
      social-media/instagram-search/api-config.json
  42. 3 3
      social-media/instagram-user-info/api-config.json
  43. 3 3
      social-media/instagram-user-posts/api-config.json
  44. 3 3
      social-media/tiktok-hashtag-detail/api-config.json
  45. 3 3
      social-media/tiktok-hashtag-videos/api-config.json
  46. 3 3
      social-media/tiktok-user-posts/api-config.json
  47. 3 3
      social-media/tiktok-user-profile/api-config.json
  48. 3 3
      social-media/tiktok-user-search/api-config.json
  49. 3 3
      social-media/tiktok-video-comments/api-config.json
  50. 3 3
      social-media/tiktok-video-detail/api-config.json
  51. 3 3
      social-media/tiktok-video-search/api-config.json
  52. 3 3
      social-voc/instagram-brand-voc/api-config.json
  53. 3 3
      social-voc/social-trend-analysis/api-config.json
  54. 3 3
      social-voc/tiktok-brand-voc/api-config.json
  55. 3 3
      social-voc/tiktok-category-voc/api-config.json
  56. 26 1
      synthesis/brand-profile/SKILL.md
  57. 3 3
      synthesis/brand-profile/api-config.json
  58. 24 1
      synthesis/category-landscape/SKILL.md
  59. 3 3
      synthesis/category-landscape/api-config.json
  60. 48 3
      synthesis/html-report-generator/SKILL.md
  61. 5 5
      synthesis/html-report-generator/api-config.json
  62. 3 3
      synthesis/product-deep-analysis/api-config.json
  63. 22 1
      synthesis/user-persona/SKILL.md
  64. 3 3
      synthesis/user-persona/api-config.json
  65. 86 29
      synthesis/voc-proposal/SKILL.md
  66. 5 5
      synthesis/voc-proposal/api-config.json
  67. 64 0
      test/test-billing/SKILL.md
  68. 95 0
      test/test-billing/api-config.json
  69. 2 2
      video-creation/transcript-to-video/api-config.json
  70. 3 3
      voc/asin-reverse-keywords/api-config.json
  71. 3 3
      voc/asin-sales-volume/api-config.json
  72. 3 3
      voc/category-products/api-config.json
  73. 3 3
      voc/category-tree/api-config.json
  74. 3 3
      voc/keyword-product-ranking/api-config.json
  75. 3 3
      voc/keyword-search-trend/api-config.json
  76. 3 3
      voc/keyword-search/api-config.json
  77. 3 3
      voc/product-detail-query/api-config.json
  78. 3 3
      voc/product-monitor/api-config.json
  79. 3 3
      voc/product-reviews-query/api-config.json
  80. 3 3
      voc/product-search/api-config.json
  81. 3 3
      voc/similar-products/api-config.json
  82. 273 0
      workshop/brand-context-builder/SKILL.md
  83. 140 0
      workshop/brand-context-builder/api-config.json
  84. 98 0
      workshop/memory-templates/analysis-request.json
  85. 24 0
      workshop/memory-templates/brand-context.json
  86. 69 0
      workshop/memory-templates/calibration-notes.json
  87. 67 0
      workshop/memory-templates/stage-1-output.json
  88. 72 0
      workshop/memory-templates/stage-2-output.json
  89. 71 0
      workshop/memory-templates/stage-3-output.json
  90. 119 0
      workshop/memory-templates/stage-4-output.json
  91. 87 0
      workshop/memory-templates/stage-5-output.json
  92. 85 0
      workshop/memory-templates/workshop-progress.json
  93. 333 0
      workshop/product-analysis-playbook.md
  94. 654 0
      workshop/synthesis-prompts.md
  95. 376 0
      workshop/voc-report-schema-spec.md
  96. 1089 0
      workshop/workshop-voc-playbook.md

+ 3 - 3
competitor-analysis/competitor-bsr-tracking/api-config.json

@@ -1,4 +1,4 @@
-{
+{
   "name": "competitor-bsr-tracking",
   "displayName": "竞品BSR排名追踪",
   "description": "追踪竞品BSR/销量/价格变化趋势,生成增长路径分析和风险预警汇总",
@@ -158,7 +158,7 @@
     "resolutionOrder": ["configFile", "currentToken"],
     "onMissing": {
       "action": "showPaymentQR",
-      "qrCodeUrl": "https://payment.brainhack.cn/apig-pay.html?user={{user}}&apigid={{apigid}}&fun_id=HOkkX72PMF",
+      "qrCodeUrl": "https://pwa.fmode.cn/apig-pay.html?user={{user}}&apigid={{apigid}}&fun_id=HOkkX72PMF",
       "paymentCheckEndpoint": "https://server.fmode.cn/api/apig/getApig",
       "pollingIntervalMs": 3000,
       "pollingTimeoutMs": 300000,
@@ -168,7 +168,7 @@
     },
     "onBalanceInsufficient": {
       "action": "showPaymentQR",
-      "qrCodeUrl": "https://payment.brainhack.cn/apig-pay.html?user={{user}}&apigid={{apigid}}&fun_id=HOkkX72PMF",
+      "qrCodeUrl": "https://pwa.fmode.cn/apig-pay.html?user={{user}}&apigid={{apigid}}&fun_id=HOkkX72PMF",
       "paymentCheckEndpoint": "https://server.fmode.cn/api/apig/getApig",
       "pollingIntervalMs": 3000,
       "pollingTimeoutMs": 300000,

+ 23 - 1
competitor-analysis/competitor-discovery/api-config.json

@@ -1,4 +1,4 @@
-{
+{
   "name": "competitor-discovery",
   "displayName": "竞品发现与筛选",
   "description": "根据品类关键词和自身品牌信息,自动发现并筛选直接竞品",
@@ -211,6 +211,28 @@
   "tokenConfig": {
     "type": "bearer",
     "configFile": "~/.openclaw/voc-credentials.json",
+    "tokenField": "vocToken",
+    "currentToken": "r:858b3ee92314d5447d1fc3cdc10462d7",
+    "resolutionOrder": ["configFile", "currentToken"],
+    "onMissing": {
+      "action": "showPaymentQR",
+      "qrCodeUrl": "https://pwa.fmode.cn/apig-pay.html?user={{user}}&apigid={{apigid}}&fun_id=HOkkX72PMF",
+      "paymentCheckEndpoint": "https://server.fmode.cn/api/apig/getApig",
+      "pollingIntervalMs": 3000,
+      "pollingTimeoutMs": 300000,
+      "onPaymentSuccess": "retrySkillWithNewToken",
+      "title": "扫码开通 VOC-AI 数据服务",
+      "message": "请扫描下方二维码完成支付,支付成功后将自动获取 Token 并继续执行。"
+    },
+    "onBalanceInsufficient": {
+      "action": "showPaymentQR",
+      "qrCodeUrl": "https://pwa.fmode.cn/apig-pay.html?user={{user}}&apigid={{apigid}}&fun_id=HOkkX72PMF",
+      "paymentCheckEndpoint": "https://server.fmode.cn/api/apig/getApig",
+      "pollingIntervalMs": 3000,
+      "pollingTimeoutMs": 300000,
+      "onPaymentSuccess": "retrySkillWithNewToken",
+      "title": "VOC-AI Token 余额不足,请扫码充值",
+      "message": "当前 Token 余额不足,请扫描二维码充值,支付完成后将自动继续执行。"
     }
   },
   "errorHandling": {

+ 3 - 3
competitor-analysis/competitor-pricing-analysis/api-config.json

@@ -1,4 +1,4 @@
-{
+{
   "name": "competitor-pricing-analysis",
   "displayName": "竞品定价策略分析",
   "description": "分析竞品定价策略,包括5分位价格带分布、黄金价格带评分、毛利估算、促销建议和盈亏平衡销量分析",
@@ -181,7 +181,7 @@
     "resolutionOrder": ["configFile", "currentToken"],
     "onMissing": {
       "action": "showPaymentQR",
-      "qrCodeUrl": "https://payment.brainhack.cn/apig-pay.html?user={{user}}&apigid={{apigid}}&fun_id=HOkkX72PMF",
+      "qrCodeUrl": "https://pwa.fmode.cn/apig-pay.html?user={{user}}&apigid={{apigid}}&fun_id=HOkkX72PMF",
       "paymentCheckEndpoint": "https://server.fmode.cn/api/apig/getApig",
       "pollingIntervalMs": 3000,
       "pollingTimeoutMs": 300000,
@@ -191,7 +191,7 @@
     },
     "onBalanceInsufficient": {
       "action": "showPaymentQR",
-      "qrCodeUrl": "https://payment.brainhack.cn/apig-pay.html?user={{user}}&apigid={{apigid}}&fun_id=HOkkX72PMF",
+      "qrCodeUrl": "https://pwa.fmode.cn/apig-pay.html?user={{user}}&apigid={{apigid}}&fun_id=HOkkX72PMF",
       "paymentCheckEndpoint": "https://server.fmode.cn/api/apig/getApig",
       "pollingIntervalMs": 3000,
       "pollingTimeoutMs": 300000,

+ 3 - 3
competitor-analysis/competitor-product-comparison/api-config.json

@@ -1,4 +1,4 @@
-{
+{
   "name": "competitor-product-comparison",
   "displayName": "竞品产品对比",
   "description": "对自身产品与竞品进行多维度横向对比,生成5维健康度仪表盘并标注机会/风险标签",
@@ -168,7 +168,7 @@
     "resolutionOrder": ["configFile", "currentToken"],
     "onMissing": {
       "action": "showPaymentQR",
-      "qrCodeUrl": "https://payment.brainhack.cn/apig-pay.html?user={{user}}&apigid={{apigid}}&fun_id=HOkkX72PMF",
+      "qrCodeUrl": "https://pwa.fmode.cn/apig-pay.html?user={{user}}&apigid={{apigid}}&fun_id=HOkkX72PMF",
       "paymentCheckEndpoint": "https://server.fmode.cn/api/apig/getApig",
       "pollingIntervalMs": 3000,
       "pollingTimeoutMs": 300000,
@@ -178,7 +178,7 @@
     },
     "onBalanceInsufficient": {
       "action": "showPaymentQR",
-      "qrCodeUrl": "https://payment.brainhack.cn/apig-pay.html?user={{user}}&apigid={{apigid}}&fun_id=HOkkX72PMF",
+      "qrCodeUrl": "https://pwa.fmode.cn/apig-pay.html?user={{user}}&apigid={{apigid}}&fun_id=HOkkX72PMF",
       "paymentCheckEndpoint": "https://server.fmode.cn/api/apig/getApig",
       "pollingIntervalMs": 3000,
       "pollingTimeoutMs": 300000,

+ 2 - 1
deploy-to-openclaw.ps1

@@ -24,7 +24,8 @@ $categories = @(
     "social-voc",
     "douyin",
     "video-creation",
-    "jimeng"
+    "jimeng",
+    "test"
 )
 
 Write-Host "========================================"

+ 3 - 3
douyin/douyin-comment-replies/api-config.json

@@ -1,4 +1,4 @@
-{
+{
   "name": "douyin-comment-replies",
   "displayName": "抖音评论回复查询",
   "description": "获取抖音指定视频中某条评论的全部回复,适用于深度舆情追踪、争议点分析、用户回复习惯研究。常配合 douyin-video-comments 使用。",
@@ -109,7 +109,7 @@
     "resolutionOrder": ["configFile", "currentToken"],
     "onMissing": {
       "action": "showPaymentQR",
-      "qrCodeUrl": "https://payment.brainhack.cn/apig-pay.html?user={{user}}&apigid={{apigid}}&fun_id=HOkkX72PMF",
+      "qrCodeUrl": "https://pwa.fmode.cn/apig-pay.html?user={{user}}&apigid={{apigid}}&fun_id=HOkkX72PMF",
       "paymentCheckEndpoint": "https://server.fmode.cn/api/apig/getApig",
       "pollingIntervalMs": 3000,
       "pollingTimeoutMs": 300000,
@@ -119,7 +119,7 @@
     },
     "onBalanceInsufficient": {
       "action": "showPaymentQR",
-      "qrCodeUrl": "https://payment.brainhack.cn/apig-pay.html?user={{user}}&apigid={{apigid}}&fun_id=HOkkX72PMF",
+      "qrCodeUrl": "https://pwa.fmode.cn/apig-pay.html?user={{user}}&apigid={{apigid}}&fun_id=HOkkX72PMF",
       "paymentCheckEndpoint": "https://server.fmode.cn/api/apig/getApig",
       "pollingIntervalMs": 3000,
       "pollingTimeoutMs": 300000,

+ 3 - 3
douyin/douyin-general-search/api-config.json

@@ -1,4 +1,4 @@
-{
+{
   "name": "douyin-general-search",
   "displayName": "抖音综合搜索 V2",
   "description": "按关键词在抖音综合搜索,获取相关视频列表及作者/互动数据。适用于品类内容趋势分析、竞品视频监控、VOC素材采集、爆款选题发现。",
@@ -193,7 +193,7 @@
     "resolutionOrder": ["configFile", "currentToken"],
     "onMissing": {
       "action": "showPaymentQR",
-      "qrCodeUrl": "https://payment.brainhack.cn/apig-pay.html?user={{user}}&apigid={{apigid}}&fun_id=HOkkX72PMF",
+      "qrCodeUrl": "https://pwa.fmode.cn/apig-pay.html?user={{user}}&apigid={{apigid}}&fun_id=HOkkX72PMF",
       "paymentCheckEndpoint": "https://server.fmode.cn/api/apig/getApig",
       "pollingIntervalMs": 3000,
       "pollingTimeoutMs": 300000,
@@ -203,7 +203,7 @@
     },
     "onBalanceInsufficient": {
       "action": "showPaymentQR",
-      "qrCodeUrl": "https://payment.brainhack.cn/apig-pay.html?user={{user}}&apigid={{apigid}}&fun_id=HOkkX72PMF",
+      "qrCodeUrl": "https://pwa.fmode.cn/apig-pay.html?user={{user}}&apigid={{apigid}}&fun_id=HOkkX72PMF",
       "paymentCheckEndpoint": "https://server.fmode.cn/api/apig/getApig",
       "pollingIntervalMs": 3000,
       "pollingTimeoutMs": 300000,

+ 3 - 3
douyin/douyin-hashtag-search/api-config.json

@@ -1,4 +1,4 @@
-{
+{
   "name": "douyin-hashtag-search",
   "displayName": "抖音话题搜索 V2",
   "description": "按关键词搜索抖音话题(挑战/#标签),返回话题浏览量、参与人数、话题描述等。适用于品类话题热度分析、竞品话题监控、内容营销切入点发现。",
@@ -151,7 +151,7 @@
     "resolutionOrder": ["configFile", "currentToken"],
     "onMissing": {
       "action": "showPaymentQR",
-      "qrCodeUrl": "https://payment.brainhack.cn/apig-pay.html?user={{user}}&apigid={{apigid}}&fun_id=HOkkX72PMF",
+      "qrCodeUrl": "https://pwa.fmode.cn/apig-pay.html?user={{user}}&apigid={{apigid}}&fun_id=HOkkX72PMF",
       "paymentCheckEndpoint": "https://server.fmode.cn/api/apig/getApig",
       "pollingIntervalMs": 3000,
       "pollingTimeoutMs": 300000,
@@ -161,7 +161,7 @@
     },
     "onBalanceInsufficient": {
       "action": "showPaymentQR",
-      "qrCodeUrl": "https://payment.brainhack.cn/apig-pay.html?user={{user}}&apigid={{apigid}}&fun_id=HOkkX72PMF",
+      "qrCodeUrl": "https://pwa.fmode.cn/apig-pay.html?user={{user}}&apigid={{apigid}}&fun_id=HOkkX72PMF",
       "paymentCheckEndpoint": "https://server.fmode.cn/api/apig/getApig",
       "pollingIntervalMs": 3000,
       "pollingTimeoutMs": 300000,

+ 3 - 3
douyin/douyin-user-profile/api-config.json

@@ -1,4 +1,4 @@
-{
+{
   "name": "douyin-user-profile",
   "displayName": "抖音用户信息查询",
   "description": "根据 sec_user_id 获取抖音用户完整主页数据,包括粉丝数、总获赞数、作品数、个人简介、认证信息等。适用于KOL档案建立、竞品品牌账号分析、达人粉丝画像评估。",
@@ -90,7 +90,7 @@
     "resolutionOrder": ["configFile", "currentToken"],
     "onMissing": {
       "action": "showPaymentQR",
-      "qrCodeUrl": "https://payment.brainhack.cn/apig-pay.html?user={{user}}&apigid={{apigid}}&fun_id=HOkkX72PMF",
+      "qrCodeUrl": "https://pwa.fmode.cn/apig-pay.html?user={{user}}&apigid={{apigid}}&fun_id=HOkkX72PMF",
       "paymentCheckEndpoint": "https://server.fmode.cn/api/apig/getApig",
       "pollingIntervalMs": 3000,
       "pollingTimeoutMs": 300000,
@@ -100,7 +100,7 @@
     },
     "onBalanceInsufficient": {
       "action": "showPaymentQR",
-      "qrCodeUrl": "https://payment.brainhack.cn/apig-pay.html?user={{user}}&apigid={{apigid}}&fun_id=HOkkX72PMF",
+      "qrCodeUrl": "https://pwa.fmode.cn/apig-pay.html?user={{user}}&apigid={{apigid}}&fun_id=HOkkX72PMF",
       "paymentCheckEndpoint": "https://server.fmode.cn/api/apig/getApig",
       "pollingIntervalMs": 3000,
       "pollingTimeoutMs": 300000,

+ 3 - 3
douyin/douyin-user-search/api-config.json

@@ -1,4 +1,4 @@
-{
+{
   "name": "douyin-user-search",
   "displayName": "抖音用户搜索 V2",
   "description": "按关键词搜索抖音达人/用户,返回匹配的账号列表及基础数据。适用于红人库建设、品类达人批量筛选、竞品代言人定位。",
@@ -113,7 +113,7 @@
     "resolutionOrder": ["configFile", "currentToken"],
     "onMissing": {
       "action": "showPaymentQR",
-      "qrCodeUrl": "https://payment.brainhack.cn/apig-pay.html?user={{user}}&apigid={{apigid}}&fun_id=HOkkX72PMF",
+      "qrCodeUrl": "https://pwa.fmode.cn/apig-pay.html?user={{user}}&apigid={{apigid}}&fun_id=HOkkX72PMF",
       "paymentCheckEndpoint": "https://server.fmode.cn/api/apig/getApig",
       "pollingIntervalMs": 3000,
       "pollingTimeoutMs": 300000,
@@ -123,7 +123,7 @@
     },
     "onBalanceInsufficient": {
       "action": "showPaymentQR",
-      "qrCodeUrl": "https://payment.brainhack.cn/apig-pay.html?user={{user}}&apigid={{apigid}}&fun_id=HOkkX72PMF",
+      "qrCodeUrl": "https://pwa.fmode.cn/apig-pay.html?user={{user}}&apigid={{apigid}}&fun_id=HOkkX72PMF",
       "paymentCheckEndpoint": "https://server.fmode.cn/api/apig/getApig",
       "pollingIntervalMs": 3000,
       "pollingTimeoutMs": 300000,

+ 3 - 3
douyin/douyin-video-comments/api-config.json

@@ -1,4 +1,4 @@
-{
+{
   "name": "douyin-video-comments",
   "displayName": "抖音视频评论查询",
   "description": "获取抖音视频的用户评论列表,支持翻页。直接反映用户对产品/内容的真实评价,是VOC情感分析、痛点挖掘、需求发现的核心数据源。",
@@ -118,7 +118,7 @@
     "resolutionOrder": ["configFile", "currentToken"],
     "onMissing": {
       "action": "showPaymentQR",
-      "qrCodeUrl": "https://payment.brainhack.cn/apig-pay.html?user={{user}}&apigid={{apigid}}&fun_id=HOkkX72PMF",
+      "qrCodeUrl": "https://pwa.fmode.cn/apig-pay.html?user={{user}}&apigid={{apigid}}&fun_id=HOkkX72PMF",
       "paymentCheckEndpoint": "https://server.fmode.cn/api/apig/getApig",
       "pollingIntervalMs": 3000,
       "pollingTimeoutMs": 300000,
@@ -128,7 +128,7 @@
     },
     "onBalanceInsufficient": {
       "action": "showPaymentQR",
-      "qrCodeUrl": "https://payment.brainhack.cn/apig-pay.html?user={{user}}&apigid={{apigid}}&fun_id=HOkkX72PMF",
+      "qrCodeUrl": "https://pwa.fmode.cn/apig-pay.html?user={{user}}&apigid={{apigid}}&fun_id=HOkkX72PMF",
       "paymentCheckEndpoint": "https://server.fmode.cn/api/apig/getApig",
       "pollingIntervalMs": 3000,
       "pollingTimeoutMs": 300000,

+ 3 - 3
douyin/douyin-video-detail/api-config.json

@@ -1,4 +1,4 @@
-{
+{
   "name": "douyin-video-detail",
   "displayName": "抖音单个作品数据查询 V3",
   "description": "根据视频ID获取抖音单个作品完整数据(播放量/点赞/评论/分享/作者/话题标签等),V3版本无版权限制。适用于爆款视频深度分析、竞品内容解析、KOL内容效果评估。",
@@ -91,7 +91,7 @@
     "resolutionOrder": ["configFile", "currentToken"],
     "onMissing": {
       "action": "showPaymentQR",
-      "qrCodeUrl": "https://payment.brainhack.cn/apig-pay.html?user={{user}}&apigid={{apigid}}&fun_id=HOkkX72PMF",
+      "qrCodeUrl": "https://pwa.fmode.cn/apig-pay.html?user={{user}}&apigid={{apigid}}&fun_id=HOkkX72PMF",
       "paymentCheckEndpoint": "https://server.fmode.cn/api/apig/getApig",
       "pollingIntervalMs": 3000,
       "pollingTimeoutMs": 300000,
@@ -101,7 +101,7 @@
     },
     "onBalanceInsufficient": {
       "action": "showPaymentQR",
-      "qrCodeUrl": "https://payment.brainhack.cn/apig-pay.html?user={{user}}&apigid={{apigid}}&fun_id=HOkkX72PMF",
+      "qrCodeUrl": "https://pwa.fmode.cn/apig-pay.html?user={{user}}&apigid={{apigid}}&fun_id=HOkkX72PMF",
       "paymentCheckEndpoint": "https://server.fmode.cn/api/apig/getApig",
       "pollingIntervalMs": 3000,
       "pollingTimeoutMs": 300000,

+ 5 - 5
jimeng/_update-payment-funid.js

@@ -1,4 +1,4 @@
-/**
+/**
  * 批量更新即梦 skill 的 qrCodeUrl,加入 fun_id 参数
  * 
  * 使用方法:
@@ -8,9 +8,9 @@
  *   node _update-payment-funid.js abc123def456
  * 
  * 这会将所有 jimeng skill 的 qrCodeUrl 从:
- *   https://payment.brainhack.cn/apig-pay.html?authid=T0iOotHcDX
+ *   https://pwa.fmode.cn/apig-pay.html?authid=T0iOotHcDX
  * 更新为:
- *   https://payment.brainhack.cn/apig-pay.html?authid=T0iOotHcDX&fun_id=abc123def456
+ *   https://pwa.fmode.cn/apig-pay.html?authid=T0iOotHcDX&fun_id=abc123def456
  * 
  * 同时也会更新 voc 等其他分类下的 skill(如果有相同 URL 的话)
  */
@@ -24,8 +24,8 @@ if (!funId) {
   process.exit(1);
 }
 
-const OLD_URL = 'https://payment.brainhack.cn/apig-pay.html?authid=T0iOotHcDX';
-const NEW_URL = `https://payment.brainhack.cn/apig-pay.html?authid=T0iOotHcDX&fun_id=${funId}`;
+const OLD_URL = 'https://pwa.fmode.cn/apig-pay.html?authid=T0iOotHcDX';
+const NEW_URL = `https://pwa.fmode.cn/apig-pay.html?authid=T0iOotHcDX&fun_id=${funId}`;
 
 // 扫描所有分类目录
 const rootDir = path.resolve(__dirname, '..');

+ 3 - 3
jimeng/jimeng-actor-v2/api-config.json

@@ -1,4 +1,4 @@
-{
+{
   "name": "jimeng-actor-v2",
   "displayName": "动作模仿2.0",
   "description": "新一代视频动作模仿大模型,支持多人驱动和非真人驱动视频。",
@@ -93,7 +93,7 @@
     ],
     "onMissing": {
       "action": "showPaymentQR",
-      "qrCodeUrl": "https://payment.brainhack.cn/apig-pay.html?user={{user}}&apigid={{apigid}}&fun_id=HOkkX72PMF",
+      "qrCodeUrl": "https://pwa.fmode.cn/apig-pay.html?user={{user}}&apigid={{apigid}}&fun_id=HOkkX72PMF",
       "paymentCheckEndpoint": "https://server.fmode.cn/api/apig/getApig",
       "pollingIntervalMs": 3000,
       "pollingTimeoutMs": 300000,
@@ -103,7 +103,7 @@
     },
     "onBalanceInsufficient": {
       "action": "showPaymentQR",
-      "qrCodeUrl": "https://payment.brainhack.cn/apig-pay.html?user={{user}}&apigid={{apigid}}&fun_id=HOkkX72PMF",
+      "qrCodeUrl": "https://pwa.fmode.cn/apig-pay.html?user={{user}}&apigid={{apigid}}&fun_id=HOkkX72PMF",
       "paymentCheckEndpoint": "https://server.fmode.cn/api/apig/getApig",
       "pollingIntervalMs": 3000,
       "pollingTimeoutMs": 300000,

+ 3 - 3
jimeng/jimeng-actor/api-config.json

@@ -1,4 +1,4 @@
-{
+{
   "name": "jimeng-actor",
   "displayName": "动作模仿1.0",
   "description": "输入一张图片和一段模版视频,将图片中的人物按照视频的动作/表情/口型驱动起来。",
@@ -83,7 +83,7 @@
     ],
     "onMissing": {
       "action": "showPaymentQR",
-      "qrCodeUrl": "https://payment.brainhack.cn/apig-pay.html?user={{user}}&apigid={{apigid}}&fun_id=HOkkX72PMF",
+      "qrCodeUrl": "https://pwa.fmode.cn/apig-pay.html?user={{user}}&apigid={{apigid}}&fun_id=HOkkX72PMF",
       "paymentCheckEndpoint": "https://server.fmode.cn/api/apig/getApig",
       "pollingIntervalMs": 3000,
       "pollingTimeoutMs": 300000,
@@ -93,7 +93,7 @@
     },
     "onBalanceInsufficient": {
       "action": "showPaymentQR",
-      "qrCodeUrl": "https://payment.brainhack.cn/apig-pay.html?user={{user}}&apigid={{apigid}}&fun_id=HOkkX72PMF",
+      "qrCodeUrl": "https://pwa.fmode.cn/apig-pay.html?user={{user}}&apigid={{apigid}}&fun_id=HOkkX72PMF",
       "paymentCheckEndpoint": "https://server.fmode.cn/api/apig/getApig",
       "pollingIntervalMs": 3000,
       "pollingTimeoutMs": 300000,

+ 3 - 3
jimeng/jimeng-clothes-v2/api-config.json

@@ -1,4 +1,4 @@
-{
+{
   "name": "jimeng-clothes-v2",
   "displayName": "图片换装V2",
   "description": "输入模特图和上装/下装图URL,智能完成虚拟换装。",
@@ -145,7 +145,7 @@
     ],
     "onMissing": {
       "action": "showPaymentQR",
-      "qrCodeUrl": "https://payment.brainhack.cn/apig-pay.html?user={{user}}&apigid={{apigid}}&fun_id=HOkkX72PMF",
+      "qrCodeUrl": "https://pwa.fmode.cn/apig-pay.html?user={{user}}&apigid={{apigid}}&fun_id=HOkkX72PMF",
       "paymentCheckEndpoint": "https://server.fmode.cn/api/apig/getApig",
       "pollingIntervalMs": 3000,
       "pollingTimeoutMs": 300000,
@@ -155,7 +155,7 @@
     },
     "onBalanceInsufficient": {
       "action": "showPaymentQR",
-      "qrCodeUrl": "https://payment.brainhack.cn/apig-pay.html?user={{user}}&apigid={{apigid}}&fun_id=HOkkX72PMF",
+      "qrCodeUrl": "https://pwa.fmode.cn/apig-pay.html?user={{user}}&apigid={{apigid}}&fun_id=HOkkX72PMF",
       "paymentCheckEndpoint": "https://server.fmode.cn/api/apig/getApig",
       "pollingIntervalMs": 3000,
       "pollingTimeoutMs": 300000,

+ 3 - 3
jimeng/jimeng-img-v4-goods/api-config.json

@@ -1,4 +1,4 @@
-{
+{
   "name": "jimeng-img-v4-goods",
   "displayName": "图片生成4.0-商品提取",
   "description": "智能提取商品主体并匹配最佳展示视角,支持服装、鞋包、饰品、家具、日用品。",
@@ -111,7 +111,7 @@
     ],
     "onMissing": {
       "action": "showPaymentQR",
-      "qrCodeUrl": "https://payment.brainhack.cn/apig-pay.html?user={{user}}&apigid={{apigid}}&fun_id=HOkkX72PMF",
+      "qrCodeUrl": "https://pwa.fmode.cn/apig-pay.html?user={{user}}&apigid={{apigid}}&fun_id=HOkkX72PMF",
       "paymentCheckEndpoint": "https://server.fmode.cn/api/apig/getApig",
       "pollingIntervalMs": 3000,
       "pollingTimeoutMs": 300000,
@@ -121,7 +121,7 @@
     },
     "onBalanceInsufficient": {
       "action": "showPaymentQR",
-      "qrCodeUrl": "https://payment.brainhack.cn/apig-pay.html?user={{user}}&apigid={{apigid}}&fun_id=HOkkX72PMF",
+      "qrCodeUrl": "https://pwa.fmode.cn/apig-pay.html?user={{user}}&apigid={{apigid}}&fun_id=HOkkX72PMF",
       "paymentCheckEndpoint": "https://server.fmode.cn/api/apig/getApig",
       "pollingIntervalMs": 3000,
       "pollingTimeoutMs": 300000,

+ 3 - 3
jimeng/jimeng-img-v4-pod/api-config.json

@@ -1,4 +1,4 @@
-{
+{
   "name": "jimeng-img-v4-pod",
   "displayName": "图片生成4.0-素材提取(POD)",
   "description": "从实物商品中精准提取并矢量化核心图案,生成平面设计图,适用于电商POD场景。",
@@ -115,7 +115,7 @@
     ],
     "onMissing": {
       "action": "showPaymentQR",
-      "qrCodeUrl": "https://payment.brainhack.cn/apig-pay.html?user={{user}}&apigid={{apigid}}&fun_id=HOkkX72PMF",
+      "qrCodeUrl": "https://pwa.fmode.cn/apig-pay.html?user={{user}}&apigid={{apigid}}&fun_id=HOkkX72PMF",
       "paymentCheckEndpoint": "https://server.fmode.cn/api/apig/getApig",
       "pollingIntervalMs": 3000,
       "pollingTimeoutMs": 300000,
@@ -125,7 +125,7 @@
     },
     "onBalanceInsufficient": {
       "action": "showPaymentQR",
-      "qrCodeUrl": "https://payment.brainhack.cn/apig-pay.html?user={{user}}&apigid={{apigid}}&fun_id=HOkkX72PMF",
+      "qrCodeUrl": "https://pwa.fmode.cn/apig-pay.html?user={{user}}&apigid={{apigid}}&fun_id=HOkkX72PMF",
       "paymentCheckEndpoint": "https://server.fmode.cn/api/apig/getApig",
       "pollingIntervalMs": 3000,
       "pollingTimeoutMs": 300000,

+ 3 - 3
jimeng/jimeng-img-v4/api-config.json

@@ -1,4 +1,4 @@
-{
+{
   "name": "jimeng-img-v4",
   "displayName": "即梦图片生成4.0",
   "description": "即梦4.0图片生成,支持文生图、图像编辑及多图组合生成,单次输入最多10张图像,支持4K超高清输出,一次性输出最多15张内容关联图像。",
@@ -150,7 +150,7 @@
     ],
     "onMissing": {
       "action": "showPaymentQR",
-      "qrCodeUrl": "https://payment.brainhack.cn/apig-pay.html?user={{user}}&apigid={{apigid}}&fun_id=HOkkX72PMF",
+      "qrCodeUrl": "https://pwa.fmode.cn/apig-pay.html?user={{user}}&apigid={{apigid}}&fun_id=HOkkX72PMF",
       "paymentCheckEndpoint": "https://server.fmode.cn/api/apig/getApig",
       "pollingIntervalMs": 3000,
       "pollingTimeoutMs": 300000,
@@ -160,7 +160,7 @@
     },
     "onBalanceInsufficient": {
       "action": "showPaymentQR",
-      "qrCodeUrl": "https://payment.brainhack.cn/apig-pay.html?user={{user}}&apigid={{apigid}}&fun_id=HOkkX72PMF",
+      "qrCodeUrl": "https://pwa.fmode.cn/apig-pay.html?user={{user}}&apigid={{apigid}}&fun_id=HOkkX72PMF",
       "paymentCheckEndpoint": "https://server.fmode.cn/api/apig/getApig",
       "pollingIntervalMs": 3000,
       "pollingTimeoutMs": 300000,

+ 3 - 3
jimeng/jimeng-img2img-v3/api-config.json

@@ -1,4 +1,4 @@
-{
+{
   "name": "jimeng-img2img-v3",
   "displayName": "即梦图生图3.0智能参考",
   "description": "基于输入图片+文本指令进行图像编辑,精准执行编辑指令,保持图像内容完整性。",
@@ -103,7 +103,7 @@
     ],
     "onMissing": {
       "action": "showPaymentQR",
-      "qrCodeUrl": "https://payment.brainhack.cn/apig-pay.html?user={{user}}&apigid={{apigid}}&fun_id=HOkkX72PMF",
+      "qrCodeUrl": "https://pwa.fmode.cn/apig-pay.html?user={{user}}&apigid={{apigid}}&fun_id=HOkkX72PMF",
       "paymentCheckEndpoint": "https://server.fmode.cn/api/apig/getApig",
       "pollingIntervalMs": 3000,
       "pollingTimeoutMs": 300000,
@@ -113,7 +113,7 @@
     },
     "onBalanceInsufficient": {
       "action": "showPaymentQR",
-      "qrCodeUrl": "https://payment.brainhack.cn/apig-pay.html?user={{user}}&apigid={{apigid}}&fun_id=HOkkX72PMF",
+      "qrCodeUrl": "https://pwa.fmode.cn/apig-pay.html?user={{user}}&apigid={{apigid}}&fun_id=HOkkX72PMF",
       "paymentCheckEndpoint": "https://server.fmode.cn/api/apig/getApig",
       "pollingIntervalMs": 3000,
       "pollingTimeoutMs": 300000,

+ 3 - 3
jimeng/jimeng-inpaint/api-config.json

@@ -1,4 +1,4 @@
-{
+{
   "name": "jimeng-inpaint",
   "displayName": "交互编辑(局部重绘/消除笔)",
   "description": "通过涂抹选区建立重绘区域,支持局部重绘和消除笔功能。",
@@ -88,7 +88,7 @@
     ],
     "onMissing": {
       "action": "showPaymentQR",
-      "qrCodeUrl": "https://payment.brainhack.cn/apig-pay.html?user={{user}}&apigid={{apigid}}&fun_id=HOkkX72PMF",
+      "qrCodeUrl": "https://pwa.fmode.cn/apig-pay.html?user={{user}}&apigid={{apigid}}&fun_id=HOkkX72PMF",
       "paymentCheckEndpoint": "https://server.fmode.cn/api/apig/getApig",
       "pollingIntervalMs": 3000,
       "pollingTimeoutMs": 300000,
@@ -98,7 +98,7 @@
     },
     "onBalanceInsufficient": {
       "action": "showPaymentQR",
-      "qrCodeUrl": "https://payment.brainhack.cn/apig-pay.html?user={{user}}&apigid={{apigid}}&fun_id=HOkkX72PMF",
+      "qrCodeUrl": "https://pwa.fmode.cn/apig-pay.html?user={{user}}&apigid={{apigid}}&fun_id=HOkkX72PMF",
       "paymentCheckEndpoint": "https://server.fmode.cn/api/apig/getApig",
       "pollingIntervalMs": 3000,
       "pollingTimeoutMs": 300000,

+ 3 - 3
jimeng/jimeng-oh-detect/api-config.json

@@ -1,4 +1,4 @@
-{
+{
   "name": "jimeng-oh-detect",
   "displayName": "数字人v1.5-主体检测",
   "description": "数字人v1.5步骤2:检测图片中的主体并返回mask图(可选步骤)。",
@@ -82,7 +82,7 @@
     ],
     "onMissing": {
       "action": "showPaymentQR",
-      "qrCodeUrl": "https://payment.brainhack.cn/apig-pay.html?user={{user}}&apigid={{apigid}}&fun_id=HOkkX72PMF",
+      "qrCodeUrl": "https://pwa.fmode.cn/apig-pay.html?user={{user}}&apigid={{apigid}}&fun_id=HOkkX72PMF",
       "paymentCheckEndpoint": "https://server.fmode.cn/api/apig/getApig",
       "pollingIntervalMs": 3000,
       "pollingTimeoutMs": 300000,
@@ -92,7 +92,7 @@
     },
     "onBalanceInsufficient": {
       "action": "showPaymentQR",
-      "qrCodeUrl": "https://payment.brainhack.cn/apig-pay.html?user={{user}}&apigid={{apigid}}&fun_id=HOkkX72PMF",
+      "qrCodeUrl": "https://pwa.fmode.cn/apig-pay.html?user={{user}}&apigid={{apigid}}&fun_id=HOkkX72PMF",
       "paymentCheckEndpoint": "https://server.fmode.cn/api/apig/getApig",
       "pollingIntervalMs": 3000,
       "pollingTimeoutMs": 300000,

+ 3 - 3
jimeng/jimeng-oh-generate/api-config.json

@@ -1,4 +1,4 @@
-{
+{
   "name": "jimeng-oh-generate",
   "displayName": "数字人v1.5-视频生成",
   "description": "OmniHuman1.5数字人模型,根据单张图片+音频生成高质量数字人视频。",
@@ -112,7 +112,7 @@
     ],
     "onMissing": {
       "action": "showPaymentQR",
-      "qrCodeUrl": "https://payment.brainhack.cn/apig-pay.html?user={{user}}&apigid={{apigid}}&fun_id=HOkkX72PMF",
+      "qrCodeUrl": "https://pwa.fmode.cn/apig-pay.html?user={{user}}&apigid={{apigid}}&fun_id=HOkkX72PMF",
       "paymentCheckEndpoint": "https://server.fmode.cn/api/apig/getApig",
       "pollingIntervalMs": 3000,
       "pollingTimeoutMs": 300000,
@@ -122,7 +122,7 @@
     },
     "onBalanceInsufficient": {
       "action": "showPaymentQR",
-      "qrCodeUrl": "https://payment.brainhack.cn/apig-pay.html?user={{user}}&apigid={{apigid}}&fun_id=HOkkX72PMF",
+      "qrCodeUrl": "https://pwa.fmode.cn/apig-pay.html?user={{user}}&apigid={{apigid}}&fun_id=HOkkX72PMF",
       "paymentCheckEndpoint": "https://server.fmode.cn/api/apig/getApig",
       "pollingIntervalMs": 3000,
       "pollingTimeoutMs": 300000,

+ 3 - 3
jimeng/jimeng-oh-identify/api-config.json

@@ -1,4 +1,4 @@
-{
+{
   "name": "jimeng-oh-identify",
   "displayName": "数字人v1.5-主体识别",
   "description": "数字人v1.5步骤1:识别图片中是否包含人、类人、拟人等主体。",
@@ -78,7 +78,7 @@
     ],
     "onMissing": {
       "action": "showPaymentQR",
-      "qrCodeUrl": "https://payment.brainhack.cn/apig-pay.html?user={{user}}&apigid={{apigid}}&fun_id=HOkkX72PMF",
+      "qrCodeUrl": "https://pwa.fmode.cn/apig-pay.html?user={{user}}&apigid={{apigid}}&fun_id=HOkkX72PMF",
       "paymentCheckEndpoint": "https://server.fmode.cn/api/apig/getApig",
       "pollingIntervalMs": 3000,
       "pollingTimeoutMs": 300000,
@@ -88,7 +88,7 @@
     },
     "onBalanceInsufficient": {
       "action": "showPaymentQR",
-      "qrCodeUrl": "https://payment.brainhack.cn/apig-pay.html?user={{user}}&apigid={{apigid}}&fun_id=HOkkX72PMF",
+      "qrCodeUrl": "https://pwa.fmode.cn/apig-pay.html?user={{user}}&apigid={{apigid}}&fun_id=HOkkX72PMF",
       "paymentCheckEndpoint": "https://server.fmode.cn/api/apig/getApig",
       "pollingIntervalMs": 3000,
       "pollingTimeoutMs": 300000,

+ 3 - 3
jimeng/jimeng-oh-query/api-config.json

@@ -1,4 +1,4 @@
-{
+{
   "name": "jimeng-oh-query",
   "displayName": "数字人任务查询",
   "description": "查询数字人流程中主体识别和视频生成的任务状态。",
@@ -136,7 +136,7 @@
     ],
     "onMissing": {
       "action": "showPaymentQR",
-      "qrCodeUrl": "https://payment.brainhack.cn/apig-pay.html?user={{user}}&apigid={{apigid}}&fun_id=HOkkX72PMF",
+      "qrCodeUrl": "https://pwa.fmode.cn/apig-pay.html?user={{user}}&apigid={{apigid}}&fun_id=HOkkX72PMF",
       "paymentCheckEndpoint": "https://server.fmode.cn/api/apig/getApig",
       "pollingIntervalMs": 3000,
       "pollingTimeoutMs": 300000,
@@ -146,7 +146,7 @@
     },
     "onBalanceInsufficient": {
       "action": "showPaymentQR",
-      "qrCodeUrl": "https://payment.brainhack.cn/apig-pay.html?user={{user}}&apigid={{apigid}}&fun_id=HOkkX72PMF",
+      "qrCodeUrl": "https://pwa.fmode.cn/apig-pay.html?user={{user}}&apigid={{apigid}}&fun_id=HOkkX72PMF",
       "paymentCheckEndpoint": "https://server.fmode.cn/api/apig/getApig",
       "pollingIntervalMs": 3000,
       "pollingTimeoutMs": 300000,

+ 3 - 3
jimeng/jimeng-super-resolution/api-config.json

@@ -1,4 +1,4 @@
-{
+{
   "name": "jimeng-super-resolution",
   "displayName": "智能超清",
   "description": "基于seedream基模将图像超清到4K/8K,全面提升画面质感。",
@@ -97,7 +97,7 @@
     ],
     "onMissing": {
       "action": "showPaymentQR",
-      "qrCodeUrl": "https://payment.brainhack.cn/apig-pay.html?user={{user}}&apigid={{apigid}}&fun_id=HOkkX72PMF",
+      "qrCodeUrl": "https://pwa.fmode.cn/apig-pay.html?user={{user}}&apigid={{apigid}}&fun_id=HOkkX72PMF",
       "paymentCheckEndpoint": "https://server.fmode.cn/api/apig/getApig",
       "pollingIntervalMs": 3000,
       "pollingTimeoutMs": 300000,
@@ -107,7 +107,7 @@
     },
     "onBalanceInsufficient": {
       "action": "showPaymentQR",
-      "qrCodeUrl": "https://payment.brainhack.cn/apig-pay.html?user={{user}}&apigid={{apigid}}&fun_id=HOkkX72PMF",
+      "qrCodeUrl": "https://pwa.fmode.cn/apig-pay.html?user={{user}}&apigid={{apigid}}&fun_id=HOkkX72PMF",
       "paymentCheckEndpoint": "https://server.fmode.cn/api/apig/getApig",
       "pollingIntervalMs": 3000,
       "pollingTimeoutMs": 300000,

+ 3 - 3
jimeng/jimeng-task-query/api-config.json

@@ -1,4 +1,4 @@
-{
+{
   "name": "jimeng-task-query",
   "displayName": "即梦任务结果查询",
   "description": "查询即梦AI生成任务状态,轮询获取图片/视频生成结果,支持所有即梦生成接口的结果查询。",
@@ -149,7 +149,7 @@
     ],
     "onMissing": {
       "action": "showPaymentQR",
-      "qrCodeUrl": "https://payment.brainhack.cn/apig-pay.html?user={{user}}&apigid={{apigid}}&fun_id=HOkkX72PMF",
+      "qrCodeUrl": "https://pwa.fmode.cn/apig-pay.html?user={{user}}&apigid={{apigid}}&fun_id=HOkkX72PMF",
       "paymentCheckEndpoint": "https://server.fmode.cn/api/apig/getApig",
       "pollingIntervalMs": 3000,
       "pollingTimeoutMs": 300000,
@@ -159,7 +159,7 @@
     },
     "onBalanceInsufficient": {
       "action": "showPaymentQR",
-      "qrCodeUrl": "https://payment.brainhack.cn/apig-pay.html?user={{user}}&apigid={{apigid}}&fun_id=HOkkX72PMF",
+      "qrCodeUrl": "https://pwa.fmode.cn/apig-pay.html?user={{user}}&apigid={{apigid}}&fun_id=HOkkX72PMF",
       "paymentCheckEndpoint": "https://server.fmode.cn/api/apig/getApig",
       "pollingIntervalMs": 3000,
       "pollingTimeoutMs": 300000,

+ 3 - 3
jimeng/jimeng-text2img-v3/api-config.json

@@ -1,4 +1,4 @@
-{
+{
   "name": "jimeng-text2img-v3",
   "displayName": "即梦文生图3.0",
   "description": "即梦文生图3.0,文字响应准确度高,支持艺术字体和不同字重,人像质感逼真,支持高清大图输出。",
@@ -103,7 +103,7 @@
     ],
     "onMissing": {
       "action": "showPaymentQR",
-      "qrCodeUrl": "https://payment.brainhack.cn/apig-pay.html?user={{user}}&apigid={{apigid}}&fun_id=HOkkX72PMF",
+      "qrCodeUrl": "https://pwa.fmode.cn/apig-pay.html?user={{user}}&apigid={{apigid}}&fun_id=HOkkX72PMF",
       "paymentCheckEndpoint": "https://server.fmode.cn/api/apig/getApig",
       "pollingIntervalMs": 3000,
       "pollingTimeoutMs": 300000,
@@ -113,7 +113,7 @@
     },
     "onBalanceInsufficient": {
       "action": "showPaymentQR",
-      "qrCodeUrl": "https://payment.brainhack.cn/apig-pay.html?user={{user}}&apigid={{apigid}}&fun_id=HOkkX72PMF",
+      "qrCodeUrl": "https://pwa.fmode.cn/apig-pay.html?user={{user}}&apigid={{apigid}}&fun_id=HOkkX72PMF",
       "paymentCheckEndpoint": "https://server.fmode.cn/api/apig/getApig",
       "pollingIntervalMs": 3000,
       "pollingTimeoutMs": 300000,

+ 3 - 3
jimeng/jimeng-text2img-v31/api-config.json

@@ -1,4 +1,4 @@
-{
+{
   "name": "jimeng-text2img-v31",
   "displayName": "即梦文生图3.1",
   "description": "即梦文生图3.1,画面效果升级版,画面美感塑造、风格精准多样及画面细节丰富度方面大幅提升。",
@@ -98,7 +98,7 @@
     ],
     "onMissing": {
       "action": "showPaymentQR",
-      "qrCodeUrl": "https://payment.brainhack.cn/apig-pay.html?user={{user}}&apigid={{apigid}}&fun_id=HOkkX72PMF",
+      "qrCodeUrl": "https://pwa.fmode.cn/apig-pay.html?user={{user}}&apigid={{apigid}}&fun_id=HOkkX72PMF",
       "paymentCheckEndpoint": "https://server.fmode.cn/api/apig/getApig",
       "pollingIntervalMs": 3000,
       "pollingTimeoutMs": 300000,
@@ -108,7 +108,7 @@
     },
     "onBalanceInsufficient": {
       "action": "showPaymentQR",
-      "qrCodeUrl": "https://payment.brainhack.cn/apig-pay.html?user={{user}}&apigid={{apigid}}&fun_id=HOkkX72PMF",
+      "qrCodeUrl": "https://pwa.fmode.cn/apig-pay.html?user={{user}}&apigid={{apigid}}&fun_id=HOkkX72PMF",
       "paymentCheckEndpoint": "https://server.fmode.cn/api/apig/getApig",
       "pollingIntervalMs": 3000,
       "pollingTimeoutMs": 300000,

+ 3 - 3
jimeng/jimeng-video-v3-1080p/api-config.json

@@ -1,4 +1,4 @@
-{
+{
   "name": "jimeng-video-v3-1080p",
   "displayName": "视频生成3.0(1080p)",
   "description": "即梦视频3.0 1080P,支持文生视频、图生视频(首帧/首尾帧),最高1080P高清渲染。",
@@ -122,7 +122,7 @@
     ],
     "onMissing": {
       "action": "showPaymentQR",
-      "qrCodeUrl": "https://payment.brainhack.cn/apig-pay.html?user={{user}}&apigid={{apigid}}&fun_id=HOkkX72PMF",
+      "qrCodeUrl": "https://pwa.fmode.cn/apig-pay.html?user={{user}}&apigid={{apigid}}&fun_id=HOkkX72PMF",
       "paymentCheckEndpoint": "https://server.fmode.cn/api/apig/getApig",
       "pollingIntervalMs": 3000,
       "pollingTimeoutMs": 300000,
@@ -132,7 +132,7 @@
     },
     "onBalanceInsufficient": {
       "action": "showPaymentQR",
-      "qrCodeUrl": "https://payment.brainhack.cn/apig-pay.html?user={{user}}&apigid={{apigid}}&fun_id=HOkkX72PMF",
+      "qrCodeUrl": "https://pwa.fmode.cn/apig-pay.html?user={{user}}&apigid={{apigid}}&fun_id=HOkkX72PMF",
       "paymentCheckEndpoint": "https://server.fmode.cn/api/apig/getApig",
       "pollingIntervalMs": 3000,
       "pollingTimeoutMs": 300000,

+ 3 - 3
jimeng/jimeng-video-v3-720p/api-config.json

@@ -1,4 +1,4 @@
-{
+{
   "name": "jimeng-video-v3-720p",
   "displayName": "视频生成3.0(720p)",
   "description": "即梦视频3.0 720P,支持文生视频、图生视频(首帧/首尾帧/运镜),高性价比之选。",
@@ -153,7 +153,7 @@
     ],
     "onMissing": {
       "action": "showPaymentQR",
-      "qrCodeUrl": "https://payment.brainhack.cn/apig-pay.html?user={{user}}&apigid={{apigid}}&fun_id=HOkkX72PMF",
+      "qrCodeUrl": "https://pwa.fmode.cn/apig-pay.html?user={{user}}&apigid={{apigid}}&fun_id=HOkkX72PMF",
       "paymentCheckEndpoint": "https://server.fmode.cn/api/apig/getApig",
       "pollingIntervalMs": 3000,
       "pollingTimeoutMs": 300000,
@@ -163,7 +163,7 @@
     },
     "onBalanceInsufficient": {
       "action": "showPaymentQR",
-      "qrCodeUrl": "https://payment.brainhack.cn/apig-pay.html?user={{user}}&apigid={{apigid}}&fun_id=HOkkX72PMF",
+      "qrCodeUrl": "https://pwa.fmode.cn/apig-pay.html?user={{user}}&apigid={{apigid}}&fun_id=HOkkX72PMF",
       "paymentCheckEndpoint": "https://server.fmode.cn/api/apig/getApig",
       "pollingIntervalMs": 3000,
       "pollingTimeoutMs": 300000,

+ 3 - 3
jimeng/jimeng-video-v3-pro/api-config.json

@@ -1,4 +1,4 @@
-{
+{
   "name": "jimeng-video-v3-pro",
   "displayName": "即梦视频生成3.0Pro",
   "description": "即梦视频3.0Pro,具备多镜头叙事能力,1080P专业级质感视频。",
@@ -113,7 +113,7 @@
     ],
     "onMissing": {
       "action": "showPaymentQR",
-      "qrCodeUrl": "https://payment.brainhack.cn/apig-pay.html?user={{user}}&apigid={{apigid}}&fun_id=HOkkX72PMF",
+      "qrCodeUrl": "https://pwa.fmode.cn/apig-pay.html?user={{user}}&apigid={{apigid}}&fun_id=HOkkX72PMF",
       "paymentCheckEndpoint": "https://server.fmode.cn/api/apig/getApig",
       "pollingIntervalMs": 3000,
       "pollingTimeoutMs": 300000,
@@ -123,7 +123,7 @@
     },
     "onBalanceInsufficient": {
       "action": "showPaymentQR",
-      "qrCodeUrl": "https://payment.brainhack.cn/apig-pay.html?user={{user}}&apigid={{apigid}}&fun_id=HOkkX72PMF",
+      "qrCodeUrl": "https://pwa.fmode.cn/apig-pay.html?user={{user}}&apigid={{apigid}}&fun_id=HOkkX72PMF",
       "paymentCheckEndpoint": "https://server.fmode.cn/api/apig/getApig",
       "pollingIntervalMs": 3000,
       "pollingTimeoutMs": 300000,

+ 3 - 3
review-analysis/review-batch-collection/api-config.json

@@ -1,4 +1,4 @@
-{
+{
   "name": "review-batch-collection",
   "displayName": "评论批量采集",
   "description": "对多个ASIN批量采集Amazon评论,支持翻页和星级过滤,输出结构化评论语料库",
@@ -199,7 +199,7 @@
     "resolutionOrder": ["configFile", "currentToken"],
     "onMissing": {
       "action": "showPaymentQR",
-      "qrCodeUrl": "https://payment.brainhack.cn/apig-pay.html?user={{user}}&apigid={{apigid}}&fun_id=HOkkX72PMF",
+      "qrCodeUrl": "https://pwa.fmode.cn/apig-pay.html?user={{user}}&apigid={{apigid}}&fun_id=HOkkX72PMF",
       "paymentCheckEndpoint": "https://server.fmode.cn/api/apig/getApig",
       "pollingIntervalMs": 3000,
       "pollingTimeoutMs": 300000,
@@ -209,7 +209,7 @@
     },
     "onBalanceInsufficient": {
       "action": "showPaymentQR",
-      "qrCodeUrl": "https://payment.brainhack.cn/apig-pay.html?user={{user}}&apigid={{apigid}}&fun_id=HOkkX72PMF",
+      "qrCodeUrl": "https://pwa.fmode.cn/apig-pay.html?user={{user}}&apigid={{apigid}}&fun_id=HOkkX72PMF",
       "paymentCheckEndpoint": "https://server.fmode.cn/api/apig/getApig",
       "pollingIntervalMs": 3000,
       "pollingTimeoutMs": 300000,

+ 3 - 3
review-analysis/review-highlight-extraction/api-config.json

@@ -1,4 +1,4 @@
-{
+{
   "name": "review-highlight-extraction",
   "displayName": "好评亮点提取",
   "description": "从好评中提取用户最认可的产品亮点,识别竞品核心卖点和可借鉴的优势",
@@ -157,7 +157,7 @@
     "resolutionOrder": ["configFile", "currentToken"],
     "onMissing": {
       "action": "showPaymentQR",
-      "qrCodeUrl": "https://payment.brainhack.cn/apig-pay.html?user={{user}}&apigid={{apigid}}&fun_id=HOkkX72PMF",
+      "qrCodeUrl": "https://pwa.fmode.cn/apig-pay.html?user={{user}}&apigid={{apigid}}&fun_id=HOkkX72PMF",
       "paymentCheckEndpoint": "https://server.fmode.cn/api/apig/getApig",
       "pollingIntervalMs": 3000,
       "pollingTimeoutMs": 300000,
@@ -167,7 +167,7 @@
     },
     "onBalanceInsufficient": {
       "action": "showPaymentQR",
-      "qrCodeUrl": "https://payment.brainhack.cn/apig-pay.html?user={{user}}&apigid={{apigid}}&fun_id=HOkkX72PMF",
+      "qrCodeUrl": "https://pwa.fmode.cn/apig-pay.html?user={{user}}&apigid={{apigid}}&fun_id=HOkkX72PMF",
       "paymentCheckEndpoint": "https://server.fmode.cn/api/apig/getApig",
       "pollingIntervalMs": 3000,
       "pollingTimeoutMs": 300000,

+ 3 - 3
review-analysis/review-keyword-cloud/api-config.json

@@ -1,4 +1,4 @@
-{
+{
   "name": "review-keyword-cloud",
   "displayName": "评论关键词云",
   "description": "从评论语料生成关键词云,结合ASIN反查关键词,每个关键词带情感标签,构建VOC关键词库",
@@ -141,7 +141,7 @@
     "resolutionOrder": ["configFile", "currentToken"],
     "onMissing": {
       "action": "showPaymentQR",
-      "qrCodeUrl": "https://payment.brainhack.cn/apig-pay.html?user={{user}}&apigid={{apigid}}&fun_id=HOkkX72PMF",
+      "qrCodeUrl": "https://pwa.fmode.cn/apig-pay.html?user={{user}}&apigid={{apigid}}&fun_id=HOkkX72PMF",
       "paymentCheckEndpoint": "https://server.fmode.cn/api/apig/getApig",
       "pollingIntervalMs": 3000,
       "pollingTimeoutMs": 300000,
@@ -151,7 +151,7 @@
     },
     "onBalanceInsufficient": {
       "action": "showPaymentQR",
-      "qrCodeUrl": "https://payment.brainhack.cn/apig-pay.html?user={{user}}&apigid={{apigid}}&fun_id=HOkkX72PMF",
+      "qrCodeUrl": "https://pwa.fmode.cn/apig-pay.html?user={{user}}&apigid={{apigid}}&fun_id=HOkkX72PMF",
       "paymentCheckEndpoint": "https://server.fmode.cn/api/apig/getApig",
       "pollingIntervalMs": 3000,
       "pollingTimeoutMs": 300000,

+ 3 - 3
review-analysis/review-pain-point-extraction/api-config.json

@@ -1,4 +1,4 @@
-{
+{
   "name": "review-pain-point-extraction",
   "displayName": "差评痛点提取",
   "description": "从差评中提取用户痛点,按类别聚类,量化频率和严重度,找到竞品死穴",
@@ -179,7 +179,7 @@
     "resolutionOrder": ["configFile", "currentToken"],
     "onMissing": {
       "action": "showPaymentQR",
-      "qrCodeUrl": "https://payment.brainhack.cn/apig-pay.html?user={{user}}&apigid={{apigid}}&fun_id=HOkkX72PMF",
+      "qrCodeUrl": "https://pwa.fmode.cn/apig-pay.html?user={{user}}&apigid={{apigid}}&fun_id=HOkkX72PMF",
       "paymentCheckEndpoint": "https://server.fmode.cn/api/apig/getApig",
       "pollingIntervalMs": 3000,
       "pollingTimeoutMs": 300000,
@@ -189,7 +189,7 @@
     },
     "onBalanceInsufficient": {
       "action": "showPaymentQR",
-      "qrCodeUrl": "https://payment.brainhack.cn/apig-pay.html?user={{user}}&apigid={{apigid}}&fun_id=HOkkX72PMF",
+      "qrCodeUrl": "https://pwa.fmode.cn/apig-pay.html?user={{user}}&apigid={{apigid}}&fun_id=HOkkX72PMF",
       "paymentCheckEndpoint": "https://server.fmode.cn/api/apig/getApig",
       "pollingIntervalMs": 3000,
       "pollingTimeoutMs": 300000,

+ 3 - 3
review-analysis/review-sentiment-analysis/api-config.json

@@ -1,4 +1,4 @@
-{
+{
   "name": "review-sentiment-analysis",
   "displayName": "评论情感分析",
   "description": "对评论语料库进行情感分析,分类正面/负面/中性,提取情感关键短语并按ASIN/品牌聚合",
@@ -177,7 +177,7 @@
     "resolutionOrder": ["configFile", "currentToken"],
     "onMissing": {
       "action": "showPaymentQR",
-      "qrCodeUrl": "https://payment.brainhack.cn/apig-pay.html?user={{user}}&apigid={{apigid}}&fun_id=HOkkX72PMF",
+      "qrCodeUrl": "https://pwa.fmode.cn/apig-pay.html?user={{user}}&apigid={{apigid}}&fun_id=HOkkX72PMF",
       "paymentCheckEndpoint": "https://server.fmode.cn/api/apig/getApig",
       "pollingIntervalMs": 3000,
       "pollingTimeoutMs": 300000,
@@ -187,7 +187,7 @@
     },
     "onBalanceInsufficient": {
       "action": "showPaymentQR",
-      "qrCodeUrl": "https://payment.brainhack.cn/apig-pay.html?user={{user}}&apigid={{apigid}}&fun_id=HOkkX72PMF",
+      "qrCodeUrl": "https://pwa.fmode.cn/apig-pay.html?user={{user}}&apigid={{apigid}}&fun_id=HOkkX72PMF",
       "paymentCheckEndpoint": "https://server.fmode.cn/api/apig/getApig",
       "pollingIntervalMs": 3000,
       "pollingTimeoutMs": 300000,

+ 64 - 0
scripts/mock-balance-server.js

@@ -0,0 +1,64 @@
+/**
+ * Mock API 服务器 — 模拟"余额不足"响应
+ * 用于测试 OpenClaw 是否能正确识别 errorHandling 条件并弹出充值网址
+ *
+ * 启动: node scripts/mock-balance-server.js
+ * 端点: POST http://localhost:3899/api/mock/skill
+ *   - 默认返回 { code: -2, msg: "余额不足,请充值后重试" }
+ *   - 加 ?mode=ok 返回 { code: 200, data: { workId: "mock123" } }
+ *   - 加 ?mode=unauth 返回 { code: 401, msg: "unauthorized token" }
+ */
+
+const http = require('http');
+
+const PORT = 3899;
+
+const RESPONSES = {
+  insufficient: {
+    code: -2,
+    msg: '余额不足,请充值后重试',
+    message: '余额不足,请充值后重试'
+  },
+  ok: {
+    code: 200,
+    data: { workId: 'mock_' + Date.now() }
+  },
+  unauth: {
+    code: 401,
+    msg: 'unauthorized token invalid'
+  }
+};
+
+const server = http.createServer((req, res) => {
+  // CORS headers
+  res.setHeader('Access-Control-Allow-Origin', '*');
+  res.setHeader('Access-Control-Allow-Methods', 'GET, POST, OPTIONS');
+  res.setHeader('Access-Control-Allow-Headers', 'Content-Type, Authorization, X-Parse-Application-Id');
+
+  if (req.method === 'OPTIONS') {
+    res.writeHead(204);
+    res.end();
+    return;
+  }
+
+  const url = new URL(req.url, `http://localhost:${PORT}`);
+  const mode = url.searchParams.get('mode') || 'insufficient';
+
+  const body = RESPONSES[mode] || RESPONSES.insufficient;
+
+  console.log(`[${new Date().toISOString()}] ${req.method} ${req.url} => mode=${mode}`);
+  console.log(`  Response: ${JSON.stringify(body)}`);
+
+  res.writeHead(200, { 'Content-Type': 'application/json' });
+  res.end(JSON.stringify(body));
+});
+
+server.listen(PORT, () => {
+  console.log(`\n╔══════════════════════════════════════════════════════╗`);
+  console.log(`║  Mock Balance Server 已启动                         ║`);
+  console.log(`╚══════════════════════════════════════════════════════╝`);
+  console.log(`\n  余额不足: POST http://localhost:${PORT}/api/mock/skill`);
+  console.log(`  正常响应: POST http://localhost:${PORT}/api/mock/skill?mode=ok`);
+  console.log(`  未授权:   POST http://localhost:${PORT}/api/mock/skill?mode=unauth`);
+  console.log(`\n等待请求...\n`);
+});

+ 293 - 0
scripts/skill-executor.js

@@ -0,0 +1,293 @@
+/**
+ * OpenClaw Skill 执行器 — 含余额不足检测 + 弹出充值网址逻辑
+ *
+ * 流程:
+ *   1. 读取 api-config.json
+ *   2. 解析 tokenConfig,获取 token
+ *   3. 调用 Skill API
+ *   4. 检查响应是否匹配 errorHandling 条件
+ *   5. 如果余额不足 → 打开充值网址(qrCodeUrl)
+ *   6. 轮询余额变化
+ *   7. 充值成功后重试 Skill
+ *
+ * 用法:
+ *   node scripts/skill-executor.js <skill-dir> [--user=xxx] [--apigid=yyy]
+ *   例: node scripts/skill-executor.js jimeng/jimeng-img-v4 --user=nd7NOCmFiE --apigid=Vo3ROWEvDy
+ */
+
+const fs = require('fs');
+const path = require('path');
+const { exec } = require('child_process');
+
+// ─── 配置 ───
+const API_BASE = 'https://server.fmode.cn';
+const APP_ID = 'ncloudmaster';
+
+// ─── 1. 加载 Skill 配置 ───
+function loadSkillConfig(skillDir) {
+  const root = path.resolve(__dirname, '..');
+  const configPath = path.join(root, skillDir, 'api-config.json');
+  if (!fs.existsSync(configPath)) {
+    throw new Error(`未找到配置: ${configPath}`);
+  }
+  return JSON.parse(fs.readFileSync(configPath, 'utf-8'));
+}
+
+// ─── 2. 匹配 errorHandling 条件 ───
+function matchesErrorConditions(responseData, errorDef) {
+  if (!errorDef || !errorDef.conditions) return false;
+
+  const results = errorDef.conditions.map(cond => {
+    const fieldValue = responseData[cond.responseField];
+    if (fieldValue === undefined || fieldValue === null) return false;
+
+    switch (cond.operator) {
+      case 'in':
+        return Array.isArray(cond.value) && cond.value.includes(fieldValue);
+      case 'contains':
+        if (typeof fieldValue !== 'string') return false;
+        return Array.isArray(cond.value)
+          ? cond.value.some(v => fieldValue.toLowerCase().includes(v.toLowerCase()))
+          : fieldValue.toLowerCase().includes(String(cond.value).toLowerCase());
+      case 'equals':
+        return fieldValue === cond.value;
+      default:
+        return false;
+    }
+  });
+
+  // matchMode: "any" = 任一条件匹配即触发; "all" = 全部匹配
+  const mode = errorDef.matchMode || 'any';
+  return mode === 'all' ? results.every(Boolean) : results.some(Boolean);
+}
+
+// ─── 3. 解析模板变量 ───
+function resolveTemplate(template, vars) {
+  return template.replace(/\{\{(\w+)\}\}/g, (_, key) => vars[key] || '');
+}
+
+// ─── 4. 打开充值网址 ───
+function openPaymentUrl(qrCodeUrl, vars) {
+  const url = resolveTemplate(qrCodeUrl, vars);
+  console.log('\n╔══════════════════════════════════════════════════════╗');
+  console.log('║  💰 余额不足,请扫码充值                            ║');
+  console.log('╚══════════════════════════════════════════════════════╝');
+  console.log(`\n充值网址: ${url}\n`);
+
+  // 在系统浏览器中打开
+  const platform = process.platform;
+  const cmd = platform === 'win32' ? `start "" "${url}"`
+            : platform === 'darwin' ? `open "${url}"`
+            : `xdg-open "${url}"`;
+
+  exec(cmd, (err) => {
+    if (err) console.warn('自动打开浏览器失败,请手动复制上方网址');
+  });
+
+  return url;
+}
+
+// ─── 5. 轮询余额 ───
+async function pollBalance(authId, oldCount, config) {
+  const checkEndpoint = config.paymentCheckEndpoint || `${API_BASE}/api/apig/getApig`;
+  const interval = config.pollingIntervalMs || 3000;
+  const timeout = config.pollingTimeoutMs || 300000;
+  const maxAttempts = Math.ceil(timeout / interval);
+
+  console.log(`[轮询] 等待充值完成... (每${interval / 1000}秒检查, 最多${maxAttempts}次)`);
+
+  for (let i = 1; i <= maxAttempts; i++) {
+    await new Promise(r => setTimeout(r, interval));
+
+    try {
+      const resp = await fetch(checkEndpoint, {
+        method: 'POST',
+        headers: { 'Content-Type': 'application/json' },
+        body: JSON.stringify({ authid: authId })
+      });
+      const data = await resp.json();
+
+      if (data.code === 200 && data.data && data.data.count > oldCount) {
+        console.log(`[轮询] ✅ 充值成功! 余额: ${oldCount} → ${data.data.count}`);
+        return data.data;
+      }
+      console.log(`[轮询] #${i} 余额未变 (${data.data?.count ?? '?'})`);
+    } catch (e) {
+      console.warn(`[轮询] #${i} 请求失败:`, e.message);
+    }
+  }
+
+  console.log('[轮询] ⚠️ 超时,余额未变化');
+  return null;
+}
+
+// ─── 6. 查询 APIGAuth ───
+async function getApigAuth(userId, apigId) {
+  const url = `${API_BASE}/parse/classes/APIGAuth?` + new URLSearchParams({
+    where: JSON.stringify({
+      api: { __type: 'Pointer', className: 'APIG', objectId: apigId },
+      company: { __type: 'Pointer', className: 'Company', objectId: userId }
+    }),
+    limit: '1'
+  });
+
+  const resp = await fetch(url, {
+    headers: { 'X-Parse-Application-Id': APP_ID }
+  });
+  const data = await resp.json();
+
+  if (data.results && data.results.length > 0) {
+    return data.results[0];
+  }
+  return null;
+}
+
+// ─── 7. 核心执行器 ───
+async function executeSkillWithBilling(skillDir, inputParams, userVars) {
+  const config = loadSkillConfig(skillDir);
+  console.log(`\n[执行器] Skill: ${config.displayName} (${config.name})`);
+  console.log(`[执行器] 端点: ${config.endpoint.method} ${config.endpoint.url}`);
+
+  // Step A: 先查余额(如有 user + apigid)
+  let authRecord = null;
+  if (userVars.user && userVars.apigid) {
+    console.log(`[执行器] 查询用户余额... user=${userVars.user}, apigid=${userVars.apigid}`);
+    authRecord = await getApigAuth(userVars.user, userVars.apigid);
+    if (authRecord) {
+      console.log(`[执行器] APIGAuth: ${authRecord.objectId}, 余额: ${authRecord.count || 0}`);
+      // 余额为0直接触发充值,不必等API报错
+      if ((authRecord.count || 0) <= 0) {
+        console.log('[执行器] 余额为0,直接触发充值流程');
+        return await handleInsufficientBalance(config, authRecord, userVars);
+      }
+    } else {
+      console.log('[执行器] 未找到 APIGAuth 记录,将在调用后根据响应判断');
+    }
+  }
+
+  // Step B: 调用 Skill API
+  console.log(`[执行器] 调用 Skill API...`);
+  const resp = await fetch(config.endpoint.url, {
+    method: config.endpoint.method,
+    headers: config.endpoint.headers,
+    body: config.endpoint.method === 'GET' ? undefined : JSON.stringify(inputParams)
+  });
+  const result = await resp.json();
+  console.log(`[执行器] 响应 code: ${result.code}, msg: ${result.msg || result.message || ''}`);
+
+  // Step C: 检查是否匹配 errorHandling 条件
+  if (config.errorHandling) {
+    // 检查: 余额不足
+    if (config.errorHandling.balanceInsufficient) {
+      if (matchesErrorConditions(result, config.errorHandling.balanceInsufficient)) {
+        console.log('[执行器] ⚡ 检测到余额不足!');
+        return await handleInsufficientBalance(config, authRecord, userVars);
+      }
+    }
+    // 检查: 未授权
+    if (config.errorHandling.unauthorized) {
+      if (matchesErrorConditions(result, config.errorHandling.unauthorized)) {
+        console.log('[执行器] ⚡ 检测到未授权!');
+        return await handleUnauthorized(config, userVars);
+      }
+    }
+  }
+
+  // Step D: 正常返回
+  console.log('[执行器] ✅ Skill 调用成功');
+  return { success: true, data: result };
+}
+
+// ─── 8. 处理余额不足 ───
+async function handleInsufficientBalance(config, authRecord, userVars) {
+  const tc = config.tokenConfig;
+  if (!tc || !tc.onBalanceInsufficient) {
+    console.error('[执行器] ❌ 无 onBalanceInsufficient 配置,无法处理');
+    return { success: false, error: 'balance_insufficient_no_handler' };
+  }
+
+  const handler = tc.onBalanceInsufficient;
+  const oldCount = authRecord ? (authRecord.count || 0) : 0;
+  const authId = authRecord ? authRecord.objectId : null;
+
+  if (handler.action === 'showPaymentQR') {
+    // 打开充值网址
+    openPaymentUrl(handler.qrCodeUrl, userVars);
+    console.log(`[执行器] title: ${handler.title}`);
+    console.log(`[执行器] message: ${handler.message}`);
+
+    if (!authId) {
+      console.log('[执行器] 无 authId,无法轮询余额。请手动充值后重试。');
+      return { success: false, error: 'no_auth_record', paymentUrl: resolveTemplate(handler.qrCodeUrl, userVars) };
+    }
+
+    // 轮询等待充值
+    const updated = await pollBalance(authId, oldCount, handler);
+
+    if (updated) {
+      // 充值成功 → 重试 Skill
+      if (handler.onPaymentSuccess === 'retrySkillWithNewToken') {
+        console.log('[执行器] 🔄 充值成功,准备重试 Skill...');
+        return { success: true, recharged: true, newBalance: updated.count, action: 'retrySkill' };
+      }
+      return { success: true, recharged: true, newBalance: updated.count };
+    }
+
+    return { success: false, error: 'payment_timeout' };
+  }
+
+  return { success: false, error: 'unknown_action', action: handler.action };
+}
+
+// ─── 9. 处理未授权 ───
+async function handleUnauthorized(config, userVars) {
+  const tc = config.tokenConfig;
+  if (!tc || !tc.onMissing) {
+    console.error('[执行器] ❌ 无 onMissing 配置');
+    return { success: false, error: 'unauthorized_no_handler' };
+  }
+
+  const handler = tc.onMissing;
+  if (handler.action === 'showPaymentQR') {
+    openPaymentUrl(handler.qrCodeUrl, userVars);
+    console.log(`[执行器] title: ${handler.title}`);
+    console.log(`[执行器] message: ${handler.message}`);
+  }
+
+  return { success: false, error: 'unauthorized', paymentUrl: resolveTemplate(handler.qrCodeUrl, userVars) };
+}
+
+// ─── CLI 入口 ───
+async function main() {
+  const args = process.argv.slice(2);
+  const skillDir = args.find(a => !a.startsWith('--'));
+
+  if (!skillDir) {
+    console.log('用法: node scripts/skill-executor.js <skill-dir> [--user=xxx] [--apigid=yyy]');
+    console.log('例:   node scripts/skill-executor.js jimeng/jimeng-img-v4 --user=nd7NOCmFiE --apigid=Vo3ROWEvDy');
+    process.exit(1);
+  }
+
+  // 解析 --key=value 参数
+  const userVars = {};
+  args.filter(a => a.startsWith('--')).forEach(a => {
+    const [key, val] = a.slice(2).split('=');
+    if (key && val) userVars[key] = val;
+  });
+
+  console.log('╔══════════════════════════════════════════════════════╗');
+  console.log('║   OpenClaw Skill 执行器 (含计费闭环)                ║');
+  console.log('╚══════════════════════════════════════════════════════╝');
+
+  const result = await executeSkillWithBilling(skillDir, {
+    prompt: '测试',
+    token: 'Bearer r:f0333969e312a40e4703e8fe4ed1c600'
+  }, userVars);
+
+  console.log('\n[结果]', JSON.stringify(result, null, 2));
+}
+
+main().catch(e => {
+  console.error('执行出错:', e.message);
+  process.exit(1);
+});

+ 61 - 0
scripts/test-balance-check.js

@@ -0,0 +1,61 @@
+/**
+ * 测试 errorHandling 条件匹配 + 弹充值网址逻辑
+ */
+const fs = require('fs');
+const path = require('path');
+
+// 加载 api-config.json
+const config = JSON.parse(
+  fs.readFileSync(path.join(__dirname, '..', 'jimeng', 'jimeng-img-v4', 'api-config.json'), 'utf-8')
+);
+
+// 条件匹配函数(同 skill-executor.js)
+function matchesErrorConditions(resp, errorDef) {
+  if (!errorDef || !errorDef.conditions) return false;
+  const results = errorDef.conditions.map(cond => {
+    const v = resp[cond.responseField];
+    if (v == null) return false;
+    if (cond.operator === 'in') return Array.isArray(cond.value) && cond.value.includes(v);
+    if (cond.operator === 'contains' && typeof v === 'string')
+      return cond.value.some(k => v.toLowerCase().includes(k.toLowerCase()));
+    return false;
+  });
+  return errorDef.matchMode === 'all' ? results.every(Boolean) : results.some(Boolean);
+}
+
+// 模板变量替换
+function resolveTemplate(tpl, vars) {
+  return tpl.replace(/\{\{(\w+)\}\}/g, (_, key) => vars[key] || '');
+}
+
+// 模拟各种 API 响应
+const testCases = [
+  { code: -2,  msg: '余额不足' },
+  { code: -3,  msg: 'quota exceeded' },
+  { code: 402, msg: 'insufficient balance' },
+  { code: 429, msg: 'rate limit' },
+  { code: -10, message: 'balance not enough' },
+  { code: 200, msg: 'ok' },
+  { code: 500, msg: 'server error' },
+  { code: 401, msg: 'unauthorized token' },
+];
+
+console.log('=== 余额不足检测 测试 ===\n');
+
+const balanceDef = config.errorHandling.balanceInsufficient;
+const unauthDef = config.errorHandling.unauthorized;
+
+testCases.forEach(resp => {
+  const isBalance = matchesErrorConditions(resp, balanceDef);
+  const isUnauth = matchesErrorConditions(resp, unauthDef);
+  const label = isBalance ? '⚡ 触发充值' : isUnauth ? '🔒 触发授权' : '✅ 正常放行';
+  console.log(`  code=${String(resp.code).padStart(4)} msg="${resp.msg || resp.message || ''}" => ${label}`);
+});
+
+// 演示生成充值 URL
+console.log('\n=== 生成充值网址 ===\n');
+const handler = config.tokenConfig.onBalanceInsufficient;
+const url = resolveTemplate(handler.qrCodeUrl, { user: 'E4KpGvTEto', apigid: 'Vo3ROWEvDy' });
+console.log('  URL:', url);
+console.log('  title:', handler.title);
+console.log('  message:', handler.message);

+ 3 - 3
social-media/instagram-search/api-config.json

@@ -1,4 +1,4 @@
-{
+{
   "name": "instagram-search",
   "displayName": "Instagram 搜索",
   "description": "按关键词搜索 Instagram 用户账号或话颒标签,返回匹配的用户列表或标签列表。适用于竞品品牌 Instagram 账号定位、KOL 初筛、品类 话颒标签发现。",
@@ -147,7 +147,7 @@
     "resolutionOrder": ["configFile", "currentToken"],
     "onMissing": {
       "action": "showPaymentQR",
-      "qrCodeUrl": "https://payment.brainhack.cn/apig-pay.html?user={{user}}&apigid={{apigid}}&fun_id=HOkkX72PMF",
+      "qrCodeUrl": "https://pwa.fmode.cn/apig-pay.html?user={{user}}&apigid={{apigid}}&fun_id=HOkkX72PMF",
       "paymentCheckEndpoint": "https://server.fmode.cn/api/apig/getApig",
       "pollingIntervalMs": 3000,
       "pollingTimeoutMs": 300000,
@@ -157,7 +157,7 @@
     },
     "onBalanceInsufficient": {
       "action": "showPaymentQR",
-      "qrCodeUrl": "https://payment.brainhack.cn/apig-pay.html?user={{user}}&apigid={{apigid}}&fun_id=HOkkX72PMF",
+      "qrCodeUrl": "https://pwa.fmode.cn/apig-pay.html?user={{user}}&apigid={{apigid}}&fun_id=HOkkX72PMF",
       "paymentCheckEndpoint": "https://server.fmode.cn/api/apig/getApig",
       "pollingIntervalMs": 3000,
       "pollingTimeoutMs": 300000,

+ 3 - 3
social-media/instagram-user-info/api-config.json

@@ -1,4 +1,4 @@
-{
+{
   "name": "instagram-user-info",
   "displayName": "Instagram 用户详情",
   "description": "根据用户名获取 Instagram 账号完整资料,包括粉丝数、帖子数、个人简介、认证状态、商业账号类型等。适用于竞品品牌 IG 影响力画像建立、KOL 资质评估、达人商业价弹分析。",
@@ -147,7 +147,7 @@
     "resolutionOrder": ["configFile", "currentToken"],
     "onMissing": {
       "action": "showPaymentQR",
-      "qrCodeUrl": "https://payment.brainhack.cn/apig-pay.html?user={{user}}&apigid={{apigid}}&fun_id=HOkkX72PMF",
+      "qrCodeUrl": "https://pwa.fmode.cn/apig-pay.html?user={{user}}&apigid={{apigid}}&fun_id=HOkkX72PMF",
       "paymentCheckEndpoint": "https://server.fmode.cn/api/apig/getApig",
       "pollingIntervalMs": 3000,
       "pollingTimeoutMs": 300000,
@@ -157,7 +157,7 @@
     },
     "onBalanceInsufficient": {
       "action": "showPaymentQR",
-      "qrCodeUrl": "https://payment.brainhack.cn/apig-pay.html?user={{user}}&apigid={{apigid}}&fun_id=HOkkX72PMF",
+      "qrCodeUrl": "https://pwa.fmode.cn/apig-pay.html?user={{user}}&apigid={{apigid}}&fun_id=HOkkX72PMF",
       "paymentCheckEndpoint": "https://server.fmode.cn/api/apig/getApig",
       "pollingIntervalMs": 3000,
       "pollingTimeoutMs": 300000,

+ 3 - 3
social-media/instagram-user-posts/api-config.json

@@ -1,4 +1,4 @@
-{
+{
   "name": "instagram-user-posts",
   "displayName": "Instagram 用户帖子列表",
   "description": "获取指定 Instagram 用户发布的帖子列表,包括点赞数、评论数、帖子文案等。适用于竞品品牌 IG 内容策略分析、KOL 帖子互动表现评估、品牌运营频率分析。",
@@ -167,7 +167,7 @@
     "resolutionOrder": ["configFile", "currentToken"],
     "onMissing": {
       "action": "showPaymentQR",
-      "qrCodeUrl": "https://payment.brainhack.cn/apig-pay.html?user={{user}}&apigid={{apigid}}&fun_id=HOkkX72PMF",
+      "qrCodeUrl": "https://pwa.fmode.cn/apig-pay.html?user={{user}}&apigid={{apigid}}&fun_id=HOkkX72PMF",
       "paymentCheckEndpoint": "https://server.fmode.cn/api/apig/getApig",
       "pollingIntervalMs": 3000,
       "pollingTimeoutMs": 300000,
@@ -177,7 +177,7 @@
     },
     "onBalanceInsufficient": {
       "action": "showPaymentQR",
-      "qrCodeUrl": "https://payment.brainhack.cn/apig-pay.html?user={{user}}&apigid={{apigid}}&fun_id=HOkkX72PMF",
+      "qrCodeUrl": "https://pwa.fmode.cn/apig-pay.html?user={{user}}&apigid={{apigid}}&fun_id=HOkkX72PMF",
       "paymentCheckEndpoint": "https://server.fmode.cn/api/apig/getApig",
       "pollingIntervalMs": 3000,
       "pollingTimeoutMs": 300000,

+ 3 - 3
social-media/tiktok-hashtag-detail/api-config.json

@@ -1,4 +1,4 @@
-{
+{
   "name": "tiktok-hashtag-detail",
   "displayName": "TikTok 话题详情",
   "description": "根据话题/标签 ID 获取 TikTok 话题详情,包括总播放量、视频使用数等。适用于品类 TikTok 话题热度量化、话题对标分析、内容营销话题选择。",
@@ -109,7 +109,7 @@
     "resolutionOrder": ["configFile", "currentToken"],
     "onMissing": {
       "action": "showPaymentQR",
-      "qrCodeUrl": "https://payment.brainhack.cn/apig-pay.html?user={{user}}&apigid={{apigid}}&fun_id=HOkkX72PMF",
+      "qrCodeUrl": "https://pwa.fmode.cn/apig-pay.html?user={{user}}&apigid={{apigid}}&fun_id=HOkkX72PMF",
       "paymentCheckEndpoint": "https://server.fmode.cn/api/apig/getApig",
       "pollingIntervalMs": 3000,
       "pollingTimeoutMs": 300000,
@@ -119,7 +119,7 @@
     },
     "onBalanceInsufficient": {
       "action": "showPaymentQR",
-      "qrCodeUrl": "https://payment.brainhack.cn/apig-pay.html?user={{user}}&apigid={{apigid}}&fun_id=HOkkX72PMF",
+      "qrCodeUrl": "https://pwa.fmode.cn/apig-pay.html?user={{user}}&apigid={{apigid}}&fun_id=HOkkX72PMF",
       "paymentCheckEndpoint": "https://server.fmode.cn/api/apig/getApig",
       "pollingIntervalMs": 3000,
       "pollingTimeoutMs": 300000,

+ 3 - 3
social-media/tiktok-hashtag-videos/api-config.json

@@ -1,4 +1,4 @@
-{
+{
   "name": "tiktok-hashtag-videos",
   "displayName": "TikTok 话题视频列表",
   "description": "获取指定 TikTok 话题下的视频列表,包括播放量/点赞/作者等数据。适用于话题内容作战分析、品类爆款内容发现、话题 KOL 筛选。",
@@ -153,7 +153,7 @@
     "resolutionOrder": ["configFile", "currentToken"],
     "onMissing": {
       "action": "showPaymentQR",
-      "qrCodeUrl": "https://payment.brainhack.cn/apig-pay.html?user={{user}}&apigid={{apigid}}&fun_id=HOkkX72PMF",
+      "qrCodeUrl": "https://pwa.fmode.cn/apig-pay.html?user={{user}}&apigid={{apigid}}&fun_id=HOkkX72PMF",
       "paymentCheckEndpoint": "https://server.fmode.cn/api/apig/getApig",
       "pollingIntervalMs": 3000,
       "pollingTimeoutMs": 300000,
@@ -163,7 +163,7 @@
     },
     "onBalanceInsufficient": {
       "action": "showPaymentQR",
-      "qrCodeUrl": "https://payment.brainhack.cn/apig-pay.html?user={{user}}&apigid={{apigid}}&fun_id=HOkkX72PMF",
+      "qrCodeUrl": "https://pwa.fmode.cn/apig-pay.html?user={{user}}&apigid={{apigid}}&fun_id=HOkkX72PMF",
       "paymentCheckEndpoint": "https://server.fmode.cn/api/apig/getApig",
       "pollingIntervalMs": 3000,
       "pollingTimeoutMs": 300000,

+ 3 - 3
social-media/tiktok-user-posts/api-config.json

@@ -1,4 +1,4 @@
-{
+{
   "name": "tiktok-user-posts",
   "displayName": "TikTok 用户作品列表",
   "description": "获取指定 TikTok 用户发布的视频列表,包括播放量、点赞、评论等数据。适用于竞品品牌内容策略分析、KOL 年度内容表现评估、达人带货说服力分析。",
@@ -150,7 +150,7 @@
     "resolutionOrder": ["configFile", "currentToken"],
     "onMissing": {
       "action": "showPaymentQR",
-      "qrCodeUrl": "https://payment.brainhack.cn/apig-pay.html?user={{user}}&apigid={{apigid}}&fun_id=HOkkX72PMF",
+      "qrCodeUrl": "https://pwa.fmode.cn/apig-pay.html?user={{user}}&apigid={{apigid}}&fun_id=HOkkX72PMF",
       "paymentCheckEndpoint": "https://server.fmode.cn/api/apig/getApig",
       "pollingIntervalMs": 3000,
       "pollingTimeoutMs": 300000,
@@ -160,7 +160,7 @@
     },
     "onBalanceInsufficient": {
       "action": "showPaymentQR",
-      "qrCodeUrl": "https://payment.brainhack.cn/apig-pay.html?user={{user}}&apigid={{apigid}}&fun_id=HOkkX72PMF",
+      "qrCodeUrl": "https://pwa.fmode.cn/apig-pay.html?user={{user}}&apigid={{apigid}}&fun_id=HOkkX72PMF",
       "paymentCheckEndpoint": "https://server.fmode.cn/api/apig/getApig",
       "pollingIntervalMs": 3000,
       "pollingTimeoutMs": 300000,

+ 3 - 3
social-media/tiktok-user-profile/api-config.json

@@ -1,4 +1,4 @@
-{
+{
   "name": "tiktok-user-profile",
   "displayName": "TikTok 用户详情",
   "description": "根据用户名获取 TikTok 用户完整资料(粉丝数/总获赞/作品数/个人简介等)。适用于竞品品牌 TikTok 影响力分析、KOL 达人档案建立、达人商业价値评估。",
@@ -156,7 +156,7 @@
     "resolutionOrder": ["configFile", "currentToken"],
     "onMissing": {
       "action": "showPaymentQR",
-      "qrCodeUrl": "https://payment.brainhack.cn/apig-pay.html?user={{user}}&apigid={{apigid}}&fun_id=HOkkX72PMF",
+      "qrCodeUrl": "https://pwa.fmode.cn/apig-pay.html?user={{user}}&apigid={{apigid}}&fun_id=HOkkX72PMF",
       "paymentCheckEndpoint": "https://server.fmode.cn/api/apig/getApig",
       "pollingIntervalMs": 3000,
       "pollingTimeoutMs": 300000,
@@ -166,7 +166,7 @@
     },
     "onBalanceInsufficient": {
       "action": "showPaymentQR",
-      "qrCodeUrl": "https://payment.brainhack.cn/apig-pay.html?user={{user}}&apigid={{apigid}}&fun_id=HOkkX72PMF",
+      "qrCodeUrl": "https://pwa.fmode.cn/apig-pay.html?user={{user}}&apigid={{apigid}}&fun_id=HOkkX72PMF",
       "paymentCheckEndpoint": "https://server.fmode.cn/api/apig/getApig",
       "pollingIntervalMs": 3000,
       "pollingTimeoutMs": 300000,

+ 3 - 3
social-media/tiktok-user-search/api-config.json

@@ -1,4 +1,4 @@
-{
+{
   "name": "tiktok-user-search",
   "displayName": "TikTok 用户搜索",
   "description": "按关键词搜索 TikTok 达人/用户,返回匹配账号列表及基础数据。适用于 KOL 候选人初筛、品类达人批量搜索、竞品品牌账号定位。",
@@ -146,7 +146,7 @@
     "resolutionOrder": ["configFile", "currentToken"],
     "onMissing": {
       "action": "showPaymentQR",
-      "qrCodeUrl": "https://payment.brainhack.cn/apig-pay.html?user={{user}}&apigid={{apigid}}&fun_id=HOkkX72PMF",
+      "qrCodeUrl": "https://pwa.fmode.cn/apig-pay.html?user={{user}}&apigid={{apigid}}&fun_id=HOkkX72PMF",
       "paymentCheckEndpoint": "https://server.fmode.cn/api/apig/getApig",
       "pollingIntervalMs": 3000,
       "pollingTimeoutMs": 300000,
@@ -156,7 +156,7 @@
     },
     "onBalanceInsufficient": {
       "action": "showPaymentQR",
-      "qrCodeUrl": "https://payment.brainhack.cn/apig-pay.html?user={{user}}&apigid={{apigid}}&fun_id=HOkkX72PMF",
+      "qrCodeUrl": "https://pwa.fmode.cn/apig-pay.html?user={{user}}&apigid={{apigid}}&fun_id=HOkkX72PMF",
       "paymentCheckEndpoint": "https://server.fmode.cn/api/apig/getApig",
       "pollingIntervalMs": 3000,
       "pollingTimeoutMs": 300000,

+ 3 - 3
social-media/tiktok-video-comments/api-config.json

@@ -1,4 +1,4 @@
-{
+{
   "name": "tiktok-video-comments",
   "displayName": "TikTok 视频评论查询",
   "description": "获取指定 TikTok 视频的用户评论列表,支持翻页。用户评论是 VOC 情感分析、痛点挖掘、需求发现的核心英文数据源。适用于品类用户评价采集、竞品带货视频反馈分析。",
@@ -155,7 +155,7 @@
     "resolutionOrder": ["configFile", "currentToken"],
     "onMissing": {
       "action": "showPaymentQR",
-      "qrCodeUrl": "https://payment.brainhack.cn/apig-pay.html?user={{user}}&apigid={{apigid}}&fun_id=HOkkX72PMF",
+      "qrCodeUrl": "https://pwa.fmode.cn/apig-pay.html?user={{user}}&apigid={{apigid}}&fun_id=HOkkX72PMF",
       "paymentCheckEndpoint": "https://server.fmode.cn/api/apig/getApig",
       "pollingIntervalMs": 3000,
       "pollingTimeoutMs": 300000,
@@ -165,7 +165,7 @@
     },
     "onBalanceInsufficient": {
       "action": "showPaymentQR",
-      "qrCodeUrl": "https://payment.brainhack.cn/apig-pay.html?user={{user}}&apigid={{apigid}}&fun_id=HOkkX72PMF",
+      "qrCodeUrl": "https://pwa.fmode.cn/apig-pay.html?user={{user}}&apigid={{apigid}}&fun_id=HOkkX72PMF",
       "paymentCheckEndpoint": "https://server.fmode.cn/api/apig/getApig",
       "pollingIntervalMs": 3000,
       "pollingTimeoutMs": 300000,

+ 3 - 3
social-media/tiktok-video-detail/api-config.json

@@ -1,4 +1,4 @@
-{
+{
   "name": "tiktok-video-detail",
   "displayName": "TikTok 视频详情",
   "description": "根据视频 ID 获取单条 TikTok 视频完整数据(播放量/点赞/评论/分享/话题标签/作者等)。适用于爆款视频深度分析、竞品内容解析、KOL 内容效果评估。",
@@ -149,7 +149,7 @@
     "resolutionOrder": ["configFile", "currentToken"],
     "onMissing": {
       "action": "showPaymentQR",
-      "qrCodeUrl": "https://payment.brainhack.cn/apig-pay.html?user={{user}}&apigid={{apigid}}&fun_id=HOkkX72PMF",
+      "qrCodeUrl": "https://pwa.fmode.cn/apig-pay.html?user={{user}}&apigid={{apigid}}&fun_id=HOkkX72PMF",
       "paymentCheckEndpoint": "https://server.fmode.cn/api/apig/getApig",
       "pollingIntervalMs": 3000,
       "pollingTimeoutMs": 300000,
@@ -159,7 +159,7 @@
     },
     "onBalanceInsufficient": {
       "action": "showPaymentQR",
-      "qrCodeUrl": "https://payment.brainhack.cn/apig-pay.html?user={{user}}&apigid={{apigid}}&fun_id=HOkkX72PMF",
+      "qrCodeUrl": "https://pwa.fmode.cn/apig-pay.html?user={{user}}&apigid={{apigid}}&fun_id=HOkkX72PMF",
       "paymentCheckEndpoint": "https://server.fmode.cn/api/apig/getApig",
       "pollingIntervalMs": 3000,
       "pollingTimeoutMs": 300000,

+ 3 - 3
social-media/tiktok-video-search/api-config.json

@@ -1,4 +1,4 @@
-{
+{
   "name": "tiktok-video-search",
   "displayName": "TikTok 视频搜索",
   "description": "按关键词搜索 TikTok 视频,返回视频列表及播放量/点赞/评论/分享等数据。适用于品类 TikTok 爆款内容发现、竞品视频监控、社媒频道热度统计、KOL 内容效果对比。",
@@ -200,7 +200,7 @@
     "resolutionOrder": ["configFile", "currentToken"],
     "onMissing": {
       "action": "showPaymentQR",
-      "qrCodeUrl": "https://payment.brainhack.cn/apig-pay.html?user={{user}}&apigid={{apigid}}&fun_id=HOkkX72PMF",
+      "qrCodeUrl": "https://pwa.fmode.cn/apig-pay.html?user={{user}}&apigid={{apigid}}&fun_id=HOkkX72PMF",
       "paymentCheckEndpoint": "https://server.fmode.cn/api/apig/getApig",
       "pollingIntervalMs": 3000,
       "pollingTimeoutMs": 300000,
@@ -210,7 +210,7 @@
     },
     "onBalanceInsufficient": {
       "action": "showPaymentQR",
-      "qrCodeUrl": "https://payment.brainhack.cn/apig-pay.html?user={{user}}&apigid={{apigid}}&fun_id=HOkkX72PMF",
+      "qrCodeUrl": "https://pwa.fmode.cn/apig-pay.html?user={{user}}&apigid={{apigid}}&fun_id=HOkkX72PMF",
       "paymentCheckEndpoint": "https://server.fmode.cn/api/apig/getApig",
       "pollingIntervalMs": 3000,
       "pollingTimeoutMs": 300000,

+ 3 - 3
social-voc/instagram-brand-voc/api-config.json

@@ -1,4 +1,4 @@
-{
+{
   "name": "instagram-brand-voc",
   "displayName": "Instagram品牌VOC采集",
   "description": "搜索竞品品牌Instagram账号,采集帖子和互动数据,分析品牌IG策略",
@@ -122,7 +122,7 @@
     "resolutionOrder": ["configFile", "currentToken"],
     "onMissing": {
       "action": "showPaymentQR",
-      "qrCodeUrl": "https://payment.brainhack.cn/apig-pay.html?user={{user}}&apigid={{apigid}}&fun_id=HOkkX72PMF",
+      "qrCodeUrl": "https://pwa.fmode.cn/apig-pay.html?user={{user}}&apigid={{apigid}}&fun_id=HOkkX72PMF",
       "paymentCheckEndpoint": "https://server.fmode.cn/api/apig/getApig",
       "pollingIntervalMs": 3000,
       "pollingTimeoutMs": 300000,
@@ -132,7 +132,7 @@
     },
     "onBalanceInsufficient": {
       "action": "showPaymentQR",
-      "qrCodeUrl": "https://payment.brainhack.cn/apig-pay.html?user={{user}}&apigid={{apigid}}&fun_id=HOkkX72PMF",
+      "qrCodeUrl": "https://pwa.fmode.cn/apig-pay.html?user={{user}}&apigid={{apigid}}&fun_id=HOkkX72PMF",
       "paymentCheckEndpoint": "https://server.fmode.cn/api/apig/getApig",
       "pollingIntervalMs": 3000,
       "pollingTimeoutMs": 300000,

+ 3 - 3
social-voc/social-trend-analysis/api-config.json

@@ -1,4 +1,4 @@
-{
+{
   "name": "social-trend-analysis",
   "displayName": "社媒趋势与热度分析",
   "description": "综合TikTok和Instagram数据,分析品类社媒趋势、热度走向和内容生态",
@@ -181,7 +181,7 @@
     "resolutionOrder": ["configFile", "currentToken"],
     "onMissing": {
       "action": "showPaymentQR",
-      "qrCodeUrl": "https://payment.brainhack.cn/apig-pay.html?user={{user}}&apigid={{apigid}}&fun_id=HOkkX72PMF",
+      "qrCodeUrl": "https://pwa.fmode.cn/apig-pay.html?user={{user}}&apigid={{apigid}}&fun_id=HOkkX72PMF",
       "paymentCheckEndpoint": "https://server.fmode.cn/api/apig/getApig",
       "pollingIntervalMs": 3000,
       "pollingTimeoutMs": 300000,
@@ -191,7 +191,7 @@
     },
     "onBalanceInsufficient": {
       "action": "showPaymentQR",
-      "qrCodeUrl": "https://payment.brainhack.cn/apig-pay.html?user={{user}}&apigid={{apigid}}&fun_id=HOkkX72PMF",
+      "qrCodeUrl": "https://pwa.fmode.cn/apig-pay.html?user={{user}}&apigid={{apigid}}&fun_id=HOkkX72PMF",
       "paymentCheckEndpoint": "https://server.fmode.cn/api/apig/getApig",
       "pollingIntervalMs": 3000,
       "pollingTimeoutMs": 300000,

+ 3 - 3
social-voc/tiktok-brand-voc/api-config.json

@@ -1,4 +1,4 @@
-{
+{
   "name": "tiktok-brand-voc",
   "displayName": "TikTok品牌VOC采集",
   "description": "搜索竞品品牌TikTok账号,采集发布内容和用户评论,分析品牌社媒策略",
@@ -150,7 +150,7 @@
     "resolutionOrder": ["configFile", "currentToken"],
     "onMissing": {
       "action": "showPaymentQR",
-      "qrCodeUrl": "https://payment.brainhack.cn/apig-pay.html?user={{user}}&apigid={{apigid}}&fun_id=HOkkX72PMF",
+      "qrCodeUrl": "https://pwa.fmode.cn/apig-pay.html?user={{user}}&apigid={{apigid}}&fun_id=HOkkX72PMF",
       "paymentCheckEndpoint": "https://server.fmode.cn/api/apig/getApig",
       "pollingIntervalMs": 3000,
       "pollingTimeoutMs": 300000,
@@ -160,7 +160,7 @@
     },
     "onBalanceInsufficient": {
       "action": "showPaymentQR",
-      "qrCodeUrl": "https://payment.brainhack.cn/apig-pay.html?user={{user}}&apigid={{apigid}}&fun_id=HOkkX72PMF",
+      "qrCodeUrl": "https://pwa.fmode.cn/apig-pay.html?user={{user}}&apigid={{apigid}}&fun_id=HOkkX72PMF",
       "paymentCheckEndpoint": "https://server.fmode.cn/api/apig/getApig",
       "pollingIntervalMs": 3000,
       "pollingTimeoutMs": 300000,

+ 3 - 3
social-voc/tiktok-category-voc/api-config.json

@@ -1,4 +1,4 @@
-{
+{
   "name": "tiktok-category-voc",
   "displayName": "TikTok品类VOC采集",
   "description": "基于品类关键词搜索TikTok视频并批量采集评论,提取用户讨论热点和情感倾向",
@@ -161,7 +161,7 @@
     "resolutionOrder": ["configFile", "currentToken"],
     "onMissing": {
       "action": "showPaymentQR",
-      "qrCodeUrl": "https://payment.brainhack.cn/apig-pay.html?user={{user}}&apigid={{apigid}}&fun_id=HOkkX72PMF",
+      "qrCodeUrl": "https://pwa.fmode.cn/apig-pay.html?user={{user}}&apigid={{apigid}}&fun_id=HOkkX72PMF",
       "paymentCheckEndpoint": "https://server.fmode.cn/api/apig/getApig",
       "pollingIntervalMs": 3000,
       "pollingTimeoutMs": 300000,
@@ -171,7 +171,7 @@
     },
     "onBalanceInsufficient": {
       "action": "showPaymentQR",
-      "qrCodeUrl": "https://payment.brainhack.cn/apig-pay.html?user={{user}}&apigid={{apigid}}&fun_id=HOkkX72PMF",
+      "qrCodeUrl": "https://pwa.fmode.cn/apig-pay.html?user={{user}}&apigid={{apigid}}&fun_id=HOkkX72PMF",
       "paymentCheckEndpoint": "https://server.fmode.cn/api/apig/getApig",
       "pollingIntervalMs": 3000,
       "pollingTimeoutMs": 300000,

+ 26 - 1
synthesis/brand-profile/SKILL.md

@@ -96,5 +96,30 @@ brand-profile
 - Amazon VOC API: `https://server.fmode.cn/api/voc-ecom/forward`(统一转发,认证已内置)
 - 内置 6 维评分算法(定价/评分/流量/销售/增长/口碑),每维 0-100 分加权求总分
 
+## 工作坊记忆集成
+
+当处于 VOC 工作坊流程中时,本技能支持从记忆文件自动读取参数:
+
+| 参数 | 记忆来源 | 字段路径 |
+|------|---------|---------|
+| brandName | `memory/brand-context.json` | `.brandName` |
+| brandAsins | `memory/brand-context.json` | `.brandAsins` |
+| categoryKeyword | `memory/brand-context.json` | `.categoryKeywords[0]` |
+| categoryLandscape | `memory/stage-1-output.json` | `.categoryLandscape` |
+| domain | `memory/brand-context.json` | `.amazonDomain` |
+
+**执行完毕后**,将输出写入 `memory/stage-2-output.json`(v2 schema),需填充:
+- `brandProfile.overallScore` — 品牌综合得分(0-100)
+- `brandProfile.dimensions` — 六维画像 { pricing, rating, traffic, sales, growth, reputation },每维含 score/rank/detail
+- `brandProfile.positioning` — 竞争定位描述
+- `brandProfile.strengths` / `weaknesses` — 品牌优劣势
+- `productDiagnosis` — 主力ASIN深度诊断(listing/图片/定价/评论健康度)
+- `competitorComparison.vulnerabilities` — 竞品漏洞列表
+- `competitorComparison.threats` — 竞品威胁列表
+- `pricingAnalysis` — 定价分析(弹性/推荐区间/毛利估算)
+- `competitorHealthComparison` — 品牌vs竞品健康度对比
+
+参考规范:`workshop/voc-report-schema-spec.md` Stage 2 章节。
+
 ## 对应工作坊环节
-Day1 下午 13:30-14:30「指导龙虾认知自身品牌」— 输出《品牌认知校准卡》
+Day1 下午 13:30-14:30「教虾认品牌」— 输出《品牌六维画像》+《品牌认知校准卡》

+ 3 - 3
synthesis/brand-profile/api-config.json

@@ -1,4 +1,4 @@
-{
+{
   "name": "brand-profile",
   "displayName": "品牌六维画像",
   "description": "生成品牌六维量化画像,标注机会/风险标签、识别核心短板、输出竞争定位建议和《品牌认知校准卡》",
@@ -191,7 +191,7 @@
     "resolutionOrder": ["configFile", "currentToken"],
     "onMissing": {
       "action": "showPaymentQR",
-      "qrCodeUrl": "https://payment.brainhack.cn/apig-pay.html?user={{user}}&apigid={{apigid}}&fun_id=HOkkX72PMF",
+      "qrCodeUrl": "https://pwa.fmode.cn/apig-pay.html?user={{user}}&apigid={{apigid}}&fun_id=HOkkX72PMF",
       "paymentCheckEndpoint": "https://server.fmode.cn/api/apig/getApig",
       "pollingIntervalMs": 3000,
       "pollingTimeoutMs": 300000,
@@ -201,7 +201,7 @@
     },
     "onBalanceInsufficient": {
       "action": "showPaymentQR",
-      "qrCodeUrl": "https://payment.brainhack.cn/apig-pay.html?user={{user}}&apigid={{apigid}}&fun_id=HOkkX72PMF",
+      "qrCodeUrl": "https://pwa.fmode.cn/apig-pay.html?user={{user}}&apigid={{apigid}}&fun_id=HOkkX72PMF",
       "paymentCheckEndpoint": "https://server.fmode.cn/api/apig/getApig",
       "pollingIntervalMs": 3000,
       "pollingTimeoutMs": 300000,

+ 24 - 1
synthesis/category-landscape/SKILL.md

@@ -104,5 +104,28 @@ category-landscape
 - Amazon VOC API: `https://server.fmode.cn/api/voc-ecom/forward`(统一转发,认证已内置)
 - 内置 CR5/HHI 集中度算法 + 价格带五分位划分
 
+## 工作坊记忆集成
+
+当处于 VOC 工作坊流程中时,本技能支持从记忆文件自动读取参数:
+
+| 参数 | 记忆来源 | 字段路径 |
+|------|---------|---------|
+| keywords | `memory/brand-context.json` | `.categoryKeywords` |
+| domain | `memory/brand-context.json` | `.amazonDomain` |
+
+**执行完毕后**,将完整输出写入 `memory/stage-1-output.json`(v2 schema),需填充:
+- `categoryLandscape.marketOverview` — 市场规模全量指标
+- `categoryLandscape.concentration` — CR5/CR10/HHI + topBrands
+- `categoryLandscape.priceBands` — 价格带分布 + 黄金价格带 + 空白机会
+- `categoryLandscape.searchTrend` — 搜索趋势 + 季节性 + YoY增长
+- `categoryLandscape.competitiveLandscape` — 进入壁垒/成熟度/FBA率/视频率/A+率
+- `categoryLandscape.healthScore` — 四维健康度评分(0-100)
+- `categoryLandscape.riskAlerts` — 风险预警列表
+- `categoryLandscape.priorityActions` — 优先行动建议
+
+同时更新 `memory/workshop-progress.json` 中 `session-1.status = "completed"`。
+
+参考规范:`workshop/voc-report-schema-spec.md` Stage 1 章节。
+
 ## 对应工作坊环节
-Day1 上午 09:00-12:00「指导龙虾认知品类」— 输出《品类认知校准表》
+Day1 上午 09:00-12:00「教虾认品类」— 输出《品类健康度评分》+《品类认知校准表》

+ 3 - 3
synthesis/category-landscape/api-config.json

@@ -1,4 +1,4 @@
-{
+{
   "name": "category-landscape",
   "displayName": "品类格局分析",
   "description": "品类全景分析,计算CR5/HHI市场集中度,生成风险预警汇总和优先行动清单,输出《品类认知校准表》",
@@ -234,7 +234,7 @@
     "resolutionOrder": ["configFile", "currentToken"],
     "onMissing": {
       "action": "showPaymentQR",
-      "qrCodeUrl": "https://payment.brainhack.cn/apig-pay.html?user={{user}}&apigid={{apigid}}&fun_id=HOkkX72PMF",
+      "qrCodeUrl": "https://pwa.fmode.cn/apig-pay.html?user={{user}}&apigid={{apigid}}&fun_id=HOkkX72PMF",
       "paymentCheckEndpoint": "https://server.fmode.cn/api/apig/getApig",
       "pollingIntervalMs": 3000,
       "pollingTimeoutMs": 300000,
@@ -244,7 +244,7 @@
     },
     "onBalanceInsufficient": {
       "action": "showPaymentQR",
-      "qrCodeUrl": "https://payment.brainhack.cn/apig-pay.html?user={{user}}&apigid={{apigid}}&fun_id=HOkkX72PMF",
+      "qrCodeUrl": "https://pwa.fmode.cn/apig-pay.html?user={{user}}&apigid={{apigid}}&fun_id=HOkkX72PMF",
       "paymentCheckEndpoint": "https://server.fmode.cn/api/apig/getApig",
       "pollingIntervalMs": 3000,
       "pollingTimeoutMs": 300000,

+ 48 - 3
synthesis/html-report-generator/SKILL.md

@@ -1,7 +1,7 @@
 ---
 name: html-report-generator
-description: 整合所有前置 Skill 输出,AI 生成结构化 REPORT_DATA JSON,注入 report_template.html 模板,输出完整可渲染的 9 屏幻灯片 HTML 竞品分析报告。
-version: 1.3.0
+description: 整合所有前置 Skill 输出,AI 生成结构化 REPORT_DATA JSON,注入 report_template.html 模板,输出完整可渲染的 13 屏幻灯片 HTML VOC分析报告。
+version: 2.1.0
 author: nkkj-BrainHack
 ---
 
@@ -9,7 +9,7 @@ author: nkkj-BrainHack
 
 ## 功能用途
 
-将品类分析、竞品分析、VOC 洞察、社媒数据整合,AI 生成与 `report_template.html` 完全匹配的 `REPORT_DATA` JSON,并填充模板 `{{placeholder}}` 变量,输出可直接在浏览器打开的 9 屏幻灯片 HTML 报告。
+将品类分析、竞品分析、VOC 洞察、社媒数据整合,AI 生成与 `report_template.html` 完全匹配的 `REPORT_DATA` JSON,并填充模板 `{{placeholder}}` 变量,输出可直接在浏览器打开的 13 屏幻灯片 HTML 报告。
 
 **核心业务场景:**
 - 工作坊成果交付(一键生成可演示的 HTML 报告取代手动 PPT)
@@ -90,3 +90,48 @@ author: nkkj-BrainHack
 - 纯 AI 综合生成,无外部 API 调用
 - 模板文件: `workflows/templates/report_template.html`(部署时需同步模板)
 - 依赖全部前置 Skill 的输出数据
+
+## 工作坊记忆集成
+
+当处于 VOC 工作坊流程中时,本技能支持从记忆文件自动读取参数(v2 schema):
+
+| 参数 | 记忆来源 | 字段路径 |
+|------|---------|---------|
+| industryName | `memory/brand-context.json` | 从 `.categoryKeywords` 推断 |
+| coverBrandEnglish | `memory/brand-context.json` | `.brandName` |
+| reportDate | 自动生成 | 当前日期 |
+| categoryLandscape | `memory/stage-1-output.json` | `.categoryLandscape`(含healthScore) |
+| competitorData | `memory/stage-2-output.json` | `.{competitorDiscovery, competitorComparison, pricingAnalysis}` |
+| voiceClassification | `memory/stage-3-output.json` | `.voiceClassification`(三维情感) |
+| brandVsCompetitor | `memory/stage-3-output.json` | `.brandVsCompetitor` |
+| keywordCloud | `memory/stage-3-output.json` | `.keywordCloud` |
+| painPointInsight | `memory/stage-4-output.json` | `.painPointInsight`(显性+隐性+权重) |
+| highlightInsight | `memory/stage-4-output.json` | `.highlightInsight`(亮点+Listing建议) |
+| featureSatisfaction | `memory/stage-4-output.json` | `.featureSatisfaction`(四象限+缺口) |
+| scenarioDashboard | `memory/stage-4-output.json` | `.scenarioDashboard`(高频+失败+新兴) |
+| socialVocData | `memory/stage-4-output.json` | `.{socialTrend, competitorBsr, crossChannelInsight}`(可选) |
+| userPersona | `memory/stage-4-output.json` | `.userPersona` |
+| actionableInsights | `memory/stage-5-output.json` | `.actionableInsights`(来自voc-proposal) |
+| overallHealthScore | `memory/stage-5-output.json` | `.overallHealthScore`(来自voc-proposal) |
+
+**HTML报告需包含13屏**(升级自原9屏):
+1. 封面
+2. 执行摘要 + 综合健康度评分(五维雷达图)
+3. 品类全景(市场规模+健康度+价格带)
+4. 品牌六维画像(雷达图)
+5. 竞品对比矩阵(多维表格+漏洞卡片)
+6. 用户声音分类(情感分布条+三栏明细)
+7. 痛点深度洞察(权重排行表+痛点卡片)
+8. 卖点植入方案(亮点→Listing建议+竞品对比)
+9. 功能满足度(四象限矩阵+缺口卡片)
+10. 使用场景看板(场景卡片+满意度排行)
+11. 用户画像(3-5个画像卡片)
+12. 行动计划(P0/P1/P2优先级+30天时间线)
+13. ROI估算(投入产出对比表)
+
+**执行完毕后**,将 HTML 文件路径写入 `memory/stage-5-output.json`(htmlReport 部分)。
+
+参考规范:`workshop/voc-report-schema-spec.md` 全文。
+
+## 对应工作坊环节
+Day2 下午 14:00-14:30「虾做报告」— 输出《HTML可演示报告》(13屏完整报告)

+ 5 - 5
synthesis/html-report-generator/api-config.json

@@ -1,9 +1,9 @@
-{
+{
   "name": "html-report-generator",
   "displayName": "HTML竞品分析报告生成器",
-  "description": "整合所有前置Skill输出,AI生成REPORT_DATA JSON,注入report_template.html模板,输出完整可渲染的9屏幻灯片HTML竞品分析报告",
+  "description": "整合所有前置Skill输出,AI生成REPORT_DATA JSON,注入report_template.html模板,输出完整可渲染的13屏HTML VOC分析报告",
   "category": "synthesis",
-  "version": "1.3.0",
+  "version": "2.1.0",
   "type": "analysis",
   "templateRef": "workflows/templates/report_template.html",
   "parameters": {
@@ -172,7 +172,7 @@
     "resolutionOrder": ["configFile", "currentToken"],
     "onMissing": {
       "action": "showPaymentQR",
-      "qrCodeUrl": "https://payment.brainhack.cn/apig-pay.html?user={{user}}&apigid={{apigid}}&fun_id=HOkkX72PMF",
+      "qrCodeUrl": "https://pwa.fmode.cn/apig-pay.html?user={{user}}&apigid={{apigid}}&fun_id=HOkkX72PMF",
       "paymentCheckEndpoint": "https://server.fmode.cn/api/apig/getApig",
       "pollingIntervalMs": 3000,
       "pollingTimeoutMs": 300000,
@@ -182,7 +182,7 @@
     },
     "onBalanceInsufficient": {
       "action": "showPaymentQR",
-      "qrCodeUrl": "https://payment.brainhack.cn/apig-pay.html?user={{user}}&apigid={{apigid}}&fun_id=HOkkX72PMF",
+      "qrCodeUrl": "https://pwa.fmode.cn/apig-pay.html?user={{user}}&apigid={{apigid}}&fun_id=HOkkX72PMF",
       "paymentCheckEndpoint": "https://server.fmode.cn/api/apig/getApig",
       "pollingIntervalMs": 3000,
       "pollingTimeoutMs": 300000,

+ 3 - 3
synthesis/product-deep-analysis/api-config.json

@@ -1,4 +1,4 @@
-{
+{
   "name": "product-deep-analysis",
   "displayName": "单品深度诊断",
   "description": "针对单个ASIN进行多维度深度分析:流量架构透视、定价策略、Listing优化、VOC痛点、广告策略、市场机会,并由AI生成核心诊断和运营建议",
@@ -432,7 +432,7 @@
     "resolutionOrder": ["configFile", "currentToken"],
     "onMissing": {
       "action": "showPaymentQR",
-      "qrCodeUrl": "https://payment.brainhack.cn/apig-pay.html?user={{user}}&apigid={{apigid}}&fun_id=HOkkX72PMF",
+      "qrCodeUrl": "https://pwa.fmode.cn/apig-pay.html?user={{user}}&apigid={{apigid}}&fun_id=HOkkX72PMF",
       "paymentCheckEndpoint": "https://server.fmode.cn/api/apig/getApig",
       "pollingIntervalMs": 3000,
       "pollingTimeoutMs": 300000,
@@ -442,7 +442,7 @@
     },
     "onBalanceInsufficient": {
       "action": "showPaymentQR",
-      "qrCodeUrl": "https://payment.brainhack.cn/apig-pay.html?user={{user}}&apigid={{apigid}}&fun_id=HOkkX72PMF",
+      "qrCodeUrl": "https://pwa.fmode.cn/apig-pay.html?user={{user}}&apigid={{apigid}}&fun_id=HOkkX72PMF",
       "paymentCheckEndpoint": "https://server.fmode.cn/api/apig/getApig",
       "pollingIntervalMs": 3000,
       "pollingTimeoutMs": 300000,

+ 22 - 1
synthesis/user-persona/SKILL.md

@@ -116,5 +116,26 @@ user-persona
 - 输入依赖 `review-keyword-cloud`、`review-pain-point-extraction`、`review-highlight-extraction` 输出
 - `social-trend-analysis` 输出(可选)
 
+## 工作坊记忆集成
+
+当处于 VOC 工作坊流程中时,本技能支持从记忆文件自动读取参数(v2 schema):
+
+| 参数 | 记忆来源 | 字段路径 |
+|------|---------|---------|
+| reviewKeywordCloud | `memory/stage-3-output.json` | `.keywordCloud` |
+| reviewPainPoints | `memory/stage-3-output.json` | `.painPointInsight` |
+| reviewHighlights | `memory/stage-3-output.json` | `.voiceClassification.positive` |
+| featureSatisfaction | `memory/stage-3-output.json` | `.featureSatisfaction`(新增) |
+| scenarioDashboard | `memory/stage-3-output.json` | `.scenarioDashboard`(新增) |
+| socialTrendAnalysis | `memory/stage-4-output.json` | `.socialTrend`(可选) |
+| categoryKeyword | `memory/brand-context.json` | `.categoryKeywords[0]` |
+
+**执行完毕后**,将输出写入 `memory/stage-4-output.json`(v2 schema),需填充:
+- `userPersona.personas[]` — 每个画像含 id/label/demographics/psychographics/shoppingBehavior/needs/painPoints/scenarios/triggerKeywords/estimatedMarketShare/acquisitionStrategy
+- `userPersona.primaryPersona` — 主要画像标识
+- `crossChannelInsight` — Amazon vs 社媒情感差异/未满足需求/社媒种草机会/内容营销角度
+
+参考规范:`workshop/voc-report-schema-spec.md` Stage 4 章节。
+
 ## 对应工作坊环节
-Day2 上午 11:10-11:50「用户&场景画像共创」— 输出《用户&场景画像手册》
+Day2 上午 11:10-11:50「教虾画用户」— 输出《用户&场景画像手册》

+ 3 - 3
synthesis/user-persona/api-config.json

@@ -1,4 +1,4 @@
-{
+{
   "name": "user-persona",
   "displayName": "用户画像生成",
   "description": "融合电商VOC和社媒VOC,AI生成核心用户画像、使用场景和决策因素",
@@ -215,7 +215,7 @@
     "resolutionOrder": ["configFile", "currentToken"],
     "onMissing": {
       "action": "showPaymentQR",
-      "qrCodeUrl": "https://payment.brainhack.cn/apig-pay.html?user={{user}}&apigid={{apigid}}&fun_id=HOkkX72PMF",
+      "qrCodeUrl": "https://pwa.fmode.cn/apig-pay.html?user={{user}}&apigid={{apigid}}&fun_id=HOkkX72PMF",
       "paymentCheckEndpoint": "https://server.fmode.cn/api/apig/getApig",
       "pollingIntervalMs": 3000,
       "pollingTimeoutMs": 300000,
@@ -225,7 +225,7 @@
     },
     "onBalanceInsufficient": {
       "action": "showPaymentQR",
-      "qrCodeUrl": "https://payment.brainhack.cn/apig-pay.html?user={{user}}&apigid={{apigid}}&fun_id=HOkkX72PMF",
+      "qrCodeUrl": "https://pwa.fmode.cn/apig-pay.html?user={{user}}&apigid={{apigid}}&fun_id=HOkkX72PMF",
       "paymentCheckEndpoint": "https://server.fmode.cn/api/apig/getApig",
       "pollingIntervalMs": 3000,
       "pollingTimeoutMs": 300000,

+ 86 - 29
synthesis/voc-proposal/SKILL.md

@@ -1,7 +1,7 @@
 ---
 name: voc-proposal
-description: 整合所有VOC分析成果,AI生成结构化的6章节产品优化提案
-version: 1.3.0
+description: 整合所有VOC分析成果,AI生成11章节产品优化提案(含ROI估算+30天行动线)
+version: 2.1.0
 author: nkkj-BrainHack
 ---
 
@@ -11,7 +11,7 @@ author: nkkj-BrainHack
 voc-proposal
 
 ## 技能目的
-整合全部前置Skill输出,AI生成6章节提案,并生成**ROI估算**、**风险整合**和**30天行动时间线**。
+整合全部前置Skill输出,AI生成11章节提案,并生成**ROI估算**、**风险整合**和**30天行动时间线**。
 
 ## 输入参数
 | 参数 | 类型 | 必填 | 说明 |
@@ -27,44 +27,67 @@ voc-proposal
 
 ## 执行流程
 1. 汇总所有输入数据,建立数据索引
-2. AI 按以下6章模板生成提案:
+2. AI 按以下11章模板生成提案:
 
-### 第一章:品类认知
+### 第一章:品类全景
 - 市场规模与增长趋势
 - CR5/HHI市场集中度
 - 价格带分布与主力价格段
-- 品类生命周期阶段判断
+- 品类健康度评分(四维)
 
-### 第二章:品牌定位
-- 品牌六维画像得分
-- 四象限定位图位置
+### 第二章:品牌六维画像
+- 品牌六维画像得分(定价/评分/流量/销售/增长/口碑)
+- 雷达图定位
 - 品牌优势与短板
 - 与品类标杆的差距分析
 
-### 第三章:竞品漏洞
-- 竞品差评痛点Top 10
-- 竞品未满足需求清单
+### 第三章:竞品对比矩阵
+- 竞品多维对比表
+- 竞品漏洞分析
 - 竞品定价策略弱点
 - BSR波动暴露的运营问题
 
-### 第四章:用户需求
+### 第四章:用户声音分类
+- 情感健康分+三维分布(正/中/负)
+- 关键词情感地图
+- 品牌vs竞品情感对比
+
+### 第五章:痛点深度洞察
+- 显性+隐性痛点挖掘
+- 权重排行榜
+- 竞品未解决痛点(差异化机会)
+- 痛点-场景关联分析
+
+### 第六章:卖点植入方案
+- 亮点提炼→Listing标题/Bullet/A+建议
+- 竞品卖点对比
+- 差异化表达策略
+
+### 第七章:功能满足度
+- 四象限矩阵(核心优势/关键缺口/锦上添花/低优先)
+- 功能缺口清单
+- 功能对立分析
+
+### 第八章:使用场景看板
+- 高频场景+满意度
+- 失败场景+退货关联
+- 新兴场景机会
+
+### 第九章:用户画像
 - 核心用户画像(3-5类)
-- 使用场景分布
-- 决策因素权重
+- 购买行为+决策因素
 - 社媒热点话题和内容偏好
 
-### 第五章:产品优化方向
-- 功能改进建议(针对痛点)
-- 卖点提炼建议(针对亮点)
-- 定价策略建议
-- 包装/变体优化建议
-- 新品方向建议
+### 第十章:行动计划
+- P0/P1/P2优先级行动项
+- 30天时间线(W1-W4)
+- 快速见效项 + 战略投资项
 
-### 第六章:落地行动
-- Listing优化关键词清单
-- 广告投放关键词推荐
-- 社媒内容策略建议
-- 优先级和实施时间线
+### 第十一章:ROI估算
+- Listing优化:$0投入→转化率提升
+- PPC广告:$30-50/日→ACOS目标
+- 产品迭代:$5k-10k→评分提升
+- 风险预警整合
 
 3. **ROI估算与风险整合**(新增):
    - 每条建议估算投入/收益/回本周期: Listing($0/即时)→PPC($30-50/日)→产品迭代(60-90天)
@@ -121,13 +144,47 @@ voc-proposal
 ```
 
 ## 核心业务场景
-- VOC 产品优化提案生成(6 章节结构化提案 + ROI 估算 + 30 天行动时间线)
+- VOC 产品优化提案生成(11 章节结构化提案 + ROI 估算 + 30 天行动时间线)
 - 工作坊最终交付物(整合品类/竞品/用户/社媒所有分析成果)
 - 品牌决策支持文档(优先级行动清单 + 风险整合预警)
 
 ## 依赖
 - 全部前置 Skill 的输出数据
-- AI 大模型生成能力(6 章节流式生成)
+- AI 大模型生成能力(11 章节流式生成)
+
+## 工作坊记忆集成
+
+当处于 VOC 工作坊流程中时,本技能支持从记忆文件自动读取**全部**前置参数(v2 schema):
+
+| 参数 | 记忆来源 | 字段路径 |
+|------|---------|---------|
+| categoryLandscape | `memory/stage-1-output.json` | `.categoryLandscape`(含healthScore) |
+| brandProfile | `memory/stage-2-output.json` | `.brandProfile`(六维画像) |
+| competitorData | `memory/stage-2-output.json` | `.{competitorDiscovery, competitorComparison, pricingAnalysis}` |
+| competitorVulnerabilities | `memory/stage-2-output.json` | `.competitorComparison.vulnerabilities` |
+| voiceClassification | `memory/stage-3-output.json` | `.voiceClassification`(三维情感) |
+| brandVsCompetitor | `memory/stage-3-output.json` | `.brandVsCompetitor` |
+| keywordCloud | `memory/stage-3-output.json` | `.keywordCloud` |
+| painPointInsight | `memory/stage-4-output.json` | `.painPointInsight`(显性+隐性+权重) |
+| highlightInsight | `memory/stage-4-output.json` | `.highlightInsight`(亮点+Listing建议) |
+| featureSatisfaction | `memory/stage-4-output.json` | `.featureSatisfaction`(四象限+缺口) |
+| scenarioDashboard | `memory/stage-4-output.json` | `.scenarioDashboard`(高频+失败+新兴) |
+| socialVocData | `memory/stage-4-output.json` | `.{socialTrend, competitorBsr, crossChannelInsight}`(可选) |
+| userPersona | `memory/stage-4-output.json` | `.userPersona` |
+| brandName | `memory/brand-context.json` | `.brandName` |
+| categoryKeyword | `memory/brand-context.json` | `.categoryKeywords[0]` |
+
+同时读取 `memory/calibration-notes.json` 中用户的校准意见,在提案中体现用户的专业判断。
+
+**执行完毕后**,将输出写入 `memory/stage-5-output.json`(v2 schema),需填充:
+- `proposal` — 11章节提案(品类全景/品牌画像/竞品矩阵/声音分类/痛点洞察/卖点植入/功能满足度/场景看板/用户画像/行动计划/ROI)
+- `actionableInsights.topActions[]` — 每项含 scenario/feature/gap/suggestion/priority(P0-P2)/expectedImpact/investmentLevel/timeToResult
+- `actionableInsights.quickWins` — 零/低投入快速见效项
+- `actionableInsights.strategicInvestments` — 中长期战略投资项
+- `overallHealthScore` — 五维综合评分
+- `vocDeepInsightSummary` — VOC四维度摘要指标
+
+参考规范:`workshop/voc-report-schema-spec.md` Stage 5 章节。
 
 ## 对应工作坊环节
-Day2 下午 13:00-14:30「成果整合&提案撰写」— 输出《VOC产品优化/新品提案》
+Day2 下午 13:00-14:30「虾交作业」— 输出《VOC产品优化提案》(11章节+健康度评分+行动项)

+ 5 - 5
synthesis/voc-proposal/api-config.json

@@ -1,9 +1,9 @@
-{
+{
   "name": "voc-proposal",
   "displayName": "VOC产品优化提案生成",
-  "description": "整合所有VOC分析成果,AI生成结构化的6章节产品优化提案",
+  "description": "整合所有VOC分析成果,AI生成11章节产品优化提案(含ROI估算+30天行动线)",
   "category": "synthesis",
-  "version": "1.3.0",
+  "version": "2.1.0",
   "type": "analysis",
   "parameters": {
     "categoryLandscape": {
@@ -240,7 +240,7 @@
     "resolutionOrder": ["configFile", "currentToken"],
     "onMissing": {
       "action": "showPaymentQR",
-      "qrCodeUrl": "https://payment.brainhack.cn/apig-pay.html?user={{user}}&apigid={{apigid}}&fun_id=HOkkX72PMF",
+      "qrCodeUrl": "https://pwa.fmode.cn/apig-pay.html?user={{user}}&apigid={{apigid}}&fun_id=HOkkX72PMF",
       "paymentCheckEndpoint": "https://server.fmode.cn/api/apig/getApig",
       "pollingIntervalMs": 3000,
       "pollingTimeoutMs": 300000,
@@ -250,7 +250,7 @@
     },
     "onBalanceInsufficient": {
       "action": "showPaymentQR",
-      "qrCodeUrl": "https://payment.brainhack.cn/apig-pay.html?user={{user}}&apigid={{apigid}}&fun_id=HOkkX72PMF",
+      "qrCodeUrl": "https://pwa.fmode.cn/apig-pay.html?user={{user}}&apigid={{apigid}}&fun_id=HOkkX72PMF",
       "paymentCheckEndpoint": "https://server.fmode.cn/api/apig/getApig",
       "pollingIntervalMs": 3000,
       "pollingTimeoutMs": 300000,

+ 64 - 0
test/test-billing/SKILL.md

@@ -0,0 +1,64 @@
+---
+name: test-billing
+description: 计费流程测试技能,用于验证 OpenClaw 能否识别 API 返回的余额不足或未授权错误并触发充值页面。调用即梦图片生成API(不传token),故意触发错误响应以测试 errorHandling 和 tokenConfig 计费闭环。
+version: 1.0.0
+author: nkkj-BrainHack
+---
+
+# test-billing
+
+## 功能用途
+
+计费流程端到端测试技能,验证 OpenClaw 平台的 errorHandling + tokenConfig 计费闭环逻辑。
+
+**核心测试场景:**
+- 调用即梦图片生成API(故意不传有效token)
+- 验证 OpenClaw 是否识别 API 返回的错误响应
+- 验证 OpenClaw 是否弹出充值二维码页面(qrCodeUrl)
+- 验证充值完成后是否自动重试 Skill
+
+## 调用链(Workflow)
+
+```
+本步: test-billing(prompt) → 调用即梦API(无token),触发错误响应
+预期: OpenClaw 匹配 errorHandling 条件 → 弹出充值页面
+```
+
+## 入参规则
+
+| 参数 | 类型 | 必填 | 说明 |
+|------|------|------|------|
+| prompt | string | ✅ | 任意文本即可(如"测试") |
+
+## 接口调用方式
+
+- **请求方法**: POST
+- **接口地址**: `https://server.fmode.cn/api/volcengine/jimeng/getImgV4`
+
+```json
+{
+  "prompt": "测试",
+  "sizeDate": { "width": 512, "height": 512 },
+  "scale": 0.6,
+  "force_single": true
+}
+```
+
+## 关键响应字段
+
+| 字段 | 业务用途 |
+|------|---------|
+| error.message | 未传token时返回错误信息 |
+| code | 余额不足时返回 -2/-3 等错误码 |
+| msg | 余额不足时返回中文提示 |
+
+## 预期行为
+
+- API 返回 `{ "error": { "message": "请输入API_KEY或用户sessionToken" } }`
+- errorHandling.unauthorized 条件匹配 `error.message` 含 "API_KEY"/"sessionToken"
+- 触发 tokenConfig.onMissing → 弹出充值页面
+
+## 依赖要求
+
+- 接口地址: `https://server.fmode.cn/api/volcengine/jimeng/getImgV4`
+- 充值页面: `https://pwa.fmode.cn/apig-pay.html`

+ 95 - 0
test/test-billing/api-config.json

@@ -0,0 +1,95 @@
+{
+  "name": "test-billing",
+  "displayName": "计费流程测试",
+  "description": "测试技能:验证 OpenClaw 能否识别 API 错误并触发充值页面。调用即梦API但不传token,故意触发错误响应。",
+  "category": "test",
+  "version": "1.0.0",
+  "endpoint": {
+    "method": "POST",
+    "url": "https://server.fmode.cn/api/volcengine/jimeng/getImgV4",
+    "headers": {
+      "Content-Type": "application/json"
+    }
+  },
+  "parameters": {
+    "type": "object",
+    "required": ["prompt"],
+    "properties": {
+      "prompt": {
+        "type": "string",
+        "description": "图片描述文本"
+      }
+    }
+  },
+  "requestTransform": {
+    "body": {
+      "prompt": "{{prompt}}",
+      "sizeDate": { "width": 512, "height": 512 },
+      "scale": 0.6,
+      "force_single": true
+    }
+  },
+  "response": {
+    "type": "object",
+    "properties": {
+      "code": { "type": "integer" },
+      "data": { "type": "object" },
+      "error": { "type": "object" }
+    }
+  },
+  "timeout": 30000,
+  "usageExamples": [
+    {
+      "name": "测试余额不足流程",
+      "input": {
+        "prompt": "测试"
+      },
+      "description": "发送任意prompt触发API调用,验证错误检测和充值弹窗"
+    }
+  ],
+  "tokenConfig": {
+    "type": "bearer",
+    "tokenField": "token",
+    "resolutionOrder": ["configFile"],
+    "onMissing": {
+      "action": "showPaymentQR",
+      "qrCodeUrl": "https://pwa.fmode.cn/apig-pay.html?user={{user}}&apigid={{apigid}}&fun_id=HOkkX72PMF",
+      "paymentCheckEndpoint": "https://server.fmode.cn/api/apig/getApig",
+      "pollingIntervalMs": 3000,
+      "pollingTimeoutMs": 300000,
+      "onPaymentSuccess": "retrySkillWithNewToken",
+      "title": "请扫码开通服务",
+      "message": "请扫描下方二维码完成支付,支付成功后将自动获取 Token 并继续执行。"
+    },
+    "onBalanceInsufficient": {
+      "action": "showPaymentQR",
+      "qrCodeUrl": "https://pwa.fmode.cn/apig-pay.html?user={{user}}&apigid={{apigid}}&fun_id=HOkkX72PMF",
+      "paymentCheckEndpoint": "https://server.fmode.cn/api/apig/getApig",
+      "pollingIntervalMs": 3000,
+      "pollingTimeoutMs": 300000,
+      "onPaymentSuccess": "retrySkillWithNewToken",
+      "title": "余额不足,请扫码充值",
+      "message": "当前 Token 余额不足,请扫描二维码充值,支付完成后将自动继续执行。"
+    }
+  },
+  "errorHandling": {
+    "balanceInsufficient": {
+      "conditions": [
+        { "responseField": "code", "operator": "in", "value": [-2, -3, -10, 402, 429] },
+        { "responseField": "msg", "operator": "contains", "value": ["余额不足", "insufficient", "balance", "quota"] },
+        { "responseField": "message", "operator": "contains", "value": ["余额不足", "insufficient", "balance"] }
+      ],
+      "matchMode": "any",
+      "trigger": "tokenConfig.onBalanceInsufficient"
+    },
+    "unauthorized": {
+      "conditions": [
+        { "responseField": "code", "operator": "in", "value": [401, 403] },
+        { "responseField": "msg", "operator": "contains", "value": ["unauthorized", "token", "invalid", "auth"] },
+        { "responseField": "error.message", "operator": "contains", "value": ["API_KEY", "sessionToken", "用户不存在", "权限"] }
+      ],
+      "matchMode": "any",
+      "trigger": "tokenConfig.onMissing"
+    }
+  }
+}

+ 2 - 2
video-creation/transcript-to-video/api-config.json

@@ -349,7 +349,7 @@
     "resolutionOrder": ["configFile", "currentToken"],
     "onMissing": {
       "action": "showPaymentQR",
-      "qrCodeUrl": "https://payment.brainhack.cn/apig-pay.html?user={{user}}&apigid={{apigid}}&fun_id=HOkkX72PMF",
+      "qrCodeUrl": "https://pwa.fmode.cn/apig-pay.html?user={{user}}&apigid={{apigid}}&fun_id=HOkkX72PMF",
       "paymentCheckEndpoint": "https://server.fmode.cn/api/apig/getApig",
       "pollingIntervalMs": 3000,
       "pollingTimeoutMs": 300000,
@@ -359,7 +359,7 @@
     },
     "onBalanceInsufficient": {
       "action": "showPaymentQR",
-      "qrCodeUrl": "https://payment.brainhack.cn/apig-pay.html?user={{user}}&apigid={{apigid}}&fun_id=HOkkX72PMF",
+      "qrCodeUrl": "https://pwa.fmode.cn/apig-pay.html?user={{user}}&apigid={{apigid}}&fun_id=HOkkX72PMF",
       "paymentCheckEndpoint": "https://server.fmode.cn/api/apig/getApig",
       "pollingIntervalMs": 3000,
       "pollingTimeoutMs": 300000,

+ 3 - 3
voc/asin-reverse-keywords/api-config.json

@@ -1,4 +1,4 @@
-{
+{
   "name": "asin-reverse-keywords",
   "displayName": "ASIN 反查关键词",
   "description": "根据 ASIN 反向查询该产品关联的搜索关键词列表,包括搜索排名、搜索量等。用于竞品关键词策略分析、广告关键词挖掘。",
@@ -101,7 +101,7 @@
     "resolutionOrder": ["configFile", "currentToken"],
     "onMissing": {
       "action": "showPaymentQR",
-      "qrCodeUrl": "https://payment.brainhack.cn/apig-pay.html?user={{user}}&apigid={{apigid}}&fun_id=HOkkX72PMF",
+      "qrCodeUrl": "https://pwa.fmode.cn/apig-pay.html?user={{user}}&apigid={{apigid}}&fun_id=HOkkX72PMF",
       "paymentCheckEndpoint": "https://server.fmode.cn/api/apig/getApig",
       "pollingIntervalMs": 3000,
       "pollingTimeoutMs": 300000,
@@ -111,7 +111,7 @@
     },
     "onBalanceInsufficient": {
       "action": "showPaymentQR",
-      "qrCodeUrl": "https://payment.brainhack.cn/apig-pay.html?user={{user}}&apigid={{apigid}}&fun_id=HOkkX72PMF",
+      "qrCodeUrl": "https://pwa.fmode.cn/apig-pay.html?user={{user}}&apigid={{apigid}}&fun_id=HOkkX72PMF",
       "paymentCheckEndpoint": "https://server.fmode.cn/api/apig/getApig",
       "pollingIntervalMs": 3000,
       "pollingTimeoutMs": 300000,

+ 3 - 3
voc/asin-sales-volume/api-config.json

@@ -1,4 +1,4 @@
-{
+{
   "name": "asin-sales-volume",
   "displayName": "ASIN 销量查询",
   "description": "查询指定 ASIN 的销量数据,包括日销量、周销量、月销量趋势。用于市场规模估算、品类销售额计算。",
@@ -103,7 +103,7 @@
     "resolutionOrder": ["configFile", "currentToken"],
     "onMissing": {
       "action": "showPaymentQR",
-      "qrCodeUrl": "https://payment.brainhack.cn/apig-pay.html?user={{user}}&apigid={{apigid}}&fun_id=HOkkX72PMF",
+      "qrCodeUrl": "https://pwa.fmode.cn/apig-pay.html?user={{user}}&apigid={{apigid}}&fun_id=HOkkX72PMF",
       "paymentCheckEndpoint": "https://server.fmode.cn/api/apig/getApig",
       "pollingIntervalMs": 3000,
       "pollingTimeoutMs": 300000,
@@ -113,7 +113,7 @@
     },
     "onBalanceInsufficient": {
       "action": "showPaymentQR",
-      "qrCodeUrl": "https://payment.brainhack.cn/apig-pay.html?user={{user}}&apigid={{apigid}}&fun_id=HOkkX72PMF",
+      "qrCodeUrl": "https://pwa.fmode.cn/apig-pay.html?user={{user}}&apigid={{apigid}}&fun_id=HOkkX72PMF",
       "paymentCheckEndpoint": "https://server.fmode.cn/api/apig/getApig",
       "pollingIntervalMs": 3000,
       "pollingTimeoutMs": 300000,

+ 3 - 3
voc/category-products/api-config.json

@@ -1,4 +1,4 @@
-{
+{
   "name": "category-products",
   "displayName": "Amazon 类目产品查询",
   "description": "根据类目 ID 获取该类目下的产品列表。用于获取品类 Top 产品、分析品类竞争格局、统计品牌分布和中国卖家占比。",
@@ -115,7 +115,7 @@
     "resolutionOrder": ["configFile", "currentToken"],
     "onMissing": {
       "action": "showPaymentQR",
-      "qrCodeUrl": "https://payment.brainhack.cn/apig-pay.html?user={{user}}&apigid={{apigid}}&fun_id=HOkkX72PMF",
+      "qrCodeUrl": "https://pwa.fmode.cn/apig-pay.html?user={{user}}&apigid={{apigid}}&fun_id=HOkkX72PMF",
       "paymentCheckEndpoint": "https://server.fmode.cn/api/apig/getApig",
       "pollingIntervalMs": 3000,
       "pollingTimeoutMs": 300000,
@@ -125,7 +125,7 @@
     },
     "onBalanceInsufficient": {
       "action": "showPaymentQR",
-      "qrCodeUrl": "https://payment.brainhack.cn/apig-pay.html?user={{user}}&apigid={{apigid}}&fun_id=HOkkX72PMF",
+      "qrCodeUrl": "https://pwa.fmode.cn/apig-pay.html?user={{user}}&apigid={{apigid}}&fun_id=HOkkX72PMF",
       "paymentCheckEndpoint": "https://server.fmode.cn/api/apig/getApig",
       "pollingIntervalMs": 3000,
       "pollingTimeoutMs": 300000,

+ 3 - 3
voc/category-tree/api-config.json

@@ -1,4 +1,4 @@
-{
+{
   "name": "category-tree",
   "displayName": "Amazon 类目树查询",
   "description": "获取 Amazon 类目层级树结构,用于定位目标品类的类目 ID,再通过 category_products 获取该类目下的产品列表。",
@@ -87,7 +87,7 @@
     "resolutionOrder": ["configFile", "currentToken"],
     "onMissing": {
       "action": "showPaymentQR",
-      "qrCodeUrl": "https://payment.brainhack.cn/apig-pay.html?user={{user}}&apigid={{apigid}}&fun_id=HOkkX72PMF",
+      "qrCodeUrl": "https://pwa.fmode.cn/apig-pay.html?user={{user}}&apigid={{apigid}}&fun_id=HOkkX72PMF",
       "paymentCheckEndpoint": "https://server.fmode.cn/api/apig/getApig",
       "pollingIntervalMs": 3000,
       "pollingTimeoutMs": 300000,
@@ -97,7 +97,7 @@
     },
     "onBalanceInsufficient": {
       "action": "showPaymentQR",
-      "qrCodeUrl": "https://payment.brainhack.cn/apig-pay.html?user={{user}}&apigid={{apigid}}&fun_id=HOkkX72PMF",
+      "qrCodeUrl": "https://pwa.fmode.cn/apig-pay.html?user={{user}}&apigid={{apigid}}&fun_id=HOkkX72PMF",
       "paymentCheckEndpoint": "https://server.fmode.cn/api/apig/getApig",
       "pollingIntervalMs": 3000,
       "pollingTimeoutMs": 300000,

+ 3 - 3
voc/keyword-product-ranking/api-config.json

@@ -1,4 +1,4 @@
-{
+{
   "name": "keyword-product-ranking",
   "displayName": "关键词产品排名查询",
   "description": "查询指定关键词下的产品排名列表,获取该关键词搜索结果中的产品排序。用于竞品在关键词下的位置分析、广告优化。",
@@ -112,7 +112,7 @@
     "resolutionOrder": ["configFile", "currentToken"],
     "onMissing": {
       "action": "showPaymentQR",
-      "qrCodeUrl": "https://payment.brainhack.cn/apig-pay.html?user={{user}}&apigid={{apigid}}&fun_id=HOkkX72PMF",
+      "qrCodeUrl": "https://pwa.fmode.cn/apig-pay.html?user={{user}}&apigid={{apigid}}&fun_id=HOkkX72PMF",
       "paymentCheckEndpoint": "https://server.fmode.cn/api/apig/getApig",
       "pollingIntervalMs": 3000,
       "pollingTimeoutMs": 300000,
@@ -122,7 +122,7 @@
     },
     "onBalanceInsufficient": {
       "action": "showPaymentQR",
-      "qrCodeUrl": "https://payment.brainhack.cn/apig-pay.html?user={{user}}&apigid={{apigid}}&fun_id=HOkkX72PMF",
+      "qrCodeUrl": "https://pwa.fmode.cn/apig-pay.html?user={{user}}&apigid={{apigid}}&fun_id=HOkkX72PMF",
       "paymentCheckEndpoint": "https://server.fmode.cn/api/apig/getApig",
       "pollingIntervalMs": 3000,
       "pollingTimeoutMs": 300000,

+ 3 - 3
voc/keyword-search-trend/api-config.json

@@ -1,4 +1,4 @@
-{
+{
   "name": "keyword-search-trend",
   "displayName": "关键词搜索趋势查询",
   "description": "查询指定关键词的搜索结果趋势变化,包括搜索量随时间的变化。用于发现飙升关键词、季节性趋势分析。",
@@ -101,7 +101,7 @@
     "resolutionOrder": ["configFile", "currentToken"],
     "onMissing": {
       "action": "showPaymentQR",
-      "qrCodeUrl": "https://payment.brainhack.cn/apig-pay.html?user={{user}}&apigid={{apigid}}&fun_id=HOkkX72PMF",
+      "qrCodeUrl": "https://pwa.fmode.cn/apig-pay.html?user={{user}}&apigid={{apigid}}&fun_id=HOkkX72PMF",
       "paymentCheckEndpoint": "https://server.fmode.cn/api/apig/getApig",
       "pollingIntervalMs": 3000,
       "pollingTimeoutMs": 300000,
@@ -111,7 +111,7 @@
     },
     "onBalanceInsufficient": {
       "action": "showPaymentQR",
-      "qrCodeUrl": "https://payment.brainhack.cn/apig-pay.html?user={{user}}&apigid={{apigid}}&fun_id=HOkkX72PMF",
+      "qrCodeUrl": "https://pwa.fmode.cn/apig-pay.html?user={{user}}&apigid={{apigid}}&fun_id=HOkkX72PMF",
       "paymentCheckEndpoint": "https://server.fmode.cn/api/apig/getApig",
       "pollingIntervalMs": 3000,
       "pollingTimeoutMs": 300000,

+ 3 - 3
voc/keyword-search/api-config.json

@@ -1,4 +1,4 @@
-{
+{
   "name": "keyword-search",
   "displayName": "Amazon 关键词查询",
   "description": "查询 Amazon 关键词的搜索量、搜索趋势、竞争度等数据。用于广告关键词推荐、趋势雷达、飙升卖点词分析。",
@@ -108,7 +108,7 @@
     "resolutionOrder": ["configFile", "currentToken"],
     "onMissing": {
       "action": "showPaymentQR",
-      "qrCodeUrl": "https://payment.brainhack.cn/apig-pay.html?user={{user}}&apigid={{apigid}}&fun_id=HOkkX72PMF",
+      "qrCodeUrl": "https://pwa.fmode.cn/apig-pay.html?user={{user}}&apigid={{apigid}}&fun_id=HOkkX72PMF",
       "paymentCheckEndpoint": "https://server.fmode.cn/api/apig/getApig",
       "pollingIntervalMs": 3000,
       "pollingTimeoutMs": 300000,
@@ -118,7 +118,7 @@
     },
     "onBalanceInsufficient": {
       "action": "showPaymentQR",
-      "qrCodeUrl": "https://payment.brainhack.cn/apig-pay.html?user={{user}}&apigid={{apigid}}&fun_id=HOkkX72PMF",
+      "qrCodeUrl": "https://pwa.fmode.cn/apig-pay.html?user={{user}}&apigid={{apigid}}&fun_id=HOkkX72PMF",
       "paymentCheckEndpoint": "https://server.fmode.cn/api/apig/getApig",
       "pollingIntervalMs": 3000,
       "pollingTimeoutMs": 300000,

+ 3 - 3
voc/product-detail-query/api-config.json

@@ -1,4 +1,4 @@
-{
+{
   "name": "product-detail-query",
   "displayName": "Amazon 产品详情查询",
   "description": "根据 ASIN 获取 Amazon 产品详情,包括标题、价格、评分、销量、BSR、品牌、类目、变体、趋势等完整信息。用于竞品分析、市场全景、定价策略。",
@@ -225,7 +225,7 @@
     "resolutionOrder": ["configFile", "currentToken"],
     "onMissing": {
       "action": "showPaymentQR",
-      "qrCodeUrl": "https://payment.brainhack.cn/apig-pay.html?user={{user}}&apigid={{apigid}}&fun_id=HOkkX72PMF",
+      "qrCodeUrl": "https://pwa.fmode.cn/apig-pay.html?user={{user}}&apigid={{apigid}}&fun_id=HOkkX72PMF",
       "paymentCheckEndpoint": "https://server.fmode.cn/api/apig/getApig",
       "pollingIntervalMs": 3000,
       "pollingTimeoutMs": 300000,
@@ -235,7 +235,7 @@
     },
     "onBalanceInsufficient": {
       "action": "showPaymentQR",
-      "qrCodeUrl": "https://payment.brainhack.cn/apig-pay.html?user={{user}}&apigid={{apigid}}&fun_id=HOkkX72PMF",
+      "qrCodeUrl": "https://pwa.fmode.cn/apig-pay.html?user={{user}}&apigid={{apigid}}&fun_id=HOkkX72PMF",
       "paymentCheckEndpoint": "https://server.fmode.cn/api/apig/getApig",
       "pollingIntervalMs": 3000,
       "pollingTimeoutMs": 300000,

+ 3 - 3
voc/product-monitor/api-config.json

@@ -1,4 +1,4 @@
-{
+{
   "name": "product-monitor",
   "displayName": "产品监控数据查询",
   "description": "获取产品的监控追踪数据,包括价格变化、排名变化、评分变化等历史数据。用于竞品动态追踪、价格监控、新品上架预警。",
@@ -100,7 +100,7 @@
     "resolutionOrder": ["configFile", "currentToken"],
     "onMissing": {
       "action": "showPaymentQR",
-      "qrCodeUrl": "https://payment.brainhack.cn/apig-pay.html?user={{user}}&apigid={{apigid}}&fun_id=HOkkX72PMF",
+      "qrCodeUrl": "https://pwa.fmode.cn/apig-pay.html?user={{user}}&apigid={{apigid}}&fun_id=HOkkX72PMF",
       "paymentCheckEndpoint": "https://server.fmode.cn/api/apig/getApig",
       "pollingIntervalMs": 3000,
       "pollingTimeoutMs": 300000,
@@ -110,7 +110,7 @@
     },
     "onBalanceInsufficient": {
       "action": "showPaymentQR",
-      "qrCodeUrl": "https://payment.brainhack.cn/apig-pay.html?user={{user}}&apigid={{apigid}}&fun_id=HOkkX72PMF",
+      "qrCodeUrl": "https://pwa.fmode.cn/apig-pay.html?user={{user}}&apigid={{apigid}}&fun_id=HOkkX72PMF",
       "paymentCheckEndpoint": "https://server.fmode.cn/api/apig/getApig",
       "pollingIntervalMs": 3000,
       "pollingTimeoutMs": 300000,

+ 3 - 3
voc/product-reviews-query/api-config.json

@@ -1,4 +1,4 @@
-{
+{
   "name": "product-reviews-query",
   "displayName": "Amazon 产品评论查询",
   "description": "根据 ASIN 抓取 Amazon 产品用户评论,支持按星级、日期、是否验证购买筛选。用于 VOC 用户洞察、痛点提取、喜爱点分析、使用场景挖掘。",
@@ -220,7 +220,7 @@
     "resolutionOrder": ["configFile", "currentToken"],
     "onMissing": {
       "action": "showPaymentQR",
-      "qrCodeUrl": "https://payment.brainhack.cn/apig-pay.html?user={{user}}&apigid={{apigid}}&fun_id=HOkkX72PMF",
+      "qrCodeUrl": "https://pwa.fmode.cn/apig-pay.html?user={{user}}&apigid={{apigid}}&fun_id=HOkkX72PMF",
       "paymentCheckEndpoint": "https://server.fmode.cn/api/apig/getApig",
       "pollingIntervalMs": 3000,
       "pollingTimeoutMs": 300000,
@@ -230,7 +230,7 @@
     },
     "onBalanceInsufficient": {
       "action": "showPaymentQR",
-      "qrCodeUrl": "https://payment.brainhack.cn/apig-pay.html?user={{user}}&apigid={{apigid}}&fun_id=HOkkX72PMF",
+      "qrCodeUrl": "https://pwa.fmode.cn/apig-pay.html?user={{user}}&apigid={{apigid}}&fun_id=HOkkX72PMF",
       "paymentCheckEndpoint": "https://server.fmode.cn/api/apig/getApig",
       "pollingIntervalMs": 3000,
       "pollingTimeoutMs": 300000,

+ 3 - 3
voc/product-search/api-config.json

@@ -1,4 +1,4 @@
-{
+{
   "name": "product-search",
   "displayName": "Amazon 关键词搜索产品",
   "description": "按关键词搜索 Amazon 产品列表,返回多个产品的标题、价格、评分、销量等信息。用于品类市场全景分析、Top100 产品列表获取。",
@@ -141,7 +141,7 @@
     "resolutionOrder": ["configFile", "currentToken"],
     "onMissing": {
       "action": "showPaymentQR",
-      "qrCodeUrl": "https://payment.brainhack.cn/apig-pay.html?user={{user}}&apigid={{apigid}}&fun_id=HOkkX72PMF",
+      "qrCodeUrl": "https://pwa.fmode.cn/apig-pay.html?user={{user}}&apigid={{apigid}}&fun_id=HOkkX72PMF",
       "paymentCheckEndpoint": "https://server.fmode.cn/api/apig/getApig",
       "pollingIntervalMs": 3000,
       "pollingTimeoutMs": 300000,
@@ -151,7 +151,7 @@
     },
     "onBalanceInsufficient": {
       "action": "showPaymentQR",
-      "qrCodeUrl": "https://payment.brainhack.cn/apig-pay.html?user={{user}}&apigid={{apigid}}&fun_id=HOkkX72PMF",
+      "qrCodeUrl": "https://pwa.fmode.cn/apig-pay.html?user={{user}}&apigid={{apigid}}&fun_id=HOkkX72PMF",
       "paymentCheckEndpoint": "https://server.fmode.cn/api/apig/getApig",
       "pollingIntervalMs": 3000,
       "pollingTimeoutMs": 300000,

+ 3 - 3
voc/similar-products/api-config.json

@@ -1,4 +1,4 @@
-{
+{
   "name": "similar-products",
   "displayName": "Amazon 相似产品查询",
   "description": "根据 ASIN 查询与该产品相似的产品列表,用于竞品发现、关联分析。",
@@ -92,7 +92,7 @@
     "resolutionOrder": ["configFile", "currentToken"],
     "onMissing": {
       "action": "showPaymentQR",
-      "qrCodeUrl": "https://payment.brainhack.cn/apig-pay.html?user={{user}}&apigid={{apigid}}&fun_id=HOkkX72PMF",
+      "qrCodeUrl": "https://pwa.fmode.cn/apig-pay.html?user={{user}}&apigid={{apigid}}&fun_id=HOkkX72PMF",
       "paymentCheckEndpoint": "https://server.fmode.cn/api/apig/getApig",
       "pollingIntervalMs": 3000,
       "pollingTimeoutMs": 300000,
@@ -102,7 +102,7 @@
     },
     "onBalanceInsufficient": {
       "action": "showPaymentQR",
-      "qrCodeUrl": "https://payment.brainhack.cn/apig-pay.html?user={{user}}&apigid={{apigid}}&fun_id=HOkkX72PMF",
+      "qrCodeUrl": "https://pwa.fmode.cn/apig-pay.html?user={{user}}&apigid={{apigid}}&fun_id=HOkkX72PMF",
       "paymentCheckEndpoint": "https://server.fmode.cn/api/apig/getApig",
       "pollingIntervalMs": 3000,
       "pollingTimeoutMs": 300000,

+ 273 - 0
workshop/brand-context-builder/SKILL.md

@@ -0,0 +1,273 @@
+---
+name: brand-context-builder
+description: VOC工作坊建档技能,支持两种模式:品牌研究模式(采集品牌信息)和产品分析模式(采集产品列表+分析维度)。验证输入格式,生成并持久化上下文文件,供后续所有分析技能引用。
+version: 2.0.0
+author: nkkj-BrainHack
+---
+
+# 品牌/产品上下文建档 (Brand & Product Context Builder)
+
+## 技能名称
+brand-context-builder
+
+## 技能目的
+作为 VOC 工作坊的**第一个环节**,通过结构化对话采集客户信息。支持两种模式:
+- **品牌研究模式 (brand-research)**:采集品牌核心信息,驱动完整5阶段工作坊
+- **产品分析模式 (product-analysis)**:采集具体产品列表+分析维度,按产品生成VOC报告
+
+后续所有分析技能从记忆文件读取上下文,避免重复询问。
+
+## 核心业务场景
+- **工作坊开场建档**:新客户首次启动时,引导式采集信息
+- **产品级VOC分析**:客户提供具体产品(Amazon/天猫链接),按产品跑分析
+- **增量补充**:已有建档但进入新阶段需要补充信息
+- **多客户管理**:为不同客户维护独立的上下文
+
+## 输入参数
+
+### 通用参数
+
+| 参数 | 类型 | 必填 | 说明 |
+|------|------|------|------|
+| analysisMode | string | 否 | `"brand-research"`(品牌模式) / `"product-analysis"`(产品模式) / `"auto"`(自动识别,默认) |
+| mode | string | 否 | `"full"`(完整建档,默认) / `"update"`(增量更新) |
+
+### 品牌研究模式参数
+
+| 参数 | 类型 | 必填 | 说明 |
+|------|------|------|------|
+| brandName | string | 条件 | 品牌英文名,brand-research模式必填 |
+| categoryKeywords | string[] | 条件 | 品类核心关键词,brand-research模式必填,至少1个 |
+| amazonDomain | integer | 否 | Amazon站点 1=US 2=UK 3=DE 4=JP,默认1 |
+| brandAsins | string[] | 条件 | 品牌代表ASIN,brand-research模式必填,3-5个 |
+| knownCompetitors | string[] | 否 | 已知竞品品牌名 |
+| competitorAsins | string[] | 否 | 已知竞品ASIN |
+| tiktokKeywords | string[] | 否 | TikTok搜索关键词(Session 4 补充) |
+| douyinKeywords | string[] | 否 | 抖音搜索关键词(Session 4 补充) |
+| workshopGoal | string | 条件 | 分析目标,brand-research模式必填 |
+
+### 产品分析模式参数
+
+| 参数 | 类型 | 必填 | 说明 |
+|------|------|------|------|
+| products | array | 条件 | 产品列表,product-analysis模式必填 |
+| products[].input | string | ✅ | 用户原始输入(URL/ASIN/产品名) |
+| products[].platform | string | 否 | 自动识别: `"amazon"` / `"tmall"` / `"taobao"` / `"name"` |
+| selectedDimensions | string[] | 否 | 选中的分析维度编号,默认["3"](评论VOC) |
+| vocSubDimensions | string[] | 否 | VOC子维度,默认全部 |
+
+## 验证规则
+
+### ASIN 格式验证
+- 必须以 `B0` 开头
+- 长度为 10 个字符
+- 仅含大写字母和数字
+- 验证失败时提示:`"ASIN格式不正确,应为B0开头的10位字母数字组合,如 B0CJ5K1234"`
+
+### 关键词验证
+- 非空字符串
+- 建议为英文(Amazon站点对应语言)
+- 去除首尾空格
+
+### 站点验证
+- 必须是 1/2/3/4 之一
+- 自动映射标签:1→"amazon.com" 2→"amazon.co.uk" 3→"amazon.de" 4→"amazon.co.jp"
+
+## 执行流程
+
+### 品牌研究模式 (brand-research) — Full 建档
+1. 检查是否已有 `brand-context.json`,如有则提示"已有建档,是否覆盖?"
+2. 按顺序采集 7 个字段(分步对话,不要一次性要求全部)
+3. 每个字段采集后立即验证
+4. 验证失败则友好提示并要求重新输入
+5. 全部采集完成后生成摘要请用户确认
+6. 用户确认后写入 `memory/brand-context.json`
+7. 设置 `memory/analysis-request.json` → `mode: "brand-research"`, 所有维度开启
+8. 初始化 `memory/workshop-progress.json`
+9. 初始化 `memory/calibration-notes.json`
+
+### 产品分析模式 (product-analysis)
+1. 接收用户提供的产品列表(URL/ASIN/产品名混合输入)
+2. 逐个解析产品:
+   - **Amazon URL/ASIN**:提取ASIN,调用 `product-detail-query` 获取标题和品类
+   - **天猫/淘宝 URL**:提取产品中文名,Agent翻译为英文关键词,调用 `product-search` 搜索Amazon对标产品,请用户确认选择
+   - **纯产品名**:同天猫逻辑
+3. 自动按品类分组(相似产品归入同一组)
+4. 展示产品清单+分组,请用户确认
+5. 引导用户选择分析维度(1-6选择,默认推荐3=评论VOC)
+6. 如选了维度3,询问VOC子维度偏好(默认全部)
+7. 将全部信息写入 `memory/analysis-request.json`
+8. 为每个品类组生成对应的 `memory/brand-context.json`(categoryKeywords = 组关键词)
+9. 初始化 `memory/workshop-progress.json`
+
+### Update 模式(增量更新)
+1. 读取现有 `analysis-request.json` 或 `brand-context.json`
+2. 仅更新传入的非空字段
+3. 重新验证更新后的完整数据
+4. 展示变更差异,请用户确认
+5. 写入更新
+
+### 产品输入自动识别规则
+
+| 输入格式 | 识别规则 | 处理方式 |
+|---------|---------|---------|
+| `https://www.amazon.com/dp/B0XXXXXXXX` | URL含 `amazon.com/dp/` | 提取ASIN,直接查询 |
+| `B0XXXXXXXX` | 正则 `^B0[A-Z0-9]{8}$` | 直接作为ASIN查询 |
+| `https://detail.tmall.com/item.htm?id=xxx` | URL含 `tmall.com` | 提取产品名→翻译→Amazon搜索桥接 |
+| `https://item.taobao.com/item.htm?id=xxx` | URL含 `taobao.com` | 同天猫逻辑 |
+| `https://detail.1688.com/offer/xxx.html` | URL含 `1688.com` | 同天猫逻辑 |
+| `全身气动按摩床垫` | 中文文本 | 翻译为英文→Amazon搜索桥接 |
+| `massage gun` | 英文文本 | 直接用于Amazon搜索 |
+
+## 对话引导规范
+
+### 语气
+- 自称"虾"或"AI情报实习生"
+- 称呼用户"老板"
+- 专业但亲切,不刻板
+
+### 分步采集原则
+- **每次只问一个问题**,不要一次性列出所有需要的信息
+- 收到回答后先确认,再问下一个
+- 对可选字段明确告知"可以跳过"
+- 提供输入示例降低认知门槛
+
+### 错误处理
+- ASIN 格式错误:给出正确格式示例,要求重新输入
+- 关键词为空:解释为什么需要,给出品类示例
+- 用户说"不知道"竞品:回复"没关系,后面虾会帮你发现竞品"
+
+## 输出格式
+
+### 品牌研究模式输出
+
+```json
+{
+  "success": true,
+  "analysisMode": "brand-research",
+  "brandContext": {
+    "clientId": "自动生成UUID",
+    "brandName": "COCORRINA",
+    "categoryKeywords": ["reed diffuser", "aroma diffuser"],
+    "amazonDomain": 1,
+    "amazonDomainLabel": "amazon.com",
+    "brandAsins": ["B0CJ5KXXXX", "B0DJ6LYYYY"],
+    "knownCompetitors": ["NEST New York"],
+    "competitorAsins": [],
+    "confirmedCompetitors": [],
+    "tiktokKeywords": [],
+    "douyinKeywords": [],
+    "workshopGoal": "想了解品类机会和用户真正在意什么",
+    "createdAt": "2025-06-15T09:00:00Z",
+    "updatedAt": "2025-06-15T09:00:00Z",
+    "completeness": {
+      "brandName": true,
+      "categoryKeywords": true,
+      "amazonDomain": true,
+      "brandAsins": true,
+      "workshopGoal": true
+    }
+  },
+  "readyForSession1": true,
+  "missingFields": []
+}
+```
+
+### 产品分析模式输出
+
+```json
+{
+  "success": true,
+  "analysisMode": "product-analysis",
+  "analysisRequest": {
+    "clientId": "自动生成UUID",
+    "clientName": "健衡康复",
+    "mode": "product-analysis",
+    "products": [
+      {
+        "productId": "p1",
+        "platform": "tmall",
+        "originalName": "全身气动按摩床垫",
+        "bridgedAsin": "B0DRYQTZNM",
+        "bridgedSearchKeyword": "air pressure massage mattress",
+        "title": "RENPHO Air Pressure Massage Mat...",
+        "category": "Massage Equipment",
+        "status": "ready"
+      },
+      {
+        "productId": "p2",
+        "platform": "amazon",
+        "asin": "B0DRYQTZNM",
+        "title": "...",
+        "category": "Massage Equipment",
+        "status": "ready"
+      }
+    ],
+    "productGroups": [
+      {
+        "groupId": "g1",
+        "categoryKeyword": "massage mattress",
+        "categoryLabel": "按摩床垫",
+        "productIds": ["p1", "p2"]
+      }
+    ],
+    "selectedDimensions": {
+      "categoryLandscape": false,
+      "competitorComparison": true,
+      "reviewVoc": true,
+      "socialMedia": false,
+      "userPersona": false,
+      "fullReport": true
+    },
+    "vocSubDimensions": {
+      "voiceClassification": true,
+      "painPointInsight": true,
+      "featureSatisfaction": true,
+      "scenarioDashboard": true
+    }
+  },
+  "readyForAnalysis": true,
+  "totalProducts": 6,
+  "totalGroups": 3
+}
+```
+
+## 与其他技能的关系
+
+### 品牌研究模式
+```
+brand-context-builder (本技能)
+  ↓ 输出 brand-context.json + analysis-request.json(mode=brand-research)
+  ├→ category-landscape   (读取 categoryKeywords, amazonDomain)
+  ├→ brand-profile        (读取 brandName, brandAsins, categoryKeywords)
+  ├→ competitor-discovery  (读取 brandName, brandAsins, knownCompetitors)
+  ├→ review-batch-collection (读取 brandAsins + competitorAsins)
+  ├→ tiktok-category-voc  (读取 tiktokKeywords / categoryKeywords)
+  ├→ user-persona         (读取 categoryKeywords)
+  ├→ voc-proposal         (读取 brandName, categoryKeywords)
+  └→ html-report-generator(读取 brandName)
+```
+
+### 产品分析模式
+```
+brand-context-builder (本技能)
+  ↓ 输出 analysis-request.json(mode=product-analysis) + brand-context.json(per group)
+  │
+  ├→ [per product] product-detail-query (获取产品详情, Amazon产品)
+  ├→ [per tmall]   product-search       (跨平台桥接搜索, 天猫/淘宝产品)
+  │
+  ├→ [per group, if dim1] category-landscape (读取 group.categoryKeyword)
+  ├→ [per group, if dim2] competitor-discovery + comparison
+  ├→ [per product, if dim3] review-batch-collection → VOC分析链
+  │   ├→ review-sentiment-analysis → Prompt 3A → voiceClassification
+  │   ├→ review-pain-point-extraction → Prompt 3B → painPointInsight
+  │   ├→ [Agent合成] Prompt 3C → featureSatisfaction
+  │   └→ [Agent合成] Prompt 3D → scenarioDashboard
+  ├→ [per group, if dim4] tiktok/instagram 社媒技能
+  ├→ [per group, if dim5] user-persona
+  └→ [if dim6] voc-proposal + html-report-generator
+```
+
+## 对应工作坊环节
+阶段零「需求收集+建档」— 工作坊启动后的第一件事,在任何分析开始之前完成。
+支持品牌研究和产品分析两种入口。

+ 140 - 0
workshop/brand-context-builder/api-config.json

@@ -0,0 +1,140 @@
+{
+  "name": "brand-context-builder",
+  "displayName": "品牌上下文建档",
+  "description": "VOC工作坊品牌建档技能,通过结构化问答采集客户品牌信息,验证格式,生成并持久化品牌上下文文件供后续分析技能引用。",
+  "category": "workshop",
+  "version": "1.0.0",
+  "type": "conversational",
+  "parameters": {
+    "type": "object",
+    "required": [],
+    "properties": {
+      "mode": {
+        "type": "string",
+        "description": "建档模式: full=完整建档(默认), update=增量更新",
+        "enum": ["full", "update"],
+        "default": "full"
+      },
+      "brandName": {
+        "type": "string",
+        "description": "品牌英文名称"
+      },
+      "categoryKeywords": {
+        "type": "array",
+        "items": { "type": "string" },
+        "description": "品类核心英文关键词,至少1个,建议2-3个"
+      },
+      "amazonDomain": {
+        "type": "integer",
+        "description": "Amazon站点: 1=US(默认) 2=UK 3=DE 4=JP",
+        "default": 1,
+        "enum": [1, 2, 3, 4]
+      },
+      "brandAsins": {
+        "type": "array",
+        "items": { "type": "string", "pattern": "^B0[A-Z0-9]{8}$" },
+        "description": "品牌代表性ASIN列表,3-5个,B0开头10位"
+      },
+      "knownCompetitors": {
+        "type": "array",
+        "items": { "type": "string" },
+        "description": "已知竞品品牌名(可选)"
+      },
+      "competitorAsins": {
+        "type": "array",
+        "items": { "type": "string" },
+        "description": "已知竞品ASIN(可选)"
+      },
+      "tiktokKeywords": {
+        "type": "array",
+        "items": { "type": "string" },
+        "description": "TikTok搜索关键词(可选,Session 4补充)"
+      },
+      "douyinKeywords": {
+        "type": "array",
+        "items": { "type": "string" },
+        "description": "抖音搜索关键词(可选,Session 4补充)"
+      },
+      "workshopGoal": {
+        "type": "string",
+        "description": "客户希望通过分析解决的核心问题"
+      }
+    }
+  },
+  "validation": {
+    "asinFormat": {
+      "pattern": "^B0[A-Z0-9]{8}$",
+      "errorMessage": "ASIN格式不正确,应为B0开头的10位字母数字组合,如 B0CJ5K1234"
+    },
+    "domainMapping": {
+      "1": "amazon.com",
+      "2": "amazon.co.uk",
+      "3": "amazon.de",
+      "4": "amazon.co.jp"
+    }
+  },
+  "output": {
+    "type": "object",
+    "description": "品牌上下文对象,写入 memory/brand-context.json",
+    "properties": {
+      "success": { "type": "boolean" },
+      "brandContext": { "type": "object" },
+      "readyForSession1": { "type": "boolean" },
+      "missingFields": { "type": "array" }
+    }
+  },
+  "memoryFiles": {
+    "write": [
+      "memory/brand-context.json",
+      "memory/workshop-progress.json",
+      "memory/calibration-notes.json"
+    ],
+    "read": []
+  },
+  "usageExamples": [
+    {
+      "name": "完整建档",
+      "input": {
+        "mode": "full",
+        "brandName": "COCORRINA",
+        "categoryKeywords": ["reed diffuser", "aroma diffuser"],
+        "amazonDomain": 1,
+        "brandAsins": ["B0CJ5KXXXX", "B0DJ6LYYYY", "B0EK7MZZZZ"],
+        "workshopGoal": "想了解品类机会和用户真正在意什么"
+      },
+      "description": "新客户首次建档,采集全部必要信息"
+    },
+    {
+      "name": "增量更新-补充竞品",
+      "input": {
+        "mode": "update",
+        "knownCompetitors": ["NEST New York", "Yankee Candle"],
+        "competitorAsins": ["B0AAAA1111", "B0BBBB2222"]
+      },
+      "description": "Session 2 后补充确认的竞品信息"
+    },
+    {
+      "name": "增量更新-补充社媒关键词",
+      "input": {
+        "mode": "update",
+        "tiktokKeywords": ["reed diffuser", "#homedecor"],
+        "douyinKeywords": ["香薰", "无火香薰"]
+      },
+      "description": "Session 4 前补充社媒搜索关键词"
+    }
+  ],
+  "reportMapping": {
+    "brandName": "品牌名称",
+    "categoryKeywords": "品类关键词",
+    "amazonDomain": "Amazon站点",
+    "brandAsins": "品牌ASIN",
+    "workshopGoal": "分析目标",
+    "completeness": "建档完整度"
+  },
+  "tokenConfig": {
+    "required": false
+  },
+  "errorHandling": {
+    "conditions": []
+  }
+}

+ 98 - 0
workshop/memory-templates/analysis-request.json

@@ -0,0 +1,98 @@
+{
+  "$schema": "analysis-request-v1",
+  "clientId": "",
+  "clientName": "",
+  "createdAt": null,
+  "updatedAt": null,
+
+  "mode": "",
+
+  "products": [
+    {
+      "_comment": "以下是产品数据结构示例,实际使用时删除此项",
+      "productId": "p1",
+      "inputType": "amazon_url",
+      "platform": "amazon",
+      "originalInput": "https://www.amazon.com/dp/B0DRYQTZNM",
+      "originalName": "",
+      "originalUrl": "",
+      "asin": "B0DRYQTZNM",
+      "bridgedAsin": null,
+      "bridgedFromPlatform": null,
+      "bridgedSearchKeyword": null,
+      "title": "",
+      "category": "",
+      "price": null,
+      "rating": null,
+      "reviewCount": null,
+      "status": "pending",
+      "analysisResults": {
+        "voiceClassification": null,
+        "painPointInsight": null,
+        "featureSatisfaction": null,
+        "scenarioDashboard": null
+      }
+    },
+    {
+      "_comment": "天猫桥接产品示例",
+      "productId": "p2",
+      "inputType": "tmall_url",
+      "platform": "tmall",
+      "originalInput": "https://detail.tmall.com/item.htm?id=939630256227",
+      "originalName": "全身气动按摩床垫",
+      "originalUrl": "https://detail.tmall.com/item.htm?id=939630256227",
+      "asin": null,
+      "bridgedAsin": "B0XXXXXX",
+      "bridgedFromPlatform": "tmall",
+      "bridgedSearchKeyword": "air pressure massage mattress",
+      "title": "Amazon上对标产品的标题",
+      "category": "Massage Equipment",
+      "price": null,
+      "rating": null,
+      "reviewCount": null,
+      "status": "pending",
+      "analysisResults": {
+        "voiceClassification": null,
+        "painPointInsight": null,
+        "featureSatisfaction": null,
+        "scenarioDashboard": null
+      }
+    }
+  ],
+
+  "selectedDimensions": {
+    "categoryLandscape": false,
+    "competitorComparison": false,
+    "reviewVoc": false,
+    "socialMedia": false,
+    "userPersona": false,
+    "fullReport": false
+  },
+
+  "vocSubDimensions": {
+    "voiceClassification": true,
+    "painPointInsight": true,
+    "featureSatisfaction": true,
+    "scenarioDashboard": true
+  },
+
+  "productGroups": [
+    {
+      "_comment": "产品分组示例",
+      "groupId": "g1",
+      "categoryKeyword": "massage mattress",
+      "categoryLabel": "按摩床垫",
+      "amazonDomain": 1,
+      "productIds": ["p1", "p2"],
+      "status": "pending"
+    }
+  ],
+
+  "executionStatus": {
+    "totalProducts": 0,
+    "completedProducts": 0,
+    "currentProductIndex": 0,
+    "currentGroupIndex": 0,
+    "overallProgress": 0
+  }
+}

+ 24 - 0
workshop/memory-templates/brand-context.json

@@ -0,0 +1,24 @@
+{
+  "$schema": "brand-context-v1",
+  "clientId": "",
+  "brandName": "",
+  "categoryKeywords": [],
+  "amazonDomain": 1,
+  "amazonDomainLabel": "amazon.com",
+  "brandAsins": [],
+  "knownCompetitors": [],
+  "competitorAsins": [],
+  "confirmedCompetitors": [],
+  "tiktokKeywords": [],
+  "douyinKeywords": [],
+  "workshopGoal": "",
+  "createdAt": "",
+  "updatedAt": "",
+  "completeness": {
+    "brandName": false,
+    "categoryKeywords": false,
+    "amazonDomain": false,
+    "brandAsins": false,
+    "workshopGoal": false
+  }
+}

+ 69 - 0
workshop/memory-templates/calibration-notes.json

@@ -0,0 +1,69 @@
+{
+  "$schema": "calibration-notes-v1",
+  "clientId": "",
+  "brandName": "",
+  "sessions": {
+    "session-1": {
+      "timestamp": null,
+      "overallVerdict": "",
+      "corrections": [],
+      "newInsights": [],
+      "userQuotes": []
+    },
+    "session-2": {
+      "timestamp": null,
+      "competitorConfirmation": {
+        "accepted": [],
+        "rejected": [],
+        "added": []
+      },
+      "corrections": [],
+      "newInsights": [],
+      "userQuotes": []
+    },
+    "session-3": {
+      "timestamp": null,
+      "sentimentAccuracy": "",
+      "initialReviewFeedback": {
+        "known": [],
+        "newDiscovery": [],
+        "misjudged": []
+      },
+      "keywordAccuracy": "",
+      "corrections": [],
+      "newInsights": [],
+      "userQuotes": []
+    },
+    "session-4": {
+      "timestamp": null,
+      "painPointLabeling": {
+        "known": [],
+        "newDiscovery": [],
+        "misjudged": []
+      },
+      "featureSatisfaction": {
+        "quadrantCorrections": [],
+        "missingFeatures": []
+      },
+      "scenarioDashboard": {
+        "missingScenarios": [],
+        "severityCorrections": []
+      },
+      "personaFeedback": {
+        "coreSegments": [],
+        "opportunitySegments": [],
+        "irrelevantSegments": []
+      },
+      "corrections": [],
+      "newInsights": [],
+      "userQuotes": []
+    },
+    "session-5": {
+      "timestamp": null,
+      "proposalFeedback": "",
+      "priorityAdjustments": [],
+      "strategicAdditions": [],
+      "userQuotes": []
+    }
+  }
+}

+ 67 - 0
workshop/memory-templates/stage-1-output.json

@@ -0,0 +1,67 @@
+{
+  "$schema": "stage-output-v2",
+  "stage": 1,
+  "name": "品类全景分析",
+  "clientId": "",
+  "completedAt": null,
+
+  "categoryLandscape": {
+    "marketOverview": {
+      "totalMonthlySales": 0,
+      "totalMonthlyRevenue": 0,
+      "totalProducts": 0,
+      "avgPrice": 0,
+      "medianPrice": 0,
+      "avgRating": 0,
+      "avgReviewCount": 0,
+      "newEntrantsLast90d": 0
+    },
+    "concentration": {
+      "cr5": 0,
+      "cr10": 0,
+      "hhi": 0,
+      "concentrationLevel": "",
+      "topBrands": []
+    },
+    "priceBands": {
+      "bands": [],
+      "goldenPriceBand": { "min": 0, "max": 0, "sharePercent": 0 },
+      "brandPricePosition": "",
+      "priceGapOpportunities": []
+    },
+    "searchTrend": {
+      "trendDirection": "",
+      "seasonality": "",
+      "peakMonths": [],
+      "yoyGrowthRate": 0,
+      "topSearchTerms": [],
+      "searchVolumeTrend": []
+    },
+    "competitiveLandscape": {
+      "entryBarrier": "",
+      "marketMaturity": "",
+      "innovationRate": 0,
+      "avgProductLifecycle": "",
+      "fbaAdoptionRate": 0,
+      "videoAdoptionRate": 0,
+      "aPlusAdoptionRate": 0
+    },
+    "riskAlerts": [],
+    "priorityActions": [],
+    "healthScore": {
+      "overall": 0,
+      "marketAttractiveness": 0,
+      "competitiveIntensity": 0,
+      "growthPotential": 0,
+      "entryDifficulty": 0
+    }
+  },
+
+  "calibrationTable": {
+    "marketSizeConfirmed": false,
+    "topBrandsConfirmed": false,
+    "priceBandsConfirmed": false,
+    "corrections": [],
+    "additionalNotes": ""
+  }
+}

+ 72 - 0
workshop/memory-templates/stage-2-output.json

@@ -0,0 +1,72 @@
+{
+  "$schema": "stage-output-v2",
+  "stage": 2,
+  "name": "品牌画像+竞品分析",
+  "clientId": "",
+  "completedAt": null,
+
+  "brandProfile": {
+    "overallScore": 0,
+    "dimensions": {
+      "pricing": { "score": 0, "rank": "", "detail": "" },
+      "rating": { "score": 0, "rank": "", "detail": "" },
+      "traffic": { "score": 0, "rank": "", "detail": "" },
+      "sales": { "score": 0, "rank": "", "detail": "" },
+      "growth": { "score": 0, "rank": "", "detail": "" },
+      "reputation": { "score": 0, "rank": "", "detail": "" }
+    },
+    "positioning": "",
+    "strengths": [],
+    "weaknesses": [],
+    "marketShareEstimate": 0
+  },
+
+  "productDiagnosis": {
+    "asin": "",
+    "title": "",
+    "listingScore": 0,
+    "listingIssues": [],
+    "imageAnalysis": { "mainImageScore": 0, "totalImages": 0, "hasVideo": false, "hasAPlus": false },
+    "pricingHealth": { "currentPrice": 0, "competitorAvg": 0, "pricePosition": "" },
+    "reviewHealth": { "rating": 0, "totalReviews": 0, "recentTrend": "", "topComplaint": "" },
+    "bsrTrend": [],
+    "recommendations": []
+  },
+
+  "competitorDiscovery": {
+    "competitors": [],
+    "confirmedByUser": false,
+    "discoveryMethod": "",
+    "totalCandidates": 0
+  },
+
+  "competitorComparison": {
+    "dimensions": ["price", "rating", "sales", "reviews", "bsr", "listing_quality"],
+    "matrix": [],
+    "competitorProfiles": [],
+    "vulnerabilities": [],
+    "threats": []
+  },
+
+  "pricingAnalysis": {
+    "brandAvgPrice": 0,
+    "categoryAvgPrice": 0,
+    "competitorPrices": [],
+    "priceElasticity": "",
+    "recommendedPriceRange": { "min": 0, "max": 0 },
+    "marginEstimate": { "grossMarginPercent": 0, "afterAdSpend": 0 },
+    "pricingStrategy": ""
+  },
+
+  "competitorHealthComparison": {
+    "brandHealthScore": 0,
+    "competitors": []
+  },
+
+  "calibrationTable": {
+    "brandProfileConfirmed": false,
+    "competitorsConfirmed": false,
+    "corrections": [],
+    "additionalNotes": ""
+  }
+}

+ 71 - 0
workshop/memory-templates/stage-3-output.json

@@ -0,0 +1,71 @@
+{
+  "$schema": "stage-output-v2",
+  "stage": 3,
+  "name": "评论采集+VOC初体验(Day1晚)",
+  "description": "批量采集评论+初步情感分析+关键词地图。深度分析(痛点/功能/场景)在stage-4进行。",
+  "clientId": "",
+  "completedAt": null,
+
+  "reviewCorpus": {
+    "totalReviews": 0,
+    "brandReviews": 0,
+    "competitorReviews": 0,
+    "asinsCovered": [],
+    "dateRange": { "from": null, "to": null },
+    "collectionTimestamp": null,
+    "rawReviews": []
+  },
+
+  "voiceClassification": {
+    "summary": {
+      "totalReviews": 0,
+      "positiveRate": 0,
+      "neutralRate": 0,
+      "negativeRate": 0,
+      "overallSentimentScore": 0
+    },
+    "positive": {
+      "items": [],
+      "totalCount": 0,
+      "topKeywords": [],
+      "avgRating": 0
+    },
+    "neutral": {
+      "items": [],
+      "totalCount": 0,
+      "topKeywords": [],
+      "suggestions": []
+    },
+    "negative": {
+      "items": [],
+      "totalCount": 0,
+      "topKeywords": [],
+      "returnRateImpact": 0
+    },
+    "categoryBreakdown": []
+  },
+
+  "keywordCloud": {
+    "positive": [],
+    "negative": [],
+    "neutral": [],
+    "trending": []
+  },
+
+  "brandVsCompetitor": {
+    "brandSentimentScore": 0,
+    "competitorAvgSentimentScore": 0,
+    "brandNegativeRate": 0,
+    "competitorAvgNegativeRate": 0,
+    "sentimentGapAnalysis": []
+  },
+
+  "calibrationTable": {
+    "sentimentAccuracy": "",
+    "userMarkedKnown": [],
+    "userMarkedNewDiscovery": [],
+    "userMarkedMisjudged": [],
+    "keywordAccuracy": "",
+    "additionalNotes": ""
+  }
+}

+ 119 - 0
workshop/memory-templates/stage-4-output.json

@@ -0,0 +1,119 @@
+{
+  "$schema": "stage-output-v2",
+  "stage": 4,
+  "name": "深度VOC+社媒洞察+用户画像(Day2上午)",
+  "description": "基于stage-3评论数据做深度分析(痛点/亮点/功能/场景),扫描社媒渠道,生成用户画像。",
+  "clientId": "",
+  "completedAt": null,
+
+  "painPointInsight": {
+    "summary": {
+      "totalPainPoints": 0,
+      "criticalCount": 0,
+      "highCount": 0,
+      "topUnsolvedByCompetitors": 0,
+      "avgWeightScore": 0
+    },
+    "explicit": [],
+    "implicit": [],
+    "weightAnalysis": [],
+    "correlations": [],
+    "scenarioMaps": []
+  },
+
+  "highlightInsight": {
+    "summary": {
+      "totalHighlights": 0,
+      "topHighlightKeywords": []
+    },
+    "items": [],
+    "listingSuggestions": []
+  },
+
+  "featureSatisfaction": {
+    "summary": {
+      "totalFeatures": 0,
+      "avgSatisfactionRate": 0,
+      "highSatisfactionCount": 0,
+      "criticalGapCount": 0,
+      "conflictCount": 0
+    },
+    "corePerformance": [],
+    "gaps": [],
+    "conflicts": [],
+    "quadrantGroups": {
+      "coreAdvantage": [],
+      "criticalGap": [],
+      "niceToHave": [],
+      "lowPriority": []
+    }
+  },
+
+  "scenarioDashboard": {
+    "summary": {
+      "totalScenarios": 0,
+      "topScenarioUserRate": 0,
+      "criticalFailureCount": 0,
+      "emergingOpportunities": 0,
+      "coverageRate": 0
+    },
+    "highFrequency": [],
+    "failure": [],
+    "emerging": [],
+    "scenarioFeatureGaps": []
+  },
+
+  "socialMedia": {
+    "tiktokCategoryVoc": null,
+    "tiktokBrandVoc": null,
+    "instagramBrandVoc": null,
+    "douyinData": null,
+    "dataAvailability": {
+      "tiktok": false,
+      "instagram": false,
+      "douyin": false
+    }
+  },
+
+  "socialTrend": {
+    "overallTrend": "",
+    "platformBreakdown": [],
+    "contentThemes": [],
+    "seasonalPatterns": [],
+    "competitorSocialPresence": []
+  },
+
+  "competitorBsr": {
+    "trackingPeriod": "",
+    "competitors": [],
+    "bsrTrends": [],
+    "salesVelocityComparison": []
+  },
+
+  "userPersona": {
+    "personas": [],
+    "primaryPersona": "",
+    "personaOverlap": [],
+    "marketSizeByPersona": []
+  },
+
+  "crossChannelInsight": {
+    "amazonVsSocialSentimentGap": [],
+    "unmetNeedsFromSocial": [],
+    "socialProofOpportunities": [],
+    "contentMarketingAngles": []
+  },
+
+  "calibrationTable": {
+    "painPoints": {
+      "userMarkedKnown": [],
+      "userMarkedNewDiscovery": [],
+      "userMarkedMisjudged": [],
+      "corrections": []
+    },
+    "featureSatisfaction": { "quadrantCorrections": [], "missingFeatures": [] },
+    "scenarioDashboard": { "missingScenarios": [], "severityCorrections": [] },
+    "userPersona": { "confirmedPersonas": [], "corrections": [], "missingSegments": [] },
+    "additionalNotes": ""
+  }
+}

+ 87 - 0
workshop/memory-templates/stage-5-output.json

@@ -0,0 +1,87 @@
+{
+  "$schema": "stage-output-v2",
+  "stage": 5,
+  "name": "最终报告",
+  "clientId": "",
+  "completedAt": null,
+
+  "proposal": {
+    "title": "",
+    "chapters": [],
+    "executiveSummary": "",
+    "fullMarkdown": "",
+    "roiEstimates": [],
+    "riskAlerts": [],
+    "actionTimeline": {
+      "week1": [],
+      "week2": [],
+      "week3": [],
+      "week4": []
+    }
+  },
+
+  "actionableInsights": {
+    "topActions": [],
+    "topPainPointToFix": "",
+    "topFeatureGap": "",
+    "topEmergingScenario": "",
+    "quickWins": [],
+    "strategicInvestments": []
+  },
+
+  "overallHealthScore": {
+    "total": 0,
+    "dimensions": {
+      "marketPosition": 0,
+      "productQuality": 0,
+      "customerSatisfaction": 0,
+      "competitiveAdvantage": 0,
+      "growthPotential": 0
+    }
+  },
+
+  "vocDeepInsightSummary": {
+    "_sourceMapping": {
+      "voiceSentimentScore": "stage-3-output.voiceClassification.summary.overallSentimentScore",
+      "brandVsCompetitorGap": "stage-3-output.brandVsCompetitor",
+      "painPointCriticalCount": "stage-4-output.painPointInsight.summary.criticalCount",
+      "featureAvgSatisfaction": "stage-4-output.featureSatisfaction.summary.avgSatisfactionRate",
+      "scenarioCoverageRate": "stage-4-output.scenarioDashboard.summary.coverageRate",
+      "highlightCount": "stage-4-output.highlightInsight.summary.totalHighlights"
+    },
+    "voiceSentimentScore": 0,
+    "brandVsCompetitorGap": 0,
+    "painPointCriticalCount": 0,
+    "featureAvgSatisfaction": 0,
+    "scenarioCoverageRate": 0,
+    "highlightCount": 0
+  },
+
+  "htmlReport": {
+    "filePath": "",
+    "reportSections": [
+      "cover",
+      "executive-summary",
+      "category-landscape",
+      "brand-profile",
+      "competitor-matrix",
+      "voc-voice-classification",
+      "voc-pain-point-insight",
+      "voc-highlight-selling-points",
+      "voc-feature-satisfaction",
+      "voc-scenario-dashboard",
+      "user-persona",
+      "action-plan",
+      "roi-estimate"
+    ],
+    "reportDataJson": null,
+    "reportStats": null
+  },
+
+  "calibrationTable": {
+    "proposalReviewed": false,
+    "actionPlanConfirmed": false,
+    "corrections": [],
+    "bossAnnotations": ""
+  }
+}

+ 85 - 0
workshop/memory-templates/workshop-progress.json

@@ -0,0 +1,85 @@
+{
+  "$schema": "workshop-progress-v1",
+  "clientId": "",
+  "brandName": "",
+  "startedAt": "",
+  "currentPhase": "intake",
+  "sessions": {
+    "intake": {
+      "name": "品牌建档",
+      "status": "pending",
+      "startedAt": null,
+      "completedAt": null
+    },
+    "session-1": {
+      "name": "品类全景分析",
+      "status": "pending",
+      "startedAt": null,
+      "completedAt": null,
+      "deliverables": [
+        "品类认知校准表",
+        "品类核心关键词库",
+        "市场集中度分析",
+        "价格带分布",
+        "趋势判断+风险预警"
+      ],
+      "skillsCalled": []
+    },
+    "session-2": {
+      "name": "品牌画像+竞品分析",
+      "status": "pending",
+      "startedAt": null,
+      "completedAt": null,
+      "deliverables": [
+        "品牌六维画像",
+        "单品深度诊断",
+        "竞品档案卡",
+        "竞品对比矩阵",
+        "定价策略分析"
+      ],
+      "skillsCalled": []
+    },
+    "session-3": {
+      "name": "评论采集+VOC初体验(Day1晚)",
+      "status": "pending",
+      "startedAt": null,
+      "completedAt": null,
+      "deliverables": [
+        "结构化评论语料库",
+        "情感分析报告(情感健康分)",
+        "关键词情感地图",
+        "品牌vs竞品情感对比"
+      ],
+      "skillsCalled": []
+    },
+    "session-4": {
+      "name": "深度VOC+社媒洞察+用户画像(Day2上午)",
+      "status": "pending",
+      "startedAt": null,
+      "completedAt": null,
+      "deliverables": [
+        "痛点深度洞察(显性+隐性+权重)",
+        "卖点植入方案(亮点→Listing建议)",
+        "功能满足度四象限看板",
+        "使用场景看板(高频/失败/新兴)",
+        "社媒趋势报告",
+        "竞品BSR追踪",
+        "用户画像手册(3-5个画像)"
+      ],
+      "skillsCalled": []
+    },
+    "session-5": {
+      "name": "最终报告",
+      "status": "pending",
+      "startedAt": null,
+      "completedAt": null,
+      "deliverables": [
+        "VOC产品优化提案(6章节)",
+        "HTML可演示报告(9屏)",
+        "30天行动时间线",
+        "ROI估算"
+      ],
+      "skillsCalled": []
+    }
+  }
+}

+ 333 - 0
workshop/product-analysis-playbook.md

@@ -0,0 +1,333 @@
+---
+name: product-analysis-playbook
+description: 产品分析模式引导剧本,支持用户提供具体产品(URL/ASIN/产品名),按产品维度做按需VOC分析。独立于两天一夜工作坊流程。
+version: 1.0.0
+author: nkkj-BrainHack
+---
+
+# 🔍 VOC产品分析模式 · 引导剧本
+
+> 本文档是 OpenClaw Agent 执行**产品分析模式**的操作手册。
+> 与工作坊模式(workshop-voc-playbook.md)不同,产品分析模式面向**线上按需、快速出报告**的场景。
+> 用户提供具体产品,选择分析维度,Agent 按产品逐个跑分析。
+>
+> **配套文档(必读):**
+> - `workspace/synthesis-prompts.md` — 数据合成 Prompt 模板
+> - `workspace/voc-report-schema-spec.md` — v2 schema 字段级规范
+
+---
+
+## 全局规则
+
+### 角色设定
+- Agent 自称"虾"或"AI情报实习生"
+- 称呼用户为"老板"
+- 每次输出分析结果后,主动问用户校准意见
+
+### 记忆管理
+- 产品分析请求存入 `memory/analysis-request.json`
+- 每个品类组对应一份 `memory/brand-context.json`
+- 分析输出存入 `memory/stage-{N}-output.json`(复用工作坊结构)
+- 工作坊进度存入 `memory/workshop-progress.json`
+
+### 触发词
+- 用户直接发送产品链接/ASIN → 自动进入产品分析模式
+- 用户说"分析这个产品" / "帮我看看这个" → 产品分析模式
+- 用户说"继续" / "下一个产品" → 从进度记录位置继续
+
+### 容错机制
+- 如果某个技能调用失败,记录错误并告知用户,提供跳过/重试选项
+- 社媒数据标注为"增强模块",不影响核心流程
+
+---
+
+## Phase 0:产品收集 + 维度选择
+
+### Step 0.1: 开场
+
+#### 触发条件
+- 用户发送了产品链接/ASIN/产品名
+- 或 `memory/analysis-request.json` 不存在
+
+#### 对话脚本
+
+```
+虾:你好老板!我是你的AI情报实习生🦐。
+
+我可以帮你做产品级别的VOC深度分析。
+请把你要分析的产品发给我。
+
+支持的格式:
+• Amazon链接(如 https://www.amazon.com/dp/B0CJ5KXXXX)
+• Amazon ASIN(如 B0CJ5KXXXX)
+• 淘宝/天猫链接
+• 产品中文/英文名称
+
+可以一次发多个,发完说"就这些"我开始处理。
+```
+
+### Step 0.2: 产品解析 + 跨平台桥接
+
+Agent 对用户提供的每个产品执行解析:
+
+#### Amazon 产品
+1. 从URL中提取ASIN(正则: `/dp/([A-Z0-9]{10})`)
+2. 调用 `product-detail-query(asin=ASIN)` 获取产品标题和品类
+3. 记录: `{ platform: "amazon", asin, title, category, status: "ready" }`
+
+#### 淘宝/天猫产品
+1. 从URL中提取产品名(或由用户提供的中文名)
+2. Agent 将中文产品名翻译为英文品类搜索词
+   - 例: "全身气动按摩床垫" → "air pressure massage mattress"
+   - 例: "compex专业电刺激仪" → "EMS muscle stimulator"
+   - 例: "RRT松解枪" → "massage gun percussion"
+3. 调用 `product-search(keyword=英文关键词, domain=1)` 在Amazon上搜索同类产品
+4. 展示搜索结果Top5,请用户选择最接近的Amazon对标产品
+5. 记录: `{ platform: "tmall", originalName, originalUrl, bridgedAsin, bridgedTitle, category, status: "ready" }`
+
+#### 纯产品名输入
+1. 同天猫逻辑,翻译后搜索Amazon
+
+#### 产品输入自动识别规则
+
+| 输入格式 | 识别规则 | 处理方式 |
+|---------|---------|---------|
+| `https://www.amazon.com/dp/B0XXXXXXXX` | URL含 `amazon.com/dp/` | 提取ASIN,直接查询 |
+| `B0XXXXXXXX` | 正则 `^B0[A-Z0-9]{8}$` | 直接作为ASIN查询 |
+| `https://detail.tmall.com/item.htm?id=xxx` | URL含 `tmall.com` | 提取产品名→翻译→Amazon搜索桥接 |
+| `https://item.taobao.com/item.htm?id=xxx` | URL含 `taobao.com` | 同天猫逻辑 |
+| `https://detail.1688.com/offer/xxx.html` | URL含 `1688.com` | 同天猫逻辑 |
+| `全身气动按摩床垫` | 中文文本 | 翻译为英文→Amazon搜索桥接 |
+| `massage gun` | 英文文本 | 直接用于Amazon搜索 |
+
+#### 对话脚本
+
+```
+虾:收到!我识别到了以下产品:
+
+📦 产品清单
+━━━━━━━━━━━━━━━━━━━━
+#1 🔗 [天猫] 全身气动按摩床垫
+   → Amazon对标搜索词: "air pressure massage mattress"
+
+#2 🛒 [Amazon] B0DRYQTZNM
+   → 正在获取产品信息...
+━━━━━━━━━━━━━━━━━━━━
+
+我先去获取Amazon产品详情,天猫产品我会搜索Amazon上的同类产品供你确认。
+稍等一下...
+```
+
+#### 天猫产品桥接确认脚本
+
+```
+虾:对于天猫产品「{{originalName}}」,我在Amazon找到了以下对标产品:
+
+  ① {{amazonResult1.title}} — ${{price}} ⭐{{rating}} ({{reviewCount}}条评论)
+  ② {{amazonResult2.title}} — ${{price}} ⭐{{rating}} ({{reviewCount}}条评论)
+  ③ {{amazonResult3.title}} — ${{price}} ⭐{{rating}} ({{reviewCount}}条评论)
+
+👉 哪个最接近你要分析的产品?输入序号,或者说"换个关键词搜"。
+```
+
+### Step 0.3: 产品分组
+
+Agent 自动将产品按品类关键词分组:
+- Amazon产品:根据 `product-detail-query` 返回的 category 字段自动分组
+- 天猫桥接产品:根据 Agent 翻译的英文关键词分组
+- 同类产品归入同一组,品类差异大的产品分到不同组
+- 展示分组结果请用户确认
+
+### Step 0.4: 分析维度选择
+
+```
+虾:产品确认完毕!现在选择你想分析的维度:
+
+📊 可选分析维度(输入数字选择,如 "1,3" 或说"全部"):
+
+1️⃣ 品类全景 — 市场规模、竞争格局、价格带、品类健康度
+   (按品类组运行,每组跑一次)
+
+2️⃣ 竞品对比 — 找竞品、多维对比矩阵、竞品漏洞
+   (按品类组运行,每组跑一次)
+
+3️⃣ 评论VOC深度分析 — 用户声音、痛点、功能满足度、使用场景
+   (按产品运行,每个产品单独分析)
+
+4️⃣ 社媒洞察 — TikTok/Instagram 热度趋势
+   (按品类组运行,可选模块)
+
+5️⃣ 用户画像 — 核心用户类型、购买行为、决策因素
+   (按品类组运行)
+
+6️⃣ 综合报告 — 汇总所有分析 + 行动建议 + HTML报告
+   (整体输出)
+
+💡 推荐新手选 "3"(评论VOC),这是最核心的分析。
+   想全面了解选 "全部"。
+```
+
+#### VOC子维度选择(仅当选了维度3时)
+
+```
+虾:评论VOC分析包含4个子维度,你要全部分析还是选择部分?
+
+  🔤 声音分类 — 正面/中性/负面评论分类+关键词提取
+  ⚡ 痛点洞察 — 显性+隐性痛点挖掘+权重排行
+  📈 功能满足度 — 功能维度的满足率/重要度四象限分析
+  🎯 场景分析 — 高频/失败/新兴使用场景识别
+
+默认全部分析。如果只关注某几个,告诉我数字。
+```
+
+### Step 0.5: 确认 + 记忆存储
+
+```
+虾:确认分析方案:
+
+📋 分析方案
+━━━━━━━━━━━━━━━━━━━━
+模式:产品分析
+产品数量:{{totalProducts}} 个
+品类分组:{{groupCount}} 组
+
+📦 品类组 1: {{groupLabel}}
+   产品: {{productNames}}
+
+📦 品类组 2: {{groupLabel}}
+   产品: {{productNames}}
+
+📊 分析维度:{{selectedDimensionLabels}}
+━━━━━━━━━━━━━━━━━━━━
+
+确认开始分析?
+```
+
+确认后:
+1. 将完整产品列表、分组信息、维度选择写入 `memory/analysis-request.json`
+2. 为每个品类组初始化 `memory/brand-context.json`(categoryKeywords = 组的关键词)
+3. 初始化 `memory/workshop-progress.json`
+4. 进入执行阶段
+
+---
+
+## 执行流程
+
+### 执行策略
+
+```
+对每个品类组(productGroup):
+  ├─ 如果选了维度1(品类全景): 调用 category-landscape → stage-1-output.json
+  ├─ 如果选了维度2(竞品对比): 调用 Session 2 技能序列 → stage-2-output.json
+  ├─ 如果选了维度3(评论VOC):
+  │   └─ 对该组内每个产品:
+  │       ├─ review-batch-collection(asin) → 采集评论
+  │       ├─ review-sentiment-analysis → 情感分类
+  │       ├─ review-keyword-cloud → 关键词地图
+  │       ├─ review-pain-point-extraction → 痛点挖掘
+  │       ├─ review-highlight-extraction → 亮点提取
+  │       ├─ 按 synthesis-prompts.md 运行选中的VOC子维度
+  │       └─ 结果写入 stage-3-output.json + stage-4-output.json (以productId为key)
+  ├─ 如果选了维度4(社媒): 调用社媒技能序列
+  ├─ 如果选了维度5(用户画像): 调用 user-persona
+  └─ 如果选了维度6(综合报告): 调用 voc-proposal + html-report-generator
+```
+
+> **注意**:产品分析模式不区分 Day1/Day2,所有维度连续执行。
+> 评论采集和深度分析在同一轮完成(不像工作坊模式分两个session)。
+
+### 多产品 VOC 的输出结构
+
+当有多个产品时,stage-3/4-output.json 的结构变为:
+
+```json
+{
+  "$schema": "stage-output-v2",
+  "stage": 3,
+  "mode": "per-product",
+  "products": {
+    "B0DRYQTZNM": {
+      "productTitle": "...",
+      "reviewCorpus": { "totalReviews": 0, "sources": [] },
+      "voiceClassification": { ... },
+      "keywordCloud": { ... }
+    },
+    "B0F9WHRZ3D": { ... }
+  },
+  "crossProductInsight": {
+    "sharedPainPoints": [],
+    "uniqueAdvantages": {},
+    "dimensionComparison": {}
+  }
+}
+```
+
+### 进度汇报脚本
+
+每完成一个产品分析后:
+
+```
+虾:✅ 产品 {{productIndex}}/{{totalProducts}} 分析完成!
+
+📦 {{productTitle}}
+━━━━━━━━━━━━━━━━━━━━
+📊 评论采集: {{totalReviews}} 条
+😊 正面率: {{positiveRate}}% | 😐 中性: {{neutralRate}}% | 😞 负面: {{negativeRate}}%
+⚡ 关键痛点: {{topPainPoint}}
+📈 核心功能缺口: {{topFeatureGap}}
+🎯 Top场景: {{topScenario}}
+
+继续分析下一个产品,还是先看看这个产品的详细结果?
+```
+
+### 全部产品完成后
+
+```
+虾:🎉 所有产品分析完成!
+
+📋 分析汇总
+━━━━━━━━━━━━━━━━━━━━
+{{#each products}}
+📦 {{title}} — 情感分 {{sentimentScore}}/100 | 痛点 {{painPointCount}}个
+{{/each}}
+
+🔗 跨产品洞察:
+• 共同痛点:{{sharedPainPoints}}
+• 差异化优势:{{uniqueAdvantages}}
+
+需要我生成综合报告吗?还是对某个产品做更深入的分析?
+```
+
+---
+
+## 与工作坊模式的关系
+
+| 维度 | 工作坊模式 | 产品分析模式 |
+|------|-----------|-------------|
+| **场景** | 线下2天1夜,教学为主 | 线上按需,效率为主 |
+| **输入** | 品牌信息(7字段) | 产品链接/ASIN/名称 |
+| **流程** | 5个Session分步走 | 维度选择后连续执行 |
+| **校准** | 每个Session必做 | 每个产品可选 |
+| **输出** | 完整5阶段报告 | 按选择维度输出 |
+| **记忆** | brand-context.json 为核心 | analysis-request.json 为核心 |
+| **Playbook** | workshop-voc-playbook.md | product-analysis-playbook.md(本文档)|
+
+### 技能复用
+
+产品分析模式复用工作坊的全部底层技能,不需要额外的技能开发:
+```
+brand-context-builder (产品解析+跨平台桥接)
+  ├→ product-detail-query (Amazon产品详情)
+  ├→ product-search (跨平台桥接搜索)
+  ├→ category-landscape (品类全景)
+  ├→ competitor-discovery + comparison (竞品)
+  ├→ review-batch-collection (评论采集)
+  ├→ review-sentiment-analysis (情感分析)
+  ├→ review-pain-point-extraction (痛点)
+  ├→ review-highlight-extraction (亮点)
+  ├→ review-keyword-cloud (关键词)
+  ├→ tiktok/instagram/douyin (社媒)
+  ├→ user-persona (画像)
+  ├→ voc-proposal (提案)
+  └→ html-report-generator (报告)
+```

+ 654 - 0
workshop/synthesis-prompts.md

@@ -0,0 +1,654 @@
+# VOC 工作坊 · 数据合成 Prompt 模板
+
+> 本文档是 OpenClaw Agent 在执行 VOC 工作坊时的**数据转换指令集**。
+> 当 Agent 从底层技能获取原始数据后,使用对应的 Prompt 模板将其加工为 v2 schema 结构化数据。
+> **每个 Prompt 都是自包含的**:包含输入说明、转换逻辑、输出 JSON 格式。
+
+---
+
+## Stage 1:品类全景 → stage-1-output.json
+
+### Prompt: category-landscape-synthesis
+
+**输入数据:**
+- `product-search` 返回的品类搜索结果(产品列表、价格、评分、BSR)
+- `asin-sales-volume` 返回的销量数据(批量ASIN销量)
+
+**转换指令:**
+
+```
+你是一个电商品类分析师。基于以下原始数据,生成品类全景分析报告。
+
+== 原始数据 ==
+{rawProductSearchData}
+{rawSalesVolumeData}
+
+== 计算规则 ==
+
+1. marketOverview:
+   - totalMonthlySales: 所有产品月销量之和
+   - totalMonthlyRevenue: Σ(各产品价格 × 月销量)
+   - totalProducts: 搜索结果中的产品总数
+   - avgPrice: 所有产品价格的算术平均
+   - medianPrice: 所有产品价格的中位数
+   - avgRating: 所有产品评分的加权平均(按评论数加权)
+   - avgReviewCount: 所有产品评论数的平均
+   - newEntrantsLast90d: 评论数<50且上架时间<90天的产品数(通过reviewCount推断)
+
+2. concentration:
+   - 按品牌聚合销量,计算Top5品牌的销量份额 → cr5
+   - 按品牌聚合销量,计算Top10品牌的销量份额 → cr10
+   - HHI = Σ(每个品牌市场份额的平方) × 10000
+   - concentrationLevel: HHI>2500→"高度集中", 1500-2500→"中等竞争", <1500→"分散竞争"
+   - topBrands: Top5品牌 [{name, share(%), avgPrice, rating, productCount, topAsin}]
+
+3. priceBands:
+   - 将价格分为5档(按五分位数),统计每档的产品数量和销量份额
+   - goldenPriceBand: 销量份额最高的价格带 {min, max, sharePercent}
+   - brandPricePosition: 用户品牌均价相对于goldenPriceBand的位置描述
+   - priceGapOpportunities: 产品数少但搜索需求存在的价格空白区间
+
+4. searchTrend:
+   - trendDirection: 根据搜索量数据判断 "上升"/"稳定"/"下降"
+   - seasonality: 是否有明显季节波动
+   - peakMonths: 搜索量最高的月份
+   - yoyGrowthRate: 同比增长率(%)
+   - topSearchTerms: 品类相关高频搜索词Top10
+   - searchVolumeTrend: 近12个月搜索量数组
+
+5. competitiveLandscape:
+   - entryBarrier: 评论数中位数>500→"high", 200-500→"medium", <200→"low"
+   - marketMaturity: 根据新品比例+品牌集中度判断 "emerging"/"growing"/"mature"/"declining"
+   - fbaAdoptionRate: FBA配送产品占比(%)
+   - videoAdoptionRate: 有视频的listing占比(%)
+   - aPlusAdoptionRate: 有A+页面的listing占比(%)(通过描述长度>1000字推断)
+
+6. healthScore (每个维度0-100):
+   - marketAttractiveness: 基于市场规模×增长率计算
+     - 月销额>$100万且增长>10% → 80-100
+     - 月销额>$50万或增长>5% → 60-80
+     - 其他 → 40-60
+   - competitiveIntensity: 基于CR5反向计算
+     - CR5<20%(分散) → 80+(竞争不激烈,好进入)
+     - CR5 20-50% → 50-80
+     - CR5>50%(高集中) → 20-50(竞争激烈)
+   - growthPotential: 基于搜索趋势+新品率
+     - 趋势上升+新品>15% → 80+
+     - 趋势稳定 → 50-70
+     - 趋势下降 → 20-50
+   - entryDifficulty: 评论门槛+品牌集中度反向
+     - 评论中位数<100且CR5<30% → 80+(容易进入)
+     - 评论中位数>500且CR5>50% → 20-40(难进入)
+   - overall: 四个维度的加权平均 (吸引力30% + 增长30% + 竞争20% + 进入20%)
+
+7. riskAlerts: 识别风险项
+   - 价格战风险(如果最低价<均价50%)
+   - 评论门槛高(中位数>500)
+   - 品牌垄断(CR5>60%)
+   - 季节性风险(旺季淡季销量差>3倍)
+
+8. priorityActions: 基于分析给出3-5条建议
+
+== 输出要求 ==
+严格按照 stage-1-output.json v2 schema 输出JSON。
+所有数字字段必须是实际计算值,不能为0或null。
+```
+
+---
+
+## Stage 2:品牌画像+竞品 → stage-2-output.json
+
+### Prompt: brand-profile-synthesis
+
+**输入数据:**
+- `product-detail-query` 返回的品牌产品详情
+- `asin-sales-volume` 返回的品牌产品销量
+- `product-reviews-query` 返回的评论概况
+- Stage 1 的品类基准数据
+
+**转换指令:**
+
+```
+你是一个品牌战略分析师。基于以下原始数据和品类基准,生成品牌六维画像和竞品分析。
+
+== 原始数据 ==
+{rawProductDetails}
+{rawSalesVolume}
+{rawReviewSamples}
+{stage1CategoryLandscape}
+
+== 计算规则 ==
+
+1. brandProfile.dimensions (每个维度0-100):
+   - pricing.score: 品牌均价在品类价格分布中的百分位
+     若均价在黄金价格带内 → 70-90分
+     若偏高/偏低但有合理定位 → 50-70分
+   - pricing.rank: "Top X%" 百分位排名
+   - pricing.detail: 具体数据说明(如"均价$24.99,品类中位价$27.99")
+
+   - rating.score: (品牌平均评分 / 5.0) × 100,再根据差评率调整
+   - traffic.score: BSR中位数在品类中的百分位(BSR越低→分越高)
+   - sales.score: 品牌月总销量 / 品类Top1销量 × 100
+   - growth.score: 综合判断(新品数量、销量趋势、BSR变化)
+   - reputation.score: (好评率×0.6 + 评论增速百分位×0.4) × 100
+
+   - overallScore: 六维加权平均(定价20%+评分20%+流量15%+销售15%+增长15%+口碑15%)
+
+2. productDiagnosis (主力ASIN):
+   - 选择销量最高的ASIN
+   - listingScore: 评估标题长度(20分)+bullet完整度(20分)+图片数量(20分)+评分(20分)+A+(20分)
+   - listingIssues: 列出扣分项
+   - imageAnalysis: 统计图片数、是否有视频、是否有A+
+   - pricingHealth: 当前价格 vs 竞品平均价格
+   - reviewHealth: 评分、评论数、最近评论趋势、Top投诉
+
+3. competitorComparison:
+   - matrix: 每个竞品在 [price, rating, sales, reviews, bsr, listing_quality] 维度的得分
+   - competitorProfiles: 每个竞品的简要画像
+   - vulnerabilities: 竞品的弱点 [{competitorName, vulnerability, exploitStrategy, expectedImpact}]
+   - threats: 竞品的威胁 [{competitorName, threat, defensiveStrategy}]
+
+4. pricingAnalysis:
+   - recommendedPriceRange: 基于黄金价格带和竞品定位
+   - marginEstimate: 按Amazon费用结构估算(FBA费+佣金15%+广告10%)
+   - pricingStrategy: 建议的定价策略描述
+
+== 输出要求 ==
+严格按照 stage-2-output.json v2 schema 输出JSON。
+```
+
+---
+
+## Stage 3:VOC 深度分析 · 四维度转换
+
+### Prompt 3A: voice-classification-synthesis
+
+**输入数据:**
+- `review-sentiment-analysis` 返回的情感分析结果(reviewSentiments, asinAggregation, globalHotPhrases)
+- `review-highlight-extraction` 返回的亮点数据
+- `review-batch-collection` 返回的原始评论语料
+
+**转换指令:**
+
+```
+你是一个VOC用户声音分析专家。基于以下评论情感分析结果,生成符合v2规范的用户声音分类数据。
+
+== 原始数据 ==
+{sentimentAnalysisOutput}
+{highlightExtractionOutput}
+{rawReviewCorpus}
+
+== 转换规则 ==
+
+1. summary:
+   - totalReviews: reviewSentiments数组长度
+   - positiveRate: sentiment=="positive"的百分比
+   - neutralRate: sentiment=="neutral"的百分比
+   - negativeRate: sentiment=="negative"的百分比
+   - overallSentimentScore: positiveRate×1.0 + neutralRate×0.5(满分100)
+
+2. positive/neutral/negative 各分类:
+   - 从globalHotPhrases和reviewSentiments中提取该极性的声音
+   - 每个声音项 items[]:
+     {
+       "text": "归纳的声音描述(中文)",
+       "reviewCount": 提及次数,
+       "keywords": 关联关键词3-5个,
+       "representativeQuote": 选一条最典型的原文评论(≤120字英文原文)
+     }
+   - 按reviewCount降序排列
+   - topKeywords: 该极性Top10高频词
+   - positive额外: avgRating = 正向评论的平均星级
+   - neutral额外: suggestions = 从3星评论中提取的改进建议
+   - negative额外: returnRateImpact = 差评中提到"return/refund/send back"的比例(%)
+
+3. categoryBreakdown:
+   遍历所有评论,按以下5个维度分类:
+   - function: 涉及功能/性能/效果的评论
+   - quality: 涉及质量/材质/耐用性的评论
+   - description: 涉及描述准确性/图片一致性的评论
+   - service: 涉及客服/售后/退换的评论
+   - logistics: 涉及物流/包装/配送的评论
+   
+   每个维度统计:
+   {
+     "category": "function",
+     "label": "功能相关",
+     "count": 该维度评论数,
+     "percentage": 占比(%),
+     "sentimentDist": { "positive": X%, "neutral": Y%, "negative": Z% },
+     "topKeywords": 该维度Top5关键词,
+     "sampleReviews": 选3条代表性评论 [{ "star": N, "content": "...", "date": "..." }]
+   }
+
+== 输出JSON格式 ==
+直接输出 voiceClassification 对象(不含外层key)。
+```
+
+### Prompt 3B: pain-point-insight-synthesis
+
+**输入数据:**
+- `review-pain-point-extraction` 返回的痛点数据(painPoints, categoryBreakdown, opportunityGaps, vocOptimizationAdvice)
+- `review-sentiment-analysis` 的负面评论细节
+- `review-batch-collection` 原始评论
+
+**转换指令:**
+
+```
+你是一个产品痛点分析专家。基于以下痛点提取结果,生成符合v2规范的痛点深度洞察数据。
+
+== 原始数据 ==
+{painPointExtractionOutput}
+{negativeSentimentDetails}
+{rawReviewCorpus}
+
+== 转换规则 ==
+
+1. summary:
+   - totalPainPoints: 所有识别出的痛点数
+   - criticalCount: severity=="critical"或severity=="high"且frequency>30的痛点数
+   - highCount: severity=="high"的痛点数
+   - topUnsolvedByCompetitors: opportunityGaps的长度(竞品也没解决的)
+   - avgWeightScore: 所有痛点weight的平均值
+
+2. explicit[] — 显性痛点(从原始painPoints中severity>=medium的):
+   对每个原始痛点转换为:
+   {
+     "name": painPoint.label(中文简称),
+     "description": 1-2句话描述,
+     "severity": 重新评估(critical/high/medium/low):
+       - priorityScore>80 → critical
+       - priorityScore 60-80 → high
+       - priorityScore 40-60 → medium
+       - priorityScore<40 → low,
+     "frequency": painPoint.frequency,
+     "affectedUserRate": painPoint.frequencyRate,
+     "weight": 综合权重(0-100) = frequency_norm×30 + severity_norm×30 + returnImpact×20 + ratingImpact×20,
+     "category": painPoint.category,
+     "keywords": 从代表性评论中提取3-5个关键词,
+     "suggestedFix": 从vocOptimizationAdvice中提取对应建议,
+     "competitorStatus": "竞品也有此问题"/"竞品已解决"/"品类通病"
+   }
+
+3. implicit[] — 隐性痛点:
+   从3星中性评论中识别:
+   - 用户没有直接抱怨,但通过措辞暗示不满(如"it's okay but..."、"not bad for the price")
+   - 或者正向评论中的"但是"条件(如"love the scent but wish it lasted longer")
+   每个隐性痛点额外包含 "representativeReview": 信号原文
+
+4. weightAnalysis[] — 按weight降序排列所有痛点:
+   [{
+     "name": 痛点名,
+     "type": "explicit"/"implicit",
+     "severity": 严重度,
+     "weight": 综合权重,
+     "frequency": 频次得分(归一化0-100),
+     "returnImpact": 退货影响得分(提到return/refund的关联度×100),
+     "ratingImpact": 评分影响得分(该痛点评论的平均星级反向×100),
+     "intensity": 用户情绪强度(感叹号/大写/强烈词汇的比例×100)
+   }]
+
+5. correlations[] — 痛点共现分析:
+   找出经常在同一条评论中同时出现的痛点对:
+   [{ "painA": "...", "painB": "...", "coCount": N, "correlation": 0.xx }]
+
+6. scenarioMaps[] — 痛点出现在哪些使用场景中:
+   [{ "painName": "...", "scenarios": [{ "name": "场景名", "count": N }] }]
+
+== 输出JSON格式 ==
+直接输出 painPointInsight 对象。
+```
+
+### Prompt 3C: feature-satisfaction-synthesis
+
+**输入数据:**
+- 所有前述评论分析结果(情感、痛点、亮点、关键词云)
+- `review-batch-collection` 原始评论
+
+**转换指令:**
+
+```
+你是一个产品功能分析专家。基于评论数据,提取产品功能维度,分析满足度和重要度,生成四象限矩阵。
+
+== 任务 ==
+这是一个Agent合成任务。没有专门的底层API,你需要从评论文本中直接提取和分析。
+
+== 输入数据 ==
+{allReviewAnalysisOutputs}
+{rawReviewCorpus}
+
+== 功能维度提取规则 ==
+
+Step 1: 从评论中识别产品功能维度
+扫描所有评论,提取用户提及的产品功能/属性。按品类特征归纳为8-15个维度。
+例如(蜡烛/香薰品类):香味品质、持久性、外观设计、包装质量、性价比、安全性、尺寸规格、燃烧均匀度...
+
+Step 2: 对每个功能维度计算指标
+
+corePerformance[] 每项:
+{
+  "feature": "功能名称",
+  "category": "功能类别(core/convenience/aesthetic/safety)",
+  "satisfactionRate": 该功能正面提及数 / (正面+负面提及总数) × 100,
+  "importanceScore": 该功能总提及数 / 总评论数 × 100(提及越多=越重要),
+  "mentionCount": 总提及次数,
+  "positiveRate": 正面提及比例(%),
+  "negativeRate": 负面提及比例(%),
+  "trend": 最近评论(近3个月)的满足率 vs 历史→ "improving"/"stable"/"declining",
+  "gap": importanceScore - satisfactionRate(正值=有缺口)
+}
+
+Step 3: 四象限分类
+- coreAdvantage: importanceScore>=50 且 satisfactionRate>=70
+- criticalGap: importanceScore>=50 且 satisfactionRate<70
+- niceToHave: importanceScore<50 且 satisfactionRate>=70
+- lowPriority: importanceScore<50 且 satisfactionRate<70
+
+Step 4: 功能缺口 gaps[]
+从criticalGap象限和用户明确要求但产品没有的功能中提取:
+{
+  "name": "缺口名称",
+  "description": "缺口描述",
+  "demandFrequency": 需求提及频次,
+  "currentSatisfaction": 当前满足率(%),
+  "opportunityScore": (100-currentSatisfaction) × (demandFrequency归一化),
+  "targetFeature": "建议实现的目标特性",
+  "relatedPainPoints": 关联的痛点名称列表,
+  "implementationDifficulty": "low"/"medium"/"high"
+}
+
+Step 5: 功能对立 conflicts[]
+识别评论中互相矛盾的用户需求:
+{
+  "featureA": "需求A",
+  "featureB": "需求B(与A矛盾)",
+  "conflictType": "冲突类型描述",
+  "userGroupA": "偏好A的用户群",
+  "userGroupB": "偏好B的用户群",
+  "impactLevel": "high"/"medium"/"low",
+  "resolutionSuggestion": "解决建议(如SKU差异化)"
+}
+
+Step 6: summary
+{
+  "totalFeatures": corePerformance长度,
+  "avgSatisfactionRate": 所有功能satisfactionRate的均值,
+  "highSatisfactionCount": satisfactionRate>=80的功能数,
+  "criticalGapCount": gaps长度,
+  "conflictCount": conflicts长度
+}
+
+== 输出JSON格式 ==
+直接输出 featureSatisfaction 对象。
+```
+
+### Prompt 3D: scenario-dashboard-synthesis
+
+**输入数据:**
+- 所有前述评论分析结果
+- `review-batch-collection` 原始评论
+- `review-keyword-cloud` 关键词云数据
+
+**转换指令:**
+
+```
+你是一个用户场景分析专家。基于评论数据,识别产品使用场景,分析场景满足度和失败场景。
+
+== 任务 ==
+这是一个Agent合成任务。从评论文本中识别用户提到的使用场景、使用环境、使用时机。
+
+== 输入数据 ==
+{allReviewAnalysisOutputs}
+{rawReviewCorpus}
+{keywordCloudData}
+
+== 场景识别规则 ==
+
+Step 1: 场景提取
+扫描评论文本,提取用户提及的使用场景关键词。
+场景类型包括:
+- 空间场景:客厅/卧室/办公室/浴室/户外...
+- 时间场景:日常使用/节日送礼/换季/旅行...
+- 人群场景:自用/送人/办公室共用/家庭共享...
+- 目的场景:放松助眠/提神工作/掩盖异味/装饰美化...
+
+归纳为8-12个核心场景。
+
+Step 2: 高频场景 highFrequency[]
+按用户提及率排序,取Top场景:
+{
+  "name": "场景名称",
+  "description": "场景描述(1-2句话)",
+  "userRate": 提及该场景的评论数 / 总评论数 × 100,
+  "frequency": "daily"/"weekly"/"monthly"/"occasional",
+  "topFeatures": 该场景用户最关注的功能Top3,
+  "painPoints": 该场景用户的主要痛点,
+  "satisfactionRate": 该场景评论中正面占比(%),
+  "representativeQuote": 最典型的一条原文评论
+}
+
+Step 3: 失败场景 failure[]
+从差评中识别产品"翻车"的场景:
+{
+  "name": "失败场景名称",
+  "description": "失败描述",
+  "triggerCondition": "触发失败的条件(如高温环境/长时间使用)",
+  "frequency": 提及该失败的评论数,
+  "affectedUserRate": 频率 / 总评论数 × 100,
+  "primaryFeature": "主要关联功能",
+  "userReaction": "用户的反应描述(退货/忍受/投诉)",
+  "returnCorrelation": 该失败场景评论中提到return/refund的比例(0-1),
+  "fixSuggestion": "修复建议"
+}
+
+Step 4: 新兴场景 emerging[]
+从评论时间线中识别近期新增或增长明显的场景:
+{
+  "name": "场景名称",
+  "description": "场景描述",
+  "growthRate": 近3个月提及率 vs 之前增长(%),
+  "currentUserRate": 当前占比(%),
+  "projectedGrowth": 预测未来占比(%),
+  "requiredFeatures": 需要的功能列表,
+  "opportunity": "机会描述",
+  "entryDifficulty": "low"/"medium"/"high"
+}
+
+如果评论数据没有时间线信息,则基于以下信号推断:
+- 评论中提到"新"/"最近发现"/"之前没想到"等表述
+- 非常规使用场景(创意用法)
+
+Step 5: scenarioFeatureGaps[]
+交叉分析:哪些场景需要哪些功能,但当前满足不了:
+[{
+  "scenario": "场景名",
+  "missingFeature": "缺失功能",
+  "impact": "high"/"medium"/"low",
+  "suggestion": "建议"
+}]
+
+Step 6: summary
+{
+  "totalScenarios": 识别的场景总数,
+  "topScenarioUserRate": 排名第一的场景用户占比,
+  "criticalFailureCount": 失败场景中returnCorrelation>0.3的数量,
+  "emergingOpportunities": emerging长度,
+  "coverageRate": 所有场景userRate之和(≤100%)
+}
+
+== 输出JSON格式 ==
+直接输出 scenarioDashboard 对象。
+```
+
+### Prompt 3E: brand-vs-competitor-synthesis
+
+**输入数据:**
+- 品牌和竞品的情感分析结果
+- 品牌和竞品的痛点数据
+
+**转换指令:**
+
+```
+基于品牌ASIN和竞品ASIN的评论分析数据,生成品牌vs竞品对比。
+
+== 计算规则 ==
+- brandSentimentScore: 品牌ASIN的overallSentimentScore
+- competitorAvgSentimentScore: 所有竞品ASIN的sentimentScore平均值
+- brandNegativeRate: 品牌ASIN的negativeRate
+- competitorAvgNegativeRate: 所有竞品ASIN的negativeRate平均值
+- brandTopPainPoints: 品牌的Top3痛点名称
+- competitorTopPainPoints: 竞品共性的Top3痛点名称
+- differentiators: 品牌有而竞品没有的优势,或品牌没有而竞品有的问题
+
+== 输出 ==
+直接输出 brandVsCompetitor 对象。
+```
+
+---
+
+## Stage 4:用户画像 → 画像增强 Prompt
+
+### Prompt: persona-enrichment
+
+**输入数据:**
+- `user-persona` 技能的原始输出
+- Stage 3 的 featureSatisfaction 和 scenarioDashboard 数据
+
+**转换指令:**
+
+```
+基于用户画像技能输出和VOC深度分析数据,丰富每个画像的结构。
+
+== 原始画像数据 ==
+{userPersonaOutput}
+{featureSatisfactionData}
+{scenarioDashboardData}
+
+== 增强规则 ==
+对每个 persona,补充以下字段(如果原始输出中没有):
+
+{
+  "id": 保持不变,
+  "label": 保持不变,
+  "demographics": {
+    "ageRange": 从评论用词/场景推断,
+    "gender": 从评论用词/场景推断,
+    "income": 从价格敏感度推断 "low"/"medium"/"high",
+    "location": 从场景推断(如"urban"/"suburban")
+  },
+  "psychographics": {
+    "values": 核心价值观(如"品质优先"/"性价比至上"),
+    "lifestyle": 生活方式描述,
+    "personality": 消费人格(如"尝鲜型"/"实用型"/"品牌忠诚型")
+  },
+  "shoppingBehavior": {
+    "priceRange": 偏好价格带,
+    "decisionFactors": 决策因素排序,
+    "purchaseFrequency": 购买频率,
+    "channels": 购买渠道偏好
+  },
+  "needs": 从featureSatisfaction.coreAdvantage提取该画像最关注的功能,
+  "painPoints": 从painPointInsight中匹配该画像最相关的痛点,
+  "scenarios": 从scenarioDashboard.highFrequency中匹配该画像的场景,
+  "triggerKeywords": 该画像的搜索触发词(5-10个),
+  "estimatedMarketShare": 基于评论中该画像特征的占比(%),
+  "acquisitionStrategy": 获取该类用户的具体建议
+}
+```
+
+---
+
+## Stage 5:最终报告 → 行动项生成 Prompt
+
+### Prompt: actionable-insights-synthesis
+
+**输入数据:**
+- Stage 1-4 全部数据
+- calibration-notes.json 用户校准意见
+
+**转换指令:**
+
+```
+你是一个电商战略顾问。整合所有前置分析,生成可落地的行动建议。
+
+== 全量数据 ==
+{stage1Data}
+{stage2Data}
+{stage3Data}
+{stage4Data}
+{calibrationNotes}
+
+== 生成规则 ==
+
+1. actionableInsights.topActions[]:
+   从以下来源生成Top行动项(至少8项,按priority排序):
+   
+   来源A: Stage3.painPointInsight → 每个critical/high痛点 → 一个修复行动
+   来源B: Stage3.featureSatisfaction.gaps → 每个criticalGap → 一个功能开发行动
+   来源C: Stage3.scenarioDashboard.failure → 每个失败场景 → 一个场景修复行动
+   来源D: Stage3.scenarioDashboard.emerging → 每个新兴场景 → 一个布局行动
+   来源E: Stage2.competitorComparison.vulnerabilities → 每个漏洞 → 一个竞争行动
+   
+   每个行动项:
+   {
+     "scenario": "关联场景",
+     "feature": "关联功能",
+     "gap": "缺口描述",
+     "suggestion": "具体行动建议(1-2句话,可落地)",
+     "priority": "P0"(立即执行,影响收入)/"P1"(本月内,影响增长)/"P2"(本季度,战略布局),
+     "expectedImpact": "预期影响(量化,如'转化率提升10-15%')",
+     "investmentLevel": "zero"(纯优化)/"low"(<$500)/"medium"($500-5000)/"high"(>$5000),
+     "timeToResult": "见效周期(如'1-2周'/'1-3个月')"
+   }
+
+   优先级判定规则:
+   - P0: 影响退货率或差评率的问题 + 零/低投入可解决
+   - P1: 影响转化率或销量的问题 + 中等投入
+   - P2: 长期战略(新品方向/品牌建设/市场扩张)
+
+2. quickWins[]: 从topActions中筛选 investmentLevel=="zero"||"low" 且 timeToResult<="2周" 的项
+
+3. strategicInvestments[]: 从topActions中筛选 investmentLevel=="medium"||"high" 的项
+
+4. overallHealthScore:
+   - marketPosition: Stage1.healthScore.overall
+   - productQuality: Stage3.featureSatisfaction.summary.avgSatisfactionRate
+   - customerSatisfaction: Stage3.voiceClassification.summary.overallSentimentScore
+   - competitiveAdvantage: 100 - |brandSentimentScore - competitorAvgSentimentScore| 调整
+   - growthPotential: Stage1.healthScore.growthPotential
+   - total: 五维加权平均
+
+5. vocDeepInsightSummary:
+   - voiceSentimentScore: Stage3.voiceClassification.summary.overallSentimentScore
+   - painPointCriticalCount: Stage3.painPointInsight.summary.criticalCount
+   - featureAvgSatisfaction: Stage3.featureSatisfaction.summary.avgSatisfactionRate
+   - scenarioCoverageRate: Stage3.scenarioDashboard.summary.coverageRate
+   - brandVsCompetitorGap: brandSentimentScore - competitorAvgSentimentScore
+
+== 输出JSON格式 ==
+输出 actionableInsights + overallHealthScore + vocDeepInsightSummary 三个对象。
+```
+
+---
+
+## 使用说明
+
+### Agent 执行时机
+
+| 工作坊阶段 | 完成底层技能调用后 | 使用哪个 Prompt |
+|-----------|------------------|---------------|
+| Session 1 | product-search + asin-sales-volume | category-landscape-synthesis |
+| Session 2 | product-detail + sales + reviews | brand-profile-synthesis |
+| Session 3 Step 3.2 | review-sentiment-analysis | voice-classification-synthesis (3A) |
+| Session 3 Step 3.3 | review-pain-point-extraction | pain-point-insight-synthesis (3B) |
+| Session 3 Step 3.6 | 无底层API,Agent直接合成 | feature-satisfaction-synthesis (3C) |
+| Session 3 Step 3.7 | 无底层API,Agent直接合成 | scenario-dashboard-synthesis (3D) |
+| Session 3 最后 | 品牌+竞品分组数据 | brand-vs-competitor-synthesis (3E) |
+| Session 4 | user-persona 输出 | persona-enrichment |
+| Session 5 | 全部前置数据 | actionable-insights-synthesis |
+
+### 关键原则
+1. **每个Prompt产出一个完整JSON块**,Agent直接写入对应的stage-N-output.json字段
+2. **所有数字必须来自计算**,不能凭空编造
+3. **用户校准优先**:如果calibration-notes中用户修正了某个判断,最终输出必须采纳用户意见
+4. **缺数据时降级**:如果某个底层技能没有返回(如API失败),该维度用"数据不足"标记,不要编造

+ 376 - 0
workshop/voc-report-schema-spec.md

@@ -0,0 +1,376 @@
+# VOC 阶段报告数据规范 v2
+
+> 本文档定义 OpenClaw VOC 工作坊每个阶段输出数据的**字段级规范**。
+> Agent 在填充 stage-N-output.json 时必须严格遵循此规范,确保报告达到"好用"级别。
+> 设计参考:msq-voc-web 前端 VOC 深度洞察系统。
+
+---
+
+## Stage 3:评论 VOC 深度分析(核心阶段)
+
+### 3.1 voiceClassification — 用户声音分类
+
+**目标**:将全量评论按情感极性分为正向/中性/负向三类,量化情感健康度。
+
+#### summary 字段
+
+| 字段 | 类型 | 说明 | 计算方式 |
+|------|------|------|---------|
+| totalReviews | number | 有效分析评论总数 | 去重后的评论条数 |
+| positiveRate | number | 正向评论占比(%) | 4-5星评论百分比 |
+| neutralRate | number | 中性评论占比(%) | 3星评论百分比 |
+| negativeRate | number | 负向评论占比(%) | 1-2星评论百分比 |
+| overallSentimentScore | number | 情感健康分(0-100) | positiveRate×1.0 + neutralRate×0.5 |
+
+#### positive/neutral/negative 每个极性包含
+
+| 字段 | 类型 | 说明 |
+|------|------|------|
+| items[] | array | 声音条目列表,按 reviewCount 降序 |
+| items[].text | string | 声音摘要(如"面料柔软透气") |
+| items[].reviewCount | number | 提及该声音的评论数 |
+| items[].keywords | string[] | 关联关键词(3-5个) |
+| items[].representativeQuote | string | 代表性原文引用(≤120字) |
+| totalCount | number | 该极性评论总数 |
+| topKeywords | string[] | 高频关键词Top 10 |
+
+**positive** 额外字段:`avgRating`(正向评论均分)
+**neutral** 额外字段:`suggestions[]`(用户改进建议提取)
+**negative** 额外字段:`returnRateImpact`(差评导致的退货影响率%)
+
+#### categoryBreakdown — 问题维度细分
+
+每条记录对应一个问题维度:
+
+| 字段 | 类型 | 说明 | 枚举值 |
+|------|------|------|--------|
+| category | string | 维度类型 | function/quality/description/service/logistics |
+| label | string | 中文标签 | 功能相关/质量相关/描述相关/服务相关/物流相关 |
+| count | number | 该维度评论数 | |
+| percentage | number | 占比(%) | |
+| sentimentDist | object | 情感分布 | { positive: %, neutral: %, negative: % } |
+| topKeywords | string[] | 维度高频词 | |
+| sampleReviews[] | array | 代表评论 | [{ star, content, date }] |
+
+---
+
+### 3.2 painPointInsight — 痛点深度洞察
+
+**目标**:区分显性投诉与隐性不满,通过权重矩阵锁定优先改进方向。
+
+#### summary 字段
+
+| 字段 | 类型 | 说明 |
+|------|------|------|
+| totalPainPoints | number | 已识别痛点总数 |
+| criticalCount | number | 严重/危机级痛点数 |
+| highCount | number | 高优先级痛点数 |
+| topUnsolvedByCompetitors | number | 竞品也未解决的痛点数(差异化机会) |
+| avgWeightScore | number | 综合权重均值(0-100) |
+
+#### explicit[] — 显性痛点(用户直接表达的不满)
+
+| 字段 | 类型 | 说明 |
+|------|------|------|
+| name | string | 痛点名称(如"起球严重") |
+| description | string | 痛点描述(1-2句话) |
+| severity | enum | low/medium/high/critical |
+| frequency | number | 提及频次 |
+| affectedUserRate | number | 影响用户比例(%) |
+| weight | number | 综合权重(0-100) = 频次×严重度×退货影响×评分影响 |
+| category | string | 所属类别(质量/功能/设计/物流) |
+| keywords | string[] | 关联关键词 |
+| suggestedFix | string | 建议修复方案 |
+| competitorStatus | string | 竞品对此痛点的解决情况 |
+
+#### implicit[] — 隐性痛点(通过语言模式推断的不满)
+
+同 explicit[] 字段 + 额外 `representativeReview`(信号原文)
+
+#### weightAnalysis[] — 痛点权重排行表
+
+| 字段 | 类型 | 说明 |
+|------|------|------|
+| name | string | 痛点名 |
+| type | enum | explicit/implicit |
+| severity | enum | low/medium/high/critical |
+| weight | number | 综合权重 |
+| frequency | number | 频次得分 |
+| returnImpact | number | 退货影响得分 |
+| ratingImpact | number | 评分影响得分 |
+| intensity | number | 痛点强度得分 |
+
+#### correlations[] — 痛点关联分析
+
+```json
+{ "painA": "起球", "painB": "面料薄", "coCount": 47, "correlation": 0.82 }
+```
+
+#### scenarioMaps[] — 痛点×场景映射
+
+```json
+{ "painName": "不透气", "scenarios": [{ "name": "运动健身", "count": 89 }, { "name": "夏季穿着", "count": 52 }] }
+```
+
+---
+
+### 3.3 featureSatisfaction — 功能满足度看板
+
+**目标**:量化每个核心功能的用户满意度,识别功能缺口和功能对立。
+
+#### summary 字段
+
+| 字段 | 类型 | 说明 |
+|------|------|------|
+| totalFeatures | number | 分析功能维度数 |
+| avgSatisfactionRate | number | 平均满足率(%) |
+| highSatisfactionCount | number | 高满足(≥80%)功能数 |
+| criticalGapCount | number | 关键缺口数 |
+| conflictCount | number | 功能对立数 |
+
+#### corePerformance[] — 核心功能表现
+
+| 字段 | 类型 | 说明 |
+|------|------|------|
+| feature | string | 功能名称(如"透气性") |
+| category | string | 功能类别 |
+| satisfactionRate | number | 满足率(0-100%) |
+| importanceScore | number | 重要度(0-100) |
+| mentionCount | number | 提及次数 |
+| positiveRate | number | 正面提及率 |
+| negativeRate | number | 负面提及率 |
+| trend | enum | improving/stable/declining |
+| gap | number | 缺口值(重要度-满足率) |
+
+#### quadrantGroups — 四象限分类
+
+- **coreAdvantage**:高重要度 + 高满足度 → 核心优势,继续保持
+- **criticalGap**:高重要度 + 低满足度 → 关键缺口,优先改进
+- **niceToHave**:低重要度 + 高满足度 → 锦上添花
+- **lowPriority**:低重要度 + 低满足度 → 低优先级
+
+#### gaps[] — 功能缺口
+
+| 字段 | 类型 | 说明 |
+|------|------|------|
+| name | string | 缺口名称 |
+| description | string | 描述 |
+| demandFrequency | number | 需求提及频次 |
+| currentSatisfaction | number | 当前满足率(%) |
+| opportunityScore | number | 机会值(0-100) |
+| targetFeature | string | 建议目标特性 |
+| relatedPainPoints | string[] | 关联痛点 |
+| implementationDifficulty | enum | low/medium/high |
+
+#### conflicts[] — 功能对立
+
+```json
+{
+  "featureA": "紧身修身",
+  "featureB": "宽松舒适",
+  "conflictType": "用户群体需求互斥",
+  "userGroupA": "年轻时尚用户",
+  "userGroupB": "注重舒适的中年用户",
+  "impactLevel": "high",
+  "resolutionSuggestion": "通过SKU差异化满足两类需求"
+}
+```
+
+---
+
+### 3.4 scenarioDashboard — 使用场景看板
+
+**目标**:识别高频场景、失败场景、新兴场景,输出可落地行动建议。
+
+#### summary 字段
+
+| 字段 | 类型 | 说明 |
+|------|------|------|
+| totalScenarios | number | 识别场景总数 |
+| topScenarioUserRate | number | 头部场景用户占比(%) |
+| criticalFailureCount | number | 严重失败场景数 |
+| emergingOpportunities | number | 新兴机会场景数 |
+| coverageRate | number | 场景覆盖率(%) |
+
+#### highFrequency[] — 高频使用场景
+
+| 字段 | 类型 | 说明 |
+|------|------|------|
+| name | string | 场景名称(如"日常通勤穿着") |
+| description | string | 场景描述 |
+| userRate | number | 用户占比(%) |
+| frequency | enum | daily/weekly/monthly/occasional |
+| topFeatures | string[] | 场景关联功能 |
+| painPoints | string[] | 场景关联痛点 |
+| satisfactionRate | number | 场景满足度(%) |
+| representativeQuote | string | 代表性用户评论 |
+
+#### failure[] — 失败场景
+
+| 字段 | 类型 | 说明 |
+|------|------|------|
+| name | string | 失败场景名称 |
+| description | string | 失败描述 |
+| triggerCondition | string | 触发条件 |
+| frequency | number | 发生频次 |
+| affectedUserRate | number | 影响用户比例(%) |
+| primaryFeature | string | 主要关联功能 |
+| userReaction | string | 用户反应描述 |
+| returnCorrelation | number | 退货相关性(0-1) |
+| fixSuggestion | string | 修复建议 |
+
+#### emerging[] — 新兴场景
+
+| 字段 | 类型 | 说明 |
+|------|------|------|
+| name | string | 场景名称 |
+| description | string | 场景描述 |
+| growthRate | number | 增长率(%) |
+| currentUserRate | number | 当前用户占比(%) |
+| projectedGrowth | number | 预测未来占比(%) |
+| requiredFeatures | string[] | 需要的功能 |
+| opportunity | string | 机会描述 |
+| entryDifficulty | enum | low/medium/high |
+
+---
+
+### 3.5 brandVsCompetitor — 品牌vs竞品对比
+
+| 字段 | 说明 |
+|------|------|
+| brandSentimentScore | 品牌情感健康分 |
+| competitorAvgSentimentScore | 竞品平均情感健康分 |
+| brandNegativeRate | 品牌差评率 |
+| competitorAvgNegativeRate | 竞品平均差评率 |
+| brandTopPainPoints | 品牌Top痛点 |
+| competitorTopPainPoints | 竞品共性痛点 |
+| differentiators | 品牌差异化优势 |
+
+---
+
+## Stage 1:品类全景分析
+
+### healthScore — 品类健康度评分
+
+| 维度 | 说明 | 评分逻辑 |
+|------|------|---------|
+| overall | 综合得分(0-100) | 各维度加权平均 |
+| marketAttractiveness | 市场吸引力 | 规模×增速 |
+| competitiveIntensity | 竞争烈度 | CR5/HHI反向 |
+| growthPotential | 增长潜力 | 搜索趋势+新品率 |
+| entryDifficulty | 进入难度 | 评论门槛+品牌集中度 |
+
+### competitiveLandscape — 竞争格局增强字段
+
+| 字段 | 说明 |
+|------|------|
+| entryBarrier | 进入壁垒(low/medium/high) |
+| marketMaturity | 市场成熟度(emerging/growing/mature/declining) |
+| fbaAdoptionRate | FBA使用率(%) |
+| videoAdoptionRate | 视频listing占比(%) |
+| aPlusAdoptionRate | A+页面占比(%) |
+
+---
+
+## Stage 2:品牌+竞品分析
+
+### brandProfile.dimensions — 六维画像
+
+每个维度包含 `{ score: 0-100, rank: "Top X%", detail: "说明" }`
+
+| 维度 | 说明 |
+|------|------|
+| pricing | 定价竞争力 |
+| rating | 评分口碑 |
+| traffic | 流量排名 |
+| sales | 销售表现 |
+| growth | 增长势头 |
+| reputation | 品牌声誉 |
+
+### competitorComparison.vulnerabilities — 竞品漏洞
+
+```json
+{
+  "competitorName": "竞品A",
+  "vulnerability": "差评集中在包装问题",
+  "exploitStrategy": "强化包装体验作为卖点",
+  "expectedImpact": "可抢占约15%的不满用户"
+}
+```
+
+---
+
+## Stage 4:用户画像
+
+### userPersona.personas[] — 画像结构
+
+| 字段 | 类型 | 说明 |
+|------|------|------|
+| id | string | 画像唯一ID |
+| label | string | 画像标签(如"品质生活追求者") |
+| demographics | object | { ageRange, gender, income, location } |
+| psychographics | object | { values, lifestyle, personality } |
+| shoppingBehavior | object | { priceRange, decisionFactors, purchaseFrequency, channels } |
+| needs | string[] | 核心需求列表 |
+| painPoints | string[] | 核心痛点 |
+| scenarios | string[] | 主要使用场景 |
+| triggerKeywords | string[] | 搜索/决策触发词 |
+| estimatedMarketShare | number | 预估市场占比(%) |
+| acquisitionStrategy | string | 获客建议 |
+
+---
+
+## Stage 5:最终报告
+
+### actionableInsights.topActions[] — 优先行动项
+
+| 字段 | 类型 | 说明 |
+|------|------|------|
+| scenario | string | 关联场景 |
+| feature | string | 关联功能 |
+| gap | string | 缺口描述 |
+| suggestion | string | 行动建议 |
+| priority | enum | P0(立即)/P1(本月)/P2(本季) |
+| expectedImpact | string | 预期影响(量化) |
+| investmentLevel | enum | zero/low/medium/high |
+| timeToResult | string | 见效周期 |
+
+### overallHealthScore.dimensions — 五维综合评分
+
+| 维度 | 说明 | 数据来源 |
+|------|------|---------|
+| marketPosition | 市场定位得分 | stage-1 |
+| productQuality | 产品质量得分 | stage-3 featureSatisfaction |
+| customerSatisfaction | 客户满意度 | stage-3 voiceClassification |
+| competitiveAdvantage | 竞争优势 | stage-2 + stage-3 brandVsCompetitor |
+| growthPotential | 增长潜力 | stage-1 + stage-4 |
+
+---
+
+## 报告输出质量标准
+
+### 必须达到的"好用"级别要求
+
+1. **数据精确性**:所有数字必须有明确来源(评论计数/API数据),不可凭空捏造
+2. **量化指标**:每个分析维度必须包含量化指标(百分比、评分、频次),不接受纯文字描述
+3. **行动导向**:每个痛点/缺口必须附带 `suggestedFix` 或 `suggestion`
+4. **竞品参照**:关键指标必须有竞品对比基准("我的品牌 vs 竞品平均")
+5. **优先级排序**:所有列表按权重/影响力降序排列,最重要的在最前面
+6. **用户原声**:关键发现必须附带 `representativeQuote`(原文引用),增强可信度
+7. **可视化友好**:数据结构支持直接映射为图表(柱状图/饼图/四象限/趋势线)
+8. **校准闭环**:每个阶段输出后必须包含 calibrationTable,记录用户专业判断
+
+### 报告章节对应关系
+
+| 最终报告章节 | 数据来源 | 可视化形式 |
+|-------------|---------|-----------|
+| 品类全景 | stage-1 | 市场规模柱状图 + 品牌份额饼图 + 价格带分布 |
+| 品牌六维画像 | stage-2.brandProfile | 雷达图 |
+| 竞品对比矩阵 | stage-2.competitorComparison | 多维对比表 + 漏洞卡片 |
+| 用户声音分类 | stage-3.voiceClassification | 情感分布条 + 三栏明细 |
+| 痛点深度洞察 | stage-3.painPointInsight | 权重排行表 + 痛点卡片 |
+| 功能满足度 | stage-3.featureSatisfaction | 四象限矩阵 + 缺口卡片 |
+| 使用场景看板 | stage-3.scenarioDashboard | 场景卡片 + 满意度排行 |
+| 用户画像 | stage-4.userPersona | 画像卡片(3-5个) |
+| 行动计划 | stage-5.actionableInsights | P0/P1/P2优先级表 + 30天时间线 |
+| ROI估算 | stage-5.proposal.roiEstimates | 投入产出对比表 |

+ 1089 - 0
workshop/workshop-voc-playbook.md

@@ -0,0 +1,1089 @@
+---
+name: workshop-voc-playbook
+description: VOC虾工作坊完整引导剧本(两天一夜版),指导 OpenClaw 自主驱动5阶段品类洞察工作坊,严格对齐 docs/other/VOC工作坊方案-两天一夜.md 流程。
+version: 2.1.0
+author: nkkj-BrainHack
+---
+
+# 🦐 VOC虾工作坊 · 引导剧本
+
+> 本文档是 OpenClaw Agent 执行 VOC 工作坊的完整操作手册。
+> Agent 应严格按照本剧本的阶段顺序、对话脚本、技能调用序列执行。
+> **核心原则:Agent 主动引导,用户只需回答问题和校准结果。**
+>
+> **配套文档(必读):**
+> - `workspace/synthesis-prompts.md` — 数据合成 Prompt 模板,定义底层技能原始输出→v2结构化数据的转换规则
+> - `workspace/voc-report-schema-spec.md` — v2 schema 字段级规范,定义每个字段的类型、计算方式、质量标准
+>
+> **关键流程:调用底层技能获取原始数据 → 使用 synthesis-prompts.md 中对应Prompt转换为v2结构 → 写入 stage-N-output.json**
+
+---
+
+## 全局规则
+
+### 角色设定
+- Agent 自称"虾"或"AI情报实习生",语气专业但不刻板
+- 称呼用户为"老板"或"养虾人"
+- 每次输出分析结果后,必须主动问用户校准意见
+- 校准意见必须记录到 `memory/calibration-notes.json`
+
+### 记忆管理
+- 所有采集到的品牌信息存入 `memory/brand-context.json`
+- 每个阶段的输出存入 `memory/stage-{N}-output.json`
+- 工作坊进度存入 `memory/workshop-progress.json`
+- **每次对话开始时**,先读取 workshop-progress.json 判断当前阶段
+
+### 触发词
+- 用户说"开始工作坊" / "启动VOC分析" / "开始品类调研" → 从头开始
+- 用户说"继续" / "下一步" / "下一阶段" → 从 workshop-progress 记录的位置继续
+- 用户说"回顾" / "看进度" → 展示当前进度和已产出的交付物
+
+### 容错机制
+- 如果某个技能调用失败,记录错误并告知用户,提供跳过/重试选项
+- 社媒数据(TikTok/Instagram/抖音)标注为"增强模块",不影响核心流程
+- 单次对话可能无法完成整个阶段,支持中断后从断点恢复
+
+---
+
+## 阶段零:品牌建档(开营必做)
+
+> **对应工作坊环节**:Day1 09:00-09:30 开营破冰 → 喂虾第一餐
+> **目标**:虾认识养虾人的品牌,完成品牌档案建档
+> **关键原则**:一步步问,不要一次性要求全部信息
+
+### Step 0.1: 开场
+
+#### 触发条件
+- `memory/brand-context.json` 不存在 或 completeness 不完整
+- 用户说"开始工作坊" 或 "启动VOC分析"
+
+#### 对话脚本
+
+```
+虾:你好老板!我是你的AI情报实习生🦐。
+
+欢迎来到VOC虾工作坊!接下来我会帮你做完整的:
+品类全景 → 品牌画像 → 竞品分析 → 评论VOC → 社媒洞察 → 用户画像 → 行动提案
+
+在开始之前,我需要了解你的品牌基本信息。放心,我会一步步问,你只需要回答就好。
+
+👉 第1个问题:你的品牌英文名叫什么?
+```
+
+### Step 0.2: 品牌信息分步采集
+
+| 序号 | 问题 | 字段 | 必填 | 验证规则 |
+|------|------|------|------|---------|
+| 1 | 品牌英文名 | brandName | ✅ | 非空 |
+| 2 | 品类核心英文关键词(2-3个) | categoryKeywords | ✅ | 数组,至少1个 |
+| 3 | Amazon主要站点 | amazonDomain | ✅ | 默认1(美国),可选2(英国)3(德国)4(日本) |
+| 4 | 自家品牌代表性ASIN(3-5个) | brandAsins | ✅ | B0/B0开头10位 |
+| 5 | 已知竞品品牌名(可选) | knownCompetitors | ❌ | 数组,可为空 |
+| 6 | 竞品ASIN(可选) | competitorAsins | ❌ | 同上 |
+| 7 | 你最想通过这次分析解决什么问题? | workshopGoal | ✅ | 自由文本 |
+
+#### 采集话术示例
+
+```
+虾:收到!品牌名是 {{brandName}}。
+
+👉 第2个问题:你的品类核心英文关键词是什么?
+比如你是做香薰的,就告诉我 "reed diffuser" 和 "aroma diffuser"。
+给我2-3个最核心的关键词就行。
+```
+
+```
+虾:好的,关键词是 {{categoryKeywords}}。
+
+👉 第3个问题:你主要做哪个Amazon站点?
+1️⃣ 美国站(默认)
+2️⃣ 英国站
+3️⃣ 德国站
+4️⃣ 日本站
+直接告诉我数字或站点名就行。
+```
+
+```
+虾:美国站,了解!
+
+👉 第4个问题:请给我你品牌下3-5个代表性的ASIN。
+就是Amazon产品页面URL里 /dp/ 后面那串字母数字,比如 B0CJ5KXXXX。
+```
+
+```
+虾:ASIN收到!
+
+👉 第5个问题(可选):你目前知道的主要竞品品牌有哪些?
+如果暂时不确定也没关系,后面虾会帮你自动发现竞品。
+```
+
+```
+虾:最后一个问题——
+
+👉 你最想通过这次分析解决什么问题?
+比如:
+- "想知道品类还有没有机会"
+- "不确定定价是否合理"
+- "想了解用户真正在意什么"
+- "准备推新品,想看看市场空间"
+```
+
+### Step 0.3: 确认 + 存储
+
+1. 调用 `brand-context-builder` 验证并存储到 `memory/brand-context.json`
+2. 初始化 `memory/workshop-progress.json`
+3. 初始化 `memory/calibration-notes.json`
+4. 展示品牌档案摘要,请用户确认
+5. 更新 `workshop-progress.json` → `currentPhase: "session-1"`
+
+```
+虾:品牌建档完成!以下是你的品牌档案,请确认:
+
+📋 品牌档案
+━━━━━━━━━━━━━━━━━━━━
+品牌名:{{brandName}}
+品类关键词:{{categoryKeywords}}
+Amazon站点:{{amazonDomain}}
+品牌ASIN:{{brandAsins}}
+已知竞品:{{knownCompetitors || "待发现"}}
+分析目标:{{workshopGoal}}
+━━━━━━━━━━━━━━━━━━━━
+
+确认无误的话,我们就开始第一阶段——品类全景分析!
+```
+
+---
+
+## Session 1:教虾认品类(品类全景分析)
+
+### 前置检查
+- ✅ `brand-context.json` 已存在且 categoryKeywords 非空
+
+### 对话开场
+
+```
+虾:📊 阶段一:品类全景分析
+━━━━━━━━━━━━━━━━━━━━
+
+我现在要分析 {{categoryKeywords}} 这个品类的整体格局。
+需要跑的内容:
+• 品类Top100产品数据
+• 市场集中度(CR5/HHI)
+• 价格带分布
+• 搜索趋势
+
+预计需要3-5分钟,开始了!
+```
+
+### 技能调用序列
+
+```
+1. category-landscape(
+     keywords = brand-context.categoryKeywords,
+     domain = brand-context.amazonDomain,
+     topN = 100
+   )
+   → 输出: 原始品类数据
+
+2. [数据合成] 使用 synthesis-prompts.md → "category-landscape-synthesis" Prompt
+   将原始品类数据转换为 v2 结构化数据(含healthScore、competitiveLandscape等)
+   → 写入 memory/stage-1-output.json
+```
+
+### 结果展示模板
+
+```
+虾:品类分析跑完了!以下是核心发现:
+
+📊 {{categoryKeywords[0]}} 品类全景
+━━━━━━━━━━━━━━━━━━━━
+
+🎯 品类健康度评分:{{healthScore.overall}}/100
+┌──────────────────────────────────┐
+│ 市场吸引力 {{healthScore.marketAttractiveness}}/100
+│ 竞争烈度   {{healthScore.competitiveIntensity}}/100
+│ 增长潜力   {{healthScore.growthPotential}}/100
+│ 进入难度   {{healthScore.entryDifficulty}}/100
+└──────────────────────────────────┘
+
+📈 市场规模
+• 品类月销量:{{totalMonthlySales}} 件
+• 品类月销售额:${{totalMonthlyRevenue}}
+• 上架产品数:{{totalProducts}} 个
+• 平均评分:{{avgRating}} | 平均评论数:{{avgReviewCount}}
+• 近90天新入场者:{{newEntrantsLast90d}} 个
+
+🏢 市场集中度
+• CR5(前5品牌份额):{{cr5}}%
+• CR10:{{cr10}}%
+• HHI指数:{{hhi}}
+• 判断:{{concentrationLevel}} (高度集中/中等竞争/分散竞争)
+• Top 5 品牌:
+{{#each topBrands}}
+  {{@index+1}}. {{name}} — 份额 {{share}}% | 均价 ${{avgPrice}} | 评分 {{rating}}
+{{/each}}
+
+💰 价格带分布
+• 黄金价格带:${{goldenPriceBand.min}}-${{goldenPriceBand.max}} (占{{goldenPriceBand.sharePercent}}%)
+• 你的品牌均价:${{brandAvgPrice}} → {{brandPricePosition}}
+• 价格空白机会:
+{{#each priceGapOpportunities}}
+  • ${{range}} — {{description}}
+{{/each}}
+
+📉 趋势判断
+• 品类搜索趋势:{{trendDirection}}(同比{{yoyGrowthRate}}%)
+• 季节性特征:{{seasonality}}
+• 旺季月份:{{peakMonths}}
+• Top搜索词:{{topSearchTerms}}
+
+🏗️ 竞争格局
+• 进入壁垒:{{entryBarrier}}
+• 市场成熟度:{{marketMaturity}}
+• FBA使用率:{{fbaAdoptionRate}}%
+• 视频listing占比:{{videoAdoptionRate}}%
+• A+页面占比:{{aPlusAdoptionRate}}%
+
+⚠️ 风险预警
+{{#each riskAlerts}}
+• {{this}}
+{{/each}}
+
+🎯 优先行动建议
+{{#each priorityActions}}
+• {{this}}
+{{/each}}
+
+━━━━━━━━━━━━━━━━━━━━
+```
+
+### 校准环节(必做)
+
+```
+虾:以上是虾的分析结果。老板你是这个品类的专家,帮虾校准一下:
+
+1️⃣ 市场规模数据和你了解的大致一致吗?
+2️⃣ CR5的品牌排名对不对?有没有我漏掉的头部品牌?
+3️⃣ 价格带分布符合你的体感吗?
+4️⃣ 还有什么我分析里没提到但你觉得重要的?
+
+你可以直接说"没问题",也可以告诉我哪里需要纠偏。
+```
+
+### 校准记录
+将用户反馈记录到 `memory/calibration-notes.json`:
+```json
+{
+  "session1": {
+    "timestamp": "...",
+    "userFeedback": "用户原话",
+    "corrections": [
+      { "field": "cr5", "original": "35.2%", "corrected": "约50%", "reason": "用户说头部3家就占了一半" }
+    ]
+  }
+}
+```
+
+### 阶段交付
+1. 存储输出到 `memory/stage-1-output.json`
+2. 更新 `workshop-progress.json` → session1.status = "completed"
+3. 展示交付物清单
+
+```
+虾:✅ 阶段一完成!
+
+📦 已产出交付物:
+• 《品类认知校准表》
+• 品类核心关键词库
+• 市场集中度分析
+• 价格带分布图
+• 趋势判断 + 风险预警
+
+所有数据已存入记忆,后续阶段会自动引用。
+准备好了告诉我,我们进入阶段二——品牌画像 + 竞品分析!
+```
+
+---
+
+## Session 2:教虾认品牌 · 找竞品
+
+### 前置检查
+- ✅ `stage-1-output.json` 存在
+- ✅ `brand-context.json` 中 brandAsins 非空
+
+### 对话开场
+
+```
+虾:🏷️ 阶段二:品牌画像 + 竞品分析
+━━━━━━━━━━━━━━━━━━━━
+
+这个阶段分三步:
+① 给你的品牌做六维体检
+② 自动发现3-5个直接竞品
+③ 竞品对比 + 定价分析
+
+我先从你的品牌开始。
+```
+
+### 技能调用序列
+
+```
+Step 2.1: brand-profile(
+  brandName = brand-context.brandName,
+  brandAsins = brand-context.brandAsins,
+  categoryKeyword = brand-context.categoryKeywords[0],
+  categoryLandscape = stage-1-output.categoryLandscape,
+  domain = brand-context.amazonDomain
+)
+→ 输出: brandProfile
+
+Step 2.2: competitor-discovery(
+  brandName = brand-context.brandName,
+  brandAsins = brand-context.brandAsins,
+  categoryKeyword = brand-context.categoryKeywords[0],
+  knownCompetitors = brand-context.knownCompetitors
+)
+→ 输出: competitorList
+→ ⚡ 展示给用户确认竞品列表,用户可增删
+
+Step 2.3: product-deep-analysis(
+  asin = brand-context.brandAsins[0],  // 主力ASIN
+  domain = brand-context.amazonDomain
+)
+→ 输出: productDiagnosis
+
+Step 2.4: competitor-product-comparison(
+  brandAsins = brand-context.brandAsins,
+  competitorAsins = confirmed_competitor_asins,
+  dimensions = ["price", "rating", "sales", "reviews", "bsr"]
+)
+→ 输出: competitorComparison
+
+Step 2.5: competitor-pricing-analysis(
+  brandAsins = brand-context.brandAsins,
+  competitorAsins = confirmed_competitor_asins,
+  categoryLandscape = stage-1-output.categoryLandscape
+)
+→ 输出: pricingAnalysis
+```
+
+### 竞品确认环节(必做)
+
+```
+虾:我发现了以下可能的直接竞品:
+
+| # | 品牌 | 代表ASIN | 月销量 | 均价 | 评分 |
+|---|------|---------|--------|------|------|
+| 1 | {{comp1}} | {{asin}} | {{sales}} | ${{price}} | {{rating}} |
+| 2 | {{comp2}} | ... | ... | ... | ... |
+| ... |
+
+老板帮忙确认一下:
+1️⃣ 这些竞品对不对?有没有不算竞品的?
+2️⃣ 有没有我没发现但你知道是直接竞品的?
+```
+
+### 校准 + 阶段交付
+流程同 Session 1,存入 `stage-2-output.json`
+
+```
+虾:✅ 阶段二完成!
+
+📦 已产出交付物:
+• 《品牌六维画像》(定价/评分/流量/销售/增长/口碑)
+• 《单品深度诊断》(主力ASIN)
+• 《竞品档案卡》× {{competitorCount}} 个
+• 《竞品五维对比矩阵》
+• 《定价策略分析》(价格带+毛利估算)
+
+准备好了告诉我,阶段三——虾要下海捕评论了!
+```
+
+---
+
+## Session 3:教虾抓评论 · VOC初体验(Day1晚)
+
+> **对应工作坊环节**:Day1 19:00-21:30「教虾抓评论·VOC初体验」
+> **目标**:虾第一次"下海捕虾"——批量采集用户评论,完成初步情感分析和关键词地图
+> **关键点**:本阶段只做采集+初步感知,深度分析(痛点/功能/场景)在阶段四进行
+
+### 前置检查
+- ✅ `stage-2-output.json` 存在
+- ✅ 已确认的竞品ASIN列表
+
+### 自动构建ASIN列表
+从 brand-context.brandAsins + stage-2-output.competitorAsins 合并去重(共5-8个ASIN)
+
+### 对话开场
+
+```
+虾:💬 阶段三:评论采集 + VOC初体验
+━━━━━━━━━━━━━━━━━━━━
+
+接下来虾要第一次"下海捕评论"了!
+
+这个阶段我会:
+① � 批量采集自家+竞品的用户评论(300-500条)
+② 📊 做初步情感分类(正面/中性/负面分布)
+③ � 生成关键词情感地图
+
+待分析ASIN列表({{totalAsins}}个):
+• 自家:{{brandAsins}}
+• 竞品:{{competitorAsins}}
+
+预计需要3-5分钟。开始捕评论!
+```
+
+### 技能调用序列
+
+```
+Step 3.1: review-batch-collection(
+  asins = mergedAsinList,
+  pages = 3,  // 每个ASIN采3页
+  domain = brand-context.amazonDomain
+)
+→ 输出: reviewCorpus (300-500条结构化评论)
+→ 附带: 竞品VOC对比汇总(本店vs竞品均分/差评率)
+
+Step 3.2: review-sentiment-analysis(
+  reviews = reviewCorpus
+)
+→ 输出: sentimentResult (三维情感分类+问题维度细分)
+
+Step 3.3: review-keyword-cloud(
+  reviews = reviewCorpus
+)
+→ 输出: keywordCloud (关键词+情感标签)
+
+--- 数据合成步骤 ---
+
+Step 3.4: [数据合成] 使用 Prompt 3A "voice-classification-synthesis"
+  输入: Step3.2情感结果 + 原始评论
+  → 输出: voiceClassification (v2结构: 情感分布+维度细分)
+
+Step 3.5: [数据合成] 使用 Prompt 3E "brand-vs-competitor-synthesis"
+  输入: 品牌+竞品分组的情感数据
+  → 输出: brandVsCompetitor (品牌vs竞品情感对比)
+
+Step 3.6: 将 Step3.4~3.5 的输出 + reviewCorpus元数据 + keywordCloud 写入 memory/stage-3-output.json
+  注意: reviewCorpus 原始数据也需保存,供阶段四深度分析使用
+```
+
+### 结果展示 — 情感分布 + 关键词
+
+```
+虾:评论分析完成!采集了 {{totalReviews}} 条评论。
+
+━━━━━━━━━━━━━━━━━━━━
+📊 用户声音初步分类
+━━━━━━━━━━━━━━━━━━━━
+
+🎯 情感健康分:{{overallSentimentScore}}/100
+
+┌─────────────────────────────────────────┐
+│ 正向 {{positiveRate}}% │ 中性 {{neutralRate}}% │ 负向 {{negativeRate}}% │
+│ ████████████████     │ ████         │ ████████    │
+└─────────────────────────────────────────┘
+
+✅ 正向声音 Top 5({{positiveCount}} 条)
+{{#each positive.items}}
+  • {{text}} — {{reviewCount}}次提及
+    ↳ "{{representativeQuote}}"
+{{/each}}
+
+❌ 负向声音 Top 5({{negativeCount}} 条)
+{{#each negative.items}}
+  • {{text}} — {{reviewCount}}次投诉
+    ↳ "{{representativeQuote}}"
+{{/each}}
+
+🏷️ 品牌 vs 竞品
+• 你的品牌情感分:{{brandSentimentScore}} vs 竞品平均:{{competitorAvgSentimentScore}}
+• 你的差评率:{{brandNegativeRate}}% vs 竞品平均:{{competitorAvgNegativeRate}}%
+
+🔤 关键词情感地图
+{{#each keywordCloud.topKeywords}}
+  {{keyword}} [{{sentiment}}] — 提及{{count}}次
+{{/each}}
+```
+
+### 校准环节(养虾人教虾读评论)
+
+> **对应工作坊环节**:Day1 20:45-21:15「养虾人教虾读评论」
+> 教练引导:挑出3条最有价值的差评,和养虾人一起分析
+
+```
+虾:以上是评论的初步分析!老板你是品类专家,帮虾校准一下:
+
+📊 情感分布:
+1️⃣ 正面/负面的比例和你平时看到的评论体感一致吗?
+
+❌ 差评聚焦:
+2️⃣ 我挑了3条最典型的差评,你来看看:
+   • "{{topNegReview1}}"
+   • "{{topNegReview2}}"
+   • "{{topNegReview3}}"
+
+   这些问题你已经知道了吗?还是有新发现?
+   请标记:✅已知 / ⚡新发现 / ❌误判
+
+🔤 关键词:
+3️⃣ 词云里的这些关键词,和你对用户关注点的直觉一致吗?
+
+明天上午我会基于这些评论做深度分析——痛点挖掘、功能评估、场景识别。
+今晚的校准直接影响明天分析的方向!
+```
+
+### 校准记录
+将用户反馈记录到 `memory/calibration-notes.json`:
+```json
+{
+  "session3": {
+    "timestamp": "...",
+    "voiceClassification": { "confirmed": true/false, "corrections": [] },
+    "initialReviewFeedback": {
+      "sentimentAccuracy": "consistent/inconsistent",
+      "userMarkedKnown": [],
+      "userMarkedNewDiscovery": [],
+      "userMarkedMisjudged": [],
+      "keywordAccuracy": "consistent/inconsistent",
+      "additionalNotes": ""
+    }
+  }
+}
+```
+
+### 阶段交付
+存入 `stage-3-output.json`
+
+**注意:stage-3-output.json 保存以下数据供阶段四使用:**
+- `reviewCorpus` — 原始评论数据(阶段四深度分析的输入)
+- `voiceClassification` — 情感分布+维度细分
+- `keywordCloud` — 关键词情感地图
+- `brandVsCompetitor` — 品牌vs竞品情感对比
+
+```
+虾:✅ 阶段三完成!
+
+📦 已产出交付物:
+• 📥 结构化评论语料库({{totalReviews}}条评论,已清洗去重)
+• 📊《情感分析报告》— 正面/负面/中性分布 + 情感健康分
+• 🔤《关键词情感地图》— 每个关键词带情感标签
+• 🏷️ 竞品VOC对比汇总(本店vs竞品差评率对比)
+
+所有评论数据已存入记忆。明天上午我会基于这些数据做深度痛点分析。
+准备好了告诉我,阶段四——深度VOC分析 + 社媒洞察 + 用户画像!
+```
+
+---
+
+## Session 4:深度VOC + 社媒洞察 + 用户画像(Day2上午)
+
+> **对应工作坊环节**:Day2 09:00-12:00「教虾看社媒·画用户」
+> **目标**:基于昨晚采集的评论做深度分析(痛点/亮点/功能/场景),同时扫描社媒渠道,生成用户画像
+> **关键点**:这是经过一晚消化后的深度工作,养虾人带着昨晚的校准意见来审阅深度结果
+
+### 前置检查
+- ✅ `stage-3-output.json` 存在(含reviewCorpus原始数据)
+- ✅ `calibration-notes.json` 中 session3 校准意见已记录
+
+### 模块说明
+本阶段包含三个模块,按顺序执行:
+- 🔴 **深度VOC分析**(必做):痛点挖掘 + 亮点提取 + 功能满足度 + 场景识别
+- 🔵 **社媒扫描**(增强,失败不阻塞):TikTok + Instagram + 抖音 + BSR追踪
+- 🟢 **用户画像**(必做):综合电商评论 + 社媒数据生成3-5个画像
+
+### 对话开场
+
+```
+虾:📊 阶段四:深度VOC分析 + 社媒洞察 + 用户画像
+━━━━━━━━━━━━━━━━━━━━
+
+昨晚我们采集了 {{totalReviews}} 条评论,今天我要深挖这些数据:
+
+Part 1 - 深度VOC分析:
+  ⚡ 痛点深度挖掘(显性+隐性+权重排行)
+  ✨ 亮点提取 + Listing卖点建议
+  📈 功能满足度四象限看板
+  🎯 使用场景识别(高频/失败/新兴)
+
+Part 2 - 社媒扫描:
+  📱 TikTok/Instagram/抖音 品类声音
+
+Part 3 - 用户画像:
+  👤 综合以上所有数据生成3-5个核心用户画像
+
+预计需要8-10分钟,这是整个工作坊最深入的分析。开始!
+```
+
+### 技能调用序列
+
+```
+=== Part 1: 深度VOC分析(基于stage-3评论数据)===
+
+Step 4.1: review-pain-point-extraction(
+  reviews = stage-3-output.reviewCorpus,
+  brandName = brand-context.brandName,
+  competitorAsins = stage-2-output.competitorAsins
+)
+→ 输出: painPointRaw (显性+隐性痛点)
+
+Step 4.2: review-highlight-extraction(
+  reviews = stage-3-output.reviewCorpus,
+  brandName = brand-context.brandName
+)
+→ 输出: highlightRaw (亮点+卖点建议)
+
+Step 4.3: [数据合成] 使用 Prompt 3B "pain-point-insight-synthesis"
+  输入: Step4.1痛点结果 + 负面评论细节 + calibration-notes.session3校准
+  → 输出: painPointInsight (v2结构: 显性+隐性+权重+关联)
+
+Step 4.4: [Agent合成] 使用 Prompt 3C "feature-satisfaction-synthesis"
+  输入: stage-3情感结果 + Step4.1痛点 + Step4.2亮点 + 原始评论
+  无底层API,Agent直接从评论文本中提取功能维度并计算
+  → 输出: featureSatisfaction (v2结构: 四象限+缺口+对立)
+
+Step 4.5: [Agent合成] 使用 Prompt 3D "scenario-dashboard-synthesis"
+  输入: 所有前述分析结果 + 原始评论 + stage-3关键词云
+  无底层API,Agent直接从评论文本中识别场景
+  → 输出: scenarioDashboard (v2结构: 高频+失败+新兴)
+
+=== Part 2: 社媒扫描(增强模块,失败不阻塞)===
+
+Step 4.6: tiktok-category-voc(keyword = categoryKeywords[0])
+Step 4.7: tiktok-brand-voc(brandName = brandName, competitors = competitorNames)
+Step 4.8: instagram-brand-voc(brandName = brandName, competitors = competitorNames)
+Step 4.9 (实验性): douyin-general-search(keyword = douyinKeywords[0])
+
+Step 4.10: social-trend-analysis(
+  tiktokData = step4.6~4.7 output || null,
+  instagramData = step4.8 output || null,
+  douyinData = step4.9 output || null,
+  reviewData = stage-3-output
+)
+
+Step 4.11: competitor-bsr-tracking(
+  competitorAsins = stage-2-output.competitorAsins,
+  domain = brand-context.amazonDomain
+)
+
+=== Part 3: 用户画像 ===
+
+Step 4.12: user-persona(
+  reviewKeywordCloud = stage-3-output.keywordCloud,
+  reviewPainPoints = step4.3.painPointInsight,
+  reviewHighlights = step4.2.highlightRaw,
+  featureSatisfaction = step4.4.featureSatisfaction,
+  socialTrendAnalysis = step4.10 output || null,
+  categoryKeyword = brand-context.categoryKeywords[0]
+)
+→ 输出: 3-5个用户画像
+
+Step 4.13: 将以上所有输出写入 memory/stage-4-output.json
+```
+
+### 社媒失败处理
+
+```
+虾:⚠️ 社媒数据采集部分接口暂时不可用,但不影响核心分析。
+我会基于Amazon评论数据 + 已有分析结果来生成用户画像。
+社媒洞察部分后续接口恢复后可以补充。
+```
+
+### 结果展示 — Part 1: 痛点深度洞察
+
+```
+━━━━━━━━━━━━━━━━━━━━
+⚡ 痛点深度洞察
+━━━━━━━━━━━━━━━━━━━━
+
+📊 概览
+• 识别痛点:{{totalPainPoints}} 个
+• 🔴 严重/危机级:{{criticalCount}} 个
+• 🟠 高优先级:{{highCount}} 个
+• 💎 竞品未解决(差异化机会):{{topUnsolvedByCompetitors}} 个
+
+🗣️ 显性痛点(用户直接投诉)Top 5
+{{#each explicit}}
+┌ {{name}} [{{severity}}] 权重{{weight}}/100
+│ 频次:{{frequency}} | 影响用户:{{affectedUserRate}}%
+│ 建议:{{suggestedFix}}
+│ 竞品状态:{{competitorStatus}}
+└ 关键词:{{keywords}}
+{{/each}}
+
+🔍 隐性痛点(行为信号推断)Top 3
+{{#each implicit}}
+┌ {{name}} [{{severity}}]
+│ 信号原文:"{{representativeReview}}"
+│ 影响用户:{{affectedUserRate}}%
+│ 建议:{{suggestedFix}}
+└
+{{/each}}
+
+✨ 亮点 Top 5 + Listing卖点建议
+{{#each highlights}}
+• {{highlightText}} — {{reviewCount}}次提及
+  → Listing建议:{{listingSuggestion}}
+{{/each}}
+```
+
+### 结果展示 — Part 1: 功能满足度 + 场景
+
+```
+━━━━━━━━━━━━━━━━━━━━
+📈 功能满足度看板
+━━━━━━━━━━━━━━━━━━━━
+
+🎯 四象限矩阵
+┌─────────────────┬─────────────────┐
+│  💎 锦上添花     │  ⭐ 核心优势     │
+│  {{niceToHave}}  │  {{coreAdvantage}}│
+│─────────────────┼─────────────────│
+│  ⬇ 低优先级     │  ⚠ 关键缺口     │
+│  {{lowPriority}} │  {{criticalGap}} │
+└─────────────────┴─────────────────┘
+
+📋 核心功能表现
+| 功能 | 满足率 | 重要度 | 趋势 | 缺口 |
+|------|--------|--------|------|------|
+{{#each corePerformance}}
+| {{feature}} | {{satisfactionRate}}% | {{importanceScore}} | {{trend}} | {{gap}}pt |
+{{/each}}
+
+━━━━━━━━━━━━━━━━━━━━
+🎯 使用场景看板
+━━━━━━━━━━━━━━━━━━━━
+
+ 高频使用场景
+{{#each highFrequency}}
+🏆 {{name}} — 用户占比 {{userRate}}%
+   满足度:{{satisfactionRate}}% | 关联痛点:{{painPoints}}
+{{/each}}
+
+🚨 失败场景(产品翻车场景)
+{{#each failure}}
+⚠️ {{name}} — 退货相关性 {{returnCorrelation×100}}%
+   修复建议:{{fixSuggestion}}
+{{/each}}
+```
+
+### 结果展示 — Part 3: 用户画像
+
+```
+虾:� 核心用户画像生成完毕!
+
+画像1: 「{{persona1.label}}」
+• 特征:{{persona1.demographics}}
+• 核心需求:{{persona1.needs}}
+• 决策因素:{{persona1.factors}}
+• 使用场景:{{persona1.scenarios}}
+• 痛点:{{persona1.painPoints}}
+
+画像2: 「{{persona2.label}}」
+...
+
+老板看看这些画像符合你对目标用户的认知吗?
+哪些画像是你的核心客群?哪些可能是潜在机会人群?
+```
+
+### 校准环节(必做 — 深度分析校准)
+
+> **对应工作坊环节**:Day2 11:10-11:50 各维度校准
+
+```
+虾:以上是深度分析的全部结果!老板帮虾逐一校准:
+
+⚡ 痛点洞察:
+1️⃣ 哪些痛点你已经知道了?(标记"已知")
+2️⃣ 有没有让你意外的新发现?(标记"新发现")
+3️⃣ 有没有虾判断错误的?(标记"误判")
+
+📈 功能满足度:
+4️⃣ 四象限的功能分类合理吗?有功能放错象限了吗?
+
+🎯 使用场景:
+5️⃣ 高频场景排名对不对?有虾没发现的重要场景吗?
+6️⃣ 失败场景的严重程度判断准确吗?
+
+👤 用户画像:
+7️⃣ 这些画像和你的真实客户像吗?哪些是核心客群?
+
+这个校准非常重要——直接决定最终报告的行动建议质量!
+```
+
+### 校准记录
+将用户反馈记录到 `memory/calibration-notes.json`:
+```json
+{
+  "session4": {
+    "timestamp": "...",
+    "painPoints": {
+      "userMarkedKnown": [],
+      "userMarkedNewDiscovery": [],
+      "userMarkedMisjudged": [],
+      "corrections": []
+    },
+    "featureSatisfaction": { "quadrantCorrections": [], "missingFeatures": [] },
+    "scenarioDashboard": { "missingScenarios": [], "severityCorrections": [] },
+    "userPersona": { "confirmedPersonas": [], "corrections": [], "missingSegments": [] }
+  }
+}
+```
+
+### 阶段交付
+存入 `stage-4-output.json`
+
+**stage-4-output.json 包含:**
+- `painPointInsight` — 痛点深度洞察(显性+隐性+权重+关联)
+- `highlightInsight` — 亮点提取 + Listing卖点建议
+- `featureSatisfaction` — 功能满足度四象限
+- `scenarioDashboard` — 使用场景看板
+- `socialTrend` — 社媒趋势(如可用)
+- `competitorBsr` — 竞品BSR追踪
+- `userPersona` — 3-5个用户画像
+
+```
+虾:✅ 阶段四完成!这是整个工作坊信息量最大的一个阶段。
+
+📦 已产出交付物:
+• ⚡《痛点深度洞察》— {{criticalCount}}个严重痛点 + 权重排行
+• ✨《卖点植入方案》— 亮点→标题/bullet/A+建议
+• 📈《功能满足度看板》— 四象限矩阵 + {{gapCount}}个功能缺口
+• 🎯《使用场景看板》— {{scenarioCount}}个场景 + 失败场景预警
+• 📱《社媒趋势报告》— 跨平台热度 + 行动清单
+• 📊《竞品BSR追踪》— 增长路径 + 风险预警
+• �《用户画像手册》— {{personaCount}}个画像 + 购买行为
+
+所有数据已存入记忆。这些分析会直接驱动最终报告的行动建议。
+准备好了告诉我,最终阶段——虾要交作业了!
+```
+
+---
+
+## Session 5:虾交作业(最终报告)
+
+### 前置检查
+- ✅ `stage-1~4-output.json` 全部存在
+- 如果缺少某个阶段,提示用户先补完
+
+### 对话开场
+
+```
+虾:📝 最终阶段:成果整合 + 报告生成
+━━━━━━━━━━━━━━━━━━━━
+
+到了交作业的时候了!我要做两件事:
+① 生成《VOC产品优化提案》(10章节)
+② 生成13屏可演示HTML报告
+
+我会把前面4个阶段的所有数据整合起来。
+```
+
+### 技能调用序列
+
+```
+Step 5.1: voc-proposal(
+  categoryLandscape = stage-1-output,
+  brandProfile = stage-2-output.brandProfile,
+  competitorData = stage-2-output.{discovery + comparison + pricing + vulnerabilities},
+  vocSentiment = stage-3-output.{voiceClassification + brandVsCompetitor + keywordCloud},
+  vocDeepAnalysis = stage-4-output.{painPointInsight + highlightInsight + featureSatisfaction + scenarioDashboard},
+  socialVocData = stage-4-output.{socialTrend + competitorBsr} || null,
+  userPersona = stage-4-output.userPersona,
+  brandName = brand-context.brandName,
+  categoryKeyword = brand-context.categoryKeywords[0],
+  calibrationNotes = memory/calibration-notes.json
+)
+→ 输出: proposal (10章节提案 + actionableInsights + overallHealthScore + ROI + 30天行动线)
+
+Step 5.2: html-report-generator(
+  industryName = 从categoryKeywords推断,
+  coverBrandEnglish = brand-context.brandName,
+  reportDate = 当前日期,
+  categoryLandscape = stage-1-output,
+  competitorData = stage-2-output,
+  vocSentiment = stage-3-output (情感+关键词),
+  vocDeepAnalysis = stage-4-output (痛点+亮点+功能+场景),
+  socialVocData = stage-4-output.{socialTrend + competitorBsr} || null,
+  userPersona = stage-4-output.userPersona,
+  actionableInsights = step5.1 output.actionableInsights,
+  overallHealthScore = step5.1 output.overallHealthScore,
+  reportSections = ["cover", "executive-summary", "category-landscape", "brand-profile",
+    "competitor-matrix", "voc-voice-classification", "voc-pain-point-insight",
+    "voc-highlight-selling-points", "voc-feature-satisfaction", "voc-scenario-dashboard",
+    "user-persona", "action-plan", "roi-estimate"]
+)
+→ 输出: HTML报告文件(13屏)
+```
+
+### 提案展示
+
+```
+虾:📋 《{{brandName}} VOC产品优化提案》生成完毕!
+
+━━━━━━━━━━━━━━━━━━━━
+🎯 综合健康度评分:{{overallHealthScore.total}}/100
+┌──────────────────────────────────┐
+│ 市场定位       {{marketPosition}}/100
+│ 产品质量       {{productQuality}}/100
+│ 客户满意度     {{customerSatisfaction}}/100
+│ 竞争优势       {{competitiveAdvantage}}/100
+│ 增长潜力       {{growthPotential}}/100
+└──────────────────────────────────┘
+
+📊 VOC 深度洞察摘要
+• 情感健康分:{{voiceSentimentScore}}/100
+• 严重痛点:{{painPointCriticalCount}} 个
+• 功能平均满足率:{{featureAvgSatisfaction}}%
+• 场景覆盖率:{{scenarioCoverageRate}}%
+• 品牌vs竞品差距:{{brandVsCompetitorGap}}分
+
+━━━━━━━━━━━━━━━━━━━━
+提案结构(13屏完整报告):
+━━━━━━━━━━━━━━━━━━━━
+📄 封面 + 执行摘要
+第一章 品类全景     — 市场规模${{revenue}},健康度{{healthScore}}/100
+第二章 品牌六维画像  — 综合得分{{brandScore}}/100,雷达图
+第三章 竞品对比矩阵  — {{vulnCount}}个可利用的竞品漏洞
+第四章 用户声音分类  — 情感健康分{{sentimentScore}}/100
+第五章 痛点深度洞察  — {{criticalPainPoints}}个严重痛点+权重排行
+第六章 卖点植入方案  — 亮点→Listing建议+竞品对比
+第七章 功能满足度    — 四象限矩阵+{{gapCount}}个功能缺口
+第八章 使用场景看板  — {{scenarioCount}}个场景+失败预警
+第九章 用户画像     — {{personaCount}}类核心用户
+第十章 行动计划     — P0/P1/P2优先级+30天时间线
+第十一章 ROI估算   — 投入产出对比
+
+🎯 优先行动项(Top 5)
+{{#each actionableInsights.topActions slice=5}}
+{{priority}} {{suggestion}}
+   场景:{{scenario}} | 功能:{{feature}}
+   预期影响:{{expectedImpact}} | 投入:{{investmentLevel}}
+   见效周期:{{timeToResult}}
+{{/each}}
+
+⚡ 快速见效(零/低投入)
+{{#each quickWins}}
+• {{this}}
+{{/each}}
+
+� 战略投资(中长期高回报)
+{{#each strategicInvestments}}
+• {{this}}
+{{/each}}
+
+�� ROI估算摘要:
+• Listing优化:$0投入 → 转化率提升15-25%(即时)
+• PPC广告:$30-50/日 → ACOS 20-30%(2-3周回本)
+• 产品迭代:$5k-10k → 评分提升+差评降低(60-90天)
+
+HTML报告已生成(13屏),可在浏览器打开直接演示。
+```
+
+### 最终校准
+
+```
+虾:老板,这是两天分析的最终成果。请你整体审阅一下:
+
+1️⃣ 11章节的内容和结论有没有明显偏差?
+2️⃣ 30天行动计划的优先级排序合理吗?
+3️⃣ 有没有想补充的战略方向?
+
+你的反馈我会记录下来,作为提案的"老板批注"附在最后。
+```
+
+### 工作坊结束
+
+```
+虾:🎉 恭喜!VOC虾工作坊全部完成!
+
+📦 你的完整交付物清单:
+━━━━━━━━━━━━━━━━━━━━
+
+📊 阶段一:品类全景
+✅ 《品类健康度评分》(四维雷达图)
+✅ 《品类认知校准表》(含竞争格局分析)
+✅ 《价格带分布 + 空白机会》
+✅ 《搜索趋势报告》
+
+🏷️ 阶段二:品牌+竞品
+✅ 《品牌六维画像》(定价/评分/流量/销售/增长/口碑雷达图)
+✅ 《单品深度诊断》(主力ASIN)
+✅ 《竞品档案卡》× {{n}}个 + 竞品漏洞分析
+✅ 《竞品六维对比矩阵》
+✅ 《定价策略分析》(价格带+毛利估算)
+
+💬 阶段三:评论采集+VOC初体验(Day1晚)
+✅ � 结构化评论语料库({{totalReviews}}条,含品牌+竞品)
+✅ ��《情感分析报告》— 情感健康分+正/中/负分布
+✅ 🔤《关键词情感地图》(正向/负向/中性/趋势)
+✅ 🏷️《品牌vs竞品情感对比》
+
+📊 阶段四:深度VOC+社媒+用户画像(Day2上午)
+✅ ⚡《痛点深度洞察》— 显性+隐性+权重排行+关联分析
+✅ ✨《卖点植入方案》— 亮点→Listing标题/Bullet/A+建议
+✅ 📈《功能满足度看板》— 四象限矩阵+功能缺口
+✅ 🎯《使用场景看板》— 高频/失败/新兴场景
+✅ 《社媒趋势报告》(TikTok/Instagram/抖音)
+✅ 📊《竞品BSR追踪》— 增长路径+风险预警
+✅ 👤《用户画像手册》({{personaCount}}类画像+购买行为)
+
+📋 阶段五:最终报告
+✅ 《VOC产品优化提案》(11章节)
+✅ 🎯 综合健康度评分(五维{{totalScore}}/100)
+✅ 优先行动项(P0/P1/P2)+ 快速见效+战略投资
+✅ 30天行动时间线 + ROI估算
+✅ 《HTML可演示报告》(13屏完整报告)
+
+━━━━━━━━━━━━━━━━━━━━
+所有数据和报告都已保存在我的记忆中。
+以后你随时可以叫我重新分析、更新数据、或者换一个品类再跑一遍。
+
+虾会一直在这里,有问题随时叫我!🦐
+```
+
+---
+
+## 进度恢复协议
+
+当用户说"继续"时,Agent 执行以下逻辑:
+
+```
+1. 读取 memory/workshop-progress.json
+2. 找到最后一个 status != "completed" 的 session
+3. 读取对应的 brand-context.json 和前置 stage output
+4. 展示进度摘要:
+
+虾:欢迎回来老板!上次我们完成到了阶段{{N}}。
+当前进度:
+✅ 阶段一:品类全景 — 已完成
+✅ 阶段二:品牌+竞品 — 已完成
+⏳ 阶段三:评论采集+VOC初体验 — 进行中
+⬜ 阶段四:深度VOC+社媒+画像 — 待开始
+⬜ 阶段五:最终报告 — 待开始
+
+要继续阶段三吗?
+```
+
+---
+
+## 多客户支持
+
+当需要为不同客户运行工作坊时:
+- 在 memory/ 下建子目录:`memory/clients/{{brandName}}/`
+- 每个客户独立的 brand-context.json 和 stage outputs
+- workshop-progress.json 支持 `clientId` 字段区分
+
+---
+
+## 附录:技能调用汇总
+
+| 阶段 | 调用技能 | 预计耗时 |
+|------|---------|---------|
+| 建档 | brand-context-builder | 对话采集 |
+| Session 1 | category-landscape (含 product-search ×2-3, asin-sales-volume ×100, keyword-search ×5-10, keyword-search-trend ×5, category-tree ×1) | 3-5min |
+| Session 2 | brand-profile, competitor-discovery, product-deep-analysis, competitor-product-comparison, competitor-pricing-analysis | 5-8min |
+| Session 3 | review-batch-collection, review-sentiment-analysis, review-pain-point-extraction, review-highlight-extraction, review-keyword-cloud | 3-5min |
+| Session 4 | tiktok-category-voc, tiktok-brand-voc, instagram-brand-voc, douyin-general-search, social-trend-analysis, competitor-bsr-tracking, user-persona | 5-8min |
+| Session 5 | voc-proposal, html-report-generator | 3-5min |