@clawos-dev/clawd 0.2.621 → 0.2.623

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.
@@ -21412,6 +21412,46 @@ var EnvEvidenceSchema = external_exports.object({
21412
21412
  quote: external_exports.string().min(1)
21413
21413
  });
21414
21414
 
21415
+ // ../protocol/src/release-schemas.ts
21416
+ var DEPLOY_ENVIRONMENTS = ["integration", "production"];
21417
+ var DeployEnvironmentSchema = external_exports.enum(DEPLOY_ENVIRONMENTS);
21418
+ var ImageDigestSchema = external_exports.string().regex(/^[a-z0-9.-]+(?::[0-9]+)?\/[a-z0-9._/-]+@sha256:[a-f0-9]{64}$/);
21419
+ var SourceCommitSchema = external_exports.string().regex(/^[a-f0-9]{40}$/);
21420
+ var IntegrationEndpointSchema = external_exports.string().refine((value) => {
21421
+ try {
21422
+ const url = new URL(value);
21423
+ return url.protocol === "https:" && !url.username && !url.password && !url.search && !url.hash && url.pathname === "/" && /(^|[.-])int([.-]|$)/.test(url.hostname);
21424
+ } catch {
21425
+ return false;
21426
+ }
21427
+ }, "\u6D4B\u8BD5\u9A8C\u8BC1\u5730\u5740\u5FC5\u987B\u660E\u786E\u6307\u5411 int HTTPS \u73AF\u5883");
21428
+ var VerificationSchema = external_exports.object({
21429
+ status: external_exports.literal("passed"),
21430
+ fingerprint: external_exports.string().regex(/^[a-f0-9]{64}$/),
21431
+ checks: external_exports.array(external_exports.string().regex(/^[a-z0-9-]+$/)),
21432
+ endpoint: IntegrationEndpointSchema,
21433
+ verifiedAt: external_exports.string().refine((s) => Number.isFinite(Date.parse(s)))
21434
+ }).strict();
21435
+ var VerifiedPersonaReleaseSchema = external_exports.object({
21436
+ version: external_exports.literal(1),
21437
+ environment: external_exports.literal("integration"),
21438
+ component: external_exports.literal("persona"),
21439
+ image: ImageDigestSchema,
21440
+ commit: SourceCommitSchema,
21441
+ baseImage: ImageDigestSchema,
21442
+ pipelineCommit: SourceCommitSchema,
21443
+ repository: external_exports.string().regex(/^[A-Za-z0-9_.-]+\/[A-Za-z0-9_.-]+$/),
21444
+ verification: VerificationSchema.refine((v) => v.checks.includes("persona-smoke"))
21445
+ }).strict();
21446
+ var VerifiedBaseReleaseSchema = external_exports.object({
21447
+ version: external_exports.literal(1),
21448
+ environment: external_exports.literal("integration"),
21449
+ component: external_exports.literal("base"),
21450
+ image: ImageDigestSchema,
21451
+ commit: SourceCommitSchema,
21452
+ verification: VerificationSchema.refine((v) => v.checks.includes("base-smoke"))
21453
+ }).strict();
21454
+
21415
21455
  // ../protocol/src/deploy-schemas.ts
