oc-browser-relay 1.0.27 → 1.0.28

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 (24) hide show
  1. package/bundled-relay/index.js +44 -3
  2. package/bundled-relay/public/configs/pages/guanghe-taobao-publish.json +271 -0
  3. package/bundled-relay/public/configs/pages/index.json +4 -1
  4. package/bundled-relay/public/configs/pages/kuaishou-creator-publish.json +279 -0
  5. package/bundled-relay/public/configs/pages/taobao-item-detail.json +32 -0
  6. package/bundled-relay/public/configs/pages/wechat-channels-publish.json +291 -0
  7. package/bundled-relay/public/configs/sites/guanghe-taobao.json +42 -0
  8. package/bundled-relay/public/configs/sites/index.json +4 -1
  9. package/bundled-relay/public/configs/sites/kuaishou-creator.json +49 -0
  10. package/bundled-relay/public/configs/sites/wechat-channels.json +30 -0
  11. package/bundled-relay/public/configs/task-templates/guanghe-taobao-publish-video.json +133 -0
  12. package/bundled-relay/public/configs/task-templates/index.json +7 -1
  13. package/bundled-relay/public/configs/task-templates/kuaishou-creator-publish-video.json +114 -0
  14. package/bundled-relay/public/configs/task-templates/kuaishou-creator-save-draft.json +114 -0
  15. package/bundled-relay/public/configs/task-templates/taobao-item-detail-images.json +78 -0
  16. package/bundled-relay/public/configs/task-templates/wechat-channels-publish-video.json +144 -0
  17. package/bundled-relay/public/configs/task-templates/wechat-channels-save-draft.json +152 -0
  18. package/index.js +52 -37
  19. package/package.json +1 -1
  20. package/skills/oc-browser-relay-article/SKILL.md +31 -15
  21. package/skills/oc-browser-relay-guanghe-taobao/SKILL.md +62 -0
  22. package/skills/oc-browser-relay-kuaishou/SKILL.md +65 -0
  23. package/skills/oc-browser-relay-taobao/SKILL.md +29 -4
  24. package/skills/oc-browser-relay-wechat-channels/SKILL.md +75 -0
