@optima-chat/optima-agent 0.9.7 → 0.9.8
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.
- package/.claude/skills/.kb-skills-managed.json +9 -9
- package/.claude/skills/ads/SKILL.md +244 -244
- package/.claude/skills/ads/template/campaign/CREATIVES.md +18 -18
- package/.claude/skills/ads/template/campaign/NOTES.md +10 -10
- package/.claude/skills/ads/template/campaign/STRATEGY.md +29 -29
- package/.claude/skills/ads/template/user/ADS.md +29 -29
- package/.claude/skills/ads/template/user/LEARNINGS.md +15 -15
- package/.claude/skills/ads/template/user/PROGRESS.md +20 -20
- package/.claude/skills/ads/template/user/README.md +25 -25
- package/.claude/skills/ads/template/user/assets/.gitignore +2 -2
- package/.claude/skills/bi/SKILL.md +131 -131
- package/.claude/skills/browser/SKILL.md +201 -201
- package/.claude/skills/channels/SKILL.md +188 -188
- package/.claude/skills/collection/SKILL.md +88 -88
- package/.claude/skills/douyin/SKILL.md +408 -408
- package/.claude/skills/ffmpeg/SKILL.md +164 -164
- package/.claude/skills/gen/SKILL.md +279 -275
- package/.claude/skills/growth/SKILL.md +90 -90
- package/.claude/skills/growth/template/ACCOUNTS.md +14 -14
- package/.claude/skills/growth/template/CALENDAR.md +7 -7
- package/.claude/skills/growth/template/COMMENTS.md +7 -7
- package/.claude/skills/growth/template/GROWTH.md +37 -37
- package/.claude/skills/growth/template/PROGRESS.md +4 -4
- package/.claude/skills/growth/template/README.md +20 -20
- package/.claude/skills/growth/template/TOPICS.md +7 -7
- package/.claude/skills/homepage/SKILL.md +177 -177
- package/.claude/skills/i18n/SKILL.md +517 -517
- package/.claude/skills/ingesting-sources/SKILL.md +94 -94
- package/.claude/skills/initializing-kb/SKILL.md +117 -117
- package/.claude/skills/instagram/SKILL.md +321 -321
- package/.claude/skills/inventory/SKILL.md +328 -328
- package/.claude/skills/kol-outreach/SKILL.md +232 -232
- package/.claude/skills/kol-outreach/template/campaign/CONFIG.md +60 -60
- package/.claude/skills/kol-outreach/template/campaign/KOLS.md +6 -6
- package/.claude/skills/kol-outreach/template/campaign/PROGRESS.md +3 -3
- package/.claude/skills/kol-outreach/template/campaign/TEMPLATES.md +88 -88
- package/.claude/skills/kol-outreach/template/merchant/BRAND.md +36 -36
- package/.claude/skills/kol-outreach/template/merchant/CAMPAIGNS.md +6 -6
- package/.claude/skills/kol-outreach/template/merchant/MERCHANT_LIMITS.md +16 -16
- package/.claude/skills/kol-outreach/template/merchant/PROGRESS.md +4 -4
- package/.claude/skills/kol-outreach/template/merchant/README.md +20 -20
- package/.claude/skills/linting-the-wiki/SKILL.md +68 -68
- package/.claude/skills/logistics/SKILL.md +180 -180
- package/.claude/skills/markdown-pdf/SKILL.md +72 -72
- package/.claude/skills/merchant/SKILL.md +110 -110
- package/.claude/skills/multigrid-poster/SKILL.md +192 -0
- package/.claude/skills/multigrid-poster/layouts/2x2.json +34 -0
- package/.claude/skills/multigrid-poster/layouts/3x3.json +43 -0
- package/.claude/skills/multigrid-poster/scripts/compose.py +116 -0
- package/.claude/skills/multigrid-poster/scripts/placeholder.png +0 -0
- package/.claude/skills/multigrid-poster/shared/fonts/MaShanZheng-Regular.ttf +0 -0
- package/.claude/skills/order/SKILL.md +452 -452
- package/.claude/skills/product/SKILL.md +379 -379
- package/.claude/skills/product-page/SKILL.md +106 -106
- package/.claude/skills/querying-the-wiki/SKILL.md +59 -59
- package/.claude/skills/reddit/SKILL.md +277 -277
- package/.claude/skills/review/SKILL.md +321 -321
- package/.claude/skills/scout/SKILL.md +462 -462
- package/.claude/skills/sentinel/SKILL.md +281 -281
- package/.claude/skills/shein/SKILL.md +246 -246
- package/.claude/skills/shipping/SKILL.md +200 -200
- package/.claude/skills/shop-content/SKILL.md +101 -101
- package/.claude/skills/shopify/SKILL.md +282 -282
- package/.claude/skills/skillify/SKILL.md +114 -114
- package/.claude/skills/taobao/SKILL.md +238 -238
- package/.claude/skills/tiktok/SKILL.md +381 -381
- package/.claude/skills/twitter/SKILL.md +302 -302
- package/.claude/skills/updating-related-pages/SKILL.md +65 -65
- package/.claude/skills/video-edit/SKILL.md +143 -143
- package/.claude/skills/video-gen/SKILL.md +548 -571
- package/.claude/skills/video-gen/templates/INDEX.md +78 -78
- package/.claude/skills/video-gen/templates/before-after-beauty.md +183 -183
- package/.claude/skills/video-gen/templates/drama-fmcg.md +183 -183
- package/.claude/skills/video-gen/templates/kol-reaction-food.md +193 -193
- package/.claude/skills/video-gen/templates/multi-point-apparel.md +185 -185
- package/.claude/skills/video-gen/templates/pain-solution-home.md +184 -184
- package/.claude/skills/video-gen/templates/pdp-360-showcase.md +189 -189
- package/.claude/skills/video-gen/templates/pdp-feature-highlight.md +182 -182
- package/.claude/skills/video-gen/templates/scene-digital.md +183 -183
- package/.claude/skills/wechat/SKILL.md +174 -174
- package/.claude/skills/xhs/SKILL.md +170 -170
- package/README.md +276 -276
- package/dist/bin/optima.js +26 -26
- package/dist/bin/serve.js +23 -23
- package/dist/src/agent.js +4 -4
- package/dist/src/system-prompt.js +169 -169
- package/dist/src/tools/memory.js +10 -10
- package/dist/src/ui/headless.js +7 -7
- package/package.json +79 -79
package/dist/src/agent.js
CHANGED
|
@@ -151,10 +151,10 @@ export class OptimaAgent {
|
|
|
151
151
|
buildSystemPrompt() {
|
|
152
152
|
const parts = [getSystemPrompt()];
|
|
153
153
|
// 添加用户工作目录信息
|
|
154
|
-
parts.push(`## 用户工作目录
|
|
155
|
-
|
|
156
|
-
当前用户工作目录:${this.userCwd}
|
|
157
|
-
|
|
154
|
+
parts.push(`## 用户工作目录
|
|
155
|
+
|
|
156
|
+
当前用户工作目录:${this.userCwd}
|
|
157
|
+
|
|
158
158
|
**重要**:所有生成的文件(图片、导出文件等)必须保存到用户工作目录,不要保存到其他位置。`);
|
|
159
159
|
// 项目级 OPTIMA.md
|
|
160
160
|
if (this.projectPrompt) {
|
|
@@ -7,175 +7,175 @@ const sessionDate = new Date().toLocaleDateString('zh-CN', {
|
|
|
7
7
|
weekday: 'long',
|
|
8
8
|
});
|
|
9
9
|
export function getSystemPrompt() {
|
|
10
|
-
return `
|
|
11
|
-
# Optima Agent - 电商运营 AI 助手
|
|
12
|
-
|
|
13
|
-
你是 Optima Agent,一个专业的电商运营 AI 助手。你的职责是帮助用户管理电商业务的各个方面。
|
|
14
|
-
|
|
15
|
-
**重要**:用户提到的"独立站"、"店铺"、"我的店"默认指 Optima AI 自有电商平台。如果用户明确提到 "Shopify" 或 "Shopify 店铺",则使用 shopify 技能。
|
|
16
|
-
|
|
17
|
-
## 当前环境
|
|
18
|
-
|
|
19
|
-
- **当前日期**:${sessionDate}
|
|
20
|
-
|
|
21
|
-
## 核心能力
|
|
22
|
-
|
|
23
|
-
你可以通过 Skill 工具访问以下功能模块。**当用户提出需求时,使用 Skill 工具加载对应模块获取详细用法**。
|
|
24
|
-
|
|
25
|
-
可用的 Skills:
|
|
26
|
-
|
|
27
|
-
- **merchant** - 店铺信息查询和管理
|
|
28
|
-
- **product** - 商品管理(创建、编辑、删除商品、变体管理、数字产品标记、自定义字段管理)
|
|
29
|
-
- **order** - 订单处理(发货、退款、物流追踪)
|
|
30
|
-
- **inventory** - 库存管理(**设置/更新库存必须用这个**,特别是变体库存)
|
|
31
|
-
- **i18n** - 国际化翻译管理
|
|
32
|
-
- **collection** - 商品集合管理(分组、促销专区)
|
|
33
|
-
- **homepage** - 店铺首页配置(Banner、集合展示)
|
|
34
|
-
- **product-page** - 商品详情页配置
|
|
35
|
-
- **gen** - 图像/视频/语音生成
|
|
36
|
-
- **markdown-pdf** - Markdown 转 PDF(文档导出、报告生成)
|
|
37
|
-
- **ffmpeg** - 音视频**精确操作**(截取指定时间段、压缩、格式转换、提取音频、生成缩略图、拼接)—— 仅当用户明确说具体操作时用
|
|
38
|
-
- **video-edit** - 🎬 **口播/talking-head 视频智能剪辑**(自动转写 → 删卡顿停顿/NG/废话 → 烧字幕)。**用户给已有视频说"剪一下/帮我剪辑/去卡顿/变流畅/剪短点/加字幕"等模糊指令时首选**,优先级高于 ffmpeg
|
|
39
|
-
- **ads** - Google Ads 广告投放
|
|
40
|
-
- **scout** - Amazon 选品调研
|
|
41
|
-
- **reddit** - Reddit 趋势发现与商机预判
|
|
42
|
-
- **twitter** - Twitter/X 趋势发现与社交媒体洞察
|
|
43
|
-
- **taobao** - 淘宝/天猫商品搜索与选品调研
|
|
44
|
-
- **bi** - 数据分析和报表
|
|
45
|
-
- **review** - 评价管理(审核、回复、精选)
|
|
46
|
-
- **sentinel** - 自动化监控规则管理(创建/暂停/查看规则、审批管理)
|
|
47
|
-
- **logistics** - 物流服务管理(运单查询/取消/标签、物流追踪、运费报价、地址验证)
|
|
48
|
-
- **shopify** - Shopify 店铺集成(连接店铺、商品/订单/库存/客户同步、折扣、数据分析)
|
|
49
|
-
|
|
50
|
-
**使用方式**:当用户提出具体需求时,使用 Skill 工具加载对应模块获取详细用法。
|
|
51
|
-
|
|
52
|
-
示例:
|
|
53
|
-
- 用户:"查看我的店铺信息" - 使用 Skill 工具加载 "merchant"
|
|
54
|
-
- 用户:"帮我创建一个商品" - 使用 Skill 工具加载 "product"
|
|
55
|
-
- 用户:"生成一张产品图片" - 使用 Skill 工具加载 "gen"
|
|
56
|
-
- 用户:"包裹到哪了" / "查物流" - 使用 Skill 工具加载 "order"
|
|
57
|
-
- 用户:"连接我的 Shopify 店铺" / "看看 Shopify 商品" - 使用 Skill 工具加载 "shopify"
|
|
58
|
-
- 用户:"Reddit 上什么趋势" / "看看 Reddit 上关于XX的讨论" - 使用 Skill 工具加载 "reddit"
|
|
59
|
-
- 用户:"Twitter 上什么火" / "搜一下推特上关于XX" / "看看@某人" - 使用 Skill 工具加载 "twitter"
|
|
60
|
-
- 用户:"淘宝上搜一下XX" / "天猫有什么XX" / "看看这个淘宝商品" - 使用 Skill 工具加载 "taobao"
|
|
61
|
-
|
|
62
|
-
## 工作原则
|
|
63
|
-
|
|
64
|
-
1. **先理解再行动** - 在执行操作前,确保理解用户的真实意图
|
|
65
|
-
2. **确认敏感操作** - 删除、退款等不可逆操作前先与用户确认
|
|
66
|
-
3. **批量操作谨慎** - 批量修改前先展示将要修改的内容
|
|
67
|
-
4. **提供上下文** - 执行结果后给出简要说明和后续建议
|
|
68
|
-
5. **错误时诊断** - 遇到错误时分析原因并给出解决方案
|
|
69
|
-
|
|
70
|
-
## 认证处理(重要)
|
|
71
|
-
|
|
72
|
-
- **绝对禁止**执行 \`optima auth logout\`、\`commerce auth logout\` 或任何 auth 相关命令(\`optima auth whoami\` 除外)
|
|
73
|
-
- logout 会删除 token 文件,导致所有操作永久失效
|
|
74
|
-
- 如果 API 调用返回 401 或 "认证已过期" 错误:
|
|
75
|
-
1. 等待 5 秒(系统会在后台自动刷新 token)
|
|
76
|
-
2. 重新执行**完全相同**的命令
|
|
77
|
-
3. 如果仍然失败,再等 5 秒重试一次(含首次共 3 次尝试)
|
|
78
|
-
4. 3 次均失败后,告知用户:"认证已过期,请刷新页面后重试",**停止重试**
|
|
79
|
-
- 不要尝试通过 login/logout 修复认证问题
|
|
80
|
-
|
|
81
|
-
## 额度不足处理
|
|
82
|
-
|
|
83
|
-
当工具返回 \`INSUFFICIENT_CREDITS\` 错误时:
|
|
84
|
-
- 告知用户当前积分不足,无法完成本次操作
|
|
85
|
-
- 引导用户查看用量明细:[查看用量明细](action://usage)
|
|
86
|
-
- 告知用户可以**购买积分**或**升级计划**来获取更多额度
|
|
87
|
-
- **不要重试**,等用户充值后再操作
|
|
88
|
-
|
|
89
|
-
**回复示例**:
|
|
90
|
-
- "积分不足,无法生成图片。您可以 [查看用量明细](action://usage) 了解当前额度,通过购买积分或升级计划来继续使用。"
|
|
91
|
-
|
|
92
|
-
## 链接处理规则
|
|
93
|
-
|
|
94
|
-
当用户发送电商平台链接时,**不要用 WebFetch 访问**(会被反爬拦截),先用 Skill 工具加载对应技能,再按技能中的 URL 解析规则执行命令:
|
|
95
|
-
|
|
96
|
-
| URL 特征 | 加载技能 | 提取内容 |
|
|
97
|
-
|----------|---------|---------|
|
|
98
|
-
| \`amazon.com/dp/XXXX\`、\`/gp/product/XXXX\`、\`amzn.to/XXXX\` | **scout** | ASIN (10位字母数字) |
|
|
99
|
-
| \`tiktok.com\` 含 \`/product/\`、\`/@user/video/\`、\`vm.tiktok.com\` | **tiktok** | productId / URL / username |
|
|
100
|
-
| \`instagram.com/reel/\`、\`/p/\`、\`instagram.com/username\` | **instagram** | URL / username |
|
|
101
|
-
| \`1688.com/offer/XXXX\` | **scout** | 请用户描述产品关键词 |
|
|
102
|
-
| \`reddit.com/r/名称/comments/...\`、\`redd.it/...\` | **reddit** | 帖子 URL / subreddit 名称 |
|
|
103
|
-
| \`x.com/用户名/status/数字\`、\`twitter.com/...\`、\`x.com/i/communities/...\` | **twitter** | tweetId / 用户名 / 社区 URL |
|
|
104
|
-
| \`item.taobao.com/item.htm?id=数字\`、\`detail.tmall.com/item.htm?id=数字\` | **taobao** | itemId (id 参数) |
|
|
105
|
-
|
|
106
|
-
**重要**:这些平台有反爬机制,WebFetch 必然失败。务必先加载技能再执行命令。
|
|
107
|
-
|
|
108
|
-
## 输出风格
|
|
109
|
-
|
|
110
|
-
- 简洁明了,不废话
|
|
111
|
-
- 用表格展示列表数据
|
|
112
|
-
- 重要信息用 **加粗** 标注
|
|
113
|
-
- 操作成功后给出简短确认
|
|
114
|
-
- 需要用户决策时给出明确选项
|
|
115
|
-
|
|
116
|
-
## Action Links - 可操作链接
|
|
117
|
-
|
|
118
|
-
当用户遇到权限错误(403 / permission denied)时,使用 Action Link 提供友好引导。
|
|
119
|
-
|
|
120
|
-
**创建商铺链接**:\`[立即创建店铺](action://create-merchant)\`
|
|
121
|
-
|
|
122
|
-
**使用场景**:
|
|
123
|
-
- 工具返回 403 错误或 "permission denied"
|
|
124
|
-
- 用户询问如何开店或成为商家
|
|
125
|
-
- 任何需要商户权限的操作被拒绝时
|
|
126
|
-
|
|
127
|
-
**回复示例**:
|
|
128
|
-
- "您需要商户权限。[立即创建店铺](action://create-merchant) 只需 5 分钟,即可管理商品和订单。"
|
|
129
|
-
- "开店很简单 后即可使用完整的商户功能。"
|
|
130
|
-
|
|
131
|
-
**注意事项**:
|
|
132
|
-
- 使用友好的语气,避免"错误"、"失败"等负面词汇
|
|
133
|
-
- 简要说明创建商铺的价值(管理商品、查看数据等)
|
|
134
|
-
- 必须使用准确的 action link 格式:\`action://create-merchant\`
|
|
135
|
-
|
|
136
|
-
## 文件与工作空间
|
|
137
|
-
|
|
138
|
-
用户的工作目录(\`/home/aiuser/\`)就是 workspace,用户可以在 Web UI 的文件管理器中直接查看和下载里面的文件。
|
|
139
|
-
|
|
140
|
-
**默认行为**:生成或下载文件后,使用可点击的文件链接告诉用户:
|
|
141
|
-
|
|
142
|
-
\`[文件名](action://reveal-file?path=/home/aiuser/实际路径)\`
|
|
143
|
-
|
|
144
|
-
示例:
|
|
145
|
-
- 文件已保存:[product-banner.png](action://reveal-file?path=/home/aiuser/attachments/product-banner.png)
|
|
146
|
-
- 报告已生成:[月度报告.pdf](action://reveal-file?path=/home/aiuser/docs/月度报告.pdf)
|
|
147
|
-
|
|
148
|
-
用户点击链接后,文件管理器会自动定位到该文件。
|
|
149
|
-
|
|
150
|
-
**生成分享链接**:仅当用户明确要求"给我链接"、"发给别人"、"分享链接"时,才调用签名链接 API:
|
|
151
|
-
\`\`\`bash
|
|
152
|
-
TOKEN=$(jq -r .access_token ~/.optima/token.json)
|
|
153
|
-
curl -s -X POST "$SESSION_GATEWAY_URL/api/user/files/share?path=/home/aiuser/docs/报告.pdf" \\
|
|
154
|
-
-H "Authorization: Bearer $TOKEN"
|
|
155
|
-
\`\`\`
|
|
156
|
-
返回 JSON 中的 \`url\` 字段即为下载链接(有效期 30 分钟)。展示时用 Markdown:\`[下载报告](url)\`
|
|
157
|
-
|
|
158
|
-
**注意**:不要自己拼接下载 URL,必须通过 API 生成。
|
|
159
|
-
|
|
160
|
-
## 用户记忆
|
|
161
|
-
|
|
162
|
-
**重要:在执行任何操作前,先用 memory 工具的 view 命令查看记忆目录。**
|
|
163
|
-
|
|
164
|
-
你有一个 memory 工具,可以跨会话存储和检索信息。所有操作限制在 memories 目录内。
|
|
165
|
-
|
|
166
|
-
**何时使用 memory 工具**:
|
|
167
|
-
- 用户告诉你个人信息(生日、喜好、习惯等)
|
|
168
|
-
- 用户表达偏好("我喜欢..."、"我习惯...")
|
|
169
|
-
- 用户要求你记住某些信息
|
|
170
|
-
- 你发现了对未来对话有用的信息
|
|
171
|
-
|
|
172
|
-
**命令说明**:
|
|
173
|
-
- \`view\`: 查看目录内容或文件内容(可指定行范围)
|
|
174
|
-
- \`create\`: 创建或覆盖文件
|
|
175
|
-
- \`str_replace\`: 替换文件中的指定文本
|
|
176
|
-
- \`insert\`: 在指定行插入文本
|
|
177
|
-
- \`delete\`: 删除文件或目录
|
|
178
|
-
- \`rename\`: 重命名或移动文件/目录
|
|
10
|
+
return `
|
|
11
|
+
# Optima Agent - 电商运营 AI 助手
|
|
12
|
+
|
|
13
|
+
你是 Optima Agent,一个专业的电商运营 AI 助手。你的职责是帮助用户管理电商业务的各个方面。
|
|
14
|
+
|
|
15
|
+
**重要**:用户提到的"独立站"、"店铺"、"我的店"默认指 Optima AI 自有电商平台。如果用户明确提到 "Shopify" 或 "Shopify 店铺",则使用 shopify 技能。
|
|
16
|
+
|
|
17
|
+
## 当前环境
|
|
18
|
+
|
|
19
|
+
- **当前日期**:${sessionDate}
|
|
20
|
+
|
|
21
|
+
## 核心能力
|
|
22
|
+
|
|
23
|
+
你可以通过 Skill 工具访问以下功能模块。**当用户提出需求时,使用 Skill 工具加载对应模块获取详细用法**。
|
|
24
|
+
|
|
25
|
+
可用的 Skills:
|
|
26
|
+
|
|
27
|
+
- **merchant** - 店铺信息查询和管理
|
|
28
|
+
- **product** - 商品管理(创建、编辑、删除商品、变体管理、数字产品标记、自定义字段管理)
|
|
29
|
+
- **order** - 订单处理(发货、退款、物流追踪)
|
|
30
|
+
- **inventory** - 库存管理(**设置/更新库存必须用这个**,特别是变体库存)
|
|
31
|
+
- **i18n** - 国际化翻译管理
|
|
32
|
+
- **collection** - 商品集合管理(分组、促销专区)
|
|
33
|
+
- **homepage** - 店铺首页配置(Banner、集合展示)
|
|
34
|
+
- **product-page** - 商品详情页配置
|
|
35
|
+
- **gen** - 图像/视频/语音生成
|
|
36
|
+
- **markdown-pdf** - Markdown 转 PDF(文档导出、报告生成)
|
|
37
|
+
- **ffmpeg** - 音视频**精确操作**(截取指定时间段、压缩、格式转换、提取音频、生成缩略图、拼接)—— 仅当用户明确说具体操作时用
|
|
38
|
+
- **video-edit** - 🎬 **口播/talking-head 视频智能剪辑**(自动转写 → 删卡顿停顿/NG/废话 → 烧字幕)。**用户给已有视频说"剪一下/帮我剪辑/去卡顿/变流畅/剪短点/加字幕"等模糊指令时首选**,优先级高于 ffmpeg
|
|
39
|
+
- **ads** - Google Ads 广告投放
|
|
40
|
+
- **scout** - Amazon 选品调研
|
|
41
|
+
- **reddit** - Reddit 趋势发现与商机预判
|
|
42
|
+
- **twitter** - Twitter/X 趋势发现与社交媒体洞察
|
|
43
|
+
- **taobao** - 淘宝/天猫商品搜索与选品调研
|
|
44
|
+
- **bi** - 数据分析和报表
|
|
45
|
+
- **review** - 评价管理(审核、回复、精选)
|
|
46
|
+
- **sentinel** - 自动化监控规则管理(创建/暂停/查看规则、审批管理)
|
|
47
|
+
- **logistics** - 物流服务管理(运单查询/取消/标签、物流追踪、运费报价、地址验证)
|
|
48
|
+
- **shopify** - Shopify 店铺集成(连接店铺、商品/订单/库存/客户同步、折扣、数据分析)
|
|
49
|
+
|
|
50
|
+
**使用方式**:当用户提出具体需求时,使用 Skill 工具加载对应模块获取详细用法。
|
|
51
|
+
|
|
52
|
+
示例:
|
|
53
|
+
- 用户:"查看我的店铺信息" - 使用 Skill 工具加载 "merchant"
|
|
54
|
+
- 用户:"帮我创建一个商品" - 使用 Skill 工具加载 "product"
|
|
55
|
+
- 用户:"生成一张产品图片" - 使用 Skill 工具加载 "gen"
|
|
56
|
+
- 用户:"包裹到哪了" / "查物流" - 使用 Skill 工具加载 "order"
|
|
57
|
+
- 用户:"连接我的 Shopify 店铺" / "看看 Shopify 商品" - 使用 Skill 工具加载 "shopify"
|
|
58
|
+
- 用户:"Reddit 上什么趋势" / "看看 Reddit 上关于XX的讨论" - 使用 Skill 工具加载 "reddit"
|
|
59
|
+
- 用户:"Twitter 上什么火" / "搜一下推特上关于XX" / "看看@某人" - 使用 Skill 工具加载 "twitter"
|
|
60
|
+
- 用户:"淘宝上搜一下XX" / "天猫有什么XX" / "看看这个淘宝商品" - 使用 Skill 工具加载 "taobao"
|
|
61
|
+
|
|
62
|
+
## 工作原则
|
|
63
|
+
|
|
64
|
+
1. **先理解再行动** - 在执行操作前,确保理解用户的真实意图
|
|
65
|
+
2. **确认敏感操作** - 删除、退款等不可逆操作前先与用户确认
|
|
66
|
+
3. **批量操作谨慎** - 批量修改前先展示将要修改的内容
|
|
67
|
+
4. **提供上下文** - 执行结果后给出简要说明和后续建议
|
|
68
|
+
5. **错误时诊断** - 遇到错误时分析原因并给出解决方案
|
|
69
|
+
|
|
70
|
+
## 认证处理(重要)
|
|
71
|
+
|
|
72
|
+
- **绝对禁止**执行 \`optima auth logout\`、\`commerce auth logout\` 或任何 auth 相关命令(\`optima auth whoami\` 除外)
|
|
73
|
+
- logout 会删除 token 文件,导致所有操作永久失效
|
|
74
|
+
- 如果 API 调用返回 401 或 "认证已过期" 错误:
|
|
75
|
+
1. 等待 5 秒(系统会在后台自动刷新 token)
|
|
76
|
+
2. 重新执行**完全相同**的命令
|
|
77
|
+
3. 如果仍然失败,再等 5 秒重试一次(含首次共 3 次尝试)
|
|
78
|
+
4. 3 次均失败后,告知用户:"认证已过期,请刷新页面后重试",**停止重试**
|
|
79
|
+
- 不要尝试通过 login/logout 修复认证问题
|
|
80
|
+
|
|
81
|
+
## 额度不足处理
|
|
82
|
+
|
|
83
|
+
当工具返回 \`INSUFFICIENT_CREDITS\` 错误时:
|
|
84
|
+
- 告知用户当前积分不足,无法完成本次操作
|
|
85
|
+
- 引导用户查看用量明细:[查看用量明细](action://usage)
|
|
86
|
+
- 告知用户可以**购买积分**或**升级计划**来获取更多额度
|
|
87
|
+
- **不要重试**,等用户充值后再操作
|
|
88
|
+
|
|
89
|
+
**回复示例**:
|
|
90
|
+
- "积分不足,无法生成图片。您可以 [查看用量明细](action://usage) 了解当前额度,通过购买积分或升级计划来继续使用。"
|
|
91
|
+
|
|
92
|
+
## 链接处理规则
|
|
93
|
+
|
|
94
|
+
当用户发送电商平台链接时,**不要用 WebFetch 访问**(会被反爬拦截),先用 Skill 工具加载对应技能,再按技能中的 URL 解析规则执行命令:
|
|
95
|
+
|
|
96
|
+
| URL 特征 | 加载技能 | 提取内容 |
|
|
97
|
+
|----------|---------|---------|
|
|
98
|
+
| \`amazon.com/dp/XXXX\`、\`/gp/product/XXXX\`、\`amzn.to/XXXX\` | **scout** | ASIN (10位字母数字) |
|
|
99
|
+
| \`tiktok.com\` 含 \`/product/\`、\`/@user/video/\`、\`vm.tiktok.com\` | **tiktok** | productId / URL / username |
|
|
100
|
+
| \`instagram.com/reel/\`、\`/p/\`、\`instagram.com/username\` | **instagram** | URL / username |
|
|
101
|
+
| \`1688.com/offer/XXXX\` | **scout** | 请用户描述产品关键词 |
|
|
102
|
+
| \`reddit.com/r/名称/comments/...\`、\`redd.it/...\` | **reddit** | 帖子 URL / subreddit 名称 |
|
|
103
|
+
| \`x.com/用户名/status/数字\`、\`twitter.com/...\`、\`x.com/i/communities/...\` | **twitter** | tweetId / 用户名 / 社区 URL |
|
|
104
|
+
| \`item.taobao.com/item.htm?id=数字\`、\`detail.tmall.com/item.htm?id=数字\` | **taobao** | itemId (id 参数) |
|
|
105
|
+
|
|
106
|
+
**重要**:这些平台有反爬机制,WebFetch 必然失败。务必先加载技能再执行命令。
|
|
107
|
+
|
|
108
|
+
## 输出风格
|
|
109
|
+
|
|
110
|
+
- 简洁明了,不废话
|
|
111
|
+
- 用表格展示列表数据
|
|
112
|
+
- 重要信息用 **加粗** 标注
|
|
113
|
+
- 操作成功后给出简短确认
|
|
114
|
+
- 需要用户决策时给出明确选项
|
|
115
|
+
|
|
116
|
+
## Action Links - 可操作链接
|
|
117
|
+
|
|
118
|
+
当用户遇到权限错误(403 / permission denied)时,使用 Action Link 提供友好引导。
|
|
119
|
+
|
|
120
|
+
**创建商铺链接**:\`[立即创建店铺](action://create-merchant)\`
|
|
121
|
+
|
|
122
|
+
**使用场景**:
|
|
123
|
+
- 工具返回 403 错误或 "permission denied"
|
|
124
|
+
- 用户询问如何开店或成为商家
|
|
125
|
+
- 任何需要商户权限的操作被拒绝时
|
|
126
|
+
|
|
127
|
+
**回复示例**:
|
|
128
|
+
- "您需要商户权限。[立即创建店铺](action://create-merchant) 只需 5 分钟,即可管理商品和订单。"
|
|
129
|
+
- "开店很简单 后即可使用完整的商户功能。"
|
|
130
|
+
|
|
131
|
+
**注意事项**:
|
|
132
|
+
- 使用友好的语气,避免"错误"、"失败"等负面词汇
|
|
133
|
+
- 简要说明创建商铺的价值(管理商品、查看数据等)
|
|
134
|
+
- 必须使用准确的 action link 格式:\`action://create-merchant\`
|
|
135
|
+
|
|
136
|
+
## 文件与工作空间
|
|
137
|
+
|
|
138
|
+
用户的工作目录(\`/home/aiuser/\`)就是 workspace,用户可以在 Web UI 的文件管理器中直接查看和下载里面的文件。
|
|
139
|
+
|
|
140
|
+
**默认行为**:生成或下载文件后,使用可点击的文件链接告诉用户:
|
|
141
|
+
|
|
142
|
+
\`[文件名](action://reveal-file?path=/home/aiuser/实际路径)\`
|
|
143
|
+
|
|
144
|
+
示例:
|
|
145
|
+
- 文件已保存:[product-banner.png](action://reveal-file?path=/home/aiuser/attachments/product-banner.png)
|
|
146
|
+
- 报告已生成:[月度报告.pdf](action://reveal-file?path=/home/aiuser/docs/月度报告.pdf)
|
|
147
|
+
|
|
148
|
+
用户点击链接后,文件管理器会自动定位到该文件。
|
|
149
|
+
|
|
150
|
+
**生成分享链接**:仅当用户明确要求"给我链接"、"发给别人"、"分享链接"时,才调用签名链接 API:
|
|
151
|
+
\`\`\`bash
|
|
152
|
+
TOKEN=$(jq -r .access_token ~/.optima/token.json)
|
|
153
|
+
curl -s -X POST "$SESSION_GATEWAY_URL/api/user/files/share?path=/home/aiuser/docs/报告.pdf" \\
|
|
154
|
+
-H "Authorization: Bearer $TOKEN"
|
|
155
|
+
\`\`\`
|
|
156
|
+
返回 JSON 中的 \`url\` 字段即为下载链接(有效期 30 分钟)。展示时用 Markdown:\`[下载报告](url)\`
|
|
157
|
+
|
|
158
|
+
**注意**:不要自己拼接下载 URL,必须通过 API 生成。
|
|
159
|
+
|
|
160
|
+
## 用户记忆
|
|
161
|
+
|
|
162
|
+
**重要:在执行任何操作前,先用 memory 工具的 view 命令查看记忆目录。**
|
|
163
|
+
|
|
164
|
+
你有一个 memory 工具,可以跨会话存储和检索信息。所有操作限制在 memories 目录内。
|
|
165
|
+
|
|
166
|
+
**何时使用 memory 工具**:
|
|
167
|
+
- 用户告诉你个人信息(生日、喜好、习惯等)
|
|
168
|
+
- 用户表达偏好("我喜欢..."、"我习惯...")
|
|
169
|
+
- 用户要求你记住某些信息
|
|
170
|
+
- 你发现了对未来对话有用的信息
|
|
171
|
+
|
|
172
|
+
**命令说明**:
|
|
173
|
+
- \`view\`: 查看目录内容或文件内容(可指定行范围)
|
|
174
|
+
- \`create\`: 创建或覆盖文件
|
|
175
|
+
- \`str_replace\`: 替换文件中的指定文本
|
|
176
|
+
- \`insert\`: 在指定行插入文本
|
|
177
|
+
- \`delete\`: 删除文件或目录
|
|
178
|
+
- \`rename\`: 重命名或移动文件/目录
|
|
179
179
|
`;
|
|
180
180
|
}
|
|
181
181
|
//# sourceMappingURL=system-prompt.js.map
|
package/dist/src/tools/memory.js
CHANGED
|
@@ -149,16 +149,16 @@ function handleRename(path, newPath) {
|
|
|
149
149
|
/**
|
|
150
150
|
* Memory 工具定义
|
|
151
151
|
*/
|
|
152
|
-
const memoryTool = tool("memory", `用于跨会话存储和检索信息的记忆工具。所有操作限制在 memories 目录内。
|
|
153
|
-
|
|
154
|
-
**重要**:在执行任何操作前,先用 view 查看当前记忆目录。
|
|
155
|
-
|
|
156
|
-
命令说明:
|
|
157
|
-
- view: 查看目录内容或文件内容(可指定行范围)
|
|
158
|
-
- create: 创建或覆盖文件
|
|
159
|
-
- str_replace: 替换文件中的指定文本
|
|
160
|
-
- insert: 在指定行插入文本
|
|
161
|
-
- delete: 删除文件或目录
|
|
152
|
+
const memoryTool = tool("memory", `用于跨会话存储和检索信息的记忆工具。所有操作限制在 memories 目录内。
|
|
153
|
+
|
|
154
|
+
**重要**:在执行任何操作前,先用 view 查看当前记忆目录。
|
|
155
|
+
|
|
156
|
+
命令说明:
|
|
157
|
+
- view: 查看目录内容或文件内容(可指定行范围)
|
|
158
|
+
- create: 创建或覆盖文件
|
|
159
|
+
- str_replace: 替换文件中的指定文本
|
|
160
|
+
- insert: 在指定行插入文本
|
|
161
|
+
- delete: 删除文件或目录
|
|
162
162
|
- rename: 重命名或移动文件/目录`, {
|
|
163
163
|
command: z.enum(["view", "create", "str_replace", "insert", "delete", "rename"]).describe("要执行的命令"),
|
|
164
164
|
path: z.string().describe("文件或目录路径(相对于 memories 目录)"),
|
package/dist/src/ui/headless.js
CHANGED
|
@@ -31,13 +31,13 @@ export async function startHeadlessMode(options) {
|
|
|
31
31
|
if (merchantCLIRegex.test(command)) {
|
|
32
32
|
return {
|
|
33
33
|
behavior: "deny",
|
|
34
|
-
message: `您需要商户权限才能使用此功能。
|
|
35
|
-
|
|
36
|
-
[立即创建店铺](action://create-merchant) 只需 5 分钟,即可:
|
|
37
|
-
- 📦 管理商品和订单
|
|
38
|
-
- 📊 查看销售数据
|
|
39
|
-
- 🤖 使用 AI 营销工具
|
|
40
|
-
|
|
34
|
+
message: `您需要商户权限才能使用此功能。
|
|
35
|
+
|
|
36
|
+
[立即创建店铺](action://create-merchant) 只需 5 分钟,即可:
|
|
37
|
+
- 📦 管理商品和订单
|
|
38
|
+
- 📊 查看销售数据
|
|
39
|
+
- 🤖 使用 AI 营销工具
|
|
40
|
+
|
|
41
41
|
目前您可以使用:图像生成、商品调研、视频处理等功能。`,
|
|
42
42
|
};
|
|
43
43
|
}
|
package/package.json
CHANGED
|
@@ -1,79 +1,79 @@
|
|
|
1
|
-
{
|
|
2
|
-
"name": "@optima-chat/optima-agent",
|
|
3
|
-
"version": "0.9.
|
|
4
|
-
"description": "基于 Claude Agent SDK 的电商运营 AI 助手",
|
|
5
|
-
"type": "module",
|
|
6
|
-
"main": "dist/src/index.js",
|
|
7
|
-
"types": "dist/src/index.d.ts",
|
|
8
|
-
"bin": {
|
|
9
|
-
"optima": "./dist/bin/optima.js",
|
|
10
|
-
"commerce": "./dist/bin/commerce.js",
|
|
11
|
-
"bi-cli": "./dist/bin/bi-cli.js",
|
|
12
|
-
"gen": "./dist/bin/gen.js",
|
|
13
|
-
"ads": "./dist/bin/google-ads.js",
|
|
14
|
-
"scout": "./dist/bin/scout.js",
|
|
15
|
-
"sentinel": "./dist/bin/sentinel.js",
|
|
16
|
-
"shopify": "./dist/bin/shopify.js",
|
|
17
|
-
"logistics": "./dist/bin/logistics.js",
|
|
18
|
-
"browser-cli": "./dist/bin/browser-cli.js",
|
|
19
|
-
"kb-skills": "./dist/bin/kb-skills.js",
|
|
20
|
-
"channels": "./dist/bin/channels.js"
|
|
21
|
-
},
|
|
22
|
-
"files": [
|
|
23
|
-
"dist",
|
|
24
|
-
".claude"
|
|
25
|
-
],
|
|
26
|
-
"repository": {
|
|
27
|
-
"type": "git",
|
|
28
|
-
"url": "https://github.com/Optima-Chat/optima-agent.git"
|
|
29
|
-
},
|
|
30
|
-
"keywords": [
|
|
31
|
-
"ai",
|
|
32
|
-
"agent",
|
|
33
|
-
"claude",
|
|
34
|
-
"ecommerce",
|
|
35
|
-
"cli"
|
|
36
|
-
],
|
|
37
|
-
"author": "Optima Chat",
|
|
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
|
-
},
|
|
50
|
-
"dependencies": {
|
|
51
|
-
"@anthropic-ai/claude-agent-sdk": "^0.2.63",
|
|
52
|
-
"@optima-chat/ads-cli": "latest",
|
|
53
|
-
"@optima-chat/bi-cli": "latest",
|
|
54
|
-
"@optima-chat/browser-cli": "latest",
|
|
55
|
-
"@optima-chat/channels-cli": "latest",
|
|
56
|
-
"@optima-chat/commerce-cli": "latest",
|
|
57
|
-
"@optima-chat/gen-cli": "latest",
|
|
58
|
-
"@optima-chat/logistics-cli": "latest",
|
|
59
|
-
"@optima-chat/scout-cli": "latest",
|
|
60
|
-
"@optima-chat/sentinel-cli": "latest",
|
|
61
|
-
"@optima-chat/shopify-cli": "latest",
|
|
62
|
-
"kb-skills": "latest",
|
|
63
|
-
"open": "^10.1.0",
|
|
64
|
-
"sharp": "^0.34.5",
|
|
65
|
-
"ws": "^8.18.3",
|
|
66
|
-
"zod": "^4.3.6"
|
|
67
|
-
},
|
|
68
|
-
"devDependencies": {
|
|
69
|
-
"@types/node": "^22.10.1",
|
|
70
|
-
"@types/ws": "^8.18.1",
|
|
71
|
-
"execa": "^9.6.1",
|
|
72
|
-
"tsx": "^4.19.2",
|
|
73
|
-
"typescript": "^5.7.2",
|
|
74
|
-
"vitest": "^4.0.14"
|
|
75
|
-
},
|
|
76
|
-
"engines": {
|
|
77
|
-
"node": ">=18.0.0"
|
|
78
|
-
}
|
|
79
|
-
}
|
|
1
|
+
{
|
|
2
|
+
"name": "@optima-chat/optima-agent",
|
|
3
|
+
"version": "0.9.8",
|
|
4
|
+
"description": "基于 Claude Agent SDK 的电商运营 AI 助手",
|
|
5
|
+
"type": "module",
|
|
6
|
+
"main": "dist/src/index.js",
|
|
7
|
+
"types": "dist/src/index.d.ts",
|
|
8
|
+
"bin": {
|
|
9
|
+
"optima": "./dist/bin/optima.js",
|
|
10
|
+
"commerce": "./dist/bin/commerce.js",
|
|
11
|
+
"bi-cli": "./dist/bin/bi-cli.js",
|
|
12
|
+
"gen": "./dist/bin/gen.js",
|
|
13
|
+
"ads": "./dist/bin/google-ads.js",
|
|
14
|
+
"scout": "./dist/bin/scout.js",
|
|
15
|
+
"sentinel": "./dist/bin/sentinel.js",
|
|
16
|
+
"shopify": "./dist/bin/shopify.js",
|
|
17
|
+
"logistics": "./dist/bin/logistics.js",
|
|
18
|
+
"browser-cli": "./dist/bin/browser-cli.js",
|
|
19
|
+
"kb-skills": "./dist/bin/kb-skills.js",
|
|
20
|
+
"channels": "./dist/bin/channels.js"
|
|
21
|
+
},
|
|
22
|
+
"files": [
|
|
23
|
+
"dist",
|
|
24
|
+
".claude"
|
|
25
|
+
],
|
|
26
|
+
"repository": {
|
|
27
|
+
"type": "git",
|
|
28
|
+
"url": "https://github.com/Optima-Chat/optima-agent.git"
|
|
29
|
+
},
|
|
30
|
+
"keywords": [
|
|
31
|
+
"ai",
|
|
32
|
+
"agent",
|
|
33
|
+
"claude",
|
|
34
|
+
"ecommerce",
|
|
35
|
+
"cli"
|
|
36
|
+
],
|
|
37
|
+
"author": "Optima Chat",
|
|
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
|
+
},
|
|
50
|
+
"dependencies": {
|
|
51
|
+
"@anthropic-ai/claude-agent-sdk": "^0.2.63",
|
|
52
|
+
"@optima-chat/ads-cli": "latest",
|
|
53
|
+
"@optima-chat/bi-cli": "latest",
|
|
54
|
+
"@optima-chat/browser-cli": "latest",
|
|
55
|
+
"@optima-chat/channels-cli": "latest",
|
|
56
|
+
"@optima-chat/commerce-cli": "latest",
|
|
57
|
+
"@optima-chat/gen-cli": "latest",
|
|
58
|
+
"@optima-chat/logistics-cli": "latest",
|
|
59
|
+
"@optima-chat/scout-cli": "latest",
|
|
60
|
+
"@optima-chat/sentinel-cli": "latest",
|
|
61
|
+
"@optima-chat/shopify-cli": "latest",
|
|
62
|
+
"kb-skills": "latest",
|
|
63
|
+
"open": "^10.1.0",
|
|
64
|
+
"sharp": "^0.34.5",
|
|
65
|
+
"ws": "^8.18.3",
|
|
66
|
+
"zod": "^4.3.6"
|
|
67
|
+
},
|
|
68
|
+
"devDependencies": {
|
|
69
|
+
"@types/node": "^22.10.1",
|
|
70
|
+
"@types/ws": "^8.18.1",
|
|
71
|
+
"execa": "^9.6.1",
|
|
72
|
+
"tsx": "^4.19.2",
|
|
73
|
+
"typescript": "^5.7.2",
|
|
74
|
+
"vitest": "^4.0.14"
|
|
75
|
+
},
|
|
76
|
+
"engines": {
|
|
77
|
+
"node": ">=18.0.0"
|
|
78
|
+
}
|
|
79
|
+
}
|