@clawos-dev/clawd 0.2.209-beta.415.57f6599 → 0.2.209-beta.416.b1feadc
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/cli.cjs +868 -805
- package/dist/deploy-kit/.secrets/aliyun.env +6 -4
- package/dist/deploy-kit/.secrets/aliyun.env.local.example +15 -0
- package/dist/deploy-kit/scripts/publish.sh +4 -2
- package/dist/deploy-kit/scripts/remove-extension.sh +3 -2
- package/dist/persona-defaults/persona-app-builder/.mcp.json +5 -4
- package/dist/persona-defaults/persona-app-builder/CLAUDE.md +15 -7
- package/dist/persona-defaults/persona-app-builder/extension-kit/config.env +8 -7
- package/package.json +1 -1
|
@@ -1,5 +1,7 @@
|
|
|
1
|
-
# 阿里云 RAM AccessKey
|
|
2
|
-
#
|
|
1
|
+
# 阿里云 RAM AccessKey — clawd ship 的共享 demo 凭证(publish.sh 先 source 这个)
|
|
2
|
+
# 归属 RAM 用户 clawd-fc-developer(独立收敛权限用户,跟 owner 主账号解耦)
|
|
3
|
+
# 每次 daemon 启动 refreshDeployKit 会用 defaults 里的最新版覆盖本文件(OTA 即升级)。
|
|
4
|
+
# 想用自己的 AK 覆盖:复制 aliyun.env.local.example → aliyun.env.local 并填自己的值。
|
|
3
5
|
# 需要权限:AliyunFCFullAccess + AliyunSTSAssumeRoleAccess
|
|
4
|
-
ALIBABA_CLOUD_ACCESS_KEY_ID=
|
|
5
|
-
ALIBABA_CLOUD_ACCESS_KEY_SECRET=
|
|
6
|
+
ALIBABA_CLOUD_ACCESS_KEY_ID=LTAI5tAi7P7oySa3ohAzaYbj
|
|
7
|
+
ALIBABA_CLOUD_ACCESS_KEY_SECRET=NS470lOWTLeeAP9RUADXkpKNOrH5QX
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
# 阿里云 RAM AccessKey 个人 override(本机专用)
|
|
2
|
+
#
|
|
3
|
+
# 复制这份为同目录下 aliyun.env.local,填自己的 AK/SK,publish.sh / remove-extension.sh 会在
|
|
4
|
+
# source 完 shared 的 aliyun.env 之后再 source 这份(.local 里的值覆盖 shared 里的)。
|
|
5
|
+
#
|
|
6
|
+
# .local 后缀由 daemon refreshDeployKit 特判:**永远不会被 OTA 覆盖**,跟 shared aliyun.env
|
|
7
|
+
# (每次 daemon 启动会被 defaults 里的新版覆盖)是两回事。
|
|
8
|
+
#
|
|
9
|
+
# 什么时候需要用 .local:
|
|
10
|
+
# - 你想用自己的阿里云账号部署 FC(不想让别人用 clawd ship 的 demo AK 部到你账号)
|
|
11
|
+
# - 你有权限收敛过的自定义 AK(比如只在某个特定 region 有 FC 权限)
|
|
12
|
+
#
|
|
13
|
+
# 不需要用 .local 时(大部分情况):删掉这个 .local 文件、直接跑 clawd defaults,OTA 后自动拿到新 demo 凭证。
|
|
14
|
+
ALIBABA_CLOUD_ACCESS_KEY_ID=replace-me
|
|
15
|
+
ALIBABA_CLOUD_ACCESS_KEY_SECRET=replace-me
|
|
@@ -36,11 +36,13 @@ if [ -z "${SLUG:-}" ]; then
|
|
|
36
36
|
fi
|
|
37
37
|
DEPLOY_NAME="${APP_NAME}-${SLUG}"
|
|
38
38
|
|
|
39
|
-
# 2) 工具链 +
|
|
39
|
+
# 2) 工具链 + 阿里云凭证(分层:shared demo + 可选 local override)
|
|
40
40
|
source "$KIT_DIR/scripts/ensure-toolchain.sh"
|
|
41
41
|
ensure_toolchain
|
|
42
|
-
[ -f "$KIT_DIR/.secrets/aliyun.env" ] || { echo "❌ 缺 $KIT_DIR/.secrets/aliyun.env
|
|
42
|
+
[ -f "$KIT_DIR/.secrets/aliyun.env" ] || { echo "❌ 缺 $KIT_DIR/.secrets/aliyun.env(clawd ship 的共享 demo 凭证,OTA 自动刷新)。参考 .secrets/aliyun.env.example 填写。" >&2; exit 1; }
|
|
43
43
|
set -a; . "$KIT_DIR/.secrets/aliyun.env"; set +a
|
|
44
|
+
# aliyun.env.local: 本机个人 override(永远不被 OTA 覆盖,见 refreshDeployKit)。有就后 source 覆盖 env。
|
|
45
|
+
[ -f "$KIT_DIR/.secrets/aliyun.env.local" ] && { set -a; . "$KIT_DIR/.secrets/aliyun.env.local"; set +a; }
|
|
44
46
|
export ALIBABA_CLOUD_REGION_ID="${REGION:?config.env 缺 REGION}"
|
|
45
47
|
_ident="$(aliyun sts GetCallerIdentity 2>&1)" || { echo "❌ aliyun sts GetCallerIdentity 失败(检查 .secrets/aliyun.env 凭证):" >&2; echo "$_ident" >&2; exit 1; }
|
|
46
48
|
ACC="$(printf '%s' "$_ident" | python3 -c 'import sys,json;print(json.load(sys.stdin)["AccountId"])')" || { echo "❌ 解析 AccountId 失败,aliyun 输出非 JSON:" >&2; echo "$_ident" >&2; exit 1; }
|
|
@@ -25,9 +25,10 @@ TABLE_PREFIX="${APP_NAME}_${SLUG:+${SLUG}_}"
|
|
|
25
25
|
source "$KIT_DIR/scripts/ensure-toolchain.sh"
|
|
26
26
|
ensure_toolchain
|
|
27
27
|
|
|
28
|
-
#
|
|
29
|
-
[ -f "$KIT_DIR/.secrets/aliyun.env" ] || { echo "❌ 缺 $KIT_DIR/.secrets/aliyun.env
|
|
28
|
+
# 阿里云凭证(分层:shared demo + 可选 local override)
|
|
29
|
+
[ -f "$KIT_DIR/.secrets/aliyun.env" ] || { echo "❌ 缺 $KIT_DIR/.secrets/aliyun.env(clawd ship 的共享 demo 凭证,OTA 自动刷新)。" >&2; exit 1; }
|
|
30
30
|
set -a; . "$KIT_DIR/.secrets/aliyun.env"; set +a
|
|
31
|
+
[ -f "$KIT_DIR/.secrets/aliyun.env.local" ] && { set -a; . "$KIT_DIR/.secrets/aliyun.env.local"; set +a; }
|
|
31
32
|
|
|
32
33
|
# 1) 删 FC 侧(函数 + 触发器 + 自定义域名)
|
|
33
34
|
echo "==> 删 FC 资源: $APP_NAME${SLUG:+ (deploy=${APP_NAME}-${SLUG})}"
|
|
@@ -1,14 +1,15 @@
|
|
|
1
1
|
{
|
|
2
|
-
"_comment": "preinstall ship 进 daemon defaults,daemon 启动时 refreshDaemonManagedDirs 把这文件同步到 ~/.clawd*/personas/persona-app-builder/.mcp.json。cc CLI 启动时(cwd=projects/<name>/)会向上找 persona dir 的 .mcp.json 自动加载。用 @aliyun-rds/supabase-mcp-server
|
|
2
|
+
"_comment": "preinstall ship 进 daemon defaults,daemon 启动时 refreshDaemonManagedDirs 把这文件同步到 ~/.clawd*/personas/persona-app-builder/.mcp.json。cc CLI 启动时(cwd=projects/<name>/)会向上找 persona dir 的 .mcp.json 自动加载。用 @aliyun-rds/supabase-mcp-server Mode 2 单实例直连(不再用 aliyun AK),底下接阿里云托管 supabase(公网 endpoint 121.196.249.178:80,项目 ra-ae0i57kef06s6ix / clawd-app-builder,杭州可用区J)。三件套(url + anon + service + jwt)明文写进这里跟旧的 aliyun AK 模式一样属于共享 demo 凭证——该 supabase 实例只承载 clawd demo 数据,泄漏面锁定在这个实例本身(不会波及阿里云账号内其它资源)。旧自建 supabase 120.26.157.138 已退役,旧共享 aliyun AK LTAI5tSebp9pyBLk2nxF5wDg 已 revoke。",
|
|
3
3
|
"mcpServers": {
|
|
4
4
|
"supabase": {
|
|
5
5
|
"type": "stdio",
|
|
6
6
|
"command": "npx",
|
|
7
7
|
"args": [
|
|
8
8
|
"@aliyun-rds/supabase-mcp-server",
|
|
9
|
-
"--
|
|
10
|
-
"--
|
|
11
|
-
"--
|
|
9
|
+
"--supabase-url", "http://121.196.249.178:80",
|
|
10
|
+
"--supabase-anon-key", "eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJpc3MiOiJzdXBhYmFzZSIsInJvbGUiOiJhbm9uIiwiaWF0IjoxNzgzMzEwODU1LCJleHAiOjEzMjkzOTUwODU1fQ.sHLZH8q2SGWYbNPEFOzTFlQEtjVK3z1DlEqoU_5Uyyg",
|
|
11
|
+
"--supabase-service-role-key", "eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJpc3MiOiJzdXBhYmFzZSIsInJvbGUiOiJzZXJ2aWNlX3JvbGUiLCJpYXQiOjE3ODMzMTA4NTUsImV4cCI6MTMyOTM5NTA4NTV9.MdlymSh0DaJdiOVRmM3QnukUDtkOf_Eljh8_fpdLi8Q",
|
|
12
|
+
"--jwt-secret", "P9ThaB8USJCYLQa3tcBB3oYGtKWu95LelFpQD3fo"
|
|
12
13
|
]
|
|
13
14
|
}
|
|
14
15
|
}
|
|
@@ -178,25 +178,33 @@ createProject 成功后 daemon 自动:
|
|
|
178
178
|
|
|
179
179
|
## 后端:supabase MCP
|
|
180
180
|
|
|
181
|
-
**`supabase`** —— 后端数据/认证/存储,唯一的 MCP 支柱。这份 Supabase
|
|
181
|
+
**`supabase`** —— 后端数据/认证/存储,唯一的 MCP 支柱。这份 Supabase **是阿里云托管 supabase 实例**(`http://121.196.249.178:80`),全局 MCP / clawos / lovagent / moltoffer / clawd 都指向这一台。**不是**云上 `supabase.com` 的实例。**旧自建 supabase 120.26.157.138 已退役**,老项目一并迁过来,不再"共用两台"。开工前确认能连上:
|
|
182
182
|
|
|
183
183
|
- 读表结构、跑 SQL、看 auth 用户都走这个 MCP,不要凭记忆猜 schema
|
|
184
|
-
- 模板里 `extension-kit/config.env` + `server/.env.example`
|
|
184
|
+
- 模板里 `extension-kit/config.env` + `server/.env.example` 已对齐这台阿里云托管实例(SUPABASE_URL / SUPABASE_KEY),创建 project 时拷进项目目录的 `.env` 也是同一套
|
|
185
185
|
- **红线**:这是共享生产库。建表 / 迁移前先 `list_tables` 看清现状,新项目的表**必须**用 `${APP_NAME}_${SLUG}_` 前缀沉到 `public` schema(如 `helloworld_a1b2_click_counter`,`APP_NAME` 和 `SLUG` 都从项目 `ext.conf` 读,scaffold 时 bake,**不要自己另起一套 slug**),避免和 clawos / 其它项目 / 别人同名 app 的表撞名;**绝不** drop / alter clawos 已有的表,不确定哪些是 clawos 的就先问老板
|
|
186
186
|
|
|
187
|
-
**易踩的坑**:MCP
|
|
187
|
+
**易踩的坑**:MCP 工具连的就是 `121.196.249.178`,假如哪一步把 `.env` / `config.env` 写成云上 `qmhqmopgwsbmfxiqagay.supabase.co`(历史旧默认)或者残留的 `120.26.157.138`(旧自建,已退役),就会**MCP 建表落阿里云 / server 通过 supabase-js 查别处**,两台 PostgREST schema cache 各自独立 → `PGRST205 schema cache 找不到表`。看到 PGRST 系列错码先 `grep -rE 'supabase.co|120\.26\.157\.138'` 自查模板配置,再怀疑 schema cache。
|
|
188
188
|
|
|
189
|
-
## 阿里云凭证:在共享 deploy-kit 的 `.secrets
|
|
189
|
+
## 阿里云凭证:在共享 deploy-kit 的 `.secrets/`,分层 override
|
|
190
190
|
|
|
191
|
-
AK/SK
|
|
191
|
+
AK/SK 分两层,都放在共享 deploy-kit 下(`$HOME/.clawd/deploy-kit/.secrets/`)、全 FC persona 共用,不在系统环境变量里:
|
|
192
|
+
|
|
193
|
+
- **`aliyun.env`** — clawd ship 的**共享 demo 凭证**(归属 RAM 用户 `clawd-fc-developer`,权限收敛:`AliyunFCFullAccess` + `STSAssumeRole` + `Log` + `OSS` + `YundunCert-RO`)。**每次 daemon 启动 refreshDeployKit 会用 defaults 里的最新版覆盖本文件(OTA 即升级)**——用户不用手动 rotate。
|
|
194
|
+
- **`aliyun.env.local`**(可选)— 本机个人 override,永远不被 OTA 覆盖。publish.sh / remove-extension.sh 先 source `aliyun.env`(shared)、再 source `aliyun.env.local`(后者的值覆盖前者)。用户想用自己的 AK(如不想让 demo AK 部署到自己账号)就复制 `aliyun.env.local.example` → `aliyun.env.local` 填自己的值。
|
|
195
|
+
|
|
196
|
+
手动跑 CLI 时在当前 shell 加载:
|
|
192
197
|
|
|
193
198
|
```bash
|
|
194
|
-
set -a
|
|
199
|
+
set -a
|
|
200
|
+
. "$HOME/.clawd/deploy-kit/.secrets/aliyun.env"
|
|
201
|
+
[ -f "$HOME/.clawd/deploy-kit/.secrets/aliyun.env.local" ] && . "$HOME/.clawd/deploy-kit/.secrets/aliyun.env.local"
|
|
202
|
+
set +a
|
|
195
203
|
```
|
|
196
204
|
|
|
197
205
|
之后 `aliyun` / `s` / `ossutil` 会自动读这两个环境变量。Serverless Devs 还需 `~/.s/access.yaml` 含 `AccountID`(用 `aliyun sts GetCallerIdentity` 取),SK 走 heredoc 写入、不进命令行。
|
|
198
206
|
|
|
199
|
-
- **红线**:绝不 `echo` / 打印 / 写进日志或提交记录里暴露 SK;绝不把 `.secrets/` 拷进被部署的项目代码(已被 `.gitignore`
|
|
207
|
+
- **红线**:绝不 `echo` / 打印 / 写进日志或提交记录里暴露 SK;绝不把 `.secrets/` 拷进被部署的项目代码(已被 `.gitignore` 挡住)。**shared aliyun.env 为空**(demo 凭证意外没 ship)先停下提醒老板;**用户想用自己的 AK** 就引导他建 `aliyun.env.local`,别去改 shared 那份(OTA 会盖回)。
|
|
200
208
|
|
|
201
209
|
## 工作主线
|
|
202
210
|
|
|
@@ -8,14 +8,15 @@ REGION=cn-hangzhou
|
|
|
8
8
|
FC_RUNTIME=custom.debian12
|
|
9
9
|
NODE_LAYER=acs:fc:cn-hangzhou:official:layers/Nodejs22/versions/1
|
|
10
10
|
|
|
11
|
-
# Supabase(
|
|
12
|
-
#
|
|
13
|
-
# 全局 MCP / clawos / lovagent / moltoffer
|
|
11
|
+
# Supabase(阿里云托管 supabase 实例!建表务必加 <app>_ 前缀沉到 public schema,避免撞名)
|
|
12
|
+
# 公网 endpoint 121.196.249.178:80(项目 ra-ae0i57kef06s6ix / clawd-app-builder,杭州可用区J)
|
|
13
|
+
# 全局 MCP / clawos / lovagent / moltoffer / clawd 都指向这一台。
|
|
14
|
+
# 旧自建 supabase 120.26.157.138 已退役,老项目也一起迁到这里,不再"共用两台"。
|
|
14
15
|
# 之前误指云上 qmhqmopgwsbmfxiqagay.supabase.co 导致 MCP 建表落阿里云,server 走 supabase-js
|
|
15
|
-
# 查云上,两台 PostgREST schema cache 独立 → PGRST205
|
|
16
|
-
SUPABASE_URL=http://
|
|
17
|
-
# anon/publishable key(公开可暴露,客户端用)
|
|
18
|
-
SUPABASE_KEY=eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.
|
|
16
|
+
# 查云上,两台 PostgREST schema cache 独立 → PGRST205 找不到表。托管后同样要盯紧 .env 别串。
|
|
17
|
+
SUPABASE_URL=http://121.196.249.178:80
|
|
18
|
+
# anon/publishable key(公开可暴露,客户端用)。阿里云托管实例的 anon key,跟 supabase MCP 用同一把。
|
|
19
|
+
SUPABASE_KEY=eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJpc3MiOiJzdXBhYmFzZSIsInJvbGUiOiJhbm9uIiwiaWF0IjoxNzgzMzEwODU1LCJleHAiOjEzMjkzOTUwODU1fQ.sHLZH8q2SGWYbNPEFOzTFlQEtjVK3z1DlEqoU_5Uyyg
|
|
19
20
|
|
|
20
21
|
# FC 资源规格(够跑轻量 extension;按需改)
|
|
21
22
|
FC_CPU=0.35
|
package/package.json
CHANGED