@clawos-dev/clawd 0.2.142 → 0.2.143-beta.301.814d293

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.
Files changed (57) hide show
  1. package/dist/cli.cjs +920 -1562
  2. package/dist/deploy-kit/.secrets/aliyun.env.example +4 -0
  3. package/dist/deploy-kit/scripts/new-extension.sh +22 -0
  4. package/dist/deploy-kit/scripts/publish.sh +100 -0
  5. package/dist/deploy-kit/scripts/publish.spec.ts +69 -0
  6. package/dist/{persona-defaults/persona-app-builder/extension-kit → deploy-kit}/scripts/remove-extension.sh +15 -26
  7. package/dist/persona-defaults/persona-app-builder/CLAUDE.md +13 -16
  8. package/dist/persona-defaults/persona-app-builder/extension-kit/README.md +24 -18
  9. package/dist/persona-defaults/persona-app-builder/extension-kit/examples/nestjs-react/ext.conf +5 -0
  10. package/dist/persona-defaults/persona-bug-fixer/CLAUDE.md +0 -2
  11. package/dist/persona-defaults/persona-dataclaw-builder/.mcp.json +4 -0
  12. package/dist/persona-defaults/persona-dataclaw-builder/.secrets/dataclaw.env.example +3 -0
  13. package/dist/persona-defaults/persona-dataclaw-builder/CLAUDE.md +66 -0
  14. package/dist/persona-defaults/persona-dataclaw-builder/extension-kit/README.md +99 -0
  15. package/dist/persona-defaults/persona-dataclaw-builder/extension-kit/config.env +20 -0
  16. package/dist/persona-defaults/persona-dataclaw-builder/extension-kit/contract/s.yaml.tmpl +59 -0
  17. package/dist/persona-defaults/persona-dataclaw-builder/extension-kit/examples/nestjs-react/ext.conf +5 -0
  18. package/dist/persona-defaults/persona-dataclaw-builder/extension-kit/examples/nestjs-react/server/.env.example +15 -0
  19. package/dist/persona-defaults/persona-dataclaw-builder/extension-kit/examples/nestjs-react/server/.fcignore +7 -0
  20. package/dist/persona-defaults/persona-dataclaw-builder/extension-kit/examples/nestjs-react/server/nest-cli.json +8 -0
  21. package/dist/persona-defaults/persona-dataclaw-builder/extension-kit/examples/nestjs-react/server/package.json +29 -0
  22. package/dist/persona-defaults/persona-dataclaw-builder/extension-kit/examples/nestjs-react/server/src/app.module.ts +13 -0
  23. package/dist/persona-defaults/persona-dataclaw-builder/extension-kit/examples/nestjs-react/server/src/auth/gate.ts +70 -0
  24. package/dist/persona-defaults/persona-dataclaw-builder/extension-kit/examples/nestjs-react/server/src/auth/session.ts +52 -0
  25. package/dist/persona-defaults/persona-dataclaw-builder/extension-kit/examples/nestjs-react/server/src/auth/ttc-user-info.ts +23 -0
  26. package/dist/persona-defaults/persona-dataclaw-builder/extension-kit/examples/nestjs-react/server/src/dataclaw/dataclaw.client.ts +83 -0
  27. package/dist/persona-defaults/persona-dataclaw-builder/extension-kit/examples/nestjs-react/server/src/dataclaw/dataclaw.config.ts +18 -0
  28. package/dist/persona-defaults/persona-dataclaw-builder/extension-kit/examples/nestjs-react/server/src/dataclaw/dataclaw.controller.ts +30 -0
  29. package/dist/persona-defaults/persona-dataclaw-builder/extension-kit/examples/nestjs-react/server/src/dataclaw/dataclaw.module.ts +9 -0
  30. package/dist/persona-defaults/persona-dataclaw-builder/extension-kit/examples/nestjs-react/server/src/main.ts +116 -0
  31. package/dist/persona-defaults/persona-dataclaw-builder/extension-kit/examples/nestjs-react/server/src/polyfill.ts +6 -0
  32. package/dist/persona-defaults/persona-dataclaw-builder/extension-kit/examples/nestjs-react/server/tsconfig.json +14 -0
  33. package/dist/persona-defaults/persona-dataclaw-builder/extension-kit/examples/nestjs-react/web/index.html +12 -0
  34. package/dist/persona-defaults/persona-dataclaw-builder/extension-kit/examples/nestjs-react/web/package.json +18 -0
  35. package/dist/persona-defaults/persona-dataclaw-builder/extension-kit/examples/nestjs-react/web/src/App.jsx +9 -0
  36. package/dist/persona-defaults/persona-dataclaw-builder/extension-kit/examples/nestjs-react/web/src/api.js +19 -0
  37. package/dist/persona-defaults/persona-dataclaw-builder/extension-kit/examples/nestjs-react/web/src/auth.js +7 -0
  38. package/dist/persona-defaults/persona-dataclaw-builder/extension-kit/examples/nestjs-react/web/src/components/BarChart.jsx +38 -0
  39. package/dist/persona-defaults/persona-dataclaw-builder/extension-kit/examples/nestjs-react/web/src/components/FilterRow.jsx +79 -0
  40. package/dist/persona-defaults/persona-dataclaw-builder/extension-kit/examples/nestjs-react/web/src/components/ResultCards.jsx +17 -0
  41. package/dist/persona-defaults/persona-dataclaw-builder/extension-kit/examples/nestjs-react/web/src/components/ResultTable.jsx +21 -0
  42. package/dist/persona-defaults/persona-dataclaw-builder/extension-kit/examples/nestjs-react/web/src/components/SchemaFilters.jsx +93 -0
  43. package/dist/persona-defaults/persona-dataclaw-builder/extension-kit/examples/nestjs-react/web/src/enums.js +22 -0
  44. package/dist/persona-defaults/persona-dataclaw-builder/extension-kit/examples/nestjs-react/web/src/main.jsx +6 -0
  45. package/dist/persona-defaults/persona-dataclaw-builder/extension-kit/examples/nestjs-react/web/src/pages/PerformanceQueryPage.jsx +102 -0
  46. package/dist/persona-defaults/persona-dataclaw-builder/extension-kit/examples/nestjs-react/web/src/styles.css +83 -0
  47. package/dist/persona-defaults/persona-dataclaw-builder/extension-kit/examples/nestjs-react/web/vite.config.js +30 -0
  48. package/dist/persona-defaults/persona-dataclaw-builder/extension-kit/hooks/pre-deploy.sh +25 -0
  49. package/dist/persona-defaults/persona-developer/CLAUDE.md +0 -2
  50. package/package.json +2 -5
  51. package/dist/dispatch/mcp-server.cjs +0 -39756
  52. package/dist/persona-defaults/persona-app-builder/extension-kit/scripts/new-extension.sh +0 -66
  53. package/dist/persona-defaults/persona-app-builder/extension-kit/scripts/publish.sh +0 -110
  54. /package/dist/{persona-defaults/persona-app-builder → deploy-kit}/.secrets/aliyun.env +0 -0
  55. /package/dist/{persona-defaults/persona-app-builder/extension-kit → deploy-kit}/contract/bootstrap +0 -0
  56. /package/dist/{persona-defaults/persona-app-builder/extension-kit → deploy-kit}/scripts/ensure-toolchain.sh +0 -0
  57. /package/dist/{persona-defaults/persona-app-builder/extension-kit → deploy-kit}/scripts/verify.sh +0 -0
