@66rpg/cgmaker 0.1.15
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/README.md +22 -0
- package/bin/cgmaker.js +7 -0
- package/dist/index.js +45 -0
- package/dist/validate.js +1 -0
- package/package.json +42 -0
- package/share/find-rust-bin.mjs +1 -0
- package/share/run-logic.mjs +2 -0
- package/skill/cgmaker/SKILL.md +92 -0
- package/skill/cgmaker-identity/SKILL.md +43 -0
- package/skill/cgmaker-identity/references/branches.md +149 -0
- package/skill/cgmaker-identity/references/fields.md +59 -0
- package/skill/cgmaker-template-spec/SKILL.md +54 -0
- package/skill/cgmaker-template-spec/references/dist.md +60 -0
- package/skill/cgmaker-template-spec/references/layout.md +127 -0
- package/skill-targets.json +14 -0
package/README.md
ADDED
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
# @66rpg/cgmaker
|
|
2
|
+
|
|
3
|
+
作者工程里的平台工具。Node.js 20+。不要全局安装。本期原生命令 **仅 Windows x64**(optional `@66rpg/cgmaker-win32-x64`)。
|
|
4
|
+
|
|
5
|
+
`validate-template` / `validate` 走 TypeScript。`login` / `publish` 等转发 `cgmaker`。
|
|
6
|
+
|
|
7
|
+
```bash
|
|
8
|
+
npx cgmaker validate-template
|
|
9
|
+
npx cgmaker login
|
|
10
|
+
npx cgmaker publish --version 1.0.0
|
|
11
|
+
npx cgmaker publish --demo --version 1.0.0
|
|
12
|
+
npx cgmaker publish-template --version 0.1.0 --data-ver 1
|
|
13
|
+
npx cgmaker publish-template --version 0.1.0 --data-ver 1 --assets C:\path\to\assets
|
|
14
|
+
npx cgmaker publish-template-data --data-ver 2
|
|
15
|
+
npx cgmaker publish-template-data --data-ver 2 --assets C:\path\to\assets
|
|
16
|
+
npx cgmaker publish-project --version 1.0.0
|
|
17
|
+
npx cgmaker skill --platform cursor
|
|
18
|
+
```
|
|
19
|
+
|
|
20
|
+
试玩是独立游戏。模板引用只要字符串 `template_id`。`publish-template` 的 `--version`(缺省 `package.json.version`)须 1–16 位,仅小写字母、数字、`.`、`-`;须以字母或数字开头和结尾,不能有连续符号。上传数据包时 `publish-template` / `publish-template-data` 都可用 `--assets` 指定绝对路径(zip 内仍为 `assets/`)。只改资源、不发新代码版本用 `publish-template-data --data-ver <VER>`(须已有 origin,未传则默认读取 `package.json` 中的 `data_ver`)。config 不随包:放到 `~/.cgmaker/config.json`。
|
|
21
|
+
|
|
22
|
+
流程给人看:仓库 `docs/users.md`。给 Agent:本包 `skill/cgmaker/SKILL.md`(怎么发)、`skill/cgmaker-identity/SKILL.md`(参数与配置指南)。
|
package/bin/cgmaker.js
ADDED
package/dist/index.js
ADDED
|
@@ -0,0 +1,45 @@
|
|
|
1
|
+
import M from"picocolors";import T from"node:fs";import C from"node:path";import z from"node:fs";import oe from"node:path";var Ae={$schema:"http://json-schema.org/draft-07/schema#",description:"cgmaker CLI \u8FD4\u56DE\u6587\u6848\u5B57\u5178\uFF08\u5305\u542B code \u7801\u4E0E\u6CE8\u91CA\u6587\u6848\uFF09",whoami:{title_logged_in:{code:"",text:"\u8D26\u53F7\u767B\u5F55\u4FE1\u606F",comment:"whoami \u67E5\u770B\u5DF2\u767B\u5F55\u8D26\u53F7\u4FE1\u606F\u65F6\u7684\u5361\u7247\u4E3B\u6807\u9898"},title_expired:{code:"2003",text:"\u767B\u5F55\u5DF2\u5931\u6548",comment:"whoami \u672C\u5730\u51ED\u636E\u8FC7\u671F\u65F6\u7684\u8B66\u544A\u5361\u7247\u6807\u9898"},title_offline:{code:"9000",text:"\u79BB\u7EBF\u6A21\u5F0F",comment:"whoami \u672C\u5730\u6709\u51ED\u636E\u4F46\u7F51\u7EDC\u4E0D\u53EF\u8FBE\u65F6\u7684\u5361\u7247\u6807\u9898"},title_not_logged_in:{code:"2001",text:"\u672A\u767B\u5F55",comment:"whoami \u5C1A\u672A\u767B\u5F55\u65F6\u7684\u63D0\u793A\u5361\u7247\u6807\u9898"},status_expired:{code:"2003",text:"\u51ED\u8BC1\u5DF2\u8FC7\u671F",comment:"\u51ED\u8BC1\u8FC7\u671F\u72B6\u6001\u63CF\u8FF0"},hint_relogin:{code:"2001",text:"\u8BF7\u6267\u884C npx cgmaker login \u91CD\u65B0\u767B\u5F55",comment:"\u91CD\u65B0\u767B\u5F55\u5F15\u5BFC\u5EFA\u8BAE"},status_offline:{code:"9000",text:"\u672C\u5730\u6709\u51ED\u636E\uFF0C\u4F46\u5F53\u524D\u7F51\u7EDC\u65E0\u6CD5\u8FDE\u63A5\u8BA4\u8BC1\u670D\u52A1\u5668",comment:"\u79BB\u7EBF\u72B6\u6001\u539F\u56E0\u63CF\u8FF0"},hint_check_network:{code:"9000",text:"\u8BF7\u68C0\u67E5\u7F51\u7EDC\u8FDE\u63A5\u540E\u91CD\u8BD5",comment:"\u79BB\u7EBF\u72B6\u6001\u89E3\u51B3\u5EFA\u8BAE"},status_not_logged_in:{code:"2001",text:"\u5C1A\u672A\u767B\u5F55\u6258\u7BA1\u5E73\u53F0",comment:"\u672A\u767B\u5F55\u72B6\u6001\u63CF\u8FF0"},hint_login_now:{code:"2001",text:"\u8BF7\u6267\u884C npx cgmaker login \u5F00\u59CB\u767B\u5F55\u6388\u6743",comment:"\u672A\u767B\u5F55\u65F6\u7684\u767B\u5F55\u5F15\u5BFC\u5EFA\u8BAE"},label_nickname:{code:"",text:"\u7528\u6237\u6635\u79F0",comment:"\u5361\u7247\u5C55\u793A\u5B57\u6BB5\u6807\u7B7E"},label_uid:{code:"",text:"\u7528\u6237 ID",comment:"\u5361\u7247\u5C55\u793A\u5B57\u6BB5\u6807\u7B7E"},label_verified:{code:"",text:"\u5B9E\u540D\u8BA4\u8BC1",comment:"\u5361\u7247\u5C55\u793A\u5B57\u6BB5\u6807\u7B7E"},val_verified_yes:{code:"",text:"\u5DF2\u5B9E\u540D\u8BA4\u8BC1",comment:"\u5DF2\u5B8C\u6210\u5B9E\u540D\u8BA4\u8BC1\u72B6\u6001"},val_verified_no:{code:"",text:"\u672A\u8BA4\u8BC1 (\u90E8\u5206\u6743\u9650\u53D7\u9650)",comment:"\u672A\u5B8C\u6210\u5B9E\u540D\u8BA4\u8BC1\u72B6\u6001"},label_vip:{code:"",text:"\u4F1A\u5458\u7B49\u7EA7",comment:"\u5361\u7247\u5C55\u793A\u5B57\u6BB5\u6807\u7B7E"},label_admin:{code:"",text:"\u7BA1\u7406\u5458",comment:"\u5361\u7247\u5C55\u793A\u5B57\u6BB5\u6807\u7B7E"},label_sauthor:{code:"",text:"\u7B7E\u7EA6\u4F5C\u8005",comment:"\u5361\u7247\u5C55\u793A\u5B57\u6BB5\u6807\u7B7E"},val_yes:{code:"",text:"\u662F",comment:"\u5E03\u5C14\u771F\u503C\u6587\u6848"},label_lumi_username:{code:"",text:"\u5E73\u53F0\u8D26\u53F7",comment:"\u5361\u7247\u5C55\u793A\u5B57\u6BB5\u6807\u7B7E"},label_lumi_roles:{code:"",text:"\u5E73\u53F0\u89D2\u8272",comment:"\u5361\u7247\u5C55\u793A\u5B57\u6BB5\u6807\u7B7E"},role_user:{code:"",text:"\u666E\u901A\u7528\u6237",comment:"lumi \u89D2\u8272 user \u7684\u4E2D\u6587\u540D"},role_author:{code:"",text:"\u4F5C\u8005",comment:"lumi \u89D2\u8272 author \u7684\u4E2D\u6587\u540D"},role_signed_author:{code:"",text:"\u7B7E\u7EA6\u4F5C\u8005",comment:"lumi \u89D2\u8272 signed_author \u7684\u4E2D\u6587\u540D"},role_signed_template_author:{code:"",text:"\u7B7E\u7EA6\u6A21\u677F\u4F5C\u8005",comment:"lumi \u89D2\u8272 signed_template_author \u7684\u4E2D\u6587\u540D"},label_expires_at:{code:"",text:"\u51ED\u8BC1\u6709\u6548\u671F\u81F3",comment:"\u5361\u7247\u5C55\u793A\u5B57\u6BB5\u6807\u7B7E"},footer_logged_in:{code:"",text:"\u63D0\u793A\uFF1A\u767B\u5F55\u51ED\u636E\u5DF2\u5B89\u5168\u5B58\u50A8\u4E8E\u7CFB\u7EDF\u672C\u5730\u5BC6\u94A5\u73AF\u4E2D\u3002",comment:"\u767B\u5F55\u5361\u7247\u5E95\u90E8\u5B89\u5168\u63D0\u793A"}},publish:{title_success:{code:"",text:"\u6E38\u620F\u53D1\u7248\u6210\u529F",comment:"\u6E38\u620F\u53D1\u5E03\u6210\u529F\u5361\u7247\u6807\u9898"},label_game_id:{code:"",text:"\u6E38\u620F ID",comment:"\u5361\u7247\u5C55\u793A\u5B57\u6BB5\u6807\u7B7E"},label_release_version:{code:"",text:"\u53D1\u5E03\u7248\u672C",comment:"\u5361\u7247\u5C55\u793A\u5B57\u6BB5\u6807\u7B7E"},label_version_no:{code:"",text:"\u7248\u672C\u5E8F\u53F7",comment:"\u5361\u7247\u5C55\u793A\u5B57\u6BB5\u6807\u7B7E"},label_variant_type:{code:"",text:"\u53D8\u4F53\u7C7B\u578B",comment:"\u5361\u7247\u5C55\u793A\u5B57\u6BB5\u6807\u7B7E"},val_demo:{code:"",text:"\u8BD5\u73A9\u7248",comment:"\u8BD5\u73A9\u7248\u7C7B\u578B"},val_official:{code:"",text:"\u6B63\u5F0F\u7248",comment:"\u6B63\u5F0F\u7248\u7C7B\u578B"},val_derived:{code:"",text:"\u884D\u751F",comment:"\u884D\u751F\u53D8\u4F53\u7C7B\u578B"},label_parent_game_id:{code:"",text:"\u7236\u6E38\u620F ID",comment:"\u5361\u7247\u5C55\u793A\u5B57\u6BB5\u6807\u7B7E"},label_package_size:{code:"",text:"\u8D44\u6E90\u5305\u5927\u5C0F",comment:"\u5361\u7247\u5C55\u793A\u5B57\u6BB5\u6807\u7B7E"},footer_success:{code:"",text:"dist/ \u9759\u6001\u5305\u5DF2\u6210\u529F\u6253\u5305\u8F6C\u7801\u5E76\u4E0A\u4F20\u81F3\u6258\u7BA1\u5E73\u53F0\u3002",comment:"\u6E38\u620F\u53D1\u5E03\u6210\u529F\u5361\u7247\u5E95\u90E8\u6CE8\u91CA"},title_passed:{code:"",text:"\u6E38\u620F\u53D1\u7248\u6210\u529F",comment:"\u6E38\u620F\u53D1\u5E03\u4E14\u5BA1\u6838\u5DF2\u901A\u8FC7\u5361\u7247\u6807\u9898"},title_reviewing:{code:"",text:"\u6E38\u620F\u5DF2\u63D0\u4EA4\u5BA1\u6838",comment:"\u6E38\u620F\u53D1\u5E03\u4F46\u5BA1\u6838\u4E2D\u5361\u7247\u6807\u9898"},title_rejected:{code:"",text:"\u6E38\u620F\u5BA1\u6838\u88AB\u62D2\u7EDD",comment:"\u6E38\u620F\u53D1\u5E03\u4F46\u5BA1\u6838\u88AB\u62D2\u7EDD\u5361\u7247\u6807\u9898"},footer_passed:{code:"",text:"\u5DF2\u901A\u8FC7\u5BA1\u6838\uFF0C\u53EF\u6B63\u5E38\u5B89\u88C5\u3002",comment:"\u6E38\u620F\u53D1\u5E03\u4E14\u5BA1\u6838\u5DF2\u901A\u8FC7\u5361\u7247\u5E95\u90E8\u6CE8\u91CA"},footer_reviewing:{code:"",text:"\u673A\u5BA1/\u4EBA\u5BA1\u4E2D\uFF0C\u7528 games --versions \u67E5\u7EC8\u6001\u3002",comment:"\u6E38\u620F\u53D1\u5E03\u4F46\u5BA1\u6838\u4E2D\u5361\u7247\u5E95\u90E8\u6CE8\u91CA"},footer_rejected:{code:"",text:"\u5BA1\u6838\u88AB\u62D2\u7EDD\uFF0C\u7528 games --versions \u67E5\u770B\u8BE6\u60C5\u3002",comment:"\u6E38\u620F\u53D1\u5E03\u4F46\u5BA1\u6838\u88AB\u62D2\u7EDD\u5361\u7247\u5E95\u90E8\u6CE8\u91CA"}},publish_template:{title_success:{code:"",text:"\u6A21\u677F\u53D1\u7248\u6210\u529F",comment:"\u6A21\u677F\u53D1\u5E03\u6210\u529F\u5361\u7247\u6807\u9898"},label_template_id:{code:"",text:"\u6A21\u677F ID",comment:"\u5361\u7247\u5C55\u793A\u5B57\u6BB5\u6807\u7B7E"},label_template_name:{code:"",text:"\u6A21\u677F\u540D\u79F0",comment:"\u5361\u7247\u5C55\u793A\u5B57\u6BB5\u6807\u7B7E"},label_version:{code:"",text:"\u7248\u672C\u53F7",comment:"\u5361\u7247\u5C55\u793A\u5B57\u6BB5\u6807\u7B7E"},label_revision_id:{code:"",text:"\u7248\u672C ID",comment:"\u5361\u7247\u5C55\u793A\u5B57\u6BB5\u6807\u7B7E"},label_data_ver:{code:"",text:"\u8D44\u6E90\u7248\u672C",comment:"\u5361\u7247\u5C55\u793A\u5B57\u6BB5\u6807\u7B7E"},label_data_summary:{code:"",text:"\u8D44\u6E90\u8BF4\u660E",comment:"\u6570\u636E\u5305 summary \u5361\u7247\u6807\u7B7E"},footer_success:{code:"",text:"\u6A21\u677F\u4EE3\u7801\u53CA\u4F9D\u8D56\u5DF2\u6210\u529F\u90E8\u7F72\u5230\u6258\u7BA1\u5E73\u53F0\uFF0C\u5DF2\u66F4\u65B0 .cgmaker/origin.json\u3002",comment:"\u6A21\u677F\u53D1\u7248\u6210\u529F\u5361\u7247\u5E95\u90E8\u6CE8\u91CA"},title_passed:{code:"",text:"\u6A21\u677F\u53D1\u7248\u6210\u529F",comment:"\u6A21\u677F\u53D1\u5E03\u4E14\u5BA1\u6838\u5DF2\u901A\u8FC7\u5361\u7247\u6807\u9898"},title_reviewing:{code:"",text:"\u6A21\u677F\u5DF2\u63D0\u4EA4\u5BA1\u6838",comment:"\u6A21\u677F\u53D1\u5E03\u4F46\u5BA1\u6838\u4E2D\u5361\u7247\u6807\u9898"},title_rejected:{code:"",text:"\u6A21\u677F\u5BA1\u6838\u88AB\u62D2\u7EDD",comment:"\u6A21\u677F\u53D1\u5E03\u4F46\u5BA1\u6838\u88AB\u62D2\u7EDD\u5361\u7247\u6807\u9898"},footer_passed:{code:"",text:"\u5DF2\u901A\u8FC7\u5BA1\u6838\uFF0C\u53EF\u6B63\u5E38\u5B89\u88C5\u3002",comment:"\u6A21\u677F\u53D1\u5E03\u4E14\u5BA1\u6838\u5DF2\u901A\u8FC7\u5361\u7247\u5E95\u90E8\u6CE8\u91CA"},footer_reviewing:{code:"",text:"\u673A\u5BA1/\u4EBA\u5BA1\u4E2D\uFF0C\u7528 templates --versions \u67E5\u7EC8\u6001\u3002",comment:"\u6A21\u677F\u53D1\u5E03\u4F46\u5BA1\u6838\u4E2D\u5361\u7247\u5E95\u90E8\u6CE8\u91CA"},footer_rejected:{code:"",text:"\u5BA1\u6838\u88AB\u62D2\u7EDD\uFF0C\u7528 templates --versions \u67E5\u770B\u8BE6\u60C5\u3002",comment:"\u6A21\u677F\u53D1\u5E03\u4F46\u5BA1\u6838\u88AB\u62D2\u7EDD\u5361\u7247\u5E95\u90E8\u6CE8\u91CA"},title_data_success:{code:"",text:"\u8D44\u6E90\u5305\u5DF2\u53D1\u5E03",comment:"\u53EA\u53D1\u6570\u636E\u7248\u672C\u6210\u529F\u5361\u7247\u6807\u9898"},footer_data_success:{code:"",text:"\u672A\u53D1\u65B0\u4EE3\u7801\u7248\u672C\u3002origin.json \u5DF2\u66F4\u65B0\u672C\u6B21 data_ver \u4E0E\u65B0\u7684 data_ver_id\uFF1B\u6E38\u620F\u4F5C\u8005\u53EF\u7528 --data-id \u4E0B\u8F7D\u8BE5\u5305\u3002",comment:"\u53EA\u53D1\u6570\u636E\u7248\u672C\u6210\u529F\u5361\u7247\u5E95\u90E8\u6CE8\u91CA"}},publish_project:{title_success:{code:"",text:"\u5F00\u6E90\u5DE5\u7A0B\u53D1\u7248\u6210\u529F",comment:"\u5F00\u6E90\u5DE5\u7A0B\u53D1\u7248\u6210\u529F\u5361\u7247\u6807\u9898"},label_project_id:{code:"",text:"\u5DE5\u7A0B ID",comment:"\u5361\u7247\u5C55\u793A\u5B57\u6BB5\u6807\u7B7E"},label_project_name:{code:"",text:"\u5DE5\u7A0B\u540D\u79F0",comment:"\u5361\u7247\u5C55\u793A\u5B57\u6BB5\u6807\u7B7E"},label_release_version:{code:"",text:"\u53D1\u5E03\u7248\u672C",comment:"\u5361\u7247\u5C55\u793A\u5B57\u6BB5\u6807\u7B7E"},label_post_id:{code:"",text:"\u5173\u8054\u793E\u533A\u5E16",comment:"\u5361\u7247\u5C55\u793A\u5B57\u6BB5\u6807\u7B7E"},label_package_size:{code:"",text:"\u6E90\u7801\u5305\u5927\u5C0F",comment:"\u5361\u7247\u5C55\u793A\u5B57\u6BB5\u6807\u7B7E"},footer_success:{code:"",text:"\u6E90\u7801\u5305\u5DF2\u4E0A\u4F20\uFF0C\u7248\u672C\u5DF2\u81EA\u52A8\u63D0\u4EA4\u673A\u5BA1\uFF1B\u5DF2\u540C\u6B65\u66F4\u65B0 .cgmaker/project.json\u3002",comment:"\u5F00\u6E90\u5DE5\u7A0B\u53D1\u7248\u6210\u529F\u5361\u7247\u5E95\u90E8\u6CE8\u91CA"},title_passed:{code:"",text:"\u5F00\u6E90\u5DE5\u7A0B\u53D1\u7248\u6210\u529F",comment:"\u5F00\u6E90\u5DE5\u7A0B\u53D1\u5E03\u4E14\u5BA1\u6838\u5DF2\u901A\u8FC7\u5361\u7247\u6807\u9898"},title_reviewing:{code:"",text:"\u5F00\u6E90\u5DE5\u7A0B\u5DF2\u63D0\u4EA4\u5BA1\u6838",comment:"\u5F00\u6E90\u5DE5\u7A0B\u53D1\u5E03\u4F46\u5BA1\u6838\u4E2D\u5361\u7247\u6807\u9898"},title_rejected:{code:"",text:"\u5F00\u6E90\u5DE5\u7A0B\u5BA1\u6838\u88AB\u62D2\u7EDD",comment:"\u5F00\u6E90\u5DE5\u7A0B\u53D1\u5E03\u4F46\u5BA1\u6838\u88AB\u62D2\u7EDD\u5361\u7247\u6807\u9898"},footer_passed:{code:"",text:"\u5DF2\u901A\u8FC7\u5BA1\u6838\uFF0C\u53EF\u6B63\u5E38\u5B89\u88C5\u3002",comment:"\u5F00\u6E90\u5DE5\u7A0B\u53D1\u5E03\u4E14\u5BA1\u6838\u5DF2\u901A\u8FC7\u5361\u7247\u5E95\u90E8\u6CE8\u91CA"},footer_reviewing:{code:"",text:"\u673A\u5BA1/\u4EBA\u5BA1\u4E2D\uFF0C\u7528 projects --versions \u67E5\u7EC8\u6001\u3002",comment:"\u5F00\u6E90\u5DE5\u7A0B\u53D1\u5E03\u4F46\u5BA1\u6838\u4E2D\u5361\u7247\u5E95\u90E8\u6CE8\u91CA"},footer_rejected:{code:"",text:"\u5BA1\u6838\u88AB\u62D2\u7EDD\uFF0C\u7528 projects --versions \u67E5\u770B\u8BE6\u60C5\u3002",comment:"\u5F00\u6E90\u5DE5\u7A0B\u53D1\u5E03\u4F46\u5BA1\u6838\u88AB\u62D2\u7EDD\u5361\u7247\u5E95\u90E8\u6CE8\u91CA"}},templates:{table_title:{code:"",text:"\u6211\u7684\u6A21\u677F\u8D27\u67B6\u5217\u8868\uFF1A",comment:"\u6A21\u677F\u5217\u8868\u8868\u683C\u4E3B\u6807\u9898"},empty_list:{code:"",text:"\u6682\u65E0\u6A21\u677F\u6570\u636E",comment:"\u5217\u8868\u4E3A\u7A7A\u65F6\u7684\u5360\u4F4D\u8BF4\u660E"},col_template_id:{code:"",text:"\u6A21\u677F ID",comment:"\u8868\u683C\u5217\u540D"},col_template_name:{code:"",text:"\u6A21\u677F\u540D\u79F0",comment:"\u8868\u683C\u5217\u540D"},col_latest_version:{code:"",text:"\u6700\u65B0\u7248\u672C",comment:"\u8868\u683C\u5217\u540D"},query_card_title:{code:"",text:"\u6A21\u677F\u8BE6\u60C5",comment:"\u67E5\u8BE2\u6A21\u677F\u8BE6\u60C5\u5361\u7247\u6807\u9898"},versions_title:{code:"",text:"\u6A21\u677F\u53D1\u5E03\u7248\u672C\u5386\u53F2",comment:"\u6A21\u677F\u7248\u672C\u5217\u8868\u6807\u9898"},data_packages_title:{code:"",text:"\u6A21\u677F\u7ED1\u5B9A\u7684\u6570\u636E\u5305\u5217\u8868",comment:"\u6A21\u677F\u6570\u636E\u5305\u5217\u8868\u6807\u9898"},col_data_id:{code:"",text:"\u6570\u636E\u5305 ID",comment:"\u6A21\u677F\u6570\u636E\u5305\u8868\u683C\u5217\u540D"},col_data_ver:{code:"",text:"data_ver",comment:"\u6A21\u677F\u6570\u636E\u5305\u8868\u683C\u5217\u540D"},col_data_summary:{code:"",text:"\u8BF4\u660E",comment:"\u6A21\u677F\u6570\u636E\u5305 summary \u5217\u540D"},empty_data:{code:"",text:"\u6682\u65E0\u6570\u636E\u5305",comment:"\u6A21\u677F\u6570\u636E\u5305\u5217\u8868\u4E3A\u7A7A\u65F6\u7684\u5360\u4F4D\u8BF4\u660E"}},games:{table_title:{code:"",text:"\u6211\u7684\u6E38\u620F\u8D27\u67B6\u5217\u8868\uFF1A",comment:"\u6E38\u620F\u5217\u8868\u8868\u683C\u4E3B\u6807\u9898"},empty_list:{code:"",text:"\u6682\u65E0\u6E38\u620F\u6570\u636E",comment:"\u5217\u8868\u4E3A\u7A7A\u65F6\u7684\u5360\u4F4D\u8BF4\u660E"},col_game_id:{code:"",text:"\u6E38\u620F ID",comment:"\u8868\u683C\u5217\u540D"},col_game_name:{code:"",text:"\u6E38\u620F\u540D\u79F0",comment:"\u8868\u683C\u5217\u540D"},col_variant:{code:"",text:"\u53D8\u4F53\u7C7B\u578B",comment:"\u8868\u683C\u5217\u540D"},col_latest_version:{code:"",text:"\u6700\u65B0\u7248\u672C",comment:"\u8868\u683C\u5217\u540D"},val_demo:{code:"",text:"\u8BD5\u73A9",comment:"\u8868\u683C\u5217\u5355\u5143\u683C\u5185\u6587\u672C"},val_official:{code:"",text:"\u6B63\u5F0F",comment:"\u8868\u683C\u5217\u5355\u5143\u683C\u5185\u6587\u672C"},val_derived:{code:"",text:"\u884D\u751F",comment:"\u8868\u683C\u5217\u5355\u5143\u683C\u5185\u6587\u672C"},query_card_title:{code:"",text:"\u6E38\u620F\u8BE6\u60C5",comment:"\u67E5\u8BE2\u6E38\u620F\u8BE6\u60C5\u5361\u7247\u6807\u9898"},versions_title:{code:"",text:"\u6E38\u620F\u53D1\u5E03\u7248\u672C\u5386\u53F2",comment:"\u6E38\u620F\u7248\u672C\u5217\u8868\u6807\u9898"}},projects:{table_title:{code:"",text:"\u6211\u7684\u5F00\u6E90\u5DE5\u7A0B\u5217\u8868\uFF1A",comment:"\u5F00\u6E90\u5DE5\u7A0B\u5217\u8868\u8868\u683C\u4E3B\u6807\u9898"},empty_list:{code:"",text:"\u6682\u65E0\u5F00\u6E90\u5DE5\u7A0B\u6570\u636E",comment:"\u5217\u8868\u4E3A\u7A7A\u65F6\u7684\u5360\u4F4D\u8BF4\u660E"},col_project_id:{code:"",text:"\u5DE5\u7A0B ID",comment:"\u8868\u683C\u5217\u540D"},col_project_name:{code:"",text:"\u5DE5\u7A0B\u540D\u79F0",comment:"\u8868\u683C\u5217\u540D"},col_latest_version:{code:"",text:"\u6700\u65B0\u7248\u672C",comment:"\u8868\u683C\u5217\u540D"},query_card_title:{code:"",text:"\u5F00\u6E90\u5DE5\u7A0B\u8BE6\u60C5",comment:"\u67E5\u8BE2\u5F00\u6E90\u5DE5\u7A0B\u8BE6\u60C5\u5361\u7247\u6807\u9898"},versions_title:{code:"",text:"\u5F00\u6E90\u5DE5\u7A0B\u7248\u672C\u5386\u53F2",comment:"\u5F00\u6E90\u5DE5\u7A0B\u7248\u672C\u5217\u8868\u6807\u9898"}},versions:{col_version_id:{code:"",text:"\u7248\u672C ID",comment:"\u7248\u672C\u5386\u53F2\u8868\u683C\u5217\u540D"},col_version:{code:"",text:"\u7248\u672C\u53F7",comment:"\u7248\u672C\u5386\u53F2\u8868\u683C\u5217\u540D"},col_status:{code:"",text:"\u5BA1\u6838",comment:"\u7248\u672C\u5386\u53F2\u8868\u683C\u5217\u540D"},col_published_at:{code:"",text:"\u901A\u8FC7\u65F6\u95F4",comment:"\u7248\u672C\u901A\u8FC7\u65F6\u95F4\uFF08published_at\uFF0C\u672A\u901A\u8FC7\u663E\u793A -\uFF09"},status_draft:{code:"",text:"\u8349\u7A3F",comment:"\u7248\u672C status=1"},status_machine:{code:"",text:"\u673A\u5BA1\u4E2D",comment:"\u7248\u672C status=2"},status_human:{code:"",text:"\u4EBA\u5BA1\u4E2D",comment:"\u7248\u672C status=3"},status_passed:{code:"",text:"\u5DF2\u901A\u8FC7",comment:"\u7248\u672C status=4"},status_rejected:{code:"",text:"\u5DF2\u62D2\u7EDD",comment:"\u7248\u672C status=5"},empty_versions:{code:"",text:"\u6682\u65E0\u7248\u672C\u8BB0\u5F55",comment:"\u7248\u672C\u5386\u53F2\u4E3A\u7A7A\u65F6\u7684\u5360\u4F4D\u8BF4\u660E"}},shelf:{action_create:{code:"",text:"\u521B\u5EFA",comment:"\u8D27\u67B6\u64CD\u4F5C\u884C\u4E3A\u63CF\u8FF0"},action_update:{code:"",text:"\u66F4\u65B0",comment:"\u8D27\u67B6\u64CD\u4F5C\u884C\u4E3A\u63CF\u8FF0"},type_template:{code:"",text:"\u6A21\u677F",comment:"\u8D27\u67B6\u5B9E\u4F53\u7C7B\u578B"},type_game:{code:"",text:"\u6E38\u620F",comment:"\u8D27\u67B6\u5B9E\u4F53\u7C7B\u578B"},type_project:{code:"",text:"\u5F00\u6E90\u5DE5\u7A0B",comment:"\u8D27\u67B6\u5B9E\u4F53\u7C7B\u578B"},label_community_post:{code:"",text:"\u5173\u8054\u793E\u533A\u5E16",comment:"\u8D27\u67B6\u5361\u7247\u5C55\u793A\u5B57\u6BB5\u6807\u7B7E"},card_title_shelf_created:{code:"",text:"\u8D27\u67B6\u521B\u5EFA\u6210\u529F",comment:"\u8D27\u67B6\u521B\u5EFA\u6210\u529F\u5361\u7247\u6807\u9898\u540E\u7F00"},card_title_shelf_updated:{code:"",text:"\u8D27\u67B6\u66F4\u65B0\u6210\u529F",comment:"\u8D27\u67B6\u66F4\u65B0\u6210\u529F\u5361\u7247\u6807\u9898\u540E\u7F00"}},error:{title:{code:"",text:"\u64CD\u4F5C\u672A\u5B8C\u6210",comment:"\u9519\u8BEF\u5361\u7247\u901A\u7528\u4E3B\u6807\u9898"},label_code:{code:"",text:"\u9519\u8BEF\u4EE3\u7801",comment:"\u9519\u8BEF\u5361\u7247\u5B57\u6BB5\u6807\u7B7E"},label_detail:{code:"",text:"\u9519\u8BEF\u8BE6\u60C5",comment:"\u9519\u8BEF\u5361\u7247\u5B57\u6BB5\u6807\u7B7E"},label_hint:{code:"",text:"\u89E3\u51B3\u5EFA\u8BAE",comment:"\u9519\u8BEF\u5361\u7247\u5B57\u6BB5\u6807\u7B7E"},label_log_path:{code:"",text:"\u8BE6\u7EC6\u65E5\u5FD7",comment:"\u9519\u8BEF\u5361\u7247\u5B57\u6BB5\u6807\u7B7E"},footer:{code:"",text:"\u5982\u9700\u8FDB\u4E00\u6B65\u5E2E\u52A9\uFF0C\u8BF7\u8054\u7CFB\u8FD0\u7EF4\u6216\u67E5\u770B\u4E0A\u65B9\u65E5\u5FD7\u6587\u4EF6\u3002",comment:"\u9519\u8BEF\u5361\u7247\u5E95\u90E8\u6CE8\u91CA"},default_message:{code:"",text:"\u672A\u77E5\u9519\u8BEF",comment:"\u7F3A\u7701\u9519\u8BEF\u6587\u6848"}},error_codes:{"1001":{code:"1001",text:"\u8F93\u5165\u53C2\u6570\u65E0\u6548\uFF0C\u8BF7\u68C0\u67E5\u547D\u4EE4\u53C2\u6570\u3002",comment:"\u547D\u4EE4\u884C\u53C2\u6570\u4E0D\u7B26\u5408\u89C4\u8303"},"1001_missing_dist":{code:"1001",text:"\u8BF7\u5148\u5728\u5DE5\u7A0B\u76EE\u5F55\u8FD0\u884C npm run build \u751F\u6210 dist/index.html\u3002",comment:"\u53D1\u5E03\u6E38\u620F\u7F3A\u5C11 dist/ \u4EA7\u7269\u65F6\u7684\u89E3\u51B3\u5EFA\u8BAE"},"1003_checksum":{code:"1003",text:"\u6A21\u677F\u5305\u6821\u9A8C\u4E0D\u5339\u914D\uFF0C\u53EF\u80FD\u662F\u4E91\u7AEF\u6587\u4EF6\u5F02\u5E38\u6216\u7F51\u7EDC\u4E0B\u8F7D\u53D7\u635F\uFF0C\u8BF7\u91CD\u8BD5\u6216\u8054\u7CFB\u6A21\u677F\u7EF4\u62A4\u8005\u91CD\u65B0\u53D1\u7248\u3002",comment:"\u6A21\u677F\u5B89\u88C5\u5305\u54C8\u5E0C\u6821\u9A8C\u5931\u8D25\u65F6\u7684\u89E3\u51B3\u5EFA\u8BAE"},"1002":{code:"1002",text:"\u6587\u4EF6\u8BFB\u53D6\u6216\u5199\u5165\u5931\u8D25\uFF0C\u8BF7\u68C0\u67E5\u6587\u4EF6\u6216\u76EE\u5F55\u6743\u9650\u3002",comment:"\u672C\u5730\u78C1\u76D8\u8BFB\u5199\u5F02\u5E38"},"2001":{code:"2001",text:"\u8BF7\u5148\u8FD0\u884C npx cgmaker login \u5B8C\u6210\u8D26\u53F7\u6388\u6743\u3002",comment:"\u5C1A\u672A\u767B\u5F55\u6216\u767B\u5F55\u6001\u5DF2\u88AB\u670D\u52A1\u7AEF\u540A\u9500"},"2002":{code:"2002",text:"\u767B\u5F55\u6388\u6743\u6D41\u7A0B\u5931\u8D25\uFF0C\u8BF7\u91CD\u8BD5\u3002",comment:"OAuth \u767B\u5F55\u672A\u6210\u529F\u5B8C\u6210"},"2003":{code:"2003",text:"\u767B\u5F55\u51ED\u8BC1\u5DF2\u8FC7\u671F\uFF0C\u8BF7\u91CD\u65B0\u767B\u5F55\u3002",comment:"\u7528\u6237 refresh_token \u8D85\u8FC7\u6709\u6548\u671F"},"2004":{code:"2004",text:"\u6388\u6743\u8F6E\u8BE2\u8D85\u65F6\uFF0C\u8BF7\u91CD\u65B0\u53D1\u8D77\u767B\u5F55\u3002",comment:"\u6253\u5F00\u6D4F\u89C8\u5668\u8D85\u8FC7 5 \u5206\u949F\u672A\u5B8C\u6210\u767B\u5F55"},"8000":{code:"8000",text:"\u5E73\u53F0\u670D\u52A1\u7EF4\u62A4\u4E2D\uFF0C\u8BF7\u7A0D\u540E\u91CD\u8BD5\u3002",comment:"\u670D\u52A1\u7AEF\u7EF4\u62A4\u505C\u673A"},"8001":{code:"8001",text:"\u8BF7\u6C42\u7F3A\u5C11\u5FC5\u8981\u53C2\u6570\uFF0C\u8BF7\u68C0\u67E5\u8F93\u5165\u3002",comment:"\u670D\u52A1\u7AEF\u7F3A\u5C11\u5FC5\u4F20\u5B57\u6BB5"},"8002":{code:"8002",text:"\u8BF7\u6C42\u53C2\u6570\u4E0D\u5408\u6CD5\uFF0C\u8BF7\u68C0\u67E5\u4F20\u5165\u7684\u503C\u3002",comment:"\u670D\u52A1\u7AEF\u53C2\u6570\u6821\u9A8C\u672A\u901A\u8FC7"},"8004":{code:"8004",text:"\u5F53\u524D\u64CD\u4F5C\u9700\u8981\u5BF9\u5E94\u4F5C\u8005\u6216\u7B7E\u7EA6\u89D2\u8272\u6743\u9650\uFF0C\u8BF7\u786E\u8BA4\u8D26\u53F7\u6743\u9650\u540E\u91CD\u8BD5\u3002",comment:"\u8D26\u53F7\u89D2\u8272\u6743\u9650\u4E0D\u8DB3\uFF08\u5982\u672A\u7B7E\u7EA6\uFF09"},"8005":{code:"8005",text:"\u5E73\u53F0\u670D\u52A1\u51FA\u73B0\u5185\u90E8\u9519\u8BEF\uFF0C\u8BF7\u7A0D\u540E\u91CD\u8BD5\u3002",comment:"\u670D\u52A1\u7AEF\u7CFB\u7EDF\u5185\u90E8\u5F02\u5E38"},"8006":{code:"8006",text:"\u4F1A\u8BDD\u521B\u5EFA\u5931\u8D25\uFF0C\u8BF7\u5C1D\u8BD5\u91CD\u65B0\u767B\u5F55\u3002",comment:"\u6362\u53D6 session \u5931\u8D25"},"8007":{code:"8007",text:"\u767B\u5F55\u4F1A\u8BDD\u5DF2\u5931\u6548\uFF0C\u8BF7\u91CD\u65B0\u767B\u5F55\u3002",comment:"\u5F53\u524D session \u65E0\u6548"},"8400":{code:"8400",text:"\u670D\u52A1\u5668\u6846\u67B6\u9519\u8BEF\uFF0C\u8BF7\u7A0D\u540E\u91CD\u8BD5\u3002",comment:"\u7F51\u5173\u6216\u5E95\u5C42\u6846\u67B6\u9519\u8BEF"},"8999":{code:"8999",text:"\u670D\u52A1\u5668\u8FD4\u56DE\u672A\u77E5\u4E1A\u52A1\u9519\u8BEF\u3002",comment:"\u672A\u5F52\u7C7B\u7684\u4E1A\u52A1\u9519\u8BEF"},"9000":{code:"9000",text:"\u7F51\u7EDC\u65E0\u6CD5\u8FDE\u63A5\uFF0C\u8BF7\u68C0\u67E5\u7F51\u7EDC\u8BBE\u7F6E\u6216\u4EE3\u7406\u3002",comment:"\u672C\u5730\u65E0\u6CD5\u8FDE\u901A\u670D\u52A1\u5668"},"9001":{code:"9001",text:"\u7F51\u7EDC\u8BF7\u6C42\u8D85\u65F6\uFF0C\u8BF7\u68C0\u67E5\u7F51\u7EDC\u72B6\u51B5\u540E\u91CD\u8BD5\u3002",comment:"\u7F51\u7EDC\u8FDE\u63A5\u6216\u8BFB\u53D6\u8D85\u65F6"},"9002":{code:"9002",text:"\u670D\u52A1\u5668\u54CD\u5E94\u975E\u6B63\u5E38 HTTP \u72B6\u6001\uFF0C\u8BF7\u7A0D\u540E\u91CD\u8BD5\u3002",comment:"HTTP 4xx/5xx \u72B6\u6001\u54CD\u5E94"},"9003":{code:"9003",text:"\u76EE\u6807\u8D44\u6E90\u4E0D\u5B58\u5728\u6216\u670D\u52A1\u5668\u54CD\u5E94\u683C\u5F0F\u65E0\u6CD5\u89E3\u6790\u3002",comment:"\u67E5\u8BE2\u4E0D\u5230\u5BF9\u5E94\u8D44\u6E90\u6216\u54CD\u5E94\u4E0D\u662F\u5408\u6CD5 JSON"},"9999":{code:"9999",text:"\u670D\u52A1\u5668\u8FD4\u56DE\u5185\u5BB9\u4E3A\u7A7A\uFF0C\u8BF7\u7A0D\u540E\u91CD\u8BD5\u3002",comment:"\u4E0A\u6E38\u672A\u8FD4\u56DE\u6709\u6548\u6570\u636E"}},skill:{card_title:{code:"",text:"\u5DF2\u540C\u6B65 Agent skill",comment:"cgmaker skill \u6210\u529F\u5361\u7247\u6807\u9898"},label_kit:{code:"",text:"\u6E90",comment:"kit \u8DEF\u5F84"},label_copied:{code:"",text:"\u62F7\u8D1D",comment:"\u5DF2\u62F7\u8D1D\u7684 skill \u540D"},label_targets:{code:"",text:"\u76EE\u5F55",comment:"\u6247\u51FA\u76EE\u6807\u76F8\u5BF9\u8DEF\u5F84"}},common:{success_default:{code:"",text:"\u64CD\u4F5C\u6267\u884C\u6210\u529F\u3002",comment:"\u547D\u4EE4\u6267\u884C\u6210\u529F\u9ED8\u8BA4\u8BF4\u660E"},page_info_pattern:{code:"",text:"\u7B2C {page} \u9875\uFF0C\u672C\u9875 {count} \u6761\uFF0C\u5171 {total} \u6761",comment:"\u5217\u8868\u5E95\u90E8\u5206\u9875\u8BF4\u660E\u6A21\u677F"},login_required_confirm:{code:"2001",text:"\u5F53\u524D\u672A\u767B\u5F55\u5E73\u53F0\uFF0C\u662F\u5426\u73B0\u5728\u6253\u5F00\u6D4F\u89C8\u5668\u5B8C\u6210\u6388\u6743\uFF1F",comment:"\u4EFB\u610F\u547D\u4EE4\u9047\u5230\u672A\u767B\u5F55\u65F6\u7684\u786E\u8BA4\u63D0\u95EE"},login_cancelled:{code:"2001",text:"\u5DF2\u53D6\u6D88\u767B\u5F55\uFF0C\u65E0\u6CD5\u7EE7\u7EED\u5F53\u524D\u64CD\u4F5C\u3002",comment:"\u7528\u6237\u62D2\u7EDD\u767B\u5F55\u5F15\u5BFC\u540E\u7684\u63D0\u793A"},login_retrying:{code:"",text:"\u767B\u5F55\u6210\u529F\uFF0C\u6B63\u5728\u7EE7\u7EED\u521A\u624D\u7684\u64CD\u4F5C\u2026",comment:"\u767B\u5F55\u5B8C\u6210\u540E\u81EA\u52A8\u91CD\u8BD5\u539F\u547D\u4EE4"},login_failed:{code:"2002",text:"\u767B\u5F55\u672A\u5B8C\u6210\uFF0C\u65E0\u6CD5\u7EE7\u7EED\u5F53\u524D\u64CD\u4F5C\u3002",comment:"\u5F15\u5BFC\u767B\u5F55\u5931\u8D25\u540E\u7684\u63D0\u793A"}}};var Ee={_comment:"kit \u7528\u6237\u53EF\u89C1\u6587\u6848\uFF08\u5E2E\u52A9\u3001\u4EA4\u4E92\u3001\u6821\u9A8C\u3001\u901A\u7528\u6807\u7B7E\uFF09\u3002\u5360\u4F4D\u7B26 {name}\u3002\u4E0E cli-messages.json \u4E00\u5E76\u52A0\u8F7D\u3002",help:{tagline:{code:"",text:"\u6A59\u5149\u9759\u6001\u6E38\u620F\u5E73\u53F0\u5DE5\u5177",comment:"cgmaker --help \u6807\u9898\u526F\u6587\u6848"},usage_heading:{code:"",text:"\u7528\u6CD5:",comment:"\u5E2E\u52A9\u5206\u6BB5"},usage_line:{code:"",text:"cgmaker <command> [options]",comment:"\u7528\u6CD5\u793A\u4F8B"},section_publish:{code:"",text:"\u53D1\u5E03\u4E0E\u9274\u6743:",comment:"\u5E2E\u52A9\u5206\u6BB5"},section_shelf:{code:"",text:"\u8D27\u67B6\u7BA1\u7406:",comment:"\u5E2E\u52A9\u5206\u6BB5"},section_check:{code:"",text:"\u89C4\u8303\u6821\u9A8C:",comment:"\u5E2E\u52A9\u5206\u6BB5"},section_global:{code:"",text:"\u5168\u5C40\u9009\u9879:",comment:"\u5E2E\u52A9\u5206\u6BB5"},cmd_publish:{code:"",text:"\u53D1\u5E03\u6E38\u620F\u6B63\u5F0F\u7248\uFF1A\u4E0A\u4F20 dist/",comment:"publish"},cmd_publish_demo:{code:"",text:"\u8BD5\u73A9\uFF1A\u53EF\u65E0\u6B63\u5F0F\u7248\u9996\u53D1\uFF1B\u540E\u8865\u6B63\u5F0F\u7248\u4F1A\u81EA\u52A8\u6302\u63A5",comment:"publish --demo"},cmd_publish_template:{code:"",text:"\u53D1\u5E03\u6A21\u677F\uFF08\u4EE3\u7801\u7248\u672C\uFF09\uFF1B\u4E0A\u4F20\u8D44\u6E90\u65F6\u987B --data-ver\uFF0C\u53EF\u7528 --assets",comment:"publish-template"},cmd_publish_template_data:{code:"",text:"\u53EA\u53D1\u8D44\u6E90\u5305\uFF0C\u987B --data-ver\uFF1B\u53EF\u7528 --assets \u6307\u5B9A\u7EDD\u5BF9\u8DEF\u5F84",comment:"publish-template-data"},cmd_publish_project:{code:"",text:"\u53D1\u5E03\u5F00\u6E90\u5DE5\u7A0B",comment:"publish-project"},cmd_login:{code:"",text:"\u767B\u5F55\uFF08\u5DF2\u6709\u6709\u6548\u767B\u5F55\u5219\u8DF3\u8FC7\uFF1B--force \u5F3A\u5236\u91CD\u65B0\u6388\u6743\uFF09",comment:"login"},cmd_logout:{code:"",text:"\u9000\u51FA\u767B\u5F55\uFF0C\u6E05\u9664\u672C\u5730\u51ED\u8BC1",comment:"logout"},cmd_whoami:{code:"",text:"\u67E5\u770B\u5F53\u524D\u767B\u5F55\u72B6\u6001\u4E0E\u8D26\u53F7\u4FE1\u606F",comment:"whoami"},cmd_games:{code:"",text:"\u67E5\u770B\u6E38\u620F\u5217\u8868\uFF1B\u6216 --query / --versions",comment:"games"},cmd_games_create:{code:"",text:"\u521B\u5EFA\u6E38\u620F\u8D27\u67B6",comment:"games create"},cmd_games_update:{code:"",text:"\u4FEE\u6539\u6E38\u620F\u4FE1\u606F",comment:"games update"},cmd_templates:{code:"",text:"\u67E5\u770B\u6A21\u677F\u5217\u8868\uFF1B\u6216 --query / --versions / --data",comment:"templates"},cmd_templates_create:{code:"",text:"\u521B\u5EFA\u6A21\u677F\u8D27\u67B6",comment:"templates create"},cmd_templates_update:{code:"",text:"\u4FEE\u6539\u6A21\u677F\u540D\u79F0",comment:"templates update"},cmd_projects:{code:"",text:"\u67E5\u770B\u5F00\u6E90\u5DE5\u7A0B\u5217\u8868\uFF1B\u6216 --query / --versions",comment:"projects"},cmd_projects_create:{code:"",text:"\u521B\u5EFA\u5F00\u6E90\u5DE5\u7A0B\u8D27\u67B6",comment:"projects create"},cmd_projects_update:{code:"",text:"\u4FEE\u6539\u5F00\u6E90\u5DE5\u7A0B\u8D27\u67B6",comment:"projects update"},cmd_validate_template:{code:"",text:"\u9A8C\u8BC1\u5F53\u524D\u5DE5\u7A0B\u662F\u5426\u7B26\u5408\u6A21\u677F\u89C4\u8303",comment:"validate-template"},cmd_validate:{code:"",text:"\u53EF\u9009\uFF1A\u8DD1\u6A21\u677F\u6570\u636E\u6821\u9A8C\uFF08schema/logic.mjs\uFF09",comment:"validate"},cmd_skill:{code:"",text:"\u6247\u51FA Agent skill\uFF1A--platform cursor \u6216 --all",comment:"skill"},opt_json:{code:"",text:"\u4EE5\u673A\u5668 JSON \u4FE1\u5C01\u8F93\u51FA",comment:"--json"},opt_verbose:{code:"",text:"\u8F93\u51FA\u8C03\u8BD5\u65E5\u5FD7",comment:"--verbose"},opt_no_interactive:{code:"",text:"\u7981\u7528\u4EA4\u4E92\u5F0F\u5F15\u5BFC\uFF0C\u7F3A\u53C2\u65F6\u76F4\u63A5\u62A5\u9519",comment:"--no-interactive"},opt_help:{code:"",text:"\u67E5\u770B\u5E2E\u52A9",comment:"--help"}},prompt:{cancel:{code:"",text:"\u5DF2\u53D6\u6D88\u64CD\u4F5C\u3002",comment:"Ctrl+C \u53D6\u6D88\u4EA4\u4E92"},intro:{code:"",text:"\u6A59\u5149 cgmaker \u5E73\u53F0\u5DE5\u5177",comment:"\u4E3B\u83DC\u5355\u6807\u9898"},main_message:{code:"",text:"\u8BF7\u9009\u62E9\u8981\u6267\u884C\u7684\u64CD\u4F5C\uFF1A",comment:"\u4E3B\u83DC\u5355\u63D0\u95EE"},main_publish_label:{code:"",text:"\u53D1\u5E03\u6E38\u620F (publish)",comment:"\u4E3B\u83DC\u5355"},main_publish_hint:{code:"",text:"\u4E0A\u4F20 dist/ \u5230\u5E73\u53F0",comment:"\u4E3B\u83DC\u5355"},main_publish_template_label:{code:"",text:"\u53D1\u5E03\u6A21\u677F (publish-template)",comment:"\u4E3B\u83DC\u5355"},main_publish_template_hint:{code:"",text:"\u4E0A\u4F20\u6A21\u677F\u4EE3\u7801\u7248\u672C",comment:"\u4E3B\u83DC\u5355"},main_publish_template_data_label:{code:"",text:"\u53EA\u53D1\u6A21\u677F\u8D44\u6E90\u5305 (publish-template-data)",comment:"\u4E3B\u83DC\u5355"},main_publish_template_data_hint:{code:"",text:"\u4E0D\u53D1\u65B0\u4EE3\u7801\u7248\u672C\uFF1B\u6E38\u620F\u4F5C\u8005\u7528 --data-id \u4E0B\u8F7D",comment:"\u4E3B\u83DC\u5355"},main_publish_project_label:{code:"",text:"\u53D1\u5E03\u5F00\u6E90\u5DE5\u7A0B (publish-project)",comment:"\u4E3B\u83DC\u5355"},main_publish_project_hint:{code:"",text:"\u6253\u5305\u4E0A\u4F20\u6E90\u7801\u5DE5\u7A0B",comment:"\u4E3B\u83DC\u5355"},main_games_label:{code:"",text:"\u6E38\u620F\u8D27\u67B6\u7BA1\u7406 (games)",comment:"\u4E3B\u83DC\u5355"},main_games_hint:{code:"",text:"\u5217\u8868\u3001\u67E5\u770B\u8BE6\u60C5\u3001\u521B\u5EFA\u6216\u6539\u540D",comment:"\u4E3B\u83DC\u5355"},main_templates_label:{code:"",text:"\u6A21\u677F\u8D27\u67B6\u7BA1\u7406 (templates)",comment:"\u4E3B\u83DC\u5355"},main_templates_hint:{code:"",text:"\u5217\u8868\u3001\u67E5\u770B\u8BE6\u60C5\u3001\u521B\u5EFA\u6216\u6539\u540D",comment:"\u4E3B\u83DC\u5355"},main_projects_label:{code:"",text:"\u5F00\u6E90\u5DE5\u7A0B\u7BA1\u7406 (projects)",comment:"\u4E3B\u83DC\u5355"},main_projects_hint:{code:"",text:"\u5217\u8868\u3001\u67E5\u770B\u8BE6\u60C5\u3001\u521B\u5EFA\u6216\u6539\u540D",comment:"\u4E3B\u83DC\u5355"},main_login_label:{code:"",text:"\u8D26\u53F7\u767B\u5F55 (login)",comment:"\u4E3B\u83DC\u5355"},main_login_hint:{code:"",text:"\u5DF2\u767B\u5F55\u5219\u8DF3\u8FC7\uFF1B--force \u5F3A\u5236\u91CD\u767B",comment:"\u4E3B\u83DC\u5355"},main_whoami_label:{code:"",text:"\u67E5\u770B\u5F53\u524D\u8D26\u53F7 (whoami)",comment:"\u4E3B\u83DC\u5355"},main_whoami_hint:{code:"",text:"\u68C0\u67E5\u5F53\u524D\u767B\u5F55\u72B6\u6001",comment:"\u4E3B\u83DC\u5355"},main_validate_template_label:{code:"",text:"\u6821\u9A8C\u6A21\u677F\u89C4\u8303 (validate-template)",comment:"\u4E3B\u83DC\u5355"},main_validate_template_hint:{code:"",text:"\u68C0\u67E5\u672C\u5730\u76EE\u5F55\u4E0E\u6587\u4EF6",comment:"\u4E3B\u83DC\u5355"},main_skill_label:{code:"",text:"\u6247\u51FA Agent skill (skill)",comment:"\u4E3B\u83DC\u5355"},main_skill_hint:{code:"",text:"--platform cursor \u6216 --all",comment:"\u4E3B\u83DC\u5355"},main_logout_label:{code:"",text:"\u9000\u51FA\u767B\u5F55 (logout)",comment:"\u4E3B\u83DC\u5355"},main_logout_hint:{code:"",text:"\u6E05\u9664\u672C\u5730\u51ED\u636E",comment:"\u4E3B\u83DC\u5355"},version_empty:{code:"",text:"\u7248\u672C\u53F7\u4E0D\u80FD\u4E3A\u7A7A",comment:"\u6821\u9A8C"},version_invalid:{code:"",text:"\u987B 1\u201316 \u4F4D\uFF0C\u4EC5\u5C0F\u5199\u5B57\u6BCD\u3001\u6570\u5B57\u3001`.` \u548C `-`\uFF1B\u5FC5\u987B\u4EE5\u5B57\u6BCD\u6216\u6570\u5B57\u5F00\u5934\u548C\u7ED3\u5C3E\uFF0C\u4E14\u4E0D\u80FD\u8FDE\u7EED\u4F7F\u7528\u7B26\u53F7\u3002\u793A\u4F8B\uFF1A1.0.0",comment:"publish-template \u6821\u9A8C"},version_invalid_log:{code:"",text:"\u6A21\u677F\u7248\u672C\u53F7\u683C\u5F0F\u65E0\u6548\uFF08{version}\uFF09",comment:"publish-template \u6821\u9A8C"},version_invalid_hint:{code:"",text:"\u987B 1\u201316 \u4F4D\uFF0C\u4EC5\u5C0F\u5199\u5B57\u6BCD\u3001\u6570\u5B57\u3001\u82F1\u6587\u70B9 . \u548C\u77ED\u6A2A\u7EBF -\uFF1B\u5FC5\u987B\u4EE5\u5B57\u6BCD\u6216\u6570\u5B57\u5F00\u5934\u548C\u7ED3\u5C3E\uFF1B\u4E0D\u80FD\u51FA\u73B0\u8FDE\u7EED\u7684 . \u6216 -\u3002\u793A\u4F8B\uFF1A1.0.0\u30010.1.0\u30011.0.0-a",comment:"publish-template \u6821\u9A8C"},publish_version:{code:"",text:"\u8BF7\u8F93\u5165\u53D1\u5E03\u7248\u672C\u53F7\uFF1A",comment:"publish"},publish_name:{code:"",text:"\u8BF7\u8F93\u5165\u6E38\u620F\u5C55\u793A\u540D\u79F0\uFF1A",comment:"publish"},publish_variant:{code:"",text:"\u8BF7\u9009\u62E9\u6E38\u620F\u53D1\u5E03\u7C7B\u578B\uFF1A",comment:"publish"},publish_official_label:{code:"",text:"\u6B63\u5F0F\u7248",comment:"publish"},publish_official_hint:{code:"",text:"\u9762\u5411\u73A9\u5BB6\u7684\u4E3B\u7248\u672C",comment:"publish"},publish_demo_label:{code:"",text:"\u8BD5\u73A9\u7248 (--demo)",comment:"publish"},publish_demo_hint:{code:"",text:"\u72EC\u7ACB\u7684\u8BD5\u73A9\u53D8\u4F53",comment:"publish"},publish_parent:{code:"",text:"\u8BF7\u8F93\u5165\u5173\u8054\u7684\u6B63\u5F0F\u7248\u6E38\u620F ID\uFF08\u53EF\u9009\uFF0C\u56DE\u8F66\u8DF3\u8FC7\u5373\u9996\u53D1\u8BD5\u73A9\uFF09\uFF1A",comment:"publish"},publish_parent_placeholder:{code:"",text:"\u7559\u7A7A\u5219\u5148\u53D1\u8BD5\u73A9",comment:"publish"},publish_changelog:{code:"",text:"\u8BF7\u8F93\u5165\u7248\u672C\u66F4\u65B0\u8BF4\u660E (changelog\uFF0C\u53EF\u9009\u76F4\u63A5\u56DE\u8F66)\uFF1A",comment:"publish"},publish_changelog_placeholder:{code:"",text:"\u4FEE\u590D\u4E86\u4E00\u4E9B\u5DF2\u77E5\u95EE\u9898",comment:"publish"},tpl_version:{code:"",text:"\u8BF7\u8F93\u5165\u6A21\u677F\u7248\u672C\u53F7\uFF1A",comment:"publish-template"},tpl_name:{code:"",text:"\u8BF7\u8F93\u5165\u6A21\u677F\u5C55\u793A\u540D\u79F0\uFF1A",comment:"publish-template"},tpl_mode:{code:"",text:"\u672C\u5730\u5C1A\u65E0 origin.json \u8EAB\u4EFD\uFF0C\u8BF7\u9009\u62E9\u53D1\u5E03\u65B9\u5F0F\uFF1A",comment:"publish-template"},tpl_init_label:{code:"",text:"\u9996\u6B21\u521B\u5EFA\u65B0\u6A21\u677F (--init)",comment:"publish-template"},tpl_init_hint:{code:"",text:"\u5728\u5E73\u53F0\u65B0\u5EFA\u6A21\u677F\u5E76\u4E0A\u4F20\u4EE3\u7801",comment:"publish-template"},tpl_fork_label:{code:"",text:"Fork \u73B0\u6709\u6A21\u677F (--fork)",comment:"publish-template"},tpl_fork_hint:{code:"",text:"\u57FA\u4E8E\u6E90\u6A21\u677F\u7248\u672C\u884D\u751F",comment:"publish-template"},tpl_fork_id:{code:"",text:"\u8BF7\u8F93\u5165 Fork \u6E90\u6A21\u677F\u7248\u672C ID\uFF1A",comment:"publish-template"},tpl_fork_placeholder:{code:"",text:"\u4F8B\u5982 4p7dlg00utc0",comment:"publish-template"},tpl_fork_empty:{code:"",text:"Fork \u5FC5\u987B\u63D0\u4F9B\u6E90\u7248\u672C ID",comment:"publish-template"},data_ver_reuse:{code:"",text:"\u8D44\u6E90\u5305\u7248\u672C\u53F7\u6CBF\u7528\u4E0A\u6B21\u7684 {ver}\uFF1F",comment:"data-ver"},data_ver_new:{code:"",text:"\u8BF7\u8F93\u5165\u65B0\u7684\u8D44\u6E90\u5305\u7248\u672C\u53F7 (--data-ver)\uFF1A",comment:"data-ver"},data_ver_ask:{code:"",text:"\u8BF7\u8F93\u5165\u8D44\u6E90\u5305\u7248\u672C\u53F7 (--data-ver)\uFF1A",comment:"data-ver"},data_ver_placeholder_last:{code:"",text:"\u4E0A\u6B21 {ver}",comment:"data-ver"},data_ver_placeholder:{code:"",text:"\u4F8B\u5982 1",comment:"data-ver"},data_ver_empty:{code:"",text:"\u8D44\u6E90\u5305\u7248\u672C\u53F7\u4E0D\u80FD\u4E3A\u7A7A\uFF0C\u7A0B\u5E8F\u4E0D\u4F1A\u81EA\u52A8\u9012\u589E",comment:"data-ver"},data_summary:{code:"",text:"\u8BF7\u8F93\u5165\u8D44\u6E90\u5305\u8BF4\u660E (--data-summary\uFF0C\u53EF\u9009\uFF0C\u56DE\u8F66\u8DF3\u8FC7)\uFF1A",comment:"data-summary"},data_summary_placeholder:{code:"",text:"\u540C\u4E00 data_ver \u4E0B\u7528\u6765\u533A\u5206\u672C\u5305",comment:"data-summary"},data_assets:{code:"",text:"\u8D44\u6E90\u76EE\u5F55\uFF08\u56DE\u8F66\u7528\u5F53\u524D\u5DE5\u7A0B assets/\uFF1B\u81EA\u5B9A\u4E49\u987B\u586B\u7EDD\u5BF9\u8DEF\u5F84\uFF09\uFF1A",comment:"publish-template / publish-template-data --assets"},data_assets_placeholder:{code:"",text:"\u7EDD\u5BF9\u8DEF\u5F84\uFF0C\u4F8B\u5982 C:\\path\\to\\assets",comment:"publish-template / publish-template-data --assets"},data_assets_not_absolute:{code:"",text:"--assets \u5FC5\u987B\u662F\u7EDD\u5BF9\u8DEF\u5F84",comment:"publish-template / publish-template-data --assets"},data_assets_not_dir:{code:"",text:"\u8BE5\u8DEF\u5F84\u4E0D\u662F\u6709\u6548\u76EE\u5F55",comment:"publish-template / publish-template-data --assets"},proj_version:{code:"",text:"\u8BF7\u8F93\u5165\u5F00\u6E90\u5DE5\u7A0B\u7248\u672C\u53F7\uFF1A",comment:"publish-project"},proj_name:{code:"",text:"\u8BF7\u8F93\u5165\u5DE5\u7A0B\u5C55\u793A\u540D\u79F0\uFF1A",comment:"publish-project"},proj_summary:{code:"",text:"\u8BF7\u8F93\u5165\u5DE5\u7A0B\u7B80\u4ECB (\u53EF\u9009)\uFF1A",comment:"publish-project"},proj_summary_placeholder:{code:"",text:"\u57FA\u4E8E\u6A59\u5149\u5F00\u53D1\u7684\u6E38\u620F/\u6A21\u677F\u5DE5\u7A0B",comment:"publish-project"},proj_cover:{code:"",text:"\u8BF7\u8F93\u5165\u5C01\u9762\u56FE\u8DEF\u5F84 (\u53EF\u9009\uFF0C\u76F4\u63A5\u56DE\u8F66\u8DF3\u8FC7)\uFF1A",comment:"publish-project"},id_empty:{code:"",text:"ID \u4E0D\u80FD\u4E3A\u7A7A",comment:"\u6821\u9A8C"},name_empty:{code:"",text:"\u540D\u79F0\u4E0D\u80FD\u4E3A\u7A7A",comment:"\u6821\u9A8C"},games_action:{code:"",text:"\u8BF7\u9009\u62E9\u6E38\u620F\u8D27\u67B6\u64CD\u4F5C\uFF1A",comment:"games"},games_list_label:{code:"",text:"\u5217\u51FA\u6211\u7684\u6E38\u620F\u5217\u8868",comment:"games"},games_list_hint:{code:"",text:"\u6309\u9875\u62C9\u53D6\u5E73\u53F0\u6E38\u620F",comment:"games"},games_query_label:{code:"",text:"\u67E5\u8BE2\u6307\u5B9A\u6E38\u620F\u8BE6\u60C5 (--query)",comment:"games"},games_query_hint:{code:"",text:"\u6309 game_id \u67E5\u770B",comment:"games"},games_versions_label:{code:"",text:"\u67E5\u770B\u6E38\u620F\u5168\u90E8\u53D1\u5E03\u7248\u672C (--versions)",comment:"games"},games_versions_hint:{code:"",text:"\u67E5\u8BE2\u7248\u672C\u6D41\u6C34",comment:"games"},games_create_label:{code:"",text:"\u53EA\u5EFA\u6E38\u620F\u8D27\u67B6 (create)",comment:"games"},games_create_hint:{code:"",text:"\u5148\u5EFA\u8D27\u67B6\uFF0C\u540E\u7EED\u53D1\u7248",comment:"games"},games_update_label:{code:"",text:"\u4FEE\u6539\u6E38\u620F\u4FE1\u606F (update)",comment:"games"},games_update_hint:{code:"",text:"\u4FEE\u6539\u540D\u79F0\u6216\u7B80\u4ECB",comment:"games"},games_id:{code:"",text:"\u8BF7\u8F93\u5165\u6E38\u620F ID\uFF1A",comment:"games"},games_name:{code:"",text:"\u8BF7\u8F93\u5165\u6E38\u620F\u540D\u79F0\uFF1A",comment:"games"},games_name_placeholder:{code:"",text:"\u6211\u7684\u6E38\u620F",comment:"games"},games_summary:{code:"",text:"\u8BF7\u8F93\u5165\u6E38\u620F\u7B80\u4ECB (\u53EF\u9009)\uFF1A",comment:"games"},games_update_id:{code:"",text:"\u8BF7\u8F93\u5165\u9700\u8981\u4FEE\u6539\u7684\u6E38\u620F ID (--game-id)\uFF1A",comment:"games"},games_update_name:{code:"",text:"\u8BF7\u8F93\u5165\u8981\u66F4\u65B0\u7684\u6E38\u620F\u540D\u79F0 (\u56DE\u8F66\u8DF3\u8FC7)\uFF1A",comment:"games"},games_update_summary:{code:"",text:"\u8BF7\u8F93\u5165\u8981\u66F4\u65B0\u7684\u6E38\u620F\u7B80\u4ECB (\u56DE\u8F66\u8DF3\u8FC7)\uFF1A",comment:"games"},tpls_action:{code:"",text:"\u8BF7\u9009\u62E9\u6A21\u677F\u8D27\u67B6\u64CD\u4F5C\uFF1A",comment:"templates"},tpls_list_label:{code:"",text:"\u5217\u51FA\u6211\u7684\u6A21\u677F\u5217\u8868",comment:"templates"},tpls_list_hint:{code:"",text:"\u6309\u9875\u67E5\u770B\u5E73\u53F0\u6A21\u677F",comment:"templates"},tpls_query_label:{code:"",text:"\u67E5\u8BE2\u6A21\u677F\u8BE6\u60C5 (--query)",comment:"templates"},tpls_query_hint:{code:"",text:"\u6309 template_id \u67E5\u770B",comment:"templates"},tpls_versions_label:{code:"",text:"\u67E5\u770B\u6A21\u677F\u7248\u672C\u5217\u8868 (--versions)",comment:"templates"},tpls_versions_hint:{code:"",text:"\u67E5\u770B\u5DF2\u53D1\u7248\u672C",comment:"templates"},tpls_data_label:{code:"",text:"\u67E5\u770B\u6A21\u677F\u6570\u636E\u5305 (--data)",comment:"templates"},tpls_data_hint:{code:"",text:"\u67E5\u770B\u7ED1\u5B9A\u7684 assets \u5305",comment:"templates"},tpls_create_label:{code:"",text:"\u53EA\u5EFA\u6A21\u677F\u8D27\u67B6 (create)",comment:"templates"},tpls_create_hint:{code:"",text:"\u9884\u5EFA\u8D27\u67B6",comment:"templates"},tpls_update_label:{code:"",text:"\u4FEE\u6539\u6A21\u677F\u540D\u79F0 (update)",comment:"templates"},tpls_update_hint:{code:"",text:"\u4FEE\u6539\u8D27\u67B6\u540D",comment:"templates"},tpls_id:{code:"",text:"\u8BF7\u8F93\u5165\u6A21\u677F ID\uFF1A",comment:"templates"},tpls_name:{code:"",text:"\u8BF7\u8F93\u5165\u6A21\u677F\u540D\u79F0\uFF1A",comment:"templates"},tpls_name_placeholder:{code:"",text:"\u6211\u7684\u6A21\u677F",comment:"templates"},tpls_update_id:{code:"",text:"\u8BF7\u8F93\u5165\u8981\u4FEE\u6539\u7684\u6A21\u677F ID (--template-id)\uFF1A",comment:"templates"},tpls_update_name:{code:"",text:"\u8BF7\u8F93\u5165\u8981\u66F4\u65B0\u7684\u6A21\u677F\u540D\u79F0\uFF1A",comment:"templates"},projs_action:{code:"",text:"\u8BF7\u9009\u62E9\u5F00\u6E90\u5DE5\u7A0B\u8D27\u67B6\u64CD\u4F5C\uFF1A",comment:"projects"},projs_list_label:{code:"",text:"\u5217\u51FA\u5F00\u6E90\u5DE5\u7A0B\u5217\u8868",comment:"projects"},projs_list_hint:{code:"",text:"\u6309\u9875\u67E5\u770B",comment:"projects"},projs_query_label:{code:"",text:"\u67E5\u8BE2\u5F00\u6E90\u5DE5\u7A0B\u8BE6\u60C5 (--query)",comment:"projects"},projs_query_hint:{code:"",text:"\u6309 project_id \u67E5\u770B",comment:"projects"},projs_versions_label:{code:"",text:"\u67E5\u770B\u5DE5\u7A0B\u53D1\u5E03\u7248\u672C (--versions)",comment:"projects"},projs_versions_hint:{code:"",text:"\u67E5\u770B\u7248\u672C\u8BB0\u5F55",comment:"projects"},projs_create_label:{code:"",text:"\u53EA\u5EFA\u5F00\u6E90\u5DE5\u7A0B\u8D27\u67B6 (create)",comment:"projects"},projs_create_hint:{code:"",text:"\u9884\u5EFA\u8D27\u67B6",comment:"projects"},projs_update_label:{code:"",text:"\u4FEE\u6539\u5DE5\u7A0B\u8D27\u67B6 (update)",comment:"projects"},projs_update_hint:{code:"",text:"\u4FEE\u6539\u540D\u79F0/\u7B80\u4ECB/\u5C01\u9762",comment:"projects"},projs_id:{code:"",text:"\u8BF7\u8F93\u5165\u5F00\u6E90\u5DE5\u7A0B ID\uFF1A",comment:"projects"},projs_name:{code:"",text:"\u8BF7\u8F93\u5165\u5F00\u6E90\u5DE5\u7A0B\u540D\u79F0\uFF1A",comment:"projects"},projs_update_id:{code:"",text:"\u8BF7\u8F93\u5165\u8981\u4FEE\u6539\u7684\u5F00\u6E90\u5DE5\u7A0B ID (--project-id)\uFF1A",comment:"projects"},projs_update_name:{code:"",text:"\u8BF7\u8F93\u5165\u8981\u66F4\u65B0\u7684\u5DE5\u7A0B\u540D\u79F0 (\u56DE\u8F66\u8DF3\u8FC7)\uFF1A",comment:"projects"},login_mode:{code:"",text:"\u8BF7\u9009\u62E9\u767B\u5F55\u65B9\u5F0F\uFF1A",comment:"login"},login_skip_label:{code:"",text:"\u5DF2\u6709\u6709\u6548\u767B\u5F55\u5219\u8DF3\u8FC7",comment:"login"},login_skip_hint:{code:"",text:"\u63A8\u8350",comment:"login"},login_force_label:{code:"",text:"\u5F3A\u5236\u91CD\u65B0\u767B\u5F55\u5E76\u6253\u5F00\u6D4F\u89C8\u5668\u6388\u6743 (--force)",comment:"login"},login_force_hint:{code:"",text:"\u6362\u53F7\u6216\u5237\u65B0\u51ED\u8BC1",comment:"login"},skill_platform:{code:"",text:"\u8BF7\u9009\u62E9\u8981\u628A skill \u6247\u51FA\u5230\u54EA\u4E2A Agent \u5E73\u53F0\uFF1A",comment:"skill"},skill_all_label:{code:"",text:"\u5168\u90E8\u5E73\u53F0",comment:"skill"},skill_all_hint:{code:"",text:"--all",comment:"skill"}},kit:{validate_template_ok:{code:"",text:"\u6A21\u677F\u76EE\u5F55\u89C4\u8303\u6821\u9A8C\u901A\u8FC7\uFF01",comment:"validate-template \u6210\u529F"},validate_ok:{code:"",text:"\u6A21\u677F\u6570\u636E\u6821\u9A8C\u901A\u8FC7\uFF01",comment:"validate \u6210\u529F"},bin_missing:{code:"",text:"\u627E\u4E0D\u5230 cgmaker \u539F\u751F\u4E8C\u8FDB\u5236\u3002\u8BF7\u5728 npm/ \u8FD0\u884C make ensure-cli\uFF0C\u6216\u5B89\u88C5 @66rpg/cgmaker-win32-x64\u3002",comment:"\u672A\u627E\u5230\u539F\u751F CLI"},run_failed:{code:"",text:"\u6267\u884C\u5931\u8D25: {e}",comment:"spawn inherit \u5931\u8D25"},cli_failed:{code:"",text:"\u8C03\u7528 CLI \u5931\u8D25: {e}",comment:"spawn json \u5931\u8D25"},op_failed:{code:"",text:"\u64CD\u4F5C\u5931\u8D25",comment:"\u4FE1\u5C01\u65E0 error \u65F6\u7684\u515C\u5E95"},table_empty:{code:"",text:" (\u65E0\u6570\u636E)",comment:"\u7A7A\u8868\u9ED8\u8BA4\u6587\u6848"},validate_ok_line:{code:"",text:"validate-template ok",comment:"validate-template \u539F\u59CB\u6210\u529F\u884C"},validate_data_ok_line:{code:"",text:"validate ok",comment:"validate \u539F\u59CB\u6210\u529F\u884C"},issue_line:{code:"",text:"{code} {path}: {message}",comment:"\u6821\u9A8C\u5931\u8D25\u4E00\u884C"}},fmt:{label_status:{code:"",text:"\u72B6\u6001",comment:"whoami \u5361\u7247"},label_hint:{code:"",text:"\u5EFA\u8BAE",comment:"whoami \u5361\u7247"},label_action:{code:"",text:"\u64CD\u4F5C",comment:"whoami \u5361\u7247"},version_no:{code:"",text:"\u7B2C {n} \u7248",comment:"\u7248\u672C\u5E8F\u53F7"},data_ver:{code:"",text:"\u7B2C {ver} \u7248 (ID: {id})",comment:"\u8D44\u6E90\u5305\u7248\u672C"},post_id:{code:"",text:"Post #{id}",comment:"\u793E\u533A\u5E16"},vip:{code:"",text:"VIP {n}",comment:"\u4F1A\u5458\u7B49\u7EA7"},type_template:{code:"",text:"\u6A21\u677F",comment:"\u8D27\u67B6\u7C7B\u578B"},type_game:{code:"",text:"\u6E38\u620F",comment:"\u8D27\u67B6\u7C7B\u578B"},type_project:{code:"",text:"\u5F00\u6E90\u5DE5\u7A0B",comment:"\u8D27\u67B6\u7C7B\u578B"},shelf_id:{code:"",text:"{type} ID",comment:"\u8D27\u67B6\u5361\u7247"},shelf_name:{code:"",text:"{type}\u540D\u79F0",comment:"\u8D27\u67B6\u5361\u7247"},list_sep:{code:"",text:"\u3001",comment:"\u5217\u8868\u9879\u5206\u9694"}},validate:{forbidden_scripts_dir:{code:"FORBIDDEN_SCRIPTS_DIR",text:"\u6A21\u677F\u6839\u76EE\u5F55\u4E0D\u8981\u653E scripts/ \u6587\u4EF6\u5939\uFF08\u548C npm scripts\u3001skill/scripts \u649E\u8F66\uFF09",comment:"\u89C4\u8303\u95E8\u7981"},forbidden_out_dir:{code:"FORBIDDEN_OUT_DIR",text:"\u4EA7\u7269\u76EE\u5F55\u53EA\u80FD\u53EB dist/\uFF0C\u4E0D\u8981\u7528 {dir}/",comment:"\u89C4\u8303\u95E8\u7981"},forbidden_content_root:{code:"FORBIDDEN_CONTENT_ROOT",text:"\u5185\u5BB9\u653E assets/{dir}/\uFF0C\u4E0D\u8981\u5728\u6839\u76EE\u5F55\u653E {dir}/",comment:"\u89C4\u8303\u95E8\u7981"},forbidden_template_yaml:{code:"FORBIDDEN_TEMPLATE_YAML",text:"\u4E0D\u8981 template.yaml\uFF1Bslug \u5199\u5728 package.json",comment:"\u89C4\u8303\u95E8\u7981"},missing_dir:{code:"MISSING_DIR",text:"\u7F3A\u5C11\u5FC5\u6709\u76EE\u5F55 {dir}/",comment:"\u89C4\u8303\u95E8\u7981"},missing_file:{code:"MISSING_FILE",text:"\u7F3A\u5C11\u5FC5\u6709\u6587\u4EF6 {file}",comment:"\u89C4\u8303\u95E8\u7981"},logic_export:{code:"LOGIC_EXPORT",text:"schema/logic.mjs \u5FC5\u987B default export async function validate(data, rootDir)",comment:"\u89C4\u8303\u95E8\u7981"},invalid_json:{code:"INVALID_JSON",text:"package.json \u4E0D\u662F\u5408\u6CD5 JSON",comment:"\u89C4\u8303\u95E8\u7981"},forbidden_template_id:{code:"FORBIDDEN_TEMPLATE_ID",text:"package.json \u4E0D\u8981\u624B\u5199 template_id\uFF0C\u8EAB\u4EFD\u7531\u5E73\u53F0\u7B7E\u53D1\u7684 origin.json \u4FDD\u5B58",comment:"\u89C4\u8303\u95E8\u7981"},missing_slug:{code:"MISSING_SLUG",text:"package.json \u5FC5\u987B\u6709 slug\uFF08\u5B89\u88C5\u8DEF\u5F84\u540E\u534A\u6BB5\uFF0C\u4E0D\u662F name\uFF09",comment:"\u89C4\u8303\u95E8\u7981"},invalid_slug:{code:"INVALID_SLUG",text:"slug \u987B\u5339\u914D ^[a-z0-9][a-z0-9-]{0,62}$",comment:"\u89C4\u8303\u95E8\u7981"},invalid_version:{code:"INVALID_VERSION",text:"\u6A21\u677F package.json \u7684 version\uFF08\u53D1\u5E03\u65F6\u7684 version_name\uFF09\u683C\u5F0F\u65E0\u6548\uFF1A\u987B 1\u201316 \u4F4D\uFF0C\u4EC5\u5C0F\u5199\u5B57\u6BCD\u3001\u6570\u5B57\u3001`.`\u3001`-`\uFF1B\u5FC5\u987B\u4EE5\u5B57\u6BCD\u6216\u6570\u5B57\u5F00\u5934\u548C\u7ED3\u5C3E\uFF0C\u4E14\u4E0D\u80FD\u6709\u8FDE\u7EED\u7B26\u53F7\u3002\u793A\u4F8B\uFF1A0.1.0\u30011.0.0-a",comment:"\u89C4\u8303\u95E8\u7981"},missing_data_ver:{code:"MISSING_DATA_VER",text:'package.json \u5FC5\u987B\u6709 data_ver\uFF08\u7D20\u6750\u7248\u672C\u53F7\uFF0C\u5982 "1"\uFF09',comment:"\u89C4\u8303\u95E8\u7981"},invalid_data_ver:{code:"INVALID_DATA_VER",text:"data_ver \u5FC5\u987B\u662F\u975E\u7A7A\u5B57\u7B26\u4E32\u6216\u6570\u5B57",comment:"\u89C4\u8303\u95E8\u7981"},forbidden_bin:{code:"FORBIDDEN_BIN",text:"\u6A21\u677F\u5DE5\u7A0B\u4E0D\u8981\u8BBE\u7F6E bin\uFF0C\u907F\u514D\u4F5C\u8005\u8BEF npx \u5230\u6A21\u677F",comment:"\u89C4\u8303\u95E8\u7981"},forbidden_package_manager:{code:"FORBIDDEN_PACKAGE_MANAGER",text:"\u4E0D\u8981\u5199 packageManager\uFF08\u4F5C\u8005\u73AF\u5883\u53EA\u7528 Node \u81EA\u5E26\u7684 npm\uFF09",comment:"\u89C4\u8303\u95E8\u7981"},missing_script:{code:"MISSING_SCRIPT",text:"package.json \u7F3A\u5C11 scripts.{name}",comment:"\u89C4\u8303\u95E8\u7981"},forbidden_script:{code:"FORBIDDEN_SCRIPT",text:"\u4E0D\u8981\u628A\u811A\u672C\u547D\u540D\u4E3A {name}\uFF08\u4F1A\u548C npm {name} \u649E\u8F66\uFF09\u3002\u8BF7\u7528 npx cgmaker {name}",comment:"\u89C4\u8303\u95E8\u7981"},missing_gitignore:{code:"MISSING_GITIGNORE",text:"\u7F3A\u5C11 .gitignore\uFF0C\u4E14\u5FC5\u987B\u5FFD\u7565 dist/ \u4E0E node_modules/",comment:"\u89C4\u8303\u95E8\u7981"},gitignore_dist:{code:"GITIGNORE_DIST",text:".gitignore \u5FC5\u987B\u5FFD\u7565 dist/",comment:"\u89C4\u8303\u95E8\u7981"},gitignore_node_modules:{code:"GITIGNORE_NODE_MODULES",text:".gitignore \u5FC5\u987B\u5FFD\u7565 node_modules/",comment:"\u89C4\u8303\u95E8\u7981"},absolute_asset_path:{code:"ABSOLUTE_ASSET_PATH",text:"{rel} \u5FC5\u987B\u7528\u76F8\u5BF9\u8DEF\u5F84\uFF08Vite \u8BBE base: './'\uFF09\uFF0C\u624D\u80FD\u653E\u5230\u4EFB\u610F\u9759\u6001\u6258\u7BA1\u5B50\u76EE\u5F55",comment:"dist \u68C0\u67E5"},missing_dist:{code:"MISSING_DIST",text:"\u7F3A\u5C11 {entry}\u3002\u8BF7\u5148 npm run build\uFF0C\u4E14 outDir \u5FC5\u987B\u662F dist",comment:"dist \u68C0\u67E5"},missing_game_html:{code:"MISSING_GAME_HTML",text:"dist/ \u81F3\u5C11\u8981\u6709 1 \u4E2A\u6E38\u620F\u9875 index.{lang}.{h|v}.html\uFF08\u5982 index.zh.h.html\uFF09\u3002\u5355\u9875\u6A21\u677F\u53EF\u5728 build \u540E\u628A index.html \u62F7\u4E00\u4EFD\u4F5C fallback",comment:"dist \u68C0\u67E5"},dist_html_name:{code:"DIST_HTML_NAME",text:"\u4EA7\u7269 HTML \u547D\u540D\u4E0D\u7B26\u5408\u7EA6\u5B9A\u3002\u6E38\u620F\u9875\u7528 index.{lang}.{h|v}.html\uFF0C\u65B9\u5411\u9996\u9875\u7528 index.h.html / index.v.html\uFF0C\u53E6\u5141\u8BB8 start.html\u3001404.html\u3001privacy.html\u3001offline.html",comment:"dist \u68C0\u67E5"},invalid_asset:{code:"INVALID_ASSET",text:"\u7D20\u6750\u8DEF\u5F84\u4E0D\u5408\u6CD5: {rel}",comment:"\u6570\u636E\u6821\u9A8C"},missing_asset:{code:"MISSING_ASSET",text:"\u7D20\u6750\u4E0D\u5B58\u5728: assets/{posix}",comment:"\u6570\u636E\u6821\u9A8C"},asset_case:{code:"ASSET_CASE",text:"\u7D20\u6750\u8DEF\u5F84\u5927\u5C0F\u5199\u4E0D\u4E00\u81F4: JSON \u5199 assets/{posix}\uFF0C\u78C1\u76D8\u4E0A\u662F assets/{actual}\uFF08Linux \u6258\u7BA1\u4F1A\u627E\u4E0D\u5230\uFF09",comment:"\u6570\u636E\u6821\u9A8C"},schema_failed:{code:"SCHEMA",text:"schema \u6821\u9A8C\u5931\u8D25",comment:"\u6570\u636E\u6821\u9A8C\u515C\u5E95"},schema_detail:{code:"SCHEMA",text:"{path} {message}",comment:"Ajv \u9519\u8BEF"},theme_schema_failed:{code:"THEME_SCHEMA",text:"theme schema \u6821\u9A8C\u5931\u8D25",comment:"\u6570\u636E\u6821\u9A8C\u515C\u5E95"}}};function Nt(){let e={...Ae,...Ee};return delete e._comment,e}var g=Nt();function $e(e,t){if(!t)return e;let o=e;for(let[n,s]of Object.entries(t))o=o.split(`{${n}}`).join(String(s));return o}function r(e,t,o){let n=g[e]?.[t];if(!n?.text)throw new Error(`missing cli message ${String(e)}.${t}`);return $e(n.text,o)}function f(e,t,o){let n=g.validate[t];if(!n)throw new Error(`missing validate message ${t}`);return{path:e,code:n.code,message:$e(n.text,o)}}var te="dist",de="dist/index.html",De=/^index\.[a-z]{2}(?:-[A-Za-z]{2,8})?\.[hv]\.html$/,Pt=/^index\.[hv]\.html$/,Mt=new Set(["index.html","start.html","404.html","privacy.html","offline.html"]),Lt=/\b(?:src|href)\s*=\s*["']\/(?!\/)/i;function Ct(e,t,o){let n=oe.join(e,t),s=z.readFileSync(n,"utf8");Lt.test(s)&&o.push(f(`/${t}`,"absolute_asset_path",{rel:t}))}function Ne(e){let t=[],o=oe.join(e,te),n=oe.join(e,de);if(!z.existsSync(o))return{ok:!0,errors:t};if(!z.existsSync(n))return{ok:!1,errors:[f(`/${de}`,"missing_dist",{entry:de})]};let s=z.readdirSync(o).filter(l=>{let a=oe.join(o,l);return z.statSync(a).isFile()&&l.endsWith(".html")});s.filter(l=>De.test(l)).length||t.push(f(`/${te}/`,"missing_game_html"));for(let l of s)Mt.has(l)||Pt.test(l)||De.test(l)||t.push(f(`/${te}/${l}`,"dist_html_name")),Ct(e,`${te}/${l}`,t);return{ok:t.length===0,errors:t}}var Pe="^(?=.{1,16}$)[a-z0-9]+(?:[.-][a-z0-9]+)*$",Me=new RegExp(Pe);function L(e){return Me.test(e)}var Ot=["assets","src"],Vt=["package.json","README.md","AGENTS.md"],Ft=["dev","build","build:demo"],Gt=["build","out","www"],Wt=["data","theme"],Bt=["template.yaml","template.yml"],qt=/^[a-z0-9][a-z0-9-]{0,62}$/;function Le(e,t){return T.existsSync(C.join(e,t))}function Ce(e,t){let o=String(e).replace(/\r/g,"");return new RegExp(`(^|/)(${t}\\/?|${t})$`,"m").test(o)}function Jt(e){let t=[],o=C.join(e,"scripts");T.existsSync(o)&&T.statSync(o).isDirectory()&&t.push(f("/scripts/","forbidden_scripts_dir"));for(let a of Gt){let p=C.join(e,a);T.existsSync(p)&&T.statSync(p).isDirectory()&&t.push(f(`/${a}/`,"forbidden_out_dir",{dir:a}))}for(let a of Wt){let p=C.join(e,a);T.existsSync(p)&&T.statSync(p).isDirectory()&&t.push(f(`/${a}/`,"forbidden_content_root",{dir:a}))}for(let a of Bt)Le(e,a)&&t.push(f(`/${a}`,"forbidden_template_yaml"));for(let a of Ot){let p=C.join(e,a);(!T.existsSync(p)||!T.statSync(p).isDirectory())&&t.push(f(`/${a}/`,"missing_dir",{dir:a}))}for(let a of Vt)Le(e,a)||t.push(f(`/${a}`,"missing_file",{file:a}));let n=C.join(e,"schema/logic.mjs");if(T.existsSync(n)){let a=T.readFileSync(n,"utf8");/export\s+default/.test(a)||t.push(f("/schema/logic.mjs","logic_export"))}let s=C.join(e,"package.json");if(T.existsSync(s)){let a;try{a=JSON.parse(T.readFileSync(s,"utf8"))}catch{return t.push(f("/package.json","invalid_json")),{ok:!1,errors:t}}a.template_id&&t.push(f("/package.json","forbidden_template_id"));let p=a.slug;typeof p!="string"||!p.trim()?t.push(f("/package.json","missing_slug")):qt.test(p)||t.push(f("/package.json","invalid_slug"));let c=a.version;typeof c=="string"&&c.trim()&&!L(c.trim())&&t.push(f("/package.json","invalid_version"));let x=a.data_ver;x==null?t.push(f("/package.json","missing_data_ver")):(typeof x!="string"&&typeof x!="number"||String(x).trim()==="")&&t.push(f("/package.json","invalid_data_ver")),a.bin&&t.push(f("/package.json","forbidden_bin")),a.packageManager&&t.push(f("/package.json","forbidden_package_manager"));let j=a.scripts??{};for(let v of Ft)(!j[v]||typeof j[v]!="string")&&t.push(f("/package.json","missing_script",{name:v}));for(let v of["login","publish"])j[v]&&t.push(f("/package.json","forbidden_script",{name:v}))}let i=C.join(e,".gitignore");if(!T.existsSync(i))t.push(f("/.gitignore","missing_gitignore"));else{let a=T.readFileSync(i,"utf8");Ce(a,"dist")||t.push(f("/.gitignore","gitignore_dist")),Ce(a,"node_modules")||t.push(f("/.gitignore","gitignore_node_modules"))}let l=Ne(e);return t.push(...l.errors),{ok:t.length===0,errors:t}}async function ne(e){let{ok:t,errors:o}=Jt(e);if(t){console.log(r("kit","validate_ok_line"));return}for(let n of o)console.error(r("kit","issue_line",{code:n.code,path:n.path,message:n.message}));process.exit(1)}import O from"node:fs";import N from"node:path";import{createRequire as Ht}from"node:module";import{pathToFileURL as Ut}from"node:url";var Kt=Ht(import.meta.url),Oe=Kt("ajv"),zt=Oe.default??Oe,Yt="assets",ue="assets/data/game.json",Ve="schema/logic.mjs",Qt="schema/game.schema.json",_e="assets/theme",Zt=/\.(png|jpe?g|gif|svg|webp|avif|mp3|wav|ogg|m4a|mp4|webm|woff2?|ttf|otf)$/i;function Y(e){return JSON.parse(O.readFileSync(e,"utf8"))}function ge(e){return e.replace(/\\/g,"/").replace(/^\//,"")}function Xt(e){let t=ge(e);return!!(!t||t.includes("\0")||t.split("/").includes("..")||N.isAbsolute(t)||N.win32.isAbsolute(t))}function eo(e,t){let o=ge(t);if(Xt(o))return{ok:!1,code:"INVALID_ASSET",message:r("validate","invalid_asset",{rel:t})};let n=o.split("/").filter(Boolean),s=e;for(let i=0;i<n.length;i++){let l=n[i],a;try{a=O.readdirSync(s)}catch{return{ok:!1,code:"MISSING_ASSET",message:r("validate","missing_asset",{posix:o})}}if(a.includes(l)){s=N.join(s,l);continue}let p=a.find(c=>c.toLowerCase()===l.toLowerCase());if(p){let c=[...n.slice(0,i),p].join("/");return{ok:!1,code:"ASSET_CASE",message:r("validate","asset_case",{posix:o,actual:c})}}return{ok:!1,code:"MISSING_ASSET",message:r("validate","missing_asset",{posix:o})}}return{ok:!0}}function se(e,t,o=""){if(typeof e=="string"){let n=e.trim();(Zt.test(n)||/^(images|audio|fonts|video)\//.test(n))&&t.push({pointer:o||"/",rel:n});return}if(Array.isArray(e)){e.forEach((n,s)=>se(n,t,`${o}/${s}`));return}if(e&&typeof e=="object")for(let[n,s]of Object.entries(e))se(s,t,`${o}/${n}`)}async function to(e){let t=[],o=N.join(e,ue),n=N.join(e,Qt),s=N.join(e,Ve),i=O.existsSync(o),l=O.existsSync(n),a=O.existsSync(s),p,c=new zt({allErrors:!0,strict:!1});if(i&&(p=Y(o),l)){let h=Y(n),d=c.compile(h);if(!d(p))for(let y of d.errors??[])t.push({path:`/${ue}${y.instancePath||""}`,code:"SCHEMA",message:y.message?r("validate","schema_detail",{path:y.instancePath||"/",message:y.message}):r("validate","schema_failed")})}let x=N.join(e,"schema/theme.schema.json"),j=N.join(e,_e,"layout.json");if(O.existsSync(x)&&O.existsSync(j)){let h=c.compile(Y(x)),d=Y(j);if(!h(d))for(let y of h.errors??[])t.push({path:`/${_e}/layout.json${y.instancePath||""}`,code:"THEME_SCHEMA",message:y.message??r("validate","theme_schema_failed")})}let v=[];if(i){let h=[];se(p,h);for(let d of h)v.push({file:`/${ue}`,...d})}if(O.existsSync(j)){let h=[];se(Y(j),h);for(let d of h)v.push({file:`/${_e}/layout.json`,...d})}let b=N.join(e,Yt);for(let h of v){let d=ge(h.rel),y=eo(b,d);y.ok||t.push({path:`${h.file}${h.pointer}`,code:y.code,message:y.message})}if(a&&i){let h=await import(Ut(s).href);if(typeof h.default!="function")t.push(f(`/${Ve}`,"logic_export"));else{let d=await h.default(p,e);d&&d.ok===!1?t.push(...d.errors??[]):d&&Array.isArray(d.errors)&&d.errors.length&&t.push(...d.errors)}}return{ok:t.length===0,errors:t}}async function fe(e){let{ok:t,errors:o}=await to(e);if(t){console.log(r("kit","validate_data_ok_line"));return}for(let n of o)console.error(r("kit","issue_line",{code:n.code,path:n.path,message:n.message}));process.exit(1)}import $ from"node:fs";import q from"node:path";var he=new Set(["json","verbose","help","demo","init","if-needed","force","no-interactive","no-data","all"]),Fe=new Set(["no-interactive"]);function Ge(e){let t=e.slice(2),o={},n=[];for(let v=0;v<t.length;v++){let b=t[v];if(b==="--"){n.push(...t.slice(v+1));break}if(b.startsWith("--")){let h=b.indexOf("=");if(h!==-1){let d=b.slice(2,h),y=b.slice(h+1);o[d]=y}else{let d=b.slice(2);if(he.has(d))o[d]=!0;else if(d==="version"){let y=t[v+1];y&&!y.startsWith("-")?(o[d]=y,v++):o[d]=!0}else{let y=t[v+1];y&&!y.startsWith("-")?(o[d]=y,v++):o[d]=!0}}continue}if(b.startsWith("-")&&b.length>1){let h=b.slice(1);h==="v"?o.verbose=!0:h==="h"?o.help=!0:h==="V"?o.V=!0:o[h]=!0;continue}n.push(b)}let s=!!o.json||process.env.CGMAKER_OUTPUT==="json",i=!!o.verbose||!!o.v,l=!!o["no-interactive"]||process.env.CI==="true"||process.env.CGMAKER_NO_INTERACTIVE==="1",a=!s&&!l&&!!(process.stdin.isTTY&&process.stdout.isTTY),p=n[0],c=n[1],x=typeof o.config=="string"?o.config:void 0,j=!p&&(o.version===!0||o.V===!0);return{raw:t,command:p,subcommand:c,flags:o,positionals:n,isJson:s,isVerbose:i,isInteractive:a,wantsVersion:j,configPath:x}}function F(e=process.cwd()){try{let t=q.join(e,"package.json");if($.existsSync(t)){let o=JSON.parse($.readFileSync(t,"utf8")),n=o.data_ver;return{name:typeof o.name=="string"?o.name:void 0,version:typeof o.version=="string"?o.version:void 0,data_ver:n!=null&&String(n).trim()!==""?String(n).trim():void 0}}}catch{}return null}function xe(e=process.cwd()){try{let t=q.join(e,".cgmaker","game.json");if($.existsSync(t))return JSON.parse($.readFileSync(t,"utf8"))}catch{}return null}function re(e=process.cwd()){try{let t=q.join(e,".cgmaker","origin.json");if($.existsSync(t))return JSON.parse($.readFileSync(t,"utf8"))}catch{}return null}function We(e=process.cwd()){return oo(q.join(e,"assets"))}function oo(e){try{if(!$.existsSync(e)||!$.statSync(e).isDirectory())return!1;let t=[e];for(;t.length;){let o=t.pop();for(let n of $.readdirSync(o)){let s=q.join(o,n),i=$.statSync(s);if(i.isFile())return!0;i.isDirectory()&&t.push(s)}}}catch{}return!1}function be(e=process.cwd()){try{let t=q.join(e,".cgmaker","project.json");if($.existsSync(t))return JSON.parse($.readFileSync(t,"utf8"))}catch{}return null}import*as m from"@clack/prompts";import ke from"node:fs";import Je from"node:path";import qe from"picocolors";import no from"node:fs";import ve from"node:path";import{fileURLToPath as so}from"node:url";function Be(){let e=ve.dirname(so(import.meta.url));for(;;){if(no.existsSync(ve.join(e,"package.json")))return e;let t=ve.dirname(e);if(t===e)throw new Error("cgmaker kit package root not found");e=t}}import Q from"picocolors";import _ from"picocolors";var k={brand:e=>_.bold(_.cyan(`[cgmaker] ${e}`)),brandTag:_.bold(_.cyan("[cgmaker]")),dim:e=>_.dim(String(e)),highlight:e=>_.bold(_.cyan(String(e))),accent:e=>_.bold(_.yellow(String(e))),path:e=>_.underline(_.gray(e)),url:e=>_.underline(_.blue(e)),badgeInfo:_.bgCyan(_.black(" INFO ")),badgeSuccess:_.bgGreen(_.black(" SUCCESS ")),badgeWarn:_.bgYellow(_.black(" WARN ")),badgeError:_.bgRed(_.white(" ERROR ")),badgeDebug:_.bgBlack(_.gray(" DEBUG ")),iconInfo:_.cyan("\u2139"),iconSuccess:_.green("\u2714"),iconWarn:_.yellow("\u26A0"),iconError:_.red("\u2716"),iconStep:_.cyan("\u279C"),iconArrow:_.gray("\u203A"),successText:e=>_.green(e),errorText:e=>_.red(e),warnText:e=>_.yellow(e),infoText:e=>_.cyan(e),border:e=>_.gray(e),borderSuccess:e=>_.green(e),borderError:e=>_.red(e)};var ye=class{_verbose=!1;setVerbose(t){this._verbose=t}isVerbose(){return this._verbose}info(t,...o){console.log(`${k.brandTag} ${k.badgeInfo} ${t}`,...o)}success(t,...o){console.log(`${k.brandTag} ${k.badgeSuccess} ${t}`,...o)}warn(t,...o){console.warn(`${k.brandTag} ${k.badgeWarn} ${Q.yellow(t)}`,...o)}error(t,...o){console.error(`${k.brandTag} ${k.badgeError} ${Q.red(t)}`,...o)}debug(t,...o){this._verbose&&console.error(`${k.brandTag} ${k.badgeDebug} ${Q.gray(t)}`,...o)}step(t){console.log(`${k.brandTag} ${Q.cyan("\u279C")} ${Q.bold(t)}`)}plain(t){console.log(t)}},R=new ye;function u(e){m.isCancel(e)&&(m.cancel(r("prompt","cancel")),process.exit(0))}function ro(e){if(!e||!e.trim())return r("prompt","version_empty");if(!L(e.trim()))return r("prompt","version_invalid")}function He(e,t,o){let n=[e];t&&n.push(t);for(let[s,i]of Object.entries(o))Fe.has(s)||(i===!0?he.has(s)&&n.push(`--${s}`):typeof i=="string"&&i!==""&&n.push(`--${s}`,i));return n}async function Ue(){m.intro(qe.bold(qe.cyan(r("prompt","intro"))));let e=await m.select({message:r("prompt","main_message"),options:[{value:"publish",label:r("prompt","main_publish_label"),hint:r("prompt","main_publish_hint")},{value:"publish-template",label:r("prompt","main_publish_template_label"),hint:r("prompt","main_publish_template_hint")},{value:"publish-template-data",label:r("prompt","main_publish_template_data_label"),hint:r("prompt","main_publish_template_data_hint")},{value:"publish-project",label:r("prompt","main_publish_project_label"),hint:r("prompt","main_publish_project_hint")},{value:"games",label:r("prompt","main_games_label"),hint:r("prompt","main_games_hint")},{value:"templates",label:r("prompt","main_templates_label"),hint:r("prompt","main_templates_hint")},{value:"projects",label:r("prompt","main_projects_label"),hint:r("prompt","main_projects_hint")},{value:"login",label:r("prompt","main_login_label"),hint:r("prompt","main_login_hint")},{value:"whoami",label:r("prompt","main_whoami_label"),hint:r("prompt","main_whoami_hint")},{value:"validate-template",label:r("prompt","main_validate_template_label"),hint:r("prompt","main_validate_template_hint")},{value:"skill",label:r("prompt","main_skill_label"),hint:r("prompt","main_skill_hint")},{value:"logout",label:r("prompt","main_logout_label"),hint:r("prompt","main_logout_hint")}]});return u(e),{command:e}}async function Ke(e){let t={...e.flags},o=F(),n=xe();if(!t.version){let s=o?.version||"1.0.0",i=await m.text({message:r("prompt","publish_version"),placeholder:s,defaultValue:s,validate(l){if(!l||!l.trim())return r("prompt","version_empty")}});u(i),t.version=i.trim()}if(!t.name&&!n?.game_id){let s=o?.name||"game",i=await m.text({message:r("prompt","publish_name"),placeholder:s,defaultValue:s});u(i),i.trim()&&(t.name=i.trim())}if(t.demo===void 0&&t.variant===void 0){let s=await m.select({message:r("prompt","publish_variant"),options:[{value:"official",label:r("prompt","publish_official_label"),hint:r("prompt","publish_official_hint")},{value:"demo",label:r("prompt","publish_demo_label"),hint:r("prompt","publish_demo_hint")}],initialValue:"official"});if(u(s),s==="demo"&&(t.demo=!0,!t.parent)){let i=n?.game_id||"",l=await m.text({message:r("prompt","publish_parent"),placeholder:i||r("prompt","publish_parent_placeholder"),defaultValue:i});u(l);let a=l.trim();a&&(t.parent=a)}}if(!t.changelog){let s=await m.text({message:r("prompt","publish_changelog"),placeholder:r("prompt","publish_changelog_placeholder")});u(s),s.trim()&&(t.changelog=s.trim())}return t}async function ze(e){let t={...e.flags},o=F(),n=re();if(typeof t.version=="string"&&t.version.trim()&&!L(t.version.trim())&&(R.error(r("prompt","version_invalid_log",{version:t.version.trim()})),R.warn(r("prompt","version_invalid_hint")),delete t.version),!t.version){let s=o?.version||"0.1.0",i=await m.text({message:r("prompt","tpl_version"),placeholder:s,defaultValue:s,validate:ro});u(i),t.version=i.trim()}if(!t.name&&!n?.template_id){let s=o?.name||"template",i=await m.text({message:r("prompt","tpl_name"),placeholder:s,defaultValue:s});u(i),i.trim()&&(t.name=i.trim())}if(!t.init&&!t.fork&&!n?.template_id){let s=await m.select({message:r("prompt","tpl_mode"),options:[{value:"init",label:r("prompt","tpl_init_label"),hint:r("prompt","tpl_init_hint")},{value:"fork",label:r("prompt","tpl_fork_label"),hint:r("prompt","tpl_fork_hint")}],initialValue:"init"});if(u(s),s==="init")t.init=!0;else if(s==="fork"){let i=await m.text({message:r("prompt","tpl_fork_id"),placeholder:r("prompt","tpl_fork_placeholder"),validate(l){if(!l||!l.trim())return r("prompt","tpl_fork_empty")}});u(i),t.fork=i.trim()}}return ao(t)&&await Xe(t),io(t)&&(t["data-ver"]=await Qe(o?.data_ver??n?.data_ver)),Ye(t)&&await Ze(t),t}function G(e,t){let o=e[t];if(typeof o!="string")return;let n=o.trim();return n||void 0}function Ye(e){return e["no-data"]===!0||e.init===!0||G(e,"fork")||e.fork===!0?!1:G(e,"assets")?!0:We()}function io(e){return G(e,"data-ver")?!1:Ye(e)}function ao(e){return!(G(e,"assets")||e["no-data"]===!0||e.init===!0)}async function Qe(e){let t=typeof e=="string"?e.trim():"",o=t&&t!=="0"?t:"";if(o){let s=await m.confirm({message:r("prompt","data_ver_reuse",{ver:o}),initialValue:!0});if(u(s),s)return o}let n=await m.text({message:o?r("prompt","data_ver_new"):r("prompt","data_ver_ask"),placeholder:o?r("prompt","data_ver_placeholder_last",{ver:o}):r("prompt","data_ver_placeholder"),validate(s){if(!s||!s.trim())return r("prompt","data_ver_empty")}});return u(n),n.trim()}async function Ze(e){if(G(e,"data-summary"))return;typeof e["data-summary"]!="string"&&delete e["data-summary"];let t=await m.text({message:r("prompt","data_summary"),placeholder:r("prompt","data_summary_placeholder")});u(t),t.trim()&&(e["data-summary"]=t.trim())}async function Xe(e){let t=await m.text({message:r("prompt","data_assets"),placeholder:r("prompt","data_assets_placeholder"),validate(o){let n=(o??"").trim();if(n){if(!Je.isAbsolute(n))return r("prompt","data_assets_not_absolute");try{if(!ke.existsSync(n)||!ke.statSync(n).isDirectory())return r("prompt","data_assets_not_dir")}catch{return r("prompt","data_assets_not_dir")}}}});u(t),t.trim()&&(e.assets=t.trim())}async function et(e){let t={...e.flags},o=F(),n=re();return G(t,"data-ver")||(t["data-ver"]=await Qe(o?.data_ver??n?.data_ver)),G(t,"assets")||await Xe(t),await Ze(t),t}async function tt(e){let t={...e.flags},o=F(),n=be();if(!t.version){let s=o?.version||"1.0.0",i=await m.text({message:r("prompt","proj_version"),placeholder:s,defaultValue:s,validate(l){if(!l||!l.trim())return r("prompt","version_empty")}});u(i),t.version=i.trim()}if(!t.name&&!n?.project_id){let s=o?.name||"open-source-project",i=await m.text({message:r("prompt","proj_name"),placeholder:s,defaultValue:s});u(i),i.trim()&&(t.name=i.trim())}if(!t.summary&&!n?.project_id){let s=await m.text({message:r("prompt","proj_summary"),placeholder:r("prompt","proj_summary_placeholder")});u(s),s.trim()&&(t.summary=s.trim())}if(!t.cover&&!n?.project_id){let s=await m.text({message:r("prompt","proj_cover"),placeholder:"./cover.png"});u(s),s.trim()&&(t.cover=s.trim())}return t}async function ot(e){let t=e.subcommand,o={...e.flags},n=xe();if(!t&&!o.query&&!o.versions&&!o.page){let s=await m.select({message:r("prompt","games_action"),options:[{value:"list",label:r("prompt","games_list_label"),hint:r("prompt","games_list_hint")},{value:"query",label:r("prompt","games_query_label"),hint:r("prompt","games_query_hint")},{value:"versions",label:r("prompt","games_versions_label"),hint:r("prompt","games_versions_hint")},{value:"create",label:r("prompt","games_create_label"),hint:r("prompt","games_create_hint")},{value:"update",label:r("prompt","games_update_label"),hint:r("prompt","games_update_hint")}],initialValue:"list"});if(u(s),s==="query"){let i=await m.text({message:r("prompt","games_id"),placeholder:n?.game_id||"",defaultValue:n?.game_id,validate:l=>l?void 0:r("prompt","id_empty")});return u(i),o.query=i.trim(),{flags:o}}if(s==="versions"){let i=await m.text({message:r("prompt","games_id"),placeholder:n?.game_id||"",defaultValue:n?.game_id,validate:l=>l?void 0:r("prompt","id_empty")});return u(i),o.versions=i.trim(),{flags:o}}(s==="create"||s==="update")&&(t=s)}if(t==="create"){if(!o.name){let s=await m.text({message:r("prompt","games_name"),placeholder:r("prompt","games_name_placeholder"),validate:i=>i?void 0:r("prompt","name_empty")});u(s),o.name=s.trim()}if(!o.summary){let s=await m.text({message:r("prompt","games_summary")});u(s),s.trim()&&(o.summary=s.trim())}}else if(t==="update"){if(!o["game-id"]&&!n?.game_id){let s=await m.text({message:r("prompt","games_update_id"),validate:i=>i?void 0:r("prompt","id_empty")});u(s),o["game-id"]=s.trim()}if(!o.name&&!o.summary){let s=await m.text({message:r("prompt","games_update_name")});u(s),s.trim()&&(o.name=s.trim());let i=await m.text({message:r("prompt","games_update_summary")});u(i),i.trim()&&(o.summary=i.trim())}}return{subcommand:t,flags:o}}async function nt(e){let t=e.subcommand,o={...e.flags},n=re();if(!t&&!o.query&&!o.versions&&!o.data&&!o.page){let s=await m.select({message:r("prompt","tpls_action"),options:[{value:"list",label:r("prompt","tpls_list_label"),hint:r("prompt","tpls_list_hint")},{value:"query",label:r("prompt","tpls_query_label"),hint:r("prompt","tpls_query_hint")},{value:"versions",label:r("prompt","tpls_versions_label"),hint:r("prompt","tpls_versions_hint")},{value:"data",label:r("prompt","tpls_data_label"),hint:r("prompt","tpls_data_hint")},{value:"create",label:r("prompt","tpls_create_label"),hint:r("prompt","tpls_create_hint")},{value:"update",label:r("prompt","tpls_update_label"),hint:r("prompt","tpls_update_hint")}],initialValue:"list"});if(u(s),s==="query"){let i=await m.text({message:r("prompt","tpls_id"),placeholder:n?.template_id||"",defaultValue:n?.template_id,validate:l=>l?void 0:r("prompt","id_empty")});return u(i),o.query=i.trim(),{flags:o}}if(s==="versions"){let i=await m.text({message:r("prompt","tpls_id"),placeholder:n?.template_id||"",defaultValue:n?.template_id,validate:l=>l?void 0:r("prompt","id_empty")});return u(i),o.versions=i.trim(),{flags:o}}if(s==="data"){let i=await m.text({message:r("prompt","tpls_id"),placeholder:n?.template_id||"",defaultValue:n?.template_id,validate:l=>l?void 0:r("prompt","id_empty")});return u(i),o.data=i.trim(),{flags:o}}(s==="create"||s==="update")&&(t=s)}if(t==="create"){if(!o.name){let s=await m.text({message:r("prompt","tpls_name"),placeholder:r("prompt","tpls_name_placeholder"),validate:i=>i?void 0:r("prompt","name_empty")});u(s),o.name=s.trim()}}else if(t==="update"){if(!o["template-id"]&&!n?.template_id){let s=await m.text({message:r("prompt","tpls_update_id"),validate:i=>i?void 0:r("prompt","id_empty")});u(s),o["template-id"]=s.trim()}if(!o.name){let s=await m.text({message:r("prompt","tpls_update_name"),validate:i=>i?void 0:r("prompt","name_empty")});u(s),o.name=s.trim()}}return{subcommand:t,flags:o}}async function st(e){let t=e.subcommand,o={...e.flags},n=be();if(!t&&!o.query&&!o.versions&&!o.page){let s=await m.select({message:r("prompt","projs_action"),options:[{value:"list",label:r("prompt","projs_list_label"),hint:r("prompt","projs_list_hint")},{value:"query",label:r("prompt","projs_query_label"),hint:r("prompt","projs_query_hint")},{value:"versions",label:r("prompt","projs_versions_label"),hint:r("prompt","projs_versions_hint")},{value:"create",label:r("prompt","projs_create_label"),hint:r("prompt","projs_create_hint")},{value:"update",label:r("prompt","projs_update_label"),hint:r("prompt","projs_update_hint")}],initialValue:"list"});if(u(s),s==="query"){let i=await m.text({message:r("prompt","projs_id"),placeholder:n?.project_id||"",defaultValue:n?.project_id,validate:l=>l?void 0:r("prompt","id_empty")});return u(i),o.query=i.trim(),{flags:o}}if(s==="versions"){let i=await m.text({message:r("prompt","projs_id"),placeholder:n?.project_id||"",defaultValue:n?.project_id,validate:l=>l?void 0:r("prompt","id_empty")});return u(i),o.versions=i.trim(),{flags:o}}(s==="create"||s==="update")&&(t=s)}if(t==="create"){if(!o.name){let s=await m.text({message:r("prompt","projs_name"),validate:i=>i?void 0:r("prompt","name_empty")});u(s),o.name=s.trim()}}else if(t==="update"){if(!o["project-id"]&&!n?.project_id){let s=await m.text({message:r("prompt","projs_update_id"),validate:i=>i?void 0:r("prompt","id_empty")});u(s),o["project-id"]=s.trim()}if(!o.name){let s=await m.text({message:r("prompt","projs_update_name")});u(s),s.trim()&&(o.name=s.trim())}}return{subcommand:t,flags:o}}async function rt(){let e=await m.confirm({message:g.common.login_required_confirm.text,initialValue:!0});return!(m.isCancel(e)||!e)}async function it(e){let t={...e.flags};if(!t.force&&!t["if-needed"]){let o=await m.select({message:r("prompt","login_mode"),options:[{value:"skip",label:r("prompt","login_skip_label"),hint:r("prompt","login_skip_hint")},{value:"force",label:r("prompt","login_force_label"),hint:r("prompt","login_force_hint")}],initialValue:"skip"});u(o),o==="force"&&(t.force=!0)}return t}function lo(){try{let e=Je.join(Be(),"skill-targets.json"),t=JSON.parse(ke.readFileSync(e,"utf8")),o=[];for(let n of t.projectSkillDirs??[]){let i=(n.replace(/\\/g,"/").split("/").find(Boolean)??"").replace(/^\./,"").toLowerCase();i&&!o.includes(i)&&o.push(i)}return o}catch{return["cursor"]}}async function at(e){let t={...e.flags};if(typeof t.platform=="string"&&t.platform!==""||t.all===!0)return t;let n=lo(),s=await m.select({message:r("prompt","skill_platform"),options:[...n.map(i=>({value:i,label:i})),{value:"__all__",label:r("prompt","skill_all_label"),hint:r("prompt","skill_all_hint")}]});return u(s),s==="__all__"?t.all=!0:t.platform=s,t}import J from"node:fs";import P from"node:path";import{createRequire as co}from"node:module";import{fileURLToPath as mo}from"node:url";var po=co(import.meta.url);function je(){return process.platform==="win32"?"cgmaker.exe":"cgmaker"}function uo(){let e=process.platform,t=process.arch;return e==="darwin"&&t==="arm64"?["aarch64-apple-darwin"]:e==="darwin"&&t==="x64"?["x86_64-apple-darwin"]:e==="win32"&&t==="x64"?["x86_64-pc-windows-gnu","x86_64-pc-windows-msvc"]:e==="linux"&&t==="x64"?["x86_64-unknown-linux-gnu","x86_64-unknown-linux-musl"]:e==="linux"&&t==="arm64"?["aarch64-unknown-linux-gnu","aarch64-unknown-linux-musl"]:[]}function _o(e){let t=je(),o=[];for(let n of["release","debug"]){for(let s of uo())o.push(P.join(e,s,n,t));o.push(P.join(e,n,t))}return o}function go(e){for(let t of e)if(t){for(let o of _o(t))if(J.existsSync(o))return o}return null}function fo(){let e=process.platform,t=process.arch;return e==="darwin"&&t==="arm64"?"@66rpg/cgmaker-darwin-arm64":e==="darwin"&&t==="x64"?"@66rpg/cgmaker-darwin-x64":e==="win32"&&t==="x64"?"@66rpg/cgmaker-win32-x64":null}function lt(){if(process.env.CG_MAKER_CLI_BIN&&J.existsSync(process.env.CG_MAKER_CLI_BIN))return process.env.CG_MAKER_CLI_BIN;if(process.env.CGMAKER_BIN&&J.existsSync(process.env.CGMAKER_BIN))return process.env.CGMAKER_BIN;let e=P.dirname(mo(import.meta.url)),t=P.resolve(e,"..");try{t=J.realpathSync(t)}catch{}let o=[];process.env.CARGO_TARGET_DIR&&o.push(process.env.CARGO_TARGET_DIR);let n=t;for(let a=0;a<10;a++){o.push(P.join(n,"target"));let p=P.dirname(n);if(p===n)break;n=p}let s=go(o);if(s)return s;let i=P.join(t,je());if(J.existsSync(i))return i;let l=fo();if(l)try{let a=P.dirname(po.resolve(`${l}/package.json`)),p=P.join(a,je());if(J.existsSync(p))return p}catch{}return null}import{spawn as At}from"node:child_process";import U from"picocolors";var ho=/[\u001B\u009B][[\]()#;?]*(?:(?:(?:[a-zA-Z\d]*(?:;[-a-zA-Z\d\/#&.:=?%@~_]*)*)?\u0007)|(?:(?:\d{1,4}(?:;\d{0,4})*)?[\dA-PR-TZcf-ntqry=><~]))/g;function Z(e){return e.replace(ho,"")}function D(e){let t=Z(e),o=0,n=Array.from(t);for(let s of n){let i=s.codePointAt(0)??0;if("\u2714\u2716\u26A0\u2139".includes(s)){o+=2;continue}if(i>65535){o+=2;continue}i>=4352&&i<=4447||i>=11904&&i<=42191&&i!==12351||i>=44032&&i<=55203||i>=63744&&i<=64255||i>=65040&&i<=65049||i>=65072&&i<=65135||i>=65280&&i<=65376||i>=65504&&i<=65510?o+=2:o+=1}return o}function X(e,t){let o=D(e);return o>=t?e:e+" ".repeat(t-o)}function ie(e,t){if(t<=4)return[e];let o=[],n=e.split(/\r?\n/);for(let s of n){if(!s){o.push("");continue}let i="",l=0,a=Array.from(s);for(let p=0;p<a.length;p++){let c=a[p],x=D(c);l+x>t&&i.length>0&&(o.push(i),i="",l=0),i+=c,l+=x}i.length>0&&o.push(i)}return o.length>0?o:[""]}import V from"picocolors";function H(e,t,o){if(!t||t.length===0)return V.gray(o?.emptyText??r("kit","table_empty"));let n={};for(let c of e){let x=D(c.header);for(let j of t){let v=j[c.key]!=null?String(j[c.key]):"-",b=D(v);b>x&&(x=b)}c.minWidth&&x<c.minWidth&&(x=c.minWidth),c.maxWidth&&x>c.maxWidth&&(x=c.maxWidth),n[c.key]=x}let s=[];o?.title&&s.push(V.bold(o.title));let i="\u250C\u2500"+e.map(c=>"\u2500".repeat(n[c.key])).join("\u2500\u252C\u2500")+"\u2500\u2510";s.push(V.gray(i));let l="\u2502 "+e.map(c=>V.bold(X(c.header,n[c.key]))).join(V.gray(" \u2502 "))+" \u2502";s.push(l);let a="\u251C\u2500"+e.map(c=>"\u2500".repeat(n[c.key])).join("\u2500\u253C\u2500")+"\u2500\u2524";s.push(V.gray(a));for(let c of t){let x="\u2502 "+e.map(j=>{let v=c[j.key]!=null?String(c[j.key]):"-";return X(v,n[j.key])}).join(V.gray(" \u2502 "))+" \u2502";s.push(x)}let p="\u2514\u2500"+e.map(c=>"\u2500".repeat(n[c.key])).join("\u2500\u2534\u2500")+"\u2500\u2518";return s.push(V.gray(p)),s.join(`
|
|
2
|
+
`)}import A from"picocolors";function ct(e,t,o){let n="\u2500".repeat(e+4);return t(o?`\u250C${n}\u2510`:`\u2514${n}\u2518`)}function mt(e,t){return t("\u2502")+" ".repeat(e+4)+t("\u2502")}function xo(e,t,o){let n=Math.max(0,t-D(e));return o("\u2502")+" "+e+" ".repeat(n)+" "+o("\u2502")}function E(e,t,o){let n=o?.status??"info",s=n==="success"?A.green("\u2714"):n==="error"?A.red("\u2716"):n==="warn"?A.yellow("\u26A0"):A.cyan("\u2139"),i=n==="success"?A.green:n==="error"?A.red:n==="warn"?A.yellow:A.cyan,l=process.stdout.columns&&process.stdout.columns>30?process.stdout.columns:80,a=Math.min(Math.max(l-1,20),84),p=Math.max(16,a-6),c=t.filter(I=>I.value!=null&&I.value!==""),j=c.reduce((I,K)=>Math.max(I,D(K.label)),0)+2,v=Math.max(16,p-j-1),b=[],h=`${s} ${A.bold(e)}`;b.push(h);for(let I of c){let K=String(I.value),Ie=ie(K,v);for(let ee=0;ee<Ie.length;ee++){let Re=Ie[ee],Te=I.highlight?A.bold(A.cyan(Re)):Re;if(ee===0){let pe=A.gray(X(I.label+":",j));b.push(`${pe} ${Te}`)}else{let pe=" ".repeat(j+1);b.push(`${pe}${Te}`)}}}let d=Math.max(...b.map(I=>D(I)),Math.min(40,p));o?.width&&(d=Math.max(d,o.width)),d=Math.min(d,p);let y=[];for(let I of b)D(I)<=d?y.push(I):y.push(...ie(Z(I),d));if(b.length=0,b.push(...y),o?.footer){b.push(A.dim("\u2500".repeat(d)));let I=ie(o.footer,d);for(let K of I)b.push(A.dim(K))}let B=[];B.push(ct(d,i,!0)),B.push(mt(d,i));for(let I of b)B.push(xo(I,d,i));return B.push(mt(d,i)),B.push(ct(d,i,!1)),B.join(`
|
|
3
|
+
`)}function pt(e,t){let o=g.error,n=[];return t?.code!=null&&n.push({label:o.label_code.text,value:t.code}),n.push({label:o.label_detail.text,value:e,highlight:!1}),t?.hint&&n.push({label:o.label_hint.text,value:t.hint,highlight:!0}),t?.logPath&&n.push({label:o.label_log_path.text,value:t.logPath}),E(o.title.text,n,{status:"error",footer:o.footer.text})}import S from"picocolors";function dt(e){return!e||e<=0?"-":e<1024?`${e} B`:e<1024*1024?`${(e/1024).toFixed(1)} KB`:`${(e/(1024*1024)).toFixed(2)} MB`}function bo(e){let t=typeof e=="number"?e:Number(e);if(!Number.isFinite(t)||t<=0)return"-";let o=new Date(t*1e3);if(Number.isNaN(o.getTime()))return"-";let n=s=>String(s).padStart(2,"0");return`${o.getFullYear()}-${n(o.getMonth()+1)}-${n(o.getDate())} ${n(o.getHours())}:${n(o.getMinutes())}:${n(o.getSeconds())}`}function vo(e){let t=typeof e=="number"?e:Number(e),o=g.versions;switch(t){case 1:return o.status_draft.text;case 2:return o.status_machine.text;case 3:return o.status_human.text;case 4:return S.green(o.status_passed.text);case 5:return S.red(o.status_rejected.text);default:return e==null||e===""?"-":String(e)}}function ut(e,t,o,n){return e===2?S.yellow(o):e===3?n:t}function we(e,t){switch(typeof t=="number"?t:Number(t)){case 4:return{title:e.title_passed.text,status:"success",footer:e.footer_passed.text};case 2:case 3:return{title:e.title_reviewing.text,status:"info",footer:e.footer_reviewing.text};case 5:return{title:e.title_rejected.text,status:"error",footer:e.footer_rejected.text};default:return{title:e.title_success.text,status:"success",footer:e.footer_success.text}}}function yo(e){let t=g.whoami;switch(e){case"signed_template_author":return t.role_signed_template_author.text;case"signed_author":return t.role_signed_author.text;case"author":return t.role_author.text;case"user":return t.role_user.text;default:return e}}function _t(e){let t=g.whoami;if(!e.logged_in)return e.expired?E(t.title_expired.text,[{label:r("fmt","label_status"),value:t.status_expired.text},{label:r("fmt","label_hint"),value:t.hint_relogin.text,highlight:!0}],{status:"warn"}):e.offline?E(t.title_offline.text,[{label:r("fmt","label_status"),value:t.status_offline.text},{label:r("fmt","label_hint"),value:t.hint_check_network.text}],{status:"warn"}):E(t.title_not_logged_in.text,[{label:r("fmt","label_status"),value:t.status_not_logged_in.text},{label:r("fmt","label_action"),value:t.hint_login_now.text,highlight:!0}],{status:"info"});let o=[{label:t.label_nickname.text,value:e.nick_name||"-",highlight:!0},{label:t.label_uid.text,value:e.uid||"-"},{label:t.label_verified.text,value:e.real_name_verified?S.green(t.val_verified_yes.text):S.yellow(t.val_verified_no.text)}];return e.vip&&o.push({label:t.label_vip.text,value:r("fmt","vip",{n:e.vip})}),e.admin&&o.push({label:t.label_admin.text,value:t.val_yes.text}),e.sauthor&&o.push({label:t.label_sauthor.text,value:S.green(t.val_yes.text)}),e.lumi_username&&o.push({label:t.label_lumi_username.text,value:e.lumi_username}),e.lumi_roles&&Array.isArray(e.lumi_roles)&&e.lumi_roles.length>0&&o.push({label:t.label_lumi_roles.text,value:e.lumi_roles.map(n=>yo(String(n))).join(r("fmt","list_sep"))}),e.refresh_token_expires_at&&o.push({label:t.label_expires_at.text,value:e.refresh_token_expires_at}),E(t.title_logged_in.text,o,{status:"success",footer:t.footer_logged_in.text})}function gt(e){let t=g.publish,o=e.variant===2,n=[{label:t.label_game_id.text,value:e.game_id,highlight:!0},{label:t.label_release_version.text,value:`${e.version_name||""} (${e.version_id||"-"})`},{label:t.label_version_no.text,value:e.version_no?r("fmt","version_no",{n:e.version_no}):void 0},{label:t.label_variant_type.text,value:ut(e.variant,t.val_official.text,t.val_demo.text,t.val_derived.text)}];o&&e.parent_game_id&&n.push({label:t.label_parent_game_id.text,value:e.parent_game_id}),e.bytes&&n.push({label:t.label_package_size.text,value:dt(e.bytes)});let s=we(t,e.status);return E(s.title,n,{status:s.status,footer:s.footer})}function ft(e,t){let o=g.publish_template,n=t==="publish-template-data",s=[{label:o.label_template_id.text,value:e.template_id,highlight:!0},{label:o.label_template_name.text,value:e.template_name},{label:o.label_version.text,value:e.version},{label:o.label_revision_id.text,value:e.revision_id}];if(e.data_ver&&e.data_ver!=="0"?s.push({label:o.label_data_ver.text,value:r("fmt","data_ver",{ver:e.data_ver,id:e.data_ver_id||"-"})}):n&&e.data_ver_id&&s.push({label:o.label_data_ver.text,value:e.data_ver_id,highlight:!0}),e.data_summary&&s.push({label:o.label_data_summary.text,value:e.data_summary}),n)return E(o.title_data_success.text,s,{status:"success",footer:o.footer_data_success.text});let i=we(o,e.status);return E(i.title,s,{status:i.status,footer:i.footer})}function ht(e){let t=g.publish_project,o=[{label:t.label_project_id.text,value:e.project_id,highlight:!0},{label:t.label_project_name.text,value:e.version_name},{label:t.label_release_version.text,value:`${e.version_name||""} (ID: ${e.version_id||"-"})`}];e.post_id&&o.push({label:t.label_post_id.text,value:r("fmt","post_id",{id:e.post_id})}),e.bytes&&o.push({label:t.label_package_size.text,value:dt(e.bytes)});let n=we(t,e.status);return E(n.title,o,{status:n.status,footer:n.footer})}function xt(e){let t=g.templates,o=e.templates||e.items||[],n=[{key:"template_id",header:t.col_template_id.text,minWidth:14},{key:"name",header:t.col_template_name.text,minWidth:16},{key:"latest_version_no",header:t.col_latest_version.text,minWidth:10}],s=o.map(a=>({template_id:S.cyan(a.template_id||a.id||"-"),name:a.name||a.template_name||"-",latest_version_no:a.latest_version_no?r("fmt","version_no",{n:a.latest_version_no}):"-"})),i=H(n,s,{emptyText:t.empty_list.text,title:S.bold(t.table_title.text)}),l=e.total!=null?S.dim(`
|
|
4
|
+
`+r("common","page_info_pattern",{page:String(e.page||1),count:String(e.count||s.length),total:String(e.total)})):"";return i+l}function bt(e){let t=g.games,o=e.games||[],n=[{key:"game_id",header:t.col_game_id.text,minWidth:14},{key:"name",header:t.col_game_name.text,minWidth:16},{key:"variant",header:t.col_variant.text,minWidth:10},{key:"latest_version_no",header:t.col_latest_version.text,minWidth:10}],s=o.map(a=>({game_id:S.cyan(a.game_id||"-"),name:a.name||"-",variant:ut(a.variant,t.val_official.text,t.val_demo.text,t.val_derived.text),latest_version_no:a.latest_version_no?r("fmt","version_no",{n:a.latest_version_no}):"-"})),i=H(n,s,{emptyText:t.empty_list.text,title:S.bold(t.table_title.text)}),l=e.total!=null?S.dim(`
|
|
5
|
+
`+r("common","page_info_pattern",{page:String(e.page||1),count:String(e.count||s.length),total:String(e.total)})):"";return i+l}function vt(e){let t=g.projects,o=e.projects||[],n=[{key:"project_id",header:t.col_project_id.text,minWidth:14},{key:"name",header:t.col_project_name.text,minWidth:16},{key:"latest_version_no",header:t.col_latest_version.text,minWidth:10}],s=o.map(a=>({project_id:S.cyan(a.project_id||"-"),name:a.name||"-",latest_version_no:a.latest_version_no?r("fmt","version_no",{n:a.latest_version_no}):"-"})),i=H(n,s,{emptyText:t.empty_list.text,title:S.bold(t.table_title.text)}),l=e.total!=null?S.dim(`
|
|
6
|
+
`+r("common","page_info_pattern",{page:String(e.page||1),count:String(e.count||s.length),total:String(e.total)})):"";return i+l}function ae(e,t){let o=g.versions,n=[{key:"version_id",header:o.col_version_id.text,minWidth:14},{key:"version",header:o.col_version.text,minWidth:10},{key:"status",header:o.col_status.text,minWidth:8},{key:"published_at",header:o.col_published_at.text,minWidth:18}],s=t.map(i=>({version_id:S.cyan(i.version_id||i.revision_id||"-"),version:i.version_name||i.version||i.version_no||"-",status:vo(i.status??i.audit_status),published_at:bo(i.published_at)}));return H(n,s,{emptyText:o.empty_versions.text,title:S.bold(e)})}function yt(e,t){let o=g.templates,n=[{key:"data_id",header:o.col_data_id.text,minWidth:14},{key:"data_ver",header:o.col_data_ver.text,minWidth:10},{key:"summary",header:o.col_data_summary.text,minWidth:12}],s=t.map(i=>({data_id:S.cyan(i.data_id||"-"),data_ver:i.data_ver||"-",summary:i.summary||"-"}));return H(n,s,{emptyText:o.empty_data.text,title:S.bold(e)})}function le(e,t){let o=[];for(let[n,s]of Object.entries(t))s==null||typeof s=="object"||o.push({label:n,value:String(s)});return E(e,o,{status:"info"})}function W(e,t,o){let n=g.shelf,s=r("fmt",`type_${e}`),i=e==="template"?"template_id":e==="game"?"game_id":"project_id",l=e==="template"?"template_name":e==="game"?"name":"project_name",a=[{label:r("fmt","shelf_id",{type:s}),value:o[i]||"-",highlight:!0}];o[l]&&a.push({label:r("fmt","shelf_name",{type:s}),value:o[l]}),o.post_id&&a.push({label:n.label_community_post.text,value:r("fmt","post_id",{id:o.post_id})});let p=t==="create"?`${s}${n.card_title_shelf_created.text}`:`${s}${n.card_title_shelf_updated.text}`;return E(p,a,{status:"success"})}function kt(e){let t=g.skill,o=r("fmt","list_sep"),n=Array.isArray(e.copied)?e.copied.join(o):"-",s=Array.isArray(e.targets)?e.targets.join(o):"-";return E(t.card_title.text,[{label:t.label_kit.text,value:e.kit||"-"},{label:t.label_copied.text,value:n},{label:t.label_targets.text,value:s,highlight:!0}],{status:"success"})}function jt(e){let t=g.error,o=g.error_codes,n=e.message||t.default_message.text,s=e.hint;if(!s){let i=e.code!=null?String(e.code):"";i==="2001"||n.includes("\u672A\u767B\u5F55")?s=o[2001].text:i==="2003"||n.includes("\u51ED\u8BC1\u5DF2\u8FC7\u671F")?s=o[2003].text:n.includes("\u6821\u9A8C\u5931\u8D25")||n.includes("\u54C8\u5E0C")||n.includes("MD5")||n.includes("SHA-256")||n.includes("checksum")?s=o["1003_checksum"].text:n.includes("dist")||n.includes("index.html")?s=o["1001_missing_dist"].text:i==="2002"||i==="8004"||n.includes("\u6743\u9650")||n.includes("\u7B7E\u7EA6")?s=o[8004].text:o[i]&&(s=o[i].text)}return pt(n,{code:e.code,hint:s})}var ko=new Set(["login","logout","skill"]);function wt(e){let t=e.code!=null?String(e.code):"";if(t==="2001"||t==="2003")return!0;let o=e.message||"";return o.includes("\u672A\u767B\u5F55")||o.includes("\u51ED\u8BC1\u5DF2\u8FC7\u671F")||o.includes("\u767B\u5F55\u51ED\u8BC1\u5DF2\u8FC7\u671F")||o.includes("refresh_token \u5DF2\u5931\u6548")}function St(e,t){if(e!=="whoami"||!t||typeof t!="object")return!1;let o=t;return o.offline?!1:o.logged_in===!1||o.expired===!0}function It(e,t={stdinTty:!!process.stdin.isTTY,stdoutTty:!!process.stdout.isTTY}){return e.isJson||e.skipLoginPrompt||e.command&&ko.has(e.command)||e.isInteractive===!1?!1:!!(t.stdinTty&&t.stdoutTty)}function Rt(e){let t=Z(e).trim();if(!t)return"";let o=t.match(/^(?:\d{4}-\d{2}-\d{2}T[\d:.]+Z\s+)?(INFO|DEBUG|WARN|ERROR)\s+(.*)$/);if(o){let n=o[1],s=o[2];if(n==="INFO")return`${k.brandTag} ${k.badgeInfo} ${s}`;if(n==="DEBUG")return`${k.brandTag} ${k.badgeDebug} ${U.gray(s)}`;if(n==="WARN")return`${k.brandTag} ${k.badgeWarn} ${U.yellow(s)}`;if(n==="ERROR")return`${k.brandTag} ${k.badgeError} ${U.red(s)}`}return t.startsWith("[cgmaker]")?e:`${k.brandTag} ${e}`}function Se(e,t){return new Promise(o=>{let n=At(e,t,{stdio:"inherit"});n.on("exit",s=>o(s??0)),n.on("error",s=>{console.error(U.red(r("kit","run_failed",{e:s.message}))),o(1)})})}function jo(e,t){let o=t.includes("--json")?[...t]:[...t,"--json"];return new Promise(n=>{let s="",i="",l=At(e,o,{stdio:["inherit","pipe","pipe"]});l.stdout.on("data",a=>{s+=a.toString()}),l.stderr.on("data",a=>{let c=(i+a.toString()).split(/\r?\n/);i=c.pop()??"";for(let x of c)x.trim()&&process.stderr.write(Rt(x)+`
|
|
7
|
+
`)}),l.on("exit",a=>{i.trim()&&process.stderr.write(Rt(i)+`
|
|
8
|
+
`);let p=s.trim();try{let c=JSON.parse(p);n({code:a??0,envelope:c,rawStdout:s})}catch{n({code:a??0,envelope:null,rawStdout:s})}}),l.on("error",a=>{console.error(U.red(r("kit","cli_failed",{e:a.message}))),n({code:1,envelope:null,rawStdout:""})})})}async function Tt(e){if(!It(e))return null;if(!await rt())return R.warn(g.common.login_cancelled.text),null;let o=await Se(e.binPath,["login"]);return o!==0?(R.error(g.common.login_failed.text),o||1):(R.success(g.common.login_retrying.text),ce({...e,skipLoginPrompt:!0}))}async function ce(e){let{binPath:t,args:o,isJson:n,command:s,subcommand:i}=e;if(n)return Se(t,o);let l=o.includes("--help")||o.includes("-h")||o.includes("--version")||o.includes("-V");if(s==="login"||l)return Se(t,o);let a=await jo(t,o);if(!a.envelope)return a.rawStdout&&process.stdout.write(a.rawStdout),a.code;if(a.envelope.success===!0){let p=a.envelope.data??{};if(St(s,p)){let c=await Tt(e);if(c!=null)return c}return wo(s,i,o,p),0}if(a.envelope.success===!1){let p=a.envelope.error??{message:r("kit","op_failed")};if(wt(p)){let c=await Tt(e);if(c!=null)return c}return console.error(jt(p)),a.code||2}return a.rawStdout&&process.stdout.write(a.rawStdout),a.code}function wo(e,t,o,n){if(e==="whoami"){console.log(_t(n));return}if(e==="publish"){console.log(gt(n));return}if(e==="publish-template"||e==="publish-template-data"){console.log(ft(n,e));return}if(e==="publish-project"){console.log(ht(n));return}if(e==="games"){if(t==="create"){console.log(W("game","create",n));return}if(t==="update"){console.log(W("game","update",n));return}if(o.includes("--query")){console.log(le(g.games.query_card_title.text,n));return}if(o.includes("--versions")){console.log(ae(g.games.versions_title.text,Array.isArray(n)?n:[]));return}console.log(bt(n));return}if(e==="templates"){if(t==="create"){console.log(W("template","create",n));return}if(t==="update"){console.log(W("template","update",n));return}if(o.includes("--query")){console.log(le(g.templates.query_card_title.text,n));return}if(o.includes("--versions")){console.log(ae(g.templates.versions_title.text,Array.isArray(n)?n:[]));return}if(o.includes("--data")){console.log(yt(g.templates.data_packages_title.text,n.items||[]));return}console.log(xt(n));return}if(e==="projects"){if(t==="create"){console.log(W("project","create",n));return}if(t==="update"){console.log(W("project","update",n));return}if(o.includes("--query")){console.log(le(g.projects.query_card_title.text,n));return}if(o.includes("--versions")){console.log(ae(g.projects.versions_title.text,Array.isArray(n)?n:[]));return}console.log(vt(n));return}if(e==="skill"){console.log(kt(n));return}console.log(U.green(`\u2714 ${g.common.success_default.text}
|
|
9
|
+
`)+JSON.stringify(n,null,2))}function w(e,t,o=22){return` ${M.cyan(e.padEnd(o))}${r("help",t)}`}function me(e,t,o=22){return` ${M.gray(e.padEnd(o))}${r("help",t)}`}function So(e){return typeof e.version=="string"&&e.version.trim()?e.version.trim():(F()?.version??"").trim()}function Io(e){let t=So(e);t&&(L(t)||(R.error(r("prompt","version_invalid_log",{version:t})),R.warn(r("prompt","version_invalid_hint")),process.exit(2)))}function Et(){return`${M.bold(M.cyan("cgmaker"))} \u2014 ${r("help","tagline")}
|
|
10
|
+
|
|
11
|
+
${M.bold(r("help","usage_heading"))}
|
|
12
|
+
${r("help","usage_line")}
|
|
13
|
+
|
|
14
|
+
${M.bold(r("help","section_publish"))}
|
|
15
|
+
${w("publish","cmd_publish")}
|
|
16
|
+
${w("publish --demo","cmd_publish_demo")}
|
|
17
|
+
${w("publish-template","cmd_publish_template")}
|
|
18
|
+
${w("publish-template-data","cmd_publish_template_data")}
|
|
19
|
+
${w("publish-project","cmd_publish_project")}
|
|
20
|
+
${w("login","cmd_login")}
|
|
21
|
+
${w("logout","cmd_logout")}
|
|
22
|
+
${w("whoami","cmd_whoami")}
|
|
23
|
+
|
|
24
|
+
${M.bold(r("help","section_shelf"))}
|
|
25
|
+
${w("games","cmd_games")}
|
|
26
|
+
${w("games create","cmd_games_create")}
|
|
27
|
+
${w("games update","cmd_games_update")}
|
|
28
|
+
${w("templates","cmd_templates")}
|
|
29
|
+
${w("templates create","cmd_templates_create")}
|
|
30
|
+
${w("templates update","cmd_templates_update")}
|
|
31
|
+
${w("projects","cmd_projects")}
|
|
32
|
+
${w("projects create","cmd_projects_create")}
|
|
33
|
+
${w("projects update","cmd_projects_update")}
|
|
34
|
+
|
|
35
|
+
${M.bold(r("help","section_check"))}
|
|
36
|
+
${w("validate-template","cmd_validate_template")}
|
|
37
|
+
${w("validate","cmd_validate")}
|
|
38
|
+
${w("skill","cmd_skill")}
|
|
39
|
+
|
|
40
|
+
${M.bold(r("help","section_global"))}
|
|
41
|
+
${me("--json","opt_json")}
|
|
42
|
+
${me("-v, --verbose","opt_verbose")}
|
|
43
|
+
${me("--no-interactive","opt_no_interactive")}
|
|
44
|
+
${me("-h, --help","opt_help")}
|
|
45
|
+
`}async function ms(){let e=Ge(process.argv);if(e.isVerbose&&R.setVerbose(!0),e.command==="validate-template")try{await ne(process.cwd()),R.success(r("kit","validate_template_ok")),process.exit(0)}catch(a){R.error(a instanceof Error?a.message:String(a)),process.exit(1)}if(e.command==="validate")try{await fe(process.cwd()),R.success(r("kit","validate_ok")),process.exit(0)}catch(a){R.error(a instanceof Error?a.message:String(a)),process.exit(1)}(e.flags.help||e.command==="help")&&(process.stdout.write(Et()),process.exit(0));let t=lt();if(t||(R.error(r("kit","bin_missing")),process.exit(1)),e.wantsVersion){let a=await ce({binPath:t,args:["--version"],isJson:!1});process.exit(a)}let o=e.command,n=e.subcommand,s={...e.flags};if(e.isInteractive){if(!o){let a=await Ue();o=a.command,n=a.subcommand}if(o==="validate-template")try{await ne(process.cwd()),R.success(r("kit","validate_template_ok")),process.exit(0)}catch(a){R.error(a instanceof Error?a.message:String(a)),process.exit(1)}if(o==="publish")s=await Ke({...e,flags:s});else if(o==="publish-template")s=await ze({...e,flags:s});else if(o==="publish-template-data")s=await et({...e,flags:s});else if(o==="publish-project")s=await tt({...e,flags:s});else if(o==="games"){let a=await ot({...e,subcommand:n,flags:s});n=a.subcommand,s=a.flags}else if(o==="templates"){let a=await nt({...e,subcommand:n,flags:s});n=a.subcommand,s=a.flags}else if(o==="projects"){let a=await st({...e,subcommand:n,flags:s});n=a.subcommand,s=a.flags}else o==="login"?s=await it({...e,flags:s}):o==="skill"&&(s=await at({...e,flags:s}))}o||(process.stdout.write(Et()),process.exit(0)),o==="publish-template"&&!e.isJson&&Io(s);let i=He(o,n,s),l=await ce({binPath:t,args:i,isJson:e.isJson,command:o,subcommand:n,isInteractive:e.isInteractive});process.exit(l)}export{Pe as VERSION_NAME_PATTERN,Me as VERSION_NAME_RE,L as isValidVersionName,ms as run,fe as validate,ne as validateTemplate};
|
package/dist/validate.js
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
import r from"node:fs";import d from"node:path";import{createRequire as O}from"node:module";import{pathToFileURL as C}from"node:url";var S={$schema:"http://json-schema.org/draft-07/schema#",description:"cgmaker CLI \u8FD4\u56DE\u6587\u6848\u5B57\u5178\uFF08\u5305\u542B code \u7801\u4E0E\u6CE8\u91CA\u6587\u6848\uFF09",whoami:{title_logged_in:{code:"",text:"\u8D26\u53F7\u767B\u5F55\u4FE1\u606F",comment:"whoami \u67E5\u770B\u5DF2\u767B\u5F55\u8D26\u53F7\u4FE1\u606F\u65F6\u7684\u5361\u7247\u4E3B\u6807\u9898"},title_expired:{code:"2003",text:"\u767B\u5F55\u5DF2\u5931\u6548",comment:"whoami \u672C\u5730\u51ED\u636E\u8FC7\u671F\u65F6\u7684\u8B66\u544A\u5361\u7247\u6807\u9898"},title_offline:{code:"9000",text:"\u79BB\u7EBF\u6A21\u5F0F",comment:"whoami \u672C\u5730\u6709\u51ED\u636E\u4F46\u7F51\u7EDC\u4E0D\u53EF\u8FBE\u65F6\u7684\u5361\u7247\u6807\u9898"},title_not_logged_in:{code:"2001",text:"\u672A\u767B\u5F55",comment:"whoami \u5C1A\u672A\u767B\u5F55\u65F6\u7684\u63D0\u793A\u5361\u7247\u6807\u9898"},status_expired:{code:"2003",text:"\u51ED\u8BC1\u5DF2\u8FC7\u671F",comment:"\u51ED\u8BC1\u8FC7\u671F\u72B6\u6001\u63CF\u8FF0"},hint_relogin:{code:"2001",text:"\u8BF7\u6267\u884C npx cgmaker login \u91CD\u65B0\u767B\u5F55",comment:"\u91CD\u65B0\u767B\u5F55\u5F15\u5BFC\u5EFA\u8BAE"},status_offline:{code:"9000",text:"\u672C\u5730\u6709\u51ED\u636E\uFF0C\u4F46\u5F53\u524D\u7F51\u7EDC\u65E0\u6CD5\u8FDE\u63A5\u8BA4\u8BC1\u670D\u52A1\u5668",comment:"\u79BB\u7EBF\u72B6\u6001\u539F\u56E0\u63CF\u8FF0"},hint_check_network:{code:"9000",text:"\u8BF7\u68C0\u67E5\u7F51\u7EDC\u8FDE\u63A5\u540E\u91CD\u8BD5",comment:"\u79BB\u7EBF\u72B6\u6001\u89E3\u51B3\u5EFA\u8BAE"},status_not_logged_in:{code:"2001",text:"\u5C1A\u672A\u767B\u5F55\u6258\u7BA1\u5E73\u53F0",comment:"\u672A\u767B\u5F55\u72B6\u6001\u63CF\u8FF0"},hint_login_now:{code:"2001",text:"\u8BF7\u6267\u884C npx cgmaker login \u5F00\u59CB\u767B\u5F55\u6388\u6743",comment:"\u672A\u767B\u5F55\u65F6\u7684\u767B\u5F55\u5F15\u5BFC\u5EFA\u8BAE"},label_nickname:{code:"",text:"\u7528\u6237\u6635\u79F0",comment:"\u5361\u7247\u5C55\u793A\u5B57\u6BB5\u6807\u7B7E"},label_uid:{code:"",text:"\u7528\u6237 ID",comment:"\u5361\u7247\u5C55\u793A\u5B57\u6BB5\u6807\u7B7E"},label_verified:{code:"",text:"\u5B9E\u540D\u8BA4\u8BC1",comment:"\u5361\u7247\u5C55\u793A\u5B57\u6BB5\u6807\u7B7E"},val_verified_yes:{code:"",text:"\u5DF2\u5B9E\u540D\u8BA4\u8BC1",comment:"\u5DF2\u5B8C\u6210\u5B9E\u540D\u8BA4\u8BC1\u72B6\u6001"},val_verified_no:{code:"",text:"\u672A\u8BA4\u8BC1 (\u90E8\u5206\u6743\u9650\u53D7\u9650)",comment:"\u672A\u5B8C\u6210\u5B9E\u540D\u8BA4\u8BC1\u72B6\u6001"},label_vip:{code:"",text:"\u4F1A\u5458\u7B49\u7EA7",comment:"\u5361\u7247\u5C55\u793A\u5B57\u6BB5\u6807\u7B7E"},label_admin:{code:"",text:"\u7BA1\u7406\u5458",comment:"\u5361\u7247\u5C55\u793A\u5B57\u6BB5\u6807\u7B7E"},label_sauthor:{code:"",text:"\u7B7E\u7EA6\u4F5C\u8005",comment:"\u5361\u7247\u5C55\u793A\u5B57\u6BB5\u6807\u7B7E"},val_yes:{code:"",text:"\u662F",comment:"\u5E03\u5C14\u771F\u503C\u6587\u6848"},label_lumi_username:{code:"",text:"\u5E73\u53F0\u8D26\u53F7",comment:"\u5361\u7247\u5C55\u793A\u5B57\u6BB5\u6807\u7B7E"},label_lumi_roles:{code:"",text:"\u5E73\u53F0\u89D2\u8272",comment:"\u5361\u7247\u5C55\u793A\u5B57\u6BB5\u6807\u7B7E"},role_user:{code:"",text:"\u666E\u901A\u7528\u6237",comment:"lumi \u89D2\u8272 user \u7684\u4E2D\u6587\u540D"},role_author:{code:"",text:"\u4F5C\u8005",comment:"lumi \u89D2\u8272 author \u7684\u4E2D\u6587\u540D"},role_signed_author:{code:"",text:"\u7B7E\u7EA6\u4F5C\u8005",comment:"lumi \u89D2\u8272 signed_author \u7684\u4E2D\u6587\u540D"},role_signed_template_author:{code:"",text:"\u7B7E\u7EA6\u6A21\u677F\u4F5C\u8005",comment:"lumi \u89D2\u8272 signed_template_author \u7684\u4E2D\u6587\u540D"},label_expires_at:{code:"",text:"\u51ED\u8BC1\u6709\u6548\u671F\u81F3",comment:"\u5361\u7247\u5C55\u793A\u5B57\u6BB5\u6807\u7B7E"},footer_logged_in:{code:"",text:"\u63D0\u793A\uFF1A\u767B\u5F55\u51ED\u636E\u5DF2\u5B89\u5168\u5B58\u50A8\u4E8E\u7CFB\u7EDF\u672C\u5730\u5BC6\u94A5\u73AF\u4E2D\u3002",comment:"\u767B\u5F55\u5361\u7247\u5E95\u90E8\u5B89\u5168\u63D0\u793A"}},publish:{title_success:{code:"",text:"\u6E38\u620F\u53D1\u7248\u6210\u529F",comment:"\u6E38\u620F\u53D1\u5E03\u6210\u529F\u5361\u7247\u6807\u9898"},label_game_id:{code:"",text:"\u6E38\u620F ID",comment:"\u5361\u7247\u5C55\u793A\u5B57\u6BB5\u6807\u7B7E"},label_release_version:{code:"",text:"\u53D1\u5E03\u7248\u672C",comment:"\u5361\u7247\u5C55\u793A\u5B57\u6BB5\u6807\u7B7E"},label_version_no:{code:"",text:"\u7248\u672C\u5E8F\u53F7",comment:"\u5361\u7247\u5C55\u793A\u5B57\u6BB5\u6807\u7B7E"},label_variant_type:{code:"",text:"\u53D8\u4F53\u7C7B\u578B",comment:"\u5361\u7247\u5C55\u793A\u5B57\u6BB5\u6807\u7B7E"},val_demo:{code:"",text:"\u8BD5\u73A9\u7248",comment:"\u8BD5\u73A9\u7248\u7C7B\u578B"},val_official:{code:"",text:"\u6B63\u5F0F\u7248",comment:"\u6B63\u5F0F\u7248\u7C7B\u578B"},val_derived:{code:"",text:"\u884D\u751F",comment:"\u884D\u751F\u53D8\u4F53\u7C7B\u578B"},label_parent_game_id:{code:"",text:"\u7236\u6E38\u620F ID",comment:"\u5361\u7247\u5C55\u793A\u5B57\u6BB5\u6807\u7B7E"},label_package_size:{code:"",text:"\u8D44\u6E90\u5305\u5927\u5C0F",comment:"\u5361\u7247\u5C55\u793A\u5B57\u6BB5\u6807\u7B7E"},footer_success:{code:"",text:"dist/ \u9759\u6001\u5305\u5DF2\u6210\u529F\u6253\u5305\u8F6C\u7801\u5E76\u4E0A\u4F20\u81F3\u6258\u7BA1\u5E73\u53F0\u3002",comment:"\u6E38\u620F\u53D1\u5E03\u6210\u529F\u5361\u7247\u5E95\u90E8\u6CE8\u91CA"},title_passed:{code:"",text:"\u6E38\u620F\u53D1\u7248\u6210\u529F",comment:"\u6E38\u620F\u53D1\u5E03\u4E14\u5BA1\u6838\u5DF2\u901A\u8FC7\u5361\u7247\u6807\u9898"},title_reviewing:{code:"",text:"\u6E38\u620F\u5DF2\u63D0\u4EA4\u5BA1\u6838",comment:"\u6E38\u620F\u53D1\u5E03\u4F46\u5BA1\u6838\u4E2D\u5361\u7247\u6807\u9898"},title_rejected:{code:"",text:"\u6E38\u620F\u5BA1\u6838\u88AB\u62D2\u7EDD",comment:"\u6E38\u620F\u53D1\u5E03\u4F46\u5BA1\u6838\u88AB\u62D2\u7EDD\u5361\u7247\u6807\u9898"},footer_passed:{code:"",text:"\u5DF2\u901A\u8FC7\u5BA1\u6838\uFF0C\u53EF\u6B63\u5E38\u5B89\u88C5\u3002",comment:"\u6E38\u620F\u53D1\u5E03\u4E14\u5BA1\u6838\u5DF2\u901A\u8FC7\u5361\u7247\u5E95\u90E8\u6CE8\u91CA"},footer_reviewing:{code:"",text:"\u673A\u5BA1/\u4EBA\u5BA1\u4E2D\uFF0C\u7528 games --versions \u67E5\u7EC8\u6001\u3002",comment:"\u6E38\u620F\u53D1\u5E03\u4F46\u5BA1\u6838\u4E2D\u5361\u7247\u5E95\u90E8\u6CE8\u91CA"},footer_rejected:{code:"",text:"\u5BA1\u6838\u88AB\u62D2\u7EDD\uFF0C\u7528 games --versions \u67E5\u770B\u8BE6\u60C5\u3002",comment:"\u6E38\u620F\u53D1\u5E03\u4F46\u5BA1\u6838\u88AB\u62D2\u7EDD\u5361\u7247\u5E95\u90E8\u6CE8\u91CA"}},publish_template:{title_success:{code:"",text:"\u6A21\u677F\u53D1\u7248\u6210\u529F",comment:"\u6A21\u677F\u53D1\u5E03\u6210\u529F\u5361\u7247\u6807\u9898"},label_template_id:{code:"",text:"\u6A21\u677F ID",comment:"\u5361\u7247\u5C55\u793A\u5B57\u6BB5\u6807\u7B7E"},label_template_name:{code:"",text:"\u6A21\u677F\u540D\u79F0",comment:"\u5361\u7247\u5C55\u793A\u5B57\u6BB5\u6807\u7B7E"},label_version:{code:"",text:"\u7248\u672C\u53F7",comment:"\u5361\u7247\u5C55\u793A\u5B57\u6BB5\u6807\u7B7E"},label_revision_id:{code:"",text:"\u7248\u672C ID",comment:"\u5361\u7247\u5C55\u793A\u5B57\u6BB5\u6807\u7B7E"},label_data_ver:{code:"",text:"\u8D44\u6E90\u7248\u672C",comment:"\u5361\u7247\u5C55\u793A\u5B57\u6BB5\u6807\u7B7E"},label_data_summary:{code:"",text:"\u8D44\u6E90\u8BF4\u660E",comment:"\u6570\u636E\u5305 summary \u5361\u7247\u6807\u7B7E"},footer_success:{code:"",text:"\u6A21\u677F\u4EE3\u7801\u53CA\u4F9D\u8D56\u5DF2\u6210\u529F\u90E8\u7F72\u5230\u6258\u7BA1\u5E73\u53F0\uFF0C\u5DF2\u66F4\u65B0 .cgmaker/origin.json\u3002",comment:"\u6A21\u677F\u53D1\u7248\u6210\u529F\u5361\u7247\u5E95\u90E8\u6CE8\u91CA"},title_passed:{code:"",text:"\u6A21\u677F\u53D1\u7248\u6210\u529F",comment:"\u6A21\u677F\u53D1\u5E03\u4E14\u5BA1\u6838\u5DF2\u901A\u8FC7\u5361\u7247\u6807\u9898"},title_reviewing:{code:"",text:"\u6A21\u677F\u5DF2\u63D0\u4EA4\u5BA1\u6838",comment:"\u6A21\u677F\u53D1\u5E03\u4F46\u5BA1\u6838\u4E2D\u5361\u7247\u6807\u9898"},title_rejected:{code:"",text:"\u6A21\u677F\u5BA1\u6838\u88AB\u62D2\u7EDD",comment:"\u6A21\u677F\u53D1\u5E03\u4F46\u5BA1\u6838\u88AB\u62D2\u7EDD\u5361\u7247\u6807\u9898"},footer_passed:{code:"",text:"\u5DF2\u901A\u8FC7\u5BA1\u6838\uFF0C\u53EF\u6B63\u5E38\u5B89\u88C5\u3002",comment:"\u6A21\u677F\u53D1\u5E03\u4E14\u5BA1\u6838\u5DF2\u901A\u8FC7\u5361\u7247\u5E95\u90E8\u6CE8\u91CA"},footer_reviewing:{code:"",text:"\u673A\u5BA1/\u4EBA\u5BA1\u4E2D\uFF0C\u7528 templates --versions \u67E5\u7EC8\u6001\u3002",comment:"\u6A21\u677F\u53D1\u5E03\u4F46\u5BA1\u6838\u4E2D\u5361\u7247\u5E95\u90E8\u6CE8\u91CA"},footer_rejected:{code:"",text:"\u5BA1\u6838\u88AB\u62D2\u7EDD\uFF0C\u7528 templates --versions \u67E5\u770B\u8BE6\u60C5\u3002",comment:"\u6A21\u677F\u53D1\u5E03\u4F46\u5BA1\u6838\u88AB\u62D2\u7EDD\u5361\u7247\u5E95\u90E8\u6CE8\u91CA"},title_data_success:{code:"",text:"\u8D44\u6E90\u5305\u5DF2\u53D1\u5E03",comment:"\u53EA\u53D1\u6570\u636E\u7248\u672C\u6210\u529F\u5361\u7247\u6807\u9898"},footer_data_success:{code:"",text:"\u672A\u53D1\u65B0\u4EE3\u7801\u7248\u672C\u3002origin.json \u5DF2\u66F4\u65B0\u672C\u6B21 data_ver \u4E0E\u65B0\u7684 data_ver_id\uFF1B\u6E38\u620F\u4F5C\u8005\u53EF\u7528 --data-id \u4E0B\u8F7D\u8BE5\u5305\u3002",comment:"\u53EA\u53D1\u6570\u636E\u7248\u672C\u6210\u529F\u5361\u7247\u5E95\u90E8\u6CE8\u91CA"}},publish_project:{title_success:{code:"",text:"\u5F00\u6E90\u5DE5\u7A0B\u53D1\u7248\u6210\u529F",comment:"\u5F00\u6E90\u5DE5\u7A0B\u53D1\u7248\u6210\u529F\u5361\u7247\u6807\u9898"},label_project_id:{code:"",text:"\u5DE5\u7A0B ID",comment:"\u5361\u7247\u5C55\u793A\u5B57\u6BB5\u6807\u7B7E"},label_project_name:{code:"",text:"\u5DE5\u7A0B\u540D\u79F0",comment:"\u5361\u7247\u5C55\u793A\u5B57\u6BB5\u6807\u7B7E"},label_release_version:{code:"",text:"\u53D1\u5E03\u7248\u672C",comment:"\u5361\u7247\u5C55\u793A\u5B57\u6BB5\u6807\u7B7E"},label_post_id:{code:"",text:"\u5173\u8054\u793E\u533A\u5E16",comment:"\u5361\u7247\u5C55\u793A\u5B57\u6BB5\u6807\u7B7E"},label_package_size:{code:"",text:"\u6E90\u7801\u5305\u5927\u5C0F",comment:"\u5361\u7247\u5C55\u793A\u5B57\u6BB5\u6807\u7B7E"},footer_success:{code:"",text:"\u6E90\u7801\u5305\u5DF2\u4E0A\u4F20\uFF0C\u7248\u672C\u5DF2\u81EA\u52A8\u63D0\u4EA4\u673A\u5BA1\uFF1B\u5DF2\u540C\u6B65\u66F4\u65B0 .cgmaker/project.json\u3002",comment:"\u5F00\u6E90\u5DE5\u7A0B\u53D1\u7248\u6210\u529F\u5361\u7247\u5E95\u90E8\u6CE8\u91CA"},title_passed:{code:"",text:"\u5F00\u6E90\u5DE5\u7A0B\u53D1\u7248\u6210\u529F",comment:"\u5F00\u6E90\u5DE5\u7A0B\u53D1\u5E03\u4E14\u5BA1\u6838\u5DF2\u901A\u8FC7\u5361\u7247\u6807\u9898"},title_reviewing:{code:"",text:"\u5F00\u6E90\u5DE5\u7A0B\u5DF2\u63D0\u4EA4\u5BA1\u6838",comment:"\u5F00\u6E90\u5DE5\u7A0B\u53D1\u5E03\u4F46\u5BA1\u6838\u4E2D\u5361\u7247\u6807\u9898"},title_rejected:{code:"",text:"\u5F00\u6E90\u5DE5\u7A0B\u5BA1\u6838\u88AB\u62D2\u7EDD",comment:"\u5F00\u6E90\u5DE5\u7A0B\u53D1\u5E03\u4F46\u5BA1\u6838\u88AB\u62D2\u7EDD\u5361\u7247\u6807\u9898"},footer_passed:{code:"",text:"\u5DF2\u901A\u8FC7\u5BA1\u6838\uFF0C\u53EF\u6B63\u5E38\u5B89\u88C5\u3002",comment:"\u5F00\u6E90\u5DE5\u7A0B\u53D1\u5E03\u4E14\u5BA1\u6838\u5DF2\u901A\u8FC7\u5361\u7247\u5E95\u90E8\u6CE8\u91CA"},footer_reviewing:{code:"",text:"\u673A\u5BA1/\u4EBA\u5BA1\u4E2D\uFF0C\u7528 projects --versions \u67E5\u7EC8\u6001\u3002",comment:"\u5F00\u6E90\u5DE5\u7A0B\u53D1\u5E03\u4F46\u5BA1\u6838\u4E2D\u5361\u7247\u5E95\u90E8\u6CE8\u91CA"},footer_rejected:{code:"",text:"\u5BA1\u6838\u88AB\u62D2\u7EDD\uFF0C\u7528 projects --versions \u67E5\u770B\u8BE6\u60C5\u3002",comment:"\u5F00\u6E90\u5DE5\u7A0B\u53D1\u5E03\u4F46\u5BA1\u6838\u88AB\u62D2\u7EDD\u5361\u7247\u5E95\u90E8\u6CE8\u91CA"}},templates:{table_title:{code:"",text:"\u6211\u7684\u6A21\u677F\u8D27\u67B6\u5217\u8868\uFF1A",comment:"\u6A21\u677F\u5217\u8868\u8868\u683C\u4E3B\u6807\u9898"},empty_list:{code:"",text:"\u6682\u65E0\u6A21\u677F\u6570\u636E",comment:"\u5217\u8868\u4E3A\u7A7A\u65F6\u7684\u5360\u4F4D\u8BF4\u660E"},col_template_id:{code:"",text:"\u6A21\u677F ID",comment:"\u8868\u683C\u5217\u540D"},col_template_name:{code:"",text:"\u6A21\u677F\u540D\u79F0",comment:"\u8868\u683C\u5217\u540D"},col_latest_version:{code:"",text:"\u6700\u65B0\u7248\u672C",comment:"\u8868\u683C\u5217\u540D"},query_card_title:{code:"",text:"\u6A21\u677F\u8BE6\u60C5",comment:"\u67E5\u8BE2\u6A21\u677F\u8BE6\u60C5\u5361\u7247\u6807\u9898"},versions_title:{code:"",text:"\u6A21\u677F\u53D1\u5E03\u7248\u672C\u5386\u53F2",comment:"\u6A21\u677F\u7248\u672C\u5217\u8868\u6807\u9898"},data_packages_title:{code:"",text:"\u6A21\u677F\u7ED1\u5B9A\u7684\u6570\u636E\u5305\u5217\u8868",comment:"\u6A21\u677F\u6570\u636E\u5305\u5217\u8868\u6807\u9898"},col_data_id:{code:"",text:"\u6570\u636E\u5305 ID",comment:"\u6A21\u677F\u6570\u636E\u5305\u8868\u683C\u5217\u540D"},col_data_ver:{code:"",text:"data_ver",comment:"\u6A21\u677F\u6570\u636E\u5305\u8868\u683C\u5217\u540D"},col_data_summary:{code:"",text:"\u8BF4\u660E",comment:"\u6A21\u677F\u6570\u636E\u5305 summary \u5217\u540D"},empty_data:{code:"",text:"\u6682\u65E0\u6570\u636E\u5305",comment:"\u6A21\u677F\u6570\u636E\u5305\u5217\u8868\u4E3A\u7A7A\u65F6\u7684\u5360\u4F4D\u8BF4\u660E"}},games:{table_title:{code:"",text:"\u6211\u7684\u6E38\u620F\u8D27\u67B6\u5217\u8868\uFF1A",comment:"\u6E38\u620F\u5217\u8868\u8868\u683C\u4E3B\u6807\u9898"},empty_list:{code:"",text:"\u6682\u65E0\u6E38\u620F\u6570\u636E",comment:"\u5217\u8868\u4E3A\u7A7A\u65F6\u7684\u5360\u4F4D\u8BF4\u660E"},col_game_id:{code:"",text:"\u6E38\u620F ID",comment:"\u8868\u683C\u5217\u540D"},col_game_name:{code:"",text:"\u6E38\u620F\u540D\u79F0",comment:"\u8868\u683C\u5217\u540D"},col_variant:{code:"",text:"\u53D8\u4F53\u7C7B\u578B",comment:"\u8868\u683C\u5217\u540D"},col_latest_version:{code:"",text:"\u6700\u65B0\u7248\u672C",comment:"\u8868\u683C\u5217\u540D"},val_demo:{code:"",text:"\u8BD5\u73A9",comment:"\u8868\u683C\u5217\u5355\u5143\u683C\u5185\u6587\u672C"},val_official:{code:"",text:"\u6B63\u5F0F",comment:"\u8868\u683C\u5217\u5355\u5143\u683C\u5185\u6587\u672C"},val_derived:{code:"",text:"\u884D\u751F",comment:"\u8868\u683C\u5217\u5355\u5143\u683C\u5185\u6587\u672C"},query_card_title:{code:"",text:"\u6E38\u620F\u8BE6\u60C5",comment:"\u67E5\u8BE2\u6E38\u620F\u8BE6\u60C5\u5361\u7247\u6807\u9898"},versions_title:{code:"",text:"\u6E38\u620F\u53D1\u5E03\u7248\u672C\u5386\u53F2",comment:"\u6E38\u620F\u7248\u672C\u5217\u8868\u6807\u9898"}},projects:{table_title:{code:"",text:"\u6211\u7684\u5F00\u6E90\u5DE5\u7A0B\u5217\u8868\uFF1A",comment:"\u5F00\u6E90\u5DE5\u7A0B\u5217\u8868\u8868\u683C\u4E3B\u6807\u9898"},empty_list:{code:"",text:"\u6682\u65E0\u5F00\u6E90\u5DE5\u7A0B\u6570\u636E",comment:"\u5217\u8868\u4E3A\u7A7A\u65F6\u7684\u5360\u4F4D\u8BF4\u660E"},col_project_id:{code:"",text:"\u5DE5\u7A0B ID",comment:"\u8868\u683C\u5217\u540D"},col_project_name:{code:"",text:"\u5DE5\u7A0B\u540D\u79F0",comment:"\u8868\u683C\u5217\u540D"},col_latest_version:{code:"",text:"\u6700\u65B0\u7248\u672C",comment:"\u8868\u683C\u5217\u540D"},query_card_title:{code:"",text:"\u5F00\u6E90\u5DE5\u7A0B\u8BE6\u60C5",comment:"\u67E5\u8BE2\u5F00\u6E90\u5DE5\u7A0B\u8BE6\u60C5\u5361\u7247\u6807\u9898"},versions_title:{code:"",text:"\u5F00\u6E90\u5DE5\u7A0B\u7248\u672C\u5386\u53F2",comment:"\u5F00\u6E90\u5DE5\u7A0B\u7248\u672C\u5217\u8868\u6807\u9898"}},versions:{col_version_id:{code:"",text:"\u7248\u672C ID",comment:"\u7248\u672C\u5386\u53F2\u8868\u683C\u5217\u540D"},col_version:{code:"",text:"\u7248\u672C\u53F7",comment:"\u7248\u672C\u5386\u53F2\u8868\u683C\u5217\u540D"},col_status:{code:"",text:"\u5BA1\u6838",comment:"\u7248\u672C\u5386\u53F2\u8868\u683C\u5217\u540D"},col_published_at:{code:"",text:"\u901A\u8FC7\u65F6\u95F4",comment:"\u7248\u672C\u901A\u8FC7\u65F6\u95F4\uFF08published_at\uFF0C\u672A\u901A\u8FC7\u663E\u793A -\uFF09"},status_draft:{code:"",text:"\u8349\u7A3F",comment:"\u7248\u672C status=1"},status_machine:{code:"",text:"\u673A\u5BA1\u4E2D",comment:"\u7248\u672C status=2"},status_human:{code:"",text:"\u4EBA\u5BA1\u4E2D",comment:"\u7248\u672C status=3"},status_passed:{code:"",text:"\u5DF2\u901A\u8FC7",comment:"\u7248\u672C status=4"},status_rejected:{code:"",text:"\u5DF2\u62D2\u7EDD",comment:"\u7248\u672C status=5"},empty_versions:{code:"",text:"\u6682\u65E0\u7248\u672C\u8BB0\u5F55",comment:"\u7248\u672C\u5386\u53F2\u4E3A\u7A7A\u65F6\u7684\u5360\u4F4D\u8BF4\u660E"}},shelf:{action_create:{code:"",text:"\u521B\u5EFA",comment:"\u8D27\u67B6\u64CD\u4F5C\u884C\u4E3A\u63CF\u8FF0"},action_update:{code:"",text:"\u66F4\u65B0",comment:"\u8D27\u67B6\u64CD\u4F5C\u884C\u4E3A\u63CF\u8FF0"},type_template:{code:"",text:"\u6A21\u677F",comment:"\u8D27\u67B6\u5B9E\u4F53\u7C7B\u578B"},type_game:{code:"",text:"\u6E38\u620F",comment:"\u8D27\u67B6\u5B9E\u4F53\u7C7B\u578B"},type_project:{code:"",text:"\u5F00\u6E90\u5DE5\u7A0B",comment:"\u8D27\u67B6\u5B9E\u4F53\u7C7B\u578B"},label_community_post:{code:"",text:"\u5173\u8054\u793E\u533A\u5E16",comment:"\u8D27\u67B6\u5361\u7247\u5C55\u793A\u5B57\u6BB5\u6807\u7B7E"},card_title_shelf_created:{code:"",text:"\u8D27\u67B6\u521B\u5EFA\u6210\u529F",comment:"\u8D27\u67B6\u521B\u5EFA\u6210\u529F\u5361\u7247\u6807\u9898\u540E\u7F00"},card_title_shelf_updated:{code:"",text:"\u8D27\u67B6\u66F4\u65B0\u6210\u529F",comment:"\u8D27\u67B6\u66F4\u65B0\u6210\u529F\u5361\u7247\u6807\u9898\u540E\u7F00"}},error:{title:{code:"",text:"\u64CD\u4F5C\u672A\u5B8C\u6210",comment:"\u9519\u8BEF\u5361\u7247\u901A\u7528\u4E3B\u6807\u9898"},label_code:{code:"",text:"\u9519\u8BEF\u4EE3\u7801",comment:"\u9519\u8BEF\u5361\u7247\u5B57\u6BB5\u6807\u7B7E"},label_detail:{code:"",text:"\u9519\u8BEF\u8BE6\u60C5",comment:"\u9519\u8BEF\u5361\u7247\u5B57\u6BB5\u6807\u7B7E"},label_hint:{code:"",text:"\u89E3\u51B3\u5EFA\u8BAE",comment:"\u9519\u8BEF\u5361\u7247\u5B57\u6BB5\u6807\u7B7E"},label_log_path:{code:"",text:"\u8BE6\u7EC6\u65E5\u5FD7",comment:"\u9519\u8BEF\u5361\u7247\u5B57\u6BB5\u6807\u7B7E"},footer:{code:"",text:"\u5982\u9700\u8FDB\u4E00\u6B65\u5E2E\u52A9\uFF0C\u8BF7\u8054\u7CFB\u8FD0\u7EF4\u6216\u67E5\u770B\u4E0A\u65B9\u65E5\u5FD7\u6587\u4EF6\u3002",comment:"\u9519\u8BEF\u5361\u7247\u5E95\u90E8\u6CE8\u91CA"},default_message:{code:"",text:"\u672A\u77E5\u9519\u8BEF",comment:"\u7F3A\u7701\u9519\u8BEF\u6587\u6848"}},error_codes:{"1001":{code:"1001",text:"\u8F93\u5165\u53C2\u6570\u65E0\u6548\uFF0C\u8BF7\u68C0\u67E5\u547D\u4EE4\u53C2\u6570\u3002",comment:"\u547D\u4EE4\u884C\u53C2\u6570\u4E0D\u7B26\u5408\u89C4\u8303"},"1001_missing_dist":{code:"1001",text:"\u8BF7\u5148\u5728\u5DE5\u7A0B\u76EE\u5F55\u8FD0\u884C npm run build \u751F\u6210 dist/index.html\u3002",comment:"\u53D1\u5E03\u6E38\u620F\u7F3A\u5C11 dist/ \u4EA7\u7269\u65F6\u7684\u89E3\u51B3\u5EFA\u8BAE"},"1003_checksum":{code:"1003",text:"\u6A21\u677F\u5305\u6821\u9A8C\u4E0D\u5339\u914D\uFF0C\u53EF\u80FD\u662F\u4E91\u7AEF\u6587\u4EF6\u5F02\u5E38\u6216\u7F51\u7EDC\u4E0B\u8F7D\u53D7\u635F\uFF0C\u8BF7\u91CD\u8BD5\u6216\u8054\u7CFB\u6A21\u677F\u7EF4\u62A4\u8005\u91CD\u65B0\u53D1\u7248\u3002",comment:"\u6A21\u677F\u5B89\u88C5\u5305\u54C8\u5E0C\u6821\u9A8C\u5931\u8D25\u65F6\u7684\u89E3\u51B3\u5EFA\u8BAE"},"1002":{code:"1002",text:"\u6587\u4EF6\u8BFB\u53D6\u6216\u5199\u5165\u5931\u8D25\uFF0C\u8BF7\u68C0\u67E5\u6587\u4EF6\u6216\u76EE\u5F55\u6743\u9650\u3002",comment:"\u672C\u5730\u78C1\u76D8\u8BFB\u5199\u5F02\u5E38"},"2001":{code:"2001",text:"\u8BF7\u5148\u8FD0\u884C npx cgmaker login \u5B8C\u6210\u8D26\u53F7\u6388\u6743\u3002",comment:"\u5C1A\u672A\u767B\u5F55\u6216\u767B\u5F55\u6001\u5DF2\u88AB\u670D\u52A1\u7AEF\u540A\u9500"},"2002":{code:"2002",text:"\u767B\u5F55\u6388\u6743\u6D41\u7A0B\u5931\u8D25\uFF0C\u8BF7\u91CD\u8BD5\u3002",comment:"OAuth \u767B\u5F55\u672A\u6210\u529F\u5B8C\u6210"},"2003":{code:"2003",text:"\u767B\u5F55\u51ED\u8BC1\u5DF2\u8FC7\u671F\uFF0C\u8BF7\u91CD\u65B0\u767B\u5F55\u3002",comment:"\u7528\u6237 refresh_token \u8D85\u8FC7\u6709\u6548\u671F"},"2004":{code:"2004",text:"\u6388\u6743\u8F6E\u8BE2\u8D85\u65F6\uFF0C\u8BF7\u91CD\u65B0\u53D1\u8D77\u767B\u5F55\u3002",comment:"\u6253\u5F00\u6D4F\u89C8\u5668\u8D85\u8FC7 5 \u5206\u949F\u672A\u5B8C\u6210\u767B\u5F55"},"8000":{code:"8000",text:"\u5E73\u53F0\u670D\u52A1\u7EF4\u62A4\u4E2D\uFF0C\u8BF7\u7A0D\u540E\u91CD\u8BD5\u3002",comment:"\u670D\u52A1\u7AEF\u7EF4\u62A4\u505C\u673A"},"8001":{code:"8001",text:"\u8BF7\u6C42\u7F3A\u5C11\u5FC5\u8981\u53C2\u6570\uFF0C\u8BF7\u68C0\u67E5\u8F93\u5165\u3002",comment:"\u670D\u52A1\u7AEF\u7F3A\u5C11\u5FC5\u4F20\u5B57\u6BB5"},"8002":{code:"8002",text:"\u8BF7\u6C42\u53C2\u6570\u4E0D\u5408\u6CD5\uFF0C\u8BF7\u68C0\u67E5\u4F20\u5165\u7684\u503C\u3002",comment:"\u670D\u52A1\u7AEF\u53C2\u6570\u6821\u9A8C\u672A\u901A\u8FC7"},"8004":{code:"8004",text:"\u5F53\u524D\u64CD\u4F5C\u9700\u8981\u5BF9\u5E94\u4F5C\u8005\u6216\u7B7E\u7EA6\u89D2\u8272\u6743\u9650\uFF0C\u8BF7\u786E\u8BA4\u8D26\u53F7\u6743\u9650\u540E\u91CD\u8BD5\u3002",comment:"\u8D26\u53F7\u89D2\u8272\u6743\u9650\u4E0D\u8DB3\uFF08\u5982\u672A\u7B7E\u7EA6\uFF09"},"8005":{code:"8005",text:"\u5E73\u53F0\u670D\u52A1\u51FA\u73B0\u5185\u90E8\u9519\u8BEF\uFF0C\u8BF7\u7A0D\u540E\u91CD\u8BD5\u3002",comment:"\u670D\u52A1\u7AEF\u7CFB\u7EDF\u5185\u90E8\u5F02\u5E38"},"8006":{code:"8006",text:"\u4F1A\u8BDD\u521B\u5EFA\u5931\u8D25\uFF0C\u8BF7\u5C1D\u8BD5\u91CD\u65B0\u767B\u5F55\u3002",comment:"\u6362\u53D6 session \u5931\u8D25"},"8007":{code:"8007",text:"\u767B\u5F55\u4F1A\u8BDD\u5DF2\u5931\u6548\uFF0C\u8BF7\u91CD\u65B0\u767B\u5F55\u3002",comment:"\u5F53\u524D session \u65E0\u6548"},"8400":{code:"8400",text:"\u670D\u52A1\u5668\u6846\u67B6\u9519\u8BEF\uFF0C\u8BF7\u7A0D\u540E\u91CD\u8BD5\u3002",comment:"\u7F51\u5173\u6216\u5E95\u5C42\u6846\u67B6\u9519\u8BEF"},"8999":{code:"8999",text:"\u670D\u52A1\u5668\u8FD4\u56DE\u672A\u77E5\u4E1A\u52A1\u9519\u8BEF\u3002",comment:"\u672A\u5F52\u7C7B\u7684\u4E1A\u52A1\u9519\u8BEF"},"9000":{code:"9000",text:"\u7F51\u7EDC\u65E0\u6CD5\u8FDE\u63A5\uFF0C\u8BF7\u68C0\u67E5\u7F51\u7EDC\u8BBE\u7F6E\u6216\u4EE3\u7406\u3002",comment:"\u672C\u5730\u65E0\u6CD5\u8FDE\u901A\u670D\u52A1\u5668"},"9001":{code:"9001",text:"\u7F51\u7EDC\u8BF7\u6C42\u8D85\u65F6\uFF0C\u8BF7\u68C0\u67E5\u7F51\u7EDC\u72B6\u51B5\u540E\u91CD\u8BD5\u3002",comment:"\u7F51\u7EDC\u8FDE\u63A5\u6216\u8BFB\u53D6\u8D85\u65F6"},"9002":{code:"9002",text:"\u670D\u52A1\u5668\u54CD\u5E94\u975E\u6B63\u5E38 HTTP \u72B6\u6001\uFF0C\u8BF7\u7A0D\u540E\u91CD\u8BD5\u3002",comment:"HTTP 4xx/5xx \u72B6\u6001\u54CD\u5E94"},"9003":{code:"9003",text:"\u76EE\u6807\u8D44\u6E90\u4E0D\u5B58\u5728\u6216\u670D\u52A1\u5668\u54CD\u5E94\u683C\u5F0F\u65E0\u6CD5\u89E3\u6790\u3002",comment:"\u67E5\u8BE2\u4E0D\u5230\u5BF9\u5E94\u8D44\u6E90\u6216\u54CD\u5E94\u4E0D\u662F\u5408\u6CD5 JSON"},"9999":{code:"9999",text:"\u670D\u52A1\u5668\u8FD4\u56DE\u5185\u5BB9\u4E3A\u7A7A\uFF0C\u8BF7\u7A0D\u540E\u91CD\u8BD5\u3002",comment:"\u4E0A\u6E38\u672A\u8FD4\u56DE\u6709\u6548\u6570\u636E"}},skill:{card_title:{code:"",text:"\u5DF2\u540C\u6B65 Agent skill",comment:"cgmaker skill \u6210\u529F\u5361\u7247\u6807\u9898"},label_kit:{code:"",text:"\u6E90",comment:"kit \u8DEF\u5F84"},label_copied:{code:"",text:"\u62F7\u8D1D",comment:"\u5DF2\u62F7\u8D1D\u7684 skill \u540D"},label_targets:{code:"",text:"\u76EE\u5F55",comment:"\u6247\u51FA\u76EE\u6807\u76F8\u5BF9\u8DEF\u5F84"}},common:{success_default:{code:"",text:"\u64CD\u4F5C\u6267\u884C\u6210\u529F\u3002",comment:"\u547D\u4EE4\u6267\u884C\u6210\u529F\u9ED8\u8BA4\u8BF4\u660E"},page_info_pattern:{code:"",text:"\u7B2C {page} \u9875\uFF0C\u672C\u9875 {count} \u6761\uFF0C\u5171 {total} \u6761",comment:"\u5217\u8868\u5E95\u90E8\u5206\u9875\u8BF4\u660E\u6A21\u677F"},login_required_confirm:{code:"2001",text:"\u5F53\u524D\u672A\u767B\u5F55\u5E73\u53F0\uFF0C\u662F\u5426\u73B0\u5728\u6253\u5F00\u6D4F\u89C8\u5668\u5B8C\u6210\u6388\u6743\uFF1F",comment:"\u4EFB\u610F\u547D\u4EE4\u9047\u5230\u672A\u767B\u5F55\u65F6\u7684\u786E\u8BA4\u63D0\u95EE"},login_cancelled:{code:"2001",text:"\u5DF2\u53D6\u6D88\u767B\u5F55\uFF0C\u65E0\u6CD5\u7EE7\u7EED\u5F53\u524D\u64CD\u4F5C\u3002",comment:"\u7528\u6237\u62D2\u7EDD\u767B\u5F55\u5F15\u5BFC\u540E\u7684\u63D0\u793A"},login_retrying:{code:"",text:"\u767B\u5F55\u6210\u529F\uFF0C\u6B63\u5728\u7EE7\u7EED\u521A\u624D\u7684\u64CD\u4F5C\u2026",comment:"\u767B\u5F55\u5B8C\u6210\u540E\u81EA\u52A8\u91CD\u8BD5\u539F\u547D\u4EE4"},login_failed:{code:"2002",text:"\u767B\u5F55\u672A\u5B8C\u6210\uFF0C\u65E0\u6CD5\u7EE7\u7EED\u5F53\u524D\u64CD\u4F5C\u3002",comment:"\u5F15\u5BFC\u767B\u5F55\u5931\u8D25\u540E\u7684\u63D0\u793A"}}};var y={_comment:"kit \u7528\u6237\u53EF\u89C1\u6587\u6848\uFF08\u5E2E\u52A9\u3001\u4EA4\u4E92\u3001\u6821\u9A8C\u3001\u901A\u7528\u6807\u7B7E\uFF09\u3002\u5360\u4F4D\u7B26 {name}\u3002\u4E0E cli-messages.json \u4E00\u5E76\u52A0\u8F7D\u3002",help:{tagline:{code:"",text:"\u6A59\u5149\u9759\u6001\u6E38\u620F\u5E73\u53F0\u5DE5\u5177",comment:"cgmaker --help \u6807\u9898\u526F\u6587\u6848"},usage_heading:{code:"",text:"\u7528\u6CD5:",comment:"\u5E2E\u52A9\u5206\u6BB5"},usage_line:{code:"",text:"cgmaker <command> [options]",comment:"\u7528\u6CD5\u793A\u4F8B"},section_publish:{code:"",text:"\u53D1\u5E03\u4E0E\u9274\u6743:",comment:"\u5E2E\u52A9\u5206\u6BB5"},section_shelf:{code:"",text:"\u8D27\u67B6\u7BA1\u7406:",comment:"\u5E2E\u52A9\u5206\u6BB5"},section_check:{code:"",text:"\u89C4\u8303\u6821\u9A8C:",comment:"\u5E2E\u52A9\u5206\u6BB5"},section_global:{code:"",text:"\u5168\u5C40\u9009\u9879:",comment:"\u5E2E\u52A9\u5206\u6BB5"},cmd_publish:{code:"",text:"\u53D1\u5E03\u6E38\u620F\u6B63\u5F0F\u7248\uFF1A\u4E0A\u4F20 dist/",comment:"publish"},cmd_publish_demo:{code:"",text:"\u8BD5\u73A9\uFF1A\u53EF\u65E0\u6B63\u5F0F\u7248\u9996\u53D1\uFF1B\u540E\u8865\u6B63\u5F0F\u7248\u4F1A\u81EA\u52A8\u6302\u63A5",comment:"publish --demo"},cmd_publish_template:{code:"",text:"\u53D1\u5E03\u6A21\u677F\uFF08\u4EE3\u7801\u7248\u672C\uFF09\uFF1B\u4E0A\u4F20\u8D44\u6E90\u65F6\u987B --data-ver\uFF0C\u53EF\u7528 --assets",comment:"publish-template"},cmd_publish_template_data:{code:"",text:"\u53EA\u53D1\u8D44\u6E90\u5305\uFF0C\u987B --data-ver\uFF1B\u53EF\u7528 --assets \u6307\u5B9A\u7EDD\u5BF9\u8DEF\u5F84",comment:"publish-template-data"},cmd_publish_project:{code:"",text:"\u53D1\u5E03\u5F00\u6E90\u5DE5\u7A0B",comment:"publish-project"},cmd_login:{code:"",text:"\u767B\u5F55\uFF08\u5DF2\u6709\u6709\u6548\u767B\u5F55\u5219\u8DF3\u8FC7\uFF1B--force \u5F3A\u5236\u91CD\u65B0\u6388\u6743\uFF09",comment:"login"},cmd_logout:{code:"",text:"\u9000\u51FA\u767B\u5F55\uFF0C\u6E05\u9664\u672C\u5730\u51ED\u8BC1",comment:"logout"},cmd_whoami:{code:"",text:"\u67E5\u770B\u5F53\u524D\u767B\u5F55\u72B6\u6001\u4E0E\u8D26\u53F7\u4FE1\u606F",comment:"whoami"},cmd_games:{code:"",text:"\u67E5\u770B\u6E38\u620F\u5217\u8868\uFF1B\u6216 --query / --versions",comment:"games"},cmd_games_create:{code:"",text:"\u521B\u5EFA\u6E38\u620F\u8D27\u67B6",comment:"games create"},cmd_games_update:{code:"",text:"\u4FEE\u6539\u6E38\u620F\u4FE1\u606F",comment:"games update"},cmd_templates:{code:"",text:"\u67E5\u770B\u6A21\u677F\u5217\u8868\uFF1B\u6216 --query / --versions / --data",comment:"templates"},cmd_templates_create:{code:"",text:"\u521B\u5EFA\u6A21\u677F\u8D27\u67B6",comment:"templates create"},cmd_templates_update:{code:"",text:"\u4FEE\u6539\u6A21\u677F\u540D\u79F0",comment:"templates update"},cmd_projects:{code:"",text:"\u67E5\u770B\u5F00\u6E90\u5DE5\u7A0B\u5217\u8868\uFF1B\u6216 --query / --versions",comment:"projects"},cmd_projects_create:{code:"",text:"\u521B\u5EFA\u5F00\u6E90\u5DE5\u7A0B\u8D27\u67B6",comment:"projects create"},cmd_projects_update:{code:"",text:"\u4FEE\u6539\u5F00\u6E90\u5DE5\u7A0B\u8D27\u67B6",comment:"projects update"},cmd_validate_template:{code:"",text:"\u9A8C\u8BC1\u5F53\u524D\u5DE5\u7A0B\u662F\u5426\u7B26\u5408\u6A21\u677F\u89C4\u8303",comment:"validate-template"},cmd_validate:{code:"",text:"\u53EF\u9009\uFF1A\u8DD1\u6A21\u677F\u6570\u636E\u6821\u9A8C\uFF08schema/logic.mjs\uFF09",comment:"validate"},cmd_skill:{code:"",text:"\u6247\u51FA Agent skill\uFF1A--platform cursor \u6216 --all",comment:"skill"},opt_json:{code:"",text:"\u4EE5\u673A\u5668 JSON \u4FE1\u5C01\u8F93\u51FA",comment:"--json"},opt_verbose:{code:"",text:"\u8F93\u51FA\u8C03\u8BD5\u65E5\u5FD7",comment:"--verbose"},opt_no_interactive:{code:"",text:"\u7981\u7528\u4EA4\u4E92\u5F0F\u5F15\u5BFC\uFF0C\u7F3A\u53C2\u65F6\u76F4\u63A5\u62A5\u9519",comment:"--no-interactive"},opt_help:{code:"",text:"\u67E5\u770B\u5E2E\u52A9",comment:"--help"}},prompt:{cancel:{code:"",text:"\u5DF2\u53D6\u6D88\u64CD\u4F5C\u3002",comment:"Ctrl+C \u53D6\u6D88\u4EA4\u4E92"},intro:{code:"",text:"\u6A59\u5149 cgmaker \u5E73\u53F0\u5DE5\u5177",comment:"\u4E3B\u83DC\u5355\u6807\u9898"},main_message:{code:"",text:"\u8BF7\u9009\u62E9\u8981\u6267\u884C\u7684\u64CD\u4F5C\uFF1A",comment:"\u4E3B\u83DC\u5355\u63D0\u95EE"},main_publish_label:{code:"",text:"\u53D1\u5E03\u6E38\u620F (publish)",comment:"\u4E3B\u83DC\u5355"},main_publish_hint:{code:"",text:"\u4E0A\u4F20 dist/ \u5230\u5E73\u53F0",comment:"\u4E3B\u83DC\u5355"},main_publish_template_label:{code:"",text:"\u53D1\u5E03\u6A21\u677F (publish-template)",comment:"\u4E3B\u83DC\u5355"},main_publish_template_hint:{code:"",text:"\u4E0A\u4F20\u6A21\u677F\u4EE3\u7801\u7248\u672C",comment:"\u4E3B\u83DC\u5355"},main_publish_template_data_label:{code:"",text:"\u53EA\u53D1\u6A21\u677F\u8D44\u6E90\u5305 (publish-template-data)",comment:"\u4E3B\u83DC\u5355"},main_publish_template_data_hint:{code:"",text:"\u4E0D\u53D1\u65B0\u4EE3\u7801\u7248\u672C\uFF1B\u6E38\u620F\u4F5C\u8005\u7528 --data-id \u4E0B\u8F7D",comment:"\u4E3B\u83DC\u5355"},main_publish_project_label:{code:"",text:"\u53D1\u5E03\u5F00\u6E90\u5DE5\u7A0B (publish-project)",comment:"\u4E3B\u83DC\u5355"},main_publish_project_hint:{code:"",text:"\u6253\u5305\u4E0A\u4F20\u6E90\u7801\u5DE5\u7A0B",comment:"\u4E3B\u83DC\u5355"},main_games_label:{code:"",text:"\u6E38\u620F\u8D27\u67B6\u7BA1\u7406 (games)",comment:"\u4E3B\u83DC\u5355"},main_games_hint:{code:"",text:"\u5217\u8868\u3001\u67E5\u770B\u8BE6\u60C5\u3001\u521B\u5EFA\u6216\u6539\u540D",comment:"\u4E3B\u83DC\u5355"},main_templates_label:{code:"",text:"\u6A21\u677F\u8D27\u67B6\u7BA1\u7406 (templates)",comment:"\u4E3B\u83DC\u5355"},main_templates_hint:{code:"",text:"\u5217\u8868\u3001\u67E5\u770B\u8BE6\u60C5\u3001\u521B\u5EFA\u6216\u6539\u540D",comment:"\u4E3B\u83DC\u5355"},main_projects_label:{code:"",text:"\u5F00\u6E90\u5DE5\u7A0B\u7BA1\u7406 (projects)",comment:"\u4E3B\u83DC\u5355"},main_projects_hint:{code:"",text:"\u5217\u8868\u3001\u67E5\u770B\u8BE6\u60C5\u3001\u521B\u5EFA\u6216\u6539\u540D",comment:"\u4E3B\u83DC\u5355"},main_login_label:{code:"",text:"\u8D26\u53F7\u767B\u5F55 (login)",comment:"\u4E3B\u83DC\u5355"},main_login_hint:{code:"",text:"\u5DF2\u767B\u5F55\u5219\u8DF3\u8FC7\uFF1B--force \u5F3A\u5236\u91CD\u767B",comment:"\u4E3B\u83DC\u5355"},main_whoami_label:{code:"",text:"\u67E5\u770B\u5F53\u524D\u8D26\u53F7 (whoami)",comment:"\u4E3B\u83DC\u5355"},main_whoami_hint:{code:"",text:"\u68C0\u67E5\u5F53\u524D\u767B\u5F55\u72B6\u6001",comment:"\u4E3B\u83DC\u5355"},main_validate_template_label:{code:"",text:"\u6821\u9A8C\u6A21\u677F\u89C4\u8303 (validate-template)",comment:"\u4E3B\u83DC\u5355"},main_validate_template_hint:{code:"",text:"\u68C0\u67E5\u672C\u5730\u76EE\u5F55\u4E0E\u6587\u4EF6",comment:"\u4E3B\u83DC\u5355"},main_skill_label:{code:"",text:"\u6247\u51FA Agent skill (skill)",comment:"\u4E3B\u83DC\u5355"},main_skill_hint:{code:"",text:"--platform cursor \u6216 --all",comment:"\u4E3B\u83DC\u5355"},main_logout_label:{code:"",text:"\u9000\u51FA\u767B\u5F55 (logout)",comment:"\u4E3B\u83DC\u5355"},main_logout_hint:{code:"",text:"\u6E05\u9664\u672C\u5730\u51ED\u636E",comment:"\u4E3B\u83DC\u5355"},version_empty:{code:"",text:"\u7248\u672C\u53F7\u4E0D\u80FD\u4E3A\u7A7A",comment:"\u6821\u9A8C"},version_invalid:{code:"",text:"\u987B 1\u201316 \u4F4D\uFF0C\u4EC5\u5C0F\u5199\u5B57\u6BCD\u3001\u6570\u5B57\u3001`.` \u548C `-`\uFF1B\u5FC5\u987B\u4EE5\u5B57\u6BCD\u6216\u6570\u5B57\u5F00\u5934\u548C\u7ED3\u5C3E\uFF0C\u4E14\u4E0D\u80FD\u8FDE\u7EED\u4F7F\u7528\u7B26\u53F7\u3002\u793A\u4F8B\uFF1A1.0.0",comment:"publish-template \u6821\u9A8C"},version_invalid_log:{code:"",text:"\u6A21\u677F\u7248\u672C\u53F7\u683C\u5F0F\u65E0\u6548\uFF08{version}\uFF09",comment:"publish-template \u6821\u9A8C"},version_invalid_hint:{code:"",text:"\u987B 1\u201316 \u4F4D\uFF0C\u4EC5\u5C0F\u5199\u5B57\u6BCD\u3001\u6570\u5B57\u3001\u82F1\u6587\u70B9 . \u548C\u77ED\u6A2A\u7EBF -\uFF1B\u5FC5\u987B\u4EE5\u5B57\u6BCD\u6216\u6570\u5B57\u5F00\u5934\u548C\u7ED3\u5C3E\uFF1B\u4E0D\u80FD\u51FA\u73B0\u8FDE\u7EED\u7684 . \u6216 -\u3002\u793A\u4F8B\uFF1A1.0.0\u30010.1.0\u30011.0.0-a",comment:"publish-template \u6821\u9A8C"},publish_version:{code:"",text:"\u8BF7\u8F93\u5165\u53D1\u5E03\u7248\u672C\u53F7\uFF1A",comment:"publish"},publish_name:{code:"",text:"\u8BF7\u8F93\u5165\u6E38\u620F\u5C55\u793A\u540D\u79F0\uFF1A",comment:"publish"},publish_variant:{code:"",text:"\u8BF7\u9009\u62E9\u6E38\u620F\u53D1\u5E03\u7C7B\u578B\uFF1A",comment:"publish"},publish_official_label:{code:"",text:"\u6B63\u5F0F\u7248",comment:"publish"},publish_official_hint:{code:"",text:"\u9762\u5411\u73A9\u5BB6\u7684\u4E3B\u7248\u672C",comment:"publish"},publish_demo_label:{code:"",text:"\u8BD5\u73A9\u7248 (--demo)",comment:"publish"},publish_demo_hint:{code:"",text:"\u72EC\u7ACB\u7684\u8BD5\u73A9\u53D8\u4F53",comment:"publish"},publish_parent:{code:"",text:"\u8BF7\u8F93\u5165\u5173\u8054\u7684\u6B63\u5F0F\u7248\u6E38\u620F ID\uFF08\u53EF\u9009\uFF0C\u56DE\u8F66\u8DF3\u8FC7\u5373\u9996\u53D1\u8BD5\u73A9\uFF09\uFF1A",comment:"publish"},publish_parent_placeholder:{code:"",text:"\u7559\u7A7A\u5219\u5148\u53D1\u8BD5\u73A9",comment:"publish"},publish_changelog:{code:"",text:"\u8BF7\u8F93\u5165\u7248\u672C\u66F4\u65B0\u8BF4\u660E (changelog\uFF0C\u53EF\u9009\u76F4\u63A5\u56DE\u8F66)\uFF1A",comment:"publish"},publish_changelog_placeholder:{code:"",text:"\u4FEE\u590D\u4E86\u4E00\u4E9B\u5DF2\u77E5\u95EE\u9898",comment:"publish"},tpl_version:{code:"",text:"\u8BF7\u8F93\u5165\u6A21\u677F\u7248\u672C\u53F7\uFF1A",comment:"publish-template"},tpl_name:{code:"",text:"\u8BF7\u8F93\u5165\u6A21\u677F\u5C55\u793A\u540D\u79F0\uFF1A",comment:"publish-template"},tpl_mode:{code:"",text:"\u672C\u5730\u5C1A\u65E0 origin.json \u8EAB\u4EFD\uFF0C\u8BF7\u9009\u62E9\u53D1\u5E03\u65B9\u5F0F\uFF1A",comment:"publish-template"},tpl_init_label:{code:"",text:"\u9996\u6B21\u521B\u5EFA\u65B0\u6A21\u677F (--init)",comment:"publish-template"},tpl_init_hint:{code:"",text:"\u5728\u5E73\u53F0\u65B0\u5EFA\u6A21\u677F\u5E76\u4E0A\u4F20\u4EE3\u7801",comment:"publish-template"},tpl_fork_label:{code:"",text:"Fork \u73B0\u6709\u6A21\u677F (--fork)",comment:"publish-template"},tpl_fork_hint:{code:"",text:"\u57FA\u4E8E\u6E90\u6A21\u677F\u7248\u672C\u884D\u751F",comment:"publish-template"},tpl_fork_id:{code:"",text:"\u8BF7\u8F93\u5165 Fork \u6E90\u6A21\u677F\u7248\u672C ID\uFF1A",comment:"publish-template"},tpl_fork_placeholder:{code:"",text:"\u4F8B\u5982 4p7dlg00utc0",comment:"publish-template"},tpl_fork_empty:{code:"",text:"Fork \u5FC5\u987B\u63D0\u4F9B\u6E90\u7248\u672C ID",comment:"publish-template"},data_ver_reuse:{code:"",text:"\u8D44\u6E90\u5305\u7248\u672C\u53F7\u6CBF\u7528\u4E0A\u6B21\u7684 {ver}\uFF1F",comment:"data-ver"},data_ver_new:{code:"",text:"\u8BF7\u8F93\u5165\u65B0\u7684\u8D44\u6E90\u5305\u7248\u672C\u53F7 (--data-ver)\uFF1A",comment:"data-ver"},data_ver_ask:{code:"",text:"\u8BF7\u8F93\u5165\u8D44\u6E90\u5305\u7248\u672C\u53F7 (--data-ver)\uFF1A",comment:"data-ver"},data_ver_placeholder_last:{code:"",text:"\u4E0A\u6B21 {ver}",comment:"data-ver"},data_ver_placeholder:{code:"",text:"\u4F8B\u5982 1",comment:"data-ver"},data_ver_empty:{code:"",text:"\u8D44\u6E90\u5305\u7248\u672C\u53F7\u4E0D\u80FD\u4E3A\u7A7A\uFF0C\u7A0B\u5E8F\u4E0D\u4F1A\u81EA\u52A8\u9012\u589E",comment:"data-ver"},data_summary:{code:"",text:"\u8BF7\u8F93\u5165\u8D44\u6E90\u5305\u8BF4\u660E (--data-summary\uFF0C\u53EF\u9009\uFF0C\u56DE\u8F66\u8DF3\u8FC7)\uFF1A",comment:"data-summary"},data_summary_placeholder:{code:"",text:"\u540C\u4E00 data_ver \u4E0B\u7528\u6765\u533A\u5206\u672C\u5305",comment:"data-summary"},data_assets:{code:"",text:"\u8D44\u6E90\u76EE\u5F55\uFF08\u56DE\u8F66\u7528\u5F53\u524D\u5DE5\u7A0B assets/\uFF1B\u81EA\u5B9A\u4E49\u987B\u586B\u7EDD\u5BF9\u8DEF\u5F84\uFF09\uFF1A",comment:"publish-template / publish-template-data --assets"},data_assets_placeholder:{code:"",text:"\u7EDD\u5BF9\u8DEF\u5F84\uFF0C\u4F8B\u5982 C:\\path\\to\\assets",comment:"publish-template / publish-template-data --assets"},data_assets_not_absolute:{code:"",text:"--assets \u5FC5\u987B\u662F\u7EDD\u5BF9\u8DEF\u5F84",comment:"publish-template / publish-template-data --assets"},data_assets_not_dir:{code:"",text:"\u8BE5\u8DEF\u5F84\u4E0D\u662F\u6709\u6548\u76EE\u5F55",comment:"publish-template / publish-template-data --assets"},proj_version:{code:"",text:"\u8BF7\u8F93\u5165\u5F00\u6E90\u5DE5\u7A0B\u7248\u672C\u53F7\uFF1A",comment:"publish-project"},proj_name:{code:"",text:"\u8BF7\u8F93\u5165\u5DE5\u7A0B\u5C55\u793A\u540D\u79F0\uFF1A",comment:"publish-project"},proj_summary:{code:"",text:"\u8BF7\u8F93\u5165\u5DE5\u7A0B\u7B80\u4ECB (\u53EF\u9009)\uFF1A",comment:"publish-project"},proj_summary_placeholder:{code:"",text:"\u57FA\u4E8E\u6A59\u5149\u5F00\u53D1\u7684\u6E38\u620F/\u6A21\u677F\u5DE5\u7A0B",comment:"publish-project"},proj_cover:{code:"",text:"\u8BF7\u8F93\u5165\u5C01\u9762\u56FE\u8DEF\u5F84 (\u53EF\u9009\uFF0C\u76F4\u63A5\u56DE\u8F66\u8DF3\u8FC7)\uFF1A",comment:"publish-project"},id_empty:{code:"",text:"ID \u4E0D\u80FD\u4E3A\u7A7A",comment:"\u6821\u9A8C"},name_empty:{code:"",text:"\u540D\u79F0\u4E0D\u80FD\u4E3A\u7A7A",comment:"\u6821\u9A8C"},games_action:{code:"",text:"\u8BF7\u9009\u62E9\u6E38\u620F\u8D27\u67B6\u64CD\u4F5C\uFF1A",comment:"games"},games_list_label:{code:"",text:"\u5217\u51FA\u6211\u7684\u6E38\u620F\u5217\u8868",comment:"games"},games_list_hint:{code:"",text:"\u6309\u9875\u62C9\u53D6\u5E73\u53F0\u6E38\u620F",comment:"games"},games_query_label:{code:"",text:"\u67E5\u8BE2\u6307\u5B9A\u6E38\u620F\u8BE6\u60C5 (--query)",comment:"games"},games_query_hint:{code:"",text:"\u6309 game_id \u67E5\u770B",comment:"games"},games_versions_label:{code:"",text:"\u67E5\u770B\u6E38\u620F\u5168\u90E8\u53D1\u5E03\u7248\u672C (--versions)",comment:"games"},games_versions_hint:{code:"",text:"\u67E5\u8BE2\u7248\u672C\u6D41\u6C34",comment:"games"},games_create_label:{code:"",text:"\u53EA\u5EFA\u6E38\u620F\u8D27\u67B6 (create)",comment:"games"},games_create_hint:{code:"",text:"\u5148\u5EFA\u8D27\u67B6\uFF0C\u540E\u7EED\u53D1\u7248",comment:"games"},games_update_label:{code:"",text:"\u4FEE\u6539\u6E38\u620F\u4FE1\u606F (update)",comment:"games"},games_update_hint:{code:"",text:"\u4FEE\u6539\u540D\u79F0\u6216\u7B80\u4ECB",comment:"games"},games_id:{code:"",text:"\u8BF7\u8F93\u5165\u6E38\u620F ID\uFF1A",comment:"games"},games_name:{code:"",text:"\u8BF7\u8F93\u5165\u6E38\u620F\u540D\u79F0\uFF1A",comment:"games"},games_name_placeholder:{code:"",text:"\u6211\u7684\u6E38\u620F",comment:"games"},games_summary:{code:"",text:"\u8BF7\u8F93\u5165\u6E38\u620F\u7B80\u4ECB (\u53EF\u9009)\uFF1A",comment:"games"},games_update_id:{code:"",text:"\u8BF7\u8F93\u5165\u9700\u8981\u4FEE\u6539\u7684\u6E38\u620F ID (--game-id)\uFF1A",comment:"games"},games_update_name:{code:"",text:"\u8BF7\u8F93\u5165\u8981\u66F4\u65B0\u7684\u6E38\u620F\u540D\u79F0 (\u56DE\u8F66\u8DF3\u8FC7)\uFF1A",comment:"games"},games_update_summary:{code:"",text:"\u8BF7\u8F93\u5165\u8981\u66F4\u65B0\u7684\u6E38\u620F\u7B80\u4ECB (\u56DE\u8F66\u8DF3\u8FC7)\uFF1A",comment:"games"},tpls_action:{code:"",text:"\u8BF7\u9009\u62E9\u6A21\u677F\u8D27\u67B6\u64CD\u4F5C\uFF1A",comment:"templates"},tpls_list_label:{code:"",text:"\u5217\u51FA\u6211\u7684\u6A21\u677F\u5217\u8868",comment:"templates"},tpls_list_hint:{code:"",text:"\u6309\u9875\u67E5\u770B\u5E73\u53F0\u6A21\u677F",comment:"templates"},tpls_query_label:{code:"",text:"\u67E5\u8BE2\u6A21\u677F\u8BE6\u60C5 (--query)",comment:"templates"},tpls_query_hint:{code:"",text:"\u6309 template_id \u67E5\u770B",comment:"templates"},tpls_versions_label:{code:"",text:"\u67E5\u770B\u6A21\u677F\u7248\u672C\u5217\u8868 (--versions)",comment:"templates"},tpls_versions_hint:{code:"",text:"\u67E5\u770B\u5DF2\u53D1\u7248\u672C",comment:"templates"},tpls_data_label:{code:"",text:"\u67E5\u770B\u6A21\u677F\u6570\u636E\u5305 (--data)",comment:"templates"},tpls_data_hint:{code:"",text:"\u67E5\u770B\u7ED1\u5B9A\u7684 assets \u5305",comment:"templates"},tpls_create_label:{code:"",text:"\u53EA\u5EFA\u6A21\u677F\u8D27\u67B6 (create)",comment:"templates"},tpls_create_hint:{code:"",text:"\u9884\u5EFA\u8D27\u67B6",comment:"templates"},tpls_update_label:{code:"",text:"\u4FEE\u6539\u6A21\u677F\u540D\u79F0 (update)",comment:"templates"},tpls_update_hint:{code:"",text:"\u4FEE\u6539\u8D27\u67B6\u540D",comment:"templates"},tpls_id:{code:"",text:"\u8BF7\u8F93\u5165\u6A21\u677F ID\uFF1A",comment:"templates"},tpls_name:{code:"",text:"\u8BF7\u8F93\u5165\u6A21\u677F\u540D\u79F0\uFF1A",comment:"templates"},tpls_name_placeholder:{code:"",text:"\u6211\u7684\u6A21\u677F",comment:"templates"},tpls_update_id:{code:"",text:"\u8BF7\u8F93\u5165\u8981\u4FEE\u6539\u7684\u6A21\u677F ID (--template-id)\uFF1A",comment:"templates"},tpls_update_name:{code:"",text:"\u8BF7\u8F93\u5165\u8981\u66F4\u65B0\u7684\u6A21\u677F\u540D\u79F0\uFF1A",comment:"templates"},projs_action:{code:"",text:"\u8BF7\u9009\u62E9\u5F00\u6E90\u5DE5\u7A0B\u8D27\u67B6\u64CD\u4F5C\uFF1A",comment:"projects"},projs_list_label:{code:"",text:"\u5217\u51FA\u5F00\u6E90\u5DE5\u7A0B\u5217\u8868",comment:"projects"},projs_list_hint:{code:"",text:"\u6309\u9875\u67E5\u770B",comment:"projects"},projs_query_label:{code:"",text:"\u67E5\u8BE2\u5F00\u6E90\u5DE5\u7A0B\u8BE6\u60C5 (--query)",comment:"projects"},projs_query_hint:{code:"",text:"\u6309 project_id \u67E5\u770B",comment:"projects"},projs_versions_label:{code:"",text:"\u67E5\u770B\u5DE5\u7A0B\u53D1\u5E03\u7248\u672C (--versions)",comment:"projects"},projs_versions_hint:{code:"",text:"\u67E5\u770B\u7248\u672C\u8BB0\u5F55",comment:"projects"},projs_create_label:{code:"",text:"\u53EA\u5EFA\u5F00\u6E90\u5DE5\u7A0B\u8D27\u67B6 (create)",comment:"projects"},projs_create_hint:{code:"",text:"\u9884\u5EFA\u8D27\u67B6",comment:"projects"},projs_update_label:{code:"",text:"\u4FEE\u6539\u5DE5\u7A0B\u8D27\u67B6 (update)",comment:"projects"},projs_update_hint:{code:"",text:"\u4FEE\u6539\u540D\u79F0/\u7B80\u4ECB/\u5C01\u9762",comment:"projects"},projs_id:{code:"",text:"\u8BF7\u8F93\u5165\u5F00\u6E90\u5DE5\u7A0B ID\uFF1A",comment:"projects"},projs_name:{code:"",text:"\u8BF7\u8F93\u5165\u5F00\u6E90\u5DE5\u7A0B\u540D\u79F0\uFF1A",comment:"projects"},projs_update_id:{code:"",text:"\u8BF7\u8F93\u5165\u8981\u4FEE\u6539\u7684\u5F00\u6E90\u5DE5\u7A0B ID (--project-id)\uFF1A",comment:"projects"},projs_update_name:{code:"",text:"\u8BF7\u8F93\u5165\u8981\u66F4\u65B0\u7684\u5DE5\u7A0B\u540D\u79F0 (\u56DE\u8F66\u8DF3\u8FC7)\uFF1A",comment:"projects"},login_mode:{code:"",text:"\u8BF7\u9009\u62E9\u767B\u5F55\u65B9\u5F0F\uFF1A",comment:"login"},login_skip_label:{code:"",text:"\u5DF2\u6709\u6709\u6548\u767B\u5F55\u5219\u8DF3\u8FC7",comment:"login"},login_skip_hint:{code:"",text:"\u63A8\u8350",comment:"login"},login_force_label:{code:"",text:"\u5F3A\u5236\u91CD\u65B0\u767B\u5F55\u5E76\u6253\u5F00\u6D4F\u89C8\u5668\u6388\u6743 (--force)",comment:"login"},login_force_hint:{code:"",text:"\u6362\u53F7\u6216\u5237\u65B0\u51ED\u8BC1",comment:"login"},skill_platform:{code:"",text:"\u8BF7\u9009\u62E9\u8981\u628A skill \u6247\u51FA\u5230\u54EA\u4E2A Agent \u5E73\u53F0\uFF1A",comment:"skill"},skill_all_label:{code:"",text:"\u5168\u90E8\u5E73\u53F0",comment:"skill"},skill_all_hint:{code:"",text:"--all",comment:"skill"}},kit:{validate_template_ok:{code:"",text:"\u6A21\u677F\u76EE\u5F55\u89C4\u8303\u6821\u9A8C\u901A\u8FC7\uFF01",comment:"validate-template \u6210\u529F"},validate_ok:{code:"",text:"\u6A21\u677F\u6570\u636E\u6821\u9A8C\u901A\u8FC7\uFF01",comment:"validate \u6210\u529F"},bin_missing:{code:"",text:"\u627E\u4E0D\u5230 cgmaker \u539F\u751F\u4E8C\u8FDB\u5236\u3002\u8BF7\u5728 npm/ \u8FD0\u884C make ensure-cli\uFF0C\u6216\u5B89\u88C5 @66rpg/cgmaker-win32-x64\u3002",comment:"\u672A\u627E\u5230\u539F\u751F CLI"},run_failed:{code:"",text:"\u6267\u884C\u5931\u8D25: {e}",comment:"spawn inherit \u5931\u8D25"},cli_failed:{code:"",text:"\u8C03\u7528 CLI \u5931\u8D25: {e}",comment:"spawn json \u5931\u8D25"},op_failed:{code:"",text:"\u64CD\u4F5C\u5931\u8D25",comment:"\u4FE1\u5C01\u65E0 error \u65F6\u7684\u515C\u5E95"},table_empty:{code:"",text:" (\u65E0\u6570\u636E)",comment:"\u7A7A\u8868\u9ED8\u8BA4\u6587\u6848"},validate_ok_line:{code:"",text:"validate-template ok",comment:"validate-template \u539F\u59CB\u6210\u529F\u884C"},validate_data_ok_line:{code:"",text:"validate ok",comment:"validate \u539F\u59CB\u6210\u529F\u884C"},issue_line:{code:"",text:"{code} {path}: {message}",comment:"\u6821\u9A8C\u5931\u8D25\u4E00\u884C"}},fmt:{label_status:{code:"",text:"\u72B6\u6001",comment:"whoami \u5361\u7247"},label_hint:{code:"",text:"\u5EFA\u8BAE",comment:"whoami \u5361\u7247"},label_action:{code:"",text:"\u64CD\u4F5C",comment:"whoami \u5361\u7247"},version_no:{code:"",text:"\u7B2C {n} \u7248",comment:"\u7248\u672C\u5E8F\u53F7"},data_ver:{code:"",text:"\u7B2C {ver} \u7248 (ID: {id})",comment:"\u8D44\u6E90\u5305\u7248\u672C"},post_id:{code:"",text:"Post #{id}",comment:"\u793E\u533A\u5E16"},vip:{code:"",text:"VIP {n}",comment:"\u4F1A\u5458\u7B49\u7EA7"},type_template:{code:"",text:"\u6A21\u677F",comment:"\u8D27\u67B6\u7C7B\u578B"},type_game:{code:"",text:"\u6E38\u620F",comment:"\u8D27\u67B6\u7C7B\u578B"},type_project:{code:"",text:"\u5F00\u6E90\u5DE5\u7A0B",comment:"\u8D27\u67B6\u7C7B\u578B"},shelf_id:{code:"",text:"{type} ID",comment:"\u8D27\u67B6\u5361\u7247"},shelf_name:{code:"",text:"{type}\u540D\u79F0",comment:"\u8D27\u67B6\u5361\u7247"},list_sep:{code:"",text:"\u3001",comment:"\u5217\u8868\u9879\u5206\u9694"}},validate:{forbidden_scripts_dir:{code:"FORBIDDEN_SCRIPTS_DIR",text:"\u6A21\u677F\u6839\u76EE\u5F55\u4E0D\u8981\u653E scripts/ \u6587\u4EF6\u5939\uFF08\u548C npm scripts\u3001skill/scripts \u649E\u8F66\uFF09",comment:"\u89C4\u8303\u95E8\u7981"},forbidden_out_dir:{code:"FORBIDDEN_OUT_DIR",text:"\u4EA7\u7269\u76EE\u5F55\u53EA\u80FD\u53EB dist/\uFF0C\u4E0D\u8981\u7528 {dir}/",comment:"\u89C4\u8303\u95E8\u7981"},forbidden_content_root:{code:"FORBIDDEN_CONTENT_ROOT",text:"\u5185\u5BB9\u653E assets/{dir}/\uFF0C\u4E0D\u8981\u5728\u6839\u76EE\u5F55\u653E {dir}/",comment:"\u89C4\u8303\u95E8\u7981"},forbidden_template_yaml:{code:"FORBIDDEN_TEMPLATE_YAML",text:"\u4E0D\u8981 template.yaml\uFF1Bslug \u5199\u5728 package.json",comment:"\u89C4\u8303\u95E8\u7981"},missing_dir:{code:"MISSING_DIR",text:"\u7F3A\u5C11\u5FC5\u6709\u76EE\u5F55 {dir}/",comment:"\u89C4\u8303\u95E8\u7981"},missing_file:{code:"MISSING_FILE",text:"\u7F3A\u5C11\u5FC5\u6709\u6587\u4EF6 {file}",comment:"\u89C4\u8303\u95E8\u7981"},logic_export:{code:"LOGIC_EXPORT",text:"schema/logic.mjs \u5FC5\u987B default export async function validate(data, rootDir)",comment:"\u89C4\u8303\u95E8\u7981"},invalid_json:{code:"INVALID_JSON",text:"package.json \u4E0D\u662F\u5408\u6CD5 JSON",comment:"\u89C4\u8303\u95E8\u7981"},forbidden_template_id:{code:"FORBIDDEN_TEMPLATE_ID",text:"package.json \u4E0D\u8981\u624B\u5199 template_id\uFF0C\u8EAB\u4EFD\u7531\u5E73\u53F0\u7B7E\u53D1\u7684 origin.json \u4FDD\u5B58",comment:"\u89C4\u8303\u95E8\u7981"},missing_slug:{code:"MISSING_SLUG",text:"package.json \u5FC5\u987B\u6709 slug\uFF08\u5B89\u88C5\u8DEF\u5F84\u540E\u534A\u6BB5\uFF0C\u4E0D\u662F name\uFF09",comment:"\u89C4\u8303\u95E8\u7981"},invalid_slug:{code:"INVALID_SLUG",text:"slug \u987B\u5339\u914D ^[a-z0-9][a-z0-9-]{0,62}$",comment:"\u89C4\u8303\u95E8\u7981"},invalid_version:{code:"INVALID_VERSION",text:"\u6A21\u677F package.json \u7684 version\uFF08\u53D1\u5E03\u65F6\u7684 version_name\uFF09\u683C\u5F0F\u65E0\u6548\uFF1A\u987B 1\u201316 \u4F4D\uFF0C\u4EC5\u5C0F\u5199\u5B57\u6BCD\u3001\u6570\u5B57\u3001`.`\u3001`-`\uFF1B\u5FC5\u987B\u4EE5\u5B57\u6BCD\u6216\u6570\u5B57\u5F00\u5934\u548C\u7ED3\u5C3E\uFF0C\u4E14\u4E0D\u80FD\u6709\u8FDE\u7EED\u7B26\u53F7\u3002\u793A\u4F8B\uFF1A0.1.0\u30011.0.0-a",comment:"\u89C4\u8303\u95E8\u7981"},missing_data_ver:{code:"MISSING_DATA_VER",text:'package.json \u5FC5\u987B\u6709 data_ver\uFF08\u7D20\u6750\u7248\u672C\u53F7\uFF0C\u5982 "1"\uFF09',comment:"\u89C4\u8303\u95E8\u7981"},invalid_data_ver:{code:"INVALID_DATA_VER",text:"data_ver \u5FC5\u987B\u662F\u975E\u7A7A\u5B57\u7B26\u4E32\u6216\u6570\u5B57",comment:"\u89C4\u8303\u95E8\u7981"},forbidden_bin:{code:"FORBIDDEN_BIN",text:"\u6A21\u677F\u5DE5\u7A0B\u4E0D\u8981\u8BBE\u7F6E bin\uFF0C\u907F\u514D\u4F5C\u8005\u8BEF npx \u5230\u6A21\u677F",comment:"\u89C4\u8303\u95E8\u7981"},forbidden_package_manager:{code:"FORBIDDEN_PACKAGE_MANAGER",text:"\u4E0D\u8981\u5199 packageManager\uFF08\u4F5C\u8005\u73AF\u5883\u53EA\u7528 Node \u81EA\u5E26\u7684 npm\uFF09",comment:"\u89C4\u8303\u95E8\u7981"},missing_script:{code:"MISSING_SCRIPT",text:"package.json \u7F3A\u5C11 scripts.{name}",comment:"\u89C4\u8303\u95E8\u7981"},forbidden_script:{code:"FORBIDDEN_SCRIPT",text:"\u4E0D\u8981\u628A\u811A\u672C\u547D\u540D\u4E3A {name}\uFF08\u4F1A\u548C npm {name} \u649E\u8F66\uFF09\u3002\u8BF7\u7528 npx cgmaker {name}",comment:"\u89C4\u8303\u95E8\u7981"},missing_gitignore:{code:"MISSING_GITIGNORE",text:"\u7F3A\u5C11 .gitignore\uFF0C\u4E14\u5FC5\u987B\u5FFD\u7565 dist/ \u4E0E node_modules/",comment:"\u89C4\u8303\u95E8\u7981"},gitignore_dist:{code:"GITIGNORE_DIST",text:".gitignore \u5FC5\u987B\u5FFD\u7565 dist/",comment:"\u89C4\u8303\u95E8\u7981"},gitignore_node_modules:{code:"GITIGNORE_NODE_MODULES",text:".gitignore \u5FC5\u987B\u5FFD\u7565 node_modules/",comment:"\u89C4\u8303\u95E8\u7981"},absolute_asset_path:{code:"ABSOLUTE_ASSET_PATH",text:"{rel} \u5FC5\u987B\u7528\u76F8\u5BF9\u8DEF\u5F84\uFF08Vite \u8BBE base: './'\uFF09\uFF0C\u624D\u80FD\u653E\u5230\u4EFB\u610F\u9759\u6001\u6258\u7BA1\u5B50\u76EE\u5F55",comment:"dist \u68C0\u67E5"},missing_dist:{code:"MISSING_DIST",text:"\u7F3A\u5C11 {entry}\u3002\u8BF7\u5148 npm run build\uFF0C\u4E14 outDir \u5FC5\u987B\u662F dist",comment:"dist \u68C0\u67E5"},missing_game_html:{code:"MISSING_GAME_HTML",text:"dist/ \u81F3\u5C11\u8981\u6709 1 \u4E2A\u6E38\u620F\u9875 index.{lang}.{h|v}.html\uFF08\u5982 index.zh.h.html\uFF09\u3002\u5355\u9875\u6A21\u677F\u53EF\u5728 build \u540E\u628A index.html \u62F7\u4E00\u4EFD\u4F5C fallback",comment:"dist \u68C0\u67E5"},dist_html_name:{code:"DIST_HTML_NAME",text:"\u4EA7\u7269 HTML \u547D\u540D\u4E0D\u7B26\u5408\u7EA6\u5B9A\u3002\u6E38\u620F\u9875\u7528 index.{lang}.{h|v}.html\uFF0C\u65B9\u5411\u9996\u9875\u7528 index.h.html / index.v.html\uFF0C\u53E6\u5141\u8BB8 start.html\u3001404.html\u3001privacy.html\u3001offline.html",comment:"dist \u68C0\u67E5"},invalid_asset:{code:"INVALID_ASSET",text:"\u7D20\u6750\u8DEF\u5F84\u4E0D\u5408\u6CD5: {rel}",comment:"\u6570\u636E\u6821\u9A8C"},missing_asset:{code:"MISSING_ASSET",text:"\u7D20\u6750\u4E0D\u5B58\u5728: assets/{posix}",comment:"\u6570\u636E\u6821\u9A8C"},asset_case:{code:"ASSET_CASE",text:"\u7D20\u6750\u8DEF\u5F84\u5927\u5C0F\u5199\u4E0D\u4E00\u81F4: JSON \u5199 assets/{posix}\uFF0C\u78C1\u76D8\u4E0A\u662F assets/{actual}\uFF08Linux \u6258\u7BA1\u4F1A\u627E\u4E0D\u5230\uFF09",comment:"\u6570\u636E\u6821\u9A8C"},schema_failed:{code:"SCHEMA",text:"schema \u6821\u9A8C\u5931\u8D25",comment:"\u6570\u636E\u6821\u9A8C\u515C\u5E95"},schema_detail:{code:"SCHEMA",text:"{path} {message}",comment:"Ajv \u9519\u8BEF"},theme_schema_failed:{code:"THEME_SCHEMA",text:"theme schema \u6821\u9A8C\u5931\u8D25",comment:"\u6570\u636E\u6821\u9A8C\u515C\u5E95"}}};function L(){let e={...S,...y};return delete e._comment,e}var D=L();function R(e,t){if(!t)return e;let m=e;for(let[o,n]of Object.entries(t))m=m.split(`{${o}}`).join(String(n));return m}function i(e,t,m){let o=D[e]?.[t];if(!o?.text)throw new Error(`missing cli message ${String(e)}.${t}`);return R(o.text,m)}function E(e,t,m){let o=D.validate[t];if(!o)throw new Error(`missing validate message ${t}`);return{path:e,code:o.code,message:R(o.text,m)}}var G=O(import.meta.url),A=G("ajv"),F=A.default??A,$="assets",v="assets/data/game.json",M="schema/logic.mjs",P="schema/game.schema.json",j="assets/theme",q=/\.(png|jpe?g|gif|svg|webp|avif|mp3|wav|ogg|m4a|mp4|webm|woff2?|ttf|otf)$/i;function u(e){return JSON.parse(r.readFileSync(e,"utf8"))}function I(e){return e.replace(/\\/g,"/").replace(/^\//,"")}function H(e){let t=I(e);return!!(!t||t.includes("\0")||t.split("/").includes("..")||d.isAbsolute(t)||d.win32.isAbsolute(t))}function V(e,t){let m=I(t);if(H(m))return{ok:!1,code:"INVALID_ASSET",message:i("validate","invalid_asset",{rel:t})};let o=m.split("/").filter(Boolean),n=e;for(let l=0;l<o.length;l++){let x=o[l],g;try{g=r.readdirSync(n)}catch{return{ok:!1,code:"MISSING_ASSET",message:i("validate","missing_asset",{posix:m})}}if(g.includes(x)){n=d.join(n,x);continue}let _=g.find(p=>p.toLowerCase()===x.toLowerCase());if(_){let p=[...o.slice(0,l),_].join("/");return{ok:!1,code:"ASSET_CASE",message:i("validate","asset_case",{posix:m,actual:p})}}return{ok:!1,code:"MISSING_ASSET",message:i("validate","missing_asset",{posix:m})}}return{ok:!0}}function b(e,t,m=""){if(typeof e=="string"){let o=e.trim();(q.test(o)||/^(images|audio|fonts|video)\//.test(o))&&t.push({pointer:m||"/",rel:o});return}if(Array.isArray(e)){e.forEach((o,n)=>b(o,t,`${m}/${n}`));return}if(e&&typeof e=="object")for(let[o,n]of Object.entries(e))b(n,t,`${m}/${o}`)}async function B(e){let t=[],m=d.join(e,v),o=d.join(e,P),n=d.join(e,M),l=r.existsSync(m),x=r.existsSync(o),g=r.existsSync(n),_,p=new F({allErrors:!0,strict:!1});if(l&&(_=u(m),x)){let s=u(o),c=p.compile(s);if(!c(_))for(let a of c.errors??[])t.push({path:`/${v}${a.instancePath||""}`,code:"SCHEMA",message:a.message?i("validate","schema_detail",{path:a.instancePath||"/",message:a.message}):i("validate","schema_failed")})}let k=d.join(e,"schema/theme.schema.json"),h=d.join(e,j,"layout.json");if(r.existsSync(k)&&r.existsSync(h)){let s=p.compile(u(k)),c=u(h);if(!s(c))for(let a of s.errors??[])t.push({path:`/${j}/layout.json${a.instancePath||""}`,code:"THEME_SCHEMA",message:a.message??i("validate","theme_schema_failed")})}let f=[];if(l){let s=[];b(_,s);for(let c of s)f.push({file:`/${v}`,...c})}if(r.existsSync(h)){let s=[];b(u(h),s);for(let c of s)f.push({file:`/${j}/layout.json`,...c})}let w=d.join(e,$);for(let s of f){let c=I(s.rel),a=V(w,c);a.ok||t.push({path:`${s.file}${s.pointer}`,code:a.code,message:a.message})}if(g&&l){let s=await import(C(n).href);if(typeof s.default!="function")t.push(E(`/${M}`,"logic_export"));else{let c=await s.default(_,e);c&&c.ok===!1?t.push(...c.errors??[]):c&&Array.isArray(c.errors)&&c.errors.length&&t.push(...c.errors)}}return{ok:t.length===0,errors:t}}async function te(e){let{ok:t,errors:m}=await B(e);if(t){console.log(i("kit","validate_data_ok_line"));return}for(let o of m)console.error(i("kit","issue_line",{code:o.code,path:o.path,message:o.message}));process.exit(1)}export{B as runValidate,te as validate};
|
package/package.json
ADDED
|
@@ -0,0 +1,42 @@
|
|
|
1
|
+
{
|
|
2
|
+
"name": "@66rpg/cgmaker",
|
|
3
|
+
"version": "0.1.15",
|
|
4
|
+
"description": "橙光 cgmaker 平台工具:validate-template(TS);login / publish 等转发 cgmaker",
|
|
5
|
+
"type": "module",
|
|
6
|
+
"bin": {
|
|
7
|
+
"cgmaker": "./bin/cgmaker.js"
|
|
8
|
+
},
|
|
9
|
+
"files": [
|
|
10
|
+
"dist",
|
|
11
|
+
"bin",
|
|
12
|
+
"skill",
|
|
13
|
+
"skill-targets.json",
|
|
14
|
+
"share/*.mjs",
|
|
15
|
+
"share/internal-registry.md"
|
|
16
|
+
],
|
|
17
|
+
"scripts": {
|
|
18
|
+
"build": "tsc --noEmit -p tsconfig.json && node ../../scripts/bundle.mjs",
|
|
19
|
+
"test": "node --import tsx --test \"src/**/*.test.ts\"",
|
|
20
|
+
"prepack": "node ../../scripts/minify-share.mjs inject",
|
|
21
|
+
"postpack": "node ../../scripts/minify-share.mjs restore",
|
|
22
|
+
"prepublishOnly": "npm run build && node ../../scripts/check-versions.mjs"
|
|
23
|
+
},
|
|
24
|
+
"publishConfig": {
|
|
25
|
+
"access": "public"
|
|
26
|
+
},
|
|
27
|
+
"engines": {
|
|
28
|
+
"node": ">=20"
|
|
29
|
+
},
|
|
30
|
+
"dependencies": {
|
|
31
|
+
"@clack/prompts": "^1.8.0",
|
|
32
|
+
"ajv": "^8.17.1",
|
|
33
|
+
"picocolors": "^1.1.1"
|
|
34
|
+
},
|
|
35
|
+
"optionalDependencies": {
|
|
36
|
+
"@66rpg/cgmaker-win32-x64": "0.1.15"
|
|
37
|
+
},
|
|
38
|
+
"devDependencies": {
|
|
39
|
+
"@types/node": "^22.15.0",
|
|
40
|
+
"typescript": "^5.8.3"
|
|
41
|
+
}
|
|
42
|
+
}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
import e from"node:fs";import t from"node:path";function s(){return process.platform==="win32"?"cgmaker.exe":"cgmaker"}function c(){const r=process.platform,n=process.arch;return r==="darwin"&&n==="arm64"?["aarch64-apple-darwin"]:r==="darwin"&&n==="x64"?["x86_64-apple-darwin"]:r==="win32"&&n==="x64"?["x86_64-pc-windows-gnu","x86_64-pc-windows-msvc"]:r==="linux"&&n==="x64"?["x86_64-unknown-linux-gnu","x86_64-unknown-linux-musl"]:r==="linux"&&n==="arm64"?["aarch64-unknown-linux-gnu","aarch64-unknown-linux-musl"]:[]}function a(r){const n=s(),o=[];for(const i of["release","debug"]){for(const u of c())o.push(t.join(r,u,i,n));o.push(t.join(r,i,n))}return o}function x(r){for(const n of r)if(n){for(const o of a(n))if(e.existsSync(o))return o}return null}export{s as exeName,x as firstExistingRustBin,c as hostTriples,a as rustBinCandidates};
|
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
#!/usr/bin/env node
|
|
2
|
+
import{pathToFileURL as r}from"node:url";import o from"node:path";import{fileURLToPath as t}from"node:url";const e=process.argv[2]?o.resolve(process.argv[2]):process.cwd(),i=o.resolve(o.dirname(t(import.meta.url)),".."),a=await import(r(o.join(i,"dist/validate.js")).href);await a.validate(e);
|
|
@@ -0,0 +1,92 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: cgmaker
|
|
3
|
+
description: 登录橙光托管平台,发布静态游戏、模板或开源工程。用户说发布、上传、上线、login、publish、发模板、发游戏、开源工程时使用。不要运行 npm login 或 npm publish。
|
|
4
|
+
---
|
|
5
|
+
|
|
6
|
+
# cgmaker 平台(给 Agent)
|
|
7
|
+
|
|
8
|
+
作者长文在仓库 `docs/users.md`。你不要整篇引用,按本文决策。
|
|
9
|
+
|
|
10
|
+
`validate-template` 走 kit TS。其余命令转发 `cgmaker`。本期只保证 Windows x64。
|
|
11
|
+
|
|
12
|
+
不要对用户说「已通过审核」或「已上线」,除非命令退出 0 且 JSON `success` 为 true 且 `data.status === 4`。`success: true` 只表示已上传并提交审核,审核是异步的:`data.status` 为 2/3 时机审/人审中,为 5 时已被拒绝;终态用 `games --versions` / `templates --versions` / `projects --versions` 查。
|
|
13
|
+
|
|
14
|
+
`login` 默认已有有效登录则跳过;换号用 `npx cgmaker login --force`。
|
|
15
|
+
|
|
16
|
+
## 何时启用
|
|
17
|
+
|
|
18
|
+
登录、发游戏 `dist/`、发模板、发开源工程、货架改名。改目录 / 指纹用 `cgmaker-template-spec`,不要用本 skill 改规范。查阅模板短名、版本号、素材版本号及发布参数搭配,看 `cgmaker-identity`。
|
|
19
|
+
|
|
20
|
+
## 不要做
|
|
21
|
+
|
|
22
|
+
- 不要 `npm login` / `npm publish`。游戏和模板上的是橙光托管。
|
|
23
|
+
- 不要编造 `template_id` / `game_id` / `project_id`,不要 `owner/slug`。
|
|
24
|
+
- 不要把私有 npm registry、内网 IP、镜像域名写进回复、`.npmrc` 或命令示例。用户若装不上 `@66rpg/*`,让他联系平台维护者。
|
|
25
|
+
- 不要用 `--new` / `--to` / `--from`。无 origin 时用 `--init` / `--fork`。
|
|
26
|
+
- `--from-dir` 的 origin 为 `local`,不能 `publish-template`。
|
|
27
|
+
- 不要把试玩当成同一 `game_id` 的第二个通道。首发可以只发试玩;后补正式版会自动挂接。
|
|
28
|
+
|
|
29
|
+
## 按业务选命令
|
|
30
|
+
|
|
31
|
+
从模板开工程(用户还没有目录):
|
|
32
|
+
|
|
33
|
+
```bash
|
|
34
|
+
npx @66rpg/cgmaker-create@latest <template_id> my-game --skill-platform cursor
|
|
35
|
+
npx @66rpg/cgmaker-create@latest <template_id> my-game <data_id> --skill-platform cursor
|
|
36
|
+
```
|
|
37
|
+
|
|
38
|
+
TTY 且未传 `data_id` 时会列出可下载资源包(`GET /v1/posts/templates/data/list`)。脚本环境沿用版本默认绑定。无 TTY 开工程时带 `--skill-platform` 或 `--skill-all`,或开完后在工程目录执行:
|
|
39
|
+
|
|
40
|
+
```bash
|
|
41
|
+
npx cgmaker skill --platform cursor
|
|
42
|
+
npx cgmaker skill --all
|
|
43
|
+
```
|
|
44
|
+
|
|
45
|
+
交互只打 `npx cgmaker skill` 会问平台。这是补扇 / 换平台的主入口。不要调用 `skill sync`。create 时未指定则脚本不扇出。
|
|
46
|
+
|
|
47
|
+
发正式游戏:
|
|
48
|
+
|
|
49
|
+
```bash
|
|
50
|
+
npx cgmaker login
|
|
51
|
+
npx cgmaker whoami
|
|
52
|
+
npx cgmaker validate-template
|
|
53
|
+
npm run build
|
|
54
|
+
npx cgmaker publish --version 1.0.0
|
|
55
|
+
```
|
|
56
|
+
|
|
57
|
+
发试玩(独立游戏;可无正式版首发,后补正式版会自动挂接):
|
|
58
|
+
|
|
59
|
+
```bash
|
|
60
|
+
npm run build:demo
|
|
61
|
+
npx cgmaker publish --demo --version 1.0.0
|
|
62
|
+
```
|
|
63
|
+
|
|
64
|
+
发模板:
|
|
65
|
+
|
|
66
|
+
```bash
|
|
67
|
+
npx cgmaker validate-template
|
|
68
|
+
npm run build
|
|
69
|
+
npx cgmaker publish-template --version 0.1.0 --data-ver 1
|
|
70
|
+
npx cgmaker publish-template --version 0.1.0 --data-ver 1 --data-summary "示范关卡"
|
|
71
|
+
npx cgmaker publish-template --version 0.1.0 --data-ver 1 --assets C:\path\to\assets
|
|
72
|
+
npx cgmaker publish-template-data --data-ver 2 --data-summary "关卡修订"
|
|
73
|
+
npx cgmaker publish-template-data --data-ver 2 --assets C:\path\to\assets
|
|
74
|
+
```
|
|
75
|
+
|
|
76
|
+
无 origin 时 `publish-template` 走路径 A(有资源须 `--data-ver`),或 `--init` / `--fork <version_id>`。只要代码不绑资源:`--init --no-data`。`package.json` 必须有 `scripts.build:demo` 与 `data_ver`。`--version`(缺省 `package.json.version`)须为模板 `version_name`:1–16 位,仅小写字母、数字、`.`、`-`;须以字母或数字开头和结尾,不能有连续符号。不合法则拒绝。上传数据包时可用 `--assets`(绝对路径)和 `--data-summary`(空则不写接口 `summary`)。只改 `assets/`、不发新代码版本:`publish-template-data --data-ver <VER>`(须已有非 local 的 origin;不改已有 `version_id` 的绑定,游戏作者用 `--data-id` 拉新包)。未传 `--data-ver` 时读 `package.json`(或交互确认);显式传入则发布成功后写回 `package.json`。`--fork` 不要带 `--data-ver` / `--data-summary`。参数说明与业务场景配置,见 `cgmaker-identity`。
|
|
77
|
+
|
|
78
|
+
发开源工程:
|
|
79
|
+
|
|
80
|
+
```bash
|
|
81
|
+
npx cgmaker publish-project --version 1.0.0
|
|
82
|
+
```
|
|
83
|
+
|
|
84
|
+
改货架(不上传产物):
|
|
85
|
+
|
|
86
|
+
```bash
|
|
87
|
+
npx cgmaker games update --name "..."
|
|
88
|
+
npx cgmaker templates update --name "..."
|
|
89
|
+
npx cgmaker projects update --name "..."
|
|
90
|
+
```
|
|
91
|
+
|
|
92
|
+
`.cgmaker/` 要进 git。config 手动放 `~/.cgmaker/config.json`。凭据在密钥环。
|
|
@@ -0,0 +1,43 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: cgmaker-identity
|
|
3
|
+
description: 模板与游戏的参数与标识配置指南。帮助用户理解 slug、模板ID、素材版本号 data_ver、素材包ID data_id 等参数含义,以及不同发布场景下的功能参数搭配。
|
|
4
|
+
---
|
|
5
|
+
|
|
6
|
+
# 模板与游戏配置参数指南
|
|
7
|
+
|
|
8
|
+
本文档面向真实用户(模板作者与游戏创作者),详细说明在开发、发布模板与游戏时涉及的各类**配置字段**与**命令行参数**。
|
|
9
|
+
|
|
10
|
+
具体操作命令的使用方式请参考 `cgmaker` 说明;工程目录结构是否合规请参考 `cgmaker-template-spec`。
|
|
11
|
+
|
|
12
|
+
## 核心原则
|
|
13
|
+
|
|
14
|
+
1. **自定义配置项由用户决定**:例如模板英文简称(`slug`)、代码版本号(`version`)、素材版本号(`package.json` 中的 `data_ver` 或命令行的 `--data-ver`),由你在配置文件或发布命令中明确指定。
|
|
15
|
+
2. **平台标识由系统分配**:例如模板 ID(`template_id`)、素材包 ID(`data_id`)、游戏 ID 等,均由平台在创建成功后自动生成,无需也不可人工编造。
|
|
16
|
+
3. **参数按需选用,避免互斥**:不同发布场景对应不同的参数组合,例如不上传素材时无需指定素材版本或素材路径。
|
|
17
|
+
|
|
18
|
+
各参数与字段的详细定义,见 [references/fields.md](references/fields.md)。
|
|
19
|
+
|
|
20
|
+
## 常见业务场景与参数选用快速指引
|
|
21
|
+
|
|
22
|
+
详细的业务分支行为与冲突处理,见 [references/branches.md](references/branches.md)。
|
|
23
|
+
|
|
24
|
+
- **首次发布新模板**:
|
|
25
|
+
- 完整发布(含代码与素材):配置 `package.json` 中的 `slug`,执行发布时传入 `--version` 与 `--data-ver`。
|
|
26
|
+
- 仅发布代码骨架(暂不上传素材):传入 `--version`,并追加 `--init --no-data`。
|
|
27
|
+
- **更新已有模板**:
|
|
28
|
+
- 代码与素材一并更新:传入新 `--version` 与新 `--data-ver`。
|
|
29
|
+
- 仅更新模板代码:传入新 `--version` 并追加 `--no-data`。
|
|
30
|
+
- 仅更新素材(关卡/图/文案更新,代码不变):使用 `publish-template-data`,传入 `--data-ver`;可用 `--data-summary` 写本包说明(空则不写接口)。
|
|
31
|
+
- **基于已有模板派生制作(Fork)**:
|
|
32
|
+
- 使用 `--fork <版本ID>`。换绑已有素材包用 `--data-id`。本地有素材时走 fork 的 `upload_id`,不要传 `--data-ver` / `--data-summary`(Fork 不走 `data/create`)。
|
|
33
|
+
- **发布游戏正式版与试玩版**:
|
|
34
|
+
- 正式版:执行 `publish --version <版本号>`。
|
|
35
|
+
- 试玩版:执行 `publish --demo --version <版本号>`,平台将自动维护正式版与试玩版的关联关系。
|
|
36
|
+
|
|
37
|
+
## 注意事项
|
|
38
|
+
|
|
39
|
+
- 请勿在命令中编造或随意伪造任何平台 ID。
|
|
40
|
+
- 请勿使用 `用户名/模板名` 这种格式作为模板标识或用于开工程。
|
|
41
|
+
- 模板工程一旦发布并在实际项目中使用,请勿更改 `package.json` 中的 `slug`。
|
|
42
|
+
- 模板 `--version` / `package.json.version`(接口 `version_name`)须 1–16 位,仅小写字母、数字、`.`、`-`;须以字母或数字开头和结尾,不能有连续符号。不合法则拒绝发布。游戏 / 开源工程 / `--data-ver` 不套此规则。细则见 [references/fields.md](references/fields.md)。
|
|
43
|
+
- 素材版本号(`--data-ver`)不会由平台自动加 1,每次更新素材时请根据规划显式指定。
|
|
@@ -0,0 +1,149 @@
|
|
|
1
|
+
# 业务场景与参数配置指南
|
|
2
|
+
|
|
3
|
+
本文档面向真实用户,详细介绍不同业务场景下命令行功能参数的选择与搭配规则,以及各参数值如何影响发布和构建流程。
|
|
4
|
+
|
|
5
|
+
---
|
|
6
|
+
|
|
7
|
+
## 1. 模板发布业务场景
|
|
8
|
+
|
|
9
|
+
发布模板时,工具会根据当前工程是否已在平台登记,以及你所提供的命令行参数自动决定业务流向。
|
|
10
|
+
|
|
11
|
+
### 场景 1.1:首次发布全新模板
|
|
12
|
+
|
|
13
|
+
当你的模板工程从未在平台发布过,准备首次上架时:
|
|
14
|
+
|
|
15
|
+
- **方式 A:完整首次发布(代码 + 素材)**
|
|
16
|
+
- **适用场景**:模板开发完毕,既有完整代码逻辑,也有配套的基础内容或示范素材。
|
|
17
|
+
- **前置准备**:`package.json` 中已配置好 `slug`、`version` 与 `data_ver`(工具强制校验必填)。
|
|
18
|
+
- **命令示例**:
|
|
19
|
+
```bash
|
|
20
|
+
# 显式传入版本号
|
|
21
|
+
npx cgmaker publish-template --version 0.1.0 --data-ver 1 --data-summary "示范关卡"
|
|
22
|
+
|
|
23
|
+
# 或直接使用 package.json 中配置的默认版本号
|
|
24
|
+
npx cgmaker publish-template
|
|
25
|
+
```
|
|
26
|
+
- **参数说明**:
|
|
27
|
+
- `--version 0.1.0`:定义模板首发版本的代码版本号(未传时默认读取 `package.json` 的 `version`)。须 1–16 位,仅小写字母、数字、`.`、`-`;须以字母或数字开头和结尾,不能有连续符号。不合法则拒绝发布。
|
|
28
|
+
- `--data-ver 1`:定义首发素材包的版本编号(未传时默认读取 `package.json` 的 `data_ver`;若显式指定,发布成功后会自动写回 `package.json`)。
|
|
29
|
+
- 可选 `--data-summary <说明>`:本包说明,写入 `data/create` 的 `summary`。不传或空则不写该字段。
|
|
30
|
+
- 可选 `--assets <绝对路径>`:如果素材文件不在工程根目录默认的 `assets/` 下,可通过此参数指定实际的本地绝对路径。
|
|
31
|
+
- **业务逻辑**:平台将为模板创建全新的模板信息、上传素材包,并生成第一个模板发布版本。成功后在 `package.json` 记录 `data_ver`,本地记录模板 ID 与版本 ID。
|
|
32
|
+
|
|
33
|
+
- **方式 B:仅初始化模板代码框架(暂不带素材)**
|
|
34
|
+
- **适用场景**:先在平台上建立模板框架,稍后再补充素材,或该模板本身不需要素材包。
|
|
35
|
+
- **命令示例**:
|
|
36
|
+
```bash
|
|
37
|
+
npx cgmaker publish-template --version 0.1.0 --init --no-data
|
|
38
|
+
```
|
|
39
|
+
- **参数说明**:
|
|
40
|
+
- `--init`:声明为首次登记初始化模板。
|
|
41
|
+
- `--no-data`:明确声明本次发布不包含任何素材内容。
|
|
42
|
+
- **业务逻辑**:平台仅初始化模板身份并发布该代码版本,不生成任何素材包。
|
|
43
|
+
- **注意**:使用 `--init` 时必须配合 `--no-data`(或当前工程完全无素材文件),**严禁同时传入 `--data-ver` / `--data-summary` / `--assets`**,否则命令会因逻辑冲突而终止。
|
|
44
|
+
|
|
45
|
+
---
|
|
46
|
+
|
|
47
|
+
### 场景 1.2:已有模板版本更新
|
|
48
|
+
|
|
49
|
+
当工程已经发布过,后续进行功能迭代或缺陷修复时:
|
|
50
|
+
|
|
51
|
+
- **方式 A:同时更新代码与素材**
|
|
52
|
+
- **命令示例**:
|
|
53
|
+
```bash
|
|
54
|
+
npx cgmaker publish-template --version 0.2.0 --data-ver 2 --data-summary "新关卡"
|
|
55
|
+
```
|
|
56
|
+
- **业务逻辑**:向平台提交新一版代码,并为该模板上传一份新素材包,生成新的模板版本。
|
|
57
|
+
|
|
58
|
+
- **方式 B:仅更新模板代码(素材沿用或不更新)**
|
|
59
|
+
- **命令示例**:
|
|
60
|
+
```bash
|
|
61
|
+
npx cgmaker publish-template --version 0.2.0 --no-data
|
|
62
|
+
```
|
|
63
|
+
- **业务逻辑**:仅打包并发布新代码,不上传新素材包,新版本模板不会绑定新的素材数据。
|
|
64
|
+
|
|
65
|
+
- **注意事项**:
|
|
66
|
+
- 已经发布过的模板,后续更新时**不要重复传入 `--init`**,否则系统会提示已存在而报错。
|
|
67
|
+
|
|
68
|
+
---
|
|
69
|
+
|
|
70
|
+
### 场景 1.3:仅更新模板素材(代码未变动)
|
|
71
|
+
|
|
72
|
+
- **适用场景**:模板代码未作任何修改,仅优化或增补了关卡、图集、音效、文字等素材内容。
|
|
73
|
+
- **推荐命令**:使用专用的素材发布命令 `publish-template-data`,无需也不应重新发布代码版本。
|
|
74
|
+
```bash
|
|
75
|
+
# 使用默认 assets/ 目录
|
|
76
|
+
npx cgmaker publish-template-data --data-ver 2 --data-summary "关卡修订"
|
|
77
|
+
|
|
78
|
+
# 指定自定义素材绝对路径
|
|
79
|
+
npx cgmaker publish-template-data --data-ver 2 --assets D:\templates\custom-assets
|
|
80
|
+
```
|
|
81
|
+
- **核心业务影响**:
|
|
82
|
+
1. 该命令仅将素材打包并上传,生成一个新的**素材包 ID**(`data_id`)。
|
|
83
|
+
2. **平台不会因此产生新的模板代码版本**,已发布的旧版本模板仍默认维持原有的素材绑定关系。
|
|
84
|
+
3. 已经基于旧素材开好工的游戏工程不受任何影响。若游戏创作者需要使用这份新素材,可以在开工程时显式指定新生成的素材包 ID。
|
|
85
|
+
|
|
86
|
+
---
|
|
87
|
+
|
|
88
|
+
### 场景 1.4:基于他人已上架版本派生制作(Fork)
|
|
89
|
+
|
|
90
|
+
- **适用场景**:需要在平台已有的某个成熟模板版本基础上派生出新的模板(克隆底座),进行二次创作。
|
|
91
|
+
- **命令示例**:
|
|
92
|
+
```bash
|
|
93
|
+
# 方式 A:继承源版本的代码与默认素材绑定
|
|
94
|
+
npx cgmaker publish-template --version 0.1.0 --fork <源版本ID>
|
|
95
|
+
|
|
96
|
+
# 方式 B:继承源版本的代码,并换绑平台已有的一份素材包
|
|
97
|
+
npx cgmaker publish-template --version 0.1.0 --fork <源版本ID> --data-id <目标素材包ID>
|
|
98
|
+
```
|
|
99
|
+
- **业务逻辑**:
|
|
100
|
+
- 由服务端直接继承源版本的代码底座,本地无需上传源码包。
|
|
101
|
+
- `--data-id`(或 `--data-ver-id`)仅在包含 `--fork` 时合法,用于挂接已有素材包。
|
|
102
|
+
- 本地若有素材,经 fork 的 `upload_id` 上传,**不**走 `data/create`,因此不要传 `--data-ver` / `--data-summary`。
|
|
103
|
+
- 派生成功后将生成全新的模板 ID。
|
|
104
|
+
|
|
105
|
+
---
|
|
106
|
+
|
|
107
|
+
## 2. 游戏发布业务场景(正式版与试玩版)
|
|
108
|
+
|
|
109
|
+
在游戏工程中发布游戏产物时:
|
|
110
|
+
|
|
111
|
+
- **发布正式游戏**:
|
|
112
|
+
```bash
|
|
113
|
+
npx cgmaker publish --version 1.0.0
|
|
114
|
+
```
|
|
115
|
+
- 将当前工程编译产物(`dist/` 目录)上传到平台的正式游戏通道。
|
|
116
|
+
- 若此工程之前未发布过游戏,平台将创建全新的游戏 ID;若已发布过,则自动追加新版本。
|
|
117
|
+
|
|
118
|
+
- **发布试玩版本(Demo)**:
|
|
119
|
+
```bash
|
|
120
|
+
npx cgmaker publish --demo --version 1.0.0
|
|
121
|
+
```
|
|
122
|
+
- 试玩版本通过 `--demo` 旗标区分。在平台机制中,试玩版属于**独立的作品发布通道**,拥有独立的试玩游戏 ID。
|
|
123
|
+
- **支持先发试玩**:允许在正式游戏发布前提前发布试玩版本。
|
|
124
|
+
- **自动挂接机制**:当同一工程后续执行正式版发布(不带 `--demo`)时,平台会自动检测并关联该工程已有的试玩版,无需创作者手动配置关联关系。
|
|
125
|
+
|
|
126
|
+
---
|
|
127
|
+
|
|
128
|
+
## 3. 参数冲突与规范清单(避坑指南)
|
|
129
|
+
|
|
130
|
+
为避免因参数冲突导致命令执行失败,请注意以下规则:
|
|
131
|
+
|
|
132
|
+
1. **`--assets` 必须是绝对路径**
|
|
133
|
+
- 正确:`--assets D:\game\assets` 或 `--assets /Users/name/game/assets`
|
|
134
|
+
- 错误:`--assets ./assets` 或 `--assets ..\custom-assets`(相对路径将直接导致校验失败退出)
|
|
135
|
+
- 映射规则:无论外部目录名是什么,打包后在平台素材包中均统一置于 `assets/` 根路径。
|
|
136
|
+
|
|
137
|
+
2. **声明不传素材时,禁止携带任何素材参数**
|
|
138
|
+
- 当使用 `--no-data` 或首次仅发代码的 `--init` 时,表示本次操作排除素材。
|
|
139
|
+
- 禁止同时传入 `--data-ver`、`--data-summary` 或 `--assets`,否则命令会因语义互斥报错。
|
|
140
|
+
|
|
141
|
+
3. **`--data-id` 仅用于 Fork 换绑或创建工程**
|
|
142
|
+
- 在普通的模板发布(`publish-template` 且未带 `--fork`)中,严禁传入 `--data-id`。
|
|
143
|
+
- 上传自己本地的素材,必须使用 `--data-ver` 声明版本号。
|
|
144
|
+
|
|
145
|
+
4. **素材版本号不自动递增**
|
|
146
|
+
- 每次调用 `publish-template`(含素材)或 `publish-template-data` 时,请务必明确规划本次素材包的版本号(如 `--data-ver 2`)。
|
|
147
|
+
|
|
148
|
+
5. **本地测试模板无法直接上架发布**
|
|
149
|
+
- 若工程是从本地磁盘目录直接导入安装创建的,其模板处于本地调试模式,无法直接作为官方上架模板执行 `publish-template`。
|
|
@@ -0,0 +1,59 @@
|
|
|
1
|
+
# 参数与配置字段说明
|
|
2
|
+
|
|
3
|
+
本文档面向真实用户,详细罗列在开发、构建和发布模板或游戏过程中涉及的所有配置字段、命令行功能参数以及平台标识的作用与使用规范。
|
|
4
|
+
|
|
5
|
+
---
|
|
6
|
+
|
|
7
|
+
## 1. 模板工程配置字段(`package.json`)
|
|
8
|
+
|
|
9
|
+
在开发模板工程时,由你在根目录的 `package.json` 中配置:
|
|
10
|
+
|
|
11
|
+
| 字段名称 | 类型 | 是否必填 | 功能与使用说明 | 配置规范与注意事项 |
|
|
12
|
+
|---|---|---|---|---|
|
|
13
|
+
| `slug` | 字符串 | 是 | **模板的唯一英文简称**。用于在开发阶段或没有发布前标识该模板工程,并在工具检查时作为模板合法性的依据。 | 仅支持小写字母、数字与中划线(连字符),如 `quiz-react`。**模板发布后请勿随意修改**,否则后续依赖此模板的衍生工程将无法正常识别。注意:它**不是**平台分配的模板 ID。 |
|
|
14
|
+
| `version` | 字符串 | 是 | **工程的默认代码版本号**。作为当前模板或工程的代码版本基准。 | 执行发布命令时若未显式传入 `--version`,工具将默认采用该值。**仅发布模板**(`publish-template`)时该值作为接口 `version_name`,须 1–16 位、仅小写字母/数字/`.`/`-`、以字母或数字开头和结尾、不能有连续符号(如 `0.1.0`、`1.0.0-a`)。游戏与开源工程发版不套此格式。 |
|
|
15
|
+
| `data_ver` | 字符串或数字 | 是 | **模板配套素材的版本号**。用于标识当前工程配套素材的版本。模板规范校验(`validate-template`)与发布模板(`publish-template`)时**强制要求该字段存在**。 | 建议从 `"1"` 开始(如 `"1"`、`"2"`)。执行发布命令时若显式指定了 `--data-ver`,发布成功后工具会自动将新版本号写回 `package.json` 中保存。 |
|
|
16
|
+
|
|
17
|
+
---
|
|
18
|
+
|
|
19
|
+
## 2. 命令行功能参数详解
|
|
20
|
+
|
|
21
|
+
在调用 `cgmaker` 各类发布或创建命令时使用的主要功能参数:
|
|
22
|
+
|
|
23
|
+
| 参数名称 | 适用命令 | 是否必填 | 功能与作用说明 | 参数规则与配置示例 |
|
|
24
|
+
|---|---|---|---|---|
|
|
25
|
+
| `--version <版本号>` | `publish-template` | 推荐显式指定 | **指定本次发布的模板版本号**(接口 `version_name`)。 | 覆盖 `package.json` 的 `version`。须 1–16 位,仅小写字母、数字、`.`、`-`;必须以字母或数字开头和结尾,且不能有连续符号。例如 `--version 1.0.0`。不合法则拒绝发布。<br>注:单独执行 `cgmaker --version`(前面无子命令)输出的是工具客户端自身的软件版本,两者含义不同。 |
|
|
26
|
+
| `--version <版本号>` | `publish`<br>`publish-project` | 推荐显式指定 | **指定本次发布的游戏 / 开源工程版本号**。 | 覆盖 `package.json` 的 `version`。例如 `--version 1.0.0`。不套模板 `version_name` 的格式校验。 |
|
|
27
|
+
| `--data-ver <素材版本号>` | `publish-template`<br>`publish-template-data` | 选填(未传时默认读取 `package.json`) | **指定本次上传素材包的版本编号**。用于在平台区分不同批次或规格的素材内容。 | 字符串或数字(如 `--data-ver 2`)。若命令行未指定,工具优先从 `package.json` 的 `data_ver` 字段读取;若命令行显式传入,发布成功后会自动同步写回 `package.json`。<br>**注意:平台不会自动自增此版本号**。若本次不走 `data/create`(`--no-data` / `--init` / `--fork`),严禁携带此参数。 |
|
|
28
|
+
| `--data-summary <说明>` | `publish-template`<br>`publish-template-data` | 选填 | **本次素材包的说明**。对应 `data/create` 的 `summary`。同一 `data_ver` 下有多包时用来区分。 | 例如 `--data-summary "春节活动关卡"`。不传、空串、纯空格或交互回车都不写入接口。仅在走 `data/create` 时有效;不要与 `--no-data` / `--init` / `--fork` 同时使用。 |
|
|
29
|
+
| `--assets <绝对路径>` | `publish-template`<br>`publish-template-data` | 选填 | **自定义素材目录的完整来源路径**。当素材文件不在默认的工程根目录 `assets/` 下时使用。 | **必须是本机完整绝对路径**(例如 `D:\game-project\custom-assets`),不支持相对路径。<br>素材上传后在包内均自动映射为 `assets/` 根目录。若声明了不上传素材,严禁使用此参数。 |
|
|
30
|
+
| `--no-data` | `publish-template` | 选填 | **声明本次发布仅上传模板代码,不上传任何素材包**。 | 适用于代码逻辑迭代但素材未变动的更新场景。使用时不可同时传入 `--data-ver`、`--data-summary` 或 `--assets`。 |
|
|
31
|
+
| `--init` | `publish-template` | 首次发空代码时选填 | **声明首次登记并初始化模板代码,不绑定任何素材包**。 | 仅用于未曾发布过的模板工程首次上线代码框架。必须配合 `--no-data` 或确保当前无素材目录。不可与 `--data-ver` / `--data-summary` / `--assets` 混用。 |
|
|
32
|
+
| `--fork <源版本ID>` | `publish-template` | 派生制作时必填 | **基于平台上已有的某个模板版本派生新模板**。 | 服务端继承该版本的代码底座,本地无需上传源码包。换绑已有素材用 `--data-id`;本地素材走 fork 的 `upload_id`。不要传 `--data-ver` / `--data-summary`。 |
|
|
33
|
+
| `--data-id`<br>(或 `--data-ver-id`) | `publish-template`(搭配 `--fork`)<br>`cgmaker-create`(开工程) | 选填 | **指定或换绑平台上已存在的素材包 ID**。 | 在使用 `--fork` 派生模板时,用于直接挂接指定素材包;在创建工程时,用于指定下载历史特定版本的素材包。普通发布模板场景无需使用。 |
|
|
34
|
+
| `--demo` | `publish` | 选填 | **指定本次发布为试玩版本(Demo)**。 | 发布游戏的试玩内容。试玩与正式版通道独立,支持独立抢先发布,后续在同一工程发布正式版时平台会自动建立两者关联。 |
|
|
35
|
+
|
|
36
|
+
---
|
|
37
|
+
|
|
38
|
+
## 3. 平台全局标识(ID)与用途
|
|
39
|
+
|
|
40
|
+
你在平台管理后台、命令执行成功的输出结果,或开工程参数中会接触到的核心标识:
|
|
41
|
+
|
|
42
|
+
| 标识名称 | 产生方式 | 主要用途与业务意义 |
|
|
43
|
+
|---|---|---|
|
|
44
|
+
| **模板 ID**(`template_id`) | 首次发布模板成功后由平台统一分配 | 模板在全平台的唯一全局身份编号(通常为 12 位左右的英数混合字符串,如 `4p7fh9mytcsg`)。创作者使用脚手架开工程时必须指定该 ID(如 `npx @66rpg/cgmaker-create <template_id>`)。 |
|
|
45
|
+
| **版本 ID**(`version_id`) | 每次发布新的模板代码版本时生成 | 标识某一次具体的模板代码迭代版本。游戏工程在与模板建立依赖关系时,实际绑定的是特定的版本 ID。 |
|
|
46
|
+
| **素材包 ID**(`data_id`;CLI JSON 成功载荷键名 `data_ver_id`) | 每次成功上传素材包后生成 | 标识一份独立的素材内容包。通过此 ID,模板作者可以在不同代码版本间复用素材包,游戏创作者也可以在开工程时指定拉取特定的素材包。 |
|
|
47
|
+
| **游戏 ID**(`game_id` / `demo_game_id`) | 首次发布游戏成功后由平台统一分配 | 游戏在平台上的唯一编号。正式版与试玩版各对应一个独立 ID,试玩版本可先于正式版发布,系统会自动维护两者的绑定关系。 |
|
|
48
|
+
|
|
49
|
+
---
|
|
50
|
+
|
|
51
|
+
## 4. 常见易混淆概念说明
|
|
52
|
+
|
|
53
|
+
### 模板短名(`slug`) vs 模板 ID(`template_id`)
|
|
54
|
+
- **`slug`**:由你自行命名的英文别名,保存在本地 `package.json` 中,便于开发阶段阅读与标识。
|
|
55
|
+
- **`template_id`**:由平台系统自动分配的唯一全球编码。使用脚手架创建游戏工程时,**必须且只能使用平台的模板 ID**,不可传入 `slug` 或 `用户名/slug`。
|
|
56
|
+
|
|
57
|
+
### 素材版本号(`--data-ver`) vs 素材包 ID(`data_id`)
|
|
58
|
+
- **`--data-ver`**:由你规划并填写的版本标号(如第 1 版、第 2 版,用 `1`、`2` 表示),便于人类记忆与辨识。**它不会自动加 1**,每次上传素材包时均需由你指定。
|
|
59
|
+
- **`data_id`**:平台为该次上传生成的全局唯一物理标识。开工程或换绑时,系统通过该 ID 精确获取该包素材。
|
|
@@ -0,0 +1,54 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: cgmaker-template-spec
|
|
3
|
+
description: 橙光 cgmaker 模板工程规范。在用户改目录或脚本名、问是否符合模板规范、准备发布模板、问指纹时使用。
|
|
4
|
+
---
|
|
5
|
+
|
|
6
|
+
# cgmaker 模板工程规范
|
|
7
|
+
|
|
8
|
+
这是**模板工程规范**,不是平台全部规范,也不是某个玩法模板自己的 skill。玩法说明在工程根 `skill/SKILL.md`(若有)。登录、怎么敲命令用 `cgmaker`。模板短名、版本号、素材版本号及发布参数搭配,用 `cgmaker-identity`。不要在本 skill 里做发布决策。
|
|
9
|
+
|
|
10
|
+
## 何时启用
|
|
11
|
+
|
|
12
|
+
- 改目录、脚本名、构建产物
|
|
13
|
+
- 问「这还是不是合法模板」
|
|
14
|
+
- 准备 `npx cgmaker publish-template` 之前先核对目录是否合法
|
|
15
|
+
- 问指纹(算哪些文件)
|
|
16
|
+
|
|
17
|
+
## 两类目录
|
|
18
|
+
|
|
19
|
+
内容(不进指纹,和模板逻辑无关):
|
|
20
|
+
|
|
21
|
+
- `assets/` 必须有这个目录(可空)。正式内容:数据、图、音、主题;子目录名由本模板 `AGENTS.md` 写明
|
|
22
|
+
- 根目录不要再放 `data/`、`theme/`
|
|
23
|
+
|
|
24
|
+
模板提供(进指纹):
|
|
25
|
+
|
|
26
|
+
- `src/` 必须
|
|
27
|
+
- `package.json` 必须有 `scripts.dev` / `scripts.build` / `scripts.build:demo`,以及 `slug`、`data_ver`
|
|
28
|
+
- `README.md`、`AGENTS.md` 必须(README 不进指纹;AGENTS.md 进)
|
|
29
|
+
- `skill/` 可选
|
|
30
|
+
- 校验(惯例 `schema/`)可选,不必是 JSON Schema
|
|
31
|
+
- 根 `index.html`、打包配置可选
|
|
32
|
+
|
|
33
|
+
不要 `template.yaml`。作者只填 `package.json` 的 `slug`、`data_ver` + 已有的 `version` / `description`。不要手写 `template_id`。落地会改 `name`,不要改 `slug`。参数与字段详细定义,见 `cgmaker-identity`。
|
|
34
|
+
|
|
35
|
+
条文分两份:
|
|
36
|
+
|
|
37
|
+
- [references/layout.md](references/layout.md) — 模板源码树、scripts、指纹、zip
|
|
38
|
+
- [references/dist.md](references/dist.md) — `dist/` HTML 命名与相对路径
|
|
39
|
+
|
|
40
|
+
## 校验(规范门禁在 CLI,不在本 skill 的 scripts 里)
|
|
41
|
+
|
|
42
|
+
```bash
|
|
43
|
+
npx cgmaker validate-template # 验证当前工程目录是否符合模板规范
|
|
44
|
+
npm run validate # 仅当模板提供了数据校验
|
|
45
|
+
npm run build
|
|
46
|
+
npm run build:demo # 试玩 dist/(发布模板必须有这条脚本)
|
|
47
|
+
npx cgmaker publish-template --version 0.1.0 --data-ver 1
|
|
48
|
+
npx cgmaker publish-template --version 0.1.0 --data-ver 1 --data-summary "示范关卡"
|
|
49
|
+
npx cgmaker publish-template --version 0.1.0 --data-ver 1 --assets C:\path\to\assets
|
|
50
|
+
npx cgmaker publish-template-data --data-ver 2 --data-summary "关卡修订"
|
|
51
|
+
npx cgmaker publish-template-data --data-ver 2 --assets C:\path\to\assets
|
|
52
|
+
```
|
|
53
|
+
|
|
54
|
+
过不过关只认 `cgmaker validate-template`。发布游戏用 `npx cgmaker publish`(只认 `dist/`);试玩用 `npx cgmaker publish --demo`(先 `build:demo`,可无正式版首发)。命令怎么敲见 `cgmaker`;功能参数与场景搭配见 `cgmaker-identity`。上传素材时没写 `--data-ver` 会问你(可沿用 `package.json` 里的号,不会自动 +1);没法提问时必须自己写上或保证 `package.json` 已有 `data_ver`。`--data-summary` 可选,空则不写接口。`publish-template` 与 `publish-template-data` 都可用 `--assets` 指定素材目录的完整路径(传上去以后包里仍然叫 `assets/`)。
|
|
@@ -0,0 +1,60 @@
|
|
|
1
|
+
# dist 结构
|
|
2
|
+
|
|
3
|
+
`cgmaker publish` 只吃 **`dist/`**(`npm run build` 或 `npm run build:demo` 之后),不要提交。纯静态、无后端。源码树见 [layout.md](layout.md)。没有 `dist/` 时,`validate-template` 不跑产物检查(本地未 build)。发布游戏前必须先 build。
|
|
4
|
+
|
|
5
|
+
正式版与试玩都打进**同一个** `dist/`(试玩会覆盖正式产物,发完再 `build` 另一份)。不要 `dist-demo/`。试玩由 `scripts.build:demo` 从 `assets/` 切片产出。见 [layout.md](layout.md)。
|
|
6
|
+
|
|
7
|
+
`npx cgmaker publish` 上传正式版;`npx cgmaker publish --demo` 上传试玩。两次都只认当前 `dist/`。
|
|
8
|
+
|
|
9
|
+
入口按 **通用首页 → 启动页 / 方向首页 → 游戏页** 拆 HTML。所有 HTML 的脚本/样式必须是相对路径(Vite `base: './'`),禁止 `src="/assets/..."`(那是站点根路径,不是源码里的内容目录 `assets/`)。打包器必须 `base: './'`。目录只能叫 `dist/`,不要 `build/` / `out/` / `www/`。Vite 可用 `publicDir: "assets"`,避免和 hashed 文件抢 `dist/assets/`。
|
|
10
|
+
|
|
11
|
+
✅ 必有 · ⭕ 可选。
|
|
12
|
+
|
|
13
|
+
```
|
|
14
|
+
dist/
|
|
15
|
+
├── index.html # ✅ 通用首页:选方向 + 语言后进游戏页(或方向首页)
|
|
16
|
+
├── start.html # ⭕ 启动页:语言与方向内置,仅「点击启动」
|
|
17
|
+
├── index.h.html # ⭕ 横版首页:只选语言;只链到 *.h.html
|
|
18
|
+
├── index.v.html # ⭕ 竖版首页:只选语言;只链到 *.v.html
|
|
19
|
+
├── index.zh.h.html # ✅ 至少一个游戏页作 fallback(完整玩法,不再选入口)
|
|
20
|
+
├── index.zh.v.html # ⭕
|
|
21
|
+
├── index.en.h.html # ⭕ 每增加一种语言或方向 +1 个游戏 HTML
|
|
22
|
+
├── index.en.v.html # ⭕
|
|
23
|
+
├── 404.html # ⭕
|
|
24
|
+
├── privacy.html # ⭕
|
|
25
|
+
├── offline.html # ⭕
|
|
26
|
+
├── assets/ # 打包器 hashed 文件;玩法素材建议 Vite publicDir: "assets"
|
|
27
|
+
└── manifest.json # ⭕ PWA
|
|
28
|
+
```
|
|
29
|
+
|
|
30
|
+
`npx cgmaker publish` 与 `npx cgmaker publish --demo` 都上传整个 `dist/`,默认入口仍是 `index.html`。
|
|
31
|
+
|
|
32
|
+
层级:
|
|
33
|
+
|
|
34
|
+
```
|
|
35
|
+
index.html # 选:横/竖 + 语言
|
|
36
|
+
├── index.h.html # 横版首页:只选语言
|
|
37
|
+
│ ├── index.zh.h.html
|
|
38
|
+
│ ├── index.en.h.html
|
|
39
|
+
│ └── …
|
|
40
|
+
└── index.v.html # 竖版首页:只选语言
|
|
41
|
+
├── index.zh.v.html
|
|
42
|
+
├── index.en.v.html
|
|
43
|
+
└── …
|
|
44
|
+
|
|
45
|
+
start.html # 不选:仅「点击启动」→ 内置的那个游戏页
|
|
46
|
+
```
|
|
47
|
+
|
|
48
|
+
也可从 `index.html` 直接链到游戏页(跳过方向首页),或投放直接打开 `index.h.html`、`index.v.html`、`start.html`。
|
|
49
|
+
|
|
50
|
+
游戏页文件名:`index.{lang}.{orient}.html`。`{lang}` 为 ISO 639-1(`zh` `en` `ja` …,简繁可用 `zh-CN`、`zh-TW`);`{orient}` 为 `h`(横)或 `v`(竖)。游戏页数量 = 语言数 × 方向数。总 HTML ≈ 1 个通用首页 + 0~1 个 `start.html` + 0~2 个方向首页 + 游戏页 + 0~3 个可选页。例:2 语言 × 2 方向 + 横竖方向首页 → 7 个 HTML,再加启动页 → 8。
|
|
51
|
+
|
|
52
|
+
**通用首页**:方向与语言两维选择(先选横/竖再选语言,或「语言 × 方向」网格)。可选根据 `navigator.language`、屏幕宽高比预勾选,仍由用户确认。URL 预选:`?l=en&o=h` 或 `?lang=en&o=v`。
|
|
53
|
+
|
|
54
|
+
**启动页**:语言与方向写死(用户不可选)。不要列出语言或横竖。点击后进入对应游戏页。适合投放、嵌入。
|
|
55
|
+
|
|
56
|
+
**游戏页**:完整玩法与该语言文案,不再做入口选择。
|
|
57
|
+
|
|
58
|
+
不必拆那么多页时:不需要用户选语言和方向 → 提供 `start.html`,`index.html` 仍留给要自选的人;仅横或仅竖 → 可省略另一方向;仅一种语言 → 方向首页可直接进游戏;文案多、布局相同 → 1 套布局 + `assets/i18n/*.json`;横竖布局差很大 → 必须拆游戏 HTML(或拆不同 CSS/JS 入口)。
|
|
59
|
+
|
|
60
|
+
单语言单方向:开发仍用源码 `index.html`;`build` 后 **至少再有** `index.zh.h.html`(或你的语言/方向)作 fallback。空壳 / 范例会把 `dist/index.html` 拷一份到 `index.zh.h.html`。若已按命名产出游戏页,不要再覆盖。
|
|
@@ -0,0 +1,127 @@
|
|
|
1
|
+
# 模板结构
|
|
2
|
+
|
|
3
|
+
给人(和 AI)读的条文。机器实现是 `npx cgmaker validate-template`。
|
|
4
|
+
|
|
5
|
+
技术栈自选(React / Vue / Phaser / 原生 Canvas 均可),工程是 **npm 包**:必须有 `package.json` 和 `scripts.dev` / `scripts.build` / `scripts.build:demo`。**平台规定的目录名不允许改**;`assets/` 内部子目录名由各模板写在 `AGENTS.md` 里。
|
|
6
|
+
|
|
7
|
+
✅ 必有 · ⭕ 可选(有则校验)。产物 HTML 见 [dist.md](dist.md)。`template_id` / origin / 再发布是平台实现,见仓库 [docs/origin.md](../../../../../docs/origin.md)。
|
|
8
|
+
|
|
9
|
+
## 作者环境
|
|
10
|
+
|
|
11
|
+
只要求 **Node.js 20+**(LTS,自带 `npm` / `npx`)。不要写 `"packageManager": "pnpm@…"`。
|
|
12
|
+
|
|
13
|
+
`create` 脚手架会写一份含 `@66rpg/cgmaker` 的 `package.json`。模板 zip 自带的 `package.json` 覆盖脚手架那份(须保留 `slug` 与 `dev` / `build` / `build:demo`)。
|
|
14
|
+
|
|
15
|
+
## 工程根
|
|
16
|
+
|
|
17
|
+
也是 `publish-template` 打进 zip 的根,不要多包一层目录。**不要** `template.yaml` / `template.yml`。
|
|
18
|
+
|
|
19
|
+
```
|
|
20
|
+
.
|
|
21
|
+
├── package.json ✅ slug + version + data_ver + scripts.dev / build / build:demo;指纹不含 name、slug、data_ver
|
|
22
|
+
├── README.md ✅ 不进指纹
|
|
23
|
+
├── AGENTS.md ✅ 进指纹。写明 assets/ 子目录;可指向 skill/SKILL.md
|
|
24
|
+
├── src/ ✅ 进指纹。完整可改源码,不规定语言或框架
|
|
25
|
+
├── assets/ ✅ 必须有这个目录(可空);正式内容;不进指纹
|
|
26
|
+
│ ├── data/ ⭕ 样板惯例;kit validate 默认找 data/game.json
|
|
27
|
+
│ ├── theme/ ⭕ 样板惯例;默认找 theme/layout.json
|
|
28
|
+
│ └── images/ ⭕ 样板惯例。子目录名平台不管,写在 AGENTS.md
|
|
29
|
+
├── .gitignore ✅ 必须忽略 dist/、node_modules/
|
|
30
|
+
├── index.html ⭕ 根开发入口;有则进指纹
|
|
31
|
+
├── vite.config.* ⭕ 或其它打包配置;有则进指纹
|
|
32
|
+
├── schema/ ⭕ 有则进指纹。不必是 JSON Schema
|
|
33
|
+
│ └── logic.mjs ⭕ 若有:default export async function validate(data, rootDir)
|
|
34
|
+
├── skill/ ⭕ 本模板玩法 skill;有则进指纹、随 zip
|
|
35
|
+
│ ├── SKILL.md ⭕ 没有则安装器不拷模板 skill
|
|
36
|
+
│ ├── references/ ⭕ skill 补充说明
|
|
37
|
+
│ └── scripts/ ⭕ 给 AI 跑的辅助脚本,不是 npm scripts
|
|
38
|
+
├── LICENSE ⭕
|
|
39
|
+
├── preview/、tests/ ⭕ 不进作者工程必带集
|
|
40
|
+
└── dist/ ⭕ 不要提交。仅 npm run build 产出,见 dist.md
|
|
41
|
+
```
|
|
42
|
+
|
|
43
|
+
素材引用相对 **`assets/` 根**(JSON 写 `images/cover.svg`,不要写 `assets/images/...`)。根目录不要再放 `data/`、`theme/`。
|
|
44
|
+
|
|
45
|
+
试玩(同一工程、同一份 `src/`,两次 build 都进 `dist/`):必须提供 `scripts.build:demo`,自己从 `assets/` 切片或按模板约定生成试玩内容。不要第二份作者工程,不要 `dist-demo/`。
|
|
46
|
+
|
|
47
|
+
安装之后多出来、**不要打回 zip** 的:`.cgmaker/`(`origin.json` 模板身份、`game.json` 游戏正式版 / demo,见 [docs/origin.md](../../../../../docs/origin.md))、`node_modules/`、`dist/`、以及 create/init 或 `cgmaker skill` 按所选平台扇出的 `.agents/` `.cursor/` 等目录(未选平台则没有这些目录;之后可 `npx cgmaker skill --platform cursor` 补扇)。凭据在 `~/.cgmaker/`,不在工程里。
|
|
48
|
+
|
|
49
|
+
不要出现:
|
|
50
|
+
|
|
51
|
+
- 根目录 `data/`、`theme/`(进 `assets/`)
|
|
52
|
+
- `template.yaml` / `template.yml`(身份在 `package.json` 的 `slug`)
|
|
53
|
+
- 产物目录叫 `build/`、`out/`、`www/`(要发静态站只能是 `dist/`)
|
|
54
|
+
- 运行时热链远程素材(除非 skill 写明 CDN 例外)
|
|
55
|
+
- 模板根目录 `scripts/` 文件夹(和 npm scripts、`skill/scripts/` 撞车)
|
|
56
|
+
- `package.json` 设置 `bin`、写 `"packageManager"`
|
|
57
|
+
- 作者工程依赖 `@66rpg/cgmaker-template-*`(create 只拷源码)
|
|
58
|
+
|
|
59
|
+
`devDependencies` 必须有 `@66rpg/cgmaker`(脚手架写入;模板 zip 也应带上)。本仓库 `templates/` 下的样板永久 `private`,不是 npm 商品。
|
|
60
|
+
|
|
61
|
+
## package.json
|
|
62
|
+
|
|
63
|
+
作者维护,打进 zip。**不要**手写 `template_id` / `revision_id` / `owner` / `qualified_name`。不要再单独放 `template.yaml`。多出来的只有 **`slug`**。ID 怎么签发见 [docs/origin.md](../../../../../docs/origin.md)。
|
|
64
|
+
|
|
65
|
+
```json
|
|
66
|
+
{
|
|
67
|
+
"name": "my-game",
|
|
68
|
+
"slug": "react-admin",
|
|
69
|
+
"version": "1.2.0",
|
|
70
|
+
"description": "商店简介 / 列表说明",
|
|
71
|
+
"scripts": {
|
|
72
|
+
"dev": "<预览>",
|
|
73
|
+
"build": "<打包正式版到 dist/>",
|
|
74
|
+
"build:demo": "<打包试玩到同一个 dist/,会覆盖正式产物>"
|
|
75
|
+
}
|
|
76
|
+
}
|
|
77
|
+
```
|
|
78
|
+
|
|
79
|
+
- `slug` ✅ `^[a-z0-9][a-z0-9-]{0,62}$`。同一账号下唯一。安装路径后半段;**不是** `name`
|
|
80
|
+
- `version` ✅ 模板发版时作为接口 `version_name`(`--version` 可覆盖):1–16 位,仅小写字母、数字、`.`、`-`;须以字母或数字开头和结尾,不能有连续符号(如 `0.1.0`、`1.0.0-a`)。不是随意 semver。游戏 / 开源工程发版不套此格式。
|
|
81
|
+
- `description` ⭕ 商店简介;卡片标题用它(或 slug),不另设 `display_name`
|
|
82
|
+
- `name` npm 必有。**落地会改成工程目录名**,不要拿它当 slug
|
|
83
|
+
- `scripts.dev` ✅ 源码热更新。命令随栈,**名字不能改**
|
|
84
|
+
- `scripts.build` ✅ 产出正式版 `dist/`,命名见 [dist.md](dist.md)
|
|
85
|
+
- `scripts.build:demo` ✅ 产出试玩 `dist/`(同一目录,会覆盖)。发布模板时强制有这条
|
|
86
|
+
- `scripts.validate` ⭕ 仅当模板提供数据校验。只许叫 `validate`
|
|
87
|
+
- 不要 `scripts.login` / `publish`(和 npm 撞车),不要 `bin` / `packageManager`
|
|
88
|
+
|
|
89
|
+
`qualified_name` = 当前账号 `handle` + `/` + `slug`。
|
|
90
|
+
|
|
91
|
+
三件容易混的「scripts」:`package.json` 的 `"scripts"` 字段(必有,不是文件夹);`schema/logic.mjs`(可选校验);`skill/scripts/`(给 AI,不是 npm)。
|
|
92
|
+
|
|
93
|
+
```bash
|
|
94
|
+
npx cgmaker validate-template
|
|
95
|
+
npm run validate # 仅当模板提供了数据校验
|
|
96
|
+
npm run build
|
|
97
|
+
npm run build:demo # 试玩 dist/(发布模板也必须有这条脚本)
|
|
98
|
+
npx cgmaker publish # 游戏正式版:只认 dist/
|
|
99
|
+
npx cgmaker publish --demo # 试玩:先 build:demo,只认 dist/
|
|
100
|
+
npx cgmaker publish-template --version 0.1.0 --data-ver 1
|
|
101
|
+
npx cgmaker publish-template --version 0.1.0 --data-ver 1 --data-summary "示范关卡"
|
|
102
|
+
npx cgmaker publish-template --version 0.1.0 --data-ver 1 --assets C:\path\to\assets
|
|
103
|
+
npx cgmaker publish-template-data --data-ver 2 --data-summary "关卡修订"
|
|
104
|
+
npx cgmaker publish-template-data --data-ver 2 --assets C:\path\to\assets
|
|
105
|
+
```
|
|
106
|
+
|
|
107
|
+
## 指纹
|
|
108
|
+
|
|
109
|
+
指纹是模板提供文件的 SHA-256,用于判断「同一模板逻辑」还是「已经改成另一套」。zip 整包 `sha256` 见 [docs/origin.md](../../../../../docs/origin.md)。
|
|
110
|
+
|
|
111
|
+
进指纹的就是上面树里标了「进指纹」的那些。不进:整个 `assets/`、`README.md`、`package.json` 的 `name` / `slug` / 任何 `cgmaker` 元数据、`node_modules/`、`dist/`、`.git/`、`.cgmaker/`、`.agents/` 等 AI 工具目录。安装器会改包名,改名不得导致指纹变化。改 `slug` 也不是改玩法。
|
|
112
|
+
|
|
113
|
+
算法(只在 CLI 实现,本 skill 不另写一套脚本):POSIX 相对路径排序;文本按 LF 规范化后再 sha256,二进制直接哈希;用 NUL 拼接 `相对路径 + digest`,再对整段 sha256。
|
|
114
|
+
|
|
115
|
+
`publish-template` 内部计算指纹,不作为用户子命令。`validate-template` **不**因指纹相对下载时变化而失败(改玩法是允许的)。
|
|
116
|
+
|
|
117
|
+
## 模板 zip
|
|
118
|
+
|
|
119
|
+
`publish-template` 打的是源码树,不传 `.git`。Git 是可选派生,不当主键。
|
|
120
|
+
|
|
121
|
+
**不要打进代码 zip:** `assets/`、`node_modules/`、`dist/`、`.git/`、`.cgmaker/`(包内一律丢弃,防伪造 origin / game.json)、`.agents/` `.cursor/` `.claude/` 等 `skill-targets`、`preview/`、`tests/`、根目录 `scripts/`、`build/` `out/` `www/`。资源 zip 只含 `assets/`(`publish-template` / `publish-template-data` 的 `--assets` 可指定其它绝对路径,zip 内仍为 `assets/`)。
|
|
122
|
+
|
|
123
|
+
平台 skill(`cgmaker`、`cgmaker-template-spec`、`cgmaker-identity`)来自 `@66rpg/cgmaker` 包,不来自模板 zip。zip 里的 `skill/` 只可能是玩法 skill。
|
|
124
|
+
|
|
125
|
+
## 改哪里
|
|
126
|
+
|
|
127
|
+
子目录以该模板 `AGENTS.md` 为准。样板:关卡/文案/数值 → `assets/data/`;换皮/槽位 → `assets/theme/`(若有);换图/音 → `assets/images/` 等;规则/交互/流程/UI → `src/`(完全可写)。
|