@@ -0,0 +1,291 @@
1
+ {
2
+ "pageId": "wechat_channels_publish",
3
+ "pageName": "微信视频号发布页",
4
+ "platform": "wechat",
5
+ "siteId": "wechat_channels",
6
+ "pageType": "publish_form",
7
+ "version": "1.0.0",
8
+ "urlMatch": [
9
+ "https://channels.weixin.qq.com/platform/post/create*"
10
+ ],
11
+ "readiness": {
12
+ "loginRequired": true,
13
+ "loginPagePatterns": [
14
+ "https://channels.weixin.qq.com/login.html*"
15
+ ],
16
+ "loginWaitTimeoutMs": 120000,
17
+ "pageReadyWhen": {
18
+ "type": "logical_or",
19
+ "conditions": [
20
+ {
21
+ "type": "element_visible",
22
+ "selector": ".ant-upload-drag",
23
+ "shadowHost": "wujie-app"
24
+ },
25
+ {
26
+ "type": "element_visible",
27
+ "selector": "input[type='file'][accept*='video']",
28
+ "shadowHost": "wujie-app"
29
+ }
30
+ ]
31
+ },
32
+ "waitTimeoutMs": 15000
33
+ },
34
+ "reusePolicy": {
35
+ "enabled": true,
36
+ "taskTypes": [
37
+ "publish_video",
38
+ "save_video_draft"
39
+ ],
40
+ "candidatePages": [
41
+ "wechat_channels_publish"
42
+ ],
43
+ "requiredFields": [
44
+ "video"
45
+ ],
46
+ "requiredActions": [
47
+ "publish"
48
+ ],
49
+ "recoverMode": "publish_ready"
50
+ },
51
+ "fields": {
52
+ "video": {
53
+ "fieldId": "video",
54
+ "label": "视频上传",
55
+ "type": "file_upload",
56
+ "required": true,
57
+ "locators": [
58
+ {
59
+ "kind": "shadow",
60
+ "shadowHost": "wujie-app",
61
+ "shadowSelector": "input[type='file'][accept*='video']",
62
+ "priority": 1
63
+ }
64
+ ],
65
+ "inputStrategy": {
66
+ "mode": "file_upload",
67
+ "waitForUploadComplete": false
68
+ },
69
+ "validation": {
70
+ "maxCount": 1,
71
+ "acceptTypes": [
72
+ "video/mp4",
73
+ "video/avi",
74
+ "video/quicktime"
75
+ ]
76
+ },
77
+ "observationRules": {
78
+ "filledWhen": "thumbnail_count_gt_0",
79
+ "emptyWhen": "thumbnail_count_eq_0"
80
+ }
81
+ },
82
+ "content": {
83
+ "fieldId": "content",
84
+ "label": "视频描述",
85
+ "type": "rich_text",
86
+ "required": false,
87
+ "locators": [
88
+ {
89
+ "kind": "shadow",
90
+ "shadowHost": "wujie-app",
91
+ "shadowSelector": ".input-editor[contenteditable]",
92
+ "priority": 1
93
+ }
94
+ ],
95
+ "inputStrategy": {
96
+ "mode": "rich_text_input",
97
+ "focusBeforeInput": true,
98
+ "clearBeforeInput": true,
99
+ "typingMode": "human",
100
+ "commitMode": "none"
101
+ },
102
+ "validation": {
103
+ "maxLength": 1000
104
+ },
105
+ "observationRules": {
106
+ "filledWhen": "text_length_gt_0",
107
+ "emptyWhen": "text_length_eq_0"
108
+ }
109
+ },
110
+ "title": {
111
+ "fieldId": "title",
112
+ "label": "视频标题",
113
+ "type": "text",
114
+ "required": false,
115
+ "locators": [
116
+ {
117
+ "kind": "shadow",
118
+ "shadowHost": "wujie-app",
119
+ "shadowSelector": ".post-short-title-wrap input[type='text']",
120
+ "priority": 1
121
+ }
122
+ ],
123
+ "inputStrategy": {
124
+ "mode": "human_typing",
125
+ "clearBeforeInput": true,
126
+ "focusBeforeInput": true,
127
+ "blurAfterInput": true,
128
+ "commitMode": "blur"
129
+ },
130
+ "validation": {
131
+ "minLength": 6,
132
+ "maxLength": 16
133
+ },
134
+ "observationRules": {
135
+ "filledWhen": "value_non_empty",
136
+ "emptyWhen": "value_empty"
137
+ }
138
+ }
139
+ },
140
+ "actions": {
141
+ "publish": {
142
+ "actionId": "publish",
143
+ "label": "发表",
144
+ "kind": "submit",
145
+ "locators": [
146
+ {
147
+ "kind": "shadow",
148
+ "shadowHost": "wujie-app",
149
+ "shadowSelector": ".form-btns .weui-desktop-btn_primary",
150
+ "priority": 1
151
+ }
152
+ ],
153
+ "observationRules": {
154
+ "type": "logical_or",
155
+ "conditions": [
156
+ {
157
+ "type": "toast_contains",
158
+ "value": "已发表"
159
+ },
160
+ {
161
+ "type": "url_contains",
162
+ "value": "/post/list"
163
+ }
164
+ ],
165
+ "submittingTexts": [
166
+ "发布中",
167
+ "提交中"
168
+ ]
169
+ }
170
+ },
171
+ "saveDraft": {
172
+ "actionId": "saveDraft",
173
+ "label": "保存草稿",
174
+ "kind": "save",
175
+ "locators": [
176
+ {
177
+ "kind": "shadow",
178
+ "shadowHost": "wujie-app",
179
+ "shadowSelector": ".form-btns .weui-desktop-btn_default:first-of-type",
180
+ "priority": 1
181
+ }
182
+ ],
183
+ "observationRules": {
184
+ "type": "logical_or",
185
+ "conditions": [
186
+ {
187
+ "type": "toast_contains",
188
+ "value": "已保存",
189
+ "shadowHost": "wujie-app",
190
+ "selectors": [
191
+ ".common-toptip"
192
+ ]
193
+ }
194
+ ]
195
+ }
196
+ },
197
+ "navigateHome": {
198
+ "actionId": "navigateHome",
199
+ "label": "首页",
200
+ "kind": "click",
201
+ "locators": [
202
+ {
203
+ "kind": "css",
204
+ "value": "#menuBar > li:nth-child(1) > a",
205
+ "priority": 1
206
+ },
207
+ {
208
+ "kind": "xpath",
209
+ "value": "//*[@id='menuBar']/li[1]/a",
210
+ "priority": 2
211
+ }
212
+ ],
213
+ "observationRules": {
214
+ "type": "logical_or",
215
+ "conditions": [
216
+ {
217
+ "type": "url_contains",
218
+ "value": "/platform/home"
219
+ },
220
+ {
221
+ "type": "url_contains",
222
+ "value": "/platform/post/list"
223
+ },
224
+ {
225
+ "type": "url_contains",
226
+ "value": "weixin.qq.com/platform"
227
+ }
228
+ ]
229
+ }
230
+ }
231
+ },
232
+ "executionPolicy": {
233
+ "popupGuard": {
234
+ "enabled": false
235
+ },
236
+ "typingPolicy": {
237
+ "mode": "human_typing",
238
+ "minKeyDelayMs": 100,
239
+ "maxKeyDelayMs": 250,
240
+ "chunkTyping": true,
241
+ "chunkSizeRange": [
242
+ 3,
243
+ 10
244
+ ],
245
+ "chunkPauseMsRange": [
246
+ 120,
247
+ 260
248
+ ]
249
+ },
250
+ "clickPolicy": {
251
+ "scrollIntoView": true,
252
+ "requireVisible": true,
253
+ "preHover": true,
254
+ "hoverDurationMsRange": [
255
+ 100,
256
+ 400
257
+ ],
258
+ "preClickPauseMsRange": [
259
+ 80,
260
+ 250
261
+ ]
262
+ },
263
+ "humanBehavior": {
264
+ "cursorMoveSpeedRange": [
265
+ 110,
266
+ 180
267
+ ],
268
+ "cursorStepDelayMsRange": [
269
+ 4,
270
+ 12
271
+ ],
272
+ "cursorVisibleDurationMsRange": [
273
+ 180,
274
+ 320
275
+ ],
276
+ "minCursorStepCount": 12,
277
+ "mouseDownUpDelayMsRange": [
278
+ 40,
279
+ 120
280
+ ],
281
+ "postClickPauseMsRange": [
282
+ 40,
283
+ 120
284
+ ]
285
+ },
286
+ "actionPausePolicy": {
287
+ "minPauseMs": 140,
288
+ "maxPauseMs": 700
289
+ }
290
+ }
291
+ }
@@ -0,0 +1,42 @@
1
+ {
2
+ "siteId": "guanghe_taobao",
3
+ "siteName": "淘宝光合平台",
4
+ "platform": "taobao",
5
+ "hosts": ["creator.guanghe.taobao.com"],
6
+ "loginPagePatterns": [
7
+ "https://login.taobao.com/*"
8
+ ],
9
+ "publishEntryUrl": "https://creator.guanghe.taobao.com/page?layout=%2Fvelocity%2Flayout%2Findex.vm",
10
+ "publishUrl": "https://creator.guanghe.taobao.com/page/pubNew/video",
11
+ "publishUrlMatch": [
12
+ "https://creator.guanghe.taobao.com/page/pubNew/video*"
13
+ ],
14
+ "supportsPublishSession": true,
15
+ "entryActions": {
16
+ "enterImagePublish": {
17
+ "actionId": "enterImagePublish",
18
+ "label": "进入视频发布",
19
+ "kind": "menu_entry",
20
+ "triggerLocators": [
21
+ { "kind": "css", "value": "div[class*='pubBtn']", "priority": 1 },
22
+ { "kind": "text", "value": "发布作品", "priority": 2 }
23
+ ],
24
+ "hoverTargetLocators": [
25
+ { "kind": "css", "value": "div[class*='pubBtn']", "priority": 1 }
26
+ ],
27
+ "menuContainerLocators": [
28
+ { "kind": "css", "value": "div[class*='pubPop']", "priority": 1 },
29
+ { "kind": "css", "value": ".next-balloon-top .next-balloon-content", "priority": 2 }
30
+ ],
31
+ "menuItemLocators": [
32
+ { "kind": "xpath", "value": "//li[contains(@class,'next-menu-item')][.//div[normalize-space()='发视频']]", "priority": 1 },
33
+ { "kind": "text", "value": "发视频", "priority": 2 }
34
+ ],
35
+ "hoverDelayMs": 2000,
36
+ "menuWaitTimeoutMs": 3000,
37
+ "settleDelayMs": 5000,
38
+ "maxAttempts": 3,
39
+ "readyTimeoutMs": 8000
40
+ }
41
+ }
42
+ }
@@ -7,6 +7,9 @@
7
7
  "sycm-taobao.json",
