云端计算机
本地会话可以把一项编码任务卸载到云端计算机,就像编辑器派出一个云端 Agent:远程任务创建分支,并计划向明确指定的代码托管平台发起 pull request。本地保持响应。花费与推送不会悄悄发生——先写入提议,在你确认之前不会创建沙箱,也不会推送分支。
先提议,再确认
第一条命令写入提议并退出。第二条按 id 确认。TUI 中有同样的两步斜杠命令,codewhale cloud-agent 是 codewhale dispatch 的别名。
codewhale dispatch "open a PR that fixes the flake" --remote github codewhale dispatch --confirm cloud_<id> # the same two steps inside the TUI /dispatch open a PR that fixes the flake --remote github /dispatch confirm cloud_<id>
云端任务作为 kind=cloud 在现有的任务面板上是一等公民。可以在 TUI 或 CLI 中列出、查看和取消:
/jobs list /dispatch list /dispatch show <id> /dispatch cancel <id> codewhale dispatch --list
显式指定托管平台
远程仓库不会被默认当作 GitHub。以平台命名的远程就是该平台;其他远程按 URL 主机判定。如果存在多个平台,请传入 --remote。
- github · cnb · gitee(按远程名)
- 对应平台,与 URL 无关
- origin 或其他 → github.com
- github
- origin 或其他 → cnb.cool
- cnb
- origin 或其他 → gitee.com
- gitee
启用 Daytona 计算机
凭证只存在于进程环境或 Codewhale 密钥存储中——绝不写进 config.toml 或 models.toml,也绝不提交到仓库。
- 创建 API 密钥
- 在 Daytona 控制台的 API keys 页面。
- 为本次会话导出
export DAYTONA_API_KEY=…;如需非默认端点,可选设置DAYTONA_API_URL。- 或一次性保存
- 存入 Codewhale 密钥槽
daytona(OS 钥匙串或 $CODEWHALE_HOME 密钥文件)。也接受CWC_DAYTONA_TOKEN别名。
安装了 daytona CLI 并不等于有凭证。codewhale dispatch --status 和不带参数的 /dispatch 会分别报告 CLI 是否存在与凭证是否存在。
缺失即拒绝的规则
- 未确认
- 写入
proposed任务;命令成功退出;不调用 Daytona;不推送任何内容。 - 已确认但无凭证
- 写入
refused任务;命令失败退出;不存在沙箱。 - 已确认且有凭证
- 创建 Daytona 沙箱,并以任务 id 和平台打标签。此版本不会声称任何 GitHub、CNB 或 Gitee 的 PR 地址;缺少平台令牌时同样拒绝。
谁可以派发
托管 Agent 界面使用同一个 Codewhale 会员身份认证——即 codewhale login 的账户会话。会员资格决定云端 Agent,而不是本地派发:只要有 Daytona 与托管平台凭证,`codewhale dispatch` 无需账户即可运行。提供商品牌保持内部不可见,安装和运行本地 Runtime 完全不需要账户。
尚未实现
- 实时查看
- 正在运行的沙箱的日志跟随。
- 真正的取消
- 从任务面板销毁付费的 Daytona 沙箱。
- 自动决定
- Codewhale 可以提议派发,但不能自己确认自己的提议。
- 远程执行器
- 真正创建分支并发起 pull request 的 Agent。
源文档:docs/DAYTONA_CLOUD_DISPATCH.md、docs/CODEWHALE_AGENT.md · 修改时请同步更新 docs-map.ts。