@clawos-dev/clawd 0.2.478 → 0.2.480
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 +28 -8
- package/dist/cli.cjs +106 -31
- package/dist/dispatch/mcp-server.cjs +28 -8
- package/dist/persona-defaults/persona-clawd-butler/.claude/skills/scan-persona-for-deploy/SKILL.md +1 -1
- package/dist/share-ui/assets/{guest-BLf7JoUY.js → guest-Dq7_X2SL.js} +26 -26
- package/dist/share-ui/guest.html +1 -1
- package/package.json +1 -1
|
@@ -21344,12 +21344,9 @@ var EnvEvidenceSchema = external_exports.object({
|
|
|
21344
21344
|
});
|
|
21345
21345
|
|
|
21346
21346
|
// ../protocol/src/deploy-schemas.ts
|
|
21347
|
-
var FulfillmentSchema = external_exports.enum(["deployer", "user"]);
|
|
21348
21347
|
var DeployFileSchema = external_exports.object({
|
|
21349
21348
|
version: external_exports.literal(1),
|
|
21350
|
-
manifest: EnvironmentManifestSchema
|
|
21351
|
-
/** secret name → 谁提供。缺席 = 还没定 */
|
|
21352
|
-
fulfillment: external_exports.record(external_exports.string(), FulfillmentSchema).default({})
|
|
21349
|
+
manifest: EnvironmentManifestSchema
|
|
21353
21350
|
}).strict();
|
|
21354
21351
|
var DeployScanStatusSchema = external_exports.enum(["scanning", "done", "failed"]);
|
|
21355
21352
|
var DeployScanSchema = external_exports.object({
|
|
@@ -21400,7 +21397,6 @@ var DeployPersonaArgsSchema = external_exports.object({
|
|
|
21400
21397
|
var DeployPatchArgsSchema = external_exports.object({
|
|
21401
21398
|
personaId: external_exports.string().min(1),
|
|
21402
21399
|
patch: external_exports.object({
|
|
21403
|
-
fulfillment: external_exports.record(external_exports.string(), FulfillmentSchema).optional(),
|
|
21404
21400
|
// 人工补依赖;整份替换 manifest
|
|
21405
21401
|
manifest: EnvironmentManifestSchema.optional()
|
|
21406
21402
|
}).strict()
|
|
@@ -21613,6 +21609,22 @@ var AuthGetIdentityResponseSchema = external_exports.object({
|
|
|
21613
21609
|
var AuthLogoutResponseSchema = external_exports.object({
|
|
21614
21610
|
type: external_exports.literal("auth:logout:ok")
|
|
21615
21611
|
});
|
|
21612
|
+
var GatewayUrl = external_exports.string().nullable();
|
|
21613
|
+
var AuthApiKeyGetResponseSchema = external_exports.object({
|
|
21614
|
+
type: external_exports.literal("auth:apiKey:get:ok"),
|
|
21615
|
+
/** null = 还没发过。**发过就能一直看到** —— 中心存的是明文,设置页据此展示 */
|
|
21616
|
+
apiKey: external_exports.string().nullable(),
|
|
21617
|
+
/** ISO 时间;apiKey 为 null 时同为 null */
|
|
21618
|
+
createdAt: external_exports.string().nullable(),
|
|
21619
|
+
gatewayUrl: GatewayUrl
|
|
21620
|
+
});
|
|
21621
|
+
var AuthApiKeyRegenerateResponseSchema = external_exports.object({
|
|
21622
|
+
type: external_exports.literal("auth:apiKey:regenerate:ok"),
|
|
21623
|
+
/** 新发的那把。**旧的当场失效** —— 一人一把,按 union_id 覆盖 */
|
|
21624
|
+
apiKey: external_exports.string().min(1),
|
|
21625
|
+
createdAt: external_exports.string().min(1),
|
|
21626
|
+
gatewayUrl: GatewayUrl
|
|
21627
|
+
});
|
|
21616
21628
|
var AuthLoginDoneEventSchema = external_exports.object({
|
|
21617
21629
|
type: external_exports.literal("auth:login:done"),
|
|
21618
21630
|
identity: FeishuIdentitySchema
|
|
@@ -23884,7 +23896,7 @@ var METHOD_DOCS = {
|
|
|
23884
23896
|
},
|
|
23885
23897
|
// ---- deploy:*(persona 上云:persona 目录 = git 仓库工作树,发布 = 推送触发仓库流水线)----
|
|
23886
23898
|
"deploy:start": {
|
|
23887
|
-
summary: "\u5BF9\u67D0\u4E2A persona \u8D77\u4E00\u6B21\u4E0A\u4E91\u626B\u63CF\u3002**\u6CA1\u4ED3\u5E93\u5148\u5EFA\u4ED3**\uFF08gh repo create\uFF0C\u5EFA\u5728\u7EC4\u7EC7\u4E0B\u3001\u79C1\u6709\u3001\u63A8\u9996\u4E2A\u63D0\u4EA4\uFF09\uFF0C\u518D\u8D77 persona-butler \u7684\u626B\u63CF\u4F1A\u8BDD\uFF0C\u7ED3\u679C\u5199\u8FDB persona \u76EE\u5F55\u7684 .clawd/deploy.json \uFF08\u6E05\u5355
|
|
23899
|
+
summary: "\u5BF9\u67D0\u4E2A persona \u8D77\u4E00\u6B21\u4E0A\u4E91\u626B\u63CF\u3002**\u6CA1\u4ED3\u5E93\u5148\u5EFA\u4ED3**\uFF08gh repo create\uFF0C\u5EFA\u5728\u7EC4\u7EC7\u4E0B\u3001\u79C1\u6709\u3001\u63A8\u9996\u4E2A\u63D0\u4EA4\uFF09\uFF0C\u518D\u8D77 persona-butler \u7684\u626B\u63CF\u4F1A\u8BDD\uFF0C\u7ED3\u679C\u5199\u8FDB persona \u76EE\u5F55\u7684 .clawd/deploy.json \uFF08\u73AF\u5883\u6E05\u5355\uFF0C\u8FDB\u4ED3\u5E93\uFF09\u4E0E .clawd/deploy-scan.json\uFF08\u8BC1\u636E\uFF0C\u4E0D\u8FDB\u4ED3\u5E93\uFF09\u3002\u5DF2\u7ECF\u5728\u626B\u7684\u8BDD\u539F\u6837\u8FD4\u56DE\u3001\u4E0D\u8D77\u7B2C\u4E8C\u4E2A\u626B\u63CF\u4F1A\u8BDD\uFF1Bowner-only",
|
|
23888
23900
|
args: DeployPersonaArgsSchema
|
|
23889
23901
|
},
|
|
23890
23902
|
"deploy:get": {
|
|
@@ -23892,7 +23904,7 @@ var METHOD_DOCS = {
|
|
|
23892
23904
|
args: DeployPersonaArgsSchema
|
|
23893
23905
|
},
|
|
23894
23906
|
"deploy:patch": {
|
|
23895
|
-
summary: "\u7F16\u8F91\u90E8\u7F72\u6587\u4EF6\uFF1A\
|
|
23907
|
+
summary: "\u7F16\u8F91\u90E8\u7F72\u6587\u4EF6\uFF1A\u624B\u5DE5\u8865\u4F9D\u8D56\u3002**\u4E0D\u80FD\u4ECE\u8FD9\u91CC\u4F20\u51ED\u636E\u7684\u503C**\uFF08\u503C\u8D70 deploy:putSecret\uFF09\uFF1Bowner-only",
|
|
23896
23908
|
args: DeployPatchArgsSchema
|
|
23897
23909
|
},
|
|
23898
23910
|
"deploy:putSecret": {
|
|
@@ -23908,7 +23920,7 @@ var METHOD_DOCS = {
|
|
|
23908
23920
|
args: DeployFinishScanArgsSchema
|
|
23909
23921
|
},
|
|
23910
23922
|
"deploy:release": {
|
|
23911
|
-
summary: "\u53D1\u5E03 = \u63D0\u4EA4\u5E76\u63A8\u9001\u5230\u4ED3\u5E93\uFF1A\u91CD\u5199 workflow \u6A21\u677F \u2192 git add -A \u2192 \u7A7A\u63D0\u4EA4\u4E5F\u5141\u8BB8 \u2192 push\u3002\u4ED3\u5E93\u91CC\u7684\u6D41\u6C34\u7EBF\u63A5\u7740\u6784\u955C\u50CF\u3001\u5728\u96C6\u7FA4\u4E0A\u771F\u8D77\u4E00\u6B21\u3001\u767B\u8BB0\u6210\u6B63\u5F0F\uFF0C\u8FDB\u5EA6\u5728 GitHub Actions \u770B\u3002\u524D\u7F6E\uFF1A\u5DF2\u7ED1\u5B9A\u4ED3\u5E93\u3001\u6709\u6E05\u5355\u3001\u6BCF\
|
|
23923
|
+
summary: "\u53D1\u5E03 = \u63D0\u4EA4\u5E76\u63A8\u9001\u5230\u4ED3\u5E93\uFF1A\u91CD\u5199 workflow \u6A21\u677F \u2192 git add -A \u2192 \u7A7A\u63D0\u4EA4\u4E5F\u5141\u8BB8 \u2192 push\u3002\u4ED3\u5E93\u91CC\u7684\u6D41\u6C34\u7EBF\u63A5\u7740\u6784\u955C\u50CF\u3001\u5728\u96C6\u7FA4\u4E0A\u771F\u8D77\u4E00\u6B21\u3001\u767B\u8BB0\u6210\u6B63\u5F0F\uFF0C\u8FDB\u5EA6\u5728 GitHub Actions \u770B\u3002\u524D\u7F6E\uFF1A\u5DF2\u7ED1\u5B9A\u4ED3\u5E93\u3001\u6709\u6E05\u5355\u3001\u6BCF\u4E2A\u53D8\u91CF\u540D\u90FD\u5728 Secrets \u91CC\uFF1Bowner-only",
|
|
23912
23924
|
args: DeployPersonaArgsSchema
|
|
23913
23925
|
},
|
|
23914
23926
|
"shift:list": {
|
|
@@ -24287,6 +24299,14 @@ var METHOD_DOCS = {
|
|
|
24287
24299
|
summary: "\u767B\u51FA\u98DE\u4E66\u8EAB\u4EFD\uFF08\u6E05 owner-identity \u843D\u76D8\uFF09\u3002owner-only",
|
|
24288
24300
|
args: NO_ARGS
|
|
24289
24301
|
},
|
|
24302
|
+
"auth:apiKey:get": {
|
|
24303
|
+
summary: "\u8BFB\u56DE\u81EA\u5DF1\u90A3\u628A\u4E91 persona \u8C03\u7528 key\uFF08\u6CA1\u53D1\u8FC7 \u2192 apiKey:null\uFF09\u3002daemon \u62FF\u672C\u673A\u767B\u5F55\u51ED\u8BC1\u5411\u4E2D\u5FC3\u4EE3\u53D6\uFF0C\u51ED\u8BC1\u4E0D\u51FA ws\u3002owner-only",
|
|
24304
|
+
args: NO_ARGS
|
|
24305
|
+
},
|
|
24306
|
+
"auth:apiKey:regenerate": {
|
|
24307
|
+
summary: "\u6362\u4E00\u628A\u65B0\u7684\u4E91 persona \u8C03\u7528 key\uFF0C**\u65E7\u7684\u5F53\u573A\u5931\u6548**\uFF08\u4E00\u4EBA\u4E00\u628A\uFF0C\u4E2D\u5FC3\u6309 union_id \u8986\u76D6\uFF09\u3002owner-only",
|
|
24308
|
+
args: NO_ARGS
|
|
24309
|
+
},
|
|
24290
24310
|
"device:list": {
|
|
24291
24311
|
summary: "\u5217\u51FA\u516C\u5171\u8BBE\u5907\u76EE\u5F55\u91CC\u53EF\u8FDE\u63A5\u7684\u8BBE\u5907\uFF08daemon \u4EE3\u7406\u4E2D\u5FC3 server\uFF09\u3002owner-only",
|
|
24292
24312
|
args: NO_ARGS
|
package/dist/cli.cjs
CHANGED
|
@@ -6025,18 +6025,15 @@ var init_environment_schemas = __esm({
|
|
|
6025
6025
|
function repoSlug(url) {
|
|
6026
6026
|
return url.trim().replace(/^git@[^:]+:/, "").replace(/^https?:\/\/[^/]+\//, "").replace(/\.git$/, "");
|
|
6027
6027
|
}
|
|
6028
|
-
var
|
|
6028
|
+
var DeployFileSchema, DeployScanStatusSchema, DeployScanSchema, DeployRepoSchema, DeploySecretPresenceSchema, DeployStateSchema, DeployReleaseResultSchema, DeployPersonaArgsSchema, DeployPatchArgsSchema, DeployPutSecretArgsSchema, DeployReportFindingArgsSchema, DeployFinishScanArgsSchema, PERSONA_REPO_ORG;
|
|
6029
6029
|
var init_deploy_schemas = __esm({
|
|
6030
6030
|
"../protocol/src/deploy-schemas.ts"() {
|
|
6031
6031
|
"use strict";
|
|
6032
6032
|
init_zod();
|
|
6033
6033
|
init_environment_schemas();
|
|
6034
|
-
FulfillmentSchema = external_exports.enum(["deployer", "user"]);
|
|
6035
6034
|
DeployFileSchema = external_exports.object({
|
|
6036
6035
|
version: external_exports.literal(1),
|
|
6037
|
-
manifest: EnvironmentManifestSchema
|
|
6038
|
-
/** secret name → 谁提供。缺席 = 还没定 */
|
|
6039
|
-
fulfillment: external_exports.record(external_exports.string(), FulfillmentSchema).default({})
|
|
6036
|
+
manifest: EnvironmentManifestSchema
|
|
6040
6037
|
}).strict();
|
|
6041
6038
|
DeployScanStatusSchema = external_exports.enum(["scanning", "done", "failed"]);
|
|
6042
6039
|
DeployScanSchema = external_exports.object({
|
|
@@ -6087,7 +6084,6 @@ var init_deploy_schemas = __esm({
|
|
|
6087
6084
|
DeployPatchArgsSchema = external_exports.object({
|
|
6088
6085
|
personaId: external_exports.string().min(1),
|
|
6089
6086
|
patch: external_exports.object({
|
|
6090
|
-
fulfillment: external_exports.record(external_exports.string(), FulfillmentSchema).optional(),
|
|
6091
6087
|
// 人工补依赖;整份替换 manifest
|
|
6092
6088
|
manifest: EnvironmentManifestSchema.optional()
|
|
6093
6089
|
}).strict()
|
|
@@ -6244,7 +6240,7 @@ var init_contact = __esm({
|
|
|
6244
6240
|
});
|
|
6245
6241
|
|
|
6246
6242
|
// ../protocol/src/feishu-auth.ts
|
|
6247
|
-
var FEISHU_GATED_METHODS, LOGIN_EXPIRED_ERROR_MARKER, DeviceEntrySchema, DeviceListResponseSchema, DeviceConnectArgsSchema, DeviceConnectResponseSchema, FeishuIdentitySchema, AuthLoginStartResponseSchema, AuthGetIdentityResponseSchema, AuthLogoutResponseSchema, AuthLoginDoneEventSchema, AuthLoginFailedEventSchema;
|
|
6243
|
+
var FEISHU_GATED_METHODS, LOGIN_EXPIRED_ERROR_MARKER, DeviceEntrySchema, DeviceListResponseSchema, DeviceConnectArgsSchema, DeviceConnectResponseSchema, FeishuIdentitySchema, AuthLoginStartResponseSchema, AuthGetIdentityResponseSchema, AuthLogoutResponseSchema, GatewayUrl, AuthApiKeyGetResponseSchema, AuthApiKeyRegenerateResponseSchema, AuthLoginDoneEventSchema, AuthLoginFailedEventSchema;
|
|
6248
6244
|
var init_feishu_auth = __esm({
|
|
6249
6245
|
"../protocol/src/feishu-auth.ts"() {
|
|
6250
6246
|
"use strict";
|
|
@@ -6341,6 +6337,22 @@ var init_feishu_auth = __esm({
|
|
|
6341
6337
|
AuthLogoutResponseSchema = external_exports.object({
|
|
6342
6338
|
type: external_exports.literal("auth:logout:ok")
|
|
6343
6339
|
});
|
|
6340
|
+
GatewayUrl = external_exports.string().nullable();
|
|
6341
|
+
AuthApiKeyGetResponseSchema = external_exports.object({
|
|
6342
|
+
type: external_exports.literal("auth:apiKey:get:ok"),
|
|
6343
|
+
/** null = 还没发过。**发过就能一直看到** —— 中心存的是明文,设置页据此展示 */
|
|
6344
|
+
apiKey: external_exports.string().nullable(),
|
|
6345
|
+
/** ISO 时间;apiKey 为 null 时同为 null */
|
|
6346
|
+
createdAt: external_exports.string().nullable(),
|
|
6347
|
+
gatewayUrl: GatewayUrl
|
|
6348
|
+
});
|
|
6349
|
+
AuthApiKeyRegenerateResponseSchema = external_exports.object({
|
|
6350
|
+
type: external_exports.literal("auth:apiKey:regenerate:ok"),
|
|
6351
|
+
/** 新发的那把。**旧的当场失效** —— 一人一把,按 union_id 覆盖 */
|
|
6352
|
+
apiKey: external_exports.string().min(1),
|
|
6353
|
+
createdAt: external_exports.string().min(1),
|
|
6354
|
+
gatewayUrl: GatewayUrl
|
|
6355
|
+
});
|
|
6344
6356
|
AuthLoginDoneEventSchema = external_exports.object({
|
|
6345
6357
|
type: external_exports.literal("auth:login:done"),
|
|
6346
6358
|
identity: FeishuIdentitySchema
|
|
@@ -8836,7 +8848,7 @@ var init_methods = __esm({
|
|
|
8836
8848
|
},
|
|
8837
8849
|
// ---- deploy:*(persona 上云:persona 目录 = git 仓库工作树,发布 = 推送触发仓库流水线)----
|
|
8838
8850
|
"deploy:start": {
|
|
8839
|
-
summary: "\u5BF9\u67D0\u4E2A persona \u8D77\u4E00\u6B21\u4E0A\u4E91\u626B\u63CF\u3002**\u6CA1\u4ED3\u5E93\u5148\u5EFA\u4ED3**\uFF08gh repo create\uFF0C\u5EFA\u5728\u7EC4\u7EC7\u4E0B\u3001\u79C1\u6709\u3001\u63A8\u9996\u4E2A\u63D0\u4EA4\uFF09\uFF0C\u518D\u8D77 persona-butler \u7684\u626B\u63CF\u4F1A\u8BDD\uFF0C\u7ED3\u679C\u5199\u8FDB persona \u76EE\u5F55\u7684 .clawd/deploy.json \uFF08\u6E05\u5355
|
|
8851
|
+
summary: "\u5BF9\u67D0\u4E2A persona \u8D77\u4E00\u6B21\u4E0A\u4E91\u626B\u63CF\u3002**\u6CA1\u4ED3\u5E93\u5148\u5EFA\u4ED3**\uFF08gh repo create\uFF0C\u5EFA\u5728\u7EC4\u7EC7\u4E0B\u3001\u79C1\u6709\u3001\u63A8\u9996\u4E2A\u63D0\u4EA4\uFF09\uFF0C\u518D\u8D77 persona-butler \u7684\u626B\u63CF\u4F1A\u8BDD\uFF0C\u7ED3\u679C\u5199\u8FDB persona \u76EE\u5F55\u7684 .clawd/deploy.json \uFF08\u73AF\u5883\u6E05\u5355\uFF0C\u8FDB\u4ED3\u5E93\uFF09\u4E0E .clawd/deploy-scan.json\uFF08\u8BC1\u636E\uFF0C\u4E0D\u8FDB\u4ED3\u5E93\uFF09\u3002\u5DF2\u7ECF\u5728\u626B\u7684\u8BDD\u539F\u6837\u8FD4\u56DE\u3001\u4E0D\u8D77\u7B2C\u4E8C\u4E2A\u626B\u63CF\u4F1A\u8BDD\uFF1Bowner-only",
|
|
8840
8852
|
args: DeployPersonaArgsSchema
|
|
8841
8853
|
},
|
|
8842
8854
|
"deploy:get": {
|
|
@@ -8844,7 +8856,7 @@ var init_methods = __esm({
|
|
|
8844
8856
|
args: DeployPersonaArgsSchema
|
|
8845
8857
|
},
|
|
8846
8858
|
"deploy:patch": {
|
|
8847
|
-
summary: "\u7F16\u8F91\u90E8\u7F72\u6587\u4EF6\uFF1A\
|
|
8859
|
+
summary: "\u7F16\u8F91\u90E8\u7F72\u6587\u4EF6\uFF1A\u624B\u5DE5\u8865\u4F9D\u8D56\u3002**\u4E0D\u80FD\u4ECE\u8FD9\u91CC\u4F20\u51ED\u636E\u7684\u503C**\uFF08\u503C\u8D70 deploy:putSecret\uFF09\uFF1Bowner-only",
|
|
8848
8860
|
args: DeployPatchArgsSchema
|
|
8849
8861
|
},
|
|
8850
8862
|
"deploy:putSecret": {
|
|
@@ -8860,7 +8872,7 @@ var init_methods = __esm({
|
|
|
8860
8872
|
args: DeployFinishScanArgsSchema
|
|
8861
8873
|
},
|
|
8862
8874
|
"deploy:release": {
|
|
8863
|
-
summary: "\u53D1\u5E03 = \u63D0\u4EA4\u5E76\u63A8\u9001\u5230\u4ED3\u5E93\uFF1A\u91CD\u5199 workflow \u6A21\u677F \u2192 git add -A \u2192 \u7A7A\u63D0\u4EA4\u4E5F\u5141\u8BB8 \u2192 push\u3002\u4ED3\u5E93\u91CC\u7684\u6D41\u6C34\u7EBF\u63A5\u7740\u6784\u955C\u50CF\u3001\u5728\u96C6\u7FA4\u4E0A\u771F\u8D77\u4E00\u6B21\u3001\u767B\u8BB0\u6210\u6B63\u5F0F\uFF0C\u8FDB\u5EA6\u5728 GitHub Actions \u770B\u3002\u524D\u7F6E\uFF1A\u5DF2\u7ED1\u5B9A\u4ED3\u5E93\u3001\u6709\u6E05\u5355\u3001\u6BCF\
|
|
8875
|
+
summary: "\u53D1\u5E03 = \u63D0\u4EA4\u5E76\u63A8\u9001\u5230\u4ED3\u5E93\uFF1A\u91CD\u5199 workflow \u6A21\u677F \u2192 git add -A \u2192 \u7A7A\u63D0\u4EA4\u4E5F\u5141\u8BB8 \u2192 push\u3002\u4ED3\u5E93\u91CC\u7684\u6D41\u6C34\u7EBF\u63A5\u7740\u6784\u955C\u50CF\u3001\u5728\u96C6\u7FA4\u4E0A\u771F\u8D77\u4E00\u6B21\u3001\u767B\u8BB0\u6210\u6B63\u5F0F\uFF0C\u8FDB\u5EA6\u5728 GitHub Actions \u770B\u3002\u524D\u7F6E\uFF1A\u5DF2\u7ED1\u5B9A\u4ED3\u5E93\u3001\u6709\u6E05\u5355\u3001\u6BCF\u4E2A\u53D8\u91CF\u540D\u90FD\u5728 Secrets \u91CC\uFF1Bowner-only",
|
|
8864
8876
|
args: DeployPersonaArgsSchema
|
|
8865
8877
|
},
|
|
8866
8878
|
"shift:list": {
|
|
@@ -9239,6 +9251,14 @@ var init_methods = __esm({
|
|
|
9239
9251
|
summary: "\u767B\u51FA\u98DE\u4E66\u8EAB\u4EFD\uFF08\u6E05 owner-identity \u843D\u76D8\uFF09\u3002owner-only",
|
|
9240
9252
|
args: NO_ARGS
|
|
9241
9253
|
},
|
|
9254
|
+
"auth:apiKey:get": {
|
|
9255
|
+
summary: "\u8BFB\u56DE\u81EA\u5DF1\u90A3\u628A\u4E91 persona \u8C03\u7528 key\uFF08\u6CA1\u53D1\u8FC7 \u2192 apiKey:null\uFF09\u3002daemon \u62FF\u672C\u673A\u767B\u5F55\u51ED\u8BC1\u5411\u4E2D\u5FC3\u4EE3\u53D6\uFF0C\u51ED\u8BC1\u4E0D\u51FA ws\u3002owner-only",
|
|
9256
|
+
args: NO_ARGS
|
|
9257
|
+
},
|
|
9258
|
+
"auth:apiKey:regenerate": {
|
|
9259
|
+
summary: "\u6362\u4E00\u628A\u65B0\u7684\u4E91 persona \u8C03\u7528 key\uFF0C**\u65E7\u7684\u5F53\u573A\u5931\u6548**\uFF08\u4E00\u4EBA\u4E00\u628A\uFF0C\u4E2D\u5FC3\u6309 union_id \u8986\u76D6\uFF09\u3002owner-only",
|
|
9260
|
+
args: NO_ARGS
|
|
9261
|
+
},
|
|
9242
9262
|
"device:list": {
|
|
9243
9263
|
summary: "\u5217\u51FA\u516C\u5171\u8BBE\u5907\u76EE\u5F55\u91CC\u53EF\u8FDE\u63A5\u7684\u8BBE\u5907\uFF08daemon \u4EE3\u7406\u4E2D\u5FC3 server\uFF09\u3002owner-only",
|
|
9244
9264
|
args: NO_ARGS
|
|
@@ -54676,7 +54696,7 @@ async function writeScan(dir, scan) {
|
|
|
54676
54696
|
await writeJson(import_node_path30.default.join(dir, SCAN_FILE), DeployScanSchema.parse(scan));
|
|
54677
54697
|
}
|
|
54678
54698
|
function emptyDeployFile() {
|
|
54679
|
-
return { version: 1, manifest: { version: 1, clis: [], secrets: [], assets: [] }
|
|
54699
|
+
return { version: 1, manifest: { version: 1, clis: [], secrets: [], assets: [] } };
|
|
54680
54700
|
}
|
|
54681
54701
|
function parseFinding(kind, item) {
|
|
54682
54702
|
const schema = kind === "cli" ? EnvCliSchema : kind === "secret" ? EnvSecretSchema : EnvAssetSchema;
|
|
@@ -54736,7 +54756,7 @@ var L = [
|
|
|
54736
54756
|
"# \u6784\u5EFA\u5668 / \u6D41\u6C34\u7EBF\u811A\u672C / \u968F\u884C\u8D44\u4EA7\u5728 ottin4ttc/clawos \u4ED3\u5E93\u91CC\uFF0C\u8FD9\u91CC checkout \u4E00\u4EFD\u6765\u7528\u3002",
|
|
54737
54757
|
"#",
|
|
54738
54758
|
"# \u8981\u7684\u7EC4\u7EC7\u7EA7 Secrets\uFF1AALI_DOCKER_USERNAME / ALI_DOCKER_PASSWORD\uFF08\u63A8 ACR\uFF09\u3001CLAWOS_READ_TOKEN",
|
|
54739
|
-
"#\uFF08\u8BFB clawos \u4ED3\u5E93\uFF09\u3001CLAWD_GATEWAY_ADMIN_KEY
|
|
54759
|
+
"#\uFF08\u8BFB clawos \u4ED3\u5E93\uFF09\u3001CLAWD_GATEWAY_ADMIN_KEY\uFF1B\u7EC4\u7EC7\u7EA7 Variable\uFF1ACLAWD_GATEWAY_URL\u3002",
|
|
54740
54760
|
"# \u4ED3\u5E93\u7EA7\u540C\u540D\u914D\u7F6E\u4F1A\u76D6\u8FC7\u7EC4\u7EC7\u7EA7\u2014\u2014\u67D0\u4E2A persona \u8981\u6307\u5230\u53E6\u4E00\u53F0 gateway\uFF0C\u5728\u81EA\u5DF1\u4ED3\u5E93\u91CC\u914D\u5373\u53EF\u3002",
|
|
54741
54761
|
"",
|
|
54742
54762
|
"on:",
|
|
@@ -54768,8 +54788,6 @@ var L = [
|
|
|
54768
54788
|
" image: ${{ steps.plan.outputs.image }}",
|
|
54769
54789
|
" persona_id: ${{ steps.plan.outputs.persona_id }}",
|
|
54770
54790
|
" env_names: ${{ steps.plan.outputs.env_names }}",
|
|
54771
|
-
" deployer_env_names: ${{ steps.plan.outputs.deployer_env_names }}",
|
|
54772
|
-
" user_secrets: ${{ steps.plan.outputs.user_secrets }}",
|
|
54773
54791
|
" steps:",
|
|
54774
54792
|
" - name: Checkout persona",
|
|
54775
54793
|
" uses: actions/checkout@v4",
|
|
@@ -54884,7 +54902,6 @@ var L = [
|
|
|
54884
54902
|
" env:",
|
|
54885
54903
|
" CLAWD_GATEWAY_URL: ${{ vars.CLAWD_GATEWAY_URL }}",
|
|
54886
54904
|
" CLAWD_GATEWAY_ADMIN_KEY: ${{ secrets.CLAWD_GATEWAY_ADMIN_KEY }}",
|
|
54887
|
-
" CLAWD_GATEWAY_API_KEY: ${{ secrets.CLAWD_GATEWAY_API_KEY }}",
|
|
54888
54905
|
" CLAWD_SECRETS_JSON: ${{ toJSON(secrets) }}",
|
|
54889
54906
|
" CLAWD_ENV_NAMES: ${{ needs.build.outputs.env_names }}",
|
|
54890
54907
|
" run: |",
|
|
@@ -54914,8 +54931,7 @@ var L = [
|
|
|
54914
54931
|
" CLAWD_GATEWAY_URL: ${{ vars.CLAWD_GATEWAY_URL }}",
|
|
54915
54932
|
" CLAWD_GATEWAY_ADMIN_KEY: ${{ secrets.CLAWD_GATEWAY_ADMIN_KEY }}",
|
|
54916
54933
|
" CLAWD_SECRETS_JSON: ${{ toJSON(secrets) }}",
|
|
54917
|
-
"
|
|
54918
|
-
" CLAWD_USER_SECRETS: ${{ needs.build.outputs.user_secrets }}",
|
|
54934
|
+
" CLAWD_ENV_NAMES: ${{ needs.build.outputs.env_names }}",
|
|
54919
54935
|
" run: |",
|
|
54920
54936
|
" node clawos/cloud-host/pipeline/register.mjs \\",
|
|
54921
54937
|
" --image '${{ needs.build.outputs.image }}' \\",
|
|
@@ -55239,7 +55255,7 @@ function buildDeployHandlers(deps) {
|
|
|
55239
55255
|
secretsCache.delete(personaId2);
|
|
55240
55256
|
}
|
|
55241
55257
|
const prev = await readDeployFile(dir).catch(() => void 0);
|
|
55242
|
-
await writeDeployFile(dir,
|
|
55258
|
+
await writeDeployFile(dir, emptyDeployFile());
|
|
55243
55259
|
const startedAt = deps.now();
|
|
55244
55260
|
await writeScan(dir, { status: "scanning", evidence: [], notes: [], scannedAssets: [], startedAt });
|
|
55245
55261
|
const started = deps.startScan(personaId2);
|
|
@@ -55269,16 +55285,9 @@ function buildDeployHandlers(deps) {
|
|
|
55269
55285
|
const args = parseArgs2(DeployPatchArgsSchema, frame, "deploy:patch");
|
|
55270
55286
|
const dir = mustPersona(args.personaId);
|
|
55271
55287
|
const file = await readDeployFile(dir) ?? emptyDeployFile();
|
|
55272
|
-
if (args.patch.fulfillment) {
|
|
55273
|
-
const declared = new Set((args.patch.manifest ?? file.manifest).secrets.map((s) => s.name));
|
|
55274
|
-
for (const name of Object.keys(args.patch.fulfillment)) {
|
|
55275
|
-
if (!declared.has(name)) throw invalid(`\u6E05\u5355\u91CC\u6CA1\u6709\u53EB\u300C${name}\u300D\u7684\u51ED\u636E`);
|
|
55276
|
-
}
|
|
55277
|
-
}
|
|
55278
55288
|
const next = {
|
|
55279
55289
|
...file,
|
|
55280
|
-
...args.patch.manifest ? { manifest: args.patch.manifest } : {}
|
|
55281
|
-
...args.patch.fulfillment ? { fulfillment: { ...file.fulfillment, ...args.patch.fulfillment } } : {}
|
|
55290
|
+
...args.patch.manifest ? { manifest: args.patch.manifest } : {}
|
|
55282
55291
|
};
|
|
55283
55292
|
await writeDeployFile(dir, next);
|
|
55284
55293
|
return view(args.personaId);
|
|
@@ -55355,8 +55364,6 @@ function buildDeployHandlers(deps) {
|
|
|
55355
55364
|
if (scan?.status === "scanning") throw invalid("\u626B\u63CF\u8FD8\u6CA1\u7ED3\u675F");
|
|
55356
55365
|
if (scan?.status !== "done") throw invalid(scan?.status === "failed" ? "\u4E0A\u6B21\u626B\u63CF\u5931\u8D25\u4E86\uFF0C\u5148\u91CD\u65B0\u626B\u63CF" : "\u8FD8\u6CA1\u626B\u63CF\u8FC7\uFF0C\u5148\u626B\u63CF");
|
|
55357
55366
|
const blockers = [];
|
|
55358
|
-
const undecided = file.manifest.secrets.filter((s) => !file.fulfillment[s.name]).map((s) => `\u300C${s.name}\u300D\u8FD8\u6CA1\u5B9A\u8C01\u51FA`);
|
|
55359
|
-
blockers.push(...undecided);
|
|
55360
55367
|
let present;
|
|
55361
55368
|
try {
|
|
55362
55369
|
present = new Set((await cachedSecrets(personaId2, dir, true)).filter((p2) => p2.setAt).map((p2) => p2.env));
|
|
@@ -61572,6 +61579,40 @@ async function centralPrincipalStatus(opts) {
|
|
|
61572
61579
|
}
|
|
61573
61580
|
return { active: body.active };
|
|
61574
61581
|
}
|
|
61582
|
+
async function centralGetApiKey(opts) {
|
|
61583
|
+
const body = await centralRequest(
|
|
61584
|
+
opts,
|
|
61585
|
+
`/api/persona-cloud/api-key?provider=${encodeURIComponent(opts.provider)}`,
|
|
61586
|
+
{ method: "GET", bearer: opts.ttcJwt }
|
|
61587
|
+
);
|
|
61588
|
+
if (body.apiKey !== null && typeof body.apiKey !== "string") {
|
|
61589
|
+
throw new CentralClientError("BAD_RESPONSE", "api-key: apiKey must be string or null");
|
|
61590
|
+
}
|
|
61591
|
+
return {
|
|
61592
|
+
apiKey: body.apiKey,
|
|
61593
|
+
createdAt: typeof body.createdAt === "string" ? body.createdAt : null,
|
|
61594
|
+
// 中心没配就是 null —— 不当成错误,key 本身照样有效
|
|
61595
|
+
gatewayUrl: typeof body.gatewayUrl === "string" ? body.gatewayUrl : null
|
|
61596
|
+
};
|
|
61597
|
+
}
|
|
61598
|
+
async function centralIssueApiKey(opts) {
|
|
61599
|
+
const body = await centralRequest(opts, "/api/persona-cloud/api-key", {
|
|
61600
|
+
method: "POST",
|
|
61601
|
+
bearer: opts.ttcJwt,
|
|
61602
|
+
body: { provider: opts.provider }
|
|
61603
|
+
});
|
|
61604
|
+
if (typeof body.apiKey !== "string" || body.apiKey.length === 0) {
|
|
61605
|
+
throw new CentralClientError("BAD_RESPONSE", "api-key: missing apiKey");
|
|
61606
|
+
}
|
|
61607
|
+
if (typeof body.createdAt !== "string" || body.createdAt.length === 0) {
|
|
61608
|
+
throw new CentralClientError("BAD_RESPONSE", "api-key: missing createdAt");
|
|
61609
|
+
}
|
|
61610
|
+
return {
|
|
61611
|
+
apiKey: body.apiKey,
|
|
61612
|
+
createdAt: body.createdAt,
|
|
61613
|
+
gatewayUrl: typeof body.gatewayUrl === "string" ? body.gatewayUrl : null
|
|
61614
|
+
};
|
|
61615
|
+
}
|
|
61575
61616
|
async function centralListDevices(opts) {
|
|
61576
61617
|
const body = await centralRequest(
|
|
61577
61618
|
opts,
|
|
@@ -63982,6 +64023,7 @@ function buildWhoamiHandler(deps) {
|
|
|
63982
64023
|
}
|
|
63983
64024
|
|
|
63984
64025
|
// src/handlers/feishu-auth.ts
|
|
64026
|
+
init_protocol();
|
|
63985
64027
|
function buildFeishuAuthHandlers(deps) {
|
|
63986
64028
|
const loginStart = async () => {
|
|
63987
64029
|
const { authUrl, state } = deps.loginFlow.start();
|
|
@@ -64010,10 +64052,34 @@ function buildFeishuAuthHandlers(deps) {
|
|
|
64010
64052
|
response: { type: "auth:logout:ok" }
|
|
64011
64053
|
};
|
|
64012
64054
|
};
|
|
64055
|
+
function requireLogin() {
|
|
64056
|
+
const record3 = deps.ownerIdentityStore.read();
|
|
64057
|
+
if (!record3) {
|
|
64058
|
+
throw new ClawdError(
|
|
64059
|
+
ERROR_CODES.FEISHU_LOGIN_REQUIRED,
|
|
64060
|
+
"\u8FD8\u6CA1\u767B\u5F55\u98DE\u4E66\uFF0C\u62FF\u4E0D\u5230\u4E91 persona \u7684\u8C03\u7528 key"
|
|
64061
|
+
);
|
|
64062
|
+
}
|
|
64063
|
+
return { ttcJwt: record3.ttcToken, provider: record3.identity.provider };
|
|
64064
|
+
}
|
|
64065
|
+
const apiKeyGet = async () => {
|
|
64066
|
+
const { apiKey, createdAt, gatewayUrl } = await deps.apiKeyClient.get(requireLogin());
|
|
64067
|
+
return {
|
|
64068
|
+
response: { type: "auth:apiKey:get:ok", apiKey, createdAt, gatewayUrl }
|
|
64069
|
+
};
|
|
64070
|
+
};
|
|
64071
|
+
const apiKeyRegenerate = async () => {
|
|
64072
|
+
const { apiKey, createdAt, gatewayUrl } = await deps.apiKeyClient.issue(requireLogin());
|
|
64073
|
+
return {
|
|
64074
|
+
response: { type: "auth:apiKey:regenerate:ok", apiKey, createdAt, gatewayUrl }
|
|
64075
|
+
};
|
|
64076
|
+
};
|
|
64013
64077
|
return {
|
|
64014
64078
|
"auth:login:start": loginStart,
|
|
64015
64079
|
"auth:getIdentity": getIdentity,
|
|
64016
|
-
"auth:logout": logout
|
|
64080
|
+
"auth:logout": logout,
|
|
64081
|
+
"auth:apiKey:get": apiKeyGet,
|
|
64082
|
+
"auth:apiKey:regenerate": apiKeyRegenerate
|
|
64017
64083
|
};
|
|
64018
64084
|
}
|
|
64019
64085
|
|
|
@@ -64063,7 +64129,7 @@ var METHOD_GRANT_MAP = {
|
|
|
64063
64129
|
// ---- visitor:* (访客名单,owner-only) ----
|
|
64064
64130
|
// owner 看完整访客名单(含没开会话的);guest 不可调(handler 内再 assertOwner 兜底)。
|
|
64065
64131
|
"visitor:list": ADMIN_ANY,
|
|
64066
|
-
// deploy:*(persona 上云):全部 owner-only
|
|
64132
|
+
// deploy:*(persona 上云):全部 owner-only。里面有凭据录入口、建仓和推送,
|
|
64067
64133
|
// guest 不该看见更不该动。
|
|
64068
64134
|
"deploy:start": ADMIN_ANY,
|
|
64069
64135
|
"deploy:get": ADMIN_ANY,
|
|
@@ -64254,6 +64320,9 @@ var METHOD_GRANT_MAP = {
|
|
|
64254
64320
|
"auth:login:start": ADMIN_ANY,
|
|
64255
64321
|
"auth:getIdentity": ADMIN_ANY,
|
|
64256
64322
|
"auth:logout": ADMIN_ANY,
|
|
64323
|
+
// 云 persona 调用 key:本机主人自己的东西,guest 一律够不着
|
|
64324
|
+
"auth:apiKey:get": ADMIN_ANY,
|
|
64325
|
+
"auth:apiKey:regenerate": ADMIN_ANY,
|
|
64257
64326
|
// ---- device:* 设备目录 + 连接(决策 #15,owner-only) ----
|
|
64258
64327
|
// 设备目录 / 连接都是 owner 本机操作(用 owner 的 ttcJwt 找中心 server),guest 不可调
|
|
64259
64328
|
"device:list": ADMIN_ANY,
|
|
@@ -64317,7 +64386,7 @@ function computeMethodAccess(args) {
|
|
|
64317
64386
|
}
|
|
64318
64387
|
|
|
64319
64388
|
// src/version.ts
|
|
64320
|
-
var version = "0.2.
|
|
64389
|
+
var version = "0.2.480".length > 0 ? "0.2.480" : "dev";
|
|
64321
64390
|
|
|
64322
64391
|
// src/cli-probe/probe.ts
|
|
64323
64392
|
var fs70 = __toESM(require("fs"), 1);
|
|
@@ -69318,6 +69387,12 @@ async function startDaemon(config) {
|
|
|
69318
69387
|
ownerId = "";
|
|
69319
69388
|
ownerProvider = "";
|
|
69320
69389
|
ownerDisplayName = loadOwnerDisplayName(config.dataDir);
|
|
69390
|
+
},
|
|
69391
|
+
// 云 persona 调用 key(design 2026-09-08):daemon 拿本机登录凭证向中心代取。
|
|
69392
|
+
// 凭证不出 ws —— UI 只拿到 key 本身,跟 exchange / listDevices 同一条纪律。
|
|
69393
|
+
apiKeyClient: {
|
|
69394
|
+
get: (args) => centralGetApiKey({ api: config.clawosApi ?? DEFAULT_CLAWOS_API, ...args }),
|
|
69395
|
+
issue: (args) => centralIssueApiKey({ api: config.clawosApi ?? DEFAULT_CLAWOS_API, ...args })
|
|
69321
69396
|
}
|
|
69322
69397
|
},
|
|
69323
69398
|
// 设备目录 + 连接(决策 #15:daemon 代理中心 server)。
|
|
@@ -21337,12 +21337,9 @@ var EnvEvidenceSchema = external_exports.object({
|
|
|
21337
21337
|
});
|
|
21338
21338
|
|
|
21339
21339
|
// ../protocol/src/deploy-schemas.ts
|
|
21340
|
-
var FulfillmentSchema = external_exports.enum(["deployer", "user"]);
|
|
21341
21340
|
var DeployFileSchema = external_exports.object({
|
|
21342
21341
|
version: external_exports.literal(1),
|
|
21343
|
-
manifest: EnvironmentManifestSchema
|
|
21344
|
-
/** secret name → 谁提供。缺席 = 还没定 */
|
|
21345
|
-
fulfillment: external_exports.record(external_exports.string(), FulfillmentSchema).default({})
|
|
21342
|
+
manifest: EnvironmentManifestSchema
|
|
21346
21343
|
}).strict();
|
|
21347
21344
|
var DeployScanStatusSchema = external_exports.enum(["scanning", "done", "failed"]);
|
|
21348
21345
|
var DeployScanSchema = external_exports.object({
|
|
@@ -21393,7 +21390,6 @@ var DeployPersonaArgsSchema = external_exports.object({
|
|
|
21393
21390
|
var DeployPatchArgsSchema = external_exports.object({
|
|
21394
21391
|
personaId: external_exports.string().min(1),
|
|
21395
21392
|
patch: external_exports.object({
|
|
21396
|
-
fulfillment: external_exports.record(external_exports.string(), FulfillmentSchema).optional(),
|
|
21397
21393
|
// 人工补依赖;整份替换 manifest
|
|
21398
21394
|
manifest: EnvironmentManifestSchema.optional()
|
|
21399
21395
|
}).strict()
|
|
@@ -21606,6 +21602,22 @@ var AuthGetIdentityResponseSchema = external_exports.object({
|
|
|
21606
21602
|
var AuthLogoutResponseSchema = external_exports.object({
|
|
21607
21603
|
type: external_exports.literal("auth:logout:ok")
|
|
21608
21604
|
});
|
|
21605
|
+
var GatewayUrl = external_exports.string().nullable();
|
|
21606
|
+
var AuthApiKeyGetResponseSchema = external_exports.object({
|
|
21607
|
+
type: external_exports.literal("auth:apiKey:get:ok"),
|
|
21608
|
+
/** null = 还没发过。**发过就能一直看到** —— 中心存的是明文,设置页据此展示 */
|
|
21609
|
+
apiKey: external_exports.string().nullable(),
|
|
21610
|
+
/** ISO 时间;apiKey 为 null 时同为 null */
|
|
21611
|
+
createdAt: external_exports.string().nullable(),
|
|
21612
|
+
gatewayUrl: GatewayUrl
|
|
21613
|
+
});
|
|
21614
|
+
var AuthApiKeyRegenerateResponseSchema = external_exports.object({
|
|
21615
|
+
type: external_exports.literal("auth:apiKey:regenerate:ok"),
|
|
21616
|
+
/** 新发的那把。**旧的当场失效** —— 一人一把,按 union_id 覆盖 */
|
|
21617
|
+
apiKey: external_exports.string().min(1),
|
|
21618
|
+
createdAt: external_exports.string().min(1),
|
|
21619
|
+
gatewayUrl: GatewayUrl
|
|
21620
|
+
});
|
|
21609
21621
|
var AuthLoginDoneEventSchema = external_exports.object({
|
|
21610
21622
|
type: external_exports.literal("auth:login:done"),
|
|
21611
21623
|
identity: FeishuIdentitySchema
|
|
@@ -23876,7 +23888,7 @@ var METHOD_DOCS = {
|
|
|
23876
23888
|
},
|
|
23877
23889
|
// ---- deploy:*(persona 上云:persona 目录 = git 仓库工作树,发布 = 推送触发仓库流水线)----
|
|
23878
23890
|
"deploy:start": {
|
|
23879
|
-
summary: "\u5BF9\u67D0\u4E2A persona \u8D77\u4E00\u6B21\u4E0A\u4E91\u626B\u63CF\u3002**\u6CA1\u4ED3\u5E93\u5148\u5EFA\u4ED3**\uFF08gh repo create\uFF0C\u5EFA\u5728\u7EC4\u7EC7\u4E0B\u3001\u79C1\u6709\u3001\u63A8\u9996\u4E2A\u63D0\u4EA4\uFF09\uFF0C\u518D\u8D77 persona-butler \u7684\u626B\u63CF\u4F1A\u8BDD\uFF0C\u7ED3\u679C\u5199\u8FDB persona \u76EE\u5F55\u7684 .clawd/deploy.json \uFF08\u6E05\u5355
|
|
23891
|
+
summary: "\u5BF9\u67D0\u4E2A persona \u8D77\u4E00\u6B21\u4E0A\u4E91\u626B\u63CF\u3002**\u6CA1\u4ED3\u5E93\u5148\u5EFA\u4ED3**\uFF08gh repo create\uFF0C\u5EFA\u5728\u7EC4\u7EC7\u4E0B\u3001\u79C1\u6709\u3001\u63A8\u9996\u4E2A\u63D0\u4EA4\uFF09\uFF0C\u518D\u8D77 persona-butler \u7684\u626B\u63CF\u4F1A\u8BDD\uFF0C\u7ED3\u679C\u5199\u8FDB persona \u76EE\u5F55\u7684 .clawd/deploy.json \uFF08\u73AF\u5883\u6E05\u5355\uFF0C\u8FDB\u4ED3\u5E93\uFF09\u4E0E .clawd/deploy-scan.json\uFF08\u8BC1\u636E\uFF0C\u4E0D\u8FDB\u4ED3\u5E93\uFF09\u3002\u5DF2\u7ECF\u5728\u626B\u7684\u8BDD\u539F\u6837\u8FD4\u56DE\u3001\u4E0D\u8D77\u7B2C\u4E8C\u4E2A\u626B\u63CF\u4F1A\u8BDD\uFF1Bowner-only",
|
|
23880
23892
|
args: DeployPersonaArgsSchema
|
|
23881
23893
|
},
|
|
23882
23894
|
"deploy:get": {
|
|
@@ -23884,7 +23896,7 @@ var METHOD_DOCS = {
|
|
|
23884
23896
|
args: DeployPersonaArgsSchema
|
|
23885
23897
|
},
|
|
23886
23898
|
"deploy:patch": {
|
|
23887
|
-
summary: "\u7F16\u8F91\u90E8\u7F72\u6587\u4EF6\uFF1A\
|
|
23899
|
+
summary: "\u7F16\u8F91\u90E8\u7F72\u6587\u4EF6\uFF1A\u624B\u5DE5\u8865\u4F9D\u8D56\u3002**\u4E0D\u80FD\u4ECE\u8FD9\u91CC\u4F20\u51ED\u636E\u7684\u503C**\uFF08\u503C\u8D70 deploy:putSecret\uFF09\uFF1Bowner-only",
|
|
23888
23900
|
args: DeployPatchArgsSchema
|
|
23889
23901
|
},
|
|
23890
23902
|
"deploy:putSecret": {
|
|
@@ -23900,7 +23912,7 @@ var METHOD_DOCS = {
|
|
|
23900
23912
|
args: DeployFinishScanArgsSchema
|
|
23901
23913
|
},
|
|
23902
23914
|
"deploy:release": {
|
|
23903
|
-
summary: "\u53D1\u5E03 = \u63D0\u4EA4\u5E76\u63A8\u9001\u5230\u4ED3\u5E93\uFF1A\u91CD\u5199 workflow \u6A21\u677F \u2192 git add -A \u2192 \u7A7A\u63D0\u4EA4\u4E5F\u5141\u8BB8 \u2192 push\u3002\u4ED3\u5E93\u91CC\u7684\u6D41\u6C34\u7EBF\u63A5\u7740\u6784\u955C\u50CF\u3001\u5728\u96C6\u7FA4\u4E0A\u771F\u8D77\u4E00\u6B21\u3001\u767B\u8BB0\u6210\u6B63\u5F0F\uFF0C\u8FDB\u5EA6\u5728 GitHub Actions \u770B\u3002\u524D\u7F6E\uFF1A\u5DF2\u7ED1\u5B9A\u4ED3\u5E93\u3001\u6709\u6E05\u5355\u3001\u6BCF\
|
|
23915
|
+
summary: "\u53D1\u5E03 = \u63D0\u4EA4\u5E76\u63A8\u9001\u5230\u4ED3\u5E93\uFF1A\u91CD\u5199 workflow \u6A21\u677F \u2192 git add -A \u2192 \u7A7A\u63D0\u4EA4\u4E5F\u5141\u8BB8 \u2192 push\u3002\u4ED3\u5E93\u91CC\u7684\u6D41\u6C34\u7EBF\u63A5\u7740\u6784\u955C\u50CF\u3001\u5728\u96C6\u7FA4\u4E0A\u771F\u8D77\u4E00\u6B21\u3001\u767B\u8BB0\u6210\u6B63\u5F0F\uFF0C\u8FDB\u5EA6\u5728 GitHub Actions \u770B\u3002\u524D\u7F6E\uFF1A\u5DF2\u7ED1\u5B9A\u4ED3\u5E93\u3001\u6709\u6E05\u5355\u3001\u6BCF\u4E2A\u53D8\u91CF\u540D\u90FD\u5728 Secrets \u91CC\uFF1Bowner-only",
|
|
23904
23916
|
args: DeployPersonaArgsSchema
|
|
23905
23917
|
},
|
|
23906
23918
|
"shift:list": {
|
|
@@ -24279,6 +24291,14 @@ var METHOD_DOCS = {
|
|
|
24279
24291
|
summary: "\u767B\u51FA\u98DE\u4E66\u8EAB\u4EFD\uFF08\u6E05 owner-identity \u843D\u76D8\uFF09\u3002owner-only",
|
|
24280
24292
|
args: NO_ARGS
|
|
24281
24293
|
},
|
|
24294
|
+
"auth:apiKey:get": {
|
|
24295
|
+
summary: "\u8BFB\u56DE\u81EA\u5DF1\u90A3\u628A\u4E91 persona \u8C03\u7528 key\uFF08\u6CA1\u53D1\u8FC7 \u2192 apiKey:null\uFF09\u3002daemon \u62FF\u672C\u673A\u767B\u5F55\u51ED\u8BC1\u5411\u4E2D\u5FC3\u4EE3\u53D6\uFF0C\u51ED\u8BC1\u4E0D\u51FA ws\u3002owner-only",
|
|
24296
|
+
args: NO_ARGS
|
|
24297
|
+
},
|
|
24298
|
+
"auth:apiKey:regenerate": {
|
|
24299
|
+
summary: "\u6362\u4E00\u628A\u65B0\u7684\u4E91 persona \u8C03\u7528 key\uFF0C**\u65E7\u7684\u5F53\u573A\u5931\u6548**\uFF08\u4E00\u4EBA\u4E00\u628A\uFF0C\u4E2D\u5FC3\u6309 union_id \u8986\u76D6\uFF09\u3002owner-only",
|
|
24300
|
+
args: NO_ARGS
|
|
24301
|
+
},
|
|
24282
24302
|
"device:list": {
|
|
24283
24303
|
summary: "\u5217\u51FA\u516C\u5171\u8BBE\u5907\u76EE\u5F55\u91CC\u53EF\u8FDE\u63A5\u7684\u8BBE\u5907\uFF08daemon \u4EE3\u7406\u4E2D\u5FC3 server\uFF09\u3002owner-only",
|
|
24284
24304
|
args: NO_ARGS
|
package/dist/persona-defaults/persona-clawd-butler/.claude/skills/scan-persona-for-deploy/SKILL.md
CHANGED
|
@@ -82,7 +82,7 @@ call({ method: "deploy:reportFinding", args: {
|
|
|
82
82
|
- 一份凭据含多个字段就把多个环境变量都列进 `env`(AK 是 id+secret 两个,supabase 是四个)
|
|
83
83
|
- **绝对不要把凭据的值写进来**,哪怕你在文件里看到了明文的 key。你只报告「这里需要一份
|
|
84
84
|
supabase 凭据」,值由老板另外填进仓库的 GitHub Secrets。看到明文 key 也不要复述它的内容。
|
|
85
|
-
-
|
|
85
|
+
- **不要判断这条凭据该谁出**。凭据全部由部署者提供,清单只说需要什么。
|
|
86
86
|
|
|
87
87
|
### kind: "asset" —— persona 目录之外的共享资产
|
|
88
88
|
|