@qmuse/qmuse-cli 1.0.0 → 1.0.1-dev.0

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 CHANGED
@@ -1,45 +1,38 @@
1
1
  # QMuse CLI
2
2
 
3
- `@qmuse/qmuse-cli` 用于登录 QMuse、选择空间,并将本地 React 项目导入 QMuse。首期只公开基础配置、空间、云服务权益预检和导入命令,不提供应用管理、在线对话、代码直改、预览或发布命令。
3
+ 将本地 React 项目导入 QMuse。
4
4
 
5
5
  ## 安装
6
6
 
7
- ```bash
8
- npm install
9
- npm run build
10
- npm link
11
- ```
12
-
13
- 本地开发可直接运行:
7
+ 需要 Node.js 20 或更高版本。
14
8
 
15
9
  ```bash
16
- npm run qmuse -- whoami
10
+ npm install -g @qmuse/qmuse-cli
17
11
  ```
18
12
 
19
- ## 登录
13
+ ## 快速开始
20
14
 
21
15
  ```bash
22
16
  qmuse login
23
- qmuse login --env pre
24
- qmuse login --status
25
- qmuse whoami
17
+ qmuse space list
18
+ qmuse space use <spaceId>
19
+ qmuse import /path/to/react-project
26
20
  ```
27
21
 
28
- 默认登录会创建一个 120 秒有效的一次性请求,并打开 QMuse `/cli-auth`。用户在网页确认后,CLI 轮询服务端领取并保存 `sessionId`,不启动本地监听端口。
29
- 不带 `--env` 时始终访问线上环境;预发验证的登录及后续命令都需要显式添加 `--env pre`。
30
- 全局参数可以放在命令前或命令后,例如 `qmuse --env pre whoami --json` 与 `qmuse whoami --env pre --json` 等价。
31
-
32
- 联调时可以使用 `--log` 输出请求接口、网页地址和临时 token。临时 token可以领取登录态,不应发送给其他人。
22
+ 登录时,在自动打开的浏览器页面中核对确认码并确认登录。导入成功后会自动打开应用页面。
33
23
 
34
- ## 空间
24
+ ## 账号与空间
35
25
 
36
26
  ```bash
27
+ qmuse whoami
28
+ qmuse login --status
29
+ qmuse logout
37
30
  qmuse space list
38
31
  qmuse space use <spaceId>
39
32
  qmuse space info
40
33
  ```
41
34
 
42
- `space use` 保存当前空间,后续导入会携带对应 `x-space-id`。也可以在导入时通过 `--space-id` 临时指定。
35
+ 使用 `qmuse whoami` 查看当前账号和空间,使用 `qmuse space use <spaceId>` 切换后续导入使用的空间。
43
36
 
44
37
  ## 导入
45
38
 
@@ -47,11 +40,15 @@ qmuse space info
47
40
  qmuse import /path/to/react-project --space-id <spaceId>
48
41
  ```
49
42
 
50
- CLI 会遵循项目根目录的 `.gitignore`,并排除 `.git`、`node_modules`、构建产物、`.env*`、`.qmuse`、`.agents`、`.qmuse-cli.json` 和 `AGENTS.md`。未忽略的私钥、包管理器凭证及常见云凭证会使预检直接失败,不会上传。预检通过后,服务端继续完成项目分析和模板适配、静态资源上传、内容安全审核、云服务处理、构建门禁,以及应用版本创建。
43
+ 已选择空间时,可省略 `--space-id`。不希望自动打开浏览器时,添加 `--no-open`。
44
+
45
+ 导入遵循项目根目录的 `.gitignore`,自动排除依赖目录、构建产物和 `.env*` 等文件。检测到私钥或凭证时会停止导入,请按提示处理后重试。
46
+
47
+ 导入失败时,按终端提示处理;如果生成了 `.qmuse/last-import-error.json`,可查看该文件定位问题。修复后重新执行导入命令。
51
48
 
52
- 任务只有进入 `READY` 后才会返回并打开 `https://qmuse.cn/app/<appId>`。
49
+ ### 更新已有应用
53
50
 
54
- 导入器不会猜测性改写 React Router、Provider、入口初始化或业务样式。源码、依赖、类型或构建问题会使任务明确失败;CLI 会在源码目录生成 `.qmuse/last-import-error.json`,Codex 或其他大模型可直接读取该文件,修复后重新执行 `qmuse import .`。平台或网络问题不会被误导为源码修改。
51
+ 从 QMuse 下载的项目,在项目根目录执行 `qmuse import .` 即可更新对应应用;没有关联应用时会创建新应用。普通外部项目每次导入都会创建新应用。
55
52
 
56
53
  ### 外部云服务
57
54
 
@@ -60,7 +57,7 @@ qmuse import ./app --cloud-mode EXTERNAL \
60
57
  --public-config '{"VITE_API_URL":"https://example.test"}'
61
58
  ```
62
59
 
63
- 公开配置只进入受控构建配置,不写入源码。私钥、Service Role Key 等秘密不得通过 `--public-config` 提交。
60
+ `--public-config` 用于传入公开配置,请勿填写私钥、Service Role Key 等秘密。
64
61
 
65
62
  ### QMuse 云服务
66
63
 
@@ -70,10 +67,7 @@ qmuse import ./app --cloud-mode QMUSE \
70
67
  --confirm-cloud-service
71
68
  ```
72
69
 
