@clawos-dev/clawd 0.2.666 → 0.2.668
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 +192 -157
- package/dist/cli.cjs +322 -195
- package/dist/cloud-persona-conversations.html +71 -71
- package/dist/dispatch/mcp-server.cjs +174 -154
- package/dist/persona-defaults/persona-app-builder/mcp/clawd-app-builder/mcp-server.cjs +192 -157
- package/dist/persona-defaults/persona-dataclaw-builder/mcp/clawd-app-builder/mcp-server.cjs +192 -157
- package/dist/share-ui/assets/{guest-B7AqtMdc.js → guest-DrCklp9W.js} +135 -135
- package/dist/share-ui/guest.html +1 -1
- package/package.json +1 -1
|
@@ -31386,6 +31386,14 @@ var VerificationSchema = external_exports.object({
|
|
|
31386
31386
|
verifiedAt: external_exports.string().refine((s) => Number.isFinite(Date.parse(s))),
|
|
31387
31387
|
test: PublisherTestReceiptSchema.optional()
|
|
31388
31388
|
}).strict();
|
|
31389
|
+
var DeployConfigSchema = external_exports.object({
|
|
31390
|
+
engine: external_exports.string().min(1),
|
|
31391
|
+
model: external_exports.string(),
|
|
31392
|
+
effort: external_exports.string(),
|
|
31393
|
+
size: external_exports.string().min(1),
|
|
31394
|
+
cpu: external_exports.number().positive(),
|
|
31395
|
+
taskConcurrency: external_exports.number().int().positive()
|
|
31396
|
+
}).strict();
|
|
31389
31397
|
var VerifiedPersonaReleaseSchema = external_exports.object({
|
|
31390
31398
|
version: external_exports.literal(1),
|
|
31391
31399
|
environment: external_exports.literal("integration"),
|
|
@@ -31395,6 +31403,7 @@ var VerifiedPersonaReleaseSchema = external_exports.object({
|
|
|
31395
31403
|
baseImage: ImageDigestSchema,
|
|
31396
31404
|
pipelineCommit: SourceCommitSchema,
|
|
31397
31405
|
repository: external_exports.string().regex(/^[A-Za-z0-9_.-]+\/[A-Za-z0-9_.-]+$/),
|
|
31406
|
+
config: DeployConfigSchema.optional(),
|
|
31398
31407
|
verification: VerificationSchema.refine((v) => v.checks.includes("persona-smoke")),
|
|
31399
31408
|
test: PublisherTestSchema.optional()
|
|
31400
31409
|
}).strict().refine((record2) => {
|
|
@@ -31411,6 +31420,160 @@ var VerifiedBaseReleaseSchema = external_exports.object({
|
|
|
31411
31420
|
verification: VerificationSchema.refine((v) => v.checks.includes("base-smoke"))
|
|
31412
31421
|
}).strict();
|
|
31413
31422
|
|
|
31423
|
+
// ../protocol/src/tool-family.ts
|
|
31424
|
+
var CLOUD_TOOL_SUFFIX = "-cloud";
|
|
31425
|
+
var CODEX_CLOUD_TOOL_ID = `codex${CLOUD_TOOL_SUFFIX}`;
|
|
31426
|
+
var CODEX_SERVICE_TIERS = { standard: "default", fast: "priority" };
|
|
31427
|
+
var CLAUDE_CLOUD_TOOL_ID = `claude${CLOUD_TOOL_SUFFIX}`;
|
|
31428
|
+
var PI_TOOL_ID = "pi";
|
|
31429
|
+
var PI_CLOUD_TOOL_ID = `${PI_TOOL_ID}${CLOUD_TOOL_SUFFIX}`;
|
|
31430
|
+
|
|
31431
|
+
// ../protocol/src/persona-schemas.ts
|
|
31432
|
+
var CodexServiceTierSchema = external_exports.enum([CODEX_SERVICE_TIERS.standard, CODEX_SERVICE_TIERS.fast]);
|
|
31433
|
+
var PERSONA_SIZES = ["tiny", "small", "medium", "large", "xlarge"];
|
|
31434
|
+
var PersonaSizeSchema = external_exports.enum(PERSONA_SIZES);
|
|
31435
|
+
var PERSONA_CPUS = [0.5, 1, 2];
|
|
31436
|
+
var PersonaCpuSchema = external_exports.number().refine((cpu) => PERSONA_CPUS.includes(cpu), "Unsupported CPU");
|
|
31437
|
+
var PersonaCloudEngineSchema = external_exports.object({
|
|
31438
|
+
model: external_exports.string().optional(),
|
|
31439
|
+
effort: external_exports.string().optional()
|
|
31440
|
+
}).strict();
|
|
31441
|
+
var PersonaFileSchema = external_exports.object({
|
|
31442
|
+
personaId: external_exports.string(),
|
|
31443
|
+
label: external_exports.string(),
|
|
31444
|
+
model: external_exports.string().optional(),
|
|
31445
|
+
// 与 model 平行的第二个 session 默认值:reasoning effort。值域跟着 tool 走
|
|
31446
|
+
// (claude 是 '' | low | medium | high | xhigh | max,codex 是 per-model 档位),
|
|
31447
|
+
// 协议层保持 string,由消费侧按 capabilities 收窄。
|
|
31448
|
+
effort: external_exports.string().optional(),
|
|
31449
|
+
serviceTier: CodexServiceTierSchema.optional(),
|
|
31450
|
+
public: external_exports.boolean(),
|
|
31451
|
+
// 8-key set defined UI-side in `lib/session-icons.ts`; protocol stays plain string
|
|
31452
|
+
// for forward compatibility, consumer fallbacks to default when key not found.
|
|
31453
|
+
iconKey: external_exports.string().optional(),
|
|
31454
|
+
// Default engine binding for new sessions; missing values are consumed as claude.
|
|
31455
|
+
tool: external_exports.string().optional(),
|
|
31456
|
+
/** Cloud resource size is string-compatible in stored files and narrowed at update/deploy boundaries; local execution ignores it. */
|
|
31457
|
+
size: external_exports.string().optional(),
|
|
31458
|
+
cpu: external_exports.number().finite().optional(),
|
|
31459
|
+
/** Cloud task-Pod concurrency, validated at release. Local execution ignores it; changes apply on the next publication. */
|
|
31460
|
+
taskConcurrency: external_exports.number().int().positive().optional(),
|
|
31461
|
+
cloudEngine: PersonaCloudEngineSchema.optional(),
|
|
31462
|
+
createdAt: external_exports.number(),
|
|
31463
|
+
updatedAt: external_exports.number(),
|
|
31464
|
+
/** 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. */
|
|
31465
|
+
cloud: external_exports.object({
|
|
31466
|
+
gatewayUrl: external_exports.string().min(1),
|
|
31467
|
+
personaId: external_exports.string().min(1),
|
|
31468
|
+
publishedByMe: external_exports.boolean().optional(),
|
|
31469
|
+
environment: DeployEnvironmentSchema.optional(),
|
|
31470
|
+
expectedImage: ImageDigestSchema.optional(),
|
|
31471
|
+
testReleaseId: external_exports.string().optional()
|
|
31472
|
+
}).strict().optional()
|
|
31473
|
+
}).strict();
|
|
31474
|
+
var PersonaSkillSummarySchema = external_exports.object({
|
|
31475
|
+
// 目录名作为 skill name(对齐 CC:frontmatter `name:` 仅作 displayName 用)
|
|
31476
|
+
name: external_exports.string().min(1),
|
|
31477
|
+
description: external_exports.string().optional()
|
|
31478
|
+
});
|
|
31479
|
+
var PersonaPluginSummarySchema = external_exports.object({
|
|
31480
|
+
id: external_exports.string().min(1)
|
|
31481
|
+
});
|
|
31482
|
+
var CodexSandboxSettingsSchema = external_exports.object({
|
|
31483
|
+
// 额外可写的绝对路径或 ~ 路径(pnpm 工具链等);workspace(cwd) 和 userWorkDir 由 daemon 自动加,不用列。
|
|
31484
|
+
writableRoots: external_exports.array(external_exports.string()).optional(),
|
|
31485
|
+
// 禁读 glob(相对 workspace root 或绝对),如 ".secrets/**"、"**/*.env"。
|
|
31486
|
+
denyRead: external_exports.array(external_exports.string()).optional(),
|
|
31487
|
+
// true → 网络全放(*);false / 缺省 → 断网(fail-closed)。**「新建默认联网」不靠这里的缺省**,
|
|
31488
|
+
// 靠 persona 创建时就把 CODEX_SANDBOX_DEFAULT 物化进文件(见 PersonaManager.create)——
|
|
31489
|
+
// 缺省只在文件损坏这种异常路径上出现,那时断网是更安全的一侧。
|
|
31490
|
+
network: external_exports.boolean().optional()
|
|
31491
|
+
}).strict();
|
|
31492
|
+
var PersonaSandboxSettingsSchema = external_exports.object({
|
|
31493
|
+
permissions: external_exports.object({
|
|
31494
|
+
defaultMode: external_exports.string().optional(),
|
|
31495
|
+
allow: external_exports.array(external_exports.string()).optional(),
|
|
31496
|
+
// deny 优先级最高;强制底座(persona 私密区)由 daemon compose 强制 union,owner 删不掉。
|
|
31497
|
+
deny: external_exports.array(external_exports.string()).optional()
|
|
31498
|
+
}).optional(),
|
|
31499
|
+
sandbox: external_exports.object({
|
|
31500
|
+
enabled: external_exports.boolean().optional(),
|
|
31501
|
+
autoAllowBashIfSandboxed: external_exports.boolean().optional(),
|
|
31502
|
+
allowUnsandboxedCommands: external_exports.boolean().optional(),
|
|
31503
|
+
// 命令前缀白名单(CC `sandbox.excludedCommands`):匹配的命令在沙箱外运行,
|
|
31504
|
+
// 用于需逃出沙箱的工具(如 'docker *' / 'aliyun *' 要访问宿主 socket / 凭证)。
|
|
31505
|
+
excludedCommands: external_exports.array(external_exports.string()).optional(),
|
|
31506
|
+
filesystem: external_exports.object({
|
|
31507
|
+
denyRead: external_exports.array(external_exports.string()).optional(),
|
|
31508
|
+
allowRead: external_exports.array(external_exports.string()).optional(),
|
|
31509
|
+
denyWrite: external_exports.array(external_exports.string()).optional(),
|
|
31510
|
+
allowWrite: external_exports.array(external_exports.string()).optional()
|
|
31511
|
+
}).optional(),
|
|
31512
|
+
network: external_exports.object({
|
|
31513
|
+
allowedDomains: external_exports.array(external_exports.string()).optional(),
|
|
31514
|
+
allowLocalBinding: external_exports.boolean().optional()
|
|
31515
|
+
}).optional()
|
|
31516
|
+
}).optional()
|
|
31517
|
+
});
|
|
31518
|
+
var PersonaInfoResponseSchema = PersonaFileSchema.extend({
|
|
31519
|
+
// 人格 builtin 层:`<personaDir>/CLAUDE.md`(= AGENTS.md 镜像)。预装 persona 的这份是
|
|
31520
|
+
// daemon ship 的产品规格,每次 daemon 启动被覆盖回 bundle 版(personalityManaged 标记它)。
|
|
31521
|
+
personality: external_exports.string().optional(),
|
|
31522
|
+
// Owner-managed personality overlay survives daemon resource refreshes and is injected for owner and guest sessions. Empty text clears it.
|
|
31523
|
+
personalityLocal: external_exports.string().optional(),
|
|
31524
|
+
// Managed builtin personality is refreshed by daemon and shown read-only; user edits belong to the overlay. User-created persona files remain editable.
|
|
31525
|
+
personalityManaged: external_exports.boolean().optional(),
|
|
31526
|
+
// 仅 'persona:get' 携带;null = 文件不存在 / parse 失败;undefined = 不在该响应类型上
|
|
31527
|
+
skills: external_exports.array(PersonaSkillSummarySchema).optional(),
|
|
31528
|
+
// 仅 'persona:get' 携带;空数组 = 没启用任何插件 / settings.json 不存在;undefined = 不在该响应类型上
|
|
31529
|
+
plugins: external_exports.array(PersonaPluginSummarySchema).optional(),
|
|
31530
|
+
sandboxSettings: PersonaSandboxSettingsSchema.nullable().optional(),
|
|
31531
|
+
// 仅 'persona:get' 携带;null = codex-sandbox.json 不存在 / parse 失败。
|
|
31532
|
+
// UI 的「访客联网」开关读它(见 PersonaCardSettings)。
|
|
31533
|
+
codexSandbox: CodexSandboxSettingsSchema.nullable().optional()
|
|
31534
|
+
});
|
|
31535
|
+
var PersonaCreateArgsSchema = external_exports.object({
|
|
31536
|
+
// Caller provides a safe slug, daemon adds persona-. Keep identity separate from the freely editable display label.
|
|
31537
|
+
slug: external_exports.string().regex(/^[a-z0-9]+(-[a-z0-9]+)*$/).max(32),
|
|
31538
|
+
label: external_exports.string().min(1),
|
|
31539
|
+
personality: external_exports.string(),
|
|
31540
|
+
model: external_exports.string().optional(),
|
|
31541
|
+
effort: external_exports.string().optional(),
|
|
31542
|
+
serviceTier: PersonaFileSchema.shape.serviceTier,
|
|
31543
|
+
tool: external_exports.string().optional(),
|
|
31544
|
+
public: external_exports.boolean().optional(),
|
|
31545
|
+
iconKey: external_exports.string().optional()
|
|
31546
|
+
}).strict();
|
|
31547
|
+
var PersonaIdArgsSchema = external_exports.object({
|
|
31548
|
+
personaId: external_exports.string().min(1)
|
|
31549
|
+
});
|
|
31550
|
+
var PersonaUpdateArgsSchema = external_exports.object({
|
|
31551
|
+
personaId: external_exports.string().min(1),
|
|
31552
|
+
patch: external_exports.object({
|
|
31553
|
+
label: external_exports.string().min(1).optional(),
|
|
31554
|
+
model: external_exports.string().optional(),
|
|
31555
|
+
effort: external_exports.string().optional(),
|
|
31556
|
+
serviceTier: PersonaFileSchema.shape.serviceTier,
|
|
31557
|
+
tool: external_exports.string().optional(),
|
|
31558
|
+
size: PersonaSizeSchema.optional(),
|
|
31559
|
+
cpu: PersonaCpuSchema.optional(),
|
|
31560
|
+
taskConcurrency: PersonaFileSchema.shape.taskConcurrency,
|
|
31561
|
+
// 整体替换(上云页每次交完整的 { model, effort });切 tool 不清它
|
|
31562
|
+
cloudEngine: PersonaCloudEngineSchema.optional(),
|
|
31563
|
+
personality: external_exports.string().optional(),
|
|
31564
|
+
// 人格补充层正文(见 PersonaInfoResponseSchema.personalityLocal)。与 personality 各写
|
|
31565
|
+
// 各层、互不影响;'' = 清空补充层。预装 persona 的编辑入口写的就是这个字段。
|
|
31566
|
+
personalityLocal: external_exports.string().optional(),
|
|
31567
|
+
public: external_exports.boolean().optional(),
|
|
31568
|
+
// pass `null` to clear; daemon strips the field from PersonaFile on null
|
|
31569
|
+
iconKey: external_exports.string().nullable().optional(),
|
|
31570
|
+
// codex guest 沙箱(落盘 .clawd/codex-sandbox.json,不在 PersonaFile 里)。与 personality
|
|
31571
|
+
// 同款分层写:handler 剥出来单独落盘,且**局部合并**——只带 network 的 patch 不能抹掉
|
|
31572
|
+
// owner 手配的 writableRoots / denyRead。
|
|
31573
|
+
codexSandbox: CodexSandboxSettingsSchema.optional()
|
|
31574
|
+
}).strict()
|
|
31575
|
+
}).strict();
|
|
31576
|
+
|
|
31414
31577
|
// ../protocol/src/deploy-schemas.ts
|
|
31415
31578
|
var DeployFileSchema = external_exports.object({
|
|
31416
31579
|
version: external_exports.literal(1),
|
|
@@ -31452,6 +31615,12 @@ var DeployReleasedSchema = external_exports.object({
|
|
|
31452
31615
|
runAttempt: external_exports.number().int().positive().optional(),
|
|
31453
31616
|
artifactId: external_exports.number().int().positive().optional(),
|
|
31454
31617
|
verified: VerifiedPersonaReleaseSchema.optional(),
|
|
31618
|
+
/** 这一轮测试用的配置(design 2026-10-14-deploy-config-decouple §3.1);老记录没有,按「发布时 commit 里的 persona.json」算 */
|
|
31619
|
+
config: DeployConfigSchema.optional(),
|
|
31620
|
+
/** 「应用配置」产生的记录:复用的是哪条测试发布的镜像(它的 id)。首次构建的记录没有 */
|
|
31621
|
+
reconfigOf: external_exports.string().min(1).optional(),
|
|
31622
|
+
/** 发布时写进仓库的 workflow 模板版本;缺 = 老模板(不认 config_json 输入,要先完整重发一次) */
|
|
31623
|
+
workflowVersion: external_exports.number().int().positive().optional(),
|
|
31455
31624
|
confirmation: external_exports.object({
|
|
31456
31625
|
fingerprint: external_exports.string().regex(/^[a-f0-9]{64}$/),
|
|
31457
31626
|
runId: external_exports.number().int().positive(),
|
|
@@ -31621,6 +31790,7 @@ var DeployReleaseArgsSchema = DeployPersonaArgsSchema.extend({
|
|
|
31621
31790
|
}).strict();
|
|
31622
31791
|
var DeployConfirmTestArgsSchema = DeployPersonaArgsSchema.extend({ releaseId: external_exports.string().min(1) }).strict();
|
|
31623
31792
|
var DeployPromoteArgsSchema = DeployConfirmTestArgsSchema;
|
|
31793
|
+
var DeployApplyConfigArgsSchema = DeployConfirmTestArgsSchema;
|
|
31624
31794
|
var DeployOpenTestArgsSchema = DeployConfirmTestArgsSchema;
|
|
31625
31795
|
var DeployEnvironmentArgsSchema = DeployPersonaArgsSchema.extend({ environment: DeployEnvironmentSchema.default("production") }).strict();
|
|
31626
31796
|
var DeployConfirmTestResultSchema = external_exports.object({ confirmation: DeployReleasedSchema.shape.confirmation.unwrap() }).strict();
|
|
@@ -32670,160 +32840,6 @@ var DashboardOpenUrlResultSchema = external_exports.object({
|
|
|
32670
32840
|
expiresAt: external_exports.number().int()
|
|
32671
32841
|
}).strict();
|
|
32672
32842
|
|
|
32673
|
-
// ../protocol/src/tool-family.ts
|
|
32674
|
-
var CLOUD_TOOL_SUFFIX = "-cloud";
|
|
32675
|
-
var CODEX_CLOUD_TOOL_ID = `codex${CLOUD_TOOL_SUFFIX}`;
|
|
32676
|
-
var CODEX_SERVICE_TIERS = { standard: "default", fast: "priority" };
|
|
32677
|
-
var CLAUDE_CLOUD_TOOL_ID = `claude${CLOUD_TOOL_SUFFIX}`;
|
|
32678
|
-
var PI_TOOL_ID = "pi";
|
|
32679
|
-
var PI_CLOUD_TOOL_ID = `${PI_TOOL_ID}${CLOUD_TOOL_SUFFIX}`;
|
|
32680
|
-
|
|
32681
|
-
// ../protocol/src/persona-schemas.ts
|
|
32682
|
-
var CodexServiceTierSchema = external_exports.enum([CODEX_SERVICE_TIERS.standard, CODEX_SERVICE_TIERS.fast]);
|
|
32683
|
-
var PERSONA_SIZES = ["tiny", "small", "medium", "large", "xlarge"];
|
|
32684
|
-
var PersonaSizeSchema = external_exports.enum(PERSONA_SIZES);
|
|
32685
|
-
var PERSONA_CPUS = [0.5, 1, 2];
|
|
32686
|
-
var PersonaCpuSchema = external_exports.number().refine((cpu) => PERSONA_CPUS.includes(cpu), "Unsupported CPU");
|
|
32687
|
-
var PersonaCloudEngineSchema = external_exports.object({
|
|
32688
|
-
model: external_exports.string().optional(),
|
|
32689
|
-
effort: external_exports.string().optional()
|
|
32690
|
-
}).strict();
|
|
32691
|
-
var PersonaFileSchema = external_exports.object({
|
|
32692
|
-
personaId: external_exports.string(),
|
|
32693
|
-
label: external_exports.string(),
|
|
32694
|
-
model: external_exports.string().optional(),
|
|
32695
|
-
// 与 model 平行的第二个 session 默认值:reasoning effort。值域跟着 tool 走
|
|
32696
|
-
// (claude 是 '' | low | medium | high | xhigh | max,codex 是 per-model 档位),
|
|
32697
|
-
// 协议层保持 string,由消费侧按 capabilities 收窄。
|
|
32698
|
-
effort: external_exports.string().optional(),
|
|
32699
|
-
serviceTier: CodexServiceTierSchema.optional(),
|
|
32700
|
-
public: external_exports.boolean(),
|
|
32701
|
-
// 8-key set defined UI-side in `lib/session-icons.ts`; protocol stays plain string
|
|
32702
|
-
// for forward compatibility, consumer fallbacks to default when key not found.
|
|
32703
|
-
iconKey: external_exports.string().optional(),
|
|
32704
|
-
// Default engine binding for new sessions; missing values are consumed as claude.
|
|
32705
|
-
tool: external_exports.string().optional(),
|
|
32706
|
-
/** Cloud resource size is string-compatible in stored files and narrowed at update/deploy boundaries; local execution ignores it. */
|
|
32707
|
-
size: external_exports.string().optional(),
|
|
32708
|
-
cpu: external_exports.number().finite().optional(),
|
|
32709
|
-
/** Cloud task-Pod concurrency, validated at release. Local execution ignores it; changes apply on the next publication. */
|
|
32710
|
-
taskConcurrency: external_exports.number().int().positive().optional(),
|
|
32711
|
-
cloudEngine: PersonaCloudEngineSchema.optional(),
|
|
32712
|
-
createdAt: external_exports.number(),
|
|
32713
|
-
updatedAt: external_exports.number(),
|
|
32714
|
-
/** 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. */
|
|
32715
|
-
cloud: external_exports.object({
|
|
32716
|
-
gatewayUrl: external_exports.string().min(1),
|
|
32717
|
-
personaId: external_exports.string().min(1),
|
|
32718
|
-
publishedByMe: external_exports.boolean().optional(),
|
|
32719
|
-
environment: DeployEnvironmentSchema.optional(),
|
|
32720
|
-
expectedImage: ImageDigestSchema.optional(),
|
|
32721
|
-
testReleaseId: external_exports.string().optional()
|
|
32722
|
-
}).strict().optional()
|
|
32723
|
-
}).strict();
|
|
32724
|
-
var PersonaSkillSummarySchema = external_exports.object({
|
|
32725
|
-
// 目录名作为 skill name(对齐 CC:frontmatter `name:` 仅作 displayName 用)
|
|
32726
|
-
name: external_exports.string().min(1),
|
|
32727
|
-
description: external_exports.string().optional()
|
|
32728
|
-
});
|
|
32729
|
-
var PersonaPluginSummarySchema = external_exports.object({
|
|
32730
|
-
id: external_exports.string().min(1)
|
|
32731
|
-
});
|
|
32732
|
-
var CodexSandboxSettingsSchema = external_exports.object({
|
|
32733
|
-
// 额外可写的绝对路径或 ~ 路径(pnpm 工具链等);workspace(cwd) 和 userWorkDir 由 daemon 自动加,不用列。
|
|
32734
|
-
writableRoots: external_exports.array(external_exports.string()).optional(),
|
|
32735
|
-
// 禁读 glob(相对 workspace root 或绝对),如 ".secrets/**"、"**/*.env"。
|
|
32736
|
-
denyRead: external_exports.array(external_exports.string()).optional(),
|
|
32737
|
-
// true → 网络全放(*);false / 缺省 → 断网(fail-closed)。**「新建默认联网」不靠这里的缺省**,
|
|
32738
|
-
// 靠 persona 创建时就把 CODEX_SANDBOX_DEFAULT 物化进文件(见 PersonaManager.create)——
|
|
32739
|
-
// 缺省只在文件损坏这种异常路径上出现,那时断网是更安全的一侧。
|
|
32740
|
-
network: external_exports.boolean().optional()
|
|
32741
|
-
}).strict();
|
|
32742
|
-
var PersonaSandboxSettingsSchema = external_exports.object({
|
|
32743
|
-
permissions: external_exports.object({
|
|
32744
|
-
defaultMode: external_exports.string().optional(),
|
|
32745
|
-
allow: external_exports.array(external_exports.string()).optional(),
|
|
32746
|
-
// deny 优先级最高;强制底座(persona 私密区)由 daemon compose 强制 union,owner 删不掉。
|
|
32747
|
-
deny: external_exports.array(external_exports.string()).optional()
|
|
32748
|
-
}).optional(),
|
|
32749
|
-
sandbox: external_exports.object({
|
|
32750
|
-
enabled: external_exports.boolean().optional(),
|
|
32751
|
-
autoAllowBashIfSandboxed: external_exports.boolean().optional(),
|
|
32752
|
-
allowUnsandboxedCommands: external_exports.boolean().optional(),
|
|
32753
|
-
// 命令前缀白名单(CC `sandbox.excludedCommands`):匹配的命令在沙箱外运行,
|
|
32754
|
-
// 用于需逃出沙箱的工具(如 'docker *' / 'aliyun *' 要访问宿主 socket / 凭证)。
|
|
32755
|
-
excludedCommands: external_exports.array(external_exports.string()).optional(),
|
|
32756
|
-
filesystem: external_exports.object({
|
|
32757
|
-
denyRead: external_exports.array(external_exports.string()).optional(),
|
|
32758
|
-
allowRead: external_exports.array(external_exports.string()).optional(),
|
|
32759
|
-
denyWrite: external_exports.array(external_exports.string()).optional(),
|
|
32760
|
-
allowWrite: external_exports.array(external_exports.string()).optional()
|
|
32761
|
-
}).optional(),
|
|
32762
|
-
network: external_exports.object({
|
|
32763
|
-
allowedDomains: external_exports.array(external_exports.string()).optional(),
|
|
32764
|
-
allowLocalBinding: external_exports.boolean().optional()
|
|
32765
|
-
}).optional()
|
|
32766
|
-
}).optional()
|
|
32767
|
-
});
|
|
32768
|
-
var PersonaInfoResponseSchema = PersonaFileSchema.extend({
|
|
32769
|
-
// 人格 builtin 层:`<personaDir>/CLAUDE.md`(= AGENTS.md 镜像)。预装 persona 的这份是
|
|
32770
|
-
// daemon ship 的产品规格,每次 daemon 启动被覆盖回 bundle 版(personalityManaged 标记它)。
|
|
32771
|
-
personality: external_exports.string().optional(),
|
|
32772
|
-
// Owner-managed personality overlay survives daemon resource refreshes and is injected for owner and guest sessions. Empty text clears it.
|
|
32773
|
-
personalityLocal: external_exports.string().optional(),
|
|
32774
|
-
// Managed builtin personality is refreshed by daemon and shown read-only; user edits belong to the overlay. User-created persona files remain editable.
|
|
32775
|
-
personalityManaged: external_exports.boolean().optional(),
|
|
32776
|
-
// 仅 'persona:get' 携带;null = 文件不存在 / parse 失败;undefined = 不在该响应类型上
|
|
32777
|
-
skills: external_exports.array(PersonaSkillSummarySchema).optional(),
|
|
32778
|
-
// 仅 'persona:get' 携带;空数组 = 没启用任何插件 / settings.json 不存在;undefined = 不在该响应类型上
|
|
32779
|
-
plugins: external_exports.array(PersonaPluginSummarySchema).optional(),
|
|
32780
|
-
sandboxSettings: PersonaSandboxSettingsSchema.nullable().optional(),
|
|
32781
|
-
// 仅 'persona:get' 携带;null = codex-sandbox.json 不存在 / parse 失败。
|
|
32782
|
-
// UI 的「访客联网」开关读它(见 PersonaCardSettings)。
|
|
32783
|
-
codexSandbox: CodexSandboxSettingsSchema.nullable().optional()
|
|
32784
|
-
});
|
|
32785
|
-
var PersonaCreateArgsSchema = external_exports.object({
|
|
32786
|
-
// Caller provides a safe slug, daemon adds persona-. Keep identity separate from the freely editable display label.
|
|
32787
|
-
slug: external_exports.string().regex(/^[a-z0-9]+(-[a-z0-9]+)*$/).max(32),
|
|
32788
|
-
label: external_exports.string().min(1),
|
|
32789
|
-
personality: external_exports.string(),
|
|
32790
|
-
model: external_exports.string().optional(),
|
|
32791
|
-
effort: external_exports.string().optional(),
|
|
32792
|
-
serviceTier: PersonaFileSchema.shape.serviceTier,
|
|
32793
|
-
tool: external_exports.string().optional(),
|
|
32794
|
-
public: external_exports.boolean().optional(),
|
|
32795
|
-
iconKey: external_exports.string().optional()
|
|
32796
|
-
}).strict();
|
|
32797
|
-
var PersonaIdArgsSchema = external_exports.object({
|
|
32798
|
-
personaId: external_exports.string().min(1)
|
|
32799
|
-
});
|
|
32800
|
-
var PersonaUpdateArgsSchema = external_exports.object({
|
|
32801
|
-
personaId: external_exports.string().min(1),
|
|
32802
|
-
patch: external_exports.object({
|
|
32803
|
-
label: external_exports.string().min(1).optional(),
|
|
32804
|
-
model: external_exports.string().optional(),
|
|
32805
|
-
effort: external_exports.string().optional(),
|
|
32806
|
-
serviceTier: PersonaFileSchema.shape.serviceTier,
|
|
32807
|
-
tool: external_exports.string().optional(),
|
|
32808
|
-
size: PersonaSizeSchema.optional(),
|
|
32809
|
-
cpu: PersonaCpuSchema.optional(),
|
|
32810
|
-
taskConcurrency: PersonaFileSchema.shape.taskConcurrency,
|
|
32811
|
-
// 整体替换(上云页每次交完整的 { model, effort });切 tool 不清它
|
|
32812
|
-
cloudEngine: PersonaCloudEngineSchema.optional(),
|
|
32813
|
-
personality: external_exports.string().optional(),
|
|
32814
|
-
// 人格补充层正文(见 PersonaInfoResponseSchema.personalityLocal)。与 personality 各写
|
|
32815
|
-
// 各层、互不影响;'' = 清空补充层。预装 persona 的编辑入口写的就是这个字段。
|
|
32816
|
-
personalityLocal: external_exports.string().optional(),
|
|
32817
|
-
public: external_exports.boolean().optional(),
|
|
32818
|
-
// pass `null` to clear; daemon strips the field from PersonaFile on null
|
|
32819
|
-
iconKey: external_exports.string().nullable().optional(),
|
|
32820
|
-
// codex guest 沙箱(落盘 .clawd/codex-sandbox.json,不在 PersonaFile 里)。与 personality
|
|
32821
|
-
// 同款分层写:handler 剥出来单独落盘,且**局部合并**——只带 network 的 patch 不能抹掉
|
|
32822
|
-
// owner 手配的 writableRoots / denyRead。
|
|
32823
|
-
codexSandbox: CodexSandboxSettingsSchema.optional()
|
|
32824
|
-
}).strict()
|
|
32825
|
-
}).strict();
|
|
32826
|
-
|
|
32827
32843
|
// ../protocol/src/events.ts
|
|
32828
32844
|
var SESSION_STATUS_VALUES = [
|
|
32829
32845
|
"idle",
|
|
@@ -33882,6 +33898,10 @@ var METHOD_DOCS = {
|
|
|
33882
33898
|
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",
|
|
33883
33899
|
args: DeployConfirmTestArgsSchema
|
|
33884
33900
|
},
|
|
33901
|
+
"deploy:applyConfig": {
|
|
33902
|
+
summary: "\u628A releaseId \u90A3\u6761\u6D4B\u8BD5\u53D1\u5E03\u7684**\u955C\u50CF**\u6362\u4E0A persona \u5F53\u524D\u7684\u5F15\u64CE / \u6A21\u578B / \u8D44\u6E90\u914D\u7F6E\uFF0C\u5728\u6D4B\u8BD5\u73AF\u5883\u91CD\u6D4B\u4E00\u904D\uFF1A\u4E0D\u626B\u63CF\u3001\u4E0D\u6784\u5EFA\uFF0C\u6D41\u6C34\u7EBF\u8D70 smoke \u2192 \u767B\u8BB0 \u2192 \u9A8C\u8BC1\u3002\u524D\u7F6E\uFF1A\u90A3\u6761\u53D1\u5E03\u5DF2\u63A8\u9001\u5E76\u901A\u8FC7\u9A8C\u8BC1\uFF0C\u4E14\u4ED3\u5E93\u91CC\u7684 workflow \u6A21\u677F\u591F\u65B0\uFF08\u7F3A config_json \u8F93\u5165\u7684\u8981\u5148\u300C\u53D1\u5E03\u5230\u6D4B\u8BD5\u300D\u5B8C\u6574\u91CD\u53D1\u4E00\u6B21\uFF09\uFF1B\u8FC7\u4E0E\u53D1\u5E03\u540C\u4E00\u5957\u95F8\uFF08\u9009\u4E86\u6A21\u578B\u3001\u8BA2\u9605\u51ED\u636E\u6210\u5BF9\u7B49\uFF09\u3002\u56DE\u65B0\u6D4B\u8BD5\u53D1\u5E03\u7684 commit \u4E0E Actions \u5730\u5740\uFF1B\u4E4B\u540E\u8D70\u5E38\u89C4\u7684\u6D4B\u8BD5\u786E\u8BA4 / \u664B\u7EA7\uFF1Bowner-only\u3001human-only",
|
|
33903
|
+
args: DeployApplyConfigArgsSchema
|
|
33904
|
+
},
|
|
33885
33905
|
"deploy:promote": {
|
|
33886
33906
|
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",
|
|
33887
33907
|
args: DeployPromoteArgsSchema
|
|
@@ -34536,6 +34556,7 @@ function renderDeployWorkflow(config2) {
|
|
|
34536
34556
|
" - name: Select pinned source identities",
|
|
34537
34557
|
" env:",
|
|
34538
34558
|
" RELEASE_JSON: ${{ inputs.release_json }}",
|
|
34559
|
+
" CONFIG_JSON: ${{ inputs.config_json }}",
|
|
34539
34560
|
" run: |",
|
|
34540
34561
|
" node --input-type=module <<'NODE'",
|
|
34541
34562
|
' import fs from "node:fs"',
|
|
@@ -34543,7 +34564,9 @@ function renderDeployWorkflow(config2) {
|
|
|
34543
34564
|
' const r = fs.existsSync(file) ? JSON.parse(fs.readFileSync(file, "utf8")) : process.env.RELEASE_JSON ? JSON.parse(process.env.RELEASE_JSON) : undefined',
|
|
34544
34565
|
' if (r && (!/^[a-f0-9]{40}$/.test(r.commit) || !/^[a-f0-9]{40}$/.test(r.pipelineCommit) || r.repository !== process.env.GITHUB_REPOSITORY)) throw new Error("invalid Persona release identity")',
|
|
34545
34566
|
' if (process.env.DEPLOY_ENVIRONMENT === "production" && (!r || process.env.GITHUB_REF_NAME !== "main" || process.env.GITHUB_SHA !== r.commit)) throw new Error("production main must equal tested commit")',
|
|
34546
|
-
|
|
34567
|
+
" // \u5E94\u7528\u914D\u7F6E\uFF08integration + config_json + release_json\uFF0C\u4E14\u8FD8\u6CA1\u6709\u5019\u9009\u6587\u4EF6\uFF09\u8981\u6362\u4E0A\u5F53\u524D\u6D41\u6C34\u7EBF\uFF1A\u8BB0\u5F55\u91CC\u9489\u7684\u65E7\u811A\u672C\u4E0D\u8BA4\u8BC6 config_json",
|
|
34568
|
+
' const reconfigure = process.env.DEPLOY_ENVIRONMENT === "integration" && process.env.CONFIG_JSON && !fs.existsSync(file)',
|
|
34569
|
+
' fs.appendFileSync(process.env.GITHUB_ENV, "SOURCE_COMMIT=" + (r?.commit ?? process.env.GITHUB_SHA) + "\\nPIPELINE_COMMIT=" + (reconfigure ? process.env.CLAWOS_REF : r?.pipelineCommit ?? process.env.CLAWOS_REF) + "\\n")',
|
|
34547
34570
|
" NODE",
|
|
34548
34571
|
""
|
|
34549
34572
|
];
|
|
@@ -34570,6 +34593,8 @@ function renderDeployWorkflow(config2) {
|
|
|
34570
34593
|
"",
|
|
34571
34594
|
" - name: \u8BFB\u90E8\u7F72\u6587\u4EF6",
|
|
34572
34595
|
" id: plan",
|
|
34596
|
+
" env:",
|
|
34597
|
+
" CLAWD_CONFIG_JSON: ${{ inputs.config_json }}",
|
|
34573
34598
|
" run: |",
|
|
34574
34599
|
" node clawos/cloud-host/pipeline/deploy-file.mjs \\",
|
|
34575
34600
|
" --persona-dir persona \\",
|
|
@@ -34634,6 +34659,7 @@ function renderDeployWorkflow(config2) {
|
|
|
34634
34659
|
" --effort '${{ steps.plan.outputs.effort }}' \\",
|
|
34635
34660
|
" --size '${{ steps.plan.outputs.size }}' \\",
|
|
34636
34661
|
" --cpu '${{ steps.plan.outputs.cpu }}' \\",
|
|
34662
|
+
" --config-source '${{ steps.plan.outputs.config_source }}' \\",
|
|
34637
34663
|
" --task-concurrency '${{ steps.plan.outputs.task_concurrency }}' \\",
|
|
34638
34664
|
" --engine '${{ steps.plan.outputs.engine }}' \\",
|
|
34639
34665
|
" --connectors '${{ steps.plan.outputs.connectors }}' \\",
|
|
@@ -34649,7 +34675,7 @@ function renderDeployWorkflow(config2) {
|
|
|
34649
34675
|
];
|
|
34650
34676
|
return [
|
|
34651
34677
|
"name: clawd deploy",
|
|
34652
|
-
"run-name: ${{ inputs.environment == 'production' && format('persona-production-{0}', inputs.promotion_id) || 'persona-integration' }}",
|
|
34678
|
+
"run-name: ${{ inputs.environment == 'production' && format('persona-production-{0}', inputs.promotion_id) || inputs.config_id && format('persona-integration-config-{0}', inputs.config_id) || 'persona-integration' }}",
|
|
34653
34679
|
"# \u7531 clawd \u751F\u6210\u3001\u7531 clawd \u7EF4\u62A4\u3002push \u6784\u5EFA int \u5019\u9009\uFF1Bproduction \u624B\u52A8\u664B\u7EA7\u5DF2\u9A8C\u6536\u5236\u54C1\u3002",
|
|
34654
34680
|
"on:",
|
|
34655
34681
|
" push:",
|
|
@@ -34664,7 +34690,15 @@ function renderDeployWorkflow(config2) {
|
|
|
34664
34690
|
" type: string",
|
|
34665
34691
|
" required: false",
|
|
34666
34692
|
" release_json:",
|
|
34667
|
-
" description: Verified Persona release JSON for production promotion",
|
|
34693
|
+
" description: Verified Persona release JSON for production promotion or config re-test",
|
|
34694
|
+
" type: string",
|
|
34695
|
+
" required: false",
|
|
34696
|
+
" config_json:",
|
|
34697
|
+
" description: Engine/model/resource config (canonical JSON); replaces .clawd/persona.json for this run",
|
|
34698
|
+
" type: string",
|
|
34699
|
+
" required: false",
|
|
34700
|
+
" config_id:",
|
|
34701
|
+
" description: Identifies an integration config re-test run (run-name)",
|
|
34668
34702
|
" type: string",
|
|
34669
34703
|
" required: false",
|
|
34670
34704
|
"",
|
|
@@ -34717,6 +34751,7 @@ function renderDeployWorkflow(config2) {
|
|
|
34717
34751
|
" ALIBABA_CLOUD_ACCESS_KEY_ID: ${{ secrets.ALI_ACS_ACCESS_KEY_ID }}",
|
|
34718
34752
|
" ALIBABA_CLOUD_ACCESS_KEY_SECRET: ${{ secrets.ALI_ACS_ACCESS_KEY_SECRET }}",
|
|
34719
34753
|
" RELEASE_JSON: ${{ inputs.release_json }}",
|
|
34754
|
+
" CLAWD_CONFIG_JSON: ${{ steps.plan.outputs.config_json }}",
|
|
34720
34755
|
" CLAWD_PUBLISHER_TEST: ${{ steps.plan.outputs.test }}",
|
|
34721
34756
|
" run: node clawos/cloud-host/pipeline/persona-candidate.mjs",
|
|
34722
34757
|
"",
|