@66rpg/cgmaker-create 0.1.23 → 0.1.24
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 +6 -8
- package/dist/index.js +19 -19
- package/package.json +1 -1
- package/skill/cgmaker-create/SKILL.md +25 -28
package/README.md
CHANGED
|
@@ -3,22 +3,20 @@
|
|
|
3
3
|
从 cgmaker 托管模板创建带完整源码的游戏工程。
|
|
4
4
|
|
|
5
5
|
```bash
|
|
6
|
-
npx @66rpg/cgmaker-create@latest
|
|
7
|
-
npx @66rpg/cgmaker-create@latest
|
|
8
|
-
npx @66rpg/cgmaker-create@latest
|
|
6
|
+
npx @66rpg/cgmaker-create@latest <用户名/slug> [目录]
|
|
7
|
+
npx @66rpg/cgmaker-create@latest <用户名/slug@版本> [目录]
|
|
8
|
+
npx @66rpg/cgmaker-create@latest <用户名/slug@版本> [目录] --with-assets <数据包ID>
|
|
9
9
|
npx @66rpg/cgmaker-create@latest <模板id或版本id> [目录]
|
|
10
10
|
npx @66rpg/cgmaker-create@latest <引用> [目录] --skill-platform cursor
|
|
11
11
|
npx @66rpg/cgmaker-create@latest <引用> [目录] --skill-all
|
|
12
|
-
npx @66rpg/cgmaker-create@latest --agent --json <用户名/模板名>
|
|
13
|
-
npx @66rpg/cgmaker-create@latest --agent --json <用户名/模板名> <用户说的目录> --skill-platform cursor
|
|
14
12
|
```
|
|
15
13
|
|
|
16
|
-
|
|
14
|
+
第一位置是模板引用,原样交给平台:`用户名/slug`(最新版)、`用户名/slug@版本`、`用户名/slug@latest`,或平台模板 id / 版本 id。不要用平台模板名 `name`。要素材时加 `--with-assets <数据包ID>`;不带则只下代码。
|
|
17
15
|
|
|
18
|
-
|
|
16
|
+
未指定目录时:你在屏幕前操作会询问工程建在哪个文件夹(回车无效,必须输入名字或路径);编辑器里跑命令会停下来问你工程放哪,不要自动起文件夹名。
|
|
19
17
|
|
|
20
18
|
未指定 `--skill-platform` / `--skill-all` 时:交互会询问要把 AI 说明安装到哪个编辑器(回车无效,跳过须输入 `s`),脚本默认不安装。已有工程补装:`npx cgmaker skill --platform cursor` 或 `--all`。
|
|
21
19
|
|
|
22
|
-
|
|
20
|
+
你在屏幕前操作时若检测到新版本会询问是否更新。编辑器里跑命令会停下来问你要不要更新;同意后再按提示继续。
|
|
23
21
|
|
|
24
22
|
暂无云端种子时用 `--from-dir`(不能同时 `--with-assets`)。从本地文件夹拷来的工程还没连上平台,不能 `publish-template`。
|
package/dist/index.js
CHANGED
|
@@ -1,33 +1,33 @@
|
|
|
1
|
-
import
|
|
1
|
+
import f from"node:fs";import g from"node:path";import ct from"node:readline";import{fileURLToPath as On}from"node:url";import{spawnSync as Fn}from"node:child_process";import{spawnSync as yt}from"node:child_process";var Ae={_comment:"cgmaker-create \u7528\u6237\u53EF\u89C1\u6587\u6848\u3002\u5360\u4F4D\u7B26 {name}\u3002",help:{body:{code:"",text:`cgmaker-create \u2014 \u4ECE\u6258\u7BA1\u6A21\u677F\u521B\u5EFA\u5E26\u5B8C\u6574\u6E90\u7801\u7684\u6E38\u620F\u5DE5\u7A0B
|
|
2
2
|
|
|
3
3
|
\u7528\u6CD5:
|
|
4
|
-
npx @66rpg/cgmaker-create@latest <\u7528\u6237\u540D
|
|
5
|
-
npx @66rpg/cgmaker-create@latest <\u7528\u6237\u540D
|
|
6
|
-
npx @66rpg/cgmaker-create@latest <\u7528\u6237\u540D
|
|
4
|
+
npx @66rpg/cgmaker-create@latest <\u7528\u6237\u540D/slug> [\u76EE\u5F55]
|
|
5
|
+
npx @66rpg/cgmaker-create@latest <\u7528\u6237\u540D/slug@\u7248\u672C> [\u76EE\u5F55]
|
|
6
|
+
npx @66rpg/cgmaker-create@latest <\u7528\u6237\u540D/slug@\u7248\u672C> [\u76EE\u5F55] --with-assets <\u6570\u636E\u5305ID>
|
|
7
7
|
npx @66rpg/cgmaker-create@latest <\u6A21\u677Fid\u6216\u7248\u672Cid> [\u76EE\u5F55]
|
|
8
8
|
npx @66rpg/cgmaker-create@latest <\u5F15\u7528> [\u76EE\u5F55] --from-dir <\u672C\u5730\u6A21\u677F\u76EE\u5F55>
|
|
9
9
|
npx @66rpg/cgmaker-create@latest <\u5F15\u7528> [\u76EE\u5F55] --skill-platform cursor
|
|
10
10
|
npx @66rpg/cgmaker-create@latest <\u5F15\u7528> [\u76EE\u5F55] --skill-all
|
|
11
11
|
|
|
12
|
-
\u7B2C\u4E00\u4F4D\u7F6E\u662F\u6A21\u677F\u5F15\u7528\uFF0C\u539F\u6837\u4EA4\u7ED9\u5E73\u53F0\u89E3\u6790\uFF1A\u7528\u6237\u540D
|
|
12
|
+
\u7B2C\u4E00\u4F4D\u7F6E\u662F\u6A21\u677F\u5F15\u7528\uFF0C\u539F\u6837\u4EA4\u7ED9\u5E73\u53F0\u89E3\u6790\uFF1A\u7528\u6237\u540D/slug\uFF08\u6700\u65B0\u7248\uFF09\u3001\u7528\u6237\u540D/slug@\u7248\u672C\u3001\u7528\u6237\u540D/slug@latest\uFF0C\u6216\u5E73\u53F0\u6A21\u677F id / \u7248\u672C id\u3002\u4E0D\u8981\u7528\u5E73\u53F0\u6A21\u677F\u540D name\u3002
|
|
13
13
|
\u8981\u4E0B\u8F7D\u7D20\u6750\u5305\u65F6\u5FC5\u987B\u5E26 --with-assets <\u6570\u636E\u5305ID>\u3002\u4E0D\u5E26\u5219\u53EA\u4E0B\u4EE3\u7801\uFF0C\u4E0D\u4F1A\u5217\u51FA\u6216\u9ED8\u8BA4\u4E0B\u8F7D\u7D20\u6750\u3002
|
|
14
|
-
\u672A\u6307\u5B9A\u76EE\u5F55\u65F6\uFF1A\u4F60\u5728\u5C4F\u5E55\u524D\u64CD\u4F5C\u4F1A\u8BE2\u95EE\u5DE5\u7A0B\u5EFA\u5728\u54EA\u4E2A\u6587\u4EF6\u5939\uFF08\u56DE\u8F66\u65E0\u6548\uFF0C\u5FC5\u987B\u8F93\u5165\u540D\u5B57\u6216\u8DEF\u5F84\uFF09\
|
|
14
|
+
\u672A\u6307\u5B9A\u76EE\u5F55\u65F6\uFF1A\u4F60\u5728\u5C4F\u5E55\u524D\u64CD\u4F5C\u4F1A\u8BE2\u95EE\u5DE5\u7A0B\u5EFA\u5728\u54EA\u4E2A\u6587\u4EF6\u5939\uFF08\u56DE\u8F66\u65E0\u6548\uFF0C\u5FC5\u987B\u8F93\u5165\u540D\u5B57\u6216\u8DEF\u5F84\uFF09\uFF1B\u7F16\u8F91\u5668\u91CC\u8DD1\u547D\u4EE4\u4F1A\u81EA\u52A8\u8D70\u4FE1\u5C01\uFF0C\u7F3A\u76EE\u5F55\u4F1A\u505C\u4E0B\u8BA9\u5BF9\u8BDD\u8BE2\u95EE\uFF0C\u4E0D\u8981\u81EA\u52A8\u8D77\u6587\u4EF6\u5939\u540D\u3002
|
|
15
15
|
\u672A\u6307\u5B9A skill \u65F6\uFF1A\u4EA4\u4E92\u7EC8\u7AEF\u4F1A\u8BE2\u95EE\u8981\u628A AI \u8BF4\u660E\u5B89\u88C5\u5230\u54EA\u4E2A\u7F16\u8F91\u5668\uFF08\u56DE\u8F66\u65E0\u6548\uFF0C\u8DF3\u8FC7\u987B\u8F93\u5165 s\uFF1B\u4E4B\u540E\u53EF\u5728\u5DE5\u7A0B\u76EE\u5F55\u6267\u884C cgmaker skill\uFF09\uFF1B\u811A\u672C\u73AF\u5883\u9ED8\u8BA4\u4E0D\u5B89\u88C5\u3002
|
|
16
16
|
--skill-platform \u53EA\u5B89\u88C5\u5230\u8BE5\u7F16\u8F91\u5668\uFF08\u5982 cursor\uFF09\uFF1B--skill-all \u5B89\u88C5\u5230\u5168\u90E8\u7F16\u8F91\u5668\u3002\u5DF2\u6709\u5DE5\u7A0B\u8865\u88C5\u7528 npx cgmaker skill --platform cursor \u6216 --all\u3002
|
|
17
17
|
\u672C\u5305\u5185\u7F6E skill \u5728 skill/cgmaker-create/SKILL.md\uFF0C\u8BF4\u660E\u53C2\u6570\u3001\u7528\u6CD5\u548C\u7EA6\u675F\u3002
|
|
18
18
|
\u6682\u65E0\u4E91\u7AEF\u6A21\u677F\u79CD\u5B50\u65F6\uFF0C\u7528 --from-dir\u3002\u53D1\u73B0\u65B0\u7248\uFF1A\u4F60\u5728\u5C4F\u5E55\u524D\u64CD\u4F5C\u65F6\u4F1A\u95EE\u662F\u5426\u66F4\u65B0\uFF1BAgent \u4F1A\u505C\u4E0B\u6765\u95EE\u4F60\u8981\u4E0D\u8981\u66F4\u65B0\uFF0C\u540C\u610F\u540E --apply-update\uFF0C\u62D2\u7EDD --skip-update\u3002
|
|
19
|
-
`,comment:"\u6574\u6BB5 --help"},contact:{code:"",text:"\u9700\u8981\u8054\u7CFB\u5BA2\u670D{contact}",comment:"\u5E2E\u52A9\u9875\u5E95\u90E8\uFF1A\u65E0\u72EC\u7ACB\u8054\u7CFB\u6E20\u9053\u9875\uFF0C\u5F15\u5BFC\u8054\u7CFB\u5BA2\u670D"}},err:{from_dir_need_path:{code:"",text:"--from-dir \u9700\u8981\u6A21\u677F\u76EE\u5F55\u8DEF\u5F84",comment:"\u53C2\u6570\u9519\u8BEF"},data_id_removed:{code:"",text:"\u8BF7\u7528 --with-assets <\u6570\u636E\u5305ID>\uFF0C\u5DF2\u4E0D\u518D\u652F\u6301 --data-id",comment:"\u53C2\u6570\u9519\u8BEF"},with_assets_need:{code:"",text:"--with-assets \u9700\u8981\u8D44\u6E90\u5305 ID",comment:"\u53C2\u6570\u9519\u8BEF"},skill_platform_need:{code:"",text:"--skill-platform \u9700\u8981\u7F16\u8F91\u5668\u540D\uFF08\u5982 cursor\uFF09",comment:"\u53C2\u6570\u9519\u8BEF"},skill_conflict:{code:"",text:"--skill-platform \u4E0E --skill-all \u4E0D\u80FD\u540C\u65F6\u4F7F\u7528",comment:"\u53C2\u6570\u9519\u8BEF"},cleared:{code:"",text:"\u5DF2\u6E05\u7A7A {dir}",comment:"\u5931\u8D25\u56DE\u6EDA"},clear_failed:{code:"",text:"\u65E0\u6CD5\u6E05\u7A7A {dir}\uFF1A{e}",comment:"\u5931\u8D25\u56DE\u6EDA\uFF1B{e} \u4E3A\u4E2D\u6587\u539F\u56E0\uFF0C\u4E0D\u8981\u586B\u7CFB\u7EDF Error.message"},sys_denied:{code:"",text:"\u6CA1\u6709\u6743\u9650\uFF0C\u6216\u6587\u4EF6\u88AB\u5360\u7528",comment:"EPERM / EACCES\uFF0C\u4E0D\u6253\u5370\u7CFB\u7EDF\u8DEF\u5F84"},sys_missing:{code:"",text:"\u8DEF\u5F84\u4E0D\u5B58\u5728",comment:"ENOENT"},sys_busy:{code:"",text:"\u76EE\u5F55\u975E\u7A7A\u6216\u6587\u4EF6\u6B63\u5728\u4F7F\u7528",comment:"EBUSY / ENOTEMPTY"},sys_type:{code:"",text:"\u8DEF\u5F84\u7C7B\u578B\u4E0D\u6B63\u786E",comment:"ENOTDIR / EISDIR"},sys_invalid:{code:"",text:"\u8DEF\u5F84\u65E0\u6548",comment:"EINVAL"},sys_too_many:{code:"",text:"\u6253\u5F00\u7684\u6587\u4EF6\u8FC7\u591A",comment:"EMFILE / ENFILE"},sys_unknown:{code:"",text:"\u7CFB\u7EDF\u62D2\u7EDD\u4E86\u8FD9\u6B21\u64CD\u4F5C",comment:"\u5176\u5B83\u7CFB\u7EDF\u9519\u8BEF\uFF0C\u4E0D\u6253\u5370 Error.message \u4EE5\u514D\u4E71\u7801"},owner_slug:{code:"",text:"\u6A21\u677F\u5F15\u7528\u65E0\u6548\u3002\u8BF7\u7528 \u7528\u6237\u540D/\u6A21\u677F\u540D\uFF0C\u6216\u5E73\u53F0\u6A21\u677F id / \u7248\u672C id",comment:"\u53C2\u6570\u9519\u8BEF"},data_id_from_dir:{code:"",text:"--with-assets \u4E0D\u80FD\u4E0E --from-dir \u540C\u65F6\u4F7F\u7528",comment:"\u53C2\u6570\u9519\u8BEF"},invalid_data_id:{code:"",text:"\u65E0\u6548\u7684\u8D44\u6E90\u5305 ID\uFF08data_id\uFF09: {id}",comment:"\u53C2\u6570\u9519\u8BEF"},from_dir_not_template:{code:"",text:"--from-dir \u4E0D\u662F\u6A21\u677F\u76EE\u5F55: {dir}",comment:"\u53C2\u6570\u9519\u8BEF"},need_dest_no_tty:{code:"",text:"\u8BF7\u6307\u5B9A\u8981\u628A\u5DE5\u7A0B\u5EFA\u5728\u54EA\u4E2A\u6587\u4EF6\u5939\u3002",comment:"\u53C2\u6570\u9519\u8BEF"},dest_exists:{code:"",text:"\u8FD9\u4E2A\u6587\u4EF6\u5939\u5DF2\u7ECF\u6709\u4E1C\u897F\u4E86\uFF0C\u6362\u4E2A\u540D\u5B57\u6216\u8DEF\u5F84\u518D\u521B\u5EFA\uFF1A{dir}",comment:"\u53C2\u6570\u9519\u8BEF"},npm_install:{code:"",text:"npm install \u5931\u8D25",comment:"\u843D\u5730\u5931\u8D25"},bin_missing:{code:"",text:"\u627E\u4E0D\u5230 {js}",comment:"\u843D\u5730\u5931\u8D25"},run_js:{code:"",text:"\u65E0\u6CD5\u8FD0\u884C {js}: {e}",comment:"\u843D\u5730\u5931\u8D25"},init_failed:{code:"",text:"cgmaker init \u5931\u8D25",comment:"\u843D\u5730\u5931\u8D25"},npm_install_again:{code:"",text:"init \u540E npm install \u5931\u8D25",comment:"\u843D\u5730\u5931\u8D25"},run_npm:{code:"",text:"\u65E0\u6CD5\u8FD0\u884C {cmd}: {e}",comment:"npm \u542F\u52A8\u5931\u8D25"},need_input:{code:"11",text:"\u7F3A\u5C11\u9700\u8981\u5411\u7528\u6237\u786E\u8BA4\u7684\u53C2\u6570\u3002\u8BF7\u8BE2\u95EE\u7528\u6237\u540E\uFF0C\u628A\u7B54\u6848\u53D8\u6210\u547D\u4EE4\u884C\u65D7\u6807\u518D\u91CD\u8DD1\u3002",comment:"Agent \u9000\u51FA\u7801 11"},update_available:{code:"10",text:"\u68C0\u6D4B\u5230 cgmaker \u65B0\u7248\u672C\uFF0C\u63A8\u8350\u66F4\u65B0\u3002\u8BF7\u8BE2\u95EE\u7528\u6237\u662F\u5426\u73B0\u5728\u66F4\u65B0\u3002",comment:"Agent \u9000\u51FA\u7801 10"},update_use_latest:{code:"",text:"\u5F53\u524D\u76EE\u5F55\u6CA1\u6709 package.json\uFF0C\u65E0\u6CD5\u5199\u5165\u5DE5\u7A0B\u4F9D\u8D56\u3002\u8BF7\u6539\u7528 npx @66rpg/cgmaker-create@latest \u518D\u6267\u884C\u3002",comment:"create --apply-update \u65E0\u5DE5\u7A0B"},update_failed:{code:"",text:"\u66F4\u65B0\u5931\u8D25\uFF0C\u5DF2\u8DF3\u8FC7\uFF0C\u7EE7\u7EED\u6267\u884C\u539F\u547D\u4EE4\u3002",comment:"npm install \u5931\u8D25"}},prompt:{dest_dir:{code:"",text:"\u5DE5\u7A0B\u8981\u5EFA\u5728\u54EA\u4E2A\u6587\u4EF6\u5939\uFF1F\u8BF7\u8BF4\u4E00\u4E2A\u65B0\u6587\u4EF6\u5939\u7684\u540D\u5B57\uFF0C\u6216\u5B8C\u6574\u8DEF\u5F84\u3002\u4E0D\u8981\u7528\u6A21\u677F id \u5F53\u6587\u4EF6\u5939\u540D\uFF0C\u9664\u975E\u7528\u6237\u81EA\u5DF1\u8FD9\u4E48\u8BF4\u3002",comment:"Agent \u8BE2\u95EE\u843D\u5730\u76EE\u5F55"},dest_dir_ask:{code:"",text:"\u5DE5\u7A0B\u8981\u5EFA\u5728\u54EA\u4E2A\u6587\u4EF6\u5939\uFF1F\u8BF7\u8F93\u5165\u65B0\u6587\u4EF6\u5939\u7684\u540D\u5B57\u6216\u5B8C\u6574\u8DEF\u5F84\uFF08\u4F8B\u5982 {suggested}\uFF09\u3002\u76F4\u63A5\u56DE\u8F66\u65E0\u6548\uFF1A",comment:"TTY \u8BE2\u95EE\u843D\u5730\u76EE\u5F55"},dest_empty:{code:"",text:"\u5FC5\u987B\u6307\u5B9A\u6587\u4EF6\u5939\u3002\u8BF7\u8F93\u5165\u540D\u5B57\u6216\u5B8C\u6574\u8DEF\u5F84\uFF0C\u4E0D\u8981\u76F4\u63A5\u56DE\u8F66\u3002",comment:"TTY \u76EE\u5F55\u7A7A\u56DE\u8F66"},dest_invalid:{code:"",text:"\u8FD9\u4E2A\u4E0D\u50CF\u6587\u4EF6\u5939\u540D\u5B57\u3002\u8BF7\u8F93\u5165\u65B0\u6587\u4EF6\u5939\u7684\u540D\u5B57\uFF0C\u6216\u5B8C\u6574\u8DEF\u5F84\u3002",comment:"TTY \u76EE\u5F55\u65E0\u6548"},skill:{code:"",text:"\u8981\u628A AI \u8BF4\u660E\u5B89\u88C5\u5230\u54EA\u4E2A\u7F16\u8F91\u5668\uFF1F",comment:"Agent / TTY \u9009\u5E73\u53F0"},skill_detected:{code:"",text:"\u68C0\u6D4B\u5230\u5F53\u524D\u4F7F\u7528\u7684\u7F16\u8F91\u5668\u662F {id}\u3002\u8981\u628A AI \u8BF4\u660E\u5B89\u88C5\u5230\u54EA\u4E2A\u7F16\u8F91\u5668\uFF1F",comment:"Agent \u9009\u5E73\u53F0\uFF0C\u5DF2\u63A2\u6D4B\u5230\u5BBF\u4E3B"},skill_current_suffix:{code:"",text:"\uFF08\u5F53\u524D\uFF09",comment:"\u63A2\u6D4B\u5230\u7684\u7F16\u8F91\u5668\u9009\u9879\u540E\u7F00"},skill_item:{code:"",text:" {n}) {id}",comment:"TTY skill \u9009\u9879"},skill_item_current:{code:"",text:" {n}) {id}{mark}",comment:"TTY skill \u5F53\u524D\u7F16\u8F91\u5668\u9009\u9879"},skill_all:{code:"",text:" 0) \u5168\u90E8\u7F16\u8F91\u5668",comment:"TTY skill \u5168\u90E8"},skill_skip:{code:"",text:" s) \u8DF3\u8FC7\uFF08\u4E4B\u540E\u53EF\u5728\u5DE5\u7A0B\u76EE\u5F55\u6267\u884C cgmaker skill \u518D\u5B89\u88C5\uFF09",comment:"TTY skill \u8DF3\u8FC7"},skill_ask:{code:"",text:"\u8BF7\u8F93\u5165\u5E8F\u53F7\u3001\u7F16\u8F91\u5668\u540D\u30010\uFF08\u5168\u90E8\uFF09\u6216 s\uFF08\u8DF3\u8FC7\uFF09\u3002\u76F4\u63A5\u56DE\u8F66\u65E0\u6548\uFF1A",comment:"TTY skill \u8F93\u5165\u63D0\u793A"},skill_empty:{code:"",text:"\u56DE\u8F66\u4E0D\u4F1A\u8DF3\u8FC7\u3002\u8BF7\u8F93\u5165\u5E8F\u53F7\u3001\u7F16\u8F91\u5668\u540D\u30010 \u6216 s\u3002",comment:"TTY skill \u7A7A\u56DE\u8F66"},skill_invalid:{code:"",text:"\u65E0\u6548\u9009\u62E9\u3002\u8BF7\u8F93\u5165\u5217\u8868\u4E2D\u7684\u5E8F\u53F7\u3001\u7F16\u8F91\u5668\u540D\u30010 \u6216 s\u3002",comment:"TTY skill \u65E0\u6548\u8F93\u5165"},ask:{code:"",text:"{question} ({fallback}): ",comment:"readline \u63D0\u95EE\u683C\u5F0F"},update_ask:{code:"",text:"\u68C0\u6D4B\u5230\u65B0\u7248\u672C\uFF0C\u63A8\u8350\u66F4\u65B0\uFF0C\u662F\u5426\u73B0\u5728\u66F4\u65B0\uFF1F\uFF08\u56DE\u8F66=\u662F\uFF0Cn=\u5426\uFF09",comment:"TTY \u66F4\u65B0\u786E\u8BA4"}},ok:{written:{code:"",text:"\u5DF2\u5199\u5165\u5DE5\u7A0B {dir}",comment:"\u843D\u5730\u6210\u529F"},installed:{code:"",text:"\u5DF2\u5B89\u88C5 @66rpg/cgmaker \u5E76\u6267\u884C cgmaker init\u3002",comment:"\u843D\u5730\u6210\u529F"},local_origin:{code:"",text:"\u672C\u5730 --from-dir \u7684\u6A21\u677F ID\uFF08origin.template_id\uFF09\u4E3A local\uFF0C\u4E0D\u80FD\u76F4\u63A5 publish-template \u5230\u5E73\u53F0\u3002",comment:"\u672C\u5730\u6A21\u677F\u63D0\u9192"},next:{code:"",text:"\u63A5\u7740: cd \u8BE5\u76EE\u5F55 && npm run dev",comment:"\u843D\u5730\u6210\u529F\u4E0B\u4E00\u6B65"},update_installing:{code:"",text:"\u6B63\u5728\u628A cgmaker \u76F8\u5173\u5305\u66F4\u65B0\u5230\u6700\u65B0\u2026",comment:"npm install \u524D"},update_done:{code:"",text:"\u5DF2\u66F4\u65B0\u3002\u5F53\u524D\u8FDB\u7A0B\u4ECD\u662F\u65E7\u4EE3\u7801\uFF0C\u8BF7\u91CD\u65B0\u6267\u884C\u521A\u624D\u7684\u547D\u4EE4\u3002",comment:"\u66F4\u65B0\u6210\u529F\u540E\u9000\u51FA"}}};function ut(){let e={...we};return delete e._comment,e}var dt=ut();function o(e,t,n){let r=dt[e]?.[t];if(!r?.text)throw new Error(`missing create message ${e}.${t}`);let s=r.text;if(n)for(let[i,c]of Object.entries(n))s=s.split(`{${i}}`).join(String(c));return s}function pt(e){return e&&typeof e=="object"&&"code"in e&&typeof e.code=="string"?e.code:(e instanceof Error?e.message:String(e)).match(/\b(EPERM|EACCES|ENOENT|EBUSY|ENOTEMPTY|ENOTDIR|EISDIR|EINVAL|EMFILE|ENFILE)\b/)?.[1]??""}function ft(e){return e?e.includes("\uFFFD")||e.includes("\\\\?\\"):!1}function N(e){switch(pt(e)){case"EPERM":case"EACCES":return o("err","sys_denied");case"ENOENT":return o("err","sys_missing");case"EBUSY":case"ENOTEMPTY":return o("err","sys_busy");case"ENOTDIR":case"EISDIR":return o("err","sys_type");case"EINVAL":return o("err","sys_invalid");case"EMFILE":case"ENFILE":return o("err","sys_too_many");default:return o("err","sys_unknown")}}function Ee(e){let t=e instanceof Error?e.message:String(e??"");return ft(t)?N(e):t}function Ce(){return process.platform==="win32"?"npm.cmd":"npm"}function P(e,t={}){let n=process.platform==="win32",r=mt(Ce(),e,{windowsHide:n,...t,shell:n});if(r.error)throw new Error(o("err","run_npm",{cmd:Ce(),e:N(r.error)}));return r}import q from"node:fs";import gt from"node:os";import M from"node:path";import{fileURLToPath as kt}from"node:url";var V="huanguang",Ae="cgmaker_npm",be="cgmaker_create",_t=`https://fx-it.66rpg.com:8206/sa?project=${V}`;function Z(e,t=V){try{let n=new URL(e);return n.protocol==="https:"&&n.hostname==="fx-it.66rpg.com"&&n.port==="8206"&&n.pathname==="/sa"&&n.searchParams.get("project")===t&&!n.username&&!n.password}catch{return!1}}function Y(e,t){return String(e[t]??"").trim().toLowerCase()}function yt(e){let t=Y(e,"CGMAKER_NO_ANALYTICS");if(t==="1"||t==="true")return!0;let n=Y(e,"CGMAKER_ANALYTICS");if(n==="0"||n==="false")return!0;let r=Y(e,"CI");return!!(r==="true"||r==="1"||e.NODE_TEST_CONTEXT)}function St(){let e=M.dirname(kt(import.meta.url));for(;;){if(q.existsSync(M.join(e,"package.json")))return e;let t=M.dirname(e);if(t===e)return e;e=t}}function ht(){try{let e=JSON.parse(q.readFileSync(M.join(St(),"package.json"),"utf8"));return typeof e.version=="string"?e.version:""}catch{return""}}function xt(e){try{let t=M.join(e,".cgmaker","config.json");if(!q.existsSync(t))return;let n=JSON.parse(q.readFileSync(t,"utf8"));return n&&typeof n=="object"?n:void 0}catch{return}}function wt(e){let t=e?.web_config,n=typeof t?.type=="string"?t.type:"",r=typeof t?.base_cg=="string"?t.base_cg:"";return n&&n!=="1"||r.toLowerCase().includes("test")?"test":"release"}function Et(e){let t=e?.env??process.env,n=e?.homeDir??gt.homedir(),r=e?.fileConfig??(e?.skipFile?void 0:xt(n)),s=wt(r),i=r?.sensorsAnalytics,c=!0;typeof i?.enabled=="boolean"&&(c=i.enabled),yt(t)&&(c=!1);let m=_t,S=typeof i?.serverUrl=="string"?i.serverUrl.trim():"";S&&Z(S)&&(m=S);let l=typeof t.CGMAKER_SENSORS_URL=="string"?t.CGMAKER_SENSORS_URL.trim():"";l&&Z(l)&&(m=l),Z(m)||(c=!1);let _=Y(t,"CGMAKER_ANALYTICS_LOG"),k=s!=="release"&&(i?.showLog===!0||_==="1"||_==="true");return{enabled:c,serverUrl:m,showLog:k,deployEnv:s,releaseId:e?.releaseId??ht()}}var ee;function j(){return ee||(ee=Et()),ee}var Ct="https://test-cg-maker.66rpg.com/common/public-info/test.json",At="https://cg-maker.66rpg.com/common/public-info/release.json",bt=5e3,$,te;function vt(e=j().deployEnv){return e==="test"?Ct:At}function Rt(e){let t=e.trim().replace(/^\uFEFF/,"").trim();if(!t||t.startsWith("<"))return{};let n=t;for(let r=0;r<3&&typeof n=="string";r+=1)try{n=JSON.parse(n.trim())}catch{return{}}return Tt(n)}function Tt(e){let t={};return Re(e,t),t}function Re(e,t){if(!e||typeof e!="object")return;if(Array.isArray(e)){for(let r of e)ve(t,r);return}let n=e;if(Array.isArray(n.items))for(let r of n.items)ve(t,r);for(let r of["data","list","result","content","payload"]){let s=n[r];s&&typeof s=="object"&&Re(s,t)}for(let[r,s]of Object.entries(n)){if(r==="items"||r==="data"||r==="list"||r==="result"||r==="content"||r==="payload")continue;let i=Te(s);i&&(t[r.trim().toLowerCase()]||=i)}}function ve(e,t){if(!t||typeof t!="object"||Array.isArray(t))return;let n=t,r=String(n.keyName??n.key_name??"").trim().toLowerCase();if(!r)return;let s=Te(n.keyValue??n.key_value??n[r]);s&&(e[r]||=s)}function Te(e){return typeof e=="string"?e.trim():typeof e=="number"&&Number.isFinite(e)?String(e):""}function It(e=$??{}){let t=(e.email??"").trim(),n=(e.qq??"").trim();return t&&n?`\uFF08\u90AE\u7BB1 ${t}\uFF0CQQ ${n}\uFF09`:t?`\uFF08\u90AE\u7BB1 ${t}\uFF09`:n?`\uFF08QQ ${n}\uFF09`:""}function Ie(e,t){return e.split("{contact}").join(It(t??$??{}))}async function ne(){if($===void 0){if(process.env.NODE_TEST_CONTEXT){$={};return}te||(te=Nt()),$=await te}}async function Nt(){let e=new AbortController,t=setTimeout(()=>e.abort(),bt);try{let n=await fetch(vt(),{signal:e.signal,headers:{Accept:"application/json,text/plain,*/*","User-Agent":"cgmaker"}});return n.ok?Rt(await n.text()):{}}catch{return{}}finally{clearTimeout(t)}}import O from"node:fs";import Pt from"node:os";import T from"node:path";import jt from"node:readline";import{fileURLToPath as Ot}from"node:url";var je=["@66rpg/cgmaker","@66rpg/cgmaker-create","@66rpg/cgmaker-win32-x64"],Ft=1440*60*1e3;function Dt(e,t){let n=e.split(".").map(i=>Number.parseInt(i,10)||0),r=t.split(".").map(i=>Number.parseInt(i,10)||0),s=Math.max(n.length,r.length);for(let i=0;i<s;i++){let c=n[i]??0,m=r[i]??0;if(c>m)return!0;if(c<m)return!1}return!1}function re(e=Pt.homedir()){return T.join(e,".cgmaker","update-check.json")}function Lt(e=re()){try{let t=JSON.parse(O.readFileSync(e,"utf8"));return!t||typeof t.checkedAt!="number"||typeof t.latest!="object"?null:t}catch{return null}}function W(e,t=re()){O.mkdirSync(T.dirname(t),{recursive:!0}),O.writeFileSync(t,`${JSON.stringify(e,null,2)}
|
|
20
|
-
`)}function
|
|
21
|
-
`)[0]?.trim();r.status===0&&
|
|
22
|
-
`)}function
|
|
23
|
-
`),
|
|
24
|
-
${
|
|
25
|
-
`,{encoding:"utf8",flag:"wx"}),I=r,r}catch{try{if(F.existsSync(n)){let r=F.readFileSync(n,"utf8").trim();if(r)return I=r,r}}catch{}return I=
|
|
26
|
-
`}function
|
|
27
|
-
`)}function
|
|
28
|
-
`),
|
|
19
|
+
`,comment:"\u6574\u6BB5 --help"},contact:{code:"",text:"\u9700\u8981\u8054\u7CFB\u5BA2\u670D{contact}",comment:"\u5E2E\u52A9\u9875\u5E95\u90E8\uFF1A\u65E0\u72EC\u7ACB\u8054\u7CFB\u6E20\u9053\u9875\uFF0C\u5F15\u5BFC\u8054\u7CFB\u5BA2\u670D"}},err:{from_dir_need_path:{code:"",text:"--from-dir \u9700\u8981\u6A21\u677F\u76EE\u5F55\u8DEF\u5F84",comment:"\u53C2\u6570\u9519\u8BEF"},data_id_removed:{code:"",text:"\u8BF7\u7528 --with-assets <\u6570\u636E\u5305ID>\uFF0C\u5DF2\u4E0D\u518D\u652F\u6301 --data-id",comment:"\u53C2\u6570\u9519\u8BEF"},with_assets_need:{code:"",text:"--with-assets \u9700\u8981\u8D44\u6E90\u5305 ID",comment:"\u53C2\u6570\u9519\u8BEF"},skill_platform_need:{code:"",text:"--skill-platform \u9700\u8981\u7F16\u8F91\u5668\u540D\uFF08\u5982 cursor\uFF09",comment:"\u53C2\u6570\u9519\u8BEF"},skill_conflict:{code:"",text:"--skill-platform \u4E0E --skill-all \u4E0D\u80FD\u540C\u65F6\u4F7F\u7528",comment:"\u53C2\u6570\u9519\u8BEF"},cleared:{code:"",text:"\u5DF2\u6E05\u7A7A {dir}",comment:"\u5931\u8D25\u56DE\u6EDA"},clear_failed:{code:"",text:"\u65E0\u6CD5\u6E05\u7A7A {dir}\uFF1A{e}",comment:"\u5931\u8D25\u56DE\u6EDA\uFF1B{e} \u4E3A\u4E2D\u6587\u539F\u56E0\uFF0C\u4E0D\u8981\u586B\u7CFB\u7EDF Error.message"},sys_denied:{code:"",text:"\u6CA1\u6709\u6743\u9650\uFF0C\u6216\u6587\u4EF6\u88AB\u5360\u7528",comment:"EPERM / EACCES\uFF0C\u4E0D\u6253\u5370\u7CFB\u7EDF\u8DEF\u5F84"},sys_missing:{code:"",text:"\u8DEF\u5F84\u4E0D\u5B58\u5728",comment:"ENOENT"},sys_busy:{code:"",text:"\u76EE\u5F55\u975E\u7A7A\u6216\u6587\u4EF6\u6B63\u5728\u4F7F\u7528",comment:"EBUSY / ENOTEMPTY"},sys_type:{code:"",text:"\u8DEF\u5F84\u7C7B\u578B\u4E0D\u6B63\u786E",comment:"ENOTDIR / EISDIR"},sys_invalid:{code:"",text:"\u8DEF\u5F84\u65E0\u6548",comment:"EINVAL"},sys_too_many:{code:"",text:"\u6253\u5F00\u7684\u6587\u4EF6\u8FC7\u591A",comment:"EMFILE / ENFILE"},sys_unknown:{code:"",text:"\u7CFB\u7EDF\u62D2\u7EDD\u4E86\u8FD9\u6B21\u64CD\u4F5C",comment:"\u5176\u5B83\u7CFB\u7EDF\u9519\u8BEF\uFF0C\u4E0D\u6253\u5370 Error.message \u4EE5\u514D\u4E71\u7801"},owner_slug:{code:"",text:"\u6A21\u677F\u5F15\u7528\u65E0\u6548\u3002\u8BF7\u7528 \u7528\u6237\u540D/slug\uFF0C\u6216\u5E73\u53F0\u6A21\u677F id / \u7248\u672C id",comment:"\u53C2\u6570\u9519\u8BEF"},data_id_from_dir:{code:"",text:"--with-assets \u4E0D\u80FD\u4E0E --from-dir \u540C\u65F6\u4F7F\u7528",comment:"\u53C2\u6570\u9519\u8BEF"},invalid_data_id:{code:"",text:"\u65E0\u6548\u7684\u8D44\u6E90\u5305 ID\uFF08data_id\uFF09: {id}",comment:"\u53C2\u6570\u9519\u8BEF"},from_dir_not_template:{code:"",text:"--from-dir \u4E0D\u662F\u6A21\u677F\u76EE\u5F55: {dir}",comment:"\u53C2\u6570\u9519\u8BEF"},need_dest_no_tty:{code:"",text:"\u8BF7\u6307\u5B9A\u8981\u628A\u5DE5\u7A0B\u5EFA\u5728\u54EA\u4E2A\u6587\u4EF6\u5939\u3002",comment:"\u53C2\u6570\u9519\u8BEF"},dest_exists:{code:"",text:"\u8FD9\u4E2A\u6587\u4EF6\u5939\u5DF2\u7ECF\u6709\u4E1C\u897F\u4E86\uFF0C\u6362\u4E2A\u540D\u5B57\u6216\u8DEF\u5F84\u518D\u521B\u5EFA\uFF1A{dir}",comment:"\u53C2\u6570\u9519\u8BEF"},npm_install:{code:"",text:"npm install \u5931\u8D25",comment:"\u843D\u5730\u5931\u8D25"},bin_missing:{code:"",text:"\u627E\u4E0D\u5230 {js}",comment:"\u843D\u5730\u5931\u8D25"},run_js:{code:"",text:"\u65E0\u6CD5\u8FD0\u884C {js}: {e}",comment:"\u843D\u5730\u5931\u8D25"},init_failed:{code:"",text:"cgmaker init \u5931\u8D25",comment:"\u843D\u5730\u5931\u8D25"},npm_install_again:{code:"",text:"init \u540E npm install \u5931\u8D25",comment:"\u843D\u5730\u5931\u8D25"},run_npm:{code:"",text:"\u65E0\u6CD5\u8FD0\u884C {cmd}: {e}",comment:"npm \u542F\u52A8\u5931\u8D25"},need_input:{code:"11",text:"\u7F3A\u5C11\u9700\u8981\u5411\u7528\u6237\u786E\u8BA4\u7684\u53C2\u6570\u3002\u8BF7\u8BE2\u95EE\u7528\u6237\u540E\uFF0C\u628A\u7B54\u6848\u53D8\u6210\u547D\u4EE4\u884C\u65D7\u6807\u518D\u91CD\u8DD1\u3002",comment:"Agent \u9000\u51FA\u7801 11"},update_available:{code:"10",text:"\u68C0\u6D4B\u5230 cgmaker \u65B0\u7248\u672C\uFF0C\u63A8\u8350\u66F4\u65B0\u3002\u8BF7\u8BE2\u95EE\u7528\u6237\u662F\u5426\u73B0\u5728\u66F4\u65B0\u3002",comment:"Agent \u9000\u51FA\u7801 10"},update_use_latest:{code:"",text:"\u5F53\u524D\u76EE\u5F55\u6CA1\u6709 package.json\uFF0C\u65E0\u6CD5\u5199\u5165\u5DE5\u7A0B\u4F9D\u8D56\u3002\u8BF7\u6539\u7528 npx @66rpg/cgmaker-create@latest \u518D\u6267\u884C\u3002",comment:"create --apply-update \u65E0\u5DE5\u7A0B"},update_failed:{code:"",text:"\u66F4\u65B0\u5931\u8D25\uFF0C\u5DF2\u8DF3\u8FC7\uFF0C\u7EE7\u7EED\u6267\u884C\u539F\u547D\u4EE4\u3002",comment:"npm install \u5931\u8D25"}},prompt:{dest_dir:{code:"",text:"\u5DE5\u7A0B\u8981\u5EFA\u5728\u54EA\u4E2A\u6587\u4EF6\u5939\uFF1F\u8BF7\u8BF4\u4E00\u4E2A\u65B0\u6587\u4EF6\u5939\u7684\u540D\u5B57\uFF0C\u6216\u5B8C\u6574\u8DEF\u5F84\u3002\u4E0D\u8981\u7528\u6A21\u677F id \u5F53\u6587\u4EF6\u5939\u540D\uFF0C\u9664\u975E\u7528\u6237\u81EA\u5DF1\u8FD9\u4E48\u8BF4\u3002",comment:"Agent \u8BE2\u95EE\u843D\u5730\u76EE\u5F55"},dest_dir_ask:{code:"",text:"\u5DE5\u7A0B\u8981\u5EFA\u5728\u54EA\u4E2A\u6587\u4EF6\u5939\uFF1F\u8BF7\u8F93\u5165\u65B0\u6587\u4EF6\u5939\u7684\u540D\u5B57\u6216\u5B8C\u6574\u8DEF\u5F84\uFF08\u4F8B\u5982 {suggested}\uFF09\u3002\u76F4\u63A5\u56DE\u8F66\u65E0\u6548\uFF1A",comment:"TTY \u8BE2\u95EE\u843D\u5730\u76EE\u5F55"},dest_empty:{code:"",text:"\u5FC5\u987B\u6307\u5B9A\u6587\u4EF6\u5939\u3002\u8BF7\u8F93\u5165\u540D\u5B57\u6216\u5B8C\u6574\u8DEF\u5F84\uFF0C\u4E0D\u8981\u76F4\u63A5\u56DE\u8F66\u3002",comment:"TTY \u76EE\u5F55\u7A7A\u56DE\u8F66"},dest_invalid:{code:"",text:"\u8FD9\u4E2A\u4E0D\u50CF\u6587\u4EF6\u5939\u540D\u5B57\u3002\u8BF7\u8F93\u5165\u65B0\u6587\u4EF6\u5939\u7684\u540D\u5B57\uFF0C\u6216\u5B8C\u6574\u8DEF\u5F84\u3002",comment:"TTY \u76EE\u5F55\u65E0\u6548"},skill:{code:"",text:"\u8981\u628A AI \u8BF4\u660E\u5B89\u88C5\u5230\u54EA\u4E2A\u7F16\u8F91\u5668\uFF1F",comment:"Agent / TTY \u9009\u5E73\u53F0"},skill_detected:{code:"",text:"\u68C0\u6D4B\u5230\u5F53\u524D\u4F7F\u7528\u7684\u7F16\u8F91\u5668\u662F {id}\u3002\u8981\u628A AI \u8BF4\u660E\u5B89\u88C5\u5230\u54EA\u4E2A\u7F16\u8F91\u5668\uFF1F",comment:"Agent \u9009\u5E73\u53F0\uFF0C\u5DF2\u63A2\u6D4B\u5230\u5BBF\u4E3B"},skill_current_suffix:{code:"",text:"\uFF08\u5F53\u524D\uFF09",comment:"\u63A2\u6D4B\u5230\u7684\u7F16\u8F91\u5668\u9009\u9879\u540E\u7F00"},skill_item:{code:"",text:" {n}) {id}",comment:"TTY skill \u9009\u9879"},skill_item_current:{code:"",text:" {n}) {id}{mark}",comment:"TTY skill \u5F53\u524D\u7F16\u8F91\u5668\u9009\u9879"},skill_all:{code:"",text:" 0) \u5168\u90E8\u7F16\u8F91\u5668",comment:"TTY skill \u5168\u90E8"},skill_skip:{code:"",text:" s) \u8DF3\u8FC7\uFF08\u4E4B\u540E\u53EF\u5728\u5DE5\u7A0B\u76EE\u5F55\u6267\u884C cgmaker skill \u518D\u5B89\u88C5\uFF09",comment:"TTY skill \u8DF3\u8FC7"},skill_ask:{code:"",text:"\u8BF7\u8F93\u5165\u5E8F\u53F7\u3001\u7F16\u8F91\u5668\u540D\u30010\uFF08\u5168\u90E8\uFF09\u6216 s\uFF08\u8DF3\u8FC7\uFF09\u3002\u76F4\u63A5\u56DE\u8F66\u65E0\u6548\uFF1A",comment:"TTY skill \u8F93\u5165\u63D0\u793A"},skill_empty:{code:"",text:"\u56DE\u8F66\u4E0D\u4F1A\u8DF3\u8FC7\u3002\u8BF7\u8F93\u5165\u5E8F\u53F7\u3001\u7F16\u8F91\u5668\u540D\u30010 \u6216 s\u3002",comment:"TTY skill \u7A7A\u56DE\u8F66"},skill_invalid:{code:"",text:"\u65E0\u6548\u9009\u62E9\u3002\u8BF7\u8F93\u5165\u5217\u8868\u4E2D\u7684\u5E8F\u53F7\u3001\u7F16\u8F91\u5668\u540D\u30010 \u6216 s\u3002",comment:"TTY skill \u65E0\u6548\u8F93\u5165"},ask:{code:"",text:"{question} ({fallback}): ",comment:"readline \u63D0\u95EE\u683C\u5F0F"},update_ask:{code:"",text:"\u68C0\u6D4B\u5230\u65B0\u7248\u672C\uFF0C\u63A8\u8350\u66F4\u65B0\uFF0C\u662F\u5426\u73B0\u5728\u66F4\u65B0\uFF1F\uFF08\u56DE\u8F66=\u662F\uFF0Cn=\u5426\uFF09",comment:"TTY \u66F4\u65B0\u786E\u8BA4"}},ok:{written:{code:"",text:"\u5DF2\u5199\u5165\u5DE5\u7A0B {dir}",comment:"\u843D\u5730\u6210\u529F"},installed:{code:"",text:"\u5DF2\u5B89\u88C5 @66rpg/cgmaker \u5E76\u6267\u884C cgmaker init\u3002",comment:"\u843D\u5730\u6210\u529F"},local_origin:{code:"",text:"\u672C\u5730 --from-dir \u7684\u6A21\u677F ID\uFF08origin.template_id\uFF09\u4E3A local\uFF0C\u4E0D\u80FD\u76F4\u63A5 publish-template \u5230\u5E73\u53F0\u3002",comment:"\u672C\u5730\u6A21\u677F\u63D0\u9192"},next:{code:"",text:"\u63A5\u7740: cd \u8BE5\u76EE\u5F55 && npm run dev",comment:"\u843D\u5730\u6210\u529F\u4E0B\u4E00\u6B65"},update_installing:{code:"",text:"\u6B63\u5728\u628A cgmaker \u76F8\u5173\u5305\u66F4\u65B0\u5230\u6700\u65B0\u2026",comment:"npm install \u524D"},update_done:{code:"",text:"\u5DF2\u66F4\u65B0\u3002\u5F53\u524D\u8FDB\u7A0B\u4ECD\u662F\u65E7\u4EE3\u7801\uFF0C\u8BF7\u91CD\u65B0\u6267\u884C\u521A\u624D\u7684\u547D\u4EE4\u3002",comment:"\u66F4\u65B0\u6210\u529F\u540E\u9000\u51FA"}}};function mt(){let e={...Ae};return delete e._comment,e}var gt=mt();function o(e,t,n){let r=gt[e]?.[t];if(!r?.text)throw new Error(`missing create message ${e}.${t}`);let i=r.text;if(n)for(let[s,c]of Object.entries(n))i=i.split(`{${s}}`).join(String(c));return i}function kt(e){return e&&typeof e=="object"&&"code"in e&&typeof e.code=="string"?e.code:(e instanceof Error?e.message:String(e)).match(/\b(EPERM|EACCES|ENOENT|EBUSY|ENOTEMPTY|ENOTDIR|EISDIR|EINVAL|EMFILE|ENFILE)\b/)?.[1]??""}function _t(e){return e?e.includes("\uFFFD")||e.includes("\\\\?\\"):!1}function P(e){switch(kt(e)){case"EPERM":case"EACCES":return o("err","sys_denied");case"ENOENT":return o("err","sys_missing");case"EBUSY":case"ENOTEMPTY":return o("err","sys_busy");case"ENOTDIR":case"EISDIR":return o("err","sys_type");case"EINVAL":return o("err","sys_invalid");case"EMFILE":case"ENFILE":return o("err","sys_too_many");default:return o("err","sys_unknown")}}function be(e){let t=e instanceof Error?e.message:String(e??"");return _t(t)?P(e):t}function ve(){return process.platform==="win32"?"npm.cmd":"npm"}function j(e,t={}){let n=process.platform==="win32",r=yt(ve(),e,{windowsHide:n,...t,shell:n});if(r.error)throw new Error(o("err","run_npm",{cmd:ve(),e:P(r.error)}));return r}import Y from"node:fs";import St from"node:os";import U from"node:path";import{fileURLToPath as ht}from"node:url";var J="huanguang",Re="cgmaker_npm",Te="cgmaker_create",xt=`https://fx-it.66rpg.com:8206/sa?project=${J}`;function Z(e,t=J){try{let n=new URL(e);return n.protocol==="https:"&&n.hostname==="fx-it.66rpg.com"&&n.port==="8206"&&n.pathname==="/sa"&&n.searchParams.get("project")===t&&!n.username&&!n.password}catch{return!1}}function B(e,t){return String(e[t]??"").trim().toLowerCase()}function wt(e){let t=B(e,"CGMAKER_NO_ANALYTICS");if(t==="1"||t==="true")return!0;let n=B(e,"CGMAKER_ANALYTICS");if(n==="0"||n==="false")return!0;let r=B(e,"CI");return!!(r==="true"||r==="1"||e.NODE_TEST_CONTEXT)}function Et(){let e=U.dirname(ht(import.meta.url));for(;;){if(Y.existsSync(U.join(e,"package.json")))return e;let t=U.dirname(e);if(t===e)return e;e=t}}function Ct(){try{let e=JSON.parse(Y.readFileSync(U.join(Et(),"package.json"),"utf8"));return typeof e.version=="string"?e.version:""}catch{return""}}function At(e){try{let t=U.join(e,".cgmaker","config.json");if(!Y.existsSync(t))return;let n=JSON.parse(Y.readFileSync(t,"utf8"));return n&&typeof n=="object"?n:void 0}catch{return}}function bt(e){let t=e?.web_config,n=typeof t?.type=="string"?t.type:"",r=typeof t?.base_cg=="string"?t.base_cg:"";return n&&n!=="1"||r.toLowerCase().includes("test")?"test":"release"}function vt(e){let t=e?.env??process.env,n=e?.homeDir??St.homedir(),r=e?.fileConfig??(e?.skipFile?void 0:At(n)),i=bt(r),s=r?.sensorsAnalytics,c=!0;typeof s?.enabled=="boolean"&&(c=s.enabled),wt(t)&&(c=!1);let u=xt,y=typeof s?.serverUrl=="string"?s.serverUrl.trim():"";y&&Z(y)&&(u=y);let p=typeof t.CGMAKER_SENSORS_URL=="string"?t.CGMAKER_SENSORS_URL.trim():"";p&&Z(p)&&(u=p),Z(u)||(c=!1);let d=B(t,"CGMAKER_ANALYTICS_LOG"),a=i!=="release"&&(s?.showLog===!0||d==="1"||d==="true");return{enabled:c,serverUrl:u,showLog:a,deployEnv:i,releaseId:e?.releaseId??Ct()}}var ee;function R(){return ee||(ee=vt()),ee}var Rt="https://test-cg-maker.66rpg.com/common/public-info/test.json",Tt="https://cg-maker.66rpg.com/common/public-info/release.json",It="https://test-lumi.66rpg.com",Nt="https://lumi.66rpg.com",Pt=5e3,M,te;function jt(e=R().deployEnv){return e==="test"?Rt:Tt}function Ot(e=R().deployEnv){return`${e==="test"?It:Nt}/`}var Ne=new WeakMap,Ft=new Set(["template","templates","works","edit-works","edit-template","edit-game","projects","edit-projects","edit-project"]),Dt=new Set(["version","environment","updatedat","updated_at","status","id","description","effectiveat","expireat"]);function Pe(e){let t=e.trim().toLowerCase();return t==="email"||t==="mail"||t==="e-mail"||t==="\u90AE\u7BB1"||t==="\u516C\u5F00\u90AE\u7BB1"?"email":t==="qq"||t==="qq\u53F7"||t==="qq_number"||t==="qqnumber"?"qq":t}function ie(e,t){return e==="email"?"\u90AE\u7BB1":e==="qq"?"QQ":t.trim()||e}function Lt(e){return!!e&&!Ft.has(e)&&!Dt.has(e)}function se(e,t){!t.value||!Lt(t.key)||e.some(n=>n.key===t.key)||e.push(t)}function Ut(e){let t=[];for(let[n,r]of Object.entries(e))se(t,{key:n,label:ie(n,n),value:r.trim()});return t}function Mt(e){let t=n=>n==="email"?0:n==="qq"?1:2;return[...e].sort((n,r)=>t(n.key)-t(r.key))}function $t(e){let t=Mt(e).map(n=>`${n.label.trim()} ${n.value.trim()}`.trim()).filter(Boolean);return t.length?`\uFF08${t.join("\uFF0C")}\uFF09`:""}function Gt(e){let t=e.trim().replace(/^\uFEFF/,"").trim();if(!t||t.startsWith("<"))return ne({},[]);let n=t;for(let s=0;s<3&&typeof n=="string";s+=1)try{n=JSON.parse(n.trim())}catch{return ne({},[])}let r=[],i={};return je(n,i,r),ne(i,r)}function ne(e,t){return Ne.set(e,t),e}function je(e,t,n){if(!e||typeof e!="object")return;if(Array.isArray(e)){for(let i of e)Ie(t,n,i);return}let r=e;if(Array.isArray(r.items))for(let i of r.items)Ie(t,n,i);for(let i of["data","list","result","content","payload"]){let s=r[i];s&&typeof s=="object"&&je(s,t,n)}for(let[i,s]of Object.entries(r)){if(i==="items"||i==="data"||i==="list"||i==="result"||i==="content"||i==="payload")continue;let c=re(s);if(!c)continue;let u=Pe(i);t[u]||=c,se(n,{key:u,label:ie(u,i),value:c})}}function Ie(e,t,n){if(!n||typeof n!="object"||Array.isArray(n))return;let r=n,i=String(r.keyName??r.key_name??""),s=Pe(i);if(!s)return;let c=re(r.keyValue??r.key_value??r[s]);if(!c)return;e[s]||=c;let u=re(r.name)||ie(s,i);se(t,{key:s,label:u,value:c})}function re(e){return typeof e=="string"?e.trim():typeof e=="number"&&Number.isFinite(e)?String(e):""}function qt(e=M??{}){return $t(Ne.get(e)??Ut(e))}function Oe(e,t){return e.split("{contact}").join(qt(t??M??{}))}async function oe(){if(M===void 0){if(process.env.NODE_TEST_CONTEXT){M={};return}te||(te=Kt()),M=await te}}async function Kt(){let e=new AbortController,t=setTimeout(()=>e.abort(),Pt);try{let n=await fetch(jt(),{signal:e.signal,headers:{Accept:"application/json,text/plain,*/*","User-Agent":"cgmaker",Referer:Ot()}});return n.ok?Gt(await n.text()):{}}catch{return{}}finally{clearTimeout(t)}}import O from"node:fs";import Bt from"node:os";import T from"node:path";import Yt from"node:readline";import{fileURLToPath as Jt}from"node:url";var Le=["@66rpg/cgmaker","@66rpg/cgmaker-create","@66rpg/cgmaker-win32-x64"],Vt=1440*60*1e3;function Wt(e,t){let n=e.split(".").map(s=>Number.parseInt(s,10)||0),r=t.split(".").map(s=>Number.parseInt(s,10)||0),i=Math.max(n.length,r.length);for(let s=0;s<i;s++){let c=n[s]??0,u=r[s]??0;if(c>u)return!0;if(c<u)return!1}return!1}function ce(e=Bt.homedir()){return T.join(e,".cgmaker","update-check.json")}function Ht(e=ce()){try{let t=JSON.parse(O.readFileSync(e,"utf8"));return!t||typeof t.checkedAt!="number"||typeof t.latest!="object"?null:t}catch{return null}}function V(e,t=ce()){O.mkdirSync(T.dirname(t),{recursive:!0}),O.writeFileSync(t,`${JSON.stringify(e,null,2)}
|
|
20
|
+
`)}function zt(){return T.resolve(T.dirname(Jt(import.meta.url)),"..")}function Xt(e,t=process.cwd()){if(e==="@66rpg/cgmaker-create")try{let n=JSON.parse(O.readFileSync(T.join(zt(),"package.json"),"utf8"));if(n.version)return n.version}catch{}try{return JSON.parse(O.readFileSync(T.join(t,"node_modules",e,"package.json"),"utf8")).version||null}catch{return null}}function Fe(e,t=process.cwd(),n={}){let r=[];for(let i of Le){let s=e[i];if(!s||n[i]===s)continue;let c=Xt(i,t);c&&Wt(s,c)&&r.push({name:i,current:c,latest:s})}return r}function Qt(e=process.cwd()){let t={};for(let n of Le)try{let r=j(["view",n,"version"],{cwd:e,encoding:"utf8",timeout:2e3}),i=(r.stdout??"").toString().trim().split(`
|
|
21
|
+
`)[0]?.trim();r.status===0&&i&&(t[n]=i)}catch{}return t}function Zt(){return process.env.CI==="true"||process.env.CGMAKER_NO_INTERACTIVE==="1"||process.env.CGMAKER_SKIP_UPDATE==="1"}function en(){return process.platform==="win32"?["@66rpg/cgmaker-win32-x64"]:[]}function tn(e){process.stdout.write(`${JSON.stringify({success:!1,code:10,command:"update-available",message:o("err","update_available"),data:{packages:e,apply:"npx @66rpg/cgmaker-create@latest --apply-update",skip:"npx @66rpg/cgmaker-create@latest --skip-update <\u539F\u547D\u4EE4\u4E0E\u53C2\u6570>"}},null,2)}
|
|
22
|
+
`)}function nn(e,t){let n=Yt.createInterface({input:process.stdin,output:process.stdout});return new Promise(r=>{n.question(`${e} [${t}]: `,i=>{n.close(),r(i.trim()||t)})})}async function Ue(e){if(Zt())return"continue";let t=e.cwd??process.cwd(),n=e.now??Date.now(),r=e.ppid??process.ppid,i=e.cacheFile??ce(),s=Ht(i)??{checkedAt:0,latest:{}};if(n-s.checkedAt>=Vt){let p={};try{p=e.fetch?e.fetch():Qt(t)}catch{p={}}s={...s,checkedAt:n,latest:{...s.latest,...p}},V(s,i)}if(e.apply)return De(s.latest,t);if(e.skip){let p={...s.declined};for(let d of Fe(s.latest,t))p[d.name]=d.latest;return V({...s,declined:p,promptedPpid:r},i),"continue"}let c=Fe(s.latest,t,s.declined??{});if(c.length===0)return"continue";if(e.agent)return tn(c),"agent-block";if(!e.tty||s.promptedPpid===r)return"continue";let u=c.map(p=>`${p.name} ${p.current} \u2192 ${p.latest}`).join(`
|
|
23
|
+
`),y=await nn(`${o("prompt","update_ask")}
|
|
24
|
+
${u}`,"Y");if(V({...s,promptedPpid:r},i),/^(n|no|否)$/i.test(y)){let p={...s.declined};for(let d of c)p[d.name]=d.latest;return V({...s,declined:p,promptedPpid:r},i),"continue"}return De(s.latest,t)}function De(e,t){let n=T.join(t,"package.json");if(!O.existsSync(n))return console.error(o("err","update_use_latest")),"updated-exit";let r=[];for(let i of["@66rpg/cgmaker","@66rpg/cgmaker-create",...en()]){let s=e[i];r.push(s?`${i}@${s}`:`${i}@latest`)}console.error(o("ok","update_installing"));try{if(j(["install","-D",...r],{cwd:t,stdio:"inherit"}).status!==0)return console.error(o("err","update_failed")),"continue"}catch{return console.error(o("err","update_failed")),"continue"}return console.error(o("ok","update_done")),"updated-exit"}var rn=[{id:"workbuddy",tokens:["workbuddy"]},{id:"codebuddy",tokens:["codebuddy"]},{id:"cursor",tokens:["cursor"]},{id:"opencode",tokens:["opencode"]},{id:"claude",tokens:["claudecode","claude"]},{id:"codex",tokens:["codex"]},{id:"trae",tokens:["trae"]},{id:"kimi",tokens:["kimi"]},{id:"qwen",tokens:["qwen"]}],ae=["agents","cursor","claude","codex","opencode","codebuddy","workbuddy","trae","kimi","qwen"];function sn(e){let t=[" "];for(let n of e){let r="";for(let i of n.toLowerCase())i>="a"&&i<="z"||i>="0"&&i<="9"?r+=i:r?(t.push(r," "),r=""):t[t.length-1]!==" "&&t.push(" ");r&&t.push(r," ")}return t.join("")}function on(e){let t=[];for(let[n,r]of Object.entries(e))n&&t.push(n),typeof r=="string"&&r&&t.push(r);return t}function W(e=process.env){let t=sn(on(e));for(let{id:n,tokens:r}of rn)if(r.some(i=>t.includes(` ${i} `)))return n}function le(e,t){return!t||!e.includes(t)?[...e]:[t,...e.filter(n=>n!==t)]}function Me(e,t){let n=e.trim();if(!n)return{kind:"empty"};if(n.toLowerCase()==="s")return{kind:"skip"};if(n==="0")return{kind:"all"};if(/^\d+$/.test(n)){let i=Number(n);if(i>=1&&i<=t.length){let s=t[i-1];if(s)return{kind:"platform",id:s}}return{kind:"invalid"}}let r=n.replace(/^[.\\/]+/,"").split(/[\\/]/)[0]?.toLowerCase()??"";return t.includes(r)?{kind:"platform",id:r}:{kind:"invalid"}}import $ from"node:fs";import ue from"node:path";function de(e){if(!$.existsSync(e)||!$.statSync(e).isDirectory()||$.existsSync(ue.join(e,".cgmaker","origin.json")))return!1;let t=ue.join(e,"package.json");if(!$.existsSync(t))return!1;try{let n=JSON.parse($.readFileSync(t,"utf8"));return!!(n.devDependencies?.["@66rpg/cgmaker"]||n.dependencies?.["@66rpg/cgmaker"])}catch{return!1}}function $e(e){return ue.join(e,"node_modules/@66rpg/cgmaker/bin/cgmaker.js")}function Ge(e){let t=e.trim();return!(!t||t.startsWith("-"))}import G from"node:fs";import w from"node:path";import{fileURLToPath as cn}from"node:url";var pe="cgmaker-create";function fe(){return w.resolve(w.dirname(cn(import.meta.url)),"..")}function an(e=fe()){return w.join(e,"skill",pe)}function ln(e){return(e.replace(/\\/g,"/").split("/").filter(Boolean)[0]??"").replace(/^\./,"").toLowerCase()}function un(e=fe()){let t=JSON.parse(G.readFileSync(w.join(e,"skill-targets.json"),"utf8"));return(Array.isArray(t.projectSkillDirs)?t.projectSkillDirs:[]).filter(r=>typeof r=="string"&&r.trim().length>0).map(r=>r.trim()).filter(r=>!w.isAbsolute(r)&&!r.split(/[\\/]/).includes(".."))}function dn(e,t){if("all"in t)return[...e];let n=t.platform.trim().replace(/^[.\\/]+/,"").split(/[\\/]/)[0]?.toLowerCase()??"";return e.filter(r=>ln(r)===n)}function qe(e,t){G.mkdirSync(t,{recursive:!0});for(let n of G.readdirSync(e,{withFileTypes:!0})){let r=w.join(e,n.name),i=w.join(t,n.name);n.isDirectory()?qe(r,i):G.copyFileSync(r,i)}}function Ke(e,t,n=fe()){let r=an(n);if(!G.existsSync(w.join(r,"SKILL.md")))return[];let i=dn(un(n),t),s=[];for(let c of i)qe(r,w.join(e,c,pe)),s.push(`${c.replace(/\\/g,"/")}/${pe}`);return s}function me(e,t,n){let r=e[t+1];if(!r||r.startsWith("-"))throw new Error(o("err",n));return{value:r,next:t+1}}function ge(e,t,n){let r=e.slice(t.length);if(!r)throw new Error(o("err",n));return r}function Be(e){let t=e.filter(d=>d!=="--"),n,r,i,s=!1,c=!1,u=!1,y=!1,p=[];for(let d=0;d<t.length;d++){let a=t[d];if(a==="--from-dir"){let m=me(t,d,"from_dir_need_path");n=m.value,d=m.next;continue}if(a.startsWith("--from-dir=")){n=ge(a,"--from-dir=","from_dir_need_path");continue}if(a==="--with-assets"){let m=me(t,d,"with_assets_need");r=m.value,d=m.next;continue}if(a.startsWith("--with-assets=")){r=ge(a,"--with-assets=","with_assets_need");continue}if(a==="--data-id"||a==="--data-ver-id"||a.startsWith("--data-id=")||a.startsWith("--data-ver-id="))throw new Error(o("err","data_id_removed"));if(a==="--skill-all"){s=!0;continue}if(a==="--skill-skip"||a==="--skip-skill"){c=!0;continue}if(!(a==="--agent"||a==="--json")){if(a==="--apply-update"){u=!0;continue}if(a==="--skip-update"){y=!0;continue}if(a==="--skill-platform"){let m=me(t,d,"skill_platform_need");i=m.value,d=m.next;continue}if(a.startsWith("--skill-platform=")){i=ge(a,"--skill-platform=","skill_platform_need");continue}p.push(a)}}if(s&&i)throw new Error(o("err","skill_conflict"));if(c&&(s||i))throw new Error(o("err","skill_conflict"));return{rest:p,fromDir:n,dataId:r,skillPlatform:i,skillAll:s,skillSkip:c,applyUpdate:u,skipUpdateFlag:y}}function Ye(e){let t=e.trim();if(!t||t.startsWith("-")||t.startsWith("@")||[...t].filter(r=>r==="/").length>1)return!1;let n=t.indexOf("@");if(n!==-1&&(n===0||n===t.length-1))return!1;if(t.includes("/")){let r=t.indexOf("/"),i=t.slice(0,r),s=t.slice(r+1),c=s.includes("@")?s.slice(0,s.indexOf("@")):s;if(!i||!c)return!1}return!0}var q={CliCreateStart:"CliCreateStart",CliCreateStep:"CliCreateStep",CliCreateResult:"CliCreateResult"},pn=["dest","skill","scaffold","npm_install","init","npm_install_again"],fn=new Set(pn);function Je(e){if(e)return fn.has(e)?e:void 0}var mn=new Set(["usage","need_input","update","dest_exists","from_dir_invalid","npm_install","bin_missing","init_failed","login_required","fail"]);function ke(e){if(e)return mn.has(e)?e:void 0}function _e(e){return e===0?"ok":e===10?"update":e===11?"need_input":e===12?"login_required":e===2?"usage":"fail"}import F from"node:fs";import wn from"node:os";import Xe from"node:path";import Ve from"node:fs";import We from"node:os";import gn from"node:path";var kn="analytics-identity.json";function _n(e){return gn.join(e,".cgmaker",kn)}function yn(e){if(typeof e=="number"&&Number.isFinite(e)&&e>0)return String(Math.trunc(e));if(typeof e=="string"){let t=e.trim();if(/^[1-9][0-9]{0,18}$/.test(t))return t}}function ye(e=We.homedir()){try{let t=_n(e);if(!Ve.existsSync(t))return;let n=JSON.parse(Ve.readFileSync(t,"utf8"));return yn(n?.uid)}catch{return}}function He(e=We.homedir()){let t=ye(e);return t?{uid:t,logged_in:!0}:{logged_in:!1}}var Sn=/^\$?[A-Za-z][A-Za-z0-9_]{0,99}$/,hn=new Set(["access_token","token","cookie","authorization","phone","mobile","wechat","qq","content","body","draft_title","search","query","error","message","stack","order_no","password","refresh_token","nick_name","nickname","username","lumi_username","dest","dest_dir","cwd","argv","from_dir","path","filepath"]);function xn(e){if(e!=null){if(typeof e=="string")return e.slice(0,256);if(typeof e=="number")return Number.isFinite(e)?e:void 0;if(typeof e=="boolean"||e instanceof Date)return e;if(Array.isArray(e))return e.slice(0,20).map(t=>t.slice(0,256))}}function ze(e){let t={};for(let[n,r]of Object.entries(e)){if(!Sn.test(n)||hn.has(n.toLowerCase()))continue;let i=xn(r);i!==void 0&&(t[n]=i)}return t}var En=100,Cn=600,An=700,bn="analytics-device-id",H=[],z=new Set,I,Se=!1;function Qe(e){try{return`${e}-${crypto.randomUUID()}`}catch{return`${e}-${Date.now()}-${Math.random().toString(36).slice(2,12)}`}}function Ze(e=wn.homedir()){if(I)return I;let t=Xe.join(e,".cgmaker"),n=Xe.join(t,bn);try{if(F.existsSync(n)){let i=F.readFileSync(n,"utf8").trim();if(i)return I=i,i}let r=Qe("cli");return F.mkdirSync(t,{recursive:!0}),F.writeFileSync(n,`${r}
|
|
25
|
+
`,{encoding:"utf8",flag:"wx"}),I=r,r}catch{try{if(F.existsSync(n)){let r=F.readFileSync(n,"utf8").trim();if(r)return I=r,r}}catch{}return I=Qe("session"),I}}function vn(){let e=Number.parseInt(process.versions.node,10);return Number.isFinite(e)?e:void 0}function Rn(){return ye()??Ze()}function Tn(){let e=R(),t=He();return{product:Re,app_id:Te,deploy_env:e.deployEnv,env:e.deployEnv==="release"?"production":"development",release_id:e.releaseId,surface:"cli",device_type:"desktop",device_code:Ze(),event_schema_version:2,os_platform:process.platform,os_arch:process.arch,node_major:vn(),logged_in:t.logged_in,uid:t.uid,$is_login_id:!!t.uid}}function In(e){z.add(e),e.finally(()=>z.delete(e))}async function Nn(e,t){let n=R();if(!n.enabled)return;let r={distinct_id:Rn(),time:Date.now(),type:"track",event:e,project:J,properties:{$lib:"Node",$lib_version:n.releaseId||"0",$lib_method:"code",...ze({...Tn(),...t})}};n.showLog&&console.error(`[cgmaker analytics] ${e}`);let i=Buffer.from(JSON.stringify(r),"utf8").toString("base64"),s=`data=${encodeURIComponent(i)}&gzip=0`,c=await fetch(n.serverUrl,{method:"POST",headers:{"Content-Type":"application/x-www-form-urlencoded"},body:s,redirect:"error",signal:AbortSignal.timeout(Cn)});n.showLog&&console.error(`[cgmaker analytics] ${e} ${c.status}`)}function et(){if(Se)return;Se=!0;let e=H.splice(0);for(let t of e)In(Nn(t.name,t.properties).catch(()=>{}));Se=!1}function X(e,t={}){try{if(!R().enabled)return;H.length>=En&&H.shift(),H.push({name:e,properties:t}),et()}catch{}}async function tt(e=An){try{if(et(),z.size===0)return;await Promise.race([Promise.allSettled([...z]),new Promise(t=>{setTimeout(t,e).unref?.()})])}catch{}}function Pn(e){return!!(e&&/^[a-zA-Z0-9]+$/.test(e))}function he(e){return{package:"cgmaker-create",source:e.source,has_data_id:e.has_data_id,skill:e.skill,agent:!!e.agent,content_id:Pn(e.content_id)?e.content_id:void 0}}function xe(e={}){X(q.CliCreateStart,he(e))}function we(e,t={}){let n=Je(e);n&&X(q.CliCreateStep,{...he(t),step:n,success:t.success!==!1,reason:ke(t.reason),resume:t.resume,skipped:t.skipped})}function jn(e,t={}){let n=t.outcome??_e(e),r=t.success??(e===0&&n==="ok");X(q.CliCreateResult,{...he(t),success:r,outcome:n,reason:ke(t.reason)??(n==="ok"?void 0:n)})}async function Q(e,t={}){try{t.skip||jn(e,t),await tt()}catch{}process.exit(e)}function D(){return`${o("help","body")}${Oe(o("help","contact"))}
|
|
26
|
+
`}function at(){return g.resolve(g.dirname(On(import.meta.url)),"..")}function lt(e=process.cwd()){let t=e;for(;;){let n=g.join(t,"templates"),r=g.join(t,"package.json");if(f.existsSync(n)&&f.existsSync(r))try{if(JSON.parse(f.readFileSync(r,"utf8")).workspaces?.some(c=>c.includes("templates")))return t}catch{}let i=g.dirname(t);if(i===t)return null;t=i}}function Dn(){return JSON.parse(f.readFileSync(g.join(at(),"package.json"),"utf8"))}function ut(){let e=lt();if(e){let t=g.join(e,"packages/cgmaker");if(f.existsSync(t))return`file:${t.replace(/\\/g,"/")}`}return`^${Dn().version}`}function nt(e){let t=e.split("@")[0]??e;return((t.includes("/")?t.split("/").pop():t)||"game").replace(/^tmpl_/,"tmpl-")}function rt(e){return/^[a-zA-Z0-9]+$/.test(e)}function Ln(e){return Be(e)}function Un(e,t){process.stdout.write(`${JSON.stringify({success:!1,code:11,command:"need-input",message:e,data:{questions:t}},null,2)}
|
|
27
|
+
`)}function dt(){return process.env.CI==="true"||process.env.CGMAKER_NO_INTERACTIVE==="1"}function Mn(){return dt()||N()?!1:!!W()}function it(e,t){try{if(!f.existsSync(e))return;if(!t)f.rmSync(e,{recursive:!0,force:!0});else for(let n of f.readdirSync(e))f.rmSync(g.join(e,n),{recursive:!0,force:!0});console.error(o("err","cleared",{dir:e}))}catch(n){console.error(o("err","clear_failed",{dir:e,e:P(n)}))}}function pt(e,t){return new Promise(n=>{t.question(e,r=>n(r))})}async function st(e){let t=ct.createInterface({input:process.stdin,output:process.stdout});try{for(;;){let n=(await pt(o("prompt","dest_dir_ask",{suggested:e}),t)).trim();if(!n){console.log(o("prompt","dest_empty"));continue}if(!Ge(n)){console.log(o("prompt","dest_invalid"));continue}return n}}finally{t.close()}}async function $n(){let e=W(),t=le([...ae],e),n=e&&t.includes(e)?e:void 0,r=o("prompt","skill_current_suffix");console.log(n?o("prompt","skill_detected",{id:n}):o("prompt","skill"));for(let s=0;s<t.length;s++){let c=t[s];console.log(c===n?o("prompt","skill_item_current",{n:String(s+1),id:c,mark:r}):o("prompt","skill_item",{n:String(s+1),id:c}))}console.log(o("prompt","skill_all")),console.log(o("prompt","skill_skip"));let i=ct.createInterface({input:process.stdin,output:process.stdout});try{for(;;){let s=Me(await pt(o("prompt","skill_ask"),i),t);if(s.kind==="empty"){console.log(o("prompt","skill_empty"));continue}if(s.kind==="invalid"){console.log(o("prompt","skill_invalid"));continue}return s.kind==="skip"?"skip":s.kind==="all"?"all":s.id}}finally{i.close()}}function N(){return!!(process.stdin.isTTY&&process.stdout.isTTY)}function Gn(e,t){f.mkdirSync(e,{recursive:!0});let n={name:t,private:!0,type:"module",engines:{node:">=20"},devDependencies:{"@66rpg/cgmaker":ut()}};f.writeFileSync(g.join(e,"package.json"),`${JSON.stringify(n,null,2)}
|
|
28
|
+
`),f.writeFileSync(g.join(e,".gitignore"),`node_modules/
|
|
29
29
|
dist/
|
|
30
30
|
.DS_Store
|
|
31
|
-
`);let r=n.devDependencies["@66rpg/cgmaker"],
|
|
32
|
-
`)}function
|
|
33
|
-
`)}function
|
|
31
|
+
`);let r=n.devDependencies["@66rpg/cgmaker"],i=process.env.CGMAKER_NPM_SCOPE_REGISTRY?.trim();i&&typeof r=="string"&&!r.startsWith("file:")&&f.writeFileSync(g.join(e,".npmrc"),`@66rpg:registry=${i}
|
|
32
|
+
`)}function ot(e,t){let n=g.join(e,"package.json"),r=JSON.parse(f.readFileSync(n,"utf8"));r.name=t,r.devDependencies=r.devDependencies??{},r.devDependencies["@66rpg/cgmaker"]||(r.devDependencies["@66rpg/cgmaker"]=ut()),f.writeFileSync(n,`${JSON.stringify(r,null,2)}
|
|
33
|
+
`)}function qn(){return process.platform==="win32"?"cgmaker.exe":"cgmaker"}function Kn(){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 Bn(e){let t=qn(),n=[];for(let r of["release","debug"]){for(let i of Kn())n.push(g.join(e,i,r,t));n.push(g.join(e,r,t))}return n}function Yn(){if(process.env.CG_MAKER_CLI_BIN&&f.existsSync(process.env.CG_MAKER_CLI_BIN))return process.env.CG_MAKER_CLI_BIN;if(process.env.CGMAKER_BIN&&f.existsSync(process.env.CGMAKER_BIN))return process.env.CGMAKER_BIN;let e=[];process.env.CARGO_TARGET_DIR&&e.push(process.env.CARGO_TARGET_DIR);let t=lt();t&&e.push(g.join(t,"target"));for(let n of e)for(let r of Bn(n))if(f.existsSync(r))return r}async function Jn(){let e=Ln(process.argv.slice(2));oe();let{rest:t,fromDir:n,dataId:r,applyUpdate:i,skipUpdateFlag:s}=e,{skillPlatform:c,skillAll:u,skillSkip:y}=e;if(t.includes("-h")||t.includes("--help")){await oe(),process.stdout.write(D());return}let p=Mn();p&&(process.env.CGMAKER_AGENT="1");let d={agent:p,source:n?"from_dir":"template_id",has_data_id:!!r,skill:u?"all":y?"skip":c?"platform":"none",content_id:void 0},a=(l,_={})=>Q(l,{...d,..._}),m=(l,_={})=>{try{we(l,{...d,..._})}catch{}};if(i||s||t.length>0){let l=await Ue({apply:i,skip:s,agent:p,tty:N()});if(l==="updated-exit")return a(0,{reason:"update",outcome:"update"});if(l==="agent-block")return a(10,{reason:"update"})}if(t.length===0)return process.stdout.write(D()),a(1,{reason:"usage"});let E=t[0],C=t[1],A=r;if(rt(E)&&!n&&(d.content_id=E),d.has_data_id=!!A,t.length>2)return process.stderr.write(D()),a(1,{reason:"usage"});if(!E||E.startsWith("-"))return process.stderr.write(D()),a(1,{reason:"usage"});if(!Ye(E))return console.error(o("err","owner_slug")),a(1,{reason:"usage"});if(C?.startsWith("-"))return process.stderr.write(D()),a(1,{reason:"usage"});if(n&&A)return console.error(o("err","data_id_from_dir")),a(1,{reason:"usage"});if(A&&A!=="0"&&!rt(A))return console.error(o("err","invalid_data_id",{id:A})),a(1,{reason:"usage"});try{xe(d)}catch{}if(p||!N()&&!dt()){let l=[];if(C||l.push({id:"create.dest",kind:"text",question:o("prompt","dest_dir"),recommended:!0}),!c&&!u&&!y){let _=[...ae],b=W(),h=b&&_.includes(b)?b:void 0,S=o("prompt","skill_current_suffix");l.push({id:"create.skill",kind:"select",question:h?o("prompt","skill_detected",{id:h}):o("prompt","skill"),recommended:!0,default:h,options:[...le(_,h).map(x=>({value:x,label:x===h?`${x}${S}`:x,flag:`--skill-platform ${x}`,recommended:x===h})),{value:"__all__",label:"all",flag:"--skill-all"},{value:"skip",label:"skip",flag:"--skill-skip",optional:!0}]})}if(l.some(_=>_.optional!==!0))return Un(o("err","need_input"),l),a(11,{reason:"need_input"})}if(n){let l=g.resolve(n);if(!f.existsSync(g.join(l,"package.json")))return console.error(o("err","from_dir_not_template",{dir:l})),a(1,{reason:"from_dir_invalid"})}let Ee=!!C;if(!C){if(!N())return console.error(o("err","need_dest_no_tty")),process.stderr.write(D()),a(1,{reason:"usage"});C=await st(nt(E)),Ee=!1}let k=g.resolve(C),K=f.existsSync(k),v=de(k);for(;K&&f.readdirSync(k).length&&!v;){if(console.error(o("err","dest_exists",{dir:k})),m("dest",{success:!1,reason:"dest_exists"}),Ee||!N())return a(1,{reason:"dest_exists"});C=await st(nt(E)),k=g.resolve(C),K=f.existsSync(k),v=de(k)}if(m("dest",{success:!0,resume:v}),!c&&!u&&!y&&N()){let l=await $n();l==="all"?u=!0:l==="skip"?y=!0:c=l,d.skill=u?"all":y?"skip":"platform"}m("skill",{success:!0});let L=async(l,_=1,b="fail")=>(v||it(k,K),console.error(l),a(_,{reason:b}));try{if(v?ot(k,g.basename(k)):Gn(k,g.basename(k)),m("scaffold",{success:!0,resume:v}),!y&&(u||c))try{Ke(k,u?{all:!0}:{platform:c},at())}catch{}let l=$e(k);if(f.existsSync(l))m("npm_install",{success:!0,skipped:!0});else{let Ce=j(["install"],{cwd:k,stdio:"inherit"});Ce.status!==0&&(m("npm_install",{success:!1,reason:"npm_install"}),await L(o("err","npm_install"),Ce.status??1,"npm_install")),m("npm_install",{success:!0})}f.existsSync(l)||(m("init",{success:!1,reason:"bin_missing"}),await L(o("err","bin_missing",{js:l}),1,"bin_missing"));let _=[l,"init",E];n&&_.push("--from-dir",g.resolve(n)),A&&_.push("--with-assets",A),u&&_.push("--all"),c&&_.push("--platform",c),y&&_.push("--skip-skill");let b=Yn(),h={...process.env};b&&(h.CGMAKER_BIN=b),p&&(h.CGMAKER_AGENT="1"),h.CGMAKER_SKIP_UPDATE="1";let S=Fn(process.execPath,_,{cwd:k,stdio:"inherit",windowsHide:!N(),env:h});if(S.error&&(m("init",{success:!1,reason:"init_failed"}),await L(o("err","run_js",{js:l,e:P(S.error)}),1,"init_failed")),S.status===10||S.status===11||S.status===12)return m("init",{success:!1,reason:S.status===10?"update":S.status===11?"need_input":"login_required"}),a(S.status,{reason:S.status===10?"update":S.status===11?"need_input":"login_required"});S.status!==0&&(m("init",{success:!1,reason:"init_failed"}),await L(o("err","init_failed"),S.status??1,"init_failed")),m("init",{success:!0}),ot(k,g.basename(k));let x=j(["install"],{cwd:k,stdio:"inherit"});x.status!==0&&(m("npm_install_again",{success:!1,reason:"npm_install"}),await L(o("err","npm_install_again"),x.status??1,"npm_install")),m("npm_install_again",{success:!0})}catch(l){throw v||it(k,K),l}return console.log(o("ok","written",{dir:k})),console.log(o("ok","installed")),n&&console.log(o("ok","local_origin")),console.log(o("ok","next")),a(0,{success:!0,outcome:"ok"})}Jn().catch(async e=>{console.error(be(e)),await Q(1,{reason:"fail"})});
|
package/package.json
CHANGED
|
@@ -7,7 +7,7 @@ description: 从橙光托管模板创建游戏工程。用户说开工程、从
|
|
|
7
7
|
|
|
8
8
|
`npx @66rpg/cgmaker-create` **只装本包**,此时工程里还没有 `@66rpg/cgmaker` 的平台 skill。按本文决策,不要去找 kit 里的 `cgmaker` skill。
|
|
9
9
|
|
|
10
|
-
|
|
10
|
+
目前只保证 Windows x64。不要把私有 npm registry、内网 IP、镜像域名写进回复或命令示例。
|
|
11
11
|
|
|
12
12
|
## 怎么问用户
|
|
13
13
|
|
|
@@ -20,9 +20,9 @@ description: 从橙光托管模板创建游戏工程。用户说开工程、从
|
|
|
20
20
|
- 问:「网页命令里如果带了素材包编号,就原样带上;没有就先只下代码。」不要主动问:「data_id 填哪个?」也不要擅自加 `--with-assets`
|
|
21
21
|
- 问:「要打开浏览器登录橙光账号吗?」不要问:「是否执行 login / 是否 12?」
|
|
22
22
|
|
|
23
|
-
##
|
|
23
|
+
## 缺参时先问人(输出模式由程序判断)
|
|
24
24
|
|
|
25
|
-
|
|
25
|
+
不要给命令加输出格式开关。人在终端走交互;你在编辑器里跑命令会自动走信封。不要猜用户没给的参数。
|
|
26
26
|
|
|
27
27
|
见到下面退出码,**先问用户,禁止擅自填默认、禁止擅自 `--skip-update`**:
|
|
28
28
|
|
|
@@ -32,37 +32,34 @@ description: 从橙光托管模板创建游戏工程。用户说开工程、从
|
|
|
32
32
|
| 11 | `need-input` | 按 `data.questions` 逐项问人(`recommended` 标推荐)。**用口语问**,不要把旗标名念给用户。把答案变成位置参数或旗标后重跑 |
|
|
33
33
|
| 12 | `login-required` | 问「要不要打开浏览器登录橙光账号?」同意:工程落地后再 `npx cgmaker login`,等人完成后再用同一目录重跑 create |
|
|
34
34
|
|
|
35
|
-
`--agent` 只给 Agent 用。
|
|
36
|
-
|
|
37
35
|
## 用法
|
|
38
36
|
|
|
39
37
|
```text
|
|
40
|
-
npx @66rpg/cgmaker-create@latest
|
|
41
|
-
npx @66rpg/cgmaker-create@latest
|
|
42
|
-
npx @66rpg/cgmaker-create@latest
|
|
43
|
-
npx @66rpg/cgmaker-create@latest
|
|
44
|
-
npx @66rpg/cgmaker-create@latest
|
|
45
|
-
npx @66rpg/cgmaker-create@latest
|
|
46
|
-
npx @66rpg/cgmaker-create@latest
|
|
47
|
-
npx @66rpg/cgmaker-create@latest
|
|
38
|
+
npx @66rpg/cgmaker-create@latest <用户名/slug>
|
|
39
|
+
npx @66rpg/cgmaker-create@latest <用户名/slug> <用户说的目录>
|
|
40
|
+
npx @66rpg/cgmaker-create@latest <用户名/slug@版本>
|
|
41
|
+
npx @66rpg/cgmaker-create@latest <用户名/slug@版本> --with-assets <数据包ID>
|
|
42
|
+
npx @66rpg/cgmaker-create@latest <模板id或版本id>
|
|
43
|
+
npx @66rpg/cgmaker-create@latest <引用> <用户说的目录> --skill-platform <编辑器>
|
|
44
|
+
npx @66rpg/cgmaker-create@latest <引用> <用户说的目录> --skill-all
|
|
45
|
+
npx @66rpg/cgmaker-create@latest <引用> <用户说的目录> --from-dir <本地模板目录>
|
|
48
46
|
```
|
|
49
47
|
|
|
50
|
-
网页默认命令是
|
|
48
|
+
网页默认命令是 `用户名/slug`(最新版)、`用户名/slug@版本`、以及带素材时再加 `--with-assets <数据包ID>`。第一位置整段原样交给平台,不要自己拆成模板 id 还是版本 id。不要用平台模板名 `name`。命令里唯一可能出现的 ID 是数据包 ID。
|
|
51
49
|
|
|
52
50
|
## 参数
|
|
53
51
|
|
|
54
52
|
| 参数 | 必填 | 说明 |
|
|
55
53
|
|---|---|---|
|
|
56
|
-
| `<引用>` | 是 |
|
|
54
|
+
| `<引用>` | 是 | `用户名/slug`、`用户名/slug@版本`、`用户名/slug@latest`,或平台模板 id / 版本 id |
|
|
57
55
|
| `<目录>` | 用户没说就省略 | 工程要建在哪个文件夹。用户没说时**不要自己编**(不要 `my-game`,不要用模板 id) |
|
|
58
56
|
| `--with-assets <数据包ID>` | 否 | 下载该素材包。值必填。不带则只下代码,不要再问要不要素材 |
|
|
59
57
|
| `--from-dir` | 否 | 暂无云端种子时从本地模板目录拷。不能与 `--with-assets` 一起用。落地 origin 为 `local`,之后不能把这份模板发到平台 |
|
|
60
58
|
| `--skill-platform` | 否 | 只把说明装到该编辑器(如 `cursor`、`workbuddy`) |
|
|
61
59
|
| `--skill-all` | 否 | 装到全部编辑器 |
|
|
62
|
-
| `--skill-skip` | 否 | 本次不装。之后可在工程目录补装 |
|
|
63
60
|
| `--apply-update` / `--skip-update` | 否 | 只在退出码 10 之后按用户答复使用 |
|
|
64
61
|
|
|
65
|
-
`--skill-platform` 与 `--skill-all`
|
|
62
|
+
`--skill-platform` 与 `--skill-all` 不能同时用。未指定时 CLI 会探测当前编辑器并询问(信封会标明「当前」),**不要擅自写成 cursor**。
|
|
66
63
|
|
|
67
64
|
## 约束
|
|
68
65
|
|
|
@@ -71,20 +68,20 @@ npx @66rpg/cgmaker-create@latest --agent --json <引用> <用户说的目录> --
|
|
|
71
68
|
- 缺目录或缺编辑器选项时退出 11。随后若还没登录(12),脚手架会留在用户说的目录里,**不要换文件夹、不要删目录**。登录后用同一目录重跑原 create 命令即可续跑。
|
|
72
69
|
- 用户粘贴的网页命令如果没有 `--with-assets`,就不要补素材包,也不要问要不要带素材。
|
|
73
70
|
- 目录已有内容且不是可续跑的脚手架时会失败;换个名字再问用户。
|
|
74
|
-
- 不要编造模板引用或数据包 ID。网页给了
|
|
71
|
+
- 不要编造模板引用或数据包 ID。网页给了 `用户名/slug` 就原样用,不要改成平台模板名 `name`。
|
|
75
72
|
- 本包只负责把工程放到电脑上。文件夹建好之前,不要讲发布、不要提前跑 `cgmaker`。
|
|
76
73
|
|
|
77
74
|
## 工程建好之后:引导去用 cgmaker
|
|
78
75
|
|
|
79
|
-
create 成功后,工程里已经装好 `@66rpg/cgmaker
|
|
76
|
+
create 成功后,工程里已经装好 `@66rpg/cgmaker`。后面登录橙光、检查工程、发游戏/模板/开源,都进这个文件夹用 `npx cgmaker`。发布规则以工程里的 `cgmaker` skill 为准;本 skill 只负责把人从「还没有文件夹」带到「已经有工程」,并用白话告诉他还能做什么。
|
|
80
77
|
|
|
81
|
-
先进入用户说的那个文件夹,再跑 cgmaker
|
|
78
|
+
先进入用户说的那个文件夹,再跑 cgmaker。不要 `npm login` / `npm publish`。
|
|
82
79
|
|
|
83
80
|
### 刚建完时跟用户说
|
|
84
81
|
|
|
85
82
|
用接近下面的口语收尾,不要念包名和旗标:
|
|
86
83
|
|
|
87
|
-
>
|
|
84
|
+
> 工程已经放进你刚才说的文件夹了。后面如果要登录橙光、检查这份工程齐不齐、把游戏或模板发到平台,直接告诉我就行。这些都在这个工程里做,不用再开一次工程。
|
|
88
85
|
|
|
89
86
|
用户还没说下一步时,只追问一句:
|
|
90
87
|
|
|
@@ -99,15 +96,15 @@ create 成功后,工程里已经装好 `@66rpg/cgmaker`。后面登录橙光
|
|
|
99
96
|
| 登录 / 换账号 | 「要打开浏览器登录橙光账号吗?网页里点一下就行。」 | `npx cgmaker login`(换号加 `--force`) |
|
|
100
97
|
| 登出 | 「要退出当前橙光账号吗?」 | `npx cgmaker logout` |
|
|
101
98
|
| 我登录了没 / 现在是谁 | 「我帮你看一下当前登录的是哪个账号。」 | `npx cgmaker whoami` |
|
|
102
|
-
| 检查一下 / 合不合格 / 能不能发 | 「发之前我按平台要求看一眼工程齐不齐。」 | `npx cgmaker validate-template
|
|
103
|
-
| 发出去给人玩 / 上线 / 发正式版 | 「你是要发正式给玩家玩的版本,还是先发一个试玩?」 | 先 `npm run build`,再 `npx cgmaker publish
|
|
104
|
-
| 先发试玩 / 演示版 | 「试玩是单独一份,可以先发试玩,以后再补正式版。」 | 先 `npm run build:demo`,再 `npx cgmaker publish --demo
|
|
105
|
-
| 把模板发到平台 / 给别人用这个模板 | 「这是把模板发到平台,让别人用它开工程。第一版先发代码,配套素材要等下一版。」 | `npx cgmaker publish-template
|
|
99
|
+
| 检查一下 / 合不合格 / 能不能发 | 「发之前我按平台要求看一眼工程齐不齐。」 | `npx cgmaker validate-template`,数据用 `npm run validate`(或 `npx cgmaker validate` 转调它;有试玩数据时同一条检查两份) |
|
|
100
|
+
| 发出去给人玩 / 上线 / 发正式版 | 「你是要发正式给玩家玩的版本,还是先发一个试玩?」 | 先 `npm run build`,再 `npx cgmaker publish` |
|
|
101
|
+
| 先发试玩 / 演示版 | 「试玩是单独一份,可以先发试玩,以后再补正式版。」 | 先 `npm run build:demo`,再 `npx cgmaker publish --demo` |
|
|
102
|
+
| 把模板发到平台 / 给别人用这个模板 | 「这是把模板发到平台,让别人用它开工程。第一版先发代码,配套素材要等下一版。」 | `npx cgmaker publish-template` |
|
|
106
103
|
| 只改关卡素材、不改代码 | 「只更新素材包,不发新的代码版本。」 | `npx cgmaker publish-template-data` |
|
|
107
|
-
| 把源码开源到平台 | 「这是把整份源码发到平台做开源工程,不是发成品游戏。」 | `npx cgmaker publish-project
|
|
108
|
-
| 改名字 / 改介绍 / 先下架 |
|
|
104
|
+
| 把源码开源到平台 | 「这是把整份源码发到平台做开源工程,不是发成品游戏。」 | `npx cgmaker publish-project` |
|
|
105
|
+
| 改名字 / 改介绍 / 先下架 | 「改帖子请到网页上操作,不用在命令行里改。」 | 不要跑命令行改帖 |
|
|
109
106
|
| 补装 AI 说明 / 换编辑器 | 「要把说明装到哪个编辑器?当前检测到的会标出来。」 | `npx cgmaker skill` |
|
|
110
|
-
| 我的游戏/模板/开源列表 |
|
|
107
|
+
| 我的游戏/模板/开源列表 | 「请到网页上看已发布的列表和详情。」 | 不要用命令行列出 |
|
|
111
108
|
|
|
112
109
|
从本地文件夹拷来的工程还没连上平台,不能发模板。这时要老实说:「这份是从本地拷来的,还没接到橙光模板上,不能当模板发出去。」
|
|
113
110
|
|