@clawos-dev/clawd 0.2.516 → 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.
@@ -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')
@@ -21458,13 +21472,15 @@ var DeployRunSchema = external_exports.object({
21458
21472
  }).strict();
21459
21473
  var DeployStateSchema = external_exports.object({
21460
21474
  personaId: external_exports.string().min(1),
21475
+ /** 本机 GitHub 身份(机器级,githubAuth:* 的同一份;上云页顶上那张卡用)。老 daemon 不给(可选只为兼容),UI 缺席时按未知处理 */
21476
+ github: GithubAuthStatusSchema.optional(),
21461
21477
  repo: DeployRepoSchema.optional(),
21462
21478
  file: DeployFileSchema.optional(),
21463
21479
  scan: DeployScanSchema.optional(),
21464
21480
  /** 没仓库时缺席(查不了) */
21465
21481
  secrets: external_exports.array(DeploySecretPresenceSchema).optional(),
21466
21482
  /**
21467
- * 最新那次流水线走到哪了。**缺席是常态**:没推过、gh 查不到、仓库还没有 run,
21483
+ * 最新那次流水线走到哪了。**缺席是常态**:没推过、没授权 GitHub、GitHub 查不到、仓库还没有 run,
21468
21484
  * 都不该让整页打不开——同 `secrets` 的处理。
21469
21485
  */
21470
21486
  run: DeployRunSchema.optional(),
@@ -23869,7 +23885,7 @@ var METHOD_DOCS = {
23869
23885
  },
23870
23886
  // ---- deploy:*(persona 上云:persona 目录 = git 仓库工作树,发布 = 推送触发仓库流水线)----
23871
23887
  "deploy:start": {
23872
- summary: "\u5BF9\u67D0\u4E2A persona \u8D77\u4E00\u6B21\u4E0A\u4E91\u626B\u63CF\u3002**\u6CA1\u4ED3\u5E93\u5148\u5EFA\u4ED3**\uFF08gh repo create\uFF0C\u5EFA\u5728\u7EC4\u7EC7\u4E0B\u3001\u79C1\u6709\u3001\u63A8\u9996\u4E2A\u63D0\u4EA4\uFF09\uFF0C\u518D\u8D77 persona-butler \u7684\u626B\u63CF\u4F1A\u8BDD\uFF0C\u7ED3\u679C\u5199\u8FDB persona \u76EE\u5F55\u7684 .clawd/deploy.json \uFF08\u73AF\u5883\u6E05\u5355\uFF0C\u8FDB\u4ED3\u5E93\uFF09\u4E0E .clawd/deploy-scan.json\uFF08\u8BC1\u636E\uFF0C\u4E0D\u8FDB\u4ED3\u5E93\uFF09\u3002\u5DF2\u7ECF\u5728\u626B\u7684\u8BDD\u539F\u6837\u8FD4\u56DE\u3001\u4E0D\u8D77\u7B2C\u4E8C\u4E2A\u626B\u63CF\u4F1A\u8BDD\uFF1Bowner-only",
23888
+ summary: "\u5BF9\u67D0\u4E2A persona \u8D77\u4E00\u6B21\u4E0A\u4E91\u626B\u63CF\u3002**\u6CA1\u4ED3\u5E93\u5148\u5EFA\u4ED3**\uFF08GitHub REST \u5EFA\u5728\u7EC4\u7EC7\u4E0B\u3001\u79C1\u6709\uFF0Cgit \u63A8\u9996\u4E2A\u63D0\u4EA4\uFF1Btoken \u6765\u81EA\u672C\u673A git \u7684\u8EAB\u4EFD\uFF0C\u6CA1\u6388\u6743\u5148\u62D2\uFF09\uFF0C\u518D\u8D77 persona-butler \u7684\u626B\u63CF\u4F1A\u8BDD\uFF0C\u7ED3\u679C\u5199\u8FDB persona \u76EE\u5F55\u7684 .clawd/deploy.json \uFF08\u73AF\u5883\u6E05\u5355\uFF0C\u8FDB\u4ED3\u5E93\uFF09\u4E0E .clawd/deploy-scan.json\uFF08\u8BC1\u636E\uFF0C\u4E0D\u8FDB\u4ED3\u5E93\uFF09\u3002\u5DF2\u7ECF\u5728\u626B\u7684\u8BDD\u539F\u6837\u8FD4\u56DE\u3001\u4E0D\u8D77\u7B2C\u4E8C\u4E2A\u626B\u63CF\u4F1A\u8BDD\uFF1Bowner-only",
23873
23889
  args: DeployPersonaArgsSchema
23874
23890
  },
23875
23891
  "deploy:get": {
@@ -23881,7 +23897,7 @@ var METHOD_DOCS = {
23881
23897
  args: DeployPatchArgsSchema
23882
23898
  },
23883
23899
  "deploy:putSecret": {
23884
- summary: "\u628A\u4E00\u6761\u51ED\u636E\u7684\u503C\u5199\u8FDB\u4ED3\u5E93\u7684 GitHub Secrets\uFF08gh secret set\uFF0C\u503C\u8D70 stdin\uFF09\u3002**\u8FD9\u662F\u503C\u552F\u4E00\u7684\u5165\u53E3**\uFF1A\u5165\u53C2\u4E0D\u8FDB\u65E5\u5FD7\u3001\u54CD\u5E94\u4E0D\u56DE\u663E\u503C\u3001\u672C\u673A\u4E0D\u843D\u76D8\u3002env \u540D\u5FC5\u987B\u662F\u8BE5\u51ED\u636E\u5728\u6E05\u5355\u91CC\u58F0\u660E\u8FC7\u7684\uFF1Bowner-only",
23900
+ summary: "\u628A\u4E00\u6761\u51ED\u636E\u7684\u503C\u5199\u8FDB\u4ED3\u5E93\u7684 GitHub Secrets\uFF08GitHub REST\uFF0C\u503C\u7528\u4ED3\u5E93\u516C\u94A5\u5C01\u7BB1\u540E\u4E0A\u4F20\uFF09\u3002**\u8FD9\u662F\u503C\u552F\u4E00\u7684\u5165\u53E3**\uFF1A\u5165\u53C2\u4E0D\u8FDB\u65E5\u5FD7\u3001\u54CD\u5E94\u4E0D\u56DE\u663E\u503C\u3001\u672C\u673A\u4E0D\u843D\u76D8\u3002env \u540D\u5FC5\u987B\u662F\u8BE5\u51ED\u636E\u5728\u6E05\u5355\u91CC\u58F0\u660E\u8FC7\u7684\uFF1Bowner-only",
23885
23901
  args: DeployPutSecretArgsSchema
23886
23902
  },
23887
23903
  "deploy:reportFinding": {
@@ -23897,9 +23913,22 @@ var METHOD_DOCS = {
23897
23913
  args: DeployPersonaArgsSchema
23898
23914
  },
23899
23915
  "deploy:rerunJob": {
23900
- summary: "\u539F\u6837\u91CD\u8DD1\u6700\u65B0\u90A3\u6761\u6D41\u6C34\u7EBF\u91CC\u5931\u8D25\u7684\u67D0\u4E00\u6BB5\uFF08gh run 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",
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",
23901
23917
  args: DeployRerunJobArgsSchema
23902
23918
  },
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
23927
+ },
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
23931
+ },
23903
23932
  // ---- cloud:connectors:*(云 persona 卡片上的连接器;design 2026-09-11-mcp-connector §3.8)----
23904
23933
  "cloud:connectors:list": {
23905
23934
  summary: "\u4E91\u4E0A persona \u5361\u7247\u4E0A\u7684\u8FDE\u63A5\u5668\u533A\uFF1A\u8FD9\u4E2A persona \u58F0\u660E\u7684\u3001**\u8981\u4F7F\u7528\u8005\u672C\u4EBA\u6388\u6743\u7684**\u8FDE\u63A5\u5668\u5404\u81EA\u8FDE\u6CA1\u8FDE\u4E0A\uFF08connected / missing / reauth\uFF09\u3001\u6309\u94AE\u662F\u5173\u8054\uFF08OAuth\uFF0C\u5E26\u73B0\u7B97\u7684 authUrl\uFF09\u8FD8\u662F\u7C98\u8D34 API key\uFF08\u5E26\u8981\u586B\u7684\u53D8\u91CF\uFF09\u3002daemon \u62FF gateway \u767B\u8BB0\u884C + \u672C\u673A\u767B\u5F55\u51ED\u8BC1\u5411\u4E2D\u5FC3\u4EE3\u67E5\uFF0C\u51ED\u8BC1\u4E0D\u51FA ws\uFF1Bowner-only",
@@ -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
- - **本机**:让用户把一个有 `repo` 权限、账号在 `ottin4ttc` 组织里的 GitHub PAT 写进 `~/.clawd/secrets/github.env`(一行 `GITHUB_TOKEN=…`),然后**新开一条对话**(凭据在会话起的时候渲进去)
69
- - **云上**:让用户在 persona 卡片上「关联」GitHub(或「填写」token),完成后**新开一条对话**
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 实测)。本机把 PAT 放 ~/.clawd/secrets/github.env(`GITHUB_TOKEN=…`);云上按连接器规则由部署者选「关联」(OAuth,中心注入 Bearer)或「填写」。值本身随 OTA 下发的边界与收敛方向见 doc/glossary/persona-cloud.md。",
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 → 本机让老板把 GitHub PAT 写进 `~/.clawd/secrets/github.env`(`GITHUB_TOKEN=…`),云上让老板在 persona 卡片关联 GitHub;两种都要**新开一条对话**才生效(账号要在 `ottin4ttc` 组织里)
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`
@@ -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
- - **本机**:让用户把一个有 `repo` 权限、账号在 `ottin4ttc` 组织里的 GitHub PAT 写进 `~/.clawd/secrets/github.env`(一行 `GITHUB_TOKEN=…`),然后**新开一条对话**(凭据在会话起的时候渲进去)
69
- - **云上**:让用户在 persona 卡片上「关联」GitHub(或「填写」token),完成后**新开一条对话**
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}` 占位由 daemon 从本机凭据表(~/.clawd/secrets/github.env)渲进 0600 产物的 headers,云上由部署者选「关联」或「填写」;为什么必须是占位见 persona-app-builder/.mcp.json 的说明。",
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 → 本机让老板把 PAT 写进 `~/.clawd/secrets/github.env`(`GITHUB_TOKEN=…`),云上让老板在 persona 卡片关联 GitHub,然后**新开一条对话**
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