@optima-chat/dev-skills 0.14.0 → 0.15.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.
@@ -1,6 +1,6 @@
1
1
  ---
2
2
  name: cn-deploy
3
- description: 当用户请求把服务发布/部署/构建到 cn-stage、跑云效流水线、cn-stage 发版、部署某个分支到 cn-stage、触发 cn 构建、yunxiao 部署、"把 xx 发到 cn"时,使用此技能。覆盖 cn-stage 全部 20 个服务(构建→DB迁移→SAE 发布一条龙)。
3
+ description: 当用户请求把服务发布/部署/构建到 cn-stage、跑云效流水线、cn-stage 发版、部署某个分支到 cn-stage、触发 cn 构建、yunxiao 部署、"把 xx 发到 cn"时,使用此技能。覆盖 cn-stage 全部 21 个服务(构建→DB迁移→SAE 发布一条龙;含 build-only 的 agent-runtime)。
4
4
  ---
5
5
 
6
6
  # cn-deploy - 云效 cn-stage 流水线发布
@@ -21,12 +21,13 @@ optima-cn-deploy --list # 列出全部可发服务
21
21
 
22
22
  ## 使用要点
23
23
 
24
- 1. **先 `--list` 确认服务名**(20 个服务,含 commerce-backend / optima-scout)。
24
+ 1. **先 `--list` 确认服务名**(21 个服务,含 commerce-backend / optima-scout / build-only 的 agent-runtime)。
25
25
  2. 全链约 3-8 分钟(agentic-chat 最重)。触发后会输出云效 run 链接,可发给用户自行围观。
26
26
  3. **凭证零配置**:构建凭证由云效变量组 `cn-stage-build-credentials`(41970) 供给,不需要注入任何 secret。
27
27
  4. 分支构建会把该分支代码部署到 cn-stage(替换现运行版本)——用户明确要求部署分支时才用。
28
28
  5. 失败排查:命令输出的 flow.aliyun.com 链接里看具体 step 日志;常见原因是该分支/仓的 Codeup mirror 凭证问题(命令会在 mirror 步就报错并中止,不会构建旧代码)。
29
29
  6. 成功标准:最后一行 `✓ SAE ImageUrl tag=<sha>` —— 流水线绿且 SAE 真的钉到了目标 commit。只看流水线绿不算完成。
