@clawos-dev/clawd 0.2.580 → 0.2.582
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/dist/app-builder-plugin/mcp-server.cjs +65 -1
- package/dist/cli.cjs +168 -16
- package/dist/cloud-persona-metrics.html +20 -20
- package/dist/dispatch/mcp-server.cjs +21 -0
- package/dist/persona-defaults/persona-app-builder/mcp/clawd-app-builder/mcp-server.cjs +65 -1
- package/dist/persona-defaults/persona-dataclaw-builder/mcp/clawd-app-builder/mcp-server.cjs +65 -1
- package/dist/share-md-viewer-error.html +1 -1
- package/dist/share-md-viewer.html +1 -1
- package/dist/share-ui/assets/guest-DHhedWaX.css +32 -0
- package/dist/share-ui/assets/{guest-FAzRSFSP.js → guest-vguZTQav.js} +132 -132
- package/dist/share-ui/guest.html +2 -2
- package/package.json +1 -1
- package/dist/share-ui/assets/guest-DlXgPRHE.css +0 -32
|
@@ -21520,6 +21520,12 @@ var DeployRunSchema = external_exports.object({
|
|
|
21520
21520
|
/** run 刚入队时可能一条都还没有 */
|
|
21521
21521
|
jobs: external_exports.array(DeployJobSchema)
|
|
21522
21522
|
}).strict();
|
|
21523
|
+
var DeployUnpublishRunSchema = external_exports.object({
|
|
21524
|
+
runId: external_exports.number(),
|
|
21525
|
+
status: DeployRunSchema.shape.status,
|
|
21526
|
+
conclusion: external_exports.enum(["success", "failure"]).optional(),
|
|
21527
|
+
htmlUrl: external_exports.string().min(1)
|
|
21528
|
+
}).strict();
|
|
21523
21529
|
var DeployStateSchema = external_exports.object({
|
|
21524
21530
|
personaId: external_exports.string().min(1),
|
|
21525
21531
|
/** 本机 GitHub 身份(机器级,githubAuth:* 的同一份;上云页顶上那张卡用)。老 daemon 不给(可选只为兼容),UI 缺席时按未知处理 */
|
|
@@ -21536,12 +21542,23 @@ var DeployStateSchema = external_exports.object({
|
|
|
21536
21542
|
* **缺席是常态**:没推过、没授权 GitHub、GitHub 查不到、仓库还没有 run,都不该让整页打不开——同 `secrets` 的处理。
|
|
21537
21543
|
*/
|
|
21538
21544
|
run: DeployRunSchema.optional(),
|
|
21545
|
+
/**
|
|
21546
|
+
* 现在在不在线上 = gateway 的正式登记表里有没有它(`/healthz`,跟 persona 列表里云卡片同一个来源)。
|
|
21547
|
+
* **缺席 = 查不到**(没登录飞书 / 连不上云上服务),不是「不在」——页面据此不给下线按钮,也不撤「线上」标。
|
|
21548
|
+
* 不看 `releases`:发布过不等于还在线上(下线过、或者被人用脚本撤了)
|
|
21549
|
+
*/
|
|
21550
|
+
online: external_exports.boolean().optional(),
|
|
21551
|
+
/** 最新那次下线流水线。没下线过 / 没仓库 / 没 GitHub 身份 / 查不到都缺席 */
|
|
21552
|
+
unpublish: DeployUnpublishRunSchema.optional(),
|
|
21539
21553
|
/**
|
|
21540
21554
|
* `.clawd/deploy-scan.json` 读不出来(坏 JSON / 不合形状)时的人话。有它 `scans` 为空。
|
|
21541
21555
|
* 页面据此给一条能走的路(重新扫描会重建这个文件),而不是白屏。
|
|
21542
21556
|
*/
|
|
21543
21557
|
historyError: external_exports.string().optional()
|
|
21544
21558
|
}).strict();
|
|
21559
|
+
var DeployUnpublishResultSchema = external_exports.object({
|
|
21560
|
+
before: external_exports.number().nullable()
|
|
21561
|
+
}).strict();
|
|
21545
21562
|
var DeployReleaseResultSchema = external_exports.object({
|
|
21546
21563
|
sha: external_exports.string().min(1),
|
|
21547
21564
|
actionsUrl: external_exports.string().min(1)
|
|
@@ -24089,6 +24106,10 @@ var METHOD_DOCS = {
|
|
|
24089
24106
|
summary: "\u539F\u6837\u91CD\u8DD1\u6700\u65B0\u90A3\u6761\u6D41\u6C34\u7EBF\u91CC\u5931\u8D25\u7684\u67D0\u4E00\u6BB5\uFF08GitHub REST rerun job\uFF09\u3002**\u540C\u4E00\u4E2A commit\u3001\u540C\u4E00\u4EFD\u8F93\u5165**\uFF0C\u4E0D\u4EA7\u751F\u65B0\u63D0\u4EA4\u2014\u2014\u6539\u4E86 persona \u5185\u5BB9\u8981 deploy:scan \u518D deploy:release\u3002jobId \u5FC5\u987B\u5C5E\u4E8E\u6700\u65B0\u90A3\u6761 run\uFF1Bowner-only",
|
|
24090
24107
|
args: DeployRerunJobArgsSchema
|
|
24091
24108
|
},
|
|
24109
|
+
"deploy:unpublish": {
|
|
24110
|
+
summary: "\u4E0B\u7EBF\uFF1A\u89E6\u53D1 persona \u4ED3\u5E93\u91CC\u7684 clawd-unpublish.yml\uFF08workflow_dispatch\uFF09\uFF0C\u7531\u6D41\u6C34\u7EBF\u5728 gateway \u64A4\u6389\u6B63\u5F0F\u767B\u8BB0\u2014\u2014\u522B\u4EBA\u770B\u4E0D\u5230\u3001\u7528\u4E0D\u4E86\uFF1B\u4ED3\u5E93 / \u955C\u50CF / \u672C\u673A\u4E0A\u4E91\u8BB0\u5F55\u90FD\u4E0D\u52A8\uFF0C\u91CD\u65B0\u53D1\u5E03\u5C31\u56DE\u6765\u3002\u6700\u540E\u4E00\u6B21\u53D1\u5E03\u7684 commit \u91CC\u6CA1\u6709\u8FD9\u4EFD workflow\uFF08\u65E7\u6A21\u677F\uFF09\u65F6\u62D2\uFF0C\u8981\u5148\u91CD\u65B0\u53D1\u5E03\u4E00\u6B21\u3002\u56DE { before }\uFF1A\u89E6\u53D1\u4E4B\u524D\u73B0\u67E5\u7684\u6700\u65B0\u4E0B\u7EBF run id\uFF08\u6CA1\u4E0B\u7EBF\u8FC7 = null\uFF09\uFF0C\u9875\u9762\u62FF\u5B83\u8BA4\u65B0 run\uFF1Bowner-only\u3001human-only",
|
|
24111
|
+
args: DeployPersonaArgsSchema
|
|
24112
|
+
},
|
|
24092
24113
|
// ---- githubAuth:*(本机 GitHub 身份,机器级;spec 2026-09-15-github-auth-unify-design §4.3)----
|
|
24093
24114
|
"githubAuth:get": {
|
|
24094
24115
|
summary: "\u672C\u673A\u7684 GitHub \u8EAB\u4EFD\uFF1Aauthorized\uFF08@login\uFF0C\u6765\u81EA git \u51ED\u636E\u5B58\u50A8 / \u672C\u673A\u51ED\u636E\u8868\uFF09/ missing / invalid\uFF08GitHub \u4E0D\u8BA4\uFF09/ pending\uFF08\u7B49 GitHub \u8DF3\u56DE\u4E2D\u5FC3\uFF09\u3002\u8BBE\u7F6E\u9875\u300C\u8D26\u53F7\u300D\u3001\u4E0A\u4E91\u9875\u9876\u4E0A\u90A3\u5F20\u5361\u3001PR \u6536\u4EF6\u7BB1\u90FD\u770B\u5B83\uFF1Bpending \u671F\u9875\u9762\u6BCF 2 \u79D2\u8F6E\u8BE2\uFF0Cdaemon \u987A\u624B\u5411\u4E2D\u5FC3\u9886 token\u3002\u65E0\u53C2\u6570",
|
|
@@ -21706,6 +21706,12 @@ var DeployRunSchema = external_exports.object({
|
|
|
21706
21706
|
/** run 刚入队时可能一条都还没有 */
|
|
21707
21707
|
jobs: external_exports.array(DeployJobSchema)
|
|
21708
21708
|
}).strict();
|
|
21709
|
+
var DeployUnpublishRunSchema = external_exports.object({
|
|
21710
|
+
runId: external_exports.number(),
|
|
21711
|
+
status: DeployRunSchema.shape.status,
|
|
21712
|
+
conclusion: external_exports.enum(["success", "failure"]).optional(),
|
|
21713
|
+
htmlUrl: external_exports.string().min(1)
|
|
21714
|
+
}).strict();
|
|
21709
21715
|
var DeployStateSchema = external_exports.object({
|
|
21710
21716
|
personaId: external_exports.string().min(1),
|
|
21711
21717
|
/** 本机 GitHub 身份(机器级,githubAuth:* 的同一份;上云页顶上那张卡用)。老 daemon 不给(可选只为兼容),UI 缺席时按未知处理 */
|
|
@@ -21722,12 +21728,23 @@ var DeployStateSchema = external_exports.object({
|
|
|
21722
21728
|
* **缺席是常态**:没推过、没授权 GitHub、GitHub 查不到、仓库还没有 run,都不该让整页打不开——同 `secrets` 的处理。
|
|
21723
21729
|
*/
|
|
21724
21730
|
run: DeployRunSchema.optional(),
|
|
21731
|
+
/**
|
|
21732
|
+
* 现在在不在线上 = gateway 的正式登记表里有没有它(`/healthz`,跟 persona 列表里云卡片同一个来源)。
|
|
21733
|
+
* **缺席 = 查不到**(没登录飞书 / 连不上云上服务),不是「不在」——页面据此不给下线按钮,也不撤「线上」标。
|
|
21734
|
+
* 不看 `releases`:发布过不等于还在线上(下线过、或者被人用脚本撤了)
|
|
21735
|
+
*/
|
|
21736
|
+
online: external_exports.boolean().optional(),
|
|
21737
|
+
/** 最新那次下线流水线。没下线过 / 没仓库 / 没 GitHub 身份 / 查不到都缺席 */
|
|
21738
|
+
unpublish: DeployUnpublishRunSchema.optional(),
|
|
21725
21739
|
/**
|
|
21726
21740
|
* `.clawd/deploy-scan.json` 读不出来(坏 JSON / 不合形状)时的人话。有它 `scans` 为空。
|
|
21727
21741
|
* 页面据此给一条能走的路(重新扫描会重建这个文件),而不是白屏。
|
|
21728
21742
|
*/
|
|
21729
21743
|
historyError: external_exports.string().optional()
|
|
21730
21744
|
}).strict();
|
|
21745
|
+
var DeployUnpublishResultSchema = external_exports.object({
|
|
21746
|
+
before: external_exports.number().nullable()
|
|
21747
|
+
}).strict();
|
|
21731
21748
|
var DeployReleaseResultSchema = external_exports.object({
|
|
21732
21749
|
sha: external_exports.string().min(1),
|
|
21733
21750
|
actionsUrl: external_exports.string().min(1)
|
|
@@ -24275,6 +24292,10 @@ var METHOD_DOCS = {
|
|
|
24275
24292
|
summary: "\u539F\u6837\u91CD\u8DD1\u6700\u65B0\u90A3\u6761\u6D41\u6C34\u7EBF\u91CC\u5931\u8D25\u7684\u67D0\u4E00\u6BB5\uFF08GitHub REST rerun job\uFF09\u3002**\u540C\u4E00\u4E2A commit\u3001\u540C\u4E00\u4EFD\u8F93\u5165**\uFF0C\u4E0D\u4EA7\u751F\u65B0\u63D0\u4EA4\u2014\u2014\u6539\u4E86 persona \u5185\u5BB9\u8981 deploy:scan \u518D deploy:release\u3002jobId \u5FC5\u987B\u5C5E\u4E8E\u6700\u65B0\u90A3\u6761 run\uFF1Bowner-only",
|
|
24276
24293
|
args: DeployRerunJobArgsSchema
|
|
24277
24294
|
},
|
|
24295
|
+
"deploy:unpublish": {
|
|
24296
|
+
summary: "\u4E0B\u7EBF\uFF1A\u89E6\u53D1 persona \u4ED3\u5E93\u91CC\u7684 clawd-unpublish.yml\uFF08workflow_dispatch\uFF09\uFF0C\u7531\u6D41\u6C34\u7EBF\u5728 gateway \u64A4\u6389\u6B63\u5F0F\u767B\u8BB0\u2014\u2014\u522B\u4EBA\u770B\u4E0D\u5230\u3001\u7528\u4E0D\u4E86\uFF1B\u4ED3\u5E93 / \u955C\u50CF / \u672C\u673A\u4E0A\u4E91\u8BB0\u5F55\u90FD\u4E0D\u52A8\uFF0C\u91CD\u65B0\u53D1\u5E03\u5C31\u56DE\u6765\u3002\u6700\u540E\u4E00\u6B21\u53D1\u5E03\u7684 commit \u91CC\u6CA1\u6709\u8FD9\u4EFD workflow\uFF08\u65E7\u6A21\u677F\uFF09\u65F6\u62D2\uFF0C\u8981\u5148\u91CD\u65B0\u53D1\u5E03\u4E00\u6B21\u3002\u56DE { before }\uFF1A\u89E6\u53D1\u4E4B\u524D\u73B0\u67E5\u7684\u6700\u65B0\u4E0B\u7EBF run id\uFF08\u6CA1\u4E0B\u7EBF\u8FC7 = null\uFF09\uFF0C\u9875\u9762\u62FF\u5B83\u8BA4\u65B0 run\uFF1Bowner-only\u3001human-only",
|
|
24297
|
+
args: DeployPersonaArgsSchema
|
|
24298
|
+
},
|
|
24278
24299
|
// ---- githubAuth:*(本机 GitHub 身份,机器级;spec 2026-09-15-github-auth-unify-design §4.3)----
|
|
24279
24300
|
"githubAuth:get": {
|
|
24280
24301
|
summary: "\u672C\u673A\u7684 GitHub \u8EAB\u4EFD\uFF1Aauthorized\uFF08@login\uFF0C\u6765\u81EA git \u51ED\u636E\u5B58\u50A8 / \u672C\u673A\u51ED\u636E\u8868\uFF09/ missing / invalid\uFF08GitHub \u4E0D\u8BA4\uFF09/ pending\uFF08\u7B49 GitHub \u8DF3\u56DE\u4E2D\u5FC3\uFF09\u3002\u8BBE\u7F6E\u9875\u300C\u8D26\u53F7\u300D\u3001\u4E0A\u4E91\u9875\u9876\u4E0A\u90A3\u5F20\u5361\u3001PR \u6536\u4EF6\u7BB1\u90FD\u770B\u5B83\uFF1Bpending \u671F\u9875\u9762\u6BCF 2 \u79D2\u8F6E\u8BE2\uFF0Cdaemon \u987A\u624B\u5411\u4E2D\u5FC3\u9886 token\u3002\u65E0\u53C2\u6570",
|
|
@@ -24850,6 +24871,10 @@ var PackageFindingSchema = EnvPackageSchema.omit({ localVersion: true, artifact:
|
|
|
24850
24871
|
// src/deploy/templates.ts
|
|
24851
24872
|
var CLAWOS_REPO = "ottin4ttc/clawos";
|
|
24852
24873
|
var CLAWOS_REF = "release";
|
|
24874
|
+
var DEPLOY_WORKFLOW_FILE = "clawd-deploy.yml";
|
|
24875
|
+
var WORKFLOW_PATH = `.github/workflows/${DEPLOY_WORKFLOW_FILE}`;
|
|
24876
|
+
var UNPUBLISH_WORKFLOW_FILE = "clawd-unpublish.yml";
|
|
24877
|
+
var UNPUBLISH_WORKFLOW_PATH = `.github/workflows/${UNPUBLISH_WORKFLOW_FILE}`;
|
|
24853
24878
|
var ACR_REGISTRY = "registry.cn-hangzhou.aliyuncs.com";
|
|
24854
24879
|
var ACR_VPC_REGISTRY = "registry-vpc.cn-hangzhou.aliyuncs.com";
|
|
24855
24880
|
var ACR_NAMESPACE = "ttc-prod";
|
|
@@ -24903,6 +24928,7 @@ var ACR_LOGIN_STEPS = [
|
|
|
24903
24928
|
];
|
|
24904
24929
|
var IMAGE_LATEST = '"$REGISTRY/$ACR_NAMESPACE/${{ steps.plan.outputs.persona_id }}:latest"';
|
|
24905
24930
|
var RESOLVE_LINE = ` IMAGE_REF=$(node clawos/cloud-host/pipeline/acr.mjs resolve --image ${IMAGE_LATEST} --vpc-registry "$VPC_REGISTRY")`;
|
|
24931
|
+
var CONCURRENCY_GROUP = " group: persona-cloud-${{ github.repository }}";
|
|
24906
24932
|
var L = [
|
|
24907
24933
|
"name: clawd deploy",
|
|
24908
24934
|
"",
|
|
@@ -24923,7 +24949,7 @@ var L = [
|
|
|
24923
24949
|
"",
|
|
24924
24950
|
"concurrency:",
|
|
24925
24951
|
" # \u540C\u4E00\u4E2A\u4ED3\u5E93\u7684\u53D1\u5E03\u6392\u961F\u8DD1\uFF0C\u4E0D\u53D6\u6D88\uFF1A\u4E0A\u4E00\u6B21\u53EF\u80FD\u5DF2\u7ECF\u5728\u767B\u8BB0\u6B63\u5F0F\u4E86",
|
|
24926
|
-
|
|
24952
|
+
CONCURRENCY_GROUP,
|
|
24927
24953
|
"",
|
|
24928
24954
|
"env:",
|
|
24929
24955
|
` REGISTRY: ${ACR_REGISTRY}`,
|
|
@@ -25059,6 +25085,44 @@ var L = [
|
|
|
25059
25085
|
""
|
|
25060
25086
|
];
|
|
25061
25087
|
var WORKFLOW_TEMPLATE = L.join("\n");
|
|
25088
|
+
var U = [
|
|
25089
|
+
"name: clawd unpublish",
|
|
25090
|
+
"",
|
|
25091
|
+
"# \u7531 clawd \u751F\u6210\u3001\u7531 clawd \u7EF4\u62A4\uFF1A\u6BCF\u6B21\u300C\u53D1\u5E03\u300D\u90FD\u4F1A\u7528\u5F53\u524D\u6A21\u677F\u91CD\u5199\u8FD9\u4EFD\u6587\u4EF6\u518D\u63D0\u4EA4\uFF0C\u624B\u6539\u4F1A\u88AB\u76D6\u6389\u3002",
|
|
25092
|
+
"# \u4E0B\u7EBF\uFF1A\u5728 gateway \u64A4\u6389\u8FD9\u4E2A persona \u7684\u6B63\u5F0F\u767B\u8BB0\u2014\u2014\u522B\u4EBA\u770B\u4E0D\u5230\u3001\u7528\u4E0D\u4E86\uFF1B\u4ED3\u5E93\u548C\u955C\u50CF\u90FD\u4E0D\u52A8\uFF0C\u91CD\u65B0\u53D1\u5E03\u5C31\u56DE\u6765\u3002",
|
|
25093
|
+
"# \u53EA\u7531 clawd \u4E0A\u4E91\u9875\u7684\u300C\u4E0B\u7EBF\u300D\u89E6\u53D1\uFF08workflow_dispatch\uFF09\uFF0C\u63A8\u4EE3\u7801\u4E0D\u8DD1\u3002\u6B63\u5728\u8DD1\u7684\u5BF9\u8BDD\u4E0D\u6253\u65AD\uFF0C\u8DD1\u5230\u7A7A\u95F2\u81EA\u5DF1\u9000\u3002",
|
|
25094
|
+
"#",
|
|
25095
|
+
"# \u8981\u7684\u7EC4\u7EC7\u7EA7 Secrets\uFF1ACLAWOS_READ_TOKEN\uFF08\u8BFB clawos \u4ED3\u5E93\uFF09\u3001CLAWD_GATEWAY_ADMIN_KEY\uFF1B\u7EC4\u7EC7\u7EA7 Variable\uFF1ACLAWD_GATEWAY_URL\u3002",
|
|
25096
|
+
"",
|
|
25097
|
+
"on:",
|
|
25098
|
+
" workflow_dispatch:",
|
|
25099
|
+
"",
|
|
25100
|
+
"concurrency:",
|
|
25101
|
+
" # \u4E0E\u53D1\u5E03\u540C\u4E00\u7EC4\uFF1A\u53D1\u5E03\u5728\u8DD1\u65F6\u70B9\u4E0B\u7EBF\uFF0C\u6392\u5728\u5B83\u540E\u9762\uFF1B\u540E\u70B9\u7684\u9876\u6389\u5148\u70B9\u7684",
|
|
25102
|
+
CONCURRENCY_GROUP,
|
|
25103
|
+
"",
|
|
25104
|
+
"env:",
|
|
25105
|
+
` CLAWOS_REPO: ${CLAWOS_REPO}`,
|
|
25106
|
+
` CLAWOS_REF: ${CLAWOS_REF}`,
|
|
25107
|
+
"",
|
|
25108
|
+
"permissions:",
|
|
25109
|
+
" contents: read",
|
|
25110
|
+
"",
|
|
25111
|
+
"jobs:",
|
|
25112
|
+
" unpublish:",
|
|
25113
|
+
" name: unpublish",
|
|
25114
|
+
" runs-on: ubuntu-latest",
|
|
25115
|
+
" timeout-minutes: 10",
|
|
25116
|
+
" steps:",
|
|
25117
|
+
...CONTRACT_STEPS,
|
|
25118
|
+
" - name: \u64A4\u767B\u8BB0",
|
|
25119
|
+
" env:",
|
|
25120
|
+
" CLAWD_GATEWAY_URL: ${{ vars.CLAWD_GATEWAY_URL }}",
|
|
25121
|
+
" CLAWD_GATEWAY_ADMIN_KEY: ${{ secrets.CLAWD_GATEWAY_ADMIN_KEY }}",
|
|
25122
|
+
" run: node clawos/cloud-host/pipeline/unregister.mjs --persona-id '${{ steps.plan.outputs.persona_id }}'",
|
|
25123
|
+
""
|
|
25124
|
+
];
|
|
25125
|
+
var UNPUBLISH_WORKFLOW_TEMPLATE = U.join("\n");
|
|
25062
25126
|
|
|
25063
25127
|
// src/deploy/exec.ts
|
|
25064
25128
|
var import_node_child_process2 = require("child_process");
|
|
@@ -21706,6 +21706,12 @@ var DeployRunSchema = external_exports.object({
|
|
|
21706
21706
|
/** run 刚入队时可能一条都还没有 */
|
|
21707
21707
|
jobs: external_exports.array(DeployJobSchema)
|
|
21708
21708
|
}).strict();
|
|
21709
|
+
var DeployUnpublishRunSchema = external_exports.object({
|
|
21710
|
+
runId: external_exports.number(),
|
|
21711
|
+
status: DeployRunSchema.shape.status,
|
|
21712
|
+
conclusion: external_exports.enum(["success", "failure"]).optional(),
|
|
21713
|
+
htmlUrl: external_exports.string().min(1)
|
|
21714
|
+
}).strict();
|
|
21709
21715
|
var DeployStateSchema = external_exports.object({
|
|
21710
21716
|
personaId: external_exports.string().min(1),
|
|
21711
21717
|
/** 本机 GitHub 身份(机器级,githubAuth:* 的同一份;上云页顶上那张卡用)。老 daemon 不给(可选只为兼容),UI 缺席时按未知处理 */
|
|
@@ -21722,12 +21728,23 @@ var DeployStateSchema = external_exports.object({
|
|
|
21722
21728
|
* **缺席是常态**:没推过、没授权 GitHub、GitHub 查不到、仓库还没有 run,都不该让整页打不开——同 `secrets` 的处理。
|
|
21723
21729
|
*/
|
|
21724
21730
|
run: DeployRunSchema.optional(),
|
|
21731
|
+
/**
|
|
21732
|
+
* 现在在不在线上 = gateway 的正式登记表里有没有它(`/healthz`,跟 persona 列表里云卡片同一个来源)。
|
|
21733
|
+
* **缺席 = 查不到**(没登录飞书 / 连不上云上服务),不是「不在」——页面据此不给下线按钮,也不撤「线上」标。
|
|
21734
|
+
* 不看 `releases`:发布过不等于还在线上(下线过、或者被人用脚本撤了)
|
|
21735
|
+
*/
|
|
21736
|
+
online: external_exports.boolean().optional(),
|
|
21737
|
+
/** 最新那次下线流水线。没下线过 / 没仓库 / 没 GitHub 身份 / 查不到都缺席 */
|
|
21738
|
+
unpublish: DeployUnpublishRunSchema.optional(),
|
|
21725
21739
|
/**
|
|
21726
21740
|
* `.clawd/deploy-scan.json` 读不出来(坏 JSON / 不合形状)时的人话。有它 `scans` 为空。
|
|
21727
21741
|
* 页面据此给一条能走的路(重新扫描会重建这个文件),而不是白屏。
|
|
21728
21742
|
*/
|
|
21729
21743
|
historyError: external_exports.string().optional()
|
|
21730
21744
|
}).strict();
|
|
21745
|
+
var DeployUnpublishResultSchema = external_exports.object({
|
|
21746
|
+
before: external_exports.number().nullable()
|
|
21747
|
+
}).strict();
|
|
21731
21748
|
var DeployReleaseResultSchema = external_exports.object({
|
|
21732
21749
|
sha: external_exports.string().min(1),
|
|
21733
21750
|
actionsUrl: external_exports.string().min(1)
|
|
@@ -24275,6 +24292,10 @@ var METHOD_DOCS = {
|
|
|
24275
24292
|
summary: "\u539F\u6837\u91CD\u8DD1\u6700\u65B0\u90A3\u6761\u6D41\u6C34\u7EBF\u91CC\u5931\u8D25\u7684\u67D0\u4E00\u6BB5\uFF08GitHub REST rerun job\uFF09\u3002**\u540C\u4E00\u4E2A commit\u3001\u540C\u4E00\u4EFD\u8F93\u5165**\uFF0C\u4E0D\u4EA7\u751F\u65B0\u63D0\u4EA4\u2014\u2014\u6539\u4E86 persona \u5185\u5BB9\u8981 deploy:scan \u518D deploy:release\u3002jobId \u5FC5\u987B\u5C5E\u4E8E\u6700\u65B0\u90A3\u6761 run\uFF1Bowner-only",
|
|
24276
24293
|
args: DeployRerunJobArgsSchema
|
|
24277
24294
|
},
|
|
24295
|
+
"deploy:unpublish": {
|
|
24296
|
+
summary: "\u4E0B\u7EBF\uFF1A\u89E6\u53D1 persona \u4ED3\u5E93\u91CC\u7684 clawd-unpublish.yml\uFF08workflow_dispatch\uFF09\uFF0C\u7531\u6D41\u6C34\u7EBF\u5728 gateway \u64A4\u6389\u6B63\u5F0F\u767B\u8BB0\u2014\u2014\u522B\u4EBA\u770B\u4E0D\u5230\u3001\u7528\u4E0D\u4E86\uFF1B\u4ED3\u5E93 / \u955C\u50CF / \u672C\u673A\u4E0A\u4E91\u8BB0\u5F55\u90FD\u4E0D\u52A8\uFF0C\u91CD\u65B0\u53D1\u5E03\u5C31\u56DE\u6765\u3002\u6700\u540E\u4E00\u6B21\u53D1\u5E03\u7684 commit \u91CC\u6CA1\u6709\u8FD9\u4EFD workflow\uFF08\u65E7\u6A21\u677F\uFF09\u65F6\u62D2\uFF0C\u8981\u5148\u91CD\u65B0\u53D1\u5E03\u4E00\u6B21\u3002\u56DE { before }\uFF1A\u89E6\u53D1\u4E4B\u524D\u73B0\u67E5\u7684\u6700\u65B0\u4E0B\u7EBF run id\uFF08\u6CA1\u4E0B\u7EBF\u8FC7 = null\uFF09\uFF0C\u9875\u9762\u62FF\u5B83\u8BA4\u65B0 run\uFF1Bowner-only\u3001human-only",
|
|
24297
|
+
args: DeployPersonaArgsSchema
|
|
24298
|
+
},
|
|
24278
24299
|
// ---- githubAuth:*(本机 GitHub 身份,机器级;spec 2026-09-15-github-auth-unify-design §4.3)----
|
|
24279
24300
|
"githubAuth:get": {
|
|
24280
24301
|
summary: "\u672C\u673A\u7684 GitHub \u8EAB\u4EFD\uFF1Aauthorized\uFF08@login\uFF0C\u6765\u81EA git \u51ED\u636E\u5B58\u50A8 / \u672C\u673A\u51ED\u636E\u8868\uFF09/ missing / invalid\uFF08GitHub \u4E0D\u8BA4\uFF09/ pending\uFF08\u7B49 GitHub \u8DF3\u56DE\u4E2D\u5FC3\uFF09\u3002\u8BBE\u7F6E\u9875\u300C\u8D26\u53F7\u300D\u3001\u4E0A\u4E91\u9875\u9876\u4E0A\u90A3\u5F20\u5361\u3001PR \u6536\u4EF6\u7BB1\u90FD\u770B\u5B83\uFF1Bpending \u671F\u9875\u9762\u6BCF 2 \u79D2\u8F6E\u8BE2\uFF0Cdaemon \u987A\u624B\u5411\u4E2D\u5FC3\u9886 token\u3002\u65E0\u53C2\u6570",
|
|
@@ -24850,6 +24871,10 @@ var PackageFindingSchema = EnvPackageSchema.omit({ localVersion: true, artifact:
|
|
|
24850
24871
|
// src/deploy/templates.ts
|
|
24851
24872
|
var CLAWOS_REPO = "ottin4ttc/clawos";
|
|
24852
24873
|
var CLAWOS_REF = "release";
|
|
24874
|
+
var DEPLOY_WORKFLOW_FILE = "clawd-deploy.yml";
|
|
24875
|
+
var WORKFLOW_PATH = `.github/workflows/${DEPLOY_WORKFLOW_FILE}`;
|
|
24876
|
+
var UNPUBLISH_WORKFLOW_FILE = "clawd-unpublish.yml";
|
|
24877
|
+
var UNPUBLISH_WORKFLOW_PATH = `.github/workflows/${UNPUBLISH_WORKFLOW_FILE}`;
|
|
24853
24878
|
var ACR_REGISTRY = "registry.cn-hangzhou.aliyuncs.com";
|
|
24854
24879
|
var ACR_VPC_REGISTRY = "registry-vpc.cn-hangzhou.aliyuncs.com";
|
|
24855
24880
|
var ACR_NAMESPACE = "ttc-prod";
|
|
@@ -24903,6 +24928,7 @@ var ACR_LOGIN_STEPS = [
|
|
|
24903
24928
|
];
|
|
24904
24929
|
var IMAGE_LATEST = '"$REGISTRY/$ACR_NAMESPACE/${{ steps.plan.outputs.persona_id }}:latest"';
|
|
24905
24930
|
var RESOLVE_LINE = ` IMAGE_REF=$(node clawos/cloud-host/pipeline/acr.mjs resolve --image ${IMAGE_LATEST} --vpc-registry "$VPC_REGISTRY")`;
|
|
24931
|
+
var CONCURRENCY_GROUP = " group: persona-cloud-${{ github.repository }}";
|
|
24906
24932
|
var L = [
|
|
24907
24933
|
"name: clawd deploy",
|
|
24908
24934
|
"",
|
|
@@ -24923,7 +24949,7 @@ var L = [
|
|
|
24923
24949
|
"",
|
|
24924
24950
|
"concurrency:",
|
|
24925
24951
|
" # \u540C\u4E00\u4E2A\u4ED3\u5E93\u7684\u53D1\u5E03\u6392\u961F\u8DD1\uFF0C\u4E0D\u53D6\u6D88\uFF1A\u4E0A\u4E00\u6B21\u53EF\u80FD\u5DF2\u7ECF\u5728\u767B\u8BB0\u6B63\u5F0F\u4E86",
|
|
24926
|
-
|
|
24952
|
+
CONCURRENCY_GROUP,
|
|
24927
24953
|
"",
|
|
24928
24954
|
"env:",
|
|
24929
24955
|
` REGISTRY: ${ACR_REGISTRY}`,
|
|
@@ -25059,6 +25085,44 @@ var L = [
|
|
|
25059
25085
|
""
|
|
25060
25086
|
];
|
|
25061
25087
|
var WORKFLOW_TEMPLATE = L.join("\n");
|
|
25088
|
+
var U = [
|
|
25089
|
+
"name: clawd unpublish",
|
|
25090
|
+
"",
|
|
25091
|
+
"# \u7531 clawd \u751F\u6210\u3001\u7531 clawd \u7EF4\u62A4\uFF1A\u6BCF\u6B21\u300C\u53D1\u5E03\u300D\u90FD\u4F1A\u7528\u5F53\u524D\u6A21\u677F\u91CD\u5199\u8FD9\u4EFD\u6587\u4EF6\u518D\u63D0\u4EA4\uFF0C\u624B\u6539\u4F1A\u88AB\u76D6\u6389\u3002",
|
|
25092
|
+
"# \u4E0B\u7EBF\uFF1A\u5728 gateway \u64A4\u6389\u8FD9\u4E2A persona \u7684\u6B63\u5F0F\u767B\u8BB0\u2014\u2014\u522B\u4EBA\u770B\u4E0D\u5230\u3001\u7528\u4E0D\u4E86\uFF1B\u4ED3\u5E93\u548C\u955C\u50CF\u90FD\u4E0D\u52A8\uFF0C\u91CD\u65B0\u53D1\u5E03\u5C31\u56DE\u6765\u3002",
|
|
25093
|
+
"# \u53EA\u7531 clawd \u4E0A\u4E91\u9875\u7684\u300C\u4E0B\u7EBF\u300D\u89E6\u53D1\uFF08workflow_dispatch\uFF09\uFF0C\u63A8\u4EE3\u7801\u4E0D\u8DD1\u3002\u6B63\u5728\u8DD1\u7684\u5BF9\u8BDD\u4E0D\u6253\u65AD\uFF0C\u8DD1\u5230\u7A7A\u95F2\u81EA\u5DF1\u9000\u3002",
|
|
25094
|
+
"#",
|
|
25095
|
+
"# \u8981\u7684\u7EC4\u7EC7\u7EA7 Secrets\uFF1ACLAWOS_READ_TOKEN\uFF08\u8BFB clawos \u4ED3\u5E93\uFF09\u3001CLAWD_GATEWAY_ADMIN_KEY\uFF1B\u7EC4\u7EC7\u7EA7 Variable\uFF1ACLAWD_GATEWAY_URL\u3002",
|
|
25096
|
+
"",
|
|
25097
|
+
"on:",
|
|
25098
|
+
" workflow_dispatch:",
|
|
25099
|
+
"",
|
|
25100
|
+
"concurrency:",
|
|
25101
|
+
" # \u4E0E\u53D1\u5E03\u540C\u4E00\u7EC4\uFF1A\u53D1\u5E03\u5728\u8DD1\u65F6\u70B9\u4E0B\u7EBF\uFF0C\u6392\u5728\u5B83\u540E\u9762\uFF1B\u540E\u70B9\u7684\u9876\u6389\u5148\u70B9\u7684",
|
|
25102
|
+
CONCURRENCY_GROUP,
|
|
25103
|
+
"",
|
|
25104
|
+
"env:",
|
|
25105
|
+
` CLAWOS_REPO: ${CLAWOS_REPO}`,
|
|
25106
|
+
` CLAWOS_REF: ${CLAWOS_REF}`,
|
|
25107
|
+
"",
|
|
25108
|
+
"permissions:",
|
|
25109
|
+
" contents: read",
|
|
25110
|
+
"",
|
|
25111
|
+
"jobs:",
|
|
25112
|
+
" unpublish:",
|
|
25113
|
+
" name: unpublish",
|
|
25114
|
+
" runs-on: ubuntu-latest",
|
|
25115
|
+
" timeout-minutes: 10",
|
|
25116
|
+
" steps:",
|
|
25117
|
+
...CONTRACT_STEPS,
|
|
25118
|
+
" - name: \u64A4\u767B\u8BB0",
|
|
25119
|
+
" env:",
|
|
25120
|
+
" CLAWD_GATEWAY_URL: ${{ vars.CLAWD_GATEWAY_URL }}",
|
|
25121
|
+
" CLAWD_GATEWAY_ADMIN_KEY: ${{ secrets.CLAWD_GATEWAY_ADMIN_KEY }}",
|
|
25122
|
+
" run: node clawos/cloud-host/pipeline/unregister.mjs --persona-id '${{ steps.plan.outputs.persona_id }}'",
|
|
25123
|
+
""
|
|
25124
|
+
];
|
|
25125
|
+
var UNPUBLISH_WORKFLOW_TEMPLATE = U.join("\n");
|
|
25062
25126
|
|
|
25063
25127
|
// src/deploy/exec.ts
|
|
25064
25128
|
var import_node_child_process2 = require("child_process");
|