@vocmarket/voc-skill 0.3.15 → 0.3.16
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 +2 -2
- package/.mcp.json +2 -2
- package/README.md +5 -0
- package/bin/claude-voc.js +15 -0
- package/docs/capability-map.md +6 -0
- package/docs/npm-packaging-notes.md +185 -50
- package/install.js +2 -0
- package/mcp/src/core/evidence-quality.js +1 -1
- package/mcp/src/core/payment-links.js +20 -1
- package/mcp/src/features/douyin-trend/live-collector.js +1 -1
- package/mcp/src/features/fmode-image-analysis/image-analysis.js +427 -0
- package/mcp/src/providers/douyin-api.js +55 -30
- package/mcp/src/providers/xiaohongshu-api.js +44 -22
- package/mcp/src/server.js +75 -1
- package/mcp/src/tools/douyin-trend-run.js +88 -18
- package/mcp/src/tools/fmode-image-analysis.js +69 -0
- package/mcp/src/tools/xiaohongshu-trend-run.js +84 -10
- package/package.json +6 -3
- package/scripts/acceptance.js +91 -0
- package/scripts/fmode-image-analysis-smoke.js +108 -0
- package/scripts/smoke-mcp.js +24 -0
- package/scripts/smoke-package.js +15 -6
- package/skill-package-manifest.json +6 -3
- package/skills/douyin-trend-intelligence/SKILL.md +19 -3
- package/skills/douyin-trend-intelligence/references/live-mode.md +7 -6
- package/skills/fmode-image-analysis/SKILL.md +106 -0
- package/skills/fmode-image-analysis/agents/openai.yaml +4 -0
- package/skills/xiaohongshu-trend-intelligence/SKILL.md +16 -0
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "voc-intelligence",
|
|
3
|
-
"description": "VOC intelligence skills for Claude Code: end-to-end VOC business workflows, Xiaohongshu and Douyin trend reports, live social VOC collection, 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.
|
|
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.16",
|
|
5
5
|
"author": {
|
|
6
6
|
"name": "nkkj-BrainHack"
|
|
7
7
|
}
|
package/.mcp.json
CHANGED
|
@@ -3,9 +3,9 @@
|
|
|
3
3
|
"voc": {
|
|
4
4
|
"command": "node",
|
|
5
5
|
"args": [
|
|
6
|
-
"E:\\workspace\\openclaw-voc-skill\\claude-code-voc-intelligence\\mcp\\src\\server.js"
|
|
6
|
+
"E:\\workspace\\openclaw-voc-skill\\claude-code\\claude-code-voc-intelligence\\mcp\\src\\server.js"
|
|
7
7
|
],
|
|
8
|
-
"cwd": "E:\\workspace\\openclaw-voc-skill\\claude-code-voc-intelligence"
|
|
8
|
+
"cwd": "E:\\workspace\\openclaw-voc-skill\\claude-code\\claude-code-voc-intelligence"
|
|
9
9
|
}
|
|
10
10
|
}
|
|
11
11
|
}
|
package/README.md
CHANGED
|
@@ -110,6 +110,7 @@ npx --yes @vocmarket/voc-skill@latest workspace --smoke
|
|
|
110
110
|
.claude/skills/voc-speaking-script/SKILL.md
|
|
111
111
|
.claude/skills/voc-competitor-map/SKILL.md
|
|
112
112
|
.claude/skills/voc-business-workflow/SKILL.md
|
|
113
|
+
.claude/skills/fmode-image-analysis/SKILL.md
|
|
113
114
|
.claude/plugins/voc-intelligence
|
|
114
115
|
```
|
|
115
116
|
|
|
@@ -186,9 +187,11 @@ npx --yes @vocmarket/voc-skill@latest install --smoke
|
|
|
186
187
|
- `voc-speaking-script`
|
|
187
188
|
- `voc-competitor-map`
|
|
188
189
|
- `voc-business-workflow`
|
|
190
|
+
- `fmode-image-analysis`
|
|
189
191
|
|
|
190
192
|
MCP 工具:
|
|
191
193
|
|
|
194
|
+
- `fmode_image_analysis`
|
|
192
195
|
- `voc_business_workflow_run`
|
|
193
196
|
- `voc_xiaohongshu_trend_run`
|
|
194
197
|
- `voc_xiaohongshu_preference_update`
|
|
@@ -207,6 +210,8 @@ MCP 工具:
|
|
|
207
210
|
```powershell
|
|
208
211
|
npm --prefix claude-code-voc-intelligence run xhs:sample
|
|
209
212
|
npm --prefix claude-code-voc-intelligence run dy:sample
|
|
213
|
+
npm --prefix claude-code-voc-intelligence run fmode:image:smoke
|
|
214
|
+
claude-voc image --image-path E:\workspace\example\screenshot.png --prompt "识别截图里的文字、主体和风险点"
|
|
210
215
|
npm --prefix claude-code-voc-intelligence run voc:issue-pool
|
|
211
216
|
npm --prefix claude-code-voc-intelligence run voc:deep-dive
|
|
212
217
|
npm --prefix claude-code-voc-intelligence run voc:business-workflow
|
package/bin/claude-voc.js
CHANGED
|
@@ -15,6 +15,7 @@ const EXCLUDED_DIRS = new Set([
|
|
|
15
15
|
'node_modules',
|
|
16
16
|
'memory',
|
|
17
17
|
'outputs',
|
|
18
|
+
'.npm-cache-acceptance',
|
|
18
19
|
'.tmp',
|
|
19
20
|
'.git',
|
|
20
21
|
'.claude'
|
|
@@ -36,6 +37,7 @@ function usage() {
|
|
|
36
37
|
' claude-voc install --workspace --smoke',
|
|
37
38
|
' claude-voc check',
|
|
38
39
|
' claude-voc smoke',
|
|
40
|
+
' claude-voc image --image-path <file> --prompt <text>',
|
|
39
41
|
' claude-voc path',
|
|
40
42
|
'',
|
|
41
43
|
'npx:',
|
|
@@ -181,6 +183,8 @@ function assertInstalled(targetDir) {
|
|
|
181
183
|
'skills/voc-speaking-script/SKILL.md',
|
|
182
184
|
'skills/voc-competitor-map/SKILL.md',
|
|
183
185
|
'skills/voc-business-workflow/SKILL.md',
|
|
186
|
+
'skills/fmode-image-analysis/SKILL.md',
|
|
187
|
+
'mcp/src/tools/fmode-image-analysis.js',
|
|
184
188
|
'mcp/src/server.js'
|
|
185
189
|
];
|
|
186
190
|
const missing = required.filter(rel => !fs.existsSync(path.join(targetDir, rel)));
|
|
@@ -641,6 +645,7 @@ function writeWorkspaceSkillEntries(targetDir) {
|
|
|
641
645
|
const speakingScriptSkillDir = path.join(WORKSPACE_ROOT, '.claude', 'skills', 'voc-speaking-script');
|
|
642
646
|
const competitorMapSkillDir = path.join(WORKSPACE_ROOT, '.claude', 'skills', 'voc-competitor-map');
|
|
643
647
|
const businessWorkflowSkillDir = path.join(WORKSPACE_ROOT, '.claude', 'skills', 'voc-business-workflow');
|
|
648
|
+
const fmodeImageSkillDir = path.join(WORKSPACE_ROOT, '.claude', 'skills', 'fmode-image-analysis');
|
|
644
649
|
ensureDir(xhsSkillDir);
|
|
645
650
|
ensureDir(douyinSkillDir);
|
|
646
651
|
ensureDir(issuePoolSkillDir);
|
|
@@ -649,6 +654,7 @@ function writeWorkspaceSkillEntries(targetDir) {
|
|
|
649
654
|
ensureDir(speakingScriptSkillDir);
|
|
650
655
|
ensureDir(competitorMapSkillDir);
|
|
651
656
|
ensureDir(businessWorkflowSkillDir);
|
|
657
|
+
ensureDir(fmodeImageSkillDir);
|
|
652
658
|
fs.writeFileSync(path.join(xhsSkillDir, 'SKILL.md'), workspaceSkillText(targetDir), 'utf8');
|
|
653
659
|
fs.writeFileSync(path.join(douyinSkillDir, 'SKILL.md'), workspaceDouyinSkillText(targetDir), 'utf8');
|
|
654
660
|
fs.writeFileSync(path.join(issuePoolSkillDir, 'SKILL.md'), workspaceIssuePoolSkillText(targetDir), 'utf8');
|
|
@@ -657,6 +663,7 @@ function writeWorkspaceSkillEntries(targetDir) {
|
|
|
657
663
|
fs.writeFileSync(path.join(speakingScriptSkillDir, 'SKILL.md'), workspaceSpeakingScriptSkillText(targetDir), 'utf8');
|
|
658
664
|
fs.writeFileSync(path.join(competitorMapSkillDir, 'SKILL.md'), workspaceCompetitorMapSkillText(targetDir), 'utf8');
|
|
659
665
|
fs.writeFileSync(path.join(businessWorkflowSkillDir, 'SKILL.md'), workspaceBusinessWorkflowSkillText(targetDir), 'utf8');
|
|
666
|
+
fs.copyFileSync(path.join(targetDir, 'skills', 'fmode-image-analysis', 'SKILL.md'), path.join(fmodeImageSkillDir, 'SKILL.md'));
|
|
660
667
|
}
|
|
661
668
|
|
|
662
669
|
function writeWorkspaceActivation(targetDir) {
|
|
@@ -672,6 +679,7 @@ function writeWorkspaceActivation(targetDir) {
|
|
|
672
679
|
console.log('Wrote workspace skill entry: .\\.claude\\skills\\voc-speaking-script\\SKILL.md');
|
|
673
680
|
console.log('Wrote workspace skill entry: .\\.claude\\skills\\voc-competitor-map\\SKILL.md');
|
|
674
681
|
console.log('Wrote workspace skill entry: .\\.claude\\skills\\voc-business-workflow\\SKILL.md');
|
|
682
|
+
console.log('Wrote workspace skill entry: .\\.claude\\skills\\fmode-image-analysis\\SKILL.md');
|
|
675
683
|
}
|
|
676
684
|
|
|
677
685
|
function printNextSteps(targetDir) {
|
|
@@ -692,6 +700,7 @@ function printNextSteps(targetDir) {
|
|
|
692
700
|
console.log(' .\\.claude\\skills\\voc-speaking-script\\SKILL.md');
|
|
693
701
|
console.log(' .\\.claude\\skills\\voc-competitor-map\\SKILL.md');
|
|
694
702
|
console.log(' .\\.claude\\skills\\voc-business-workflow\\SKILL.md');
|
|
703
|
+
console.log(' .\\.claude\\skills\\fmode-image-analysis\\SKILL.md');
|
|
695
704
|
console.log(' .\\.claude\\plugins\\voc-intelligence');
|
|
696
705
|
console.log('');
|
|
697
706
|
console.log('Restart the VSCode Claude Code session if it was already open.');
|
|
@@ -769,6 +778,12 @@ function printPath(opts) {
|
|
|
769
778
|
}
|
|
770
779
|
|
|
771
780
|
function main() {
|
|
781
|
+
const directCommand = process.argv[2];
|
|
782
|
+
if (directCommand === 'image' || directCommand === 'fmode-image') {
|
|
783
|
+
run(process.execPath, ['mcp/src/tools/fmode-image-analysis.js', ...process.argv.slice(3)], SOURCE_ROOT);
|
|
784
|
+
return;
|
|
785
|
+
}
|
|
786
|
+
|
|
772
787
|
const opts = parseArgs(process.argv.slice(2));
|
|
773
788
|
if (opts.help || opts.command === 'help') {
|
|
774
789
|
console.log(usage());
|
package/docs/capability-map.md
CHANGED
|
@@ -22,6 +22,12 @@
|
|
|
22
22
|
| 选中一条内容继续改口播 | `voc-speaking-script` | `voc_speaking_script_run` | 60 秒稿、30 秒稿、提词器版、改稿反馈、定稿记忆 |
|
|
23
23
|
| 下轮继续优化 | 同一 skill | 带同一 `memory`,或带 project/industry/scenario/audience 让工具自动分桶 | 应用历史记忆,避免从零开始 |
|
|
24
24
|
|
|
25
|
+
## Fmode Image Analysis Add-on
|
|
26
|
+
|
|
27
|
+
| 能力 | 推荐入口 | MCP 工具 | 输出重点 |
|
|
28
|
+
| --- | --- | --- | --- |
|
|
29
|
+
| 图片识别/截图分析 | `fmode-image-analysis` | `fmode_image_analysis` | 使用平台用户 token 调用 Fmode Doubao vision,默认模型 `doubao-seed-2-0-pro-260215` |
|
|
30
|
+
|
|
25
31
|
## 技能入口
|
|
26
32
|
|
|
27
33
|
### `voc-business-workflow`
|
|
@@ -1,93 +1,228 @@
|
|
|
1
|
-
# Claude Code VOC 技能包 npm
|
|
1
|
+
# Claude Code VOC 技能包 npm 打包与发布说明
|
|
2
2
|
|
|
3
|
-
##
|
|
3
|
+
## 当前包名
|
|
4
4
|
|
|
5
|
-
|
|
5
|
+
VOC 技能包当前对外 npm 包名:
|
|
6
6
|
|
|
7
|
-
|
|
8
|
-
-
|
|
7
|
+
```bash
|
|
8
|
+
@vocmarket/voc-skill
|
|
9
|
+
```
|
|
9
10
|
|
|
10
|
-
|
|
11
|
+
CLI 命令保持不变:
|
|
11
12
|
|
|
12
13
|
```bash
|
|
13
|
-
|
|
14
|
-
claude-voc install
|
|
14
|
+
claude-voc
|
|
15
15
|
```
|
|
16
16
|
|
|
17
|
-
|
|
17
|
+
插件安装目录也保持不变:
|
|
18
18
|
|
|
19
|
-
```
|
|
20
|
-
|
|
19
|
+
```text
|
|
20
|
+
voc-intelligence
|
|
21
21
|
```
|
|
22
22
|
|
|
23
|
-
|
|
23
|
+
这样做的目的:对外包名更短、更适合课程和市场传播;同时不破坏已经沉淀好的 Claude Code 插件目录、MCP server 名称和 skill 入口。
|
|
24
24
|
|
|
25
|
-
|
|
25
|
+
## 用户安装方式
|
|
26
26
|
|
|
27
|
-
|
|
27
|
+
推荐给 VSCode Claude Code 使用工作区安装:
|
|
28
|
+
|
|
29
|
+
```powershell
|
|
30
|
+
npx --yes @vocmarket/voc-skill@latest workspace --smoke
|
|
31
|
+
```
|
|
32
|
+
|
|
33
|
+
工作区安装会写入:
|
|
28
34
|
|
|
29
35
|
```text
|
|
30
|
-
|
|
36
|
+
.\.mcp.json
|
|
37
|
+
.\.claude\plugins\voc-intelligence
|
|
38
|
+
.\.claude\skills\xiaohongshu-trend-intelligence\SKILL.md
|
|
39
|
+
.\.claude\skills\douyin-trend-intelligence\SKILL.md
|
|
40
|
+
.\.claude\skills\voc-issue-pool\SKILL.md
|
|
41
|
+
.\.claude\skills\voc-problem-deep-dive\SKILL.md
|
|
42
|
+
.\.claude\skills\voc-content-plan\SKILL.md
|
|
43
|
+
.\.claude\skills\voc-speaking-script\SKILL.md
|
|
44
|
+
.\.claude\skills\voc-competitor-map\SKILL.md
|
|
45
|
+
.\.claude\skills\voc-business-workflow\SKILL.md
|
|
31
46
|
```
|
|
32
47
|
|
|
33
|
-
|
|
48
|
+
全局安装:
|
|
34
49
|
|
|
35
|
-
```
|
|
36
|
-
|
|
50
|
+
```powershell
|
|
51
|
+
npm install -g @vocmarket/voc-skill
|
|
52
|
+
claude-voc install
|
|
37
53
|
```
|
|
38
54
|
|
|
39
|
-
|
|
55
|
+
npx 免全局安装:
|
|
40
56
|
|
|
41
|
-
|
|
57
|
+
```powershell
|
|
58
|
+
npx --yes @vocmarket/voc-skill@latest install
|
|
59
|
+
```
|
|
42
60
|
|
|
43
|
-
|
|
44
|
-
- CLI 入口:
|
|
61
|
+
## package.json 要点
|
|
45
62
|
|
|
46
63
|
```json
|
|
47
64
|
{
|
|
65
|
+
"name": "@vocmarket/voc-skill",
|
|
48
66
|
"bin": {
|
|
49
67
|
"claude-voc": "bin/claude-voc.js"
|
|
68
|
+
},
|
|
69
|
+
"publishConfig": {
|
|
70
|
+
"access": "public"
|
|
50
71
|
}
|
|
51
72
|
}
|
|
52
73
|
```
|
|
53
74
|
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
75
|
+
`files` 必须显式包含:
|
|
76
|
+
|
|
77
|
+
- `.claude-plugin/`
|
|
78
|
+
- `.mcp.json`
|
|
79
|
+
- `bin/`
|
|
80
|
+
- `docs/`
|
|
81
|
+
- `install.js`
|
|
82
|
+
- `mcp/`
|
|
83
|
+
- `memory-templates/`
|
|
84
|
+
- `package.json`
|
|
85
|
+
- `scripts/`
|
|
86
|
+
- `skill-package-manifest.json`
|
|
87
|
+
- `skills/`
|
|
88
|
+
|
|
89
|
+
不要发布:
|
|
90
|
+
|
|
91
|
+
- `.env`
|
|
92
|
+
- `.env.local`
|
|
93
|
+
- `.npmrc`
|
|
94
|
+
- `node_modules/`
|
|
95
|
+
- `memory/`
|
|
96
|
+
- `outputs/`
|
|
97
|
+
- 本地 smoke 临时目录
|
|
98
|
+
|
|
99
|
+
## 发布前验证
|
|
100
|
+
|
|
101
|
+
在仓库根目录执行:
|
|
102
|
+
|
|
103
|
+
```powershell
|
|
104
|
+
npm --prefix claude-code/claude-code-voc-intelligence run mcp:smoke
|
|
105
|
+
npm --prefix claude-code/claude-code-voc-intelligence run smoke:package
|
|
106
|
+
npm run claude-voc:acceptance
|
|
107
|
+
npm run claude-voc:build
|
|
108
|
+
npm run claude-voc:npm-pack
|
|
109
|
+
```
|
|
64
110
|
|
|
65
|
-
|
|
111
|
+
`npm run claude-voc:npm-pack` 会做三类验证:
|
|
66
112
|
|
|
67
|
-
|
|
113
|
+
1. 校验 npm package metadata、CLI 入口和必要文件。
|
|
114
|
+
2. 生成 `dist/npm/vocmarket-voc-skill-<version>.tgz`。
|
|
115
|
+
3. 在临时目录模拟 npm install、npx install、workspace install,并执行 `--smoke`。
|
|
68
116
|
|
|
69
|
-
|
|
70
|
-
npm run claude-voc:npm-pack
|
|
71
|
-
```
|
|
117
|
+
`npm run claude-voc:acceptance` 是更完整的发布前验收,会额外断言 workspace 安装后的:
|
|
72
118
|
|
|
73
|
-
|
|
119
|
+
- `.mcp.json` 已生成
|
|
120
|
+
- 8 个 `.claude/skills/*/SKILL.md` 入口已生成
|
|
121
|
+
- MCP server 路径是安装后插件目录里的绝对路径
|
|
122
|
+
- `npm pack --dry-run` 能看到关键文件
|
|
74
123
|
|
|
75
|
-
|
|
76
|
-
2. 生成 `dist/npm/*.tgz`。
|
|
77
|
-
3. 在临时目录里模拟 npm 安装,并执行 `claude-voc install --smoke`。
|
|
124
|
+
## 正式发布
|
|
78
125
|
|
|
79
|
-
|
|
126
|
+
推荐使用 release 脚本:
|
|
80
127
|
|
|
81
|
-
```
|
|
128
|
+
```powershell
|
|
129
|
+
powershell -ExecutionPolicy Bypass -File release/npm/claude-code-voc-intelligence/publish.ps1
|
|
130
|
+
```
|
|
131
|
+
|
|
132
|
+
也可以直接执行:
|
|
133
|
+
|
|
134
|
+
```powershell
|
|
82
135
|
npm run claude-voc:npm-publish
|
|
83
136
|
```
|
|
84
137
|
|
|
85
|
-
|
|
138
|
+
发布脚本会读取以下位置的 token:
|
|
139
|
+
|
|
140
|
+
```text
|
|
141
|
+
release/npm/claude-code-voc-intelligence/.env.local
|
|
142
|
+
```
|
|
143
|
+
|
|
144
|
+
文件内容格式:
|
|
145
|
+
|
|
146
|
+
```text
|
|
147
|
+
NPM_TOKEN=你的 npm automation token
|
|
148
|
+
```
|
|
149
|
+
|
|
150
|
+
也支持环境变量:
|
|
151
|
+
|
|
152
|
+
```powershell
|
|
153
|
+
$env:NPM_TOKEN="你的 npm automation token"
|
|
154
|
+
```
|
|
155
|
+
|
|
156
|
+
不要提交 `.env.local`、npm token、VOC session token、模型 API key 或任何真实用户凭证。
|
|
157
|
+
|
|
158
|
+
## 发布后验证
|
|
159
|
+
|
|
160
|
+
确认 npm latest:
|
|
161
|
+
|
|
162
|
+
```powershell
|
|
163
|
+
npm view @vocmarket/voc-skill name version dist-tags.latest --registry=https://registry.npmjs.org/
|
|
164
|
+
```
|
|
165
|
+
|
|
166
|
+
线上安装 smoke:
|
|
167
|
+
|
|
168
|
+
```powershell
|
|
169
|
+
$test = Join-Path $env:TEMP ("vocmarket-online-smoke-" + [guid]::NewGuid())
|
|
170
|
+
New-Item -ItemType Directory -Path $test | Out-Null
|
|
171
|
+
Push-Location $test
|
|
172
|
+
npm exec --yes --package @vocmarket/voc-skill@latest -- claude-voc workspace --smoke
|
|
173
|
+
Pop-Location
|
|
174
|
+
```
|
|
175
|
+
|
|
176
|
+
## npm 发布假失败处理
|
|
177
|
+
|
|
178
|
+
有时 `npm publish` 已经返回成功,例如:
|
|
179
|
+
|
|
180
|
+
```text
|
|
181
|
+
+ @vocmarket/voc-skill@0.3.15
|
|
182
|
+
```
|
|
183
|
+
|
|
184
|
+
但脚本紧接着执行 `npm view` 时,registry 还没同步完成,会短暂返回 404。
|
|
185
|
+
|
|
186
|
+
处理方式:
|
|
187
|
+
|
|
188
|
+
1. 等 20-60 秒后重新执行:
|
|
189
|
+
|
|
190
|
+
```powershell
|
|
191
|
+
npm view @vocmarket/voc-skill@0.3.15 version --registry=https://registry.npmjs.org/
|
|
192
|
+
```
|
|
193
|
+
|
|
194
|
+
2. 如果返回版本号,说明发布已经成功,不要重复发布同一个版本。
|
|
195
|
+
3. 如果持续 404,再检查 npm 组织权限、token 权限和包名 scope。
|
|
196
|
+
|
|
197
|
+
当前发布脚本已经把后置校验等待次数从 6 次增加到 12 次,减少这种假失败。
|
|
198
|
+
|
|
199
|
+
## 当前发布记录
|
|
200
|
+
|
|
201
|
+
- 2026-06-05:已发布 `@vocmarket/voc-skill@0.3.15`。
|
|
202
|
+
- `npm view @vocmarket/voc-skill name version dist-tags.latest` 返回 `0.3.15`。
|
|
203
|
+
- 线上 `npm exec --yes --package @vocmarket/voc-skill@latest -- claude-voc workspace --smoke` 已通过。
|
|
204
|
+
- 旧包 `@gangvy/claude-code-voc-intelligence@*` 已标记为 deprecated,安装旧包时会提示改用 `@vocmarket/voc-skill`。
|
|
205
|
+
- 已新增 `npm run claude-voc:acceptance` 一键发布前验收,覆盖包级 smoke、MCP smoke、npm pack dry-run 和 workspace 安装断言。
|
|
206
|
+
- 包内包含 8 个 skill、12 个 MCP tools。
|
|
207
|
+
- smoke 覆盖 sample report、证据卡、图片缓存、xsec URL 规范化、偏好记忆、no-token 充值提示、祖先 `.env.local` token 读取、抖音搜索入参错误保护、跨行业样例和 MCP tool discovery。
|
|
208
|
+
|
|
209
|
+
## 后续版本同步
|
|
210
|
+
|
|
211
|
+
升级版本时同步修改:
|
|
212
|
+
|
|
213
|
+
- `claude-code/claude-code-voc-intelligence/package.json`
|
|
214
|
+
- `claude-code/claude-code-voc-intelligence/package-lock.json`
|
|
215
|
+
- `claude-code/claude-code-voc-intelligence/skill-package-manifest.json`
|
|
216
|
+
- `claude-code/claude-code-voc-intelligence/.claude-plugin/plugin.json`
|
|
217
|
+
- 如涉及 MCP server 或记忆 schema,同步对应版本字段
|
|
218
|
+
- `dist/npm/claude-code-voc-npm-package-manifest.json`
|
|
219
|
+
- `dist/claude-code-voc-intelligence-suite-manifest.json`
|
|
220
|
+
- `release/npm/claude-code-voc-intelligence/README.md`
|
|
221
|
+
- `release/npm/claude-code-voc-intelligence/release-checklist.md`
|
|
86
222
|
|
|
87
|
-
##
|
|
223
|
+
## 体验原则
|
|
88
224
|
|
|
89
|
-
-
|
|
90
|
-
-
|
|
91
|
-
-
|
|
92
|
-
-
|
|
93
|
-
|
|
225
|
+
- 用户侧不要暴露 `profile`、`output`、`collectionMode` 等底层参数。
|
|
226
|
+
- 用户用自然语言触发 VOC 采集、问题池、单点深挖、内容计划和口播脚本。
|
|
227
|
+
- 第一轮真实采集只输出“初步判断 / 机会假设 / 待校准”,不要包装成最终结论。
|
|
228
|
+
- 无 token、余额不足、业务权限未开通时,返回开通/充值引导,不直接暴露底层 403、余额接口或 stack trace。
|
package/install.js
CHANGED
|
@@ -111,6 +111,8 @@ function checkFiles() {
|
|
|
111
111
|
'skills/voc-speaking-script/SKILL.md',
|
|
112
112
|
'skills/voc-competitor-map/SKILL.md',
|
|
113
113
|
'skills/voc-business-workflow/SKILL.md',
|
|
114
|
+
'skills/fmode-image-analysis/SKILL.md',
|
|
115
|
+
'mcp/src/tools/fmode-image-analysis.js',
|
|
114
116
|
'mcp/src/server.js'
|
|
115
117
|
].forEach(assertFile);
|
|
116
118
|
|
|
@@ -87,7 +87,7 @@ function buildNoSampleFallbackMessage({ platformLabel, profile, examples = [] })
|
|
|
87
87
|
return [
|
|
88
88
|
`本次 live 模式没有采到可用于分析的${platformLabel}样本。`,
|
|
89
89
|
'',
|
|
90
|
-
'
|
|
90
|
+
'说明:这不是类目限制,也不是“系统只支持某些行业”——任何行业(含律师、法律、医美、教育、专业服务等)都能采集。更可能是关键词过窄、平台内容表达不一样,或本轮上游没有返回可用内容。',
|
|
91
91
|
'',
|
|
92
92
|
'建议按这三步继续:',
|
|
93
93
|
`1. 先保留当前方向:${keywords}`,
|
|
@@ -105,6 +105,24 @@ function buildRechargeRequiredMessage(paymentUrl, recharge = {}, options = {}) {
|
|
|
105
105
|
].join('\n');
|
|
106
106
|
}
|
|
107
107
|
|
|
108
|
+
function buildWrongTokenTypeMessage(paymentUrl, recharge = {}, options = {}) {
|
|
109
|
+
const platformLabel = options.platformLabel || '小红书';
|
|
110
|
+
const packageUrl = recharge.recommendedPackageUrl || recharge.workshopUrl || paymentUrl;
|
|
111
|
+
return [
|
|
112
|
+
`检测到配置的是 sk- 开头的 AIGate API Key,这不是 ${platformLabel} 数据采集所需的 token,暂时不能进行真实采集。`,
|
|
113
|
+
'',
|
|
114
|
+
'这不是关键词或类目问题:任何关键词(含律师、法律、专业服务等)都可以采集,只要 token 类型正确并已开通额度。',
|
|
115
|
+
'',
|
|
116
|
+
`${platformLabel} 采集需要从充值/开通页复制的、以 r: 开头的会话 token(session token),不是 sk- 开头的 AIGate Key。`,
|
|
117
|
+
'',
|
|
118
|
+
`请打开充值/开通链接:${paymentUrl}`,
|
|
119
|
+
'',
|
|
120
|
+
`课程或工作坊用户也可以打开套餐入口:${packageUrl}`,
|
|
121
|
+
'',
|
|
122
|
+
'把以 r: 开头的 session token 配置到当前工作区 `.env.local` 或 `~/.claude/voc-credentials.json`(键名 vocToken / VOC_TOKEN),再重新运行 live 采集。'
|
|
123
|
+
].join('\n');
|
|
124
|
+
}
|
|
125
|
+
|
|
108
126
|
module.exports = {
|
|
109
127
|
VOC_SOCIAL_APIG_ID,
|
|
110
128
|
VOC_RECHARGE_FUN_ID,
|
|
@@ -113,5 +131,6 @@ module.exports = {
|
|
|
113
131
|
buildVocRechargeUrl,
|
|
114
132
|
buildVocWorkshopUrl,
|
|
115
133
|
buildMissingTokenMessage,
|
|
116
|
-
buildRechargeRequiredMessage
|
|
134
|
+
buildRechargeRequiredMessage,
|
|
135
|
+
buildWrongTokenTypeMessage
|
|
117
136
|
};
|
|
@@ -318,7 +318,7 @@ async function collectLiveDataset({ profile, token, options = {} }) {
|
|
|
318
318
|
errors.push({
|
|
319
319
|
stage: 'search_videos',
|
|
320
320
|
kind: 'invalid_keyword',
|
|
321
|
-
message: '
|
|
321
|
+
message: '请提供至少一个可用于抖音搜索的关键词(任何行业都可以,例如“<品类/服务> <人群> <场景>”这种自然短语)。',
|
|
322
322
|
httpStatus: 0
|
|
323
323
|
});
|
|
324
324
|
return { videos, comments, warnings, errors, keywords };
|