概述
以下是在 Cairn fork 版本中开发的一系列功能增强,分享给上游以供参考,欢迎讨论是否有合并的价值。
新增功能
1. 本地运行模式(无需 Docker)
新增 LocalProcessManager,作为 ContainerManager 的无 Docker 替代方案。Worker 直接通过 subprocess 在宿主机上运行,通过 dispatch.yaml 中的 container.runner: 'local' 启用。
- 使用原生 Python 超时处理(无需 GNU timeout)
- 与 ContainerManager 保持相同的文件写入契约,任务代码兼容
- 适合无 Docker 的开发/测试环境
2. 简化 Worker 适配器
重构了 Claude Code 和 Codex 适配器,直接使用本地已认证的 CLI,无需在配置中填写 API Key 或 base_url。
- Claude Code 适配器:使用本地已安装的
claude CLI,通过本地会话认证
- Codex 适配器:使用本地已安装的
codex CLI,provider 配置从本地 config.toml 读取
- Gemini CLI 适配器(新增):使用本地已认证的
gemini CLI,无需 API Key,已注册为新的 WorkerType
3. 统一模型选择字段
本地 CLI Worker 的模型选择现在使用统一的 worker.model 字段,而非各 provider 专属的环境变量(如 GEMINI_MODEL、CODEX_MODEL)。各适配器负责将该字段转换为各 CLI 的 --model 参数。
workers:
- type: claudecode
model: claude-opus-4-5
- type: gemini
model: gemini-2.5-pro
4. i18n 国际化支持(中文/英文)
为 Web UI 添加了完整的国际化支持:
- Alpine.js 中的
t(key) 翻译函数,覆盖 60+ 条 UI 文本
- 列表视图和图谱视图标题栏均有语言切换按钮
- 语言偏好持久化到
localStorage(默认:zh)
- 中文提示词组(
prompts/zh/):全部 5 个系统提示词均已翻译为中文,每个提示词包含明确的语言输出指令
- 通过
dispatch.yaml 中的 prompt_group: 'zh' 切换
5. 项目定时启动
项目现在可以携带可选的 scheduled_start_at 时间戳,使新建或恢复的项目在指定时间前不会被 dispatcher 调度执行。
- UI 默认立即启动;勾选复选框后显示日期时间选择器
- 未引入新的项目状态——
scheduled_start_at 仅作为准入门控
- Dispatcher 在拉取项目详情前,从
/projects 摘要中读取该时间戳
6. 项目目录本地路径
项目目录现在在存储、API 响应、导出、dispatcher 提示词和本地 Worker 执行中都携带一等公民的 local_path 字段。
directory_local_path 设置本地 Worker 进程的工作目录
- 可通过现有目录编辑弹窗修改(与目录名称一起编辑)
- 可选且可清空,不影响未分类项目
7. 项目收藏功能
项目可通过 API 和 UI 标记为收藏:
- 收藏状态持久化到 SQLite(现有项目通过迁移默认为
false)
- 项目列表按收藏优先排序,再按
created_at 排序
- UI 中提供星形图标切换
8. 简洁项目摘要生成
新增 summary 任务类型:服务端和 dispatcher 通过 LLM 调用从项目描述中生成简短的语义标题,存储在项目 facts 中并在 UI 中展示。
9. start.sh 快速启动脚本
新增 start.sh 脚本,便于在本地快速启动 Cairn 服务器和 dispatcher,无需手动输入完整的 uv run 命令。
配置示例
# dispatch.yaml
container:
runner: local # 'local' 或 'docker'
prompt_group: 'zh' # 'en' 或 'zh'
workers:
- type: claudecode
model: claude-opus-4-5
task_types: [reason]
- type: codex
model: o3
task_types: [bootstrap, explore]
- type: gemini
model: gemini-2.5-pro
task_types: [explore]
欢迎就以上任何功能展开讨论,如有意向也可以针对各个功能单独提 PR。
概述
以下是在 Cairn fork 版本中开发的一系列功能增强,分享给上游以供参考,欢迎讨论是否有合并的价值。
新增功能
1. 本地运行模式(无需 Docker)
新增
LocalProcessManager,作为ContainerManager的无 Docker 替代方案。Worker 直接通过 subprocess 在宿主机上运行,通过dispatch.yaml中的container.runner: 'local'启用。2. 简化 Worker 适配器
重构了 Claude Code 和 Codex 适配器,直接使用本地已认证的 CLI,无需在配置中填写 API Key 或
base_url。claudeCLI,通过本地会话认证codexCLI,provider 配置从本地config.toml读取geminiCLI,无需 API Key,已注册为新的WorkerType3. 统一模型选择字段
本地 CLI Worker 的模型选择现在使用统一的
worker.model字段,而非各 provider 专属的环境变量(如GEMINI_MODEL、CODEX_MODEL)。各适配器负责将该字段转换为各 CLI 的--model参数。4. i18n 国际化支持(中文/英文)
为 Web UI 添加了完整的国际化支持:
t(key)翻译函数,覆盖 60+ 条 UI 文本localStorage(默认:zh)prompts/zh/):全部 5 个系统提示词均已翻译为中文,每个提示词包含明确的语言输出指令dispatch.yaml中的prompt_group: 'zh'切换5. 项目定时启动
项目现在可以携带可选的
scheduled_start_at时间戳,使新建或恢复的项目在指定时间前不会被 dispatcher 调度执行。scheduled_start_at仅作为准入门控/projects摘要中读取该时间戳6. 项目目录本地路径
项目目录现在在存储、API 响应、导出、dispatcher 提示词和本地 Worker 执行中都携带一等公民的
local_path字段。directory_local_path设置本地 Worker 进程的工作目录7. 项目收藏功能
项目可通过 API 和 UI 标记为收藏:
false)created_at排序8. 简洁项目摘要生成
新增
summary任务类型:服务端和 dispatcher 通过 LLM 调用从项目描述中生成简短的语义标题,存储在项目 facts 中并在 UI 中展示。9.
start.sh快速启动脚本新增
start.sh脚本,便于在本地快速启动 Cairn 服务器和 dispatcher,无需手动输入完整的uv run命令。配置示例
欢迎就以上任何功能展开讨论,如有意向也可以针对各个功能单独提 PR。