8
8
  "douyin-creator.json",
9
9
  "douyin-fxg.json",
10
- "pinduoduo-mms.json"
10
+ "pinduoduo-mms.json",
11
+ "wechat-channels.json",
12
+ "kuaishou-creator.json",
13
+ "guanghe-taobao.json"
11
14
  ]
12
15
  }
@@ -0,0 +1,49 @@
1
+ {
2
+ "siteId": "kuaishou_creator",
3
+ "siteName": "快手创作者中心",
4
+ "platform": "kuaishou",
5
+ "hosts": [
6
+ "cp.kuaishou.com"
7
+ ],
8
+ "loginPagePatterns": [
9
+ "https://cp.kuaishou.com/login*"
10
+ ],
11
+ "publishEntryUrl": "https://cp.kuaishou.com/profile",
12
+ "publishUrl": "https://cp.kuaishou.com/article/publish/video",
13
+ "publishUrlMatch": [
14
+ "https://cp.kuaishou.com/article/publish/video*"
15
+ ],
16
+ "supportsPublishSession": true,
17
+ "entryActions": {
18
+ "enterImagePublish": {
19
+ "actionId": "enterImagePublish",
20
+ "label": "进入视频发布",
21
+ "kind": "click",
22
+ "triggerLocators": [
23
+ {
24
+ "kind": "css",
25
+ "value": "#app > div.complete > div.container > div > section > ul > div.publish-button",
26
+ "priority": 1
27
+ },
28
+ {
29
+ "kind": "xpath",
30
+ "value": "//*[@id=\"app\"]/div[1]/div[1]/div/section/ul/div[1]",
31
+ "priority": 2
32
+ },
33
+ {
34
+ "kind": "css",
35
+ "value": "div.publish-button",
36
+ "priority": 3
37
+ },
38
+ {
39
+ "kind": "text",
40
+ "value": "发布作品",
41
+ "priority": 4
42
+ }
43
+ ],
44
+ "preClickDelayMs": 5000,
45
+ "readyTimeoutMs": 8000,
46
+ "maxAttempts": 3
47
+ }
48
+ }
49
+ }
@@ -0,0 +1,30 @@
1
+ {
2
+ "siteId": "wechat_channels",
3
+ "siteName": "微信视频号创作者中心",
4
+ "platform": "wechat",
5
+ "hosts": ["channels.weixin.qq.com"],
6
+ "loginPagePatterns": [
7
+ "https://channels.weixin.qq.com/login.html*"
8
+ ],
9
+ "publishEntryUrl": "https://channels.weixin.qq.com/platform",
10
+ "publishUrl": "https://channels.weixin.qq.com/platform/post/create",
11
+ "publishUrlMatch": [
12
+ "https://channels.weixin.qq.com/platform/post/create*"
13
+ ],
14
+ "supportsPublishSession": true,
15
+ "entryActions": {
16
+ "enterImagePublish": {
17
+ "actionId": "enterImagePublish",
18
+ "label": "进入视频发布",
19
+ "kind": "click",
20
+ "triggerLocators": [
21
+ { "kind": "shadow", "shadowHost": "wujie-app", "shadowSelector": ".weui-desktop-btn_wrp:first-of-type .weui-desktop-btn_primary", "priority": 1 },
22
+ { "kind": "shadow", "shadowHost": "wujie-app", "shadowSelector": ".weui-desktop-btn_primary", "priority": 2 }
23
+ ],
24
+ "preClickDelayMs": 2000,
25
+ "settleDelayMs": 4000,
26
+ "readyTimeoutMs": 15000,
27
+ "maxAttempts": 3
28
+ }
29
+ }
30
+ }
@@ -0,0 +1,133 @@
1
+ {
2
+ "siteId": "guanghe_taobao",
3
+ "taskType": "publish_video",
4
+ "platform": "taobao",
5
+ "name": "发布淘宝光合视频",
6
+ "description": "在淘宝光合平台发布视频",
7
+ "requiredFields": [
8
+ {
9
+ "name": "video",
10
+ "type": "string",
11
+ "description": "视频文件路径(绝对路径)"
12
+ }
13
+ ],
14
+ "optionalFields": [
15
+ {
16
+ "name": "title",
17
+ "type": "string",
18
+ "description": "视频标题(可选,最多30字)"
19
+ },
20
+ {
21
+ "name": "content",
22
+ "type": "string",
23
+ "description": "视频描述(正文+话题合计最多1000字)"
24
+ },
25
+ {
26
+ "name": "topics",
27
+ "type": "array",
28
+ "description": "话题标签数组,最多4个,例如 [\"话题1\", \"话题2\"]"
29
+ }
30
+ ],
31
+ "nodes": [
32
+ {
33
+ "nodeId": "ensure_publish_ready",
34
+ "name": "ensure_publish_ready",
35
+ "tool": "ensure_publish_ready",
36
+ "args": {
37
+ "initialDelayMs": 500
38
+ }
39
+ },
40
+ {
41
+ "nodeId": "wait_page_ready",
42
+ "name": "wait_page_ready",
43
+ "tool": "wait",
44
+ "args": {
45
+ "delayMs": 1500,
46
+ "message": "等待发布页面完全加载"
47
+ }
48
+ },
49
+ {
50
+ "nodeId": "upload_video",
51
+ "name": "upload_video",
52
+ "tool": "upload_assets",
53
+ "args": {
54
+ "field": "video",
55
+ "assets": [
56
+ "{{data.video}}"
57
+ ],
58
+ "timeoutMs": 300000
59
+ }
60
+ },
61
+ {
62
+ "nodeId": "wait_form_ready",
63
+ "name": "wait_form_ready",
64
+ "tool": "wait_for_condition",
65
+ "args": {
66
+ "condition": {
67
+ "type": "element_visible",
68
+ "selector": "input[placeholder*='加个标题']"
69
+ },
70
+ "timeoutMs": 120000,
71
+ "pollIntervalMs": 2000,
72
+ "message": "等待表单出现(视频上传完成后渲染)"
73
+ }
74
+ },
75
+ {
76
+ "nodeId": "fill_title",
77
+ "name": "fill_title",
78
+ "when": "exists(payload.title)",
79
+ "tool": "fill_field",
80
+ "args": {
81
+ "field": "title",
82
+ "value": "{{data.title}}"
83
+ }
84
+ },
85
+ {
86
+ "nodeId": "fill_content",
87
+ "name": "fill_content",
88
+ "when": "exists(payload.content)",
89
+ "tool": "fill_field",
90
+ "args": {
91
+ "field": "content",
92
+ "value": "{{data.content}}"
93
+ }
94
+ },
95
+ {
96
+ "nodeId": "submit_publish",
97
+ "name": "submit_publish",
98
+ "tool": "trigger_action",
99
+ "args": {
100
+ "action": "publish"
101
+ }
102
+ },
103
+ {
104
+ "nodeId": "close_tab",
105
+ "name": "close_tab",
106
+ "tool": "close_tab",
107
+ "args": {
108
+ "delayMs": 3000,
109
+ "message": "发布完成,页面即将关闭",
110
+ "showCountdown": true,
111
+ "activateOptional": true
112
+ }
113
+ }
114
+ ],
115
+ "validation": [
116
+ {
117
+ "rule": "video.length >= 1",
118
+ "message": "需要提供视频文件路径"
119
+ },
120
+ {
121
+ "rule": "!title || title.length <= 30",
122
+ "message": "视频标题不能超过30字"
123
+ },
124
+ {
125
+ "rule": "!topics || topics.length <= 4",
126
+ "message": "话题数量不能超过4个"
127
+ },
128
+ {
129
+ "rule": "(content ? content.length : 0) + (topics && topics.length > 0 ? 2 + topics.reduce((s,t)=>s+(t.startsWith('#')?t.length:t.length+1),0) + topics.length - 1 : 0) <= 1000",
130
+ "message": "视频描述与话题合计不能超过1000字"
131
+ }
132
+ ]
133
+ }
@@ -11,9 +11,15 @@
11
11
  "xiaohongshu-creator-save-draft.json",
12
12
  "xiaohongshu-web-search-notes.json",
13
13
  "taobao-item-detail-comments.json",
14
+ "taobao-item-detail-images.json",
14
15
  "douyin-creator-publish.json",
15
16
  "douyin-creator-save-draft.json",
16
17
  "douyin-fxg-homepage-api.json",
17
- "wechat-get-article.json"
18
+ "wechat-get-article.json",
19
+ "wechat-channels-publish-video.json",
20
+ "wechat-channels-save-draft.json",
21
+ "kuaishou-creator-publish-video.json",
22
+ "kuaishou-creator-save-draft.json",
23
+ "guanghe-taobao-publish-video.json"
18
24
  ]
19
25
  }
@@ -0,0 +1,114 @@
1
+ {
2
+ "siteId": "kuaishou_creator",
3
+ "taskType": "publish_video",
4
+ "platform": "kuaishou",
5
+ "name": "发布快手视频",
6
+ "description": "在快手创作者中心发布视频",
7
+ "requiredFields": [
8
+ {
9
+ "name": "video",
10
+ "type": "string",
11
+ "description": "视频文件路径(绝对路径)"
12
+ }
13
+ ],
14
+ "optionalFields": [
15
+ {
16
+ "name": "content",
17
+ "type": "string",
18
+ "description": "作品描述(正文+话题合计最多500字)"
19
+ },
20
+ {
21
+ "name": "topics",
22
+ "type": "array",
23
+ "description": "话题标签数组,最多4个,例如 [\"话题1\", \"话题2\"]"
24
+ }
25
+ ],
26
+ "nodes": [
27
+ {
28
+ "nodeId": "ensure_publish_ready",
29
+ "name": "ensure_publish_ready",
30
+ "tool": "ensure_publish_ready",
31
+ "args": {
32
+ "initialDelayMs": 2000
33
+ }
34
+ },
35
+ {
36
+ "nodeId": "wait_page_ready",
37
+ "name": "wait_page_ready",
38
+ "tool": "wait",
39
+ "args": {
40
+ "delayMs": 3000,
41
+ "message": "等待发布页面完全加载"
42
+ }
43
+ },
44
+ {
45
+ "nodeId": "upload_video",
46
+ "name": "upload_video",
47
+ "tool": "upload_assets",
48
+ "args": {
49
+ "field": "video",
50
+ "assets": [
51
+ "{{data.video}}"
52
+ ],
53
+ "timeoutMs": 300000
54
+ }
55
+ },
56
+ {
57
+ "nodeId": "wait_form_ready",
58
+ "name": "wait_form_ready",
59
+ "tool": "wait_for_condition",
60
+ "args": {
61
+ "condition": {
62
+ "type": "element_visible",
63
+ "selector": "#work-description-edit[contenteditable='true']"
64
+ },
65
+ "timeoutMs": 120000,
66
+ "pollIntervalMs": 2000,
67
+ "message": "等待表单出现(视频上传完成后渲染)"
68
+ }
69
+ },
70
+ {
71
+ "nodeId": "fill_content",
72
+ "name": "fill_content",
73
+ "when": "exists(payload.content)",
74
+ "tool": "fill_field",
75
+ "args": {
76
+ "field": "content",
77
+ "value": "{{data.content}}"
78
+ }
79
+ },
80
+ {
81
+ "nodeId": "submit_publish",
82
+ "name": "submit_publish",
83
+ "tool": "trigger_action",
84
+ "args": {
85
+ "action": "publish"
86
+ }
87
+ },
88
+ {
89
+ "nodeId": "close_tab",
90
+ "name": "close_tab",
91
+ "tool": "close_tab",
92
+ "args": {
93
+ "delayMs": 3000,
94
+ "message": "发布完成,页面即将关闭",
95
+ "showCountdown": true,
96
+ "activateOptional": true
97
+ }
98
+ }
99
+ ],
100
+ "validation": [
101
+ {
102
+ "rule": "video.length >= 1",
103
+ "message": "需要提供视频文件路径"
104
+ },
105
+ {
106
+ "rule": "!topics || topics.length <= 4",
107
+ "message": "话题数量不能超过4个"
108
+ },
109
+ {
110
+ "rule": "(content ? content.length : 0) + (topics && topics.length > 0 ? 2 + topics.reduce((s,t)=>s+(t.startsWith('#')?t.length:t.length+1),0) + topics.length - 1 : 0) <= 500",
111
+ "message": "作品描述与话题合计不能超过500字"
112
+ }
113
+ ]
114
+ }