@clawos-dev/clawd 0.2.570 → 0.2.572
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 +20 -2
- package/dist/cli.cjs +1062 -907
- package/dist/dispatch/mcp-server.cjs +17 -2
- package/dist/persona-defaults/persona-app-builder/mcp/clawd-app-builder/mcp-server.cjs +20 -2
- package/dist/persona-defaults/persona-clawd-butler/.claude/skills/scan-persona-for-deploy/SKILL.md +41 -8
- package/dist/persona-defaults/persona-dataclaw-builder/mcp/clawd-app-builder/mcp-server.cjs +20 -2
- package/dist/share-ui/assets/{guest-mPDtY_hz.js → guest-CRh5Qm47.js} +116 -116
- package/dist/share-ui/guest.html +1 -1
- package/package.json +1 -1
|
@@ -21287,6 +21287,13 @@ var GithubAuthOauthStartArgsSchema = external_exports.object({
|
|
|
21287
21287
|
}).strict();
|
|
21288
21288
|
|
|
21289
21289
|
// ../protocol/src/environment-schemas.ts
|
|
21290
|
+
var EnvArtifactSchema = external_exports.object({
|
|
21291
|
+
url: external_exports.string().url(),
|
|
21292
|
+
// 包内可执行文件的路径(`hbi` / `dist/bin/x`);空串 = 裸二进制
|
|
21293
|
+
bin: external_exports.string(),
|
|
21294
|
+
sha256: external_exports.string().regex(/^[0-9a-f]{64}$/),
|
|
21295
|
+
size: external_exports.number().int().positive()
|
|
21296
|
+
});
|
|
21290
21297
|
var EnvPackageSchema = external_exports.object({
|
|
21291
21298
|
// 装完后在 PATH 里能直接调到的名字('aliyun' / 's' / 'pnpm' / 'python3');npm 包报 bin 名,包名进 from
|
|
21292
21299
|
name: external_exports.string().min(1),
|
|
@@ -21308,7 +21315,7 @@ var EnvPackageSchema = external_exports.object({
|
|
|
21308
21315
|
* ensure-toolchain.sh 的事,云上只构一个镜像、一个基础环境,多给反而要求构建器做选择。
|
|
21309
21316
|
*/
|
|
21310
21317
|
from: external_exports.string().optional(),
|
|
21311
|
-
//
|
|
21318
|
+
// 精确版本;本机探到时 = localVersion(本机是啥就上云啥),本机没装才是扫描器按官方文档填的。缺省 = 不挑版本
|
|
21312
21319
|
version: external_exports.string().optional(),
|
|
21313
21320
|
// 版本下限('20.6' 这种)。与 version 的区别:version 是「就要这个」,min 是「不低于」。
|
|
21314
21321
|
// 两者都缺省即完全不约束。
|
|
@@ -21317,7 +21324,15 @@ var EnvPackageSchema = external_exports.object({
|
|
|
21317
21324
|
* 没有可执行、只是个包(引擎扩展这类:pi 底座里的 cliproxyapi 扩展)。构建器只断言它装上了(npm ls),不查 PATH 上有没有 `name` 这条命令。
|
|
21318
21325
|
* 只有引擎底座清单(cloud-host/engines/<e>/manifest.json)用得到;扫描器不产它。
|
|
21319
21326
|
*/
|
|
21320
|
-
library: external_exports.boolean().optional()
|
|
21327
|
+
library: external_exports.boolean().optional(),
|
|
21328
|
+
/**
|
|
21329
|
+
* 本机探到的版本。daemon 在 deploy:reportFinding 时探登录 shell PATH 上的同名可执行写入,
|
|
21330
|
+
* agent 报了也不算(design 2026-09-22 §3.1)。缺省 = 本机没探到。
|
|
21331
|
+
* 与 version 并存:老板事后在页面上手改 version(显式接受差异)时,version ≠ localVersion 一眼可见。
|
|
21332
|
+
*/
|
|
21333
|
+
localVersion: external_exports.string().optional(),
|
|
21334
|
+
/** `github:` 专用——那个版本是哪个文件。见 EnvArtifactSchema */
|
|
21335
|
+
artifact: EnvArtifactSchema.optional()
|
|
21321
21336
|
});
|
|
21322
21337
|
var EnvSecretSchema = external_exports.object({
|
|
21323
21338
|
// 凭据的命名引用('aliyun-ak' / 'supabase-shared')。部署时按这个名字去解析实际的值。
|
|
@@ -21473,6 +21473,13 @@ var GithubAuthOauthStartArgsSchema = external_exports.object({
|
|
|
21473
21473
|
}).strict();
|
|
21474
21474
|
|
|
21475
21475
|
// ../protocol/src/environment-schemas.ts
|
|
21476
|
+
var EnvArtifactSchema = external_exports.object({
|
|
21477
|
+
url: external_exports.string().url(),
|
|
21478
|
+
// 包内可执行文件的路径(`hbi` / `dist/bin/x`);空串 = 裸二进制
|
|
21479
|
+
bin: external_exports.string(),
|
|
21480
|
+
sha256: external_exports.string().regex(/^[0-9a-f]{64}$/),
|
|
21481
|
+
size: external_exports.number().int().positive()
|
|
21482
|
+
});
|
|
21476
21483
|
var EnvPackageSchema = external_exports.object({
|
|
21477
21484
|
// 装完后在 PATH 里能直接调到的名字('aliyun' / 's' / 'pnpm' / 'python3');npm 包报 bin 名,包名进 from
|
|
21478
21485
|
name: external_exports.string().min(1),
|
|
@@ -21494,7 +21501,7 @@ var EnvPackageSchema = external_exports.object({
|
|
|
21494
21501
|
* ensure-toolchain.sh 的事,云上只构一个镜像、一个基础环境,多给反而要求构建器做选择。
|
|
21495
21502
|
*/
|
|
21496
21503
|
from: external_exports.string().optional(),
|
|
21497
|
-
//
|
|
21504
|
+
// 精确版本;本机探到时 = localVersion(本机是啥就上云啥),本机没装才是扫描器按官方文档填的。缺省 = 不挑版本
|
|
21498
21505
|
version: external_exports.string().optional(),
|
|
21499
21506
|
// 版本下限('20.6' 这种)。与 version 的区别:version 是「就要这个」,min 是「不低于」。
|
|
21500
21507
|
// 两者都缺省即完全不约束。
|
|
@@ -21503,7 +21510,15 @@ var EnvPackageSchema = external_exports.object({
|
|
|
21503
21510
|
* 没有可执行、只是个包(引擎扩展这类:pi 底座里的 cliproxyapi 扩展)。构建器只断言它装上了(npm ls),不查 PATH 上有没有 `name` 这条命令。
|
|
21504
21511
|
* 只有引擎底座清单(cloud-host/engines/<e>/manifest.json)用得到;扫描器不产它。
|
|
21505
21512
|
*/
|
|
21506
|
-
library: external_exports.boolean().optional()
|
|
21513
|
+
library: external_exports.boolean().optional(),
|
|
21514
|
+
/**
|
|
21515
|
+
* 本机探到的版本。daemon 在 deploy:reportFinding 时探登录 shell PATH 上的同名可执行写入,
|
|
21516
|
+
* agent 报了也不算(design 2026-09-22 §3.1)。缺省 = 本机没探到。
|
|
21517
|
+
* 与 version 并存:老板事后在页面上手改 version(显式接受差异)时,version ≠ localVersion 一眼可见。
|
|
21518
|
+
*/
|
|
21519
|
+
localVersion: external_exports.string().optional(),
|
|
21520
|
+
/** `github:` 专用——那个版本是哪个文件。见 EnvArtifactSchema */
|
|
21521
|
+
artifact: EnvArtifactSchema.optional()
|
|
21507
21522
|
});
|
|
21508
21523
|
var EnvSecretSchema = external_exports.object({
|
|
21509
21524
|
// 凭据的命名引用('aliyun-ak' / 'supabase-shared')。部署时按这个名字去解析实际的值。
|
|
@@ -24792,6 +24807,9 @@ var DEPLOY_FILE = import_node_path3.default.join(".clawd", "deploy.json");
|
|
|
24792
24807
|
var SCAN_FILE = import_node_path3.default.join(".clawd", "deploy-scan.json");
|
|
24793
24808
|
var z1 = DeployScanSchema.omit({ id: true, manifest: true }).extend({ releasedHead: DeployScanSchema.shape.head }).strict();
|
|
24794
24809
|
var z2 = external_exports.object({ version: external_exports.literal(2), scans: external_exports.array(DeployScanSchema), released: DeployReleasedSchema.optional() }).strict();
|
|
24810
|
+
var PackageFindingSchema = EnvPackageSchema.omit({ localVersion: true, artifact: true }).extend({
|
|
24811
|
+
artifact: external_exports.object({ url: external_exports.string().url(), bin: external_exports.string() }).strict().optional()
|
|
24812
|
+
});
|
|
24795
24813
|
|
|
24796
24814
|
// src/deploy/templates.ts
|
|
24797
24815
|
var CLAWOS_REPO = "ottin4ttc/clawos";
|
package/dist/persona-defaults/persona-clawd-butler/.claude/skills/scan-persona-for-deploy/SKILL.md
CHANGED
|
@@ -17,7 +17,7 @@ description: 老板要把某个 persona 发布到云上时触发——把这个
|
|
|
17
17
|
| 档 | 任务里会说 | 你要做什么 |
|
|
18
18
|
|---|---|---|
|
|
19
19
|
| **硬扫** | 「从零把 persona 整个读一遍」 | 清单是空的,从零填 |
|
|
20
|
-
| **软扫** | 「只看跟线上正跑那版的差别,那一版是 commit `<sha>`」 |
|
|
20
|
+
| **软扫** | 「只看跟线上正跑那版的差别,那一版是 commit `<sha>`」 | 先把已有清单的 `package` 重报一遍让 daemon 重探版本,再在**已有清单**上打补丁 |
|
|
21
21
|
|
|
22
22
|
软扫的第一件事,在 persona 目录里跑:
|
|
23
23
|
|
|
@@ -25,13 +25,29 @@ description: 老板要把某个 persona 发布到云上时触发——把这个
|
|
|
25
25
|
git diff --name-only <任务里给的 sha> -- .
|
|
26
26
|
```
|
|
27
27
|
|
|
28
|
-
|
|
29
|
-
|
|
28
|
+
拿到的就是要重看的文件——**这就是「线上那版跟现在」的全部差别**。清单里其余的 `secret` / `connector`
|
|
29
|
+
条目原样有效,不用重报:重报没变的东西不但白花时间,还会让本来稳定的字段(比如凭据的命名引用)无谓地变来变去。
|
|
30
|
+
**`package` 条目例外——每次软扫都要重报一遍**,见下一节。
|
|
31
|
+
|
|
32
|
+
### 软扫先把清单里的 package 重报一遍
|
|
33
|
+
|
|
34
|
+
版本是 daemon 在你每次报 `package` 时探本机得来的(见「边查边报」那节),**不重报就不探**:
|
|
35
|
+
本机把某个工具升了级、或者上一版单据是没有探测那阵扫的,清单上的版本都不会自己变。所以拿到 diff 之后、
|
|
36
|
+
读改动文件之前,先做这一步:
|
|
37
|
+
|
|
38
|
+
1. 调 `deploy:get`,在 `scans` 里找 `id` 等于任务给的 scanId 那条,拿它的 `manifest.packages` 和 `evidence`。
|
|
39
|
+
2. 对 `packages` 里的每一条调一次 `deploy:reportFinding`(`kind: "package"`):
|
|
40
|
+
- `item` 只带 `name` / `from` / `min` / `version`;有 `artifact` 的只带 `{ url, bin }`。
|
|
41
|
+
`localVersion`、`artifact.sha256`、`artifact.size` 是 daemon 写的,**不要带**(带了 sha256 会被按形状拒)。
|
|
42
|
+
- `evidence` 用记录里 `target` 等于 `package:<name>` 那条的 `reason` / `file` / `quote` 原样回传。
|
|
43
|
+
- 记录里**没有**这条 evidence 的(老板在页面上手工补的条目)跳过不报——上报口要求 evidence,编一条就是造假。
|
|
44
|
+
- 被拒就按错误里说的做:`github:` 包本机版本变了,daemon 会告诉你新版本,按它重找资产再报(规则见 package 那节第 2 步)。
|
|
45
|
+
3. 然后再去读改动文件。改动涉及的条目在那一趟会再报一次,新结论盖过这里的,顺序不能反。
|
|
30
46
|
|
|
31
47
|
两件最容易做错的事:
|
|
32
48
|
|
|
33
|
-
- **改动列表是空的,不等于没活干。**
|
|
34
|
-
|
|
49
|
+
- **改动列表是空的,不等于没活干。** 老板点了重扫,页面正卡在「分析中」,你照样要把上面那步重报做完、
|
|
50
|
+
走到收尾那步调 `deploy:finishScan`,只是中间不用再报别的。
|
|
35
51
|
- **diff 给的是入口,不是边界。** 改的可能只是 `CLAUDE.md` 里一行命令,而那行命令背后的脚本
|
|
36
52
|
带着一整串工具依赖。**改动文件引出去的那一跳照样要跟**,规则同下面「读什么」那节。
|
|
37
53
|
|
|
@@ -90,7 +106,7 @@ call({ method: "deploy:reportFinding", args: {
|
|
|
90
106
|
镜像里要装的**一切**都报这一种:命令行工具、运行时(`python3` / `node`)、npm 包(MCP server 的)……
|
|
91
107
|
页面上这一类叫「镜像」;「CLI」这个词只用于连接器的一种(下面那节),报的时候别叫它 cli。
|
|
92
108
|
|
|
93
|
-
`item` 字段:`name`(必填,装完落在 PATH 上的可执行名)、`from`(从哪装)、`version
|
|
109
|
+
`item` 字段:`name`(必填,装完落在 PATH 上的可执行名)、`from`(从哪装)、`version`(精确版本,见下)、`min`(版本下限)、`artifact`(`github:` 专用,见下)。
|
|
94
110
|
|
|
95
111
|
只列**干净容器里不会自带**的:要列 `aliyun` / `s`(Serverless Devs) / `pnpm` / `python3` / `git`
|
|
96
112
|
这类;不必列 `ls` `cat` `grep` `sed` `awk` `curl` `tar` `bash` 这些基础镜像自带的。
|
|
@@ -108,7 +124,24 @@ call({ method: "deploy:reportFinding", args: {
|
|
|
108
124
|
|
|
109
125
|
注意目标是 **Linux 容器**:persona 脚本里的 macOS 装法(brew 之类)不能照抄,要找 Linux 对应的。
|
|
110
126
|
|
|
111
|
-
|
|
127
|
+
**版本不用你定——daemon 探本机。** 你每报一条 `package`,daemon 会在这台机器的登录 shell PATH 上找同名
|
|
128
|
+
可执行、问它的版本,写进返回值里那条的 `version`(同时落 `localVersion`)。本机是啥就上云啥,这是硬约束。
|
|
129
|
+
只有本机没装时才由你按官方文档填一个 `version`,并在收尾的 `notes` 里写明「本机未装 <name>,取的 x.y.z」。
|
|
130
|
+
`min` 只在你确知下限时填。**不要猜版本号。**
|
|
131
|
+
|
|
132
|
+
**`from` 必须能装出 `version` 那个确切版本。** 这是选源的硬规则:
|
|
133
|
+
- `apt:` 只在 Debian 12 (bookworm) 仓库里有该版本时才报——去 packages.debian.org 核一眼(本机 brew 装的 jq 1.7.1,
|
|
134
|
+
bookworm 只有 1.6,那就不能报 `apt:jq`);
|
|
135
|
+
- 没有就找上游 release 走 `github:`(jq 有 GitHub release 裸二进制);
|
|
136
|
+
- 哪种都装不出本机那一版 → 写进 `notes` 作为存疑项,让老板决定。**不要报一个装出来版本不对的源。**
|
|
137
|
+
|
|
138
|
+
**`github:` 要钉资产。** GitHub 不是包注册表,从「仓库 + 版本」推不出该下哪个文件,构建器不猜。分两步:
|
|
139
|
+
1. 先报 `{ name, from: "github:<owner>/<repo>" }`,从返回的 view 里读 daemon 定下的 `version`;
|
|
140
|
+
2. 按**那个版本**打开该仓库的 Releases 页(或读它官方 install 脚本里的下载 URL),找到 **linux-amd64** 资产的直链
|
|
141
|
+
和包内可执行文件的路径,再报一次同名条目:
|
|
142
|
+
`{ name, from, version: <第 1 步读到的>, artifact: { url: "<直链>", bin: "<包内路径,如 hbi 或 dist/bin/x;裸二进制留空串>" } }`。
|
|
143
|
+
只认 `.tar.gz` / `.tgz` 和裸二进制。**不要自己算 sha256**,daemon 会下载核实并写入。
|
|
144
|
+
被拒时错误里会说原因(版本不是本机那个 / 包里没有 bin / 404),按它说的重找再报。
|
|
112
145
|
|
|
113
146
|
**`.mcp.json` 里 `npx` / `uvx` 现拉现跑的 MCP server,也要报一条 `package`。** 它看着像一条配置
|
|
114
147
|
不像一个命令行工具,但语义是一样的:容器里没有这个包时,MCP 首次启动要连 registry 现拉,
|
|
@@ -203,7 +236,7 @@ call({ method: "deploy:patch", args: {
|
|
|
203
236
|
去掉该去的那几条,其余原样带上。**没有要删的就别调**——整份改写是有风险的动作,没必要时不做。
|
|
204
237
|
|
|
205
238
|
判「该删」要有依据:来源文件在这次 diff 里被删了,或者你读了改动后的文件、确认它不再引用那个
|
|
206
|
-
|
|
239
|
+
东西。**光是「这次 diff 没碰到它」不是依据**——软扫下多数条目 diff 都碰不到。
|
|
207
240
|
|
|
208
241
|
### 然后收尾
|
|
209
242
|
|
|
@@ -21473,6 +21473,13 @@ var GithubAuthOauthStartArgsSchema = external_exports.object({
|
|
|
21473
21473
|
}).strict();
|
|
21474
21474
|
|
|
21475
21475
|
// ../protocol/src/environment-schemas.ts
|
|
21476
|
+
var EnvArtifactSchema = external_exports.object({
|
|
21477
|
+
url: external_exports.string().url(),
|
|
21478
|
+
// 包内可执行文件的路径(`hbi` / `dist/bin/x`);空串 = 裸二进制
|
|
21479
|
+
bin: external_exports.string(),
|
|
21480
|
+
sha256: external_exports.string().regex(/^[0-9a-f]{64}$/),
|
|
21481
|
+
size: external_exports.number().int().positive()
|
|
21482
|
+
});
|
|
21476
21483
|
var EnvPackageSchema = external_exports.object({
|
|
21477
21484
|
// 装完后在 PATH 里能直接调到的名字('aliyun' / 's' / 'pnpm' / 'python3');npm 包报 bin 名,包名进 from
|
|
21478
21485
|
name: external_exports.string().min(1),
|
|
@@ -21494,7 +21501,7 @@ var EnvPackageSchema = external_exports.object({
|
|
|
21494
21501
|
* ensure-toolchain.sh 的事,云上只构一个镜像、一个基础环境,多给反而要求构建器做选择。
|
|
21495
21502
|
*/
|
|
21496
21503
|
from: external_exports.string().optional(),
|
|
21497
|
-
//
|
|
21504
|
+
// 精确版本;本机探到时 = localVersion(本机是啥就上云啥),本机没装才是扫描器按官方文档填的。缺省 = 不挑版本
|
|
21498
21505
|
version: external_exports.string().optional(),
|
|
21499
21506
|
// 版本下限('20.6' 这种)。与 version 的区别:version 是「就要这个」,min 是「不低于」。
|
|
21500
21507
|
// 两者都缺省即完全不约束。
|
|
@@ -21503,7 +21510,15 @@ var EnvPackageSchema = external_exports.object({
|
|
|
21503
21510
|
* 没有可执行、只是个包(引擎扩展这类:pi 底座里的 cliproxyapi 扩展)。构建器只断言它装上了(npm ls),不查 PATH 上有没有 `name` 这条命令。
|
|
21504
21511
|
* 只有引擎底座清单(cloud-host/engines/<e>/manifest.json)用得到;扫描器不产它。
|
|
21505
21512
|
*/
|
|
21506
|
-
library: external_exports.boolean().optional()
|
|
21513
|
+
library: external_exports.boolean().optional(),
|
|
21514
|
+
/**
|
|
21515
|
+
* 本机探到的版本。daemon 在 deploy:reportFinding 时探登录 shell PATH 上的同名可执行写入,
|
|
21516
|
+
* agent 报了也不算(design 2026-09-22 §3.1)。缺省 = 本机没探到。
|
|
21517
|
+
* 与 version 并存:老板事后在页面上手改 version(显式接受差异)时,version ≠ localVersion 一眼可见。
|
|
21518
|
+
*/
|
|
21519
|
+
localVersion: external_exports.string().optional(),
|
|
21520
|
+
/** `github:` 专用——那个版本是哪个文件。见 EnvArtifactSchema */
|
|
21521
|
+
artifact: EnvArtifactSchema.optional()
|
|
21507
21522
|
});
|
|
21508
21523
|
var EnvSecretSchema = external_exports.object({
|
|
21509
21524
|
// 凭据的命名引用('aliyun-ak' / 'supabase-shared')。部署时按这个名字去解析实际的值。
|
|
@@ -24792,6 +24807,9 @@ var DEPLOY_FILE = import_node_path3.default.join(".clawd", "deploy.json");
|
|
|
24792
24807
|
var SCAN_FILE = import_node_path3.default.join(".clawd", "deploy-scan.json");
|
|
24793
24808
|
var z1 = DeployScanSchema.omit({ id: true, manifest: true }).extend({ releasedHead: DeployScanSchema.shape.head }).strict();
|
|
24794
24809
|
var z2 = external_exports.object({ version: external_exports.literal(2), scans: external_exports.array(DeployScanSchema), released: DeployReleasedSchema.optional() }).strict();
|
|
24810
|
+
var PackageFindingSchema = EnvPackageSchema.omit({ localVersion: true, artifact: true }).extend({
|
|
24811
|
+
artifact: external_exports.object({ url: external_exports.string().url(), bin: external_exports.string() }).strict().optional()
|
|
24812
|
+
});
|
|
24795
24813
|
|
|
24796
24814
|
// src/deploy/templates.ts
|
|
24797
24815
|
var CLAWOS_REPO = "ottin4ttc/clawos";
|