Skip to content

feat: 本地运行模式、Gemini/Codex 适配器、i18n 国际化、定时启动及项目管理增强 #7

@Shennnnnnnnnn

Description

@Shennnnnnnnnn

概述

以下是在 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_MODELCODEX_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。

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type
    No fields configured for issues without a type.

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions