@optima-chat/optima-agent 0.9.44 → 0.9.46

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (101) hide show
  1. package/.claude/skills/video-edit/SKILL.md +41 -31
  2. package/dist/bin/bi-cli.js +0 -0
  3. package/dist/bin/browser-cli.js +0 -0
  4. package/dist/bin/channels.js +0 -0
  5. package/dist/bin/commerce.js +0 -0
  6. package/dist/bin/gen.js +0 -0
  7. package/dist/bin/google-ads.js +0 -0
  8. package/dist/bin/kb-skills.js +0 -0
  9. package/dist/bin/logistics.js +0 -0
  10. package/dist/bin/optima.js +0 -0
  11. package/dist/bin/scout.js +0 -0
  12. package/dist/bin/sentinel.js +0 -0
  13. package/dist/bin/shopify.js +0 -0
  14. package/package.json +12 -11
  15. package/.claude/settings.local.json +0 -166
  16. package/.claude/skills/scout/template/product/INDEX.md +0 -32
  17. package/.claude/skills/scout/template/product/LOGS.md +0 -4
  18. package/.claude/skills/scout/template/product/RESEARCH.md +0 -113
  19. package/.claude/skills/scout/template/product/competitors/COMPETITORS.md +0 -33
  20. package/.claude/skills/scout/template/product/data/.gitkeep +0 -0
  21. package/.claude/skills/scout/template/product/market/MARKET.md +0 -32
  22. package/.claude/skills/scout/template/product/reports/.gitkeep +0 -0
  23. package/.claude/skills/scout/template/product/reviews/PAIN-POINTS.md +0 -19
  24. package/.claude/skills/scout/template/product/suppliers/SUPPLIERS.md +0 -34
  25. package/.claude/skills/scout/template/product/trends/TRENDS.md +0 -23
  26. package/.claude/skills/scout/template/user/CBB.md +0 -33
  27. package/.claude/skills/scout/template/user/OVERVIEW.md +0 -13
  28. package/.claude/skills/scout/template/user/PROFILE.md +0 -23
  29. package/.claude/skills/scout/template/user/ROADMAP.md +0 -41
  30. package/dist/bin/comfy.d.ts +0 -3
  31. package/dist/bin/comfy.d.ts.map +0 -1
  32. package/dist/bin/comfy.js +0 -3
  33. package/dist/bin/comfy.js.map +0 -1
  34. package/dist/bin/growth.d.ts +0 -3
  35. package/dist/bin/growth.d.ts.map +0 -1
  36. package/dist/bin/growth.js +0 -3
  37. package/dist/bin/growth.js.map +0 -1
  38. package/dist/src/hooks-loader.d.ts +0 -6
  39. package/dist/src/hooks-loader.d.ts.map +0 -1
  40. package/dist/src/hooks-loader.js +0 -215
  41. package/dist/src/hooks-loader.js.map +0 -1
  42. package/dist/src/ui/App.d.ts +0 -6
  43. package/dist/src/ui/App.d.ts.map +0 -1
  44. package/dist/src/ui/App.js +0 -164
  45. package/dist/src/ui/App.js.map +0 -1
  46. package/dist/src/ui/components/Composer.d.ts +0 -10
  47. package/dist/src/ui/components/Composer.d.ts.map +0 -1
  48. package/dist/src/ui/components/Composer.js +0 -13
  49. package/dist/src/ui/components/Composer.js.map +0 -1
  50. package/dist/src/ui/components/Header.d.ts +0 -7
  51. package/dist/src/ui/components/Header.d.ts.map +0 -1
  52. package/dist/src/ui/components/Header.js +0 -7
  53. package/dist/src/ui/components/Header.js.map +0 -1
  54. package/dist/src/ui/components/Message.d.ts +0 -12
  55. package/dist/src/ui/components/Message.d.ts.map +0 -1
  56. package/dist/src/ui/components/Message.js +0 -21
  57. package/dist/src/ui/components/Message.js.map +0 -1
  58. package/dist/src/ui/components/MessageList.d.ts +0 -9
  59. package/dist/src/ui/components/MessageList.d.ts.map +0 -1
  60. package/dist/src/ui/components/MessageList.js +0 -18
  61. package/dist/src/ui/components/MessageList.js.map +0 -1
  62. package/dist/src/ui/components/Spinner.d.ts +0 -6
  63. package/dist/src/ui/components/Spinner.d.ts.map +0 -1
  64. package/dist/src/ui/components/Spinner.js +0 -7
  65. package/dist/src/ui/components/Spinner.js.map +0 -1
  66. package/dist/src/ui/components/StatusBar.d.ts +0 -11
  67. package/dist/src/ui/components/StatusBar.d.ts.map +0 -1
  68. package/dist/src/ui/components/StatusBar.js +0 -7
  69. package/dist/src/ui/components/StatusBar.js.map +0 -1
  70. package/dist/src/ui/components/index.d.ts +0 -7
  71. package/dist/src/ui/components/index.d.ts.map +0 -1
  72. package/dist/src/ui/components/index.js +0 -7
  73. package/dist/src/ui/components/index.js.map +0 -1
  74. package/dist/src/validation/error-formatter.d.ts +0 -21
  75. package/dist/src/validation/error-formatter.d.ts.map +0 -1
  76. package/dist/src/validation/error-formatter.js +0 -98
  77. package/dist/src/validation/error-formatter.js.map +0 -1
  78. package/dist/src/validation/index.d.ts +0 -10
  79. package/dist/src/validation/index.d.ts.map +0 -1
  80. package/dist/src/validation/index.js +0 -10
  81. package/dist/src/validation/index.js.map +0 -1
  82. package/dist/src/validation/json-validator.d.ts +0 -25
  83. package/dist/src/validation/json-validator.d.ts.map +0 -1
  84. package/dist/src/validation/json-validator.js +0 -173
  85. package/dist/src/validation/json-validator.js.map +0 -1
  86. package/dist/src/validation/schema.d.ts +0 -353
  87. package/dist/src/validation/schema.d.ts.map +0 -1
  88. package/dist/src/validation/schema.js +0 -57
  89. package/dist/src/validation/schema.js.map +0 -1
  90. package/dist/src/validation/suggestions.d.ts +0 -25
  91. package/dist/src/validation/suggestions.d.ts.map +0 -1
  92. package/dist/src/validation/suggestions.js +0 -144
  93. package/dist/src/validation/suggestions.js.map +0 -1
  94. package/dist/src/validation/types.d.ts +0 -40
  95. package/dist/src/validation/types.d.ts.map +0 -1
  96. package/dist/src/validation/types.js +0 -5
  97. package/dist/src/validation/types.js.map +0 -1
  98. package/dist/src/validation/yaml-validator.d.ts +0 -25
  99. package/dist/src/validation/yaml-validator.d.ts.map +0 -1
  100. package/dist/src/validation/yaml-validator.js +0 -177
  101. package/dist/src/validation/yaml-validator.js.map +0 -1
