@coze-arch/cli 0.0.36-alpha.102c95 → 0.0.36-alpha.15544e
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 +5 -2
- package/docs/deploy.md +50 -41
- package/lib/__templates__/expo/.cozeproj/scripts/dev_run.sh +35 -2
- package/lib/__templates__/expo/pnpm-lock.yaml +5 -5
- package/lib/__templates__/expo/server/package.json +1 -1
- package/lib/__templates__/nextjs/package.json +3 -3
- package/lib/__templates__/nextjs/pnpm-lock.yaml +513 -9
- package/lib/__templates__/nextjs/scripts/dev.sh +159 -14
- package/lib/__templates__/nextjs/template.config.js +1 -1
- package/lib/__templates__/nuxt-vue/package.json +1 -1
- package/lib/__templates__/nuxt-vue/pnpm-lock.yaml +5 -5
- package/lib/__templates__/nuxt-vue/scripts/dev.sh +29 -1
- package/lib/__templates__/pi-agent/package.json +1 -1
- package/lib/__templates__/pi-agent/pnpm-lock.yaml +5 -5
- package/lib/__templates__/taro/.cozeproj/scripts/dev_run.sh +29 -1
- package/lib/__templates__/taro/pnpm-lock.yaml +5 -5
- package/lib/__templates__/taro/server/package.json +1 -1
- package/lib/__templates__/vite/package.json +1 -1
- package/lib/__templates__/vite/pnpm-lock.yaml +5 -5
- package/lib/__templates__/vite/scripts/dev.sh +29 -1
- package/lib/__templates__/vite/template.config.js +1 -1
- package/lib/cli.js +429 -214
- package/package.json +1 -1
package/README.md
CHANGED
|
@@ -69,12 +69,15 @@ build_win = ["powershell.exe", "-NoProfile", "-ExecutionPolicy", "Bypass", "-Fil
|
|
|
69
69
|
|
|
70
70
|
## 部署
|
|
71
71
|
|
|
72
|
-
`coze-dev deploy` 内置于同一 CLI
|
|
72
|
+
`coze-dev deploy` 内置于同一 CLI。认证优先读取
|
|
73
|
+
`~/.coze/desktop/runtime.beta.json`,其次读取 `~/.coze/desktop/runtime.json`;
|
|
74
|
+
CLI 会依次验证候选 Token,收到 401 时继续尝试下一项,再回退到
|
|
75
|
+
`COZE_API_TOKEN` 和 `~/.coze/cli/config.json` 登录态:
|
|
73
76
|
|
|
74
77
|
```bash
|
|
75
78
|
coze-dev deploy auth login
|
|
76
79
|
coze-dev deploy doctor
|
|
77
|
-
coze-dev deploy
|
|
80
|
+
coze-dev deploy --source-root . --yes --wait
|
|
78
81
|
```
|
|
79
82
|
|
|
80
83
|
完整的应用、环境变量、Pages 和小程序命令说明见 [部署文档](./docs/deploy.md)。
|
package/docs/deploy.md
CHANGED
|
@@ -1,7 +1,16 @@
|
|
|
1
1
|
# coze-dev deploy
|
|
2
2
|
|
|
3
|
-
`coze-dev`
|
|
4
|
-
|
|
3
|
+
`coze-dev` 内置的部署命令。认证凭据按以下优先级读取:
|
|
4
|
+
|
|
5
|
+
1. `~/.coze/desktop/runtime.beta.json` 的 `patToken.accessToken`
|
|
6
|
+
2. `~/.coze/desktop/runtime.json` 的 `patToken.accessToken`
|
|
7
|
+
3. 非空环境变量 `COZE_API_TOKEN`
|
|
8
|
+
4. 主 Coze CLI 保存在 `~/.coze/cli/config.json` 中的登录状态
|
|
9
|
+
|
|
10
|
+
桌面运行时文件不存在、不可读、JSON 无效或 Token 字段缺失、为空时,CLI
|
|
11
|
+
静默尝试下一来源。固定 Token 会在单次 CLI 进程首次使用时依次验证;候选返回
|
|
12
|
+
401 时继续尝试下一来源,其他网络或服务端错误不会被误判成 Token 无效。选中的
|
|
13
|
+
Token 在本次进程内复用,不输出或持久化。
|
|
5
14
|
|
|
6
15
|
## 安装与运行
|
|
7
16
|
|
|
@@ -31,8 +40,8 @@ coze-dev deploy doctor
|
|
|
31
40
|
`x-tt-env` 和 `x-use-ppe: 1`,该参数只对当前命令生效:
|
|
32
41
|
|
|
33
42
|
```bash
|
|
34
|
-
coze-dev deploy --lane ppe_deploy
|
|
35
|
-
coze-dev deploy --lane ppe_deploy
|
|
43
|
+
coze-dev deploy --lane ppe_deploy app list
|
|
44
|
+
coze-dev deploy --lane ppe_deploy --source-root .
|
|
36
45
|
```
|
|
37
46
|
|
|
38
47
|
## 命令
|
|
@@ -42,22 +51,22 @@ coze-dev deploy context show
|
|
|
42
51
|
coze-dev deploy auth login|status|logout
|
|
43
52
|
coze-dev deploy context use --space-id <space_id>
|
|
44
53
|
coze-dev deploy doctor
|
|
45
|
-
coze-dev deploy
|
|
46
|
-
coze-dev deploy
|
|
47
|
-
coze-dev deploy
|
|
48
|
-
coze-dev deploy
|
|
49
|
-
coze-dev deploy
|
|
50
|
-
coze-dev deploy
|
|
51
|
-
coze-dev deploy [--lane <ppe_lane>]
|
|
52
|
-
coze-dev deploy
|
|
53
|
-
coze-dev deploy
|
|
54
|
-
coze-dev deploy
|
|
55
|
-
coze-dev deploy
|
|
56
|
-
coze-dev deploy
|
|
57
|
-
coze-dev deploy
|
|
54
|
+
coze-dev deploy app list [--page-size <n>] [--page-token <token>] [--all]
|
|
55
|
+
coze-dev deploy app show --app-id <app_id>
|
|
56
|
+
coze-dev deploy app rename <name> --app-id <app_id> --yes
|
|
57
|
+
coze-dev deploy app delete --app-id <app_id> --yes
|
|
58
|
+
coze-dev deploy app analytics|metrics --app-id <app_id> [--time-range <range>]
|
|
59
|
+
coze-dev deploy app usage --app-id <app_id> --bill-month <YYYY-MM>
|
|
60
|
+
coze-dev deploy [--lane <ppe_lane>] [--source-root <directory>] [--app-id <app_id>] [--application-type <type>] [--name <name>] [--connector-id <id>]
|
|
61
|
+
coze-dev deploy status|list|online|rollback-check|cancel|rollback|stop|resume|pause
|
|
62
|
+
coze-dev deploy logs|log-count|count|build-log|config
|
|
63
|
+
coze-dev deploy domain list [--unit-type dev|prod]
|
|
64
|
+
coze-dev deploy domain add <domain>
|
|
65
|
+
coze-dev deploy domain set-prefix <prefix> --app-id <app_id> --yes
|
|
66
|
+
coze-dev deploy mini-program status|bind|submit-code|unbind|auth|preview
|
|
58
67
|
```
|
|
59
68
|
|
|
60
|
-
`
|
|
69
|
+
`app list` 是真分页:一次只返回一页(`--page-size` 默认 20、上限 100),`has_more` 为真时用返回的 `next_page_token` 取下一页;要一次拿到名下全部应用用 `--all`,它会自己翻到底。
|
|
61
70
|
|
|
62
71
|
部署确认阶段不传 `--yes`;确认后使用相同参数增加 `--yes`,需要等待终态时再增加
|
|
63
72
|
`--wait`。CLI 会为每次请求自动生成一个 40 位十六进制源码快照 ID,用于兼容 V2 接口的
|
|
@@ -85,8 +94,8 @@ Pages 首次部署没有 `app_id`,必须显式指定交付类型。Pages 将
|
|
|
85
94
|
执行 `deploy.build`,并要求最终产出 `out/index.html`:
|
|
86
95
|
|
|
87
96
|
```bash
|
|
88
|
-
coze-dev deploy
|
|
89
|
-
coze-dev deploy
|
|
97
|
+
coze-dev deploy --source-root . --application-type pages
|
|
98
|
+
coze-dev deploy --source-root . --application-type pages --yes --wait
|
|
90
99
|
```
|
|
91
100
|
|
|
92
101
|
创建成功后 CLI 会把 Pages Application 写入 `.coze`;后续可继续传
|
|
@@ -109,28 +118,28 @@ V2 接口的所有参数均通过 POST JSON body 发送,不会放入 URL。确
|
|
|
109
118
|
通过 `app_id` 查看当前线上版本的环境变量及快照状态:
|
|
110
119
|
|
|
111
120
|
```bash
|
|
112
|
-
coze-dev deploy
|
|
113
|
-
coze-dev deploy
|
|
121
|
+
coze-dev deploy env list
|
|
122
|
+
coze-dev deploy env list --app-id 7672644451805691910
|
|
114
123
|
```
|
|
115
124
|
|
|
116
125
|
小程序部署可重复指定渠道:微信为 `10000127`,抖音为 `10000126`:
|
|
117
126
|
|
|
118
127
|
```bash
|
|
119
|
-
coze-dev deploy
|
|
128
|
+
coze-dev deploy --source-root . --application-type mini_program \
|
|
120
129
|
--connector-id 10000127 --yes --wait
|
|
121
130
|
```
|
|
122
131
|
|
|
123
132
|
小程序预览先完成授权,再执行 preview。preview 会打包微信的 dist/ 或抖音的 dist-tt/ 并上传。Project ID 可通过参数传入或从 .coze 自动读取。
|
|
124
133
|
|
|
125
134
|
```bash
|
|
126
|
-
coze-dev deploy
|
|
127
|
-
coze-dev deploy
|
|
135
|
+
coze-dev deploy mini-program auth --platform wechat --mini-app-id wx123 --source-root .
|
|
136
|
+
coze-dev deploy mini-program preview --platform wechat --mini-app-id wx123 --source-root .
|
|
128
137
|
```
|
|
129
138
|
|
|
130
139
|
绑定小程序 AppID 时,默认从源码目录 `.coze [project]` 读取该目录的 `project_id`:
|
|
131
140
|
|
|
132
141
|
```bash
|
|
133
|
-
coze-dev deploy
|
|
142
|
+
coze-dev deploy mini-program bind \
|
|
134
143
|
--platform wechat \
|
|
135
144
|
--mini-app-id wx123 \
|
|
136
145
|
--redirect-url https://code.coze.cn/coding/auth/callback/miniprogram
|
|
@@ -139,34 +148,34 @@ coze-dev deploy code mini-program bind \
|
|
|
139
148
|
返回 `bind_status=1` 时,打开 `need_authorize_data.auth_url` 完成授权。回调页会自动
|
|
140
149
|
提交授权码;无回调页的调用方也可使用 `mini-program submit-code` 手动提交。
|
|
141
150
|
|
|
142
|
-
`
|
|
143
|
-
key 时,`
|
|
151
|
+
`deploy status` 和 `list` 会返回 `deploy_detail[].deploy_log_key`。只有一个日志
|
|
152
|
+
key 时,`deploy build-log --deploy-id <id>` 会自动解析;存在多个 key 时按错误
|
|
144
153
|
详情中的 `available_keys` 选择一个并传 `--key`。
|
|
145
154
|
|
|
146
155
|
应用维度的管理和观测命令均支持 `--app-id`;省略时从当前目录的 `.coze [project]` 读取:
|
|
147
156
|
|
|
148
157
|
```bash
|
|
149
|
-
coze-dev deploy
|
|
150
|
-
coze-dev deploy
|
|
151
|
-
coze-dev deploy
|
|
152
|
-
coze-dev deploy
|
|
153
|
-
coze-dev deploy
|
|
154
|
-
coze-dev deploy
|
|
155
|
-
coze-dev deploy
|
|
156
|
-
coze-dev deploy
|
|
158
|
+
coze-dev deploy app rename "新应用名称" --app-id <app_id> --yes
|
|
159
|
+
coze-dev deploy online --app-id <app_id>
|
|
160
|
+
coze-dev deploy rollback-check --app-id <app_id> --deploy-id <history_id>
|
|
161
|
+
coze-dev deploy log-count --app-id <app_id>
|
|
162
|
+
coze-dev deploy count --app-id <app_id>
|
|
163
|
+
coze-dev deploy app metrics --app-id <app_id> --time-range week
|
|
164
|
+
coze-dev deploy app usage --app-id <app_id> --bill-month 2026-08
|
|
165
|
+
coze-dev deploy domain list --app-id <app_id> --unit-type dev
|
|
157
166
|
```
|
|
158
167
|
|
|
159
168
|
`domain list` 默认查询 Prod 域名;传 `--unit-type dev` 查询开发态预览域名。
|
|
160
169
|
审核 Unit 是内部流水线槽位,不支持从 CLI 查询。
|
|
161
170
|
|
|
162
|
-
`
|
|
163
|
-
后缀不变;`
|
|
171
|
+
`domain set-prefix` 改的是**系统分配的默认域名**(`<prefix>.coze.site`)里的 prefix,
|
|
172
|
+
后缀不变;`domain add` 加进来的自定义域名不受影响 —— 那类域名服务端只有 create/delete,
|
|
164
173
|
域名串本身改不了。改完旧默认域名立刻不再指向本应用,已经发出去的链接会失效,所以必须传 `--yes`。
|
|
165
174
|
前缀的长度、保留词、是否被占用由服务端判定,CLI 只拦形态明显不合法的值(大写、首尾连字符等)。
|
|
166
175
|
这是**权益能力**:账号没有对应权益时服务端会直接拒绝。
|
|
167
176
|
|
|
168
|
-
`
|
|
169
|
-
仍在服务时会返回一条带当前状态的错误,先跑 `
|
|
177
|
+
`app delete` 删除应用,终态不可撤销,必须传 `--yes`。服务端**只接受已停服的应用**:
|
|
178
|
+
仍在服务时会返回一条带当前状态的错误,先跑 `deploy stop --yes` 再删。CLI 不会替你先停 ——
|
|
170
179
|
停服会真的把线上服务摘掉,那一步要由你自己确认。删除会一并停掉该应用名下的部署单元、
|
|
171
180
|
软删它的域名并清理残留的函数;已删除的应用再删一次是幂等成功。删完记得把 `.coze [project]`
|
|
172
|
-
里的 `app_id` 去掉,否则同目录下一次 `
|
|
181
|
+
里的 `app_id` 去掉,否则同目录下一次 `deploy` 会打到这个已删除的应用上被服务端拒。
|
|
@@ -16,7 +16,12 @@ EXPO_HOST="0.0.0.0"
|
|
|
16
16
|
EXPO_DIR="expo"
|
|
17
17
|
# DEPLOY_RUN_PORT 是平台注入的对外端口,EXPO_PORT 保留为本地覆盖项。
|
|
18
18
|
EXPO_PORT="${DEPLOY_RUN_PORT:-${EXPO_PORT:-<%= port %>}}"
|
|
19
|
-
|
|
19
|
+
COZE_HARDWARE_DID="${COZE_HARDWARE_DID:-}"
|
|
20
|
+
if [ -n "${EXPO_PORT:-}" ] && [ -n "${COZE_HARDWARE_DID}" ]; then
|
|
21
|
+
WEB_URL="${COZE_PROJECT_DOMAIN_DEFAULT:-https://cozedaemon-${COZE_HARDWARE_DID}-${EXPO_PORT}.dev.coze.site}"
|
|
22
|
+
else
|
|
23
|
+
WEB_URL="${COZE_PROJECT_DOMAIN_DEFAULT:-http://127.0.0.1:${SERVER_PORT}}"
|
|
24
|
+
fi
|
|
20
25
|
ASSUME_YES="1"
|
|
21
26
|
EXPO_PUBLIC_BACKEND_BASE_URL="${EXPO_PUBLIC_BACKEND_BASE_URL:-$WEB_URL}"
|
|
22
27
|
EXPO_PUBLIC_COZE_PROJECT_ID="${COZE_PROJECT_ID:-}"
|
|
@@ -117,14 +122,41 @@ wait_port_connectable() {
|
|
|
117
122
|
return 1
|
|
118
123
|
}
|
|
119
124
|
|
|
125
|
+
# detached 出去的进程没人负责回收,超过这个时长就自己退出,避免端口与内存长期泄露。
|
|
126
|
+
MAX_RUNTIME_SECONDS=1200
|
|
127
|
+
|
|
128
|
+
# 真正被 detach 的是这层 bash wrapper:它是进程组 leader,组内 watchdog 到点回收整组
|
|
129
|
+
# (wrapper -> pnpm -> expo/node);被包的进程自己先退出时也顺手清空进程组,不留残余。
|
|
130
|
+
RUN_WITH_TIMEOUT='
|
|
131
|
+
timeout_seconds=$1
|
|
132
|
+
shift
|
|
133
|
+
|
|
134
|
+
"$@" &
|
|
135
|
+
child_pid=$!
|
|
136
|
+
|
|
137
|
+
# 先忽略 TERM,才能在向整组发 TERM(自己也在组里)之后存活下来补一发 KILL。
|
|
138
|
+
( trap "" TERM
|
|
139
|
+
sleep "${timeout_seconds}"
|
|
140
|
+
echo "[dev] 后台进程运行超过 ${timeout_seconds}s,回收进程组 $$。"
|
|
141
|
+
kill -TERM -- "-$$" 2>/dev/null || true
|
|
142
|
+
sleep 5
|
|
143
|
+
kill -KILL -- "-$$" 2>/dev/null || true
|
|
144
|
+
) &
|
|
145
|
+
|
|
146
|
+
wait "${child_pid}"
|
|
147
|
+
kill -KILL -- "-$$" 2>/dev/null || true
|
|
148
|
+
'
|
|
149
|
+
|
|
120
150
|
# coze-daemon 会在 runtime shell 退出时清理原进程组。
|
|
121
151
|
# 通过 Node detached spawn 创建独立 session/进程组,并将 stdio 直接写入日志。
|
|
152
|
+
# 返回的 PID 是 wrapper 的,同时也是整个进程组的 PGID,后续按组回收。
|
|
122
153
|
spawn_detached() {
|
|
123
154
|
local cwd="$1"
|
|
124
155
|
local log_file="$2"
|
|
125
156
|
shift 2
|
|
126
157
|
|
|
127
|
-
node - "$cwd" "$log_file"
|
|
158
|
+
node - "$cwd" "$log_file" \
|
|
159
|
+
/bin/bash -c "${RUN_WITH_TIMEOUT}" detached-runner "${MAX_RUNTIME_SECONDS}" "$@" <<'NODE'
|
|
128
160
|
const fs = require('node:fs');
|
|
129
161
|
const { spawn } = require('node:child_process');
|
|
130
162
|
|
|
@@ -258,6 +290,7 @@ if [ -z "${EXPO_PID}" ]; then
|
|
|
258
290
|
fi
|
|
259
291
|
|
|
260
292
|
echo "所有服务已启动。Server PID: ${SERVER_PID}, Expo PID: ${EXPO_PID}"
|
|
293
|
+
echo "两个服务均在 ${MAX_RUNTIME_SECONDS}s 后自动退出。"
|
|
261
294
|
|
|
262
295
|
echo "检查 Server 服务端口:$SERVER_HOST:$SERVER_PORT"
|
|
263
296
|
if wait_port_connectable "$SERVER_HOST" "$SERVER_PORT" 10 2; then
|
|
@@ -269,8 +269,8 @@ importers:
|
|
|
269
269
|
specifier: ^2.8.5
|
|
270
270
|
version: 2.8.6
|
|
271
271
|
coze-coding-dev-sdk:
|
|
272
|
-
specifier: ^0.7.25-beta.
|
|
273
|
-
version: 0.7.25-beta.
|
|
272
|
+
specifier: ^0.7.25-beta.8
|
|
273
|
+
version: 0.7.25-beta.8(openai@6.16.0(ws@8.19.0)(zod@4.3.6))(ws@8.19.0)
|
|
274
274
|
dayjs:
|
|
275
275
|
specifier: ^1.11.20
|
|
276
276
|
version: 1.11.20
|
|
@@ -2643,8 +2643,8 @@ packages:
|
|
|
2643
2643
|
resolution: {integrity: sha512-AdmX6xUzdNASswsFtmwSt7Vj8po9IuqXm0UXz7QKPuEUmPB4XyjGfaAr2PSuELMwkRMVH1EpIkX5bTZGRB3eCA==}
|
|
2644
2644
|
engines: {node: '>=10'}
|
|
2645
2645
|
|
|
2646
|
-
coze-coding-dev-sdk@0.7.25-beta.
|
|
2647
|
-
resolution: {integrity: sha512
|
|
2646
|
+
coze-coding-dev-sdk@0.7.25-beta.8:
|
|
2647
|
+
resolution: {integrity: sha512-RSKlXCO0W/OPDjx9D9JICn2cGeOJw3iG+y0Pr1AhAf7YdAjjNbBZoG7qfg0Zg2SqgaVN2qSLQFmKPbhNq9ZWSg==}
|
|
2648
2648
|
engines: {node: '>=18.0.0'}
|
|
2649
2649
|
hasBin: true
|
|
2650
2650
|
|
|
@@ -9088,7 +9088,7 @@ snapshots:
|
|
|
9088
9088
|
path-type: 4.0.0
|
|
9089
9089
|
yaml: 1.10.2
|
|
9090
9090
|
|
|
9091
|
-
coze-coding-dev-sdk@0.7.25-beta.
|
|
9091
|
+
coze-coding-dev-sdk@0.7.25-beta.8(openai@6.16.0(ws@8.19.0)(zod@4.3.6))(ws@8.19.0):
|
|
9092
9092
|
dependencies:
|
|
9093
9093
|
'@langchain/core': 1.1.17(openai@6.16.0(ws@8.19.0)(zod@4.3.6))
|
|
9094
9094
|
'@langchain/openai': 1.2.3(@langchain/core@1.1.17(openai@6.16.0(ws@8.19.0)(zod@4.3.6)))(ws@8.19.0)
|
|
@@ -47,7 +47,7 @@
|
|
|
47
47
|
"class-variance-authority": "^0.7.1",
|
|
48
48
|
"clsx": "^2.1.1",
|
|
49
49
|
"cmdk": "^1.1.1",
|
|
50
|
-
"coze-coding-dev-sdk": "^0.7.
|
|
50
|
+
"coze-coding-dev-sdk": "^0.7.25-beta.8",
|
|
51
51
|
"date-fns": "^4.1.0",
|
|
52
52
|
"dotenv": "^17.2.3",
|
|
53
53
|
"drizzle-kit": "^0.31.8",
|
|
@@ -56,7 +56,7 @@
|
|
|
56
56
|
"embla-carousel-react": "^8.6.0",
|
|
57
57
|
"input-otp": "^1.4.2",
|
|
58
58
|
"lucide-react": "^0.468.0",
|
|
59
|
-
"next": "16.
|
|
59
|
+
"next": "16.3.3",
|
|
60
60
|
"next-themes": "^0.4.6",
|
|
61
61
|
"pg": "^8.16.3",
|
|
62
62
|
"react": "19.2.3",
|
|
@@ -80,7 +80,7 @@
|
|
|
80
80
|
"@types/react": "^19",
|
|
81
81
|
"@types/react-dom": "^19",
|
|
82
82
|
"eslint": "^9",
|
|
83
|
-
"eslint-config-next": "16.
|
|
83
|
+
"eslint-config-next": "16.3.3",
|
|
84
84
|
"only-allow": "^1.2.2",
|
|
85
85
|
"react-dev-inspector": "^2.0.1",
|
|
86
86
|
"shadcn": "latest",
|