@@ -1,66 +0,0 @@
1
- #!/usr/bin/env bash
2
- # 从示例模板生成一个新 extension
3
- # 用法: new-extension.sh <name> [示例模板, 默认 nestjs-react] [目标项目目录绝对路径]
4
- #
5
- # 目标目录解析(优先级从高到低):
6
- # - 显式目标目录(第三参,v2 per-user):daemon createProject 已在
7
- # users/<userId>/projects/<name>/ 建好(含 .clawd-project.json)→ 把模板展开到此目录。
8
- # v2 多人隔离后项目不再落 persona 目录下,脚本无法自行推导,必须由 daemon 显式传入。
9
- # - picker 模式(老布局兼容):persona-app-builder/projects/<name>/ 已由 daemon 建好
10
- # - 老路径兼容:以上都不存在时回退到 persona-app-builder/<name>/
11
- set -euo pipefail
12
- KIT_DIR="$(cd "$(dirname "$0")/.." && pwd)"
13
- PERSONA_DIR="$(cd "$KIT_DIR/.." && pwd)"
14
-
15
- NAME="${1:?用法: new-extension.sh <name> [模板,默认 nestjs-react] [目标目录]}"
16
- TMPL="${2:-nestjs-react}"
17
- DEST_OVERRIDE="${3:-}"
18
- SRC="$KIT_DIR/examples/$TMPL"
19
-
20
- [ -d "$SRC" ] || { echo "示例模板不存在: $SRC (现有: $(ls "$KIT_DIR/examples"))"; exit 1; }
21
-
22
- # 把模板内容展开到一个已含 .clawd-project.json 的目录(daemon 预建)
23
- expand_into() {
24
- local dest="$1"
25
- local remaining
26
- remaining="$(find "$dest" -mindepth 1 -maxdepth 1 ! -name '.clawd-project.json' -print -quit)"
27
- [ -z "$remaining" ] || { echo "目标已有内容(非空目录): $dest"; exit 1; }
28
- cp -R "$SRC/." "$dest/"
29
- }
30
-
31
- PICKER_DEST="$PERSONA_DIR/projects/$NAME"
32
- if [ -n "$DEST_OVERRIDE" ]; then
33
- # v2 per-user:daemon 显式传入目标目录
34
- DEST="$DEST_OVERRIDE"
35
- [ -d "$DEST" ] && [ -f "$DEST/.clawd-project.json" ] || {
36
- echo "目标目录无效(必须已存在且含 .clawd-project.json): $DEST"; exit 1
37
- }
38
- expand_into "$DEST"
39
- elif [ -d "$PICKER_DEST" ] && [ -f "$PICKER_DEST/.clawd-project.json" ]; then
40
- # picker 模式(老布局):目录已存在且仅含 .clawd-project.json
41
- DEST="$PICKER_DEST"
42
- expand_into "$DEST"
43
- else
44
- DEST="$PERSONA_DIR/$NAME"
45
- [ -e "$DEST" ] && { echo "目标已存在: $DEST"; exit 1; }
46
- cp -r "$SRC" "$DEST"
47
- fi
48
-
49
- # 写 ext.conf(框架相关配置,publish.sh 会读)
50
- cat > "$DEST/ext.conf" <<EOF
51
- APP_NAME=$NAME
52
- CODE_DIR=./server
53
- FC_ENTRY=dist/main.js
54
- BUILD_CMD="cd web && pnpm install && pnpm build && cd ../server && pnpm install && pnpm build && mkdir -p dist/public && cp -R ../web/dist/. dist/public/"
55
- # 本 extension 拥有的 Supabase 表(空格分隔,必须 ${NAME}_ 前缀);remove-extension.sh 据此清理
56
- SUPABASE_TABLES=""
57
- EOF
58
-
59
- echo "✅ 新 extension: $DEST"
60
- echo ""
61
- echo "接下来:"
62
- echo " 1) 设计 Supabase 表(务必用 ${NAME}_ 前缀,别碰 clawos 已有表)"
63
- echo " 2) 改前端(web/)和后端(server/)业务逻辑"
64
- echo " 3) 本地验证后发布: extension-kit/scripts/publish.sh $DEST"
65
- echo ""
66
- echo "换框架/语言: 改 ext.conf 的 BUILD_CMD/FC_ENTRY;换语言再看 extension-kit/README.md"
@@ -1,110 +0,0 @@
1
- #!/usr/bin/env bash
2
- # ============================================================
3
- # 一键发布 extension 到阿里云 FC(框架无关)
4
- # 用法: publish.sh <extension目录>
5
- # extension 目录里可放 ext.conf 声明框架相关的: APP_NAME/CODE_DIR/FC_ENTRY/BUILD_CMD
6
- # ============================================================
7
- set -euo pipefail
8
-
9
- KIT_DIR="$(cd "$(dirname "$0")/.." && pwd)"
10
- PERSONA_DIR="$(cd "$KIT_DIR/.." && pwd)"
11
-
12
- EXT_DIR="${1:?用法: publish.sh <extension目录>}"
13
- EXT_DIR="$(cd "$EXT_DIR" && pwd)"
14
-
15
- # 1) 平台变量 + extension 自身配置(后者覆盖前者)
16
- source "$KIT_DIR/config.env"
17
- [ -f "$EXT_DIR/ext.conf" ] && source "$EXT_DIR/ext.conf"
18
- APP_NAME="${APP_NAME:-$(basename "$EXT_DIR")}"
19
- CODE_DIR="${CODE_DIR:-./server}"
20
- FC_ENTRY="${FC_ENTRY:-dist/main.js}"
21
- BUILD_CMD="${BUILD_CMD:-}"
22
-
23
- # 2) 工具链就绪(检测环境,缺 aliyun CLI / Serverless Devs 则装,已装跳过)+ 阿里云凭证
24
- source "$KIT_DIR/scripts/ensure-toolchain.sh"
25
- ensure_toolchain
26
-
27
- # 阿里云凭证(现读)+ Serverless Devs 认证(必须含 AccountID,SK 走 heredoc 不进命令行)
28
- set -a; . "$PERSONA_DIR/.secrets/aliyun.env"; set +a
29
- # aliyun CLI 需要 region;新机器没跑过 `aliyun configure`(无 ~/.aliyun/config.json) → "region can't be empty"。
30
- # 用 env 给 region(REGION 来自 config.env):一处覆盖脚本里所有 aliyun 调用,不进 argv,和 AK/SK 走 env 的方式对称。
31
- export ALIBABA_CLOUD_REGION_ID="$REGION"
32
- # aliyun 报错不再吞进 2>/dev/null —— 否则凭证失效 / CLI 异常时只剩一条无头 python traceback(老板踩过)。
33
- _ident="$(aliyun sts GetCallerIdentity 2>&1)" || { echo "❌ aliyun sts GetCallerIdentity 失败(检查 .secrets/aliyun.env 凭证):" >&2; echo "$_ident" >&2; exit 1; }
34
- 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; }
35
- mkdir -p ~/.s
36
- cat > ~/.s/access.yaml <<EOF
37
- default:
38
- AccountID: '$ACC'
39
- AccessKeyID: $ALIBABA_CLOUD_ACCESS_KEY_ID
40
- AccessKeySecret: $ALIBABA_CLOUD_ACCESS_KEY_SECRET
41
- EOF
42
- chmod 600 ~/.s/access.yaml
43
-
44
- # 3) 构建产物(框架相关,由 ext.conf 的 BUILD_CMD 定义)
45
- # 发布上线脚手架化 (spec 2026-06-03-app-builder-publish-scaffold-design §5.4):
46
- # echo ::stage::build 在 if 外,BUILD_CMD 为空时也通知 daemon 进入 build 阶段(即使啥也没构建)。
47
- # daemon 解析 stdout 命中此 marker 后 broadcast appBuilder:publish-progress 帧推 UI checklist。
48
- echo "::stage::build"
49
- if [ -n "$BUILD_CMD" ]; then
50
- echo "==> build: $BUILD_CMD"
51
- ( cd "$EXT_DIR" && eval "$BUILD_CMD" )
52
- fi
53
-
54
- # 4) 放置框架无关的 bootstrap 到 code 目录
55
- cp "$KIT_DIR/contract/bootstrap" "$EXT_DIR/$CODE_DIR/bootstrap"
56
- chmod +x "$EXT_DIR/$CODE_DIR/bootstrap"
57
-
58
- # 5) 渲染 s.yaml(| 作分隔符,避免 URL/层 ARN 里的 / : 冲突)
59
- sed -e "s|__APP_NAME__|$APP_NAME|g" \
60
- -e "s|__REGION__|$REGION|g" \
61
- -e "s|__FC_RUNTIME__|$FC_RUNTIME|g" \
62
- -e "s|__NODE_LAYER__|$NODE_LAYER|g" \
63
- -e "s|__FC_CPU__|$FC_CPU|g" \
64
- -e "s|__FC_MEMORY__|$FC_MEMORY|g" \
65
- -e "s|__FC_TIMEOUT__|$FC_TIMEOUT|g" \
66
- -e "s|__CODE_DIR__|$CODE_DIR|g" \
67
- -e "s|__FC_ENTRY__|$FC_ENTRY|g" \
68
- -e "s|__SUPABASE_URL__|$SUPABASE_URL|g" \
69
- -e "s|__SUPABASE_KEY__|$SUPABASE_KEY|g" \
70
- "$KIT_DIR/contract/s.yaml.tmpl" > "$EXT_DIR/s.yaml"
71
-
72
- # 6) 部署
73
- echo "::stage::deploy"
74
- echo "==> s deploy ($APP_NAME)"
75
- ( cd "$EXT_DIR" && s deploy -y )
76
-
77
- # 7) 取自定义域名 + 验证
78
- echo "::stage::verify"
79
- DOM="$(aliyun fc GET /2023-03-30/custom-domains --region "$REGION" 2>/dev/null | python3 -c "
80
- import sys,json
81
- d=json.load(sys.stdin)
82
- m=[c['domainName'] for c in d.get('customDomains',[]) if '$APP_NAME' in c.get('domainName','')]
83
- print(m[0] if m else '')")"
84
-
85
- echo ""
86
- echo "=================================================="
87
- if [ -n "$DOM" ]; then
88
- # daemon runner 优先解析这个 marker 作为 prodUrl(避免抠到 s deploy 中间的 FC system_url
89
- # fcapp.run,阿里云对它强制 Content-Disposition: attachment,iframe / 浏览器直访都会变成下载)。
90
- # 必须用 custom domain(<app>.fcv3.<accountId>.cn-hangzhou.fc.devsapp.net)。
91
- echo "::prod-url::http://$DOM"
92
- echo " ✅ 发布完成: http://$DOM"
93
- echo "=================================================="
94
- # verify.sh 失败(非 200 / Content-Disposition)→ exit 非 0,由 set -e 让 publish.sh
95
- # 整体失败 → daemon runner 走 publish-failed 路径 + 回灌 chat 让 assistant 接管修复。
96
- # 之前的 `|| true` 兜底已去掉,理由:线上挂了 prodUrl 仍写盘 = 老板看到"打开线上"按钮
97
- # 但点开 404,不如 fail-loud。
98
- #
99
- # 显式走 bash 解释器调用(不依赖 verify.sh 自己的 +x 权限):
100
- # daemon 调 publish.sh / new-extension.sh 都是 `spawn('bash', [scriptPath, ...])`,所以即使脚本
101
- # +x bit 丢了(历史上有过:OTA 解包 / cp -p 未带 / desktop 旧包 mode 不对)也能跑。但这一行
102
- # 之前是 direct-exec `"$KIT_DIR/scripts/verify.sh"`,OS 会检查 +x —— verify.sh 因此成为唯一
103
- # 暴露 +x 丢失问题的执行点(老板撞到过一次"verify.sh permission denied")。
104
- # 改 bash 调用后永远不再依赖 fs +x bit。
105
- bash "$KIT_DIR/scripts/verify.sh" "http://$DOM"
106
- else
107
- # 域名没拿到 = 部署本身有问题(fc3-domain 未成功),也算失败
108
- echo "❌ 部署完成但未取到自定义域名,检查 fc3-domain 是否成功" >&2
109
- exit 1
110
- fi