@@ -70,29 +70,38 @@ It is just hoarding goods
70
70
 
71
71
  写脚本时的判断:
72
72
 
73
- **保留率目标 60%**:成片字数 / 原片字数(从 proposal 顶部统计或粗算)≥ 0.6。开拍 app 实证参考值 ~65%。低于 50% 必然意味着删多了内容(详见 [P0 spec](https://github.com/Optima-Chat/video-edit-skill-spec/blob/main/docs/spec/P0-content-preservation.md))。
73
+ **你的唯一任务:识别 NG 重拍 + 完全无意义填充语,删掉。其它一律保留。**
74
74
 
75
- **三类句子默认保留**(只在明确 NG 重拍时才删):
76
- 1. **钩子条件句**:`如果你...`、`还在...的同学们`、`没有...的`、`想...不知道...的`
77
- 2. **背景/限定前缀**:`在 X 做`、`做了 N 年的`、`我们...的`(交代说话人/卖点的铺垫)
78
- 3. **重申/落地句**:核心卖点的二次出现,**判别启发**(关键,区分"重申要留" vs "NG 要删"):
79
- - 换了角度? 地理 → 产品形态 → 操作步骤 / 实例 → 概念 → 是 → **留**
80
- - 加了新信息? 新数字 / 新案例 / 新时间 → 是 → **留**
81
- - 完全等价、只是措辞不同?(如"我做这个挺久了" / "做了三四年了")→ 否 → **算 NG 重拍,删一遍**
75
+ > ⚠️ 这条规则 2026-05-08 重写过(之前是"保留率 ≥ 60% + 三类必留 + 两类才删"):
76
+ >
77
+ > 实证显示百分比硬规则不工作 LLM 心算字数飘 + 用户感觉"删多了"的真实原因是误删了非 NG 的内容句。改成**只删两类,边界明确**,不再设字数门槛。**卡顿/停顿由工具阈值控制**(下方 smart-cut 已放宽),不是 prompt 层判断。
82
78
 
83
- **两类才删**:
84
- 1. **完全填充语**:`嗯`/`啊`/`呃`/`这个`/`那个`/`然后`,且单独成句、上下文无意义
85
- 2. **明确 NG 重拍**:同一句话出现 take A 和 take B(措辞可能不同但信息等价),选信息更全的留
79
+ **只删两类**(明确边界 + 反例):
86
80
 
87
- **注**:上述"必留三类"中的任一句,若 `smart-cut` / `review` `HARD: repeated-content`,**优先信任 review 的判断**(它是字面重复检测,能发现你判断不到的语义级重复)。处理:从被标重复的两句里删信息密度较低的那句,再跑 review 验证;如果删完后保留率 < 50%,**回头从"两类才删"里加回内容**(钩子/背景前缀),不是再硬塞重申句。
81
+ 1. **NG 重拍** = whisper 转写中**前后字面相同的字串**(2+ 字)出现两次。通常因为主播照稿子念时卡顿,然后从前面几个字重念。
82
+ - ✅ 删:转写得 `我们在我们在做跨境电商` → 删一份 `我们在`(留 `我们在做跨境电商`)
83
+ - ✅ 删:转写得 `批量打爆批量打爆你的店铺` → 删一份 `批量打爆`
84
+ - ✅ 删:转写得 `如果你想如果你想做店铺` → 删一份 `如果你想`
85
+ - **判定标准:字面相同字串 ≥ 2 字**(不是同义,是字面一致)
86
+ - 工具(`smart-cut HARD repeated-content`)会自动检测 4+ 字字面重复并阻断,你也可以预先在 cut_proposal 里看相邻 phrase 文本扫一眼
88
87
 
89
- **通用约束**:
90
- - **中文必须用原文措辞**——不要润色或改写,否则匹配不上
91
- - **每行 10 个汉字**——超过会显示挤、可能溢出视频边界
92
- - **`**关键词**` 标记 1-2 个**:挑能传达这句"重点信息"的实词(名词/动词),不要标助词、口头禅;短语里没明显重点就 0 个标记
93
- - **英文翻译要地道、口语化**——给海外用户看的,不是直译。短句即可,可省略主语。
88
+ **以下不算 NG,默认保留**:
89
+ - **同义不同字**(如 `我做这个挺久了` / `做了三四年了`)— 字面不重复,留两个 OR 选措辞流畅那个,**不强制删**
90
+ - **同事实换措辞强调**(如 `日发四万单` + 后段 `我们日均出货四万`)— 字面不重复,留措辞好的就行,不强制删
91
+ - **同概念不同角度**(如 `海外货盘` + `一件代发`)— 信息有增量,**两个都留**
92
+ - 关键启发:**LLM 不可靠地判断"同义",但可靠地判断"字面相同"。所以 NG 严格收窄到字面级**
93
+
94
+ 2. **完全无意义填充语**:`嗯`/`啊`/`呃` 单字**独立成短语**(不嵌在句中)。嵌在句中作为停顿语气词的**不删**。
94
95
 
95
- **写完前自检**:sum(所有保留行字数) ≥ 原片字数 × 0.6,不达标重新审视删除决策——绝大多数情况问题在于"两类才删"的判断把内容句也按填充语丢了,回头加回钩子/重申/引导句。
96
+ **其它一律保留**:钩子条件句、背景前缀、重申/铺垫、引导词、CTA、即使你觉得"不那么核心"的句子。**不确定就留**。
97
+
98
+ **卡顿/短停顿/词尾喘气由 smart-cut 工具自动处理**(silencedetect + RMS 软停顿 + 残留验证三层),**不是你的工作**。短停顿(< 0.30s)是自然语流,工具会保留;长停顿才删。
99
+
100
+ **通用约束**(写法层):
101
+ - **中文必须用原文措辞**——不要润色或改写,否则匹配不上
102
+ - **每行 ≤ 10 个汉字**——超过会显示挤、可能溢出视频边界
103
+ - **`**关键词**` 标记 1-2 个**:挑能传达这句"重点信息"的实词(名词/动词),不要标助词、口头禅;短语里没明显重点就 0 个标记
104
+ - **英文翻译要地道、口语化**——给海外用户看的,不是直译。短句即可,可省略主语。
96
105
 
97
106
  **写完后必做的自查(保存前)**:把 final_script 当成一段**连续口播稿**通读一遍——不是一行行检查,是**整体读**。问自己:
98
107
 
@@ -163,26 +172,27 @@ video-edit smart-cut <video>
163
172
 
164
173
  ## 写脚本的心法
165
174
 
166
- **先算账**:读完 proposal 后记下原片字数 N(精度 ±10% 够用)。**目标成片字数 M ≥ 0.6 × N**。
175
+ proposal 时**逐 phrase 判断**(简化决策树):
167
176
 
168
- proposal 时**逐 phrase 判断**:
169
- 1. 这句是 [钩子条件 / 背景前缀 / 重申落地] 之一吗?是 → **必留**(不要凭"听起来不那么核心"就删)
170
- 2. 这句是孤立填充语?(`嗯`/`啊`/`这个` 单成句无意义)→ 跳过
171
- 3. 这句是明确 NG 重拍的较差版?(同一意思 take A 和 take B 选其一)→ 跳过较差那遍
172
- 4. 不属于上述任一类 → **默认留**(不确定就留,不要默认删)
177
+ 1. 这句是 NG 重拍?(口误/吞字后当场重说同一句)→ 删较差那遍
178
+ 2. 这句是孤立 `嗯/啊/呃` 单字独立短语?→ 跳过
179
+ 3. 其它(包括钩子/背景/重申/引导/听起来"不太核心"的句子)→ **保留**
173
180
 
174
- 最后校验 sum(所有保留行字数) ≥ M。不达标 → 优先回退第 2、3 步的"跳过"决策,把误删的内容句加回来。
181
+ 不算字数,不设比例。**疑则留**。
175
182
 
176
- **关键纪律 1**:脚本里的字**必须**来自原始转写——直接复制 proposal 里的 phrase 文本最稳。
177
- 你想怎么润色都不行(系统按字符匹配,改了字就匹不上)。
183
+ **关键纪律 1**:脚本里的字**必须**来自原始转写——直接复制 proposal 里的 phrase 文本最稳。
184
+ 你想怎么润色都不行(系统按字符匹配,改了字就匹不上)。
178
185
 
179
- **关键纪律 2**:**追求"内容连贯且信息密度高",宁可保守**。
186
+ **关键纪律 2**:**只识别 NG,卡顿交给工具**。你不要在 prompt 层做"内容是不是太长" / "保留率够不够"的判断 — 那是工具阈值的事,smart-cut 会自动删卡顿/短停顿/喘气。
180
187
 
181
- > ⚠️ 这条纪律 2026-05-07 反转过(之前是"宁可激进"):
188
+ > ⚠️ 这条纪律 2026-05-08 重写过(经历两次反转):
189
+ > - 2026-05-07 之前:"宁可激进删,删多了用户能加回来"
190
+ > - 2026-05-07:反转为"宁可保守 + 60% 保留率",理由是开拍对比发现我们删多了内容(钩子/重申被删)
191
+ > - 2026-05-08:再次重写为"只识别 NG,其它全留",理由是 60% 硬规则 LLM 心算飘 + 工具阈值同步放宽,prompt 层不需要数字约束
182
192
  >
183
- > 实证([2026-05-07 开拍对比 finding](https://github.com/Optima-Chat/video-edit-skill-spec/blob/main/docs/findings/2026-05-07-kaipai-comparison.md))显示我们成片每对都比开拍短 4.7-5.2s,丢失的都是钩子/重申/引导句。技术指标(残留卡顿/画面跳变)我们已全面超过开拍,但用户体感"卡顿"反而是我们这边的胜场——因为**真正的"卡顿感"是删了一句话后前后两句接不上的语义断裂**。
193
+ > 现在的模型:**agent 只判断 NG;静音/卡顿由 smart-cut 工具阈值控制**(`DELETE_SILENCE_MIN=0.30s`/`RESIDUAL_PAUSE_MAX=0.50s`)。两层职责不再交叉。
184
194
  >
185
- > 所以删多了**比**留多了更伤体验。详见 [P0 spec](https://github.com/Optima-Chat/video-edit-skill-spec/blob/main/docs/spec/P0-content-preservation.md) 和 [ADR](https://github.com/Optima-Chat/video-edit-skill-spec/blob/main/docs/decisions/2026-05-07-stop-pause-tightening.md)。
195
+ > 详见 [P0 spec](https://github.com/Optima-Chat/video-edit-skill-spec/blob/main/docs/spec/P0-content-preservation.md) 和 [ADR](https://github.com/Optima-Chat/video-edit-skill-spec/blob/main/docs/decisions/2026-05-07-stop-pause-tightening.md)。
186
196
 
187
197
  ## 交付怎么说
188
198
 
File without changes
File without changes
File without changes
File without changes
package/dist/bin/gen.js CHANGED
File without changes
File without changes
File without changes
File without changes
File without changes
package/dist/bin/scout.js CHANGED
File without changes
File without changes
File without changes
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@optima-chat/optima-agent",
3
- "version": "0.9.44",
3
+ "version": "0.9.46",
4
4
  "description": "基于 Claude Agent SDK 的电商运营 AI 助手",
5
5
  "type": "module",
6
6
  "main": "dist/src/index.js",
@@ -36,6 +36,17 @@
36
36
  ],
37
37
  "author": "Optima Chat",
38
38
  "license": "MIT",
39
+ "scripts": {
40
+ "build": "npm run sync:kb-skills && tsc",
41
+ "dev": "tsx watch src/index.ts",
42
+ "start": "node dist/src/index.js",
43
+ "typecheck": "tsc --noEmit",
44
+ "test": "vitest run",
45
+ "test:watch": "vitest",
46
+ "optima": "tsx bin/optima.ts",
47
+ "prepublishOnly": "npm run build",
48
+ "sync:kb-skills": "tsx bin/sync-kb-skills.ts"
49
+ },
39
50
  "dependencies": {
40
51
  "@anthropic-ai/claude-agent-sdk": "^0.2.63",
41
52
  "@optima-chat/ads-cli": "latest",
@@ -64,15 +75,5 @@
64
75
  },
65
76
  "engines": {
66
77
  "node": ">=18.0.0"
67
- },
68
- "scripts": {
69
- "build": "npm run sync:kb-skills && tsc",
70
- "dev": "tsx watch src/index.ts",
71
- "start": "node dist/src/index.js",
72
- "typecheck": "tsc --noEmit",
73
- "test": "vitest run",
74
- "test:watch": "vitest",
75
- "optima": "tsx bin/optima.ts",
76
- "sync:kb-skills": "tsx bin/sync-kb-skills.ts"
77
78
  }
78
79
  }
@@ -1,166 +0,0 @@
1
- {
2
- "permissions": {
3
- "allow": [
4
- "Bash(gh api:*)",
5
- "WebFetch(domain:platform.claude.com)",
6
- "Bash(git init:*)",
7
- "Bash(mkdir:*)",
8
- "Bash(npm run typecheck:*)",
9
- "Bash(npm view:*)",
10
- "WebSearch",
11
- "Bash(commerce --help)",
12
- "Bash(done)",
13
- "Bash(commerce product:*)",
14
- "Bash(commerce order:*)",
15
- "Bash(commerce i18n:*)",
16
- "Bash(google-ads:*)",
17
- "Bash(scout --help:*)",
18
- "Bash(tree:*)",
19
- "Bash(cloc:*)",
20
- "Bash(npm run build:*)",
21
- "Bash(git restore:*)",
22
- "Bash(gh repo view:*)",
23
- "Bash(mv:*)",
24
- "Bash(rmdir:*)",
25
- "Bash(git add:*)",
26
- "Bash(git commit:*)",
27
- "Bash(git push)",
28
- "Bash(timeout 5 npm run optima:*)",
29
- "Bash(npm install:*)",
30
- "Bash(cat:*)",
31
- "Bash(gh issue create:*)",
32
- "Bash(npx tsx:*)",
33
- "Bash(timeout 30 npx tsx:*)",
34
- "Bash(git push origin feature/ask-user-question)",
35
- "Bash(node:*)",
36
- "Bash(npm version:*)",
37
- "Bash(git push:*)",
38
- "Bash(npm publish:*)",
39
- "Bash(pkill:*)",
40
- "Bash(git -C /Users/verypro/optima-agent log --oneline --all -- \".claude/\")",
41
- "Bash(wc:*)",
42
- "Bash(grep:*)",
43
- "Bash(find:*)",
44
- "Bash(commerce collection --help:*)",
45
- "Bash(commerce collection update --help:*)",
46
- "Bash(commerce collection set-cover:*)",
47
- "Bash(commerce collection get --help:*)",
48
- "Bash(commerce collection list --help:*)",
49
- "Bash(commerce collection create --help:*)",
50
- "Bash(commerce collection remove-products:*)",
51
- "Bash(commerce collection list-products:*)",
52
- "Bash(commerce --version:*)",
53
- "Bash(bi-cli --version:*)",
54
- "Bash(commerce homepage create --help:*)",
55
- "Bash(commerce homepage reorder --help:*)",
56
- "Bash(commerce homepage delete --help:*)",
57
- "Bash(commerce homepage update-images:*)",
58
- "Bash(commerce homepage update-collections:*)",
59
- "Bash(commerce homepage update-target:*)",
60
- "Bash(commerce homepage switch-template:*)",
61
- "Bash(commerce inventory:*)",
62
- "Bash(commerce merchant:*)",
63
- "Bash(commerce review:*)",
64
- "Bash(commerce product-page:*)",
65
- "Bash(bi-cli:*)",
66
- "Bash(comfy:*)",
67
- "Bash(scout search:*)",
68
- "Bash(scout product:*)",
69
- "Bash(commerce homepage create-collections:*)",
70
- "Bash(commerce homepage create-featured:*)",
71
- "Bash(commerce homepage create-collection-products:*)",
72
- "Bash(commerce homepage create-banner:*)",
73
- "Bash(xargs -I {} sh -c 'echo \"\"\"\"=== {} ===\"\"\"\"; head -3 /Users/verypro/optima-agent/.claude/skills/{}/SKILL.md | grep \"\"\"\"name:\"\"\"\"')",
74
- "Bash(ls:*)",
75
- "Bash(gh issue view:*)",
76
- "Bash(npx markdownlint-cli:*)",
77
- "Bash(chmod:*)",
78
- "Bash(npm whoami:*)",
79
- "Bash(tsx test-scripts/test-headless-progress.ts:*)",
80
- "Bash(DEBUG_STREAM=1 node dist/bin/optima.js:*)",
81
- "Bash(git describe:*)",
82
- "WebFetch(domain:github.com)",
83
- "Bash(./scripts/test-headless.sh:*)",
84
- "Bash(./scripts/test-headless-simple.sh:*)",
85
- "Bash(env)",
86
- "Bash(gh pr list:*)",
87
- "Bash(gh pr view:*)",
88
- "Bash(gh pr diff:*)",
89
- "Bash(optima --version:*)",
90
- "Bash(optima agent headless:*)",
91
- "Bash(optima headless:*)",
92
- "Bash(/Users/verypro/optima-agent/scripts/test-headless.sh:*)",
93
- "Bash(/Users/verypro/optima-agent/scripts/test-headless-simple.sh:*)",
94
- "Bash(tee:*)",
95
- "Bash(CONV_ID=\"conv-1\":*)",
96
- "Bash(echo:*)",
97
- "Bash(scout tiktok trending --help:*)",
98
- "Bash(scout tiktok trending:*)",
99
- "Bash(git checkout:*)",
100
- "Bash(npm test:*)",
101
- "Bash(git tag:*)",
102
- "Bash(/private/tmp/claude/-Users-verypro-optima-agent/68a9ac2c-def2-44e1-b42b-e53bd9022ab6/scratchpad/test-canUseTool.sh)",
103
- "Bash(optima --help:*)",
104
- "Bash(npx @optima-chat/ads-cli:*)",
105
- "Bash(head:*)",
106
- "Bash(git pull:*)",
107
- "Bash(pnpm build:*)",
108
- "Skill(read-code)",
109
- "Bash(npm run cli:*)",
110
- "Bash(scout:*)",
111
- "WebFetch(domain:docs.scrapecreators.com)",
112
- "WebFetch(domain:scrapecreators.com)",
113
- "Bash(gh auth status:*)",
114
- "Bash(optima-agent:*)",
115
- "Bash(python3:*)",
116
- "Bash(python3 -c \" import sys content = sys.stdin.read\\(\\) # Find flushMessageQueueSync idx = content.find\\(''flushMessageQueueSync''\\) # Get context around it lines = content.split\\(''\\\\n''\\) for i, line in enumerate\\(lines\\): if ''flushMessageQueueSync'' in line and ''private'' in line: for j in range\\(i, min\\(i+20, len\\(lines\\)\\)\\): print\\(f''{j+1}: {lines[j]}''\\) break \")",
117
- "Bash(optima:*)",
118
- "WebFetch(domain:www.npmjs.com)",
119
- "WebFetch(domain:registry.npmjs.org)",
120
- "WebFetch(domain:zod.dev)",
121
- "Bash(npm ls:*)",
122
- "Bash(NODE_DEBUG=child_process npx tsx:*)",
123
- "Bash(DEBUG_CLAUDE_AGENT_SDK=1 npx tsx:*)",
124
- "Bash(CLAUDECODE= npx tsx:*)",
125
- "Bash(env:*)",
126
- "Bash(gh release:*)",
127
- "Bash(npm info:*)",
128
- "Bash(gh run:*)",
129
- "Bash(gtimeout 90:*)",
130
- "Bash(sentinel:*)",
131
- "Bash(gh pr:*)",
132
- "Bash(git fetch:*)",
133
- "Bash(git log:*)",
134
- "Bash(npm bin:*)",
135
- "Bash(git status:*)",
136
- "Bash(browser-cli --version && browser-cli --help)",
137
- "Bash(browser-cli status:*)",
138
- "Bash(browser-cli launch:*)",
139
- "Bash(browser-cli screenshot:*)",
140
- "Bash(browser-cli --version)",
141
- "Bash(browser-cli close:*)",
142
- "Bash(npm update:*)",
143
- "Bash(node -e \"console.log\\(require\\('./node_modules/@optima-chat/browser-cli/package.json'\\).version\\)\")",
144
- "WebFetch(domain:raw.githubusercontent.com)",
145
- "Bash(aws ecs:*)",
146
- "Bash(aws ecr:*)",
147
- "Bash(gh search:*)",
148
- "Bash(npx tsc:*)",
149
- "Bash(find /Users/verypro/optima-agent -path */node_modules -prune -o -type f \\\\\\(-name *comfy* -o -name *gen* \\\\\\) -print)",
150
- "Bash(export PATH=\"/usr/local/bin:$PATH\")",
151
- "Bash(pnpm add:*)",
152
- "Bash(cp -r ~/optima-agent/test/skills/kol-outreach/fixtures/one-active-campaign ~/optima-agent/test/skills/kol-outreach/fixtures/max-rounds-hit)",
153
- "Bash(cp -r ~/optima-agent/test/skills/kol-outreach/fixtures/one-active-campaign ~/optima-agent/test/skills/kol-outreach/fixtures/budget-almost-spent)",
154
- "Bash(cp -r ~/optima-agent/test/skills/kol-outreach/fixtures/one-active-campaign ~/optima-agent/test/skills/kol-outreach/fixtures/two-active-campaigns)",
155
- "Bash(cp -r ~/optima-agent/test/skills/kol-outreach/fixtures/one-active-campaign ~/optima-agent/test/skills/kol-outreach/fixtures/brand-only)",
156
- "Bash(pnpm vitest:*)",
157
- "Bash(pnpm test:*)",
158
- "Bash(pnpm --filter @optima-scout/backend test --reporter=verbose backend/src/routes/outreach/__tests__/lock.test.ts backend/src/routes/outreach/__tests__/inbound.test.ts)",
159
- "Bash(npx vitest:*)",
160
- "Bash(DATABASE_URL=postgres://optima_scout:optima_scout_dev@localhost:7293/optima_scout pnpm --filter @optima-scout/backend test)",
161
- "Bash(pnpm --filter @optima-scout/backend exec vitest run src/routes/outreach/__tests__/inbound.test.ts)"
162
- ],
163
- "deny": [],
164
- "ask": []
165
- }
166
- }
@@ -1,32 +0,0 @@
1
- # 数据索引
2
-
3
- 本文件记录已收集的所有数据,agent 分析前先读此文件了解数据全貌。
4
-
5
- ## 市场搜索
6
-
7
- | 关键词 | 时间 | 结果数 | 数据文件 |
8
- |--------|------|--------|---------|
9
-
10
- ## 社交/趋势
11
-
12
- | 平台 | 关键词 | 时间 | 数据文件 |
13
- |------|--------|------|---------|
14
-
15
- ## 竞品数据
16
-
17
- | ASIN | 产品名 | product | reviews | keepa | 上次更新 |
18
- |------|--------|---------|---------|-------|---------|
19
-
20
- ## 供应商数据
21
-
22
- | 搜索方式 | 关键词/图片 | 时间 | 结果数 | 数据文件 |
23
- |---------|-----------|------|--------|---------|
24
-
25
- ## 卖家精灵数据(关键词/市场/广告)
26
-
27
- | 类型 | ASIN/关键词 | 时间 | 数据文件 |
28
- |------|-----------|------|---------|
29
-
30
- ## 数据关系
31
-
32
- {记录数据之间的关联,如:哪个供应商对应哪个竞品,哪些 ASIN 来自哪次搜索}
@@ -1,4 +0,0 @@
1
- # 操作日志
2
-
3
- 按时间倒序记录每次操作,便于跨会话上下文恢复。新会话开始时先读此文件了解上次进展。
4
-
@@ -1,113 +0,0 @@
1
- # {产品名称}
2
-
3
- ## 基本信息
4
- - 创建时间: {date}
5
- - 当前阶段: 概念 | 计划 | 开发 | 验证 | 发布 | 生命周期
6
- - 状态: 进行中 | 暂停 | 已决策(Go) | 已决策(No-Go)
7
-
8
- ## 研究目标
9
- {为什么研究这个产品?初始假设是什么?}
10
-
11
- ## SPAN 定位
12
- - 市场吸引力: {高/中/低}(规模、增长率、利润潜力)
13
- - 竞争地位: {强/中/弱}(差异化能力、资金、供应链)
14
- - 战略象限: 投资 | 选择性投入 | 收割 | 退出
15
-
16
- ## 阶段进度
17
-
18
- ### 概念阶段(产品立项书)
19
- - [ ] 趋势扫描(TikTok/Reddit/Twitter/Web Search 发现热度信号)
20
- - [ ] Amazon 市场全景扫描(多关键词 ×50 条 + 竞品补充,覆盖 30+ 竞品)
21
- - [ ] 子品类聚类(识别 5+ 子品类,标注各自规模和竞争度)
22
- - [ ] 需求验证(精确月搜索量、购买量、转化率)
23
- - [ ] 竞争格局(品牌集中度、卖家国籍分布、各子品类竞争强度)
24
- - [ ] SPAN 初步定位(市场吸引力 + 竞争地位)
25
- - [ ] 初步利润估算(毛利率 > PROFILE 最低毛利率?)
26
- - [ ] 供应端初探(1688 参考价,≥3 家供应商报价)
27
- - [ ] IP/合规初筛(商标、专利、认证要求)
28
- - [ ] **数据完整性检查通过**(10 项全部通过)
29
- - **CDCP Gate**: 市场够大?利润够高?竞争可打?无 IP 风险?
30
-
31
- ### 计划阶段(商业计划书)
32
- - [ ] 头部竞品深挖(5-8 个,含产品详情 + 流量关键词 + Listing 能力矩阵)
33
- - [ ] 历史销量与季节性分析(14 个月销量数据,识别波峰波谷)
34
- - [ ] $APPEALS 竞品评分(TOP 5 竞品 8 维度打分)
35
- - [ ] 用户痛点挖掘(差评聚类 → 差异化方向)
36
- - [ ] 历史趋势分析(Keepa BSR/价格/卖家数 → 生命周期判断)
37
- - [ ] 差异化策略(基于 $APPEALS 缺口确定产品定位)
38
- - [ ] FAN 财务分析(单元经济、盈亏平衡、场景分析、回本周期)
39
- - [ ] 供应商初步接触(3-5 家询价、MOQ、交期)
40
- - [ ] 风险评估(竞争加剧、价格战、季节性、合规变化)
41
- - [ ] **数据完整性检查通过**(13 项全部通过)
42
- - **PDCP Gate**: 有明确差异化?供应商可行?商业计划书成立?
43
-
44
- ### 开发阶段(产品实现)
45
- - [ ] 供应商评估与选定(质量/交期/配合度/定制能力)
46
- - [ ] 成本模型定稿(原材料+制造+包装+运费+关税+FBA prep)
47
- - [ ] 产品规格确认(材料、尺寸、包装、认证)
48
- - [ ] 样品迭代(至少 2 轮打样确认)
49
- - [ ] 包装设计(品牌包装、FBA 尺寸优化)
50
- - [ ] Listing 素材准备(图片、A+、视频)
51
- - **开发 Gate**: 样品达标?成本在预算内?Listing 就绪?
52
-
53
- ### 验证阶段(上线验证)
54
- - [ ] 第三方质检(AQL 抽检)
55
- - [ ] 小批量测试(50-100 件,验证转化率和退货率)
56
- - [ ] Listing A/B 测试(主图、标题变体)
57
- - [ ] PPC 测试(验证 ACoS 假设)
58
- - [ ] 首批评论分析(前 10-20 条反馈)
59
- - **ADCP Gate**: 质量过关?转化达预期?ACoS 可控?
60
-
61
- ### 发布阶段
62
- - [ ] 正式库存到仓
63
- - [ ] Launch 推广策略执行
64
- - [ ] 评论加速计划
65
- - [ ] 竞品动态监控
66
-
67
- ### 生命周期
68
- - [ ] 月度复盘(BSR/评论/竞品/利润 vs 商业计划书)
69
- - [ ] 变体扩展评估
70
- - [ ] EOL 决策(何时退出)
71
-
72
- ## $APPEALS 评分卡
73
-
74
- | 维度 | 本品(目标)| 竞品A | 竞品B | 竞品C | 差距/机会 |
75
- |------|-----------|-------|-------|-------|----------|
76
- | $ 价格 | | | | | |
77
- | A 可获得性 | | | | | |
78
- | P 包装 | | | | | |
79
- | P 性能 | | | | | |
80
- | E 易用性 | | | | | |
81
- | A 保证 | | | | | |
82
- | L 生命周期成本 | | | | | |
83
- | S 社会接受度 | | | | | |
84
-
85
- ## FAN 财务模型
86
-
87
- | 项目 | 数值 | 备注 |
88
- |------|------|------|
89
- | 售价 | | |
90
- | COGS(1688 采购) | | |
91
- | 头程运费 + 关税 | | |
92
- | FBA 费用 | | |
93
- | **毛利** | | 售价 - COGS - 运费关税 - FBA |
94
- | **毛利率** | | 概念阶段判断用 |
95
- | PPC 分摊/单位 | | |
96
- | 退货损耗 | | |
97
- | 其他费用 | | |
98
- | **单位净利润** | | 毛利 - PPC - 退货 - 其他 |
99
- | **净利率** | | 计划阶段判断用 |
100
- | 盈亏平衡(月销量) | | |
101
- | 首批投入 | | |
102
- | 回本周期 | | |
103
-
104
- ## 关键发现
105
- {研究过程中的重要发现,随时更新}
106
-
107
- ## 风险清单
108
- | 风险 | 影响 | 概率 | 应对 |
109
- |------|------|------|------|
110
-
111
- ## 决策记录
112
- | 日期 | Gate | 决策 | 依据 |
113
- |------|------|------|------|
@@ -1,33 +0,0 @@
1
- # 竞品分析
2
-
3
- ## TOP 竞品概览
4
-
5
- | ASIN | 产品名 | 价格 | 评分 | 评论数 | BSR | 月销估算 | 卖家类型 |
6
- |------|--------|------|------|--------|-----|---------|---------|
7
-
8
- ## $APPEALS 对比
9
-
10
- | 维度 | 行业均值 | 竞品A | 竞品B | 竞品C | 缺口机会 |
11
- |------|---------|-------|-------|-------|---------|
12
- | $ 价格 | | | | | |
13
- | A 可获得性 | | | | | |
14
- | P 包装 | | | | | |
15
- | P 性能 | | | | | |
16
- | E 易用性 | | | | | |
17
- | A 保证 | | | | | |
18
- | L 生命周期成本 | | | | | |
19
- | S 社会接受度 | | | | | |
20
-
21
- ## Listing 能力矩阵
22
- | ASIN | 图片数 | A+ | 视频 | Bullets 质量 | 品牌注册 | Coupon/促销 | 优化空间 |
23
- |------|--------|----|----- |------------|---------|-----------|---------|
24
-
25
- ## 季节性分析(14 个月历史销量)
26
-
27
- | ASIN | 产品名 | 波峰月份 | 波谷月份 | 旺季/淡季倍数 | 趋势方向 |
28
- |------|--------|---------|---------|-------------|---------|
29
-
30
- {基于 scout sp predict 数据,分析季节规律和最佳上架时间}
31
-
32
- ## 差异化机会总结
33
- {基于 $APPEALS 缺口 + 差评痛点 + 子品类空白,用户最在乎但竞品最弱的交叉维度}
@@ -1,32 +0,0 @@
1
- # 市场分析
2
-
3
- ## 市场概况
4
- - 估算月总销量:
5
- - 月搜索量:
6
- - 价格区间:
7
- - 主要关键词:
8
-
9
- ## 趋势信号
10
- | 来源 | 信号 | 日期 | 强度 |
11
- |------|------|------|------|
12
-
13
- ## 需求验证
14
- - 搜索量趋势:
15
- - BSR 分布:
16
- - 季节性:
17
-
18
- ## 子品类分布
19
-
20
- | 子品类 | 产品数 | 价格区间 | 头部评论数 | 增长信号 | 竞争度 |
21
- |--------|--------|---------|-----------|---------|--------|
22
-
23
- ## 竞争格局
24
- - 竞品总数:
25
- - 头部品牌:
26
- - 品牌集中度 (CR3/CR5):
27
- - 卖家国籍分布:
28
- - FBA/FBM 占比:
29
-
30
- ## SPAN 初步评分
31
- - 市场吸引力: /5
32
- - 竞争地位: /5
@@ -1,19 +0,0 @@
1
- # 用户痛点分析
2
-
3
- ## 数据来源
4
- - 分析评论数:
5
- - 覆盖产品:
6
- - 筛选条件:
7
-
8
- ## 痛点聚类
9
-
10
- | 痛点类别 | 提及频率 | 典型评论摘要 | 影响的 $APPEALS 维度 | 改进可行性 |
11
- |---------|---------|------------|-------------------|-----------|
12
-
13
- ## 好评亮点
14
-
15
- | 卖点类别 | 提及频率 | 典型评论摘要 | 对应 $APPEALS 维度 |
16
- |---------|---------|------------|-------------------|
17
-
18
- ## 差异化方向
19
- {综合痛点 + 亮点,确定产品应该在哪些维度做到极致}
@@ -1,34 +0,0 @@
1
- # 供应商分析
2
-
3
- ## 搜索结果概览
4
- - 搜索方式: 关键词 / 图片 / 两者
5
- - 供应商数量:
6
- - 价格区间:
7
-
8
- ## TOP 供应商对比
9
-
10
- | 供应商 | 价格 | MOQ | 交期 | 年限 | 类型 | 定制能力 | 综合评分 |
11
- |--------|------|-----|------|------|------|---------|---------|
12
-
13
- ## 成本测算
14
-
15
- | 项目 | 金额 | 说明 |
16
- |------|------|------|
17
- | 采购单价 | ¥ | |
18
- | 包装 | ¥ | |
19
- | 头程运费 | ¥/件 | |
20
- | 关税 | ¥/件 | |
21
- | FBA prep | ¥/件 | |
22
- | **落地成本** | ¥/件 | |
23
- | **落地成本(美元)** | $ | |
24
-
25
- ## 供应商评估矩阵
26
- | 维度 | 供应商A | 供应商B | 供应商C |
27
- |------|--------|--------|--------|
28
- | 产品质量 | | | |
29
- | MOQ 灵活性 | | | |
30
- | 交期可靠性 | | | |
31
- | 沟通配合度 | | | |
32
- | 定制能力 | | | |
33
- | 价格竞争力 | | | |
34
- | 认证资质 | | | |
@@ -1,23 +0,0 @@
1
- # 历史趋势分析
2
-
3
- ## 数据来源
4
- - 分析产品:
5
- - 时间跨度:
6
- - 数据来源: Keepa API
7
-
8
- ## BSR 趋势
9
- | ASIN | 当前 BSR | 90天前 BSR | 趋势方向 | salesRankDrops30 | salesRankDrops90 |
10
- |------|---------|-----------|---------|-----------------|-----------------|
11
-
12
- ## 生命周期判断
13
- - 当前阶段: 增长期 | 成熟期 | 衰退期
14
- - 判断依据:
15
-
16
- ## 价格稳定性
17
- | ASIN | 当前价 | 90天最低 | 90天最高 | 价格战风险 |
18
- |------|--------|---------|---------|-----------|
19
-
20
- ## 竞争趋势
21
- - 卖家数量变化:
22
- - 新进入者:
23
- - 断货率: