@nocobase/cli 2.2.0-beta.9 → 2.2.0-test.16

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (39) hide show
  1. package/assets/env-proxy/nginx/snippets/uploads-location.conf +4 -1
  2. package/dist/commands/app/start.js +21 -1
  3. package/dist/commands/config/set.js +1 -0
  4. package/dist/commands/env/info.js +11 -1
  5. package/dist/commands/init.js +131 -4
  6. package/dist/commands/install.js +129 -6
  7. package/dist/commands/portal/create.js +104 -0
  8. package/dist/commands/portal/deploy.js +81 -0
  9. package/dist/commands/portal/destroy.js +104 -0
  10. package/dist/commands/portal/dev.js +71 -0
  11. package/dist/commands/portal/index.js +20 -0
  12. package/dist/commands/portal/info.js +82 -0
  13. package/dist/commands/portal/list.js +98 -0
  14. package/dist/commands/portal/pull.js +77 -0
  15. package/dist/commands/portal/push.js +79 -0
  16. package/dist/commands/source/dev.js +1 -1
  17. package/dist/commands/source/download.js +2 -2
  18. package/dist/lib/auth-store.js +3 -1
  19. package/dist/lib/cli-config.js +23 -2
  20. package/dist/lib/env-config.js +3 -0
  21. package/dist/lib/env-proxy.js +102 -3
  22. package/dist/lib/managed-init-env.js +6 -1
  23. package/dist/lib/portal-command-env.js +31 -0
  24. package/dist/lib/portal-create.js +488 -0
  25. package/dist/lib/portal-deploy.js +275 -0
  26. package/dist/lib/portal-destroy.js +100 -0
  27. package/dist/lib/portal-dev.js +79 -0
  28. package/dist/lib/portal-env-files.js +53 -0
  29. package/dist/lib/portal-info.js +31 -0
  30. package/dist/lib/portal-list.js +197 -0
  31. package/dist/lib/portal-source.js +416 -0
  32. package/dist/lib/portal-template.js +190 -0
  33. package/dist/lib/prompt-catalog-terminal.js +32 -19
  34. package/dist/lib/prompt-web-ui.js +13 -2
  35. package/dist/lib/run-npm.js +17 -16
  36. package/dist/lib/ui.js +28 -1
  37. package/dist/locale/en-US.json +191 -37
  38. package/dist/locale/zh-CN.json +191 -37
  39. package/package.json +5 -3
@@ -93,20 +93,20 @@
93
93
  "envAdd": {
94
94
  "prompts": {
95
95
  "name": {
96
- "message": "你想如何命名这个环境?",
96
+ "message": "应用环境标识",
97
97
  "placeholder": "default"
98
98
  },
99
99
  "scope": {
100
- "message": "这个连接要保存到哪里?",
100
+ "message": "连接保存位置",
101
101
  "globalLabel": "全局",
102
102
  "globalHint": "保存在用户级配置中"
103
103
  },
104
104
  "apiBaseUrl": {
105
- "message": "API 基础地址是什么?",
105
+ "message": "API 基础地址",
106
106
  "placeholder": "https://demo.example.com/api 或 https://demo.example.com/api/__app/<subapp>"
107
107
  },
108
108
  "authType": {
109
- "message": "你想使用哪种认证方式?",
109
+ "message": "认证方式",
110
110
  "basicLabel": "Basic 认证(用户名 + 密码)",
111
111
  "basicHint": "保存后会用用户名和密码换取 Token",
112
112
  "oauthLabel": "OAuth(浏览器认证)",
@@ -114,14 +114,14 @@
114
114
  "tokenLabel": "API Token / API Key"
115
115
  },
116
116
  "username": {
117
- "message": "请输入 Basic 登录用户名",
117
+ "message": "Basic 登录用户名",
118
118
  "placeholder": "admin"
119
119
  },
120
120
  "password": {
121
- "message": "请输入 Basic 登录密码"
121
+ "message": "Basic 登录密码"
122
122
  },
123
123
  "accessToken": {
124
- "message": "请输入 API Token 或 API Key",
124
+ "message": "API Token 或 API Key",
125
125
  "placeholder": "请输入你的 API Token / API Key"
126
126
  }
127
127
  }
@@ -168,6 +168,126 @@
168
168
  "refusal": "拒绝对 env \"{{requestedEnv}}\" 执行该命令,因为当前 env 是 \"{{currentEnv}}\",且当前 agent 会话无法进行交互确认。\n\n出于安全考虑,agent 不会自动切换 env,也不会替你自动补上 --yes。\n\n如果要继续:\n- 请先自行执行 `nb env use {{requestedEnv}}`,然后重新运行该命令,或\n- 使用相同命令并追加 `--env {{requestedEnv}} --yes`,以确认这是一次性的跨 env 操作。"
169
169
  }