73
- `cloud init` 只校验当前空间是否具备可用的 QMuse 云服务权益,不创建应用或云资源。首次导入仍会在创建应用后重新校验并开通云服务。安装包同时提供 `qmuse-cli` 兼容命令,因此技能中的既有命令无需修改。
74
-
75
- `--confirm-cloud-service` 只确认当前任务的云资源计划,服务端仍会校验用户权限、空间权益和资源额度。
76
- 普通外部仓库迁移到 QMuse 云服务时,使用 `--acknowledge-empty-cloud-data` 明确确认不会自动迁移外部存量数据。
70
+ 先用 `cloud init` 检查当前空间的云服务权益,导入时使用 `--confirm-cloud-service` 确认云资源计划。外部项目切换到 QMuse 云服务时,还需添加 `--acknowledge-empty-cloud-data`,确认外部已有数据不会自动迁移。
77
71
 
78
72
  ### 恢复任务
79
73
 
@@ -83,63 +77,8 @@ qmuse import configure <jobId> --cloud-mode EXTERNAL \
83
77
  --public-config @public-config.json
84
78
  ```
85
79
 
86
- 本地等待中断不会取消服务端任务。对于 QMuse 下载模板,在项目根目录执行 `status --wait`,任务完成后 CLI 会继续更新 `.qmuse/project.json`。
87
-
88
- ## 首次创建与后续更新
89
-
90
- QMuse 下载模板包含 `.qmuse/project.json`:
91
-
92
- - 当前环境没有应用绑定时,`qmuse import .` 创建新应用和首个版本。
93
- - 当前环境已有绑定时,仍执行 `qmuse import .`,在原应用中创建新版本。
94
- - 源码 hash 未变化时直接返回,不创建任务。
95
- - 预发、生产和本地环境使用独立绑定。
96
-
97
- 普通外部仓库没有项目清单,每次导入都创建新应用,CLI 不会修改其本地目录。
98
-
99
- 项目清单只包含非敏感的平台标识。它不是鉴权凭证,服务端仍会校验空间、应用、版本和源码上传凭证的归属。
100
-
101
- ## 公开命令
102
-
103
- ```text
104
- qmuse help
105
- qmuse --version
106
- qmuse whoami
107
- qmuse login
108
- qmuse logout
109
- qmuse config
110
- qmuse space list
111
- qmuse space use <spaceId>
112
- qmuse space info
113
- qmuse cloud init
114
- qmuse import
115
- qmuse import status
116
- qmuse import configure
117
- ```
118
-
119
- ## 开发验证
120
-
121
- ```bash
122
- npm run build
123
- npm test
124
- ```
125
-
126
- ## 公网发布
127
-
128
- 先在 `package.json` 中设置未发布的语义化版本,然后执行:
129
-
130
- ```bash
131
- npm run publish:public
132
- ```
133
-
134
- 发布脚本默认使用 `dev` tag,也可以选择 `latest`。仓库中的内部包名不会被修改;脚本仅在发布期间将 npm 包名动态替换为 `@qmuse/qmuse-cli`,结束或失败后自动恢复。发布前可执行 `npm run publish:public -- --dry-run` 验证最终公网包。
80
+ 本地等待中断不会取消任务。回到原项目目录,使用 `status <jobId> --wait` 继续等待;任务提示需要补充云服务配置时,使用 `configure`。
135
81
 
136
- 主要模块:
82
+ ## 更多命令
137
83
 
138
- - `src/cli.ts`:命令解析和公开命令路由
139
- - `src/login.ts`:浏览器确认登录
140
- - `src/cloud.ts`:QMuse 云服务权益预检
141
- - `src/import/preflight.ts`:本地只读预检和源码 hash
142
- - `src/import/project.ts`:受管项目清单校验与原子更新
143
- - `src/import/archive.ts`:确定性源码 ZIP
144
- - `src/import/api.ts`:Import Job API
145
- - `src/import/poll.ts`:任务状态轮询
84
+ 运行 `qmuse help` 查看完整命令和参数,运行 `qmuse --version` 查看版本。
package/dist/cli.js CHANGED
@@ -635,7 +635,7 @@ const HELP = `QMuse CLI —— 将本地 React 项目导入 QMuse
635
635
  全局 flags:
636
636
  --env <env> 环境预设:prod / pre / local
637
637
  --json 结果以 JSON 输出
638
- --log 打印登录调试 URL 和临时 token(仅 browser 登录)
638
+ --log 打印登录请求接口和页面地址(不含登录凭证)
639
639
 
640
640
  全局 flags 可放在命令前或命令后
641
641
 
package/dist/login.js CHANGED
@@ -106,9 +106,7 @@ export async function loginBrowser(cfg, options = {}, dependencyOverrides) {
106
106
  const authUrl = new URL('/cli-auth', cfg.webBaseUrl);
107
107
  authUrl.searchParams.set('request', token);
108
108
  if (options.logRequestDetails) {
109
- log.warn('以下调试信息包含短期有效的一次性登录凭证,请勿分享');
110
- log.dim(`登录页面:${authUrl.toString()}`);
111
- log.dim(`request token:${token}`);
109
+ log.dim(`登录页面:${authUrl.origin}${authUrl.pathname}`);
112
110
  }
113
111
  log.info('正在打开 QMuse 登录页面...');
114
112
  log.info(`确认码:${token.slice(-6).toUpperCase()}`);
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@qmuse/qmuse-cli",
3
- "version": "1.0.0",
3
+ "version": "1.0.1-dev.0",
4
4
  "description": "将本地 React 项目安全导入 QMuse 的命令行客户端",
5
5
  "type": "module",
6
6
  "bin": {