@clawos-dev/clawd 0.2.517 → 0.2.518
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 +27 -22
- package/dist/cli.cjs +283 -194
- package/dist/dispatch/mcp-server.cjs +27 -22
- package/dist/persona-defaults/persona-app-builder/.claude/skills/app-builder-projects/SKILL.md +2 -2
- package/dist/persona-defaults/persona-app-builder/.mcp.json +1 -1
- package/dist/persona-defaults/persona-app-builder/CLAUDE.md +1 -1
- package/dist/persona-defaults/persona-dataclaw-builder/.claude/skills/app-builder-projects/SKILL.md +2 -2
- package/dist/persona-defaults/persona-dataclaw-builder/.mcp.json +1 -1
- package/dist/persona-defaults/persona-dataclaw-builder/CLAUDE.md +1 -1
- package/dist/share-ui/assets/{guest-fV-R3Vmz.js → guest-CqC7os4f.js} +49 -49
- package/dist/share-ui/guest.html +1 -1
- package/package.json +1 -1
|
@@ -21272,6 +21272,20 @@ var ContactHandshakeOkSchema = external_exports.object({
|
|
|
21272
21272
|
grants: external_exports.array(GrantSchema)
|
|
21273
21273
|
});
|
|
21274
21274
|
|
|
21275
|
+
// ../protocol/src/github-auth-schemas.ts
|
|
21276
|
+
var GithubAuthStatusSchema = external_exports.discriminatedUnion("status", [
|
|
21277
|
+
external_exports.object({ status: external_exports.literal("authorized"), login: external_exports.string().min(1), source: external_exports.enum(["git", "file"]) }).strict(),
|
|
21278
|
+
external_exports.object({ status: external_exports.literal("missing") }).strict(),
|
|
21279
|
+
external_exports.object({ status: external_exports.literal("invalid"), message: external_exports.string().min(1) }).strict(),
|
|
21280
|
+
external_exports.object({ status: external_exports.literal("pending"), authUrl: external_exports.string().url() }).strict()
|
|
21281
|
+
]);
|
|
21282
|
+
var GithubAuthAuthorizeArgsSchema = external_exports.object({
|
|
21283
|
+
token: external_exports.string().min(1)
|
|
21284
|
+
}).strict();
|
|
21285
|
+
var GithubAuthOauthStartArgsSchema = external_exports.object({
|
|
21286
|
+
returnTo: external_exports.string().url().optional()
|
|
21287
|
+
}).strict();
|
|
21288
|
+
|
|
21275
21289
|
// ../protocol/src/environment-schemas.ts
|
|
21276
21290
|
var EnvCliSchema = external_exports.object({
|
|
21277
21291
|
// 可执行文件名,装配后要能在 PATH 里直接调到('aliyun' / 's' / 'pnpm' / 'python3')
|
|
@@ -21429,12 +21443,6 @@ var DeployRepoSchema = external_exports.object({
|
|
|
21429
21443
|
/** 本地领先远端几个提交 */
|
|
21430
21444
|
ahead: external_exports.number()
|
|
21431
21445
|
}).strict();
|
|
21432
|
-
var DeployGithubStatusSchema = external_exports.discriminatedUnion("status", [
|
|
21433
|
-
external_exports.object({ status: external_exports.literal("authorized"), login: external_exports.string().min(1), source: external_exports.enum(["git", "file"]) }).strict(),
|
|
21434
|
-
external_exports.object({ status: external_exports.literal("missing") }).strict(),
|
|
21435
|
-
external_exports.object({ status: external_exports.literal("invalid"), message: external_exports.string().min(1) }).strict(),
|
|
21436
|
-
external_exports.object({ status: external_exports.literal("pending"), authUrl: external_exports.string().url() }).strict()
|
|
21437
|
-
]);
|
|
21438
21446
|
var DeploySecretPresenceSchema = external_exports.object({
|
|
21439
21447
|
env: external_exports.string().min(1),
|
|
21440
21448
|
setAt: external_exports.number().optional()
|
|
@@ -21464,8 +21472,8 @@ var DeployRunSchema = external_exports.object({
|
|
|
21464
21472
|
}).strict();
|
|
21465
21473
|
var DeployStateSchema = external_exports.object({
|
|
21466
21474
|
personaId: external_exports.string().min(1),
|
|
21467
|
-
/** 本机 GitHub
|
|
21468
|
-
github:
|
|
21475
|
+
/** 本机 GitHub 身份(机器级,githubAuth:* 的同一份;上云页顶上那张卡用)。老 daemon 不给(可选只为兼容),UI 缺席时按未知处理 */
|
|
21476
|
+
github: GithubAuthStatusSchema.optional(),
|
|
21469
21477
|
repo: DeployRepoSchema.optional(),
|
|
21470
21478
|
file: DeployFileSchema.optional(),
|
|
21471
21479
|
scan: DeployScanSchema.optional(),
|
|
@@ -21510,14 +21518,6 @@ var DeployPutSecretArgsSchema = external_exports.object({
|
|
|
21510
21518
|
// 环境变量名 → 值。key 必须是该 secret 声明过的 env 之一,handler 校验。
|
|
21511
21519
|
values: external_exports.record(external_exports.string(), external_exports.string())
|
|
21512
21520
|
}).strict();
|
|
21513
|
-
var DeployGithubAuthorizeArgsSchema = external_exports.object({
|
|
21514
|
-
personaId: external_exports.string().min(1),
|
|
21515
|
-
token: external_exports.string().min(1)
|
|
21516
|
-
}).strict();
|
|
21517
|
-
var DeployGithubOauthStartArgsSchema = external_exports.object({
|
|
21518
|
-
personaId: external_exports.string().min(1),
|
|
21519
|
-
returnTo: external_exports.string().url().optional()
|
|
21520
|
-
}).strict();
|
|
21521
21521
|
var DeployRerunJobArgsSchema = external_exports.object({
|
|
21522
21522
|
personaId: external_exports.string().min(1),
|
|
21523
21523
|
/** GitHub 的 job databaseId。**是数字**——字符串会在拼命令时静默出错 */
|
|
@@ -23916,13 +23916,18 @@ var METHOD_DOCS = {
|
|
|
23916
23916
|
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\u6216\u51ED\u636E\u8981\u8D70 deploy:release\u3002jobId \u5FC5\u987B\u5C5E\u4E8E\u6700\u65B0\u90A3\u6761 run\uFF1Bowner-only",
|
|
23917
23917
|
args: DeployRerunJobArgsSchema
|
|
23918
23918
|
},
|
|
23919
|
-
|
|
23920
|
-
|
|
23921
|
-
|
|
23919
|
+
// ---- githubAuth:*(本机 GitHub 身份,机器级;spec 2026-09-15-github-auth-unify-design §4.3)----
|
|
23920
|
+
"githubAuth:get": {
|
|
23921
|
+
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",
|
|
23922
|
+
args: NO_ARGS
|
|
23923
|
+
},
|
|
23924
|
+
"githubAuth:oauthStart": {
|
|
23925
|
+
summary: "\u8BBE\u7F6E\u9875\u300C\u5173\u8054 GitHub\u300D\uFF1Adaemon \u5E26\u672C\u673A\u767B\u5F55\u51ED\u8BC1\u5411\u4E2D\u5FC3\u8981\u4E00\u6761 GitHub OAuth \u6388\u6743\u94FE\u63A5\u5E76\u56DE\u5728\u72B6\u6001\uFF08pending\uFF09\u91CC\uFF0C\u9875\u9762\u6253\u5F00\u5B83\uFF1B\u7528\u6237\u5728 GitHub \u70B9\u540C\u610F\u540E\u56DE\u8DF3\u4E2D\u5FC3\uFF0C\u4E2D\u5FC3\u6362\u597D token \u5B58\u4E00\u4EFD\uFF0Cdaemon \u5728\u4E4B\u540E\u7684 githubAuth:get \u91CC\u9886\u56DE\u6765\u5B58\u8FDB\u672C\u673A git\u3002\u4E2D\u5FC3\u5DF2\u6709\u672C\u4EBA\u7684 token \u65F6\u4E0D\u8DF3 GitHub\uFF0C\u76F4\u63A5\u9886\uFF1B\u8981\u767B\u5F55\u98DE\u4E66\uFF1Bowner-only",
|
|
23926
|
+
args: GithubAuthOauthStartArgsSchema
|
|
23922
23927
|
},
|
|
23923
|
-
"
|
|
23924
|
-
summary: "\
|
|
23925
|
-
args:
|
|
23928
|
+
"githubAuth:authorize": {
|
|
23929
|
+
summary: "\u628A\u7528\u6237\u7C98\u7684 GitHub token \u5B58\u6210\u672C\u673A\u8EAB\u4EFD\uFF08\u70B9\u94FE\u63A5\u8D70\u4E0D\u901A\u65F6\u7684\u9000\u8DEF\uFF09\uFF1A\u5148 GET /user \u9A8C\u8BC1\uFF0C\u518D git credential approve \u4EA4\u7ED9 git \u7684 helper \u5B58\uFF08git \u6CA1\u914D helper \u65F6\u9000\u5230\u672C\u673A\u51ED\u636E\u8868 secrets/github.env\uFF09\u3002\u5165\u53C2\u4E0D\u8FDB\u65E5\u5FD7\u3001\u54CD\u5E94\u4E0D\u56DE\u663E token\uFF1Bowner-only",
|
|
23930
|
+
args: GithubAuthAuthorizeArgsSchema
|
|
23926
23931
|
},
|
|
23927
23932
|
// ---- cloud:connectors:*(云 persona 卡片上的连接器;design 2026-09-11-mcp-connector §3.8)----
|
|
23928
23933
|
"cloud:connectors:list": {
|
package/dist/persona-defaults/persona-app-builder/.claude/skills/app-builder-projects/SKILL.md
CHANGED
|
@@ -65,8 +65,8 @@ node <skill>/scripts/list-projects.mjs --root <workdir>
|
|
|
65
65
|
|
|
66
66
|
github MCP 报 401 / 未授权、或 tool 列表里根本没有 `create_repository` / `push_files`:
|
|
67
67
|
|
|
68
|
-
-
|
|
69
|
-
- **云上**:让用户在 persona 卡片上「关联」GitHub
|
|
68
|
+
- **本机**:让用户在 clawd **设置 → 账号**里点「关联 GitHub」(账号要在 `ottin4ttc` 组织里),然后**新开一条对话**(凭据在会话起的时候渲进去)
|
|
69
|
+
- **云上**:让用户在 persona 卡片上「关联」GitHub,完成后**新开一条对话**
|
|
70
70
|
|
|
71
71
|
不要猜别的凭据、不要退回 `gh`、不要把 token 写进任何文件或命令行。
|
|
72
72
|
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
{
|
|
2
|
-
"_comment": "preinstall ship 进 daemon defaults,daemon 启动时 refreshDaemonManagedDirs 把这文件同步到 ~/.clawd*/personas/persona-app-builder/.mcp.json。**这里只有声明,没有值**:`${VAR}` 占位由 daemon 在 spawn 时从凭据表渲进 per-server env / headers(见 daemon/src/persona/mcp-secret-render.ts),渲染产物是另一份 0600 文件、同名 server 压过本文件,所以 agent 在 persona 目录里读不到任何 key。supabase:用 @aliyun-rds/supabase-mcp-server Mode 2 单实例直连(不再用 aliyun AK),底下接阿里云托管 supabase。这三个 env 名不是我们发明的——该包的 commander option 默认值就取 process.env.SUPABASE_URL / SUPABASE_ANON_KEY / SUPABASE_SERVICE_ROLE_KEY,所以不再传 --supabase-* CLI 参数(参数会进 ps 输出,等于没藏)。**不要往这里加 --jwt-secret / SUPABASE_AUTH_JWT_SECRET**:jwt-secret 是该实例的 JWT 签发密钥,拿到它可以自签任意 role/任意 user 的 token(含 service_role),下发出去等于把 anon/service key 的轮换能力一起交出去;而 MCP server 里它唯一的用处是 verify_jwt_secret 这个自检工具报个 found/preview。github:GitHub 官方远程 MCP(spec 2026-09-14-app-builder-github-mcp-design),建仓 / 提交文件都由 agent 按 .claude/skills/app-builder-projects 走它,本机不再依赖 gh CLI。Authorization 走 `${GITHUB_TOKEN}` 占位而不是留空让 Claude Code 自己 OAuth:没占位的 http server 不进 daemon 的渲染产物,只剩 cwd 里这份项目级声明,daemon 起的 headless 会话过不了 Claude Code 的「项目 MCP 待批准」和交互式 OAuth 两关(2026-09-14
|
|
2
|
+
"_comment": "preinstall ship 进 daemon defaults,daemon 启动时 refreshDaemonManagedDirs 把这文件同步到 ~/.clawd*/personas/persona-app-builder/.mcp.json。**这里只有声明,没有值**:`${VAR}` 占位由 daemon 在 spawn 时从凭据表渲进 per-server env / headers(见 daemon/src/persona/mcp-secret-render.ts),渲染产物是另一份 0600 文件、同名 server 压过本文件,所以 agent 在 persona 目录里读不到任何 key。supabase:用 @aliyun-rds/supabase-mcp-server Mode 2 单实例直连(不再用 aliyun AK),底下接阿里云托管 supabase。这三个 env 名不是我们发明的——该包的 commander option 默认值就取 process.env.SUPABASE_URL / SUPABASE_ANON_KEY / SUPABASE_SERVICE_ROLE_KEY,所以不再传 --supabase-* CLI 参数(参数会进 ps 输出,等于没藏)。**不要往这里加 --jwt-secret / SUPABASE_AUTH_JWT_SECRET**:jwt-secret 是该实例的 JWT 签发密钥,拿到它可以自签任意 role/任意 user 的 token(含 service_role),下发出去等于把 anon/service key 的轮换能力一起交出去;而 MCP server 里它唯一的用处是 verify_jwt_secret 这个自检工具报个 found/preview。github:GitHub 官方远程 MCP(spec 2026-09-14-app-builder-github-mcp-design),建仓 / 提交文件都由 agent 按 .claude/skills/app-builder-projects 走它,本机不再依赖 gh CLI。Authorization 走 `${GITHUB_TOKEN}` 占位而不是留空让 Claude Code 自己 OAuth:没占位的 http server 不进 daemon 的渲染产物,只剩 cwd 里这份项目级声明,daemon 起的 headless 会话过不了 Claude Code 的「项目 MCP 待批准」和交互式 OAuth 两关(2026-09-14 实测)。`GITHUB_TOKEN` 是保留变量名 = 当前用户的 GitHub 身份(spec 2026-09-15-github-auth-unify §4.1):本机由 daemon 从机器级身份(设置 → 账号关联,存在 git 的凭据存储;~/.clawd/secrets/github.env 是 git 没配 helper 时的退路)渲进产物;云上由中心从使用者的 GitHub 身份供值、代理时注 Bearer,不填 PAT。值本身随 OTA 下发的边界与收敛方向见 doc/glossary/persona-cloud.md。",
|
|
3
3
|
"mcpServers": {
|
|
4
4
|
"github": {
|
|
5
5
|
"type": "http",
|
|
@@ -43,7 +43,7 @@
|
|
|
43
43
|
- 报错 `already exists / 已存在` → 让老板重选名字
|
|
44
44
|
- 其它失败会**整个回滚**(目录已删),把错误原因告诉老板,修好环境再调一次
|
|
45
45
|
4. 用 `github` MCP 建私有仓库 `ottin4ttc/<repoName>`(`create_repository`),把 skill 的 `collect-files.mjs` 收出来的文件 `push_files` 上去,再用 `record-push.mjs` 记下 `repoUrl` 和远端 commit。**不调 `gh`、不 `git push`**
|
|
46
|
-
- github MCP 报 401 / 未授权、或根本没有这些 tool →
|
|
46
|
+
- github MCP 报 401 / 未授权、或根本没有这些 tool → 本机让老板在 clawd **设置 → 账号**里点「关联 GitHub」,云上让老板在 persona 卡片关联 GitHub;两种都要**新开一条对话**才生效(账号要在 `ottin4ttc` 组织里)
|
|
47
47
|
5. `cd <projectDir>`,装依赖:`server/` 和 `web/` 各跑一次 `pnpm install`
|
|
48
48
|
6. 开发:写业务、用 supabase MCP 建表(见下文「后端」)。复杂任务走 superpowers 节奏,简单任务 TodoWrite 跟踪(分级见下)
|
|
49
49
|
7. **每完成一段就按 skill 推一次**:`collect-files.mjs` → `push_files`(或单文件 `create_or_update_file` / `delete_file`)→ `record-push.mjs`
|
package/dist/persona-defaults/persona-dataclaw-builder/.claude/skills/app-builder-projects/SKILL.md
CHANGED
|
@@ -65,8 +65,8 @@ node <skill>/scripts/list-projects.mjs --root <workdir>
|
|
|
65
65
|
|
|
66
66
|
github MCP 报 401 / 未授权、或 tool 列表里根本没有 `create_repository` / `push_files`:
|
|
67
67
|
|
|
68
|
-
-
|
|
69
|
-
- **云上**:让用户在 persona 卡片上「关联」GitHub
|
|
68
|
+
- **本机**:让用户在 clawd **设置 → 账号**里点「关联 GitHub」(账号要在 `ottin4ttc` 组织里),然后**新开一条对话**(凭据在会话起的时候渲进去)
|
|
69
|
+
- **云上**:让用户在 persona 卡片上「关联」GitHub,完成后**新开一条对话**
|
|
70
70
|
|
|
71
71
|
不要猜别的凭据、不要退回 `gh`、不要把 token 写进任何文件或命令行。
|
|
72
72
|
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
{
|
|
2
|
-
"_comment": "数据查询搭建师:通路 A 直调 dataclaw-service HTTP,不挂任何数据 MCP。daemon refreshDaemonManagedDirs 会把本文件同步到 ~/.clawd/personas/persona-dataclaw-builder/.mcp.json。github:GitHub 官方远程 MCP,建仓 / 提交文件由 agent 按 .claude/skills/app-builder-projects 走它(与 persona-app-builder 同一份 skill),本机不依赖 gh CLI。`${GITHUB_TOKEN}`
|
|
2
|
+
"_comment": "数据查询搭建师:通路 A 直调 dataclaw-service HTTP,不挂任何数据 MCP。daemon refreshDaemonManagedDirs 会把本文件同步到 ~/.clawd/personas/persona-dataclaw-builder/.mcp.json。github:GitHub 官方远程 MCP,建仓 / 提交文件由 agent 按 .claude/skills/app-builder-projects 走它(与 persona-app-builder 同一份 skill),本机不依赖 gh CLI。`${GITHUB_TOKEN}` 是保留变量名 = 当前用户的 GitHub 身份(spec 2026-09-15-github-auth-unify §4.1):本机由 daemon 从机器级身份(设置 → 账号关联)渲进 0600 产物的 headers,云上由中心从使用者的 GitHub 身份供值;为什么必须是占位见 persona-app-builder/.mcp.json 的说明。",
|
|
3
3
|
"mcpServers": {
|
|
4
4
|
"github": {
|
|
5
5
|
"type": "http",
|
|
@@ -15,7 +15,7 @@
|
|
|
15
15
|
1. 主动问「老板想看什么数据的页?」(一句话,别长 prompt)。顺带提醒:稍后需要老板给一把 dataclaw apikey(向刘浩索取;只要冒号后的 secret 段)
|
|
16
16
|
2. 老板描述需求 → **反问「项目叫什么名字」**(不擅自命名,kebab-case)
|
|
17
17
|
3. `list-projects.mjs` 查重名,再 `createProject({ name })`:建目录 + scaffold(dataclaw 起手 app)。返回 `{ name, projectDir, slug, repoName }`,**`projectDir` 就是项目目录绝对路径,记住它**。重名报 `already exists` → 让老板换名
|
|
18
|
-
4. `github` MCP `create_repository` 建 `ottin4ttc/<repoName>` 私有仓库 → `collect-files.mjs` → `push_files` → `record-push.mjs --repo-url …`。github MCP 报未授权 / 没这些 tool →
|
|
18
|
+
4. `github` MCP `create_repository` 建 `ottin4ttc/<repoName>` 私有仓库 → `collect-files.mjs` → `push_files` → `record-push.mjs --repo-url …`。github MCP 报未授权 / 没这些 tool → 本机让老板在 clawd **设置 → 账号**里点「关联 GitHub」,云上让老板在 persona 卡片关联 GitHub,然后**新开一条对话**
|
|
19
19
|
5. `cd <projectDir>`,`server/` 和 `web/` 各跑一次 `pnpm install`
|
|
20
20
|
6. 写入 apikey:向老板要 dataclaw apikey(只要冒号后的 secret 段),写进 `<projectDir>/server/.env`:
|
|
21
21
|
```bash
|