30
+ 7. **build-only 服务(`agent-runtime`)**:非 SAE 常驻(gateway-core 按 session 拉起的镜像)。成功标准不是 SAE ImageUrl,而是流水线绿即可——release 段自动把 ACR digest 回写 Infisical `/services/gateway-core/ALIYUN_AGENT_RUNTIME_IMAGE`(#807) 并滚动重启 gateway-core(任一步失败即 exit 非 0)。工具最后一行为 `✓ 流水线 SUCCESS(build-only)…` —— CLI 以流水线终态为准,未独立校验 Infisical/gateway-core(digest 与重启变更单见 run『发版』段日志)。
30
31
 
31
32
 
32
33
  ## cn-prod vtag 发版(⚠️ 待 svenyang 首次验证通过后再日常使用)
@@ -1,6 +1,6 @@
1
1
  ---
2
2
  name: cn-deploy
3
- description: 当用户请求把服务发布/部署/构建到 cn-stage、跑云效流水线、cn-stage 发版、部署某个分支到 cn-stage、触发 cn 构建、yunxiao 部署、"把 xx 发到 cn"时,使用此技能。覆盖 cn-stage 全部 20 个服务(构建→DB迁移→SAE 发布一条龙)。
3
+ description: 当用户请求把服务发布/部署/构建到 cn-stage、跑云效流水线、cn-stage 发版、部署某个分支到 cn-stage、触发 cn 构建、yunxiao 部署、"把 xx 发到 cn"时,使用此技能。覆盖 cn-stage 全部 21 个服务(构建→DB迁移→SAE 发布一条龙;含 build-only 的 agent-runtime)。
4
4
  ---
5
5
 
6
6
  # cn-deploy - 云效 cn-stage 流水线发布
@@ -21,12 +21,13 @@ optima-cn-deploy --list # 列出全部可发服务
21
21
 
22
22
  ## 使用要点
23
23
 
24
- 1. **先 `--list` 确认服务名**(20 个服务,含 commerce-backend / optima-scout)。
24
+ 1. **先 `--list` 确认服务名**(21 个服务,含 commerce-backend / optima-scout / build-only 的 agent-runtime)。
25
25
  2. 全链约 3-8 分钟(agentic-chat 最重)。触发后会输出云效 run 链接,可发给用户自行围观。
26
26
  3. **凭证零配置**:构建凭证由云效变量组 `cn-stage-build-credentials`(41970) 供给,不需要注入任何 secret。
27
27
  4. 分支构建会把该分支代码部署到 cn-stage(替换现运行版本)——用户明确要求部署分支时才用。
28
28
  5. 失败排查:命令输出的 flow.aliyun.com 链接里看具体 step 日志;常见原因是该分支/仓的 Codeup mirror 凭证问题(命令会在 mirror 步就报错并中止,不会构建旧代码)。
29
29
  6. 成功标准:最后一行 `✓ SAE ImageUrl tag=<sha>` —— 流水线绿且 SAE 真的钉到了目标 commit。只看流水线绿不算完成。
30
+ 7. **build-only 服务(`agent-runtime`)**:非 SAE 常驻(gateway-core 按 session 拉起的镜像)。成功标准不是 SAE ImageUrl,而是流水线绿即可——release 段自动把 ACR digest 回写 Infisical `/services/gateway-core/ALIYUN_AGENT_RUNTIME_IMAGE`(#807) 并滚动重启 gateway-core(任一步失败即 exit 非 0)。工具最后一行为 `✓ 流水线 SUCCESS(build-only)…` —— CLI 以流水线终态为准,未独立校验 Infisical/gateway-core(digest 与重启变更单见 run『发版』段日志)。
30
31
 
31
32
 
32
33
  ## cn-prod vtag 发版(⚠️ 待 svenyang 首次验证通过后再日常使用)
@@ -34,9 +34,13 @@ const PROFILE = process.env.OPTIMA_ALIYUN_PROFILE || 'aliyun-optima';
34
34
  const CODEUP_BASE = `https://codeup.aliyun.com/${ORG}`;
35
35
 
36
36
  // 服务注册表(快照自 optima-terraform services.stage.env + gen-pipelines.py,2026-07-13)
37
- interface Svc { pipelineId: number; repo: string; saeAppId?: string; prodSaeAppId?: string; }
37
+ interface Svc { pipelineId: number; repo: string; saeAppId?: string; prodSaeAppId?: string; buildOnly?: boolean; }
38
38
  const SERVICES: Record<string, Svc> = {
39
39
  'agent-portal': { pipelineId: 5118519, repo: 'optima-portals', saeAppId: 'fe757f78-d18d-4480-9402-fe59d4721055', prodSaeAppId: '9211db38-a255-4393-ae92-7a7bb41b583d' },
40
+ // build-only:非 SAE 常驻(gateway-core 按 session 拉起的镜像)。release 段=解析 ACR digest
41
+ // → 回写 Infisical /services/gateway-core/ALIYUN_AGENT_RUNTIME_IMAGE(#807)→ 滚动重启 gateway-core。
42
+ // 无自身 saeAppId;prod 流水线(agent-runtime-cn-prod,5124970)按名实时解析(见下方 ListPipelines 逻辑)。
43
+ 'agent-runtime': { pipelineId: 5124962, repo: 'optima-gateway', buildOnly: true },
40
44
  'agentic-chat': { pipelineId: 5118520, repo: 'agentic-chat', saeAppId: '6aea1ce1-f813-4e1c-8e97-d1ecb5398e37', prodSaeAppId: '6e290c73-a646-43ef-9da5-ad0b2e7eff73' },
41
45
  'billing': { pipelineId: 5118521, repo: 'optima-billing', saeAppId: '09d8e292-dc64-4af8-bce5-0a56cb666921', prodSaeAppId: '6c31cf82-8802-4d45-b6a2-e9d7c83ccce9' },
42
46
  'browser-backend': { pipelineId: 5118522, repo: 'optima-browser-use', saeAppId: '1fced3f6-a80a-41a4-8f23-e4d5a467f8eb', prodSaeAppId: 'eb782ed9-c468-4e81-a0fe-87e5b4264192' },
@@ -161,7 +165,17 @@ async function main() {
161
165
  console.log(`${status === 'SUCCESS' ? '✅' : '❌'} ${svcName} run#${runId}: ${status}`);
162
166
  if (status !== 'SUCCESS') process.exit(1);
163
167
 
164
- // 4. SAE ImageUrl 校验(空返回重试守卫)。prod digest 寻址,校验含 @sha256 即部署成功。
168
+ // 4. 成功标准。build-only(agent-runtime)无自身 SAE app 可查:digest 回写 Infisical +
169
+ // 滚动重启 gateway-core 都在流水线 release 段内完成(任一步失败即 exit 非 0)。CLI 不碰
170
+ // Infisical 凭证,只以流水线终态为准、不独立校验回写是否真落地——故措辞用「应已」而非「已」;
171
+ // 真实 digest / 重启变更单在 run『发版』段日志里(见上方链接)。
172
+ if (svc.buildOnly) {
173
+ const infEnv = envName === 'prod' ? 'prod' : 'staging';
174
+ console.log(`✓ 流水线 SUCCESS(build-only)。release 段应已回写 ${infEnv} Infisical ALIYUN_AGENT_RUNTIME_IMAGE(@sha256 digest)并滚动重启 gateway-core;CLI 未独立校验,digest 见上方 run『发版』段日志`);
175
+ return;
176
+ }
177
+
178
+ // SAE ImageUrl 校验(空返回重试守卫)。prod 是 digest 寻址,校验含 @sha256 即部署成功。
165
179
  const appId = envName === 'prod' ? svc.prodSaeAppId : svc.saeAppId;
166
180
  if (appId) {
167
181
  let img = '';
@@ -35,6 +35,10 @@ const PROFILE = process.env.OPTIMA_ALIYUN_PROFILE || 'aliyun-optima';
35
35
  const CODEUP_BASE = `https://codeup.aliyun.com/${ORG}`;
36
36
  const SERVICES = {
37
37
  'agent-portal': { pipelineId: 5118519, repo: 'optima-portals', saeAppId: 'fe757f78-d18d-4480-9402-fe59d4721055', prodSaeAppId: '9211db38-a255-4393-ae92-7a7bb41b583d' },
38
+ // build-only:非 SAE 常驻(gateway-core 按 session 拉起的镜像)。release 段=解析 ACR digest
39
+ // → 回写 Infisical /services/gateway-core/ALIYUN_AGENT_RUNTIME_IMAGE(#807)→ 滚动重启 gateway-core。
40
+ // 无自身 saeAppId;prod 流水线(agent-runtime-cn-prod,5124970)按名实时解析(见下方 ListPipelines 逻辑)。
41
+ 'agent-runtime': { pipelineId: 5124962, repo: 'optima-gateway', buildOnly: true },
38
42
  'agentic-chat': { pipelineId: 5118520, repo: 'agentic-chat', saeAppId: '6aea1ce1-f813-4e1c-8e97-d1ecb5398e37', prodSaeAppId: '6e290c73-a646-43ef-9da5-ad0b2e7eff73' },
39
43
  'billing': { pipelineId: 5118521, repo: 'optima-billing', saeAppId: '09d8e292-dc64-4af8-bce5-0a56cb666921', prodSaeAppId: '6c31cf82-8802-4d45-b6a2-e9d7c83ccce9' },
40
44
  'browser-backend': { pipelineId: 5118522, repo: 'optima-browser-use', saeAppId: '1fced3f6-a80a-41a4-8f23-e4d5a467f8eb', prodSaeAppId: 'eb782ed9-c468-4e81-a0fe-87e5b4264192' },
@@ -191,7 +195,16 @@ async function main() {
191
195
  console.log(`${status === 'SUCCESS' ? '✅' : '❌'} ${svcName} run#${runId}: ${status}`);
192
196
  if (status !== 'SUCCESS')
193
197
  process.exit(1);
194
- // 4. SAE ImageUrl 校验(空返回重试守卫)。prod digest 寻址,校验含 @sha256 即部署成功。
198
+ // 4. 成功标准。build-only(agent-runtime)无自身 SAE app 可查:digest 回写 Infisical +
199
+ // 滚动重启 gateway-core 都在流水线 release 段内完成(任一步失败即 exit 非 0)。CLI 不碰
200
+ // Infisical 凭证,只以流水线终态为准、不独立校验回写是否真落地——故措辞用「应已」而非「已」;
201
+ // 真实 digest / 重启变更单在 run『发版』段日志里(见上方链接)。
202
+ if (svc.buildOnly) {
203
+ const infEnv = envName === 'prod' ? 'prod' : 'staging';
204
+ console.log(`✓ 流水线 SUCCESS(build-only)。release 段应已回写 ${infEnv} Infisical ALIYUN_AGENT_RUNTIME_IMAGE(@sha256 digest)并滚动重启 gateway-core;CLI 未独立校验,digest 见上方 run『发版』段日志`);
205
+ return;
206
+ }
207
+ // SAE ImageUrl 校验(空返回重试守卫)。prod 是 digest 寻址,校验含 @sha256 即部署成功。
195
208
  const appId = envName === 'prod' ? svc.prodSaeAppId : svc.saeAppId;
196
209
  if (appId) {
197
210
  let img = '';
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@optima-chat/dev-skills",
3
- "version": "0.14.0",
3
+ "version": "0.15.0",
4
4
  "description": "Claude Code Skills for Optima development team - cross-environment collaboration tools",
5
5
  "main": "index.js",
6
6
  "bin": {