21416
21456
  var DeployFileSchema = external_exports.object({
21417
21457
  version: external_exports.literal(1),
@@ -21440,15 +21480,44 @@ var DeployScanSchema = external_exports.object({
21440
21480
  error: external_exports.string().optional()
21441
21481
  }).strict();
21442
21482
  var DeployReleasedSchema = external_exports.object({
21483
+ /** Legacy wire records can omit these; file migration always materializes them. */
21484
+ id: external_exports.string().min(1).optional(),
21485
+ environment: DeployEnvironmentSchema.optional(),
21486
+ legacy: external_exports.boolean().optional(),
21443
21487
  head: external_exports.string().min(1),
21444
21488
  contentHead: external_exports.string().min(1),
21445
21489
  scanId: external_exports.string().min(1),
21446
- at: external_exports.number()
21490
+ at: external_exports.number(),
21491
+ pushed: external_exports.boolean().optional(),
21492
+ runId: external_exports.number().int().positive().optional(),
21493
+ runAttempt: external_exports.number().int().positive().optional(),
21494
+ artifactId: external_exports.number().int().positive().optional(),
21495
+ verified: VerifiedPersonaReleaseSchema.optional(),
21496
+ confirmation: external_exports.object({
21497
+ fingerprint: external_exports.string().regex(/^[a-f0-9]{64}$/),
21498
+ runId: external_exports.number().int().positive(),
21499
+ runAttempt: external_exports.number().int().positive(),
21500
+ at: external_exports.number()
21501
+ }).strict().optional()
21502
+ }).strict();
21503
+ var DEPLOY_PROMOTION_PHASES = ["prepared", "main-pushed", "dispatching", "dispatched", "completed", "failed"];
21504
+ var DeployPromotionSchema = external_exports.object({
21505
+ id: external_exports.string().min(1),
21506
+ releaseId: external_exports.string().min(1),
21507
+ at: external_exports.number(),
21508
+ /** Artifact fixed when the user authorizes this action; int reruns cannot replace it. */
21509
+ verified: VerifiedPersonaReleaseSchema.optional(),
21510
+ phase: external_exports.enum(DEPLOY_PROMOTION_PHASES),
21511
+ expectedMain: external_exports.string().optional(),
21512
+ runId: external_exports.number().int().positive().optional(),
21513
+ runAttempt: external_exports.number().int().positive().optional(),
21514
+ error: external_exports.string().optional()
21447
21515
  }).strict();
21448
21516
  var DeployScanFileSchema = external_exports.object({
21449
- version: external_exports.literal(3),
21517
+ version: external_exports.literal(4),
21450
21518
  scans: external_exports.array(DeployScanSchema),
21451
- releases: external_exports.array(DeployReleasedSchema)
21519
+ releases: external_exports.array(DeployReleasedSchema),
21520
+ promotions: external_exports.array(DeployPromotionSchema).default([])
21452
21521
  }).strict();
21453
21522
  var DeployRepoSchema = external_exports.object({
21454
21523
  url: external_exports.string().min(1),
@@ -21482,7 +21551,13 @@ var DeployRunSchema = external_exports.object({
21482
21551
  status: external_exports.enum(["queued", "running", "completed"]),
21483
21552
  htmlUrl: external_exports.string().min(1),
21484
21553
  /** run 刚入队时可能一条都还没有 */
21485
- jobs: external_exports.array(DeployJobSchema)
21554
+ jobs: external_exports.array(DeployJobSchema),
21555
+ environment: DeployEnvironmentSchema.optional(),
21556
+ branch: external_exports.string().optional(),
21557
+ event: external_exports.string().optional(),
21558
+ runAttempt: external_exports.number().int().positive().optional(),
21559
+ conclusion: external_exports.enum(["success", "failure"]).optional(),
21560
+ promotionId: external_exports.string().optional()
21486
21561
  }).strict();
21487
21562
  var DeployUnpublishRunSchema = external_exports.object({
21488
21563
  runId: external_exports.number(),
@@ -21497,6 +21572,23 @@ var DeployStateSchema = external_exports.object({
21497
21572
  repo: DeployRepoSchema.optional(),
21498
21573
  scans: external_exports.array(DeployScanSchema).default([]),
21499
21574
  releases: external_exports.array(DeployReleasedSchema).default([]),
21575
+ promotions: external_exports.array(DeployPromotionSchema).optional(),
21576
+ targets: external_exports.object({
21577
+ integration: external_exports.object({
21578
+ run: DeployRunSchema.optional(),
21579
+ secrets: external_exports.array(DeploySecretPresenceSchema).optional(),
21580
+ online: external_exports.boolean().optional(),
21581
+ image: ImageDigestSchema.optional(),
21582
+ unpublish: DeployUnpublishRunSchema.optional()
21583
+ }).strict().optional(),
21584
+ production: external_exports.object({
21585
+ run: DeployRunSchema.optional(),
21586
+ secrets: external_exports.array(DeploySecretPresenceSchema).optional(),
21587
+ online: external_exports.boolean().optional(),
21588
+ image: ImageDigestSchema.optional(),
21589
+ unpublish: DeployUnpublishRunSchema.optional()
21590
+ }).strict().optional()
21591
+ }).strict().optional(),
21500
21592
  /** 没仓库时缺席(查不了) */
21501
21593
  secrets: external_exports.array(DeploySecretPresenceSchema).optional(),
21502
21594
  /**
@@ -21523,13 +21615,16 @@ var DeployUnpublishResultSchema = external_exports.object({
21523
21615
  var DeployPatchResultSchema = DeployStateSchema.pick({ scans: true });
21524
21616
  var DeployReleaseResultSchema = external_exports.object({
21525
21617
  sha: external_exports.string().min(1),
21526
- actionsUrl: external_exports.string().min(1)
21618
+ actionsUrl: external_exports.string().min(1),
21619
+ releaseId: external_exports.string().optional()
21527
21620
  }).strict();
21528
21621
  var DeployPersonaArgsSchema = external_exports.object({
21529
21622
  personaId: external_exports.string().min(1)
21530
21623
  }).strict();
21531
21624
  var DeployGetArgsSchema = DeployPersonaArgsSchema.extend({
21532
- releaseHead: external_exports.string().min(1).optional()
21625
+ releaseHead: external_exports.string().min(1).optional(),
21626
+ releaseId: external_exports.string().min(1).optional(),
21627
+ environment: DeployEnvironmentSchema.optional()
21533
21628
  }).strict();
21534
21629
  var DeployScanArgsSchema = DeployPersonaArgsSchema.extend({
21535
21630
  scanBase: ScanBaseKindSchema.optional()
@@ -21537,6 +21632,13 @@ var DeployScanArgsSchema = DeployPersonaArgsSchema.extend({
21537
21632
  var DeployReleaseArgsSchema = DeployPersonaArgsSchema.extend({
21538
21633
  scanId: external_exports.string().min(1)
21539
21634
  }).strict();
21635
+ var DeployConfirmTestArgsSchema = DeployPersonaArgsSchema.extend({ releaseId: external_exports.string().min(1) }).strict();
21636
+ var DeployPromoteArgsSchema = DeployConfirmTestArgsSchema;
21637
+ var DeployOpenTestArgsSchema = DeployConfirmTestArgsSchema;
21638
+ var DeployEnvironmentArgsSchema = DeployPersonaArgsSchema.extend({ environment: DeployEnvironmentSchema.default("production") }).strict();
21639
+ var DeployConfirmTestResultSchema = external_exports.object({ confirmation: DeployReleasedSchema.shape.confirmation.unwrap() }).strict();
21640
+ var DeployPromoteResultSchema = external_exports.object({ promotion: DeployPromotionSchema }).strict();
21641
+ var DeployOpenTestResultSchema = external_exports.object({ personaId: external_exports.string().min(1), expectedImage: ImageDigestSchema }).strict();
21540
21642
  var DeployPatchArgsSchema = external_exports.object({
21541
21643
  personaId: external_exports.string().min(1),
21542
21644
  scanId: external_exports.string().min(1),
@@ -21552,6 +21654,7 @@ var DeployPatchArgsSchema = external_exports.object({
21552
21654
  }).strict();
21553
21655
  var DeployPutSecretArgsSchema = external_exports.object({
21554
21656
  personaId: external_exports.string().min(1),
21657
+ environment: DeployEnvironmentSchema.default("production"),
21555
21658
  /** 按哪次扫描的清单校验凭据名 / env 名。值本身是仓库级的(GitHub Secrets),跟扫描无关 */
21556
21659
  scanId: external_exports.string().min(1),
21557
21660
  name: external_exports.string().min(1),
@@ -21560,6 +21663,7 @@ var DeployPutSecretArgsSchema = external_exports.object({
21560
21663
  }).strict();
21561
21664
  var DeploySetEngineAuthArgsSchema = external_exports.object({
21562
21665
  personaId: external_exports.string().min(1),
21666
+ environment: DeployEnvironmentSchema.default("production"),
21563
21667
  channelId: external_exports.string().min(1).optional(),
21564
21668
  auth: external_exports.object({ baseUrl: external_exports.string(), apiKey: external_exports.string() }).strict().nullable().optional()
21565
21669
  }).strict().refine((data) => data.channelId !== void 0 || data.auth !== void 0, {
@@ -21567,6 +21671,8 @@ var DeploySetEngineAuthArgsSchema = external_exports.object({
21567
21671
  });
21568
21672
  var DeployRerunJobArgsSchema = external_exports.object({
21569
21673
  personaId: external_exports.string().min(1),
21674
+ environment: DeployEnvironmentSchema.default("production"),
21675
+ releaseId: external_exports.string().optional(),
21570
21676
  jobId: external_exports.number()
21571
21677
  }).strict();
21572
21678
  var DeployReportFindingArgsSchema = external_exports.object({
@@ -21588,6 +21694,99 @@ var DeployFinishScanArgsSchema = external_exports.object({
21588
21694
  notes: external_exports.array(external_exports.string()).default([])
21589
21695
  }).strict();
21590
21696
 
21697
+ // ../protocol/src/feishu-auth.ts
21698
+ var AuthEnvironmentArgsSchema = external_exports.object({ environment: DeployEnvironmentSchema.default("production") }).strict();
21699
+ var DeviceEntrySchema = external_exports.object({
21700
+ /**
21701
+ * 设备标识(决策 #15:daemon 本地生成的 dev-<uuid>,与人的身份 unionId 无关)。
21702
+ * 中心 server clawd_devices 注册表仅作服务发现(url 下发 + 目录),不在安全路径上。
21703
+ */
21704
+ deviceId: external_exports.string().min(1),
21705
+ name: external_exports.string().min(1),
21706
+ url: external_exports.string().min(1)
21707
+ });
21708
+ var DeviceListResponseSchema = external_exports.object({
21709
+ type: external_exports.literal("device:list:ok"),
21710
+ devices: external_exports.array(DeviceEntrySchema)
21711
+ });
21712
+ var DeviceConnectArgsSchema = external_exports.object({
21713
+ deviceId: external_exports.string().min(1),
21714
+ /**
21715
+ * 目标设备的 ws/tunnel 地址(可选):
21716
+ * - 公开目录点击:带 url(device:list 已下发,省一次 server 查询)
21717
+ * - 凭 deviceId 连接:缺省 url → daemon exchange 时由中心 server 下发该设备上报的 url
21718
+ * - 注册表不在安全路径上:知道对方 url 时显式传入即可连接(不依赖中心 server 服务发现)
21719
+ */
21720
+ url: external_exports.string().min(1).optional(),
21721
+ /** Optional display name; otherwise populate it from the handshake acknowledgement. */
21722
+ name: external_exports.string().optional()
21723
+ });
21724
+ var DeviceConnectResponseSchema = external_exports.object({
21725
+ type: external_exports.literal("device:connect:ok"),
21726
+ deviceId: external_exports.string(),
21727
+ name: external_exports.string(),
21728
+ url: external_exports.string()
21729
+ });
21730
+ var FeishuIdentitySchema = external_exports.object({
21731
+ /** 归属人 id(决策 #16:TTC unique_id,取代飞书 union_id;跨登录方式稳定) */
21732
+ ownerId: external_exports.string().min(1),
21733
+ /** 身份来源:'ttc'(飞书/手机/邮箱登入 TTC)| 'google' | ...(决策 #16,拓展用) */
21734
+ provider: external_exports.string().min(1),
21735
+ displayName: external_exports.string().min(1),
21736
+ /** TTC user_info 接口 data.avatar_url,可缺省 */
21737
+ avatarUrl: external_exports.string().optional(),
21738
+ /** TTC user_info 接口 data.union_id(飞书 union_id;dataclaw 可信入口 X-User-UnionId 用),可缺省 */
21739
+ unionId: external_exports.string().optional()
21740
+ });
21741
+ var AuthLoginStartResponseSchema = external_exports.object({
21742
+ type: external_exports.literal("auth:login:start:ok"),
21743
+ environment: DeployEnvironmentSchema.optional(),
21744
+ authUrl: external_exports.string().min(1),
21745
+ /** 防 CSRF 的一次性 nonce;回调时 daemon 校验 */
21746
+ state: external_exports.string().min(1)
21747
+ });
21748
+ var AuthGetIdentityResponseSchema = external_exports.object({
21749
+ type: external_exports.literal("auth:getIdentity:ok"),
21750
+ /** null = 未登录 */
21751
+ identity: FeishuIdentitySchema.nullable(),
21752
+ /** Stable device identifier independent of login, used for the shareable device link. */
21753
+ deviceId: external_exports.string().min(1)
21754
+ });
21755
+ var AuthLogoutResponseSchema = external_exports.object({
21756
+ type: external_exports.literal("auth:logout:ok")
21757
+ });
21758
+ var GatewayUrl = external_exports.string().nullable();
21759
+ var AuthApiKeyGetResponseSchema = external_exports.object({
21760
+ type: external_exports.literal("auth:apiKey:get:ok"),
21761
+ /** null = 还没发过。**发过就能一直看到** —— 中心存的是明文,设置页据此展示 */
21762
+ apiKey: external_exports.string().nullable(),
21763
+ /** ISO 时间;apiKey 为 null 时同为 null */
21764
+ createdAt: external_exports.string().nullable(),
21765
+ gatewayUrl: GatewayUrl
21766
+ });
21767
+ var AuthApiKeyRegenerateResponseSchema = external_exports.object({
21768
+ type: external_exports.literal("auth:apiKey:regenerate:ok"),
21769
+ /** 新发的那把。**旧的当场失效** —— 一人一把,按 union_id 覆盖 */
21770
+ apiKey: external_exports.string().min(1),
21771
+ createdAt: external_exports.string().min(1),
21772
+ gatewayUrl: GatewayUrl
21773
+ });
21774
+ var AuthApiKeyRevokeResponseSchema = external_exports.object({
21775
+ type: external_exports.literal("auth:apiKey:revoke:ok"),
21776
+ /** 之前有没有那把——没发过也算成功(幂等) */
21777
+ revoked: external_exports.boolean()
21778
+ });
21779
+ var AuthLoginDoneEventSchema = external_exports.object({
21780
+ type: external_exports.literal("auth:login:done"),
21781
+ environment: DeployEnvironmentSchema.optional(),
21782
+ identity: FeishuIdentitySchema
21783
+ });
21784
+ var AuthLoginFailedEventSchema = external_exports.object({
21785
+ type: external_exports.literal("auth:login:failed"),
21786
+ environment: DeployEnvironmentSchema.optional(),
21787
+ reason: external_exports.string()
21788
+ });
21789
+
21591
21790
  // ../protocol/src/contact-remote-access.ts
21592
21791
  var ContactSetRemoteAccessArgsSchema = external_exports.object({
21593
21792
  deviceId: external_exports.string().min(1),
@@ -21705,95 +21904,6 @@ var ContactPinnedFrameSchema = external_exports.object({
21705
21904
  pinnedAt: external_exports.number().int().nullable()
21706
21905
  }).strict();
21707
21906
 
21708
- // ../protocol/src/feishu-auth.ts
21709
- var DeviceEntrySchema = external_exports.object({
21710
- /**
21711
- * 设备标识(决策 #15:daemon 本地生成的 dev-<uuid>,与人的身份 unionId 无关)。
21712
- * 中心 server clawd_devices 注册表仅作服务发现(url 下发 + 目录),不在安全路径上。
21713
- */
21714
- deviceId: external_exports.string().min(1),
21715
- name: external_exports.string().min(1),
21716
- url: external_exports.string().min(1)
21717
- });
21718
- var DeviceListResponseSchema = external_exports.object({
21719
- type: external_exports.literal("device:list:ok"),
21720
- devices: external_exports.array(DeviceEntrySchema)
21721
- });
21722
- var DeviceConnectArgsSchema = external_exports.object({
21723
- deviceId: external_exports.string().min(1),
21724
- /**
21725
- * 目标设备的 ws/tunnel 地址(可选):
21726
- * - 公开目录点击:带 url(device:list 已下发,省一次 server 查询)
21727
- * - 凭 deviceId 连接:缺省 url → daemon exchange 时由中心 server 下发该设备上报的 url
21728
- * - 注册表不在安全路径上:知道对方 url 时显式传入即可连接(不依赖中心 server 服务发现)
21729
- */
21730
- url: external_exports.string().min(1).optional(),
21731
- /** Optional display name; otherwise populate it from the handshake acknowledgement. */
21732
- name: external_exports.string().optional()
21733
- });
21734
- var DeviceConnectResponseSchema = external_exports.object({
21735
- type: external_exports.literal("device:connect:ok"),
21736
- deviceId: external_exports.string(),
21737
- name: external_exports.string(),
21738
- url: external_exports.string()
21739
- });
21740
- var FeishuIdentitySchema = external_exports.object({
21741
- /** 归属人 id(决策 #16:TTC unique_id,取代飞书 union_id;跨登录方式稳定) */
21742
- ownerId: external_exports.string().min(1),
21743
- /** 身份来源:'ttc'(飞书/手机/邮箱登入 TTC)| 'google' | ...(决策 #16,拓展用) */
21744
- provider: external_exports.string().min(1),
21745
- displayName: external_exports.string().min(1),
21746
- /** TTC user_info 接口 data.avatar_url,可缺省 */
21747
- avatarUrl: external_exports.string().optional(),
21748
- /** TTC user_info 接口 data.union_id(飞书 union_id;dataclaw 可信入口 X-User-UnionId 用),可缺省 */
21749
- unionId: external_exports.string().optional()
21750
- });
21751
- var AuthLoginStartResponseSchema = external_exports.object({
21752
- type: external_exports.literal("auth:login:start:ok"),
21753
- authUrl: external_exports.string().min(1),
21754
- /** 防 CSRF 的一次性 nonce;回调时 daemon 校验 */
21755
- state: external_exports.string().min(1)
21756
- });
21757
- var AuthGetIdentityResponseSchema = external_exports.object({
21758
- type: external_exports.literal("auth:getIdentity:ok"),
21759
- /** null = 未登录 */
21760
- identity: FeishuIdentitySchema.nullable(),
21761
- /** Stable device identifier independent of login, used for the shareable device link. */
21762
- deviceId: external_exports.string().min(1)
21763
- });
21764
- var AuthLogoutResponseSchema = external_exports.object({
21765
- type: external_exports.literal("auth:logout:ok")
21766
- });
21767
- var GatewayUrl = external_exports.string().nullable();
21768
- var AuthApiKeyGetResponseSchema = external_exports.object({
21769
- type: external_exports.literal("auth:apiKey:get:ok"),
21770
- /** null = 还没发过。**发过就能一直看到** —— 中心存的是明文,设置页据此展示 */
21771
- apiKey: external_exports.string().nullable(),
21772
- /** ISO 时间;apiKey 为 null 时同为 null */
21773
- createdAt: external_exports.string().nullable(),
21774
- gatewayUrl: GatewayUrl
21775
- });
21776
- var AuthApiKeyRegenerateResponseSchema = external_exports.object({
21777
- type: external_exports.literal("auth:apiKey:regenerate:ok"),
21778
- /** 新发的那把。**旧的当场失效** —— 一人一把,按 union_id 覆盖 */
21779
- apiKey: external_exports.string().min(1),
21780
- createdAt: external_exports.string().min(1),
21781
- gatewayUrl: GatewayUrl
21782
- });
21783
- var AuthApiKeyRevokeResponseSchema = external_exports.object({
21784
- type: external_exports.literal("auth:apiKey:revoke:ok"),
21785
- /** 之前有没有那把——没发过也算成功(幂等) */
21786
- revoked: external_exports.boolean()
21787
- });
21788
- var AuthLoginDoneEventSchema = external_exports.object({
21789
- type: external_exports.literal("auth:login:done"),
21790
- identity: FeishuIdentitySchema
21791
- });
21792
- var AuthLoginFailedEventSchema = external_exports.object({
21793
- type: external_exports.literal("auth:login:failed"),
21794
- reason: external_exports.string()
21795
- });
21796
-
21797
21907
  // ../protocol/src/dispatch.ts
21798
21908
  var DispatchOutcomeSchema = external_exports.discriminatedUnion("kind", [
21799
21909
  external_exports.object({
@@ -22597,7 +22707,14 @@ var PersonaFileSchema = external_exports.object({
22597
22707
  createdAt: external_exports.number(),
22598
22708
  updatedAt: external_exports.number(),
22599
22709
  /** Registry-only cloud entry, with no local persona directory. Local key adds -cloud; gateway paths use cloud.personaId and the registered engine determines the cloud tool id. */
22600
- cloud: external_exports.object({ gatewayUrl: external_exports.string().min(1), personaId: external_exports.string().min(1), publishedByMe: external_exports.boolean().optional() }).strict().optional()
22710
+ cloud: external_exports.object({
22711
+ gatewayUrl: external_exports.string().min(1),
22712
+ personaId: external_exports.string().min(1),
22713
+ publishedByMe: external_exports.boolean().optional(),
22714
+ environment: DeployEnvironmentSchema.optional(),
22715
+ expectedImage: ImageDigestSchema.optional(),
22716
+ testReleaseId: external_exports.string().optional()
22717
+ }).strict().optional()
22601
22718
  }).strict();
22602
22719
  var PersonaSkillSummarySchema = external_exports.object({
22603
22720
  // 目录名作为 skill name(对齐 CC:frontmatter `name:` 仅作 displayName 用)
@@ -22831,6 +22948,9 @@ var AllowRuleSchema = external_exports.object({
22831
22948
  createdAt: external_exports.string().min(1).optional()
22832
22949
  });
22833
22950
  var SessionFileSchema = external_exports.object({
22951
+ cloudEnvironment: DeployEnvironmentSchema.optional(),
22952
+ cloudExpectedImage: ImageDigestSchema.optional(),
22953
+ testReleaseId: external_exports.string().optional(),
22834
22954
  sessionId: external_exports.string().min(1),
22835
22955
  /** New gateway execution identity after session:new; defaults to sessionId for the first execution. */
22836
22956
  cloudExecutionId: external_exports.string().min(1).optional(),
@@ -23707,9 +23827,21 @@ var METHOD_DOCS = {
23707
23827
  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",
23708
23828
  args: DeployRerunJobArgsSchema
23709
23829
  },
23830
+ "deploy:confirmTest": {
23831
+ summary: "\u786E\u8BA4\u6240\u9009\u6D4B\u8BD5\u7248\u901A\u8FC7\u5B9E\u9645\u8BD5\u7528\uFF1B\u6309\u5DF2\u4FDD\u5B58\u5236\u54C1\u548C\u6D4B\u8BD5\u767B\u8BB0\u6821\u9A8C\uFF0Cowner-only\u3001human-only",
23832
+ args: DeployConfirmTestArgsSchema
23833
+ },
23834
+ "deploy:promote": {
23835
+ summary: "\u5C06\u5DF2\u786E\u8BA4\u6D4B\u8BD5\u7248\u7684\u63D0\u4EA4\u63A8\u8FDB main \u5E76\u4E0A\u7EBF\u76F8\u540C\u955C\u50CF\uFF1B\u6062\u590D\u4E2D\u65AD\u7684\u540C\u4E00\u6B21\u664B\u7EA7\uFF0Cowner-only\u3001human-only",
23836
+ args: DeployPromoteArgsSchema
23837
+ },
23838
+ "deploy:openTest": {
23839
+ summary: "\u51C6\u5907\u5F53\u524D\u6D4B\u8BD5\u7248\u7684\u4E91 Persona \u4F1A\u8BDD\u5165\u53E3\uFF0C\u9501\u5B9A\u73AF\u5883\u548C\u5DF2\u6D4B\u955C\u50CF\uFF0Cowner-only\u3001human-only",
23840
+ args: DeployOpenTestArgsSchema
23841
+ },
23710
23842
  "deploy:unpublish": {
23711
23843
  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",
23712
- args: DeployPersonaArgsSchema
23844
+ args: DeployEnvironmentArgsSchema
23713
23845
  },
23714
23846
  "githubAuth:get": {
23715
23847
  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",
@@ -24131,7 +24263,7 @@ var METHOD_DOCS = {
24131
24263
  },
24132
24264
  "auth:login:start": {
24133
24265
  summary: "\u8D77\u98DE\u4E66\u767B\u5F55\u6D41\u7A0B\uFF1A\u751F\u6210 state \u5E76\u8FD4\u56DE\u6388\u6743 URL\uFF0C\u56DE\u8C03\u8D70 HTTP /auth/callback \u843D\u76D8\u3002owner-only",
24134
- args: NO_ARGS
24266
+ args: AuthEnvironmentArgsSchema
24135
24267
  },
24136
24268
  "auth:getIdentity": {
24137
24269
  summary: "\u53D6\u672C\u673A owner \u7684\u98DE\u4E66\u8EAB\u4EFD\uFF08ownerId / provider / displayName / unionId\uFF09+ **\u672C\u673A deviceId**\uFF08\u8BBE\u5907\u5C5E\u6027\uFF0C\u4E0E\u767B\u5F55\u6001\u65E0\u5173\uFF1Bdevice:connect / contact:* / inbox:* \u7684\u4E3B\u952E\u90FD\u662F\u5B83\uFF09\uFF1B\u7EDD\u4E0D\u8FD4\u56DE\u767B\u5F55\u7968",
@@ -24143,15 +24275,15 @@ var METHOD_DOCS = {
24143
24275
  },
24144
24276
  "auth:apiKey:get": {
24145
24277
  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",
24146
- args: NO_ARGS
24278
+ args: AuthEnvironmentArgsSchema
24147
24279
  },
24148
24280
  "auth:apiKey:regenerate": {
24149
24281
  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",
24150
- args: NO_ARGS
24282
+ args: AuthEnvironmentArgsSchema
24151
24283
  },
24152
24284
  "auth:apiKey:revoke": {
24153
24285
  summary: "\u64A4\u9500\u81EA\u5DF1\u7684\u4E91 persona \u8C03\u7528 key\uFF1A\u4E2D\u5FC3\u5220\u6389\u90A3\u4E00\u884C\u3001**\u4E0D\u53D1\u65B0\u7684**\u3002gateway \u53EA\u5728\u5F00\u4F1A\u8BDD\u548C\u6BCF\u6B21\u4E0A\u884C\u65F6\u9A8C key\uFF0C\u6240\u4EE5\u5F00\u7740\u7684\u4E91\u4F1A\u8BDD\u4E0B\u4E00\u6761\u6D88\u606F\u624D\u53D1\u4E0D\u51FA\u53BB\u3001\u6B63\u5728\u8DD1\u7684\u90A3\u4E00\u8F6E\u4F1A\u8DD1\u5B8C\u3002\u6CA1\u53D1\u8FC7\u4E5F\u56DE ok\uFF08revoked:false\uFF09\u3002owner-only",
24154
- args: NO_ARGS
24286
+ args: AuthEnvironmentArgsSchema
24155
24287
  },
24156
24288
  "device:list": {
24157
24289
  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",