170
170
  },
171
+ "portalCreate": {
172
+ "errors": {
173
+ "envNotConfigured": "env \"{{envName}}\" 尚未配置。请先运行 `nb env add {{envName}} --api-base-url <url>`。",
174
+ "noEnvConfigured": "还没有配置 NocoBase env。请先运行 `nb init --ui` 创建一个。",
175
+ "templateInvalidDirectory": "Portal 模板 \"{{source}}\" 无效:需要是一个目录。",
176
+ "localTemplateMissing": "Portal 模板目录不存在:{{source}}",
177
+ "templateUnresolved": "无法解析 Portal 模板 \"{{source}}\"。{{details}}",
178
+ "templateDownloadFailed": "无法通过 npm pack 下载 Portal 模板 \"{{source}}\"。{{details}}",
179
+ "templateExtractFailed": "解压 Portal 模板 \"{{source}}\" 失败:{{details}}",
180
+ "templateMissingPackageJson": "Portal 模板 \"{{source}}\" 无效:缺少 package.json。",
181
+ "npmPackNoTarball": "npm pack 没有为 {{source}} 生成本地 tarball。",
182
+ "npmPackMultipleTarballs": "npm pack 为 {{source}} 生成了多个 tarball。",
183
+ "invalidPortalName": "Portal 名称 \"{{value}}\" 无效。请使用小写字母、数字、下划线或连字符,并以小写字母或数字开头。",
184
+ "invalidPortalAppName": "从 apiBaseUrl 解析出的 Portal app 名称 \"{{value}}\" 无效。请使用字母、数字、下划线或连字符,并以字母或数字开头。",
185
+ "missingApiBaseUrl": "无法创建 Portal workspace,因为当前 env 没有 apiBaseUrl。",
186
+ "outsideParent": "拒绝修改 {{parentDir}} 之外的 Portal workspace:{{portalDir}}",
187
+ "sshUnsupported": "第一版暂不支持为 ssh env 创建 Portal workspace。",
188
+ "workspaceExists": "Portal workspace 已存在:{{portalDir}}\n如需删除并重新创建,请追加 --force。"
189
+ },
190
+ "messages": {
191
+ "skipInstall": "未找到 {{portalDir}}/package.json,已跳过 pnpm install。",
192
+ "created": "Portal \"{{portal}}\" 已创建:{{portalDir}}。",
193
+ "app": "App:{{app}}",
194
+ "base": "Base:{{base}}"
195
+ }
196
+ },
197
+ "portalDeploy": {
198
+ "errors": {
199
+ "envNotConfigured": "env \"{{envName}}\" 尚未配置。请先运行 `nb env add {{envName}} --api-base-url <url>`。",
200
+ "noEnvConfigured": "还没有配置 NocoBase env。请先运行 `nb init --ui` 创建一个。",
201
+ "workspaceMissing": "Portal workspace 不存在:{{portalDir}}\n请先运行 `nb portal create {{portal}}`。",
202
+ "packageJsonMissing": "Portal workspace 无效:{{portalDir}} 中缺少 package.json。",
203
+ "distMissing": "Portal build 没有生成 {{distDir}}/index.html。",
204
+ "unsupportedEnvKind": "第一版暂不支持为 {{kind}} env 部署 Portal workspace。",
205
+ "uploadFailed": "Portal dist 上传失败,状态码 {{status}}\n{{details}}",
206
+ "recordSyncFailed": "Portal 记录同步失败,状态码 {{status}}\n{{details}}"
207
+ },
208
+ "messages": {
209
+ "deployed": "Portal \"{{portal}}\" 已部署。",
210
+ "mode": "Mode:{{mode}}",
211
+ "app": "App:{{app}}",
212
+ "base": "Base:{{base}}",
213
+ "record": "记录:已同步",
214
+ "dist": "Dist:{{dist}}",
215
+ "localDist": "本地 dist:{{dist}}",
216
+ "serverDist": "服务端 dist:{{dist}}"
217
+ }
218
+ },
219
+ "portalList": {
220
+ "errors": {
221
+ "envNotConfigured": "env \"{{envName}}\" 尚未配置。请先运行 `nb env add {{envName}} --api-base-url <url>`。",
222
+ "noEnvConfigured": "还没有配置 NocoBase env。请先运行 `nb init --ui` 创建一个。",
223
+ "unsupportedEnvKind": "第一版暂不支持为 {{kind}} env 列出 Portal workspace。",
224
+ "listFailed": "Portal 列表获取失败,状态码 {{status}}\n{{details}}"
225
+ },
226
+ "messages": {
227
+ "empty": "没有找到 Portal 记录。"
228
+ },
229
+ "table": {
230
+ "name": "名称",
231
+ "url": "访问 URL",
232
+ "developmentMode": "开发模式",
233
+ "path": "本地路径",
234
+ "enabled": "启用",
235
+ "localSynced": "本地已同步"
236
+ }
237
+ },
238
+ "portalInfo": {
239
+ "errors": {
240
+ "envNotConfigured": "env \"{{envName}}\" 尚未配置。请先运行 `nb env add {{envName}} --api-base-url <url>`。",
241
+ "noEnvConfigured": "还没有配置 NocoBase env。请先运行 `nb init --ui` 创建一个。",
242
+ "notFound": "Portal \"{{portal}}\" 不存在。"
243
+ },
244
+ "fields": {
245
+ "name": "名称",
246
+ "url": "访问 URL",
247
+ "developmentMode": "开发模式",
248
+ "path": "本地路径",
249
+ "enabled": "启用",
250
+ "localSynced": "本地已同步"
251
+ }
252
+ },
253
+ "portalDestroy": {
254
+ "errors": {
255
+ "envNotConfigured": "env \"{{envName}}\" 尚未配置。请先运行 `nb env add {{envName}} --api-base-url <url>`。",
256
+ "noEnvConfigured": "还没有配置 NocoBase env。请先运行 `nb init --ui` 创建一个。",
257
+ "confirmationRequired": "非交互模式下拒绝删除 Portal。请追加 --yes 后重试。",
258
+ "outsideParent": "拒绝删除 {{parentDir}} 之外的 Portal workspace:{{portalDir}}",
259
+ "workspaceMissing": "Portal workspace 不存在:{{portalDir}}\n如需忽略本地文件缺失,请追加 --force。",
260
+ "unsupportedEnvKind": "第一版暂不支持为 {{kind}} env 删除 Portal workspace。",
261
+ "recordDestroyFailed": "Portal 记录删除失败,状态码 {{status}}\n{{details}}"
262
+ },
263
+ "prompts": {
264
+ "confirm": "删除 Portal \"{{portal}}\" 并移除它的 storage 目录?"
265
+ },
266
+ "messages": {
267
+ "destroyed": "Portal \"{{portal}}\" 已删除。",
268
+ "mode": "Mode:{{mode}}",
269
+ "app": "App:{{app}}",
270
+ "base": "Base:{{base}}",
271
+ "record": "记录:{{status}}",
272
+ "workspace": "Workspace:{{status}}({{dir}})"
273
+ }
274
+ },
275
+ "portalDev": {
276
+ "errors": {
277
+ "envNotConfigured": "env \"{{envName}}\" 尚未配置。请先运行 `nb env add {{envName}} --api-base-url <url>`。",
278
+ "noEnvConfigured": "还没有配置 NocoBase env。请先运行 `nb init --ui` 创建一个。",
279
+ "workspaceMissing": "Portal workspace 不存在:{{portalDir}}\n请先运行 `nb portal create {{portal}}`。",
280
+ "packageJsonMissing": "Portal workspace 无效:{{portalDir}} 中缺少 package.json。",
281
+ "sshUnsupported": "第一版暂不支持为 ssh env 启动 Portal workspace 开发服务。"
282
+ },
283
+ "messages": {
284
+ "starting": "正在启动 Portal \"{{portal}}\"...",
285
+ "mode": "Mode:{{mode}}",
286
+ "app": "App:{{app}}",
287
+ "base": "Base:{{base}}",
288
+ "dir": "目录:{{dir}}"
289
+ }
290
+ },
171
291
  "license": {
172
292
  "activate": {
173
293
  "interactive": {
@@ -179,7 +299,7 @@
179
299
  },
180
300
  "prompts": {
181
301
  "provideMethod": {
182
- "message": "你想通过哪种方式提供 license key?",
302
+ "message": "License key 提供方式",
183
303
  "keyOption": "直接粘贴 license key",
184
304
  "fileOption": "从文件读取 key"
185
305
  },
@@ -252,7 +372,7 @@
252
372
  },
253
373
  "prompts": {
254
374
  "source": {
255
- "message": "你想通过哪种方式获取 NocoBase?",
375
+ "message": "NocoBase 获取方式",
256
376
  "dockerLabel": "Docker 安装(推荐)",
257
377
  "dockerHint": "适合无代码或低维护成本场景。后续升级时,拉取新镜像并重启应用即可。",
258
378
  "npmLabel": "create-nocobase-app 安装",
@@ -261,7 +381,7 @@
261
381
  "gitHint": "适合体验最新未发布版本、参与贡献,或直接修改和调试 NocoBase 源码。这个方式更偏向开发者使用。"
262
382
  },
263
383
  "version": {
264
- "message": "你想使用哪个版本?",
384
+ "message": "NocoBase 版本",
265
385
  "latestLabel": "latest",
266
386
  "latestHint": "稳定版。适合生产环境和希望获得稳定体验的场景。",
267
387
  "betaLabel": "beta",
@@ -272,15 +392,15 @@
272
392
  "otherHint": "手动填写其他版本号、Docker tag 或 Git ref,例如分支名。"
273
393
  },
274
394
  "otherVersion": {
275
- "message": "请输入你想使用的版本号、Docker tag 或 Git ref",
395
+ "message": "自定义版本号、Docker tag 或 Git ref",
276
396
  "placeholder": "例如:fix/cli-v2"
277
397
  },
278
398
  "dockerRegistry": {
279
- "message": "你想使用哪个 Docker registry?镜像 tag 请单独在 Version 中填写。",
399
+ "message": "Docker registry(镜像 tag 在版本中单独设置)",
280
400
  "placeholder": "registry.cn-shanghai.aliyuncs.com/nocobase/nocobase"
281
401
  },
282
402
  "dockerPlatform": {
283
- "message": "要使用哪个 Docker 镜像平台?",
403
+ "message": "架构",
284
404
  "autoLabel": "自动",
285
405
  "autoHint": "由 Docker 根据当前机器自动选择"
286
406
  },
@@ -323,79 +443,94 @@
323
443
  },
324
444
  "prompts": {
325
445
  "env": {
326
- "message": "你想如何命名这个应用?",
446
+ "message": "应用环境标识",
327
447
  "placeholder": "local"
328
448
  },
329
449
  "lang": {
330
- "message": "你希望应用使用哪种语言?"
450
+ "message": "应用语言"
331
451
  },
332
452
  "appPath": {
333
- "message": "应用要放到哪里?(相对路径基于 {{root}})",
453
+ "message": "应用目录(相对路径基于 {{root}})",
334
454
  "placeholder": "./<env>/"
335
455
  },
336
456
  "appPort": {
337
- "message": "应用要使用哪个端口?",
457
+ "message": "应用端口",
338
458
  "placeholder": "13000"
339
459
  },
340
460
  "appPublicPath": {
341
- "message": "应用的子路径是什么?(例如 /nocobase/)",
461
+ "message": "应用子路径(例如 /nocobase/)",
342
462
  "placeholder": "/ 或 /nocobase/"
343
463
  },
464
+ "developmentMode": {
465
+ "message": "谁来主导开发?",
466
+ "noCodeLabel": "人主导开发",
467
+ "noCodeHint": "通过配置和低代码的方式构建应用,AI 作为你的助手提供支持。",
468
+ "vibeCodingLabel": "AI 主导开发",
469
+ "vibeCodingHint": "你描述自己的需求,AI 将为你编写代码并构建应用。"
470
+ },
471
+ "portalName": {
472
+ "message": "初始化 Portal 名称",
473
+ "placeholder": "admin"
474
+ },
475
+ "portalTemplate": {
476
+ "message": "起始模板(将复制到 ./storage/portals/)",
477
+ "placeholder": "git@github.com:nocobase/admin-starter.git"
478
+ },
344
479
  "storagePath": {
345
- "message": "上传文件和本地存储目录要放到哪里?",
480
+ "message": "上传文件和本地存储目录",
346
481
  "placeholder": "./<env>/storage/"
347
482
  },
348
483
  "dbDialect": {
349
- "message": "你想使用哪种数据库?"
484
+ "message": "数据库类型"
350
485
  },
351
486
  "builtinDb": {
352
- "message": "是否使用内置数据库?"
487
+ "message": "使用内置数据库"
353
488
  },
354
489
  "builtinDbImage": {
355
- "message": "内置数据库要使用哪个 Docker 镜像?",
490
+ "message": "内置数据库 Docker 镜像",
356
491
  "placeholder": "postgres:16"
357
492
  },
358
493
  "dbHost": {
359
- "message": "数据库主机地址是什么?",
494
+ "message": "数据库主机地址",
360
495
  "placeholder": "127.0.0.1"
361
496
  },
362
497
  "dbPort": {
363
- "message": "数据库端口是什么?",
498
+ "message": "数据库端口",
364
499
  "placeholder": "5432"
365
500
  },
366
501
  "dbDatabase": {
367
- "message": "数据库名称是什么?"
502
+ "message": "数据库名称"
368
503
  },
369
504
  "dbUser": {
370
- "message": "数据库用户名是什么?"
505
+ "message": "数据库用户名"
371
506
  },
372
507
  "dbPassword": {
373
- "message": "数据库密码是什么?"
508
+ "message": "数据库密码"
374
509
  },
375
510
  "dbSchema": {
376
- "message": "数据库 schema 是什么?(仅 PostgreSQL,可选)",
511
+ "message": "数据库 schema(仅 PostgreSQL/KingbaseES,可选)",
377
512
  "placeholder": "留空则使用默认 schema"
378
513
  },
379
514
  "dbTablePrefix": {
380
- "message": "要使用什么数据表前缀?(可选)",
515
+ "message": "数据表前缀(可选)",
381
516
  "placeholder": "例如:nb_"
382
517
  },
383
518
  "dbUnderscored": {
384
- "message": "数据库表名和字段名是否使用下划线风格?"
519
+ "message": "数据库表名和字段名使用下划线风格"
385
520
  },
386
521
  "rootUsername": {
387
- "message": "设置初始管理员用户名",
522
+ "message": "初始管理员用户名",
388
523
  "placeholder": "nocobase"
389
524
  },
390
525
  "rootEmail": {
391
- "message": "初始管理员邮箱是什么?",
526
+ "message": "初始管理员邮箱",
392
527
  "placeholder": "admin@nocobase.com"
393
528
  },
394
529
  "rootPassword": {
395
- "message": "设置初始管理员密码"
530
+ "message": "初始管理员密码"
396
531
  },
397
532
  "rootNickname": {
398
- "message": "初始管理员显示名称是什么?",
533
+ "message": "初始管理员显示名称",
399
534
  "placeholder": "Super Admin"
400
535
  }
401
536
  }
@@ -419,11 +554,11 @@
419
554
  },
420
555
  "prompts": {
421
556
  "appName": {
422
- "message": "这个环境要使用什么 `--env` 标识?",
557
+ "message": "应用环境唯一标识(CLI 将通过该标识定位并操作对应环境)",
423
558
  "placeholder": "local"
424
559
  },
425
560
  "setupMode": {
426
- "message": "你想用哪种方式配置这个环境?",
561
+ "message": "应用环境配置方式",
427
562
  "installNewLabel": "新安装",
428
563
  "installNewHint": "从零安装一个新的应用,适合首次部署、试用或新建本地开发环境。",
429
564
  "manageLocalLabel": "本机接管",
@@ -432,7 +567,7 @@
432
567
  "connectRemoteHint": "只保存远程应用的连接信息,不在本机安装或接管应用。"
433
568
  },
434
569
  "installSkills": {
435
- "message": "是否安装 NocoBase AI coding skills(nocobase/skills)?"
570
+ "message": "安装 NocoBase AI coding skills(nocobase/skills"
436
571
  },
437
572
  "apiBaseUrl": {
438
573
  "message": "API 基础地址",
@@ -440,6 +575,21 @@
440
575
  },
441
576
  "skipDownload": {
442
577
  "message": "跳过下载 NocoBase,直接复用已有的本地应用文件或 Docker 镜像"
578
+ },
579
+ "developmentMode": {
580
+ "message": "谁来主导开发?",
581
+ "noCodeLabel": "人主导开发",
582
+ "noCodeHint": "通过配置和低代码的方式构建应用,AI 作为你的助手提供支持。",
583
+ "vibeCodingLabel": "AI 主导开发",
584
+ "vibeCodingHint": "你描述自己的需求,AI 将为你编写代码并构建应用。"
585
+ },
586
+ "portalName": {
587
+ "message": "初始化 Portal 名称",
588
+ "placeholder": "admin"
589
+ },
590
+ "portalTemplate": {
591
+ "message": "起始模板(将复制到 ./storage/portals/)",
592
+ "placeholder": "git@github.com:nocobase/admin-starter.git"
443
593
  }
444
594
  },
445
595
  "webUi": {
@@ -462,6 +612,10 @@
462
612
  "title": "应用来源和版本",
463
613
  "description": "选择应用的获取方式,以及要使用的来源和版本。"
464
614
  },
615
+ "developmentMode": {
616
+ "title": "开发方式",
617
+ "description": "选择适合你的应用开发方式。"
618
+ },
465
619
  "configureDatabase": {
466
620
  "title": "配置数据库",
467
621
  "description": "选择内置数据库或自定义数据库。"
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@nocobase/cli",
3
- "version": "2.2.0-beta.9",
3
+ "version": "2.2.0-test.16",
4
4
  "description": "NocoBase Command Line Tool",
5
5
  "type": "module",
6
6
  "main": "dist/generated/command-registry.js",
@@ -71,6 +71,9 @@
71
71
  "backup": {
72
72
  "description": "Create and restore NocoBase backups."
73
73
  },
74
+ "portal": {
75
+ "description": "Manage Portal workspaces."
76
+ },
74
77
  "skills": {
75
78
  "description": "Inspect or synchronize NocoBase AI coding skills for the current workspace."
76
79
  },
@@ -143,6 +146,5 @@
143
146
  "repository": {
144
147
  "type": "git",
145
148
  "url": "git+https://github.com/nocobase/nocobase.git"
146
- },
147
- "gitHead": "60e3d7abbaa0c7cead76f71a4f3d5eedb6b8acdb"
149
+ }
148
150
  }