@vocmarket/voc-skill 0.3.20 → 0.3.21
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.
|
@@ -66,11 +66,10 @@ npx @vocmarket/voc-skill@latest workspace --smoke
|
|
|
66
66
|
技能包会按以下顺序读取 token:
|
|
67
67
|
|
|
68
68
|
```text
|
|
69
|
-
工具入参 vocToken /
|
|
70
|
-
workspace .env.local
|
|
71
|
-
VOC_TOKEN
|
|
72
|
-
|
|
73
|
-
~/.claude/voc-credentials.json
|
|
69
|
+
工具入参 vocToken(兼容 xiaohongshuToken / douyinToken)
|
|
70
|
+
workspace .env.local 的 VOC_TOKEN / VOC_SOCIAL_TOKEN
|
|
71
|
+
环境变量 VOC_TOKEN / VOC_SOCIAL_TOKEN
|
|
72
|
+
~/.claude/voc-credentials.json 的 vocToken / token
|
|
74
73
|
```
|
|
75
74
|
|
|
76
75
|
注意:
|
|
@@ -68,33 +68,21 @@ function readVocToken(input = {}) {
|
|
|
68
68
|
const workspaceEnv = readEnvLocalFiles();
|
|
69
69
|
const claudeCreds = readJsonMaybe(path.join(os.homedir(), '.claude', 'voc-credentials.json'));
|
|
70
70
|
return firstNonEmpty([
|
|
71
|
+
input.vocToken,
|
|
71
72
|
input.xiaohongshuToken,
|
|
72
73
|
input.douyinToken,
|
|
73
|
-
input
|
|
74
|
+
input['voc-token'],
|
|
74
75
|
input['xiaohongshu-token'],
|
|
75
76
|
input['douyin-token'],
|
|
76
|
-
input['voc-token'],
|
|
77
77
|
input.token,
|
|
78
78
|
input.apiToken,
|
|
79
79
|
input['api-token'],
|
|
80
80
|
workspaceEnv.VOC_TOKEN,
|
|
81
81
|
workspaceEnv.VOC_SOCIAL_TOKEN,
|
|
82
|
-
workspaceEnv.XIAOHONGSHU_API_TOKEN,
|
|
83
|
-
workspaceEnv.DOUYIN_API_TOKEN,
|
|
84
|
-
workspaceEnv.DOUYIN_TOKEN,
|
|
85
|
-
workspaceEnv.VOC_DOUYIN_TOKEN,
|
|
86
82
|
process.env.VOC_TOKEN,
|
|
87
83
|
process.env.VOC_SOCIAL_TOKEN,
|
|
88
|
-
process.env.XIAOHONGSHU_API_TOKEN,
|
|
89
|
-
process.env.DOUYIN_API_TOKEN,
|
|
90
|
-
process.env.DOUYIN_TOKEN,
|
|
91
|
-
process.env.VOC_DOUYIN_TOKEN,
|
|
92
|
-
process.env.FMODE_XIAOHONGSHU_TOKEN,
|
|
93
|
-
process.env.FMODE_SOCIAL_TOKEN,
|
|
94
84
|
claudeCreds.vocToken,
|
|
95
85
|
claudeCreds.token,
|
|
96
|
-
claudeCreds.xiaohongshuToken,
|
|
97
|
-
claudeCreds.douyinToken,
|
|
98
86
|
]);
|
|
99
87
|
}
|
|
100
88
|
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@vocmarket/voc-skill",
|
|
3
|
-
"version": "0.3.
|
|
3
|
+
"version": "0.3.21",
|
|
4
4
|
"description": "Claude Code VOC intelligence skills for Xiaohongshu and Douyin trend reports, live social VOC collection, Fmode image analysis, single-issue deep dives, boss/operator action plans, and multi-turn memory.",
|
|
5
5
|
"type": "commonjs",
|
|
6
6
|
"bin": {
|
package/scripts/smoke-package.js
CHANGED
|
@@ -94,12 +94,6 @@ async function smokeNoTokenRechargePrompt() {
|
|
|
94
94
|
HOME: process.env.HOME,
|
|
95
95
|
VOC_TOKEN: process.env.VOC_TOKEN,
|
|
96
96
|
VOC_SOCIAL_TOKEN: process.env.VOC_SOCIAL_TOKEN,
|
|
97
|
-
XIAOHONGSHU_API_TOKEN: process.env.XIAOHONGSHU_API_TOKEN,
|
|
98
|
-
FMODE_XIAOHONGSHU_TOKEN: process.env.FMODE_XIAOHONGSHU_TOKEN,
|
|
99
|
-
FMODE_SOCIAL_TOKEN: process.env.FMODE_SOCIAL_TOKEN,
|
|
100
|
-
DOUYIN_API_TOKEN: process.env.DOUYIN_API_TOKEN,
|
|
101
|
-
DOUYIN_TOKEN: process.env.DOUYIN_TOKEN,
|
|
102
|
-
VOC_DOUYIN_TOKEN: process.env.VOC_DOUYIN_TOKEN
|
|
103
97
|
};
|
|
104
98
|
const tempHome = path.join(os.tmpdir(), 'claude-voc-no-token-smoke');
|
|
105
99
|
const tempWorkspace = path.join(os.tmpdir(), 'claude-voc-no-token-workspace-smoke');
|
|
@@ -112,12 +106,6 @@ async function smokeNoTokenRechargePrompt() {
|
|
|
112
106
|
[
|
|
113
107
|
'VOC_TOKEN',
|
|
114
108
|
'VOC_SOCIAL_TOKEN',
|
|
115
|
-
'XIAOHONGSHU_API_TOKEN',
|
|
116
|
-
'FMODE_XIAOHONGSHU_TOKEN',
|
|
117
|
-
'FMODE_SOCIAL_TOKEN',
|
|
118
|
-
'DOUYIN_API_TOKEN',
|
|
119
|
-
'DOUYIN_TOKEN',
|
|
120
|
-
'VOC_DOUYIN_TOKEN'
|
|
121
109
|
].forEach(key => delete process.env[key]);
|
|
122
110
|
const result = await runXiaohongshuTrend({
|
|
123
111
|
collectionMode: 'live',
|
|
@@ -150,12 +138,6 @@ async function smokeDouyinNoTokenRechargePrompt() {
|
|
|
150
138
|
HOME: process.env.HOME,
|
|
151
139
|
VOC_TOKEN: process.env.VOC_TOKEN,
|
|
152
140
|
VOC_SOCIAL_TOKEN: process.env.VOC_SOCIAL_TOKEN,
|
|
153
|
-
XIAOHONGSHU_API_TOKEN: process.env.XIAOHONGSHU_API_TOKEN,
|
|
154
|
-
FMODE_XIAOHONGSHU_TOKEN: process.env.FMODE_XIAOHONGSHU_TOKEN,
|
|
155
|
-
FMODE_SOCIAL_TOKEN: process.env.FMODE_SOCIAL_TOKEN,
|
|
156
|
-
DOUYIN_API_TOKEN: process.env.DOUYIN_API_TOKEN,
|
|
157
|
-
DOUYIN_TOKEN: process.env.DOUYIN_TOKEN,
|
|
158
|
-
VOC_DOUYIN_TOKEN: process.env.VOC_DOUYIN_TOKEN
|
|
159
141
|
};
|
|
160
142
|
const tempHome = path.join(os.tmpdir(), 'claude-voc-douyin-no-token-smoke');
|
|
161
143
|
const tempWorkspace = path.join(os.tmpdir(), 'claude-voc-douyin-no-token-workspace-smoke');
|
|
@@ -168,12 +150,6 @@ async function smokeDouyinNoTokenRechargePrompt() {
|
|
|
168
150
|
[
|
|
169
151
|
'VOC_TOKEN',
|
|
170
152
|
'VOC_SOCIAL_TOKEN',
|
|
171
|
-
'XIAOHONGSHU_API_TOKEN',
|
|
172
|
-
'FMODE_XIAOHONGSHU_TOKEN',
|
|
173
|
-
'FMODE_SOCIAL_TOKEN',
|
|
174
|
-
'DOUYIN_API_TOKEN',
|
|
175
|
-
'DOUYIN_TOKEN',
|
|
176
|
-
'VOC_DOUYIN_TOKEN'
|
|
177
153
|
].forEach(key => delete process.env[key]);
|
|
178
154
|
const result = await runDouyinTrend({
|
|
179
155
|
collectionMode: 'live',
|
|
@@ -206,12 +182,6 @@ function smokeWorkspaceEnvLocalToken() {
|
|
|
206
182
|
HOME: process.env.HOME,
|
|
207
183
|
VOC_TOKEN: process.env.VOC_TOKEN,
|
|
208
184
|
VOC_SOCIAL_TOKEN: process.env.VOC_SOCIAL_TOKEN,
|
|
209
|
-
XIAOHONGSHU_API_TOKEN: process.env.XIAOHONGSHU_API_TOKEN,
|
|
210
|
-
FMODE_XIAOHONGSHU_TOKEN: process.env.FMODE_XIAOHONGSHU_TOKEN,
|
|
211
|
-
FMODE_SOCIAL_TOKEN: process.env.FMODE_SOCIAL_TOKEN,
|
|
212
|
-
DOUYIN_API_TOKEN: process.env.DOUYIN_API_TOKEN,
|
|
213
|
-
DOUYIN_TOKEN: process.env.DOUYIN_TOKEN,
|
|
214
|
-
VOC_DOUYIN_TOKEN: process.env.VOC_DOUYIN_TOKEN
|
|
215
185
|
};
|
|
216
186
|
const tempHome = path.join(os.tmpdir(), 'claude-voc-env-local-home-smoke');
|
|
217
187
|
const tempWorkspace = path.join(os.tmpdir(), 'claude-voc-env-local-workspace-smoke');
|
|
@@ -224,12 +194,6 @@ function smokeWorkspaceEnvLocalToken() {
|
|
|
224
194
|
[
|
|
225
195
|
'VOC_TOKEN',
|
|
226
196
|
'VOC_SOCIAL_TOKEN',
|
|
227
|
-
'XIAOHONGSHU_API_TOKEN',
|
|
228
|
-
'FMODE_XIAOHONGSHU_TOKEN',
|
|
229
|
-
'FMODE_SOCIAL_TOKEN',
|
|
230
|
-
'DOUYIN_API_TOKEN',
|
|
231
|
-
'DOUYIN_TOKEN',
|
|
232
|
-
'VOC_DOUYIN_TOKEN'
|
|
233
197
|
].forEach(key => delete process.env[key]);
|
|
234
198
|
fs.writeFileSync(path.join(tempWorkspace, '.env.local'), 'VOC_TOKEN=workspace-smoke-token\n');
|
|
235
199
|
const token = readVocToken({});
|
|
@@ -255,18 +219,13 @@ function smokeAncestorEnvLocalToken() {
|
|
|
255
219
|
HOME: process.env.HOME,
|
|
256
220
|
VOC_TOKEN: process.env.VOC_TOKEN,
|
|
257
221
|
VOC_SOCIAL_TOKEN: process.env.VOC_SOCIAL_TOKEN,
|
|
258
|
-
XIAOHONGSHU_API_TOKEN: process.env.XIAOHONGSHU_API_TOKEN,
|
|
259
|
-
FMODE_XIAOHONGSHU_TOKEN: process.env.FMODE_XIAOHONGSHU_TOKEN,
|
|
260
|
-
FMODE_SOCIAL_TOKEN: process.env.FMODE_SOCIAL_TOKEN,
|
|
261
|
-
DOUYIN_API_TOKEN: process.env.DOUYIN_API_TOKEN,
|
|
262
|
-
DOUYIN_TOKEN: process.env.DOUYIN_TOKEN,
|
|
263
|
-
VOC_DOUYIN_TOKEN: process.env.VOC_DOUYIN_TOKEN
|
|
264
222
|
};
|
|
265
223
|
const tempHome = path.join(os.tmpdir(), 'claude-voc-ancestor-env-home-smoke');
|
|
266
224
|
const tempWorkspace = path.join(os.tmpdir(), 'claude-voc-ancestor-env-workspace-smoke');
|
|
267
225
|
const nested = path.join(tempWorkspace, 'nested', 'plugin');
|
|
268
226
|
fs.mkdirSync(tempHome, { recursive: true });
|
|
269
227
|
fs.mkdirSync(nested, { recursive: true });
|
|
228
|
+
fs.writeFileSync(path.join(tempWorkspace, '.env.local'), 'VOC_TOKEN=ancestor-smoke-token\n');
|
|
270
229
|
try {
|
|
271
230
|
process.chdir(nested);
|
|
272
231
|
process.env.USERPROFILE = tempHome;
|
|
@@ -274,14 +233,7 @@ function smokeAncestorEnvLocalToken() {
|
|
|
274
233
|
[
|
|
275
234
|
'VOC_TOKEN',
|
|
276
235
|
'VOC_SOCIAL_TOKEN',
|
|
277
|
-
'XIAOHONGSHU_API_TOKEN',
|
|
278
|
-
'FMODE_XIAOHONGSHU_TOKEN',
|
|
279
|
-
'FMODE_SOCIAL_TOKEN',
|
|
280
|
-
'DOUYIN_API_TOKEN',
|
|
281
|
-
'DOUYIN_TOKEN',
|
|
282
|
-
'VOC_DOUYIN_TOKEN'
|
|
283
236
|
].forEach(key => delete process.env[key]);
|
|
284
|
-
fs.writeFileSync(path.join(tempWorkspace, '.env.local'), 'VOC_DOUYIN_TOKEN=ancestor-smoke-token\n');
|
|
285
237
|
const token = readVocToken({});
|
|
286
238
|
if (token !== 'ancestor-smoke-token') {
|
|
287
239
|
throw new Error('ancestor .env.local token was not used');
|