@clawos-dev/clawd 0.2.477 → 0.2.479

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.
@@ -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()
@@ -23884,7 +23880,7 @@ var METHOD_DOCS = {
23884
23880
  },
23885
23881
  // ---- deploy:*(persona 上云:persona 目录 = git 仓库工作树,发布 = 推送触发仓库流水线)----
23886
23882
  "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 + \u5C65\u7EA6\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",
23883
+ 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
23884
  args: DeployPersonaArgsSchema
23889
23885
  },
23890
23886
  "deploy:get": {
@@ -23892,7 +23888,7 @@ var METHOD_DOCS = {
23892
23888
  args: DeployPersonaArgsSchema
23893
23889
  },
23894
23890
  "deploy:patch": {
23895
- summary: "\u7F16\u8F91\u90E8\u7F72\u6587\u4EF6\uFF1A\u9009\u5C65\u7EA6\uFF08\u8C01\u51FA\u8FD9\u6761\u51ED\u636E\uFF09/ \u624B\u5DE5\u8865\u4F9D\u8D56\u3002**\u4E0D\u80FD\u4ECE\u8FD9\u91CC\u4F20\u51ED\u636E\u7684\u503C**\uFF08\u503C\u8D70 deploy:putSecret\uFF09\uFF1B\u5C65\u7EA6\u540D\u5FC5\u987B\u662F\u6E05\u5355\u91CC\u58F0\u660E\u8FC7\u7684\u51ED\u636E\uFF1Bowner-only",
23891
+ 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
23892
  args: DeployPatchArgsSchema
23897
23893
  },
23898
23894
  "deploy:putSecret": {
@@ -23908,7 +23904,7 @@ var METHOD_DOCS = {
23908
23904
  args: DeployFinishScanArgsSchema
23909
23905
  },
23910
23906
  "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\u6761\u51ED\u636E\u90FD\u5B9A\u4E86\u5C65\u7EA6\u3001\u6BCF\u4E2A\u53D8\u91CF\u540D\u90FD\u5728 Secrets \u91CC\uFF1Bowner-only",
23907
+ 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
23908
  args: DeployPersonaArgsSchema
23913
23909
  },
23914
23910
  "shift:list": {
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 FulfillmentSchema, DeployFileSchema, DeployScanStatusSchema, DeployScanSchema, DeployRepoSchema, DeploySecretPresenceSchema, DeployStateSchema, DeployReleaseResultSchema, DeployPersonaArgsSchema, DeployPatchArgsSchema, DeployPutSecretArgsSchema, DeployReportFindingArgsSchema, DeployFinishScanArgsSchema, PERSONA_REPO_ORG;
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()
@@ -8836,7 +8832,7 @@ var init_methods = __esm({
8836
8832
  },
8837
8833
  // ---- deploy:*(persona 上云:persona 目录 = git 仓库工作树,发布 = 推送触发仓库流水线)----
8838
8834
  "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 + \u5C65\u7EA6\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",
8835
+ 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
8836
  args: DeployPersonaArgsSchema
8841
8837
  },
8842
8838
  "deploy:get": {
@@ -8844,7 +8840,7 @@ var init_methods = __esm({
8844
8840
  args: DeployPersonaArgsSchema
8845
8841
  },
8846
8842
  "deploy:patch": {
8847
- summary: "\u7F16\u8F91\u90E8\u7F72\u6587\u4EF6\uFF1A\u9009\u5C65\u7EA6\uFF08\u8C01\u51FA\u8FD9\u6761\u51ED\u636E\uFF09/ \u624B\u5DE5\u8865\u4F9D\u8D56\u3002**\u4E0D\u80FD\u4ECE\u8FD9\u91CC\u4F20\u51ED\u636E\u7684\u503C**\uFF08\u503C\u8D70 deploy:putSecret\uFF09\uFF1B\u5C65\u7EA6\u540D\u5FC5\u987B\u662F\u6E05\u5355\u91CC\u58F0\u660E\u8FC7\u7684\u51ED\u636E\uFF1Bowner-only",
8843
+ 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
8844
  args: DeployPatchArgsSchema
8849
8845
  },
8850
8846
  "deploy:putSecret": {
@@ -8860,7 +8856,7 @@ var init_methods = __esm({
8860
8856
  args: DeployFinishScanArgsSchema
8861
8857
  },
8862
8858
  "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\u6761\u51ED\u636E\u90FD\u5B9A\u4E86\u5C65\u7EA6\u3001\u6BCF\u4E2A\u53D8\u91CF\u540D\u90FD\u5728 Secrets \u91CC\uFF1Bowner-only",
8859
+ 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
8860
  args: DeployPersonaArgsSchema
8865
8861
  },
8866
8862
  "shift:list": {
@@ -54676,7 +54672,7 @@ async function writeScan(dir, scan) {
54676
54672
  await writeJson(import_node_path30.default.join(dir, SCAN_FILE), DeployScanSchema.parse(scan));
54677
54673
  }
54678
54674
  function emptyDeployFile() {
54679
- return { version: 1, manifest: { version: 1, clis: [], secrets: [], assets: [] }, fulfillment: {} };
54675
+ return { version: 1, manifest: { version: 1, clis: [], secrets: [], assets: [] } };
54680
54676
  }
54681
54677
  function parseFinding(kind, item) {
54682
54678
  const schema = kind === "cli" ? EnvCliSchema : kind === "secret" ? EnvSecretSchema : EnvAssetSchema;
@@ -54766,11 +54762,8 @@ var L = [
54766
54762
  " outputs:",
54767
54763
  " tag: ${{ steps.plan.outputs.tag }}",
54768
54764
  " image: ${{ steps.plan.outputs.image }}",
54769
- " deploy_id: ${{ steps.plan.outputs.deploy_id }}",
54770
54765
  " persona_id: ${{ steps.plan.outputs.persona_id }}",
54771
54766
  " env_names: ${{ steps.plan.outputs.env_names }}",
54772
- " deployer_env_names: ${{ steps.plan.outputs.deployer_env_names }}",
54773
- " user_secrets: ${{ steps.plan.outputs.user_secrets }}",
54774
54767
  " steps:",
54775
54768
  " - name: Checkout persona",
54776
54769
  " uses: actions/checkout@v4",
@@ -54891,7 +54884,6 @@ var L = [
54891
54884
  " run: |",
54892
54885
  " node clawos/cloud-host/pipeline/smoke.mjs \\",
54893
54886
  " --image '${{ needs.build.outputs.image }}' \\",
54894
- " --deploy-id '${{ needs.build.outputs.deploy_id }}' \\",
54895
54887
  " --persona-id '${{ needs.build.outputs.persona_id }}' \\",
54896
54888
  " --run-number '${{ github.run_number }}'",
54897
54889
  "",
@@ -54916,12 +54908,10 @@ var L = [
54916
54908
  " CLAWD_GATEWAY_URL: ${{ vars.CLAWD_GATEWAY_URL }}",
54917
54909
  " CLAWD_GATEWAY_ADMIN_KEY: ${{ secrets.CLAWD_GATEWAY_ADMIN_KEY }}",
54918
54910
  " CLAWD_SECRETS_JSON: ${{ toJSON(secrets) }}",
54919
- " CLAWD_DEPLOYER_ENV_NAMES: ${{ needs.build.outputs.deployer_env_names }}",
54920
- " CLAWD_USER_SECRETS: ${{ needs.build.outputs.user_secrets }}",
54911
+ " CLAWD_ENV_NAMES: ${{ needs.build.outputs.env_names }}",
54921
54912
  " run: |",
54922
54913
  " node clawos/cloud-host/pipeline/register.mjs \\",
54923
54914
  " --image '${{ needs.build.outputs.image }}' \\",
54924
- " --deploy-id '${{ needs.build.outputs.deploy_id }}' \\",
54925
54915
  " --persona-id '${{ needs.build.outputs.persona_id }}'",
54926
54916
  ""
54927
54917
  ];
@@ -55242,7 +55232,7 @@ function buildDeployHandlers(deps) {
55242
55232
  secretsCache.delete(personaId2);
55243
55233
  }
55244
55234
  const prev = await readDeployFile(dir).catch(() => void 0);
55245
- await writeDeployFile(dir, { ...emptyDeployFile(), fulfillment: prev?.fulfillment ?? {} });
55235
+ await writeDeployFile(dir, emptyDeployFile());
55246
55236
  const startedAt = deps.now();
55247
55237
  await writeScan(dir, { status: "scanning", evidence: [], notes: [], scannedAssets: [], startedAt });
55248
55238
  const started = deps.startScan(personaId2);
@@ -55272,16 +55262,9 @@ function buildDeployHandlers(deps) {
55272
55262
  const args = parseArgs2(DeployPatchArgsSchema, frame, "deploy:patch");
55273
55263
  const dir = mustPersona(args.personaId);
55274
55264
  const file = await readDeployFile(dir) ?? emptyDeployFile();
55275
- if (args.patch.fulfillment) {
55276
- const declared = new Set((args.patch.manifest ?? file.manifest).secrets.map((s) => s.name));
55277
- for (const name of Object.keys(args.patch.fulfillment)) {
55278
- if (!declared.has(name)) throw invalid(`\u6E05\u5355\u91CC\u6CA1\u6709\u53EB\u300C${name}\u300D\u7684\u51ED\u636E`);
55279
- }
55280
- }
55281
55265
  const next = {
55282
55266
  ...file,
55283
- ...args.patch.manifest ? { manifest: args.patch.manifest } : {},
55284
- ...args.patch.fulfillment ? { fulfillment: { ...file.fulfillment, ...args.patch.fulfillment } } : {}
55267
+ ...args.patch.manifest ? { manifest: args.patch.manifest } : {}
55285
55268
  };
55286
55269
  await writeDeployFile(dir, next);
55287
55270
  return view(args.personaId);
@@ -55358,8 +55341,6 @@ function buildDeployHandlers(deps) {
55358
55341
  if (scan?.status === "scanning") throw invalid("\u626B\u63CF\u8FD8\u6CA1\u7ED3\u675F");
55359
55342
  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");
55360
55343
  const blockers = [];
55361
- const undecided = file.manifest.secrets.filter((s) => !file.fulfillment[s.name]).map((s) => `\u300C${s.name}\u300D\u8FD8\u6CA1\u5B9A\u8C01\u51FA`);
55362
- blockers.push(...undecided);
55363
55344
  let present;
55364
55345
  try {
55365
55346
  present = new Set((await cachedSecrets(personaId2, dir, true)).filter((p2) => p2.setAt).map((p2) => p2.env));
@@ -64066,7 +64047,7 @@ var METHOD_GRANT_MAP = {
64066
64047
  // ---- visitor:* (访客名单,owner-only) ----
64067
64048
  // owner 看完整访客名单(含没开会话的);guest 不可调(handler 内再 assertOwner 兜底)。
64068
64049
  "visitor:list": ADMIN_ANY,
64069
- // deploy:*(persona 上云):全部 owner-only。里面有履约决策、凭据录入口、建仓和推送,
64050
+ // deploy:*(persona 上云):全部 owner-only。里面有凭据录入口、建仓和推送,
64070
64051
  // guest 不该看见更不该动。
64071
64052
  "deploy:start": ADMIN_ANY,
64072
64053
  "deploy:get": ADMIN_ANY,
@@ -64320,7 +64301,7 @@ function computeMethodAccess(args) {
64320
64301
  }
64321
64302
 
64322
64303
  // src/version.ts
64323
- var version = "0.2.477".length > 0 ? "0.2.477" : "dev";
64304
+ var version = "0.2.479".length > 0 ? "0.2.479" : "dev";
64324
64305
 
64325
64306
  // src/cli-probe/probe.ts
64326
64307
  var fs70 = __toESM(require("fs"), 1);
@@ -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()
@@ -23876,7 +23872,7 @@ var METHOD_DOCS = {
23876
23872
  },
23877
23873
  // ---- deploy:*(persona 上云:persona 目录 = git 仓库工作树,发布 = 推送触发仓库流水线)----
23878
23874
  "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 + \u5C65\u7EA6\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",
23875
+ 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
23876
  args: DeployPersonaArgsSchema
23881
23877
  },
23882
23878
  "deploy:get": {
@@ -23884,7 +23880,7 @@ var METHOD_DOCS = {
23884
23880
  args: DeployPersonaArgsSchema
23885
23881
  },
23886
23882
  "deploy:patch": {
23887
- summary: "\u7F16\u8F91\u90E8\u7F72\u6587\u4EF6\uFF1A\u9009\u5C65\u7EA6\uFF08\u8C01\u51FA\u8FD9\u6761\u51ED\u636E\uFF09/ \u624B\u5DE5\u8865\u4F9D\u8D56\u3002**\u4E0D\u80FD\u4ECE\u8FD9\u91CC\u4F20\u51ED\u636E\u7684\u503C**\uFF08\u503C\u8D70 deploy:putSecret\uFF09\uFF1B\u5C65\u7EA6\u540D\u5FC5\u987B\u662F\u6E05\u5355\u91CC\u58F0\u660E\u8FC7\u7684\u51ED\u636E\uFF1Bowner-only",
23883
+ 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
23884
  args: DeployPatchArgsSchema
23889
23885
  },
23890
23886
  "deploy:putSecret": {
@@ -23900,7 +23896,7 @@ var METHOD_DOCS = {
23900
23896
  args: DeployFinishScanArgsSchema
23901
23897
  },
23902
23898
  "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\u6761\u51ED\u636E\u90FD\u5B9A\u4E86\u5C65\u7EA6\u3001\u6BCF\u4E2A\u53D8\u91CF\u540D\u90FD\u5728 Secrets \u91CC\uFF1Bowner-only",
23899
+ 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
23900
  args: DeployPersonaArgsSchema
23905
23901
  },
23906
23902
  "shift:list": {
@@ -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