@vocmarket/voc-skill 0.3.32 → 0.3.34
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-plugin/plugin.json +1 -1
- package/README.md +26 -13
- package/SKILL.md +28 -0
- package/bin/claude-voc.js +43 -57
- package/docs/capability-map.md +39 -1
- package/docs/live-manual-acceptance-checklist.md +3 -2
- package/docs/npm-packaging-notes.md +2 -2
- package/docs/payment-package-links.md +4 -4
- package/docs/reports/three-account-platform-cost-2026-09-01.md +96 -0
- package/docs/reports/three-account-user-billing-2026-09-01.html +328 -0
- package/docs/reports/three-account-voc-usage-2026-09-01.md +10 -0
- package/docs/taobao-item-detail-v7.md +156 -0
- package/docs/voc-cost-metering-and-balance-implementation-spec.md +2380 -0
- package/install.js +13 -12
- package/mcp/catalog/params/taobao.json +9 -0
- package/mcp/catalog/voc-social-endpoints.json +46 -0
- package/mcp/src/core/activation.js +7 -34
- package/mcp/src/core/api-catalog.js +5 -0
- package/mcp/src/core/batch-budget-guard.js +104 -0
- package/mcp/src/core/billing-client.js +180 -0
- package/mcp/src/core/budget-guard.js +115 -0
- package/mcp/src/core/credentials.js +92 -7
- package/mcp/src/core/payment-links.js +74 -140
- package/mcp/src/core/recharge-client.js +139 -0
- package/mcp/src/core/result-envelope.js +11 -4
- package/mcp/src/core/usage-context.js +98 -0
- package/mcp/src/features/douyin-trend/live-collector.js +35 -6
- package/mcp/src/features/fmode-image-analysis/image-analysis.js +32 -34
- package/mcp/src/features/media/media-discovery.js +48 -0
- package/mcp/src/features/media/media-manifest.js +52 -0
- package/mcp/src/features/media/media-pipeline.js +109 -0
- package/mcp/src/features/voc-business-workflow/business-workflow.js +90 -3
- package/mcp/src/features/voc-cost/estimate-report.js +76 -0
- package/mcp/src/features/voc-cost/workflow-planner.js +144 -0
- package/mcp/src/features/xiaohongshu-trend/assets.js +22 -133
- package/mcp/src/features/xiaohongshu-trend/live-collector.js +37 -7
- package/mcp/src/providers/douyin-api.js +27 -150
- package/mcp/src/providers/ecommerce-gateway.js +8 -4
- package/mcp/src/providers/overseas-gateway.js +7 -4
- package/mcp/src/providers/voc-gateway.js +38 -22
- package/mcp/src/providers/xiaohongshu-api.js +22 -98
- package/mcp/src/server.js +263 -27
- package/mcp/src/tools/douyin-trend-run.js +277 -60
- package/mcp/src/tools/voc-api-catalog-run.js +130 -32
- package/mcp/src/tools/voc-billing-query-run.js +9 -0
- package/mcp/src/tools/voc-cost-estimate-run.js +89 -0
- package/mcp/src/tools/voc-usage-report-run.js +91 -0
- package/mcp/src/tools/xiaohongshu-trend-run.js +278 -59
- package/package.json +12 -2
- package/scripts/acceptance.js +6 -11
- package/scripts/audit-index.js +153 -0
- package/scripts/billing-client-smoke.js +103 -0
- package/scripts/fmode-image-analysis-smoke.js +2 -1
- package/scripts/smoke-budget-guard.js +57 -0
- package/scripts/smoke-cost-estimate.js +54 -0
- package/scripts/smoke-mcp.js +15 -6
- package/scripts/smoke-media-pipeline.js +69 -0
- package/scripts/smoke-package.js +100 -8
- package/scripts/smoke-trend-budget.js +133 -0
- package/scripts/smoke-voc-request-shaping.js +26 -0
- package/skill-package-manifest.json +19 -8
- package/skills/douyin-trend-intelligence/SKILL.md +7 -1
- package/skills/douyin-trend-intelligence/references/live-mode.md +2 -2
- package/skills/fmode-image-analysis/SKILL.md +1 -1
- package/skills/voc-api-catalog/SKILL.md +19 -7
- package/skills/voc-api-catalog/references/error-codes.md +6 -9
- package/skills/voc-business-workflow/SKILL.md +4 -0
- package/skills/voc-cost-controller/SKILL.md +16 -0
- package/skills/voc-cost-controller/references/workflow-cost-models.md +19 -0
- package/skills/xiaohongshu-trend-intelligence/SKILL.md +7 -1
- package/skills/xiaohongshu-trend-intelligence/references/live-mode.md +5 -3
- package/mcp/catalog/voc-social-endpoints.json.bak-justone +0 -22338
- package/mcp/catalog/voc-social-endpoints.json.bak-preindex +0 -32644
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "voc-intelligence",
|
|
3
3
|
"description": "VOC intelligence skills for Claude Code: end-to-end VOC business workflows, Xiaohongshu and Douyin trend reports, live social VOC collection, Fmode Doubao image analysis, token/recharge checks, evidence-card outputs, prioritized issue pools, single-problem deep dives, competitor maps, 7-day content plans, VOC-backed speaking script co-creation, boss/operator action plans, and multi-turn memory.",
|
|
4
|
-
"version": "0.3.
|
|
4
|
+
"version": "0.3.34",
|
|
5
5
|
"author": {
|
|
6
6
|
"name": "nkkj-BrainHack"
|
|
7
7
|
}
|
package/README.md
CHANGED
|
@@ -12,6 +12,8 @@
|
|
|
12
12
|
- 单点 VOC 深挖:适合把一个具体问题转成老板能执行的经营动作、内容选题和 7 天验证计划。
|
|
13
13
|
- VOC 内容选题:适合把用户问题转成 7 天短视频选题、口播脚本、镜头建议和验证指标。
|
|
14
14
|
- VOC 口播脚本共创:适合把一条 VOC 选题继续打磨成 60 秒稿、30 秒稿、提词器版,并支持多轮改稿和定稿记忆。
|
|
15
|
+
- VOC 接口目录:适合按平台、关键词和通道查找 1,344 个已登记接口,并读取参数后完成通用调用。
|
|
16
|
+
- VOC 成本控制:适合执行前比较经济版/标准版/完整版,检查余额与预算,执行后查看接口频次和额度消耗。
|
|
15
17
|
|
|
16
18
|
这套技能包不覆盖创始人故事、品牌自传或老板个人 IP 长文。口播脚本要做,但必须来自 VOC 用户问题、竞品评论差异、问题池 Top 问题或单点深挖动作。
|
|
17
19
|
|
|
@@ -36,6 +38,9 @@
|
|
|
36
38
|
- “这个有效,后面优先按这个方向来”
|
|
37
39
|
- “帮我看看顾客关心什么,告诉我先改哪里、下周发什么”
|
|
38
40
|
- “跑一遍完整 VOC 经营闭环”
|
|
41
|
+
- “这个复杂任务预计要花多少钱,经济版和完整版差多少”
|
|
42
|
+
- “查一下这份报告每个接口调用了多少次、消耗了多少额度”
|
|
43
|
+
- “查商品详情或评论,先从接口清单里找合适的接口”
|
|
39
44
|
|
|
40
45
|
## 能交付什么
|
|
41
46
|
|
|
@@ -111,6 +116,8 @@ npx --yes @vocmarket/voc-skill@latest workspace --smoke
|
|
|
111
116
|
.claude/skills/voc-competitor-map/SKILL.md
|
|
112
117
|
.claude/skills/voc-business-workflow/SKILL.md
|
|
113
118
|
.claude/skills/fmode-image-analysis/SKILL.md
|
|
119
|
+
.claude/skills/voc-api-catalog/SKILL.md
|
|
120
|
+
.claude/skills/voc-cost-controller/SKILL.md
|
|
114
121
|
.claude/plugins/voc-intelligence
|
|
115
122
|
```
|
|
116
123
|
|
|
@@ -188,6 +195,8 @@ npx --yes @vocmarket/voc-skill@latest install --smoke
|
|
|
188
195
|
- `voc-competitor-map`
|
|
189
196
|
- `voc-business-workflow`
|
|
190
197
|
- `fmode-image-analysis`
|
|
198
|
+
- `voc-api-catalog`
|
|
199
|
+
- `voc-cost-controller`
|
|
191
200
|
|
|
192
201
|
MCP 工具:
|
|
193
202
|
|
|
@@ -204,6 +213,12 @@ MCP 工具:
|
|
|
204
213
|
- `voc_content_plan_run`
|
|
205
214
|
- `voc_competitor_map_run`
|
|
206
215
|
- `voc_speaking_script_run`
|
|
216
|
+
- `voc_api_search`
|
|
217
|
+
- `voc_api_doc`
|
|
218
|
+
- `voc_api_call`
|
|
219
|
+
- `voc_billing_query`
|
|
220
|
+
- `voc_cost_estimate`
|
|
221
|
+
- `voc_usage_report`
|
|
207
222
|
|
|
208
223
|
命令行入口:
|
|
209
224
|
|
|
@@ -215,6 +230,7 @@ claude-voc image --image-path E:\workspace\example\screenshot.png --prompt "识
|
|
|
215
230
|
npm --prefix claude-code-voc-intelligence run voc:issue-pool
|
|
216
231
|
npm --prefix claude-code-voc-intelligence run voc:deep-dive
|
|
217
232
|
npm --prefix claude-code-voc-intelligence run voc:business-workflow
|
|
233
|
+
npm --prefix claude-code-voc-intelligence run audit:index
|
|
218
234
|
npm --prefix claude-code-voc-intelligence run mcp:smoke
|
|
219
235
|
npm --prefix claude-code-voc-intelligence run smoke:package
|
|
220
236
|
```
|
|
@@ -231,6 +247,9 @@ npm --prefix claude-code-voc-intelligence run smoke:package
|
|
|
231
247
|
- `docs/live-manual-acceptance-checklist.md`
|
|
232
248
|
- `docs/payment-package-links.md`
|
|
233
249
|
- `docs/context-budget-implementation-plan.md`
|
|
250
|
+
- `docs/voc-cost-metering-and-balance-implementation-spec.md`
|
|
251
|
+
- `skills/voc-api-catalog/references/error-codes.md`
|
|
252
|
+
- `skills/voc-cost-controller/references/workflow-cost-models.md`
|
|
234
253
|
- `skills/voc-content-plan/references/content-framework.md`
|
|
235
254
|
- `skills/voc-content-plan/references/speaking-script-patterns.md`
|
|
236
255
|
- `skills/voc-competitor-map/references/competitor-framework.md`
|
|
@@ -271,28 +290,22 @@ sample 模式不需要 token。live 模式需要一把可用的 token——**两
|
|
|
271
290
|
1. **NewAPI(fmode-api)计费 SK**(`sk-` 开头,优先):就是 Claude Code 的 `ANTHROPIC_AUTH_TOKEN`,装好技能包后通常**已经具备**,不必手动再配。读取来源:
|
|
272
291
|
- 本次请求参数 `newapiToken` / `fmodeApiKey`
|
|
273
292
|
- `.env.local` / 环境变量 `FMODE_API_KEY`、`NEWAPI_TOKEN`
|
|
293
|
+
- `~/.fmode/config.json`(FmodeStudio 保存路径)的 `newapiToken` / `fmodeApiToken` / `fmodeApiKey`
|
|
274
294
|
- `~/.claude/voc-credentials.json` 的 `fmodeApiKey`
|
|
275
|
-
- `~/.fmode/config.json`(FmodeStudio 保存路径)的 `newapiToken` / `fmodeApiKey`
|
|
276
295
|
- `~/.claude/settings.json` 的 `env.ANTHROPIC_AUTH_TOKEN`(`sk-` 开头、且 `ANTHROPIC_BASE_URL` 指向 fmode)
|
|
277
|
-
2. **VOC-AI 数据服务会话 token**(`r:`
|
|
296
|
+
2. **VOC-AI 数据服务会话 token**(`r:` 开头,回退):读取来源——本次请求参数、显式 `FMODE_SESSION_TOKEN` / `TIHAO_SESSION_TOKEN`、`~/.fmode/config.json` 的 `sessionToken`、`~/.claude/voc-credentials.json` 的 `sessionToken`·`vocToken`·`token`,最后回退 `.env.local` / 环境变量 `VOC_TOKEN`·`VOC_SOCIAL_TOKEN`
|
|
278
297
|
|
|
279
298
|
同一网关 `server.fmode.cn/api/voc-social` 对上述任一有效 token 都接受 `Bearer`,**`sk-` 不是「类型错误」**。`voc_*_token_check` 与实际采集(`voc_api_call` / `voc_*_trend_run`)口径一致,会识别以上**全部**来源;不必在采集前强制先跑检测。
|
|
280
299
|
|
|
281
300
|
Claude Code 技能包不读取 `~/.openclaw/voc-credentials.json`。
|
|
282
301
|
|
|
283
|
-
缺 token
|
|
302
|
+
缺 token 多数是**配置/读取**问题,应先恢复凭证;只有确认确实是 402 余额不足时才进入充值流程。充值入口统一使用运行时生成的 Tokenized Balance 链接:
|
|
284
303
|
|
|
285
|
-
|
|
286
|
-
|
|
287
|
-
|
|
288
|
-
https://app.fmode.cn/dev/studio/?balance=fmodeapi
|
|
289
|
-
```
|
|
290
|
-
|
|
291
|
-
- **VOC-AI 数据服务会话 token**(`r:` 开头)→ apig-pay 充值:
|
|
304
|
+
```text
|
|
305
|
+
https://app.fmode.cn/dev/studio/balance/?token=USER_SESSION_TOKEN
|
|
306
|
+
```
|
|
292
307
|
|
|
293
|
-
|
|
294
|
-
https://app.fmode.cn/dev/apig-pay/?apigid=Vo3ROWEvDy&fun_id=HOkkX72PMF
|
|
295
|
-
```
|
|
308
|
+
链接由工具按当前用户会话生成,不在文档中固定账号、金额或旧 APIG 参数。用户也可以让 Agent 按报价结果调用现有支付码链路直接生成二维码。
|
|
296
309
|
|
|
297
310
|
## 记忆能力
|
|
298
311
|
|
package/SKILL.md
ADDED
|
@@ -0,0 +1,28 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: voc-intelligence
|
|
3
|
+
description: 面向经营者的 VOC 用户经营洞察工作台。从社交媒体、电商和海外选品数据中提取用户声音,形成趋势情报、问题池、竞品图谱、单点深挖、7 天内容计划、口播脚本、成本预估和用量账单。用户要看顾客关心什么、先改哪里、下周发什么、查商品价格评论、测算任务成本、查询接口用量或进行样例与真实采集时使用。
|
|
4
|
+
---
|
|
5
|
+
|
|
6
|
+
# VOC 用户经营洞察
|
|
7
|
+
|
|
8
|
+
这是一个可从自然语言开始的 VOC 经营工作台,包含趋势情报、问题管理、竞品分析、经营动作、内容计划和口播脚本等子技能,并提供统一的 MCP 数据接口清单。
|
|
9
|
+
|
|
10
|
+
## 使用规则
|
|
11
|
+
|
|
12
|
+
- 用户只需描述行业、品类、平台和目标,不要求用户了解 MCP 参数。
|
|
13
|
+
- 用户没有明确要求真实采集时,先使用演示样例;用户明确说真实采集或 live 时,再检查凭证和余额。
|
|
14
|
+
- 首轮输出采用“初步判断、机会假设、待校准”口径,并给出证据和下一步动作。
|
|
15
|
+
- 用户要完整经营闭环时,调用 `voc_business_workflow_run`;要单项任务时,调用对应的趋势、问题池、深挖、竞品、内容或脚本工具。
|
|
16
|
+
- 用户要查商品、价格、评论、销量或其他平台接口时,先用 `voc_api_search` 查清单,再用 `voc_api_doc` 读取参数,最后用 `voc_api_call` 调用;需要跨平台或未登记接口时,按返回的 `channel` 选择通道。
|
|
17
|
+
- 用户要预估复杂任务成本、比较经济版/标准版/完整版或判断余额是否足够时,先调用 `voc_cost_estimate`;需要读取当前余额和服务端价目时使用 `voc_billing_query`。
|
|
18
|
+
- 用户要查询已完成任务的实际调用频次、额度消耗、接口拆分或报告成本时,调用 `voc_usage_report`,并区分用户扣费与平台成本。
|
|
19
|
+
- 采集响应中的多媒体统一下载到任务本地 `assets/` 并写入 `media-manifest.json`;报告只引用本地路径,技能包不向线上 Storage 上传。
|
|
20
|
+
|
|
21
|
+
## 主要能力
|
|
22
|
+
|
|
23
|
+
- 小红书和抖音趋势情报,支持样例与小规模真实采集。
|
|
24
|
+
- VOC 问题池、单点问题深挖、竞品图谱和 7 天内容计划。
|
|
25
|
+
- 基于用户声音的口播脚本共创、修改和定稿。
|
|
26
|
+
- 淘宝/天猫、京东、1688、抖音电商等电商数据,以及亚马逊海外选品数据。
|
|
27
|
+
- 通用 VOC 接口目录、跨通道接口调用、执行前成本测算、余额预检和执行后用量报告。
|
|
28
|
+
- 图片、截图、海报、图表和商品图片分析。
|
package/bin/claude-voc.js
CHANGED
|
@@ -249,7 +249,6 @@ function shouldCopyEntry(entry) {
|
|
|
249
249
|
}
|
|
250
250
|
|
|
251
251
|
function copyDirRecursive(srcDir, destDir) {
|
|
252
|
-
ensureDir(destDir);
|
|
253
252
|
let count = 0;
|
|
254
253
|
for (const entry of fs.readdirSync(srcDir, { withFileTypes: true })) {
|
|
255
254
|
if (!shouldCopyEntry(entry)) continue;
|
|
@@ -258,6 +257,7 @@ function copyDirRecursive(srcDir, destDir) {
|
|
|
258
257
|
if (entry.isDirectory()) {
|
|
259
258
|
count += copyDirRecursive(src, dest);
|
|
260
259
|
} else if (entry.isFile()) {
|
|
260
|
+
ensureDir(destDir);
|
|
261
261
|
ensureDir(path.dirname(dest));
|
|
262
262
|
fs.copyFileSync(src, dest);
|
|
263
263
|
count++;
|
|
@@ -272,21 +272,15 @@ function assertInstalled(targetDir) {
|
|
|
272
272
|
'install.js',
|
|
273
273
|
'.claude-plugin/plugin.json',
|
|
274
274
|
'.mcp.json',
|
|
275
|
-
'skills/xiaohongshu-trend-intelligence/SKILL.md',
|
|
276
|
-
'skills/douyin-trend-intelligence/SKILL.md',
|
|
277
|
-
'skills/voc-issue-pool/SKILL.md',
|
|
278
|
-
'skills/voc-problem-deep-dive/SKILL.md',
|
|
279
|
-
'skills/voc-content-plan/SKILL.md',
|
|
280
|
-
'skills/voc-speaking-script/SKILL.md',
|
|
281
|
-
'skills/voc-competitor-map/SKILL.md',
|
|
282
|
-
'skills/voc-business-workflow/SKILL.md',
|
|
283
|
-
'skills/fmode-image-analysis/SKILL.md',
|
|
284
|
-
'skills/voc-api-catalog/SKILL.md',
|
|
285
275
|
'mcp/src/tools/fmode-image-analysis.js',
|
|
286
276
|
'mcp/src/tools/voc-api-catalog-run.js',
|
|
287
277
|
'mcp/catalog/voc-social-endpoints.json',
|
|
288
278
|
'mcp/src/server.js'
|
|
289
279
|
];
|
|
280
|
+
const manifest = readJsonIfExists(path.join(targetDir, 'skill-package-manifest.json'));
|
|
281
|
+
for (const skillName of manifest.skills || []) {
|
|
282
|
+
required.push(`skills/${skillName}/SKILL.md`);
|
|
283
|
+
}
|
|
290
284
|
const missing = required.filter(rel => !fs.existsSync(path.join(targetDir, rel)));
|
|
291
285
|
if (missing.length) {
|
|
292
286
|
throw new Error(`Missing required files in install target: ${missing.join(', ')}`);
|
|
@@ -394,13 +388,19 @@ function registerCodexGlobalMcp(targetDir) {
|
|
|
394
388
|
|
|
395
389
|
function copyPackagedSkills(targetDir, destinationRoot) {
|
|
396
390
|
const sourceRoot = path.join(targetDir, 'skills');
|
|
391
|
+
const manifest = readJsonIfExists(path.join(targetDir, 'skill-package-manifest.json'));
|
|
392
|
+
const skillNames = Array.isArray(manifest.skills) ? manifest.skills : [];
|
|
393
|
+
if (!skillNames.length) throw new Error('skill-package-manifest.json has no skills to install');
|
|
397
394
|
ensureDir(destinationRoot);
|
|
398
395
|
let copied = 0;
|
|
399
|
-
for (const
|
|
400
|
-
|
|
401
|
-
|
|
396
|
+
for (const skillName of skillNames) {
|
|
397
|
+
const source = path.join(sourceRoot, skillName);
|
|
398
|
+
if (!fs.existsSync(source) || !fs.statSync(source).isDirectory()) {
|
|
399
|
+
throw new Error(`Manifest skill directory is missing: ${skillName}`);
|
|
400
|
+
}
|
|
401
|
+
const destination = path.join(destinationRoot, skillName);
|
|
402
402
|
removeDirResilient(destination);
|
|
403
|
-
copied += copyDirRecursive(
|
|
403
|
+
copied += copyDirRecursive(source, destination);
|
|
404
404
|
}
|
|
405
405
|
return copied;
|
|
406
406
|
}
|
|
@@ -487,7 +487,7 @@ function workspaceTrendSkillText(options) {
|
|
|
487
487
|
'## 充值 / 计费口径(简版;完整对照见 voc-api-catalog 技能的「错误码速查」references/error-codes.md)',
|
|
488
488
|
'',
|
|
489
489
|
'- 缺 token(`needs_token`)= 可恢复、不是没钱:先自救读 `~/.claude/settings.json` 的 `sk-` fmode key(或 `~/.fmode/config.json` / `~/.claude/voc-credentials.json`),用 `FMODE_API_KEY=sk-…` 重试,不要劝充值。',
|
|
490
|
-
'- 只有真 `402 余额不足`
|
|
490
|
+
'- 只有真 `402 余额不足` 才充值;充值入口以工具返回的 Tokenized Balance 链接或二维码支付结果为准。链接格式为 `https://app.fmode.cn/dev/studio/balance/?token=USER_SESSION_TOKEN`,不要在话术中写死账号或旧 APIG 参数。',
|
|
491
491
|
'- 实际充值/自救链接以工具返回的 `assistantMessage` / `nextActions` 为准,不要写死。',
|
|
492
492
|
''
|
|
493
493
|
].join('\n');
|
|
@@ -726,52 +726,38 @@ function workspaceBusinessWorkflowSkillText(targetDir) {
|
|
|
726
726
|
}
|
|
727
727
|
|
|
728
728
|
function writeWorkspaceSkillEntries(targetDir) {
|
|
729
|
-
const
|
|
730
|
-
const
|
|
731
|
-
|
|
732
|
-
const
|
|
733
|
-
const
|
|
734
|
-
|
|
735
|
-
|
|
736
|
-
|
|
737
|
-
|
|
738
|
-
|
|
739
|
-
|
|
740
|
-
|
|
741
|
-
|
|
742
|
-
|
|
743
|
-
|
|
744
|
-
|
|
745
|
-
|
|
746
|
-
|
|
747
|
-
|
|
748
|
-
|
|
749
|
-
|
|
750
|
-
|
|
751
|
-
|
|
752
|
-
fs.writeFileSync(path.join(deepDiveSkillDir, 'SKILL.md'), workspaceProblemDeepDiveSkillText(targetDir), 'utf8');
|
|
753
|
-
fs.writeFileSync(path.join(contentPlanSkillDir, 'SKILL.md'), workspaceContentPlanSkillText(targetDir), 'utf8');
|
|
754
|
-
fs.writeFileSync(path.join(speakingScriptSkillDir, 'SKILL.md'), workspaceSpeakingScriptSkillText(targetDir), 'utf8');
|
|
755
|
-
fs.writeFileSync(path.join(competitorMapSkillDir, 'SKILL.md'), workspaceCompetitorMapSkillText(targetDir), 'utf8');
|
|
756
|
-
fs.writeFileSync(path.join(businessWorkflowSkillDir, 'SKILL.md'), workspaceBusinessWorkflowSkillText(targetDir), 'utf8');
|
|
757
|
-
fs.copyFileSync(path.join(targetDir, 'skills', 'fmode-image-analysis', 'SKILL.md'), path.join(fmodeImageSkillDir, 'SKILL.md'));
|
|
758
|
-
fs.copyFileSync(path.join(targetDir, 'skills', 'voc-api-catalog', 'SKILL.md'), path.join(apiCatalogSkillDir, 'SKILL.md'));
|
|
729
|
+
const manifest = readJsonIfExists(path.join(targetDir, 'skill-package-manifest.json'));
|
|
730
|
+
const skillNames = Array.isArray(manifest.skills) ? manifest.skills : [];
|
|
731
|
+
if (!skillNames.length) throw new Error('skill-package-manifest.json has no skills to expose in workspace');
|
|
732
|
+
const sourceRoot = path.join(targetDir, 'skills');
|
|
733
|
+
const writers = {
|
|
734
|
+
'xiaohongshu-trend-intelligence': () => workspaceSkillText(targetDir),
|
|
735
|
+
'douyin-trend-intelligence': () => workspaceDouyinSkillText(targetDir),
|
|
736
|
+
'voc-issue-pool': () => workspaceIssuePoolSkillText(targetDir),
|
|
737
|
+
'voc-problem-deep-dive': () => workspaceProblemDeepDiveSkillText(targetDir),
|
|
738
|
+
'voc-content-plan': () => workspaceContentPlanSkillText(targetDir),
|
|
739
|
+
'voc-speaking-script': () => workspaceSpeakingScriptSkillText(targetDir),
|
|
740
|
+
'voc-competitor-map': () => workspaceCompetitorMapSkillText(targetDir),
|
|
741
|
+
'voc-business-workflow': () => workspaceBusinessWorkflowSkillText(targetDir)
|
|
742
|
+
};
|
|
743
|
+
for (const skillName of skillNames) {
|
|
744
|
+
const sourceSkill = path.join(sourceRoot, skillName, 'SKILL.md');
|
|
745
|
+
if (!fs.existsSync(sourceSkill)) throw new Error(`Manifest skill entry is missing: ${skillName}`);
|
|
746
|
+
const skillDir = path.join(WORKSPACE_ROOT, '.claude', 'skills', skillName);
|
|
747
|
+
ensureDir(skillDir);
|
|
748
|
+
const content = writers[skillName] ? writers[skillName]() : fs.readFileSync(sourceSkill, 'utf8');
|
|
749
|
+
fs.writeFileSync(path.join(skillDir, 'SKILL.md'), content, 'utf8');
|
|
750
|
+
}
|
|
751
|
+
return skillNames;
|
|
759
752
|
}
|
|
760
753
|
|
|
761
754
|
function writeClaudeWorkspaceActivation(targetDir) {
|
|
762
755
|
writeWorkspaceMcpConfig(targetDir);
|
|
763
|
-
writeWorkspaceSkillEntries(targetDir);
|
|
756
|
+
const skillNames = writeWorkspaceSkillEntries(targetDir);
|
|
764
757
|
console.log('Wrote Claude/Fmode workspace MCP config: .\\.mcp.json');
|
|
765
|
-
|
|
766
|
-
|
|
767
|
-
|
|
768
|
-
console.log('Wrote workspace skill entry: .\\.claude\\skills\\voc-problem-deep-dive\\SKILL.md');
|
|
769
|
-
console.log('Wrote workspace skill entry: .\\.claude\\skills\\voc-content-plan\\SKILL.md');
|
|
770
|
-
console.log('Wrote workspace skill entry: .\\.claude\\skills\\voc-speaking-script\\SKILL.md');
|
|
771
|
-
console.log('Wrote workspace skill entry: .\\.claude\\skills\\voc-competitor-map\\SKILL.md');
|
|
772
|
-
console.log('Wrote workspace skill entry: .\\.claude\\skills\\voc-business-workflow\\SKILL.md');
|
|
773
|
-
console.log('Wrote workspace skill entry: .\\.claude\\skills\\fmode-image-analysis\\SKILL.md');
|
|
774
|
-
console.log('Wrote workspace skill entry: .\\.claude\\skills\\voc-api-catalog\\SKILL.md');
|
|
758
|
+
for (const skillName of skillNames) {
|
|
759
|
+
console.log(`Wrote workspace skill entry: .\\.claude\\skills\\${skillName}\\SKILL.md`);
|
|
760
|
+
}
|
|
775
761
|
}
|
|
776
762
|
|
|
777
763
|
function writeWorkspaceActivation(targetDir, opts) {
|
package/docs/capability-map.md
CHANGED
|
@@ -4,7 +4,7 @@
|
|
|
4
4
|
|
|
5
5
|
## 一句话定位
|
|
6
6
|
|
|
7
|
-
|
|
7
|
+
把社媒、国内电商/创作者和海外选品接口中的用户与市场数据,转成企业能用的趋势情报、问题优先级、经营动作、内容选题、成本测算和多轮验证记忆。
|
|
8
8
|
|
|
9
9
|
## 用户任务到入口映射
|
|
10
10
|
|
|
@@ -21,6 +21,9 @@
|
|
|
21
21
|
| 用户说某动作不适合 | `voc-problem-deep-dive` | `voc_problem_deep_dive_run`,传 `feedback` | 自动解析为屏蔽动作或偏好动作 |
|
|
22
22
|
| 选中一条内容继续改口播 | `voc-speaking-script` | `voc_speaking_script_run` | 60 秒稿、30 秒稿、提词器版、改稿反馈、定稿记忆 |
|
|
23
23
|
| 下轮继续优化 | 同一 skill | 带同一 `memory`,或带 project/industry/scenario/audience 让工具自动分桶 | 应用历史记忆,避免从零开始 |
|
|
24
|
+
| 查找商品、评论、创作者或选品接口 | `voc-api-catalog` | `voc_api_search` → `voc_api_doc` → `voc_api_call` | 接口、通道、参数、返回数据和本地媒体证据 |
|
|
25
|
+
| 复杂任务执行前做成本和余额测算 | `voc-cost-controller` | `voc_cost_estimate` / `voc_billing_query` | 经济版/标准版/完整版、调用计划、预计额度、差额和建议充值 |
|
|
26
|
+
| 查询已完成任务的真实消耗 | `voc-cost-controller` | `voc_usage_report` | 报告/模块/接口维度的频次、quota、用户扣费和成本拆分 |
|
|
24
27
|
|
|
25
28
|
## Fmode Image Analysis Add-on
|
|
26
29
|
|
|
@@ -107,6 +110,31 @@
|
|
|
107
110
|
把这些评论整理成问题池,告诉我哪些问题最影响生意,先改哪个。
|
|
108
111
|
```
|
|
109
112
|
|
|
113
|
+
### `voc-api-catalog`
|
|
114
|
+
|
|
115
|
+
适合:
|
|
116
|
+
|
|
117
|
+
- 查找社媒、电商、创作者和海外选品接口。
|
|
118
|
+
- 读取接口参数、通道和版本建议。
|
|
119
|
+
- 调用清单内接口或用 `rawPath` 调用未登记接口。
|
|
120
|
+
|
|
121
|
+
标准链路:
|
|
122
|
+
|
|
123
|
+
```text
|
|
124
|
+
voc_api_search -> voc_api_doc -> voc_api_call
|
|
125
|
+
```
|
|
126
|
+
|
|
127
|
+
### `voc-cost-controller`
|
|
128
|
+
|
|
129
|
+
适合:
|
|
130
|
+
|
|
131
|
+
- 大规模账号、商品、关键词任务的执行前报价。
|
|
132
|
+
- 经济版、标准版、完整版的采集范围比较。
|
|
133
|
+
- 当前余额、预算上限和余额不足后的充值入口。
|
|
134
|
+
- 执行完成后的报告、模块、步骤和接口用量账单。
|
|
135
|
+
|
|
136
|
+
成本价格以服务端 billing query 返回的当前价目为准;接口目录中的 `billing` 只表示调用单位,不作为人民币价格。
|
|
137
|
+
|
|
110
138
|
## 关键产品原则
|
|
111
139
|
|
|
112
140
|
- 首轮报告是“初步判断”,不是最终结论。
|
|
@@ -115,6 +143,8 @@
|
|
|
115
143
|
- live 失败时给可执行下一步,不暴露原始接口错误。
|
|
116
144
|
- 多轮反馈要进入记忆,让建议越用越贴近客户。
|
|
117
145
|
- 不同行业、不同客户的记忆要隔离。
|
|
146
|
+
- 成本预估是执行前计划,实际扣费以 NewAPI 每次成功调用的计费日志为准。
|
|
147
|
+
- 充值只复用现有 Tokenized Balance 链接或支付二维码;充值完成后重新查询余额并从检查点继续。
|
|
118
148
|
|
|
119
149
|
## 记忆规则
|
|
120
150
|
|
|
@@ -138,13 +168,19 @@
|
|
|
138
168
|
| `mcp/src/server.js` | MCP 工具注册、schema、工具说明 |
|
|
139
169
|
| `mcp/src/tools/*` | CLI/MCP 可调用工具入口 |
|
|
140
170
|
| `mcp/src/features/*` | 趋势报告、单点深挖、记忆、信号提取 |
|
|
171
|
+
| `mcp/catalog/voc-social-endpoints.json` | 1,344 个接口的稳定 ID、通道、参数索引和版本建议 |
|
|
172
|
+
| `mcp/catalog/params/*.json` | 按平台懒加载的详细参数文档 |
|
|
141
173
|
| `mcp/src/core/credentials.js` | token 读取口径 |
|
|
142
174
|
| `mcp/src/core/payment-links.js` | 充值/开通提示 |
|
|
175
|
+
| `mcp/src/core/billing-client.js` / `mcp/src/tools/voc-billing-query-run.js` | 按 Agent 操作计划读取服务端价目、余额、quota 差额和建议充值金额 |
|
|
176
|
+
| `mcp/src/tools/voc-cost-estimate-run.js` | 生成执行前的多档采集计划和成本区间 |
|
|
177
|
+
| `mcp/src/tools/voc-usage-report-run.js` | 查询实际计费日志并按报告、模块、接口拆分 |
|
|
143
178
|
| `mcp/src/core/evidence-quality.js` | 证据质量门槛、无样本降级建议 |
|
|
144
179
|
| `docs/live-manual-acceptance-checklist.md` | live 采集人工验收 |
|
|
145
180
|
| `docs/claude-code-troubleshooting-playbook.md` | Claude Code 故障定位、误报修复、关键词修复和发散排查 |
|
|
146
181
|
| `docs/payment-package-links.md` | 支付链接和套餐入口说明 |
|
|
147
182
|
| `docs/context-budget-implementation-plan.md` | 上下文省 token 工作流 |
|
|
183
|
+
| `docs/voc-cost-metering-and-balance-implementation-spec.md` | VOC 用量核算、任务成本预估、计费 API 与余额看板实施方案 |
|
|
148
184
|
| `docs/deliverables/trend-insight-report.md` | 行业用户洞察趋势清单模板 |
|
|
149
185
|
| `docs/deliverables/competitor-map-report.md` | 竞品图谱与错位机会报告模板 |
|
|
150
186
|
| `docs/deliverables/voc-issue-pool-report.md` | VOC 问题清单与优先级模板 |
|
|
@@ -152,6 +188,7 @@
|
|
|
152
188
|
| `docs/deliverables/seven-day-content-plan.md` | 7 天内容选题与口播脚本模板 |
|
|
153
189
|
| `scripts/smoke-package.js` | 包级 smoke,覆盖 sample、记忆、token、MCP |
|
|
154
190
|
| `scripts/smoke-mcp.js` | MCP 工具发现和基本调用 smoke |
|
|
191
|
+
| `scripts/audit-index.js` | 对比 manifest、技能目录、MCP 注册、版本和文档引用 |
|
|
155
192
|
|
|
156
193
|
## 工作坊输出口径
|
|
157
194
|
|
|
@@ -172,6 +209,7 @@
|
|
|
172
209
|
- `package.json`、`package-lock.json`、`skill-package-manifest.json`、`.claude-plugin/plugin.json`、`mcp/src/server.js` 版本一致。
|
|
173
210
|
- `npm --prefix claude-code-voc-intelligence run mcp:smoke` 通过。
|
|
174
211
|
- `npm --prefix claude-code-voc-intelligence run smoke:package` 通过。
|
|
212
|
+
- `npm --prefix claude-code-voc-intelligence run audit:index` 通过。
|
|
175
213
|
- `npm run claude-voc:build` 通过。
|
|
176
214
|
- npm 发布后 `npm view @vocmarket/voc-skill version` 返回新版本。
|
|
177
215
|
- 测试工作区 `npx --yes @vocmarket/voc-skill@latest workspace --smoke` 通过。
|
|
@@ -8,7 +8,7 @@
|
|
|
8
8
|
- 不依赖 `~/.openclaw/voc-credentials.json`。
|
|
9
9
|
- 如果使用全局配置,只允许使用 `~/.claude/voc-credentials.json`。
|
|
10
10
|
- 上游余额充足,且充值入口可打开:
|
|
11
|
-
`https://app.fmode.cn/dev/
|
|
11
|
+
`https://app.fmode.cn/dev/studio/balance/?token=USER_SESSION_TOKEN`
|
|
12
12
|
|
|
13
13
|
## 小红书 live 最小验收
|
|
14
14
|
|
|
@@ -21,7 +21,7 @@ node ".claude/plugins/voc-intelligence/mcp/src/tools/xiaohongshu-trend-run.js" -
|
|
|
21
21
|
- `status` 为 `ok`,或在无 token/余额不足时返回友好充值提示。
|
|
22
22
|
- 不出现原始 `403`、权限栈、接口响应体。
|
|
23
23
|
- 报告里有证据样本、原帖链接、评论证据。
|
|
24
|
-
- `files` 中包含 Markdown、JSON
|
|
24
|
+
- `files` 中包含 Markdown、JSON 和 `assets/media-manifest.json`;报告媒体引用均为本地 `assets` 路径,manifest 中 `cloudUrl` 必须为 `null`。
|
|
25
25
|
|
|
26
26
|
## 抖音 live 最小验收
|
|
27
27
|
|
|
@@ -35,6 +35,7 @@ node ".claude/plugins/voc-intelligence/mcp/src/tools/douyin-trend-run.js" --coll
|
|
|
35
35
|
- 不出现原始 `403`、权限栈、接口响应体。
|
|
36
36
|
- 报告里有视频证据、原视频链接、评论证据。
|
|
37
37
|
- 输出内容仍是“第一轮初步判断 / 机会假设 / 待确认问题”,不能把首轮样本写成最终结论。
|
|
38
|
+
- 即使传入 `--cache-assets false`,仍必须生成本地 `assets/media-manifest.json`,并出现兼容参数弃用提示。
|
|
38
39
|
|
|
39
40
|
## 抖音搜索错误快速验收
|
|
40
41
|
|
|
@@ -117,7 +117,7 @@ npm run claude-voc:npm-pack
|
|
|
117
117
|
`npm run claude-voc:acceptance` 是更完整的发布前验收,会额外断言 workspace 安装后的:
|
|
118
118
|
|
|
119
119
|
- `.mcp.json` 已生成
|
|
120
|
-
-
|
|
120
|
+
- manifest 中列出的全部 `.claude/skills/*/SKILL.md` 入口已生成(当前 11 个)
|
|
121
121
|
- MCP server 路径是安装后插件目录里的绝对路径
|
|
122
122
|
- `npm pack --dry-run` 能看到关键文件
|
|
123
123
|
|
|
@@ -203,7 +203,7 @@ npm view @vocmarket/voc-skill@0.3.15 version --registry=https://registry.npmjs.o
|
|
|
203
203
|
- 线上 `npm exec --yes --package @vocmarket/voc-skill@latest -- claude-voc workspace --smoke` 已通过。
|
|
204
204
|
- 旧包 `@gangvy/claude-code-voc-intelligence@*` 已标记为 deprecated,安装旧包时会提示改用 `@vocmarket/voc-skill`。
|
|
205
205
|
- 已新增 `npm run claude-voc:acceptance` 一键发布前验收,覆盖包级 smoke、MCP smoke、npm pack dry-run 和 workspace 安装断言。
|
|
206
|
-
-
|
|
206
|
+
- 当前包内包含 11 个 skill、19 个 MCP tools;数量以 `skill-package-manifest.json` 和 `npm run audit:index` 为准。
|
|
207
207
|
- smoke 覆盖 sample report、证据卡、图片缓存、xsec URL 规范化、偏好记忆、no-token 充值提示、祖先 `.env.local` token 读取、抖音搜索入参错误保护、跨行业样例和 MCP tool discovery。
|
|
208
208
|
|
|
209
209
|
## 后续版本同步
|
|
@@ -31,15 +31,15 @@ https://app.fmode.cn/dev/apig-pay/#/workshop
|
|
|
31
31
|
| 情报官实战包 | https://app.fmode.cn/dev/apig-pay/#/workshop/499 | 隐藏直达,适合企业实训 |
|
|
32
32
|
| 情报官团队包 | https://app.fmode.cn/dev/apig-pay/#/workshop/699 | 公开入口,适合团队共用和复盘 |
|
|
33
33
|
|
|
34
|
-
##
|
|
34
|
+
## 数据余额入口
|
|
35
35
|
|
|
36
|
-
当前小红书 live
|
|
36
|
+
当前小红书 live 采集统一从当前用户 NewAPI 余额扣费。用户自助充值使用带 Session Token 的余额页:
|
|
37
37
|
|
|
38
38
|
```text
|
|
39
|
-
https://app.fmode.cn/dev/
|
|
39
|
+
https://app.fmode.cn/dev/studio/balance/?token=USER_SESSION_TOKEN
|
|
40
40
|
```
|
|
41
41
|
|
|
42
|
-
|
|
42
|
+
如果 Agent 已经完成成本测算,也可以直接复用现有 `pay_code2` 链路返回支付二维码。课程和工作坊套餐链接仍只用于套餐购买,不作为数据余额不足时的默认入口。
|
|
43
43
|
|
|
44
44
|
## 技能包安装入口
|
|
45
45
|
|
|
@@ -0,0 +1,96 @@
|
|
|
1
|
+
# 三账号平台成本分析
|
|
2
|
+
|
|
3
|
+
统计时间:2026-08-31 00:00:00 至 2026-09-01 17:53:20(北京时间)
|
|
4
|
+
|
|
5
|
+
本文件只展示平台侧成本估算,不包含用户扣费、毛利或账户充值金额。用户实际扣费见独立 HTML 报告。
|
|
6
|
+
|
|
7
|
+
## 1. 成本总览
|
|
8
|
+
|
|
9
|
+
- 两个计费账户的平台估算成本合计:¥256.06。
|
|
10
|
+
- 林总分身估算成本:¥120.73。
|
|
11
|
+
- 林煌分身与运营 Agent 共享池估算成本:¥135.33。
|
|
12
|
+
- VOC 数据上游成本:约 ¥57.10。
|
|
13
|
+
- 大模型牌价成本:约 ¥198.96。
|
|
14
|
+
|
|
15
|
+
## 2. 成本口径
|
|
16
|
+
|
|
17
|
+
| 成本类型 | 计算方式 | 数据质量 |
|
|
18
|
+
| --- | --- | --- |
|
|
19
|
+
| 小红书 / 社媒 | 按实际转发到上游的端点调用和官方端点价目计算 | 较高 |
|
|
20
|
+
| 淘宝 / 天猫 | 官方日账单暂不可用,按当前端点价目估算 | 估算 |
|
|
21
|
+
| 大模型 | 按 NewAPI 日志中的 `group_ratio` 反推牌价成本 | 估算 |
|
|
22
|
+
|
|
23
|
+
大模型牌价成本不等同于渠道包月、阶梯折扣或最终结算成本。国内电商成本也需要以后续官方账单校准。
|
|
24
|
+
|
|
25
|
+
## 3. 成本构成
|
|
26
|
+
|
|
27
|
+
| 成本模块 | 估算成本 | 占总成本 |
|
|
28
|
+
| --- | ---: | ---: |
|
|
29
|
+
| 林煌分身 + 运营共享池大模型 | ¥135.33 | 52.8% |
|
|
30
|
+
| 林总分身大模型 | ¥63.63 | 24.8% |
|
|
31
|
+
| 小红书 / 社媒数据 | ¥50.90 | 19.9% |
|
|
32
|
+
| 淘宝 / 天猫数据 | 约 ¥6.20 | 2.4% |
|
|
33
|
+
| 合计 | ¥256.06 | 100% |
|
|
34
|
+
|
|
35
|
+
## 4. VOC 上游成本
|
|
36
|
+
|
|
37
|
+
### 4.1 小红书
|
|
38
|
+
|
|
39
|
+
| 接口 | 上游调用 | 估算成本 |
|
|
40
|
+
| --- | ---: | ---: |
|
|
41
|
+
| 获取账号已发布笔记 | 343 | ¥24.70 |
|
|
42
|
+
| 搜索账号 | 102 | ¥7.34 |
|
|
43
|
+
| 获取笔记评论 | 81 | ¥5.83 |
|
|
44
|
+
| 搜索笔记 | 66 | ¥4.75 |
|
|
45
|
+
| 图文笔记详情 | 58 | ¥4.18 |
|
|
46
|
+
| 获取账号信息 | 26 | ¥1.87 |
|
|
47
|
+
| 视频笔记详情 | 20 | ¥1.44 |
|
|
48
|
+
| 子评论 | 10 | ¥0.72 |
|
|
49
|
+
| Web 笔记详情 | 1 | ¥0.07 |
|
|
50
|
+
| 合计 | 707 | ¥50.90 |
|
|
51
|
+
|
|
52
|
+
### 4.2 淘宝 / 天猫
|
|
53
|
+
|
|
54
|
+
| 接口 | 上游调用 | 估算成本 |
|
|
55
|
+
| --- | ---: | ---: |
|
|
56
|
+
| 商品详情 v4 | 8 | 约 ¥1.60 |
|
|
57
|
+
| 商品评论 v3 | 8 | 约 ¥1.60 |
|
|
58
|
+
| 商品详情 v3 | 7 | 约 ¥1.40 |
|
|
59
|
+
| 店铺商品列表 v4 | 5 | 约 ¥1.00 |
|
|
60
|
+
| 商品详情 v2 | 1 | 约 ¥0.20 |
|
|
61
|
+
| 商品详情 v5 | 1 | 约 ¥0.20 |
|
|
62
|
+
| 商品搜索 v1 | 1 | 约 ¥0.20 |
|
|
63
|
+
| 合计 | 31 | 约 ¥6.20 |
|
|
64
|
+
|
|
65
|
+
## 5. 大模型牌价成本
|
|
66
|
+
|
|
67
|
+
### 林总分身
|
|
68
|
+
|
|
69
|
+
| 模型 | 调用 | 估算牌价成本 |
|
|
70
|
+
| --- | ---: | ---: |
|
|
71
|
+
| Claude Sonnet | 153 | ¥59.81 |
|
|
72
|
+
| DeepSeek Flash | 355 | ¥3.76 |
|
|
73
|
+
| Claude Haiku | 5 | ¥0.06 |
|
|
74
|
+
| 合计 | 513 | ¥63.63 |
|
|
75
|
+
|
|
76
|
+
### 林煌分身与运营 Agent 共享池
|
|
77
|
+
|
|
78
|
+
| 模型 | 调用 | 估算牌价成本 |
|
|
79
|
+
| --- | ---: | ---: |
|
|
80
|
+
| GLM Flash | 35 | ¥127.04 |
|
|
81
|
+
| DeepSeek Flash | 305 | ¥8.13 |
|
|
82
|
+
| GPT-4o | 2 | ¥0.15 |
|
|
83
|
+
| 合计 | 342 | ¥135.33 |
|
|
84
|
+
|
|
85
|
+
## 6. 成本侧结论
|
|
86
|
+
|
|
87
|
+
1. VOC 上游成本的最大单项是“小红书账号已发布笔记”,估算 ¥24.70。
|
|
88
|
+
2. 大模型成本明显高于 VOC 数据成本,尤其是共享池 GLM Flash,估算 ¥127.04。
|
|
89
|
+
3. 成本优化应优先关注高频接口和高单次上下文请求,并在后续日志中保留可追踪的执行标识。
|
|
90
|
+
4. 后续需要用渠道实际结算账单校准大模型与国内电商估算值,并在日志中记录成本版本。
|
|
91
|
+
|
|
92
|
+
## 7. 数据边界
|
|
93
|
+
|
|
94
|
+
1. 共享池当前不能拆分林煌分身与运营 Agent。
|
|
95
|
+
2. 当前没有 `usageTraceId/reportId`,报告场景归因依赖账户、接口与执行时间。
|
|
96
|
+
3. 本文件不包含任何 Session Token、API Key、Bot Secret、密码或支付凭证。
|