@follenfang/fupload 0.0.19 → 0.0.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.
- package/fupload/SKILL.md +2 -2
- package/fupload/references/dd.md +9 -1
- package/fupload/references/newbee-official-cli.md +4 -0
- package/fupload/scripts/fupload_cli/__init__.py +1 -1
- package/fupload/scripts/fupload_cli/dd.py +4 -3
- package/fupload/scripts/fupload_cli/schema.py +4 -0
- package/npm/skill-manifest.json +14 -14
- package/package.json +1 -1
package/fupload/SKILL.md
CHANGED
|
@@ -2,7 +2,7 @@
|
|
|
2
2
|
name: fupload
|
|
3
3
|
description: Explicit author-publishing workflow for World of Warcraft plugins, configuration shares, and WA/strings on NewBeeBox, NetEase DD, CurseForge, Heybox Workshop, and ModUs.Creator, including local Creator login reuse and plugin ZIP publishing. Use only when the user explicitly invokes `$fupload`, explicitly asks to use the Fupload Skill, or loads this Skill by path. Do not trigger from ordinary mentions of publishing, NewBeeBox, DD, CurseForge, Heybox, ModUs, plugins, configurations, or WA.
|
|
4
4
|
metadata:
|
|
5
|
-
version: "0.0.
|
|
5
|
+
version: "0.0.21"
|
|
6
6
|
---
|
|
7
7
|
|
|
8
8
|
# Fupload
|
|
@@ -22,7 +22,7 @@ Map natural language consistently:
|
|
|
22
22
|
|
|
23
23
|
- `create`: create the main record. If first content is a separate platform action, plan it as a following atomic step.
|
|
24
24
|
- `update`: publish a plugin version, change selected configuration-backup content, or publish a WA/string version.
|
|
25
|
-
- `edit`: change fields allowed by the target platform's action allowlist. For DD plugins, this includes `description` and existing-record commercial, association, room/channel, and creation-statement settings; other first-publication metadata, categories, media, and version fields are create/update-only. Description edits read both detail and author-list projections; either may confirm the value, but if neither matches, report verification-required.
|
|
25
|
+
- `edit`: change fields allowed by the target platform's action allowlist. For DD plugins, this includes `description`, `html_desc`, and existing-record commercial, association, room/channel, and creation-statement settings; other first-publication metadata, categories, media, and version fields are create/update-only. Description edits read both detail and author-list projections; either may confirm the value, but if neither matches, report verification-required.
|
|
26
26
|
- `delete`: delete one main record only. It never deletes an individual version, media object, or associated record.
|
|
27
27
|
|
|
28
28
|
Never offer bulk delete, drafts, guides, messages, or GUI control automation. Heybox supports individual version deletion with asynchronous readback; whole-module deletion is not supported. The DD task-session command may close verified official GUI processes only after the consent flow below.
|
package/fupload/references/dd.md
CHANGED
|
@@ -59,13 +59,21 @@ All three create/edit form models use `scope`, `share_code_life_type`, `need_buy
|
|
|
59
59
|
|
|
60
60
|
Omission on edit preserves the remote value. Explicit false follows the field-specific official behavior: room and association children are cleared, while anchor VIP levels remain unless private scope or the outer free mode clears them.
|
|
61
61
|
|
|
62
|
+
## Update description (`update_desc`)
|
|
63
|
+
|
|
64
|
+
`update_desc` is rendered as HTML on the DD web and client surface, for plugins, configuration shares, and WA alike. The renderer collapses plain-text line feeds, so a multi-line changelog must use markup: `<p>first line</p><p>second line</p>`, or `<br>` between lines. A JSON string that contains only `\n` is stored intact but renders as a single line.
|
|
65
|
+
|
|
66
|
+
The Python CLI copies the supplied string into the wire form unchanged and performs no HTML escaping, so callers may pass tags directly. The platform normalizes `\r\n` and `\n` to LF; the line-ending style itself has no effect on rendering. The 1000-character limit applies to the whole string, tags included.
|
|
67
|
+
|
|
68
|
+
A published version's `update_desc` cannot be corrected through the CLI: `plugin edit`, `config edit`, and `wa edit` do not accept the field, and plugin version fields are not edit fields. Correct the format by writing the next version's `update_desc` properly.
|
|
69
|
+
|
|
62
70
|
## Plugin
|
|
63
71
|
|
|
64
72
|
`plugin create` fields: `game_type`, `scope`, `addon_type`, `name`, `description`, `logo`/`logo_file`, `detail_imgs`/`detail_img_files`, `primary_category_id`, `second_category_ids`, `html_desc`, `game_versions`, `detail_url`/`file`, `release_type`, `version`, `update_desc`, and all shared fields. Name, description, and version are at most 80 characters; update description is at most 1000; detail images are at most 8.
|
|
65
73
|
|
|
66
74
|
Every path in `detail_img_files` must exist as a regular local file. Validation reports the exact indexed path, such as `$.detail_img_files[0]`, before any upload or mutation.
|
|
67
75
|
|
|
68
|
-
`game_type` and the outer free/paid state are create-only. `plugin update` requires `sn`, `game_versions`, `version`, and `update_desc`; optional `file`, `detail_url`, and `release_type` publish a new version. `plugin edit` requires `sn` and accepts `description` plus the official existing-record commercial and association controls (`scope`, payment/lifetime/VIP fields, room/channel linkage, `creation_statement`, and associated content). Other first-publication metadata (`addon_type`, `name`, logo, detail images,
|
|
76
|
+
`game_type` and the outer free/paid state are create-only. `plugin update` requires `sn`, `game_versions`, `version`, and `update_desc`; optional `file`, `detail_url`, and `release_type` publish a new version. `plugin edit` requires `sn` and accepts `description`, `html_desc`, plus the official existing-record commercial and association controls (`scope`, payment/lifetime/VIP fields, room/channel linkage, `creation_statement`, and associated content). Other first-publication metadata (`addon_type`, `name`, logo, detail images, and categories) and version fields are not edit fields. The CLI verifies description edits through both detail and author-list readback; if DD accepts the request but leaves the remote value unchanged, it reports a verification-required error rather than false success.
|
|
69
77
|
|
|
70
78
|
When `assign_user_sn` is present, the official UI exposes only the public scope option. Python validates the final rebuilt form and rejects a private scope before upload or mutation.
|
|
71
79
|
|
|
@@ -191,6 +191,10 @@ CLI 全程非交互、支持 `-o json` 结构化输出,适合交给 AI 助手
|
|
|
191
191
|
|
|
192
192
|
直接给文本,或 `@CHANGELOG.md` 从文件读取;未指定时若 ncc.json 配置了 `changelog_file` 且文件存在则自动读取。
|
|
193
193
|
|
|
194
|
+
**该字段按纯文本存储和展示,不渲染 Markdown**——注意这与插件详情不同,详情正文是 Markdown(见 `--description`):`#`、`##`、`**`、`-` 等标记在这里会原样显示成符号。建议一行一条、行首用 `•`,行与行之间不留空行;换行符统一用 `\r\n`,文末保留一个换行。
|
|
195
|
+
|
|
196
|
+
单个版本的日志只写该版本内容,不要把整份 `CHANGELOG.md` 直接传给 `--changelog`(会把全部历史带进这一条)。历史版本可用 `ncc wow addons changelog <file_id> --set @<文本文件>` 修正,改完回读核对字数与行数。
|
|
197
|
+
|
|
194
198
|
## ncc.json 配置说明
|
|
195
199
|
|
|
196
200
|
```jsonc
|
|
@@ -1465,10 +1465,11 @@ PLUGIN_CREATE_DEFAULTS = {
|
|
|
1465
1465
|
|
|
1466
1466
|
# DD's modify form is not a second create form. The official edit page
|
|
1467
1467
|
# rebuilds the payload from existing commercial/association controls. The
|
|
1468
|
-
# brief
|
|
1469
|
-
# detail and author-list readback after every
|
|
1468
|
+
# brief and rich-text detail descriptions are the supported metadata
|
|
1469
|
+
# exceptions and are verified by detail and author-list readback after every
|
|
1470
|
+
# edit. Other first-publication metadata remains create-only.
|
|
1470
1471
|
PLUGIN_EDIT_FIELDS = (
|
|
1471
|
-
"description",
|
|
1472
|
+
"description", "html_desc",
|
|
1472
1473
|
"scope", "share_code_life_type", "need_buy", "price_fen", "buy_life_type",
|
|
1473
1474
|
"jump_room", "room_id", "channel_id", "channel_type", "sync_room",
|
|
1474
1475
|
"creation_statement", "with_associate", "associated_acts", "need_anchor_vip",
|
|
@@ -581,6 +581,10 @@ DD_PLUGIN_EDIT_META = {
|
|
|
581
581
|
for name in DD_COMMERCIAL
|
|
582
582
|
}
|
|
583
583
|
DD_PLUGIN_EDIT_META["description"] = DD_PLUGIN_META["description"]
|
|
584
|
+
# DD's modify form accepts the existing plugin's rich-text detail body as
|
|
585
|
+
# metadata. Keep the other first-publication metadata (name, logo, images,
|
|
586
|
+
# categories, etc.) create-only, but allow an explicit html_desc edit.
|
|
587
|
+
DD_PLUGIN_EDIT_META["html_desc"] = DD_PLUGIN_META["html_desc"]
|
|
584
588
|
DD_PLUGIN_VERSION = {
|
|
585
589
|
"game_versions": f("array", nonempty=True), "detail_url": f("string"),
|
|
586
590
|
"file": f("string", local_file=True), "release_type": f("integer", choices=(1, 2, 3)),
|
package/npm/skill-manifest.json
CHANGED
|
@@ -1,9 +1,9 @@
|
|
|
1
1
|
{
|
|
2
2
|
"schema": "fupload.npm-skill-manifest.v1",
|
|
3
3
|
"package_name": "@follenfang/fupload",
|
|
4
|
-
"package_version": "0.0.
|
|
5
|
-
"skill_version": "0.0.
|
|
6
|
-
"tree_sha256": "
|
|
4
|
+
"package_version": "0.0.21",
|
|
5
|
+
"skill_version": "0.0.21",
|
|
6
|
+
"tree_sha256": "06e04c9d9820c812a5bce0e530887212460eb5aa55ada6f9cfa0f68b92222ae9",
|
|
7
7
|
"files": [
|
|
8
8
|
{
|
|
9
9
|
"path": "agents/openai.yaml",
|
|
@@ -87,8 +87,8 @@
|
|
|
87
87
|
},
|
|
88
88
|
{
|
|
89
89
|
"path": "references/dd.md",
|
|
90
|
-
"bytes":
|
|
91
|
-
"sha256": "
|
|
90
|
+
"bytes": 20837,
|
|
91
|
+
"sha256": "4a174fa9470a23aee5c607b85123575c157559570a2d3fd4caa9a0874f9ae934"
|
|
92
92
|
},
|
|
93
93
|
{
|
|
94
94
|
"path": "references/modus.md",
|
|
@@ -97,8 +97,8 @@
|
|
|
97
97
|
},
|
|
98
98
|
{
|
|
99
99
|
"path": "references/newbee-official-cli.md",
|
|
100
|
-
"bytes":
|
|
101
|
-
"sha256": "
|
|
100
|
+
"bytes": 25535,
|
|
101
|
+
"sha256": "2499add2a7a571ed85cc0cf1cfc31513dbbc57a6d001a47045087a48a646f080"
|
|
102
102
|
},
|
|
103
103
|
{
|
|
104
104
|
"path": "references/newbee.md",
|
|
@@ -113,7 +113,7 @@
|
|
|
113
113
|
{
|
|
114
114
|
"path": "scripts/fupload_cli/__init__.py",
|
|
115
115
|
"bytes": 50,
|
|
116
|
-
"sha256": "
|
|
116
|
+
"sha256": "72bdf8ff38debf5bf6e764f214f7381a9dca2a17d9a0396952ac63b58bba679d"
|
|
117
117
|
},
|
|
118
118
|
{
|
|
119
119
|
"path": "scripts/fupload_cli/blackbox_web.py",
|
|
@@ -147,8 +147,8 @@
|
|
|
147
147
|
},
|
|
148
148
|
{
|
|
149
149
|
"path": "scripts/fupload_cli/dd.py",
|
|
150
|
-
"bytes":
|
|
151
|
-
"sha256": "
|
|
150
|
+
"bytes": 115484,
|
|
151
|
+
"sha256": "bf42e40784111e07ded17e7f7ad3cfacd007cf8efad6f61df475d0b3873a2793"
|
|
152
152
|
},
|
|
153
153
|
{
|
|
154
154
|
"path": "scripts/fupload_cli/errors.py",
|
|
@@ -182,8 +182,8 @@
|
|
|
182
182
|
},
|
|
183
183
|
{
|
|
184
184
|
"path": "scripts/fupload_cli/schema.py",
|
|
185
|
-
"bytes":
|
|
186
|
-
"sha256": "
|
|
185
|
+
"bytes": 54911,
|
|
186
|
+
"sha256": "bede6cc93de8a9d766e463cab0acb8725745da781aebabba73744394b594b93c"
|
|
187
187
|
},
|
|
188
188
|
{
|
|
189
189
|
"path": "scripts/fupload_cli/state_machine.py",
|
|
@@ -207,8 +207,8 @@
|
|
|
207
207
|
},
|
|
208
208
|
{
|
|
209
209
|
"path": "SKILL.md",
|
|
210
|
-
"bytes":
|
|
211
|
-
"sha256": "
|
|
210
|
+
"bytes": 28582,
|
|
211
|
+
"sha256": "d24b44882de93eb9fc43655ef995ff33c075b3b2fb5230b1a357ab43bedd082c"
|
|
212
212
|
}
|
|
213
213
|
]
|
|
214
214
|
}
|