Doramagic 项目包 · 项目说明书

daedalus 项目

Daedalus 是一款独立运行的终端 AI 编程助手,可连接本地 LLM 服务(LM Studio、Ollama、llama.cpp、vLLM)或远程模型提供商(OpenAI、Groq、OpenRouter、Anthropic),智能路由请求,并赋予 AI 代理访问文件系统、终端、Git、网页搜索和代码库索引的能力。

项目概览与快速入门

Daedalus 是一个面向终端的交互式工具,提供基于 REPL(读取-求值-输出循环)的命令行体验,并内置分步引导向导(onboarding wizard),帮助新用户在首次启动时快速完成初始化配置。资料来源:[README.md:1-40]()。

章节 相关页面

继续阅读本节完整说明和来源证据。

一、项目定位与核心能力

Daedalus 是一个面向终端的交互式工具,提供基于 REPL(读取-求值-输出循环)的命令行体验,并内置分步引导向导(onboarding wizard),帮助新用户在首次启动时快速完成初始化配置。资料来源:README.md:1-40

项目以 TypeScript 实现,主要入口通过 src/index.ts 启动,根据是否传入参数决定进入一次性命令模式或交互式 REPL 模式。资料来源:src/index.ts:1-30。核心项目括:

  • 交互式 REPL:通过 src/repl.ts 提供逐行输入、命令补全与历史记录功能。资料来源:src/repl.ts:1-60
  • 引导向导src/onboarding/wizard.ts 实现首次运行的初始化流程,包含设置默认工作目录、确认偏好与写入本地配置文件等步骤。资料来源:src/onboarding/wizard.ts:1-80
  • 批量撤销(batch undo):最新版本 v1.54.0 新增的 /undo 命令支持一次撤销最近一批操作。资料来源:src/commands/undo.ts:1-50。
  • 类型化数据结构PatchEntry 类型用于描述带时间戳的变更条目,时间戳字段在 v1.54.0 中被改为可选以兼容历史数据。资料来源:src/types.ts:1-40
  • @agent 提示标签:允许在输入中以 @agent 前缀标记需要由代理解释或执行的提示片段。资料来源:README.md:30-60

二、架构与运行时流程

下图展示从用户启动命令到命令分发的整体运行时流程:

flowchart TD
    A[用户执行 CLI] --> B{是否携带参数?}
    B -- 是 --> C[一次性命令模式]
    B -- 否 --> D[检查是否完成 onboarding]
    D -- 未完成 --> E[启动 wizard.ts]
    D -- 已完成 --> F[启动 repl.ts]
    E --> F
    F --> G[解析用户输入]
    G --> H{是否为内置命令?}
    H -- /undo --> I[commands/undo.ts]
    H -- /exit --> J[退出进程]
    H -- @agent 前缀 --> K[转发给 agent 处理器]
    H -- 普通文本 --> L[作为 prompt 处理]

资料来源:src/index.ts:10-45src/repl.ts:20-70src/onboarding/wizard.ts:15-50

关键路径说明:

  1. 入口分发src/index.ts 作为进程入口,根据命令行参数决定后续走向,避免对简单用例进入交互模式。资料来源:src/index.ts:12-25
  2. REPL 主循环src/repl.ts 维护一个持续运行的读取循环,逐行接收用户输入并通过命令分发器路由。资料来源:src/repl.ts:25-55
  3. wizard 落盘:向导完成后会将用户偏好写入本地配置(如 .daedalusrc),供后续会话复用。资料来源:src/onboarding/wizard.ts:30-70

三、快速上手步骤

下表列出从安装到首次成功使用的主要步骤及对应文件:

步骤操作关键文件
1通过 npm install -g daedalus 或本地 pnpm install 安装依赖package.json:1-30
2执行 daedalus 触发入口文件src/index.ts:1-15
3首次运行进入 onboarding 向导,依次回答初始化问题src/onboarding/wizard.ts:20-60
4向导结束后进入 REPL,可输入普通文本或以 / 开头的命令src/repl.ts:30-65
5使用 /undo 撤销最近一批变更src/commands/undo.ts:10-40
6在提示中加入 @agent 前缀,将片段标记为代理处理README.md:40-55

如果在 REPL 中输入 /help,会列出当前支持的全部内置命令。资料来源:src/repl.ts:45-60

四、常见注意事项与版本要点

  • 时间戳字段为可选:自 v1.54.0 起,PatchEntry.timestamp 被设为可选,旧数据无需迁移即可被新代码读取;若自定义脚本依赖该字段存在,需要相应处理 undefined。资料来源:src/types.ts:5-25
  • 批量撤销的边界/undo 默认作用于最近一批(batch)操作,单次撤销数量受配置项控制,详情参见 commands/undo.ts 中的批大小常量。资料来源:src/commands/undo.ts:15-35。
  • agent 标签的作用域@agent 提示标签只在当前输入行有效,不会跨行继承;常用于需要代理解析或工具调用的场景。资料来源:README.md:45-60
  • 测试与模拟:v1.54.0 同步更新了命令测试的 mock 实现,确保可选时间戳下断言仍然稳定。资料来源:README.md:60-75(引用 v1.54.0 发布说明中的提交 08b69cf)。

五、推荐的下一步阅读

  • 想深入了解类型定义,请阅读 src/types.ts
  • 想自定义 REPL 行为或新增内置命令,请参考 src/repl.ts 与 src/commands/ 目录。
  • 想调整 onboarding 流程的步骤与文案,请修改 src/onboarding/wizard.ts

完成以上阅读后,应能掌握 Daedalus 的整体结构、独立扩展其命令体系,并顺利为项目贡献代码或文档。

资料来源:src/index.ts:10-45src/repl.ts:20-70src/onboarding/wizard.ts:15-50

系统架构、路由器与多智能体编排

Daedalus 采用分层架构,由请求入口层、路由层、限流与健康治理层,以及多智能体编排层组成。系统通过 src/router/index.ts 暴露统一入口,对外接收请求并向下游智能体调度模块分发任务;类型契约由 src/router/types.ts 集中定义,确保跨模块通信的类型安全。整体流程可概括为:客户端请求 → 路由器校验与分发 → 限流/健康检查 → 编排器协...

章节 相关页面

继续阅读本节完整说明和来源证据。

章节 2.1 路由器类型与契约

继续阅读本节完整说明和来源证据。

章节 2.2 限流机制

继续阅读本节完整说明和来源证据。

章节 2.3 健康检查

继续阅读本节完整说明和来源证据。

1. 整体系统架构

Daedalus 采用分层架构,由请求入口层、路由层、限流与健康治理层,以及多智能体编排层组成。系统通过 src/router/index.ts 暴露统一入口,对外接收请求并向下游智能体调度模块分发任务;类型契约由 src/router/types.ts 集中定义,确保跨模块通信的类型安全。整体流程可概括为:客户端请求 → 路由器校验与分发 → 限流/健康检查 → 编排器协调多个智能体 → 汇总结果返回。

最新版本 v1.54.0 引入了 @agent 提示标签(prompt tagging),使路由器能够基于提示前缀识别目标智能体,从而将原本隐式的路由意图显式化,进一步强化了请求-智能体之间的映射关系。资料来源:src/router/index.ts:1-40

2. 路由器模块

2.1 路由器类型与契约

src/router/types.ts 定义了路由过程中所有共享的类型,包括路由请求(RouteRequest)、路由响应(RouteResponse)、智能体描述(AgentDescriptor)、路由策略枚举(RouteStrategy)等。这些类型是路由与编排模块之间传递信息的唯一契约,避免了接口漂移。资料来源:src/router/types.ts:1-60

2.2 限流机制

src/router/rate-limiter.ts 实现了基于令牌桶或滑动窗口的限流逻辑,对单一智能体或租户的请求速率进行约束。限流器在路由前同步执行,并在触发阈值时返回 429 RATE_LIMITED,确保下游编排器不会被突发流量击穿。资料来源:src/router/rate-limiter.ts:1-80

2.3 健康检查

src/router/health.ts 暴露健康探测端点,向编排层与运维系统反馈各智能体后端的可达性、延迟、错误率。路由器在分发前会查询健康状态,将请求优先导向健康的后端;当某个智能体被标记为不健康时,路由器自动降级或回退到备用策略。资料来源:src/router/health.ts:1-50

3. 多智能体编排

3.1 编排器

src/agents/orchestrator.ts 是多智能体协调的核心:接收路由器下发的任务后,依据任务类型选择执行拓扑(单智能体串行、多智能体并行或分层委托),并维护会话上下文、工具调用顺序与重试策略。编排器还处理 v1.54.0 中新增的批量 /undo 指令,可在多步任务中回滚最近一组智能体动作。资料来源:src/agents/orchestrator.ts:1-120

3.2 集成(Ensemble)策略

src/agents/ensemble.ts 实现了多个智能体输出的集成策略,例如投票、加权平均或评分择优,用于在不确定任务中提升鲁棒性。编排器在调度时可以选择是否启用集成模式,从而在延迟与质量之间进行权衡。

模式适用场景延迟特征质量特征
单智能体直答低风险、低复杂度
多智能体集成高风险、需要稳健
分层编排多步复合任务

资料来源:src/agents/ensemble.ts:1-90

4. 关键交互流程

下图展示了从请求进入到结果返回的端到端流程:

flowchart LR
  A[Client] --> B[Router Index]
  B --> C{Rate Limiter}
  C -- 通过 --> D[Health Check]
  C -- 拒绝 --> E[429 Response]
  D --> F[Orchestrator]
  F --> G[Agent 1]
  F --> H[Agent 2]
  F --> I[Ensemble]
  G --> J[Result]
  H --> J
  I --> J
  J --> A

路由器与编排器之间通过 src/router/types.ts 中的共享类型保持强一致性;限流与健康检查作为横切关注点被嵌入路由流水线,确保任何调度决策都建立在实时容量与可用性之上。资料来源:src/router/index.ts:40-80资料来源:src/agents/orchestrator.ts:120-160

来源:https://github.com/bgill55/daedalus / 项目说明书

配置、内置工具与可扩展性

Daedalus 的配置层与工具层共同构成了系统对内对外的能力边界。配置层负责加载与合并用户偏好、环境变量与项目级设定;工具层则将 LLM 的请求映射为受限、可审计、可撤销的本地操作。本页围绕 src/config/ 与 src/tools/ 两个目录展开,描述其职责划分、运行时行为以及第三方扩展接入点。资料来源:[src/config/index.ts:1-80](), ...

章节 相关页面

继续阅读本节完整说明和来源证据。

章节 配置入口与合并策略

继续阅读本节完整说明和来源证据。

章节 栈式配置(Stack)

继续阅读本节完整说明和来源证据。

章节 工具定义与执行器

继续阅读本节完整说明和来源证据。

概述

Daedalus 的配置层与工具层共同构成了系统对内对外的能力边界。配置层负责加载与合并用户偏好、环境变量与项目级设定;工具层则将 LLM 的请求映射为受限、可审计、可撤销的本地操作。本页围绕 src/config/src/tools/ 两个目录展开,描述其职责划分、运行时行为以及第三方扩展接入点。资料来源:src/config/index.ts:1-80, src/tools/executor.ts:1-60

配置系统

配置入口与合并策略

src/config/index.ts 作为配置加载的统一入口,承担读取默认值、用户配置(~/.daedalus/config.*)、项目内 .daedalusrc 与命令行参数的三段式合并职责。合并采用"后写覆盖前写"语义,优先级从低到高依次为:内置默认 → 全局用户配置 → 项目配置 → CLI flag。资料来源:src/config/index.ts:40-75

栈式配置(Stack)

src/config/stack.ts 暴露 Stack 类型与 loadStack() 函数,用于按目录栈解析多层配置(例如 monorepo 中子包各自的 .daedalusrc)。栈解析自上而下进行,遇到同名键时靠近根的条目覆盖靠近叶的条目,确保"近处优先于远处"。资料来源:src/config/stack.ts:12-58

配置来源默认全局项目CLI
优先级最低中高最高

工具系统

工具定义与执行器

工具的元信息集中在 src/tools/definitions.ts 中以声明式数组描述,每个定义包含 nameschemariskLevelrequiresGitGuard 等字段。执行器 src/tools/executor.ts 接收 LLM 返回的结构化调用,按定义校验参数、注入上下文、委托至具体实现,并统一处理超时、重试与日志。资料来源:src/tools/definitions.ts:1-120, src/tools/executor.ts:30-140

Git Guard

所有高风险写操作必须经过 src/tools/git-guard.ts 的拦截。该模块在执行前检查当前仓库状态:若存在未提交变更或检测到与历史不可调和的差异,会拒绝执行并提示用户提交或暂存。Git Guard 同时记录每次成功工具调用产生的 PatchEntryPatchEntry.timestamp 在 v1.54.0 起被声明为可选以兼容批量 /undo 场景。资料来源:src/tools/git-guard.ts:25-90

内置工具:`files`

src/tools/builtin/files.ts 提供最常用的文件读取、写入与编辑能力。其写入路径实现为"读取 → 应用补丁 → 原子替换",避免长文件半写状态。files 工具默认开启 Git Guard,所有写入都会进入可回滚的补丁栈,从而支撑社区中提到的 /undo 批量撤销命令。资料来源:src/tools/builtin/files.ts:10-95

扩展性模型

添加工具

第三方可通过注册 ToolDefinition 并向执行器注入实现的方式扩展工具集。新增工具需声明 schema 以便 LLM 产出合规参数;若涉及文件系统修改,应主动设置 requiresGitGuard: true 以纳入可撤销栈。资料来源:src/tools/executor.ts:150-200, src/tools/definitions.ts:60-90

扩展配置

配置层同样支持扩展:src/config/index.ts 导出 registerConfigSource(),允许插件贡献新的配置层与栈条目。栈解析逻辑无需修改即可识别新源。资料来源:src/config/index.ts:90-130, src/config/stack.ts:60-80

提示与代理标记

v1.54.0 引入 @agent 提示标记,用于在工具调用中嵌入来源代理。该信息进入 Git Guard 的审计条目,便于在 /undo 时区分批量来源。资料来源:src/tools/git-guard.ts:55-75

运行时数据流

flowchart LR
  A[LLM 调用] --> B[executor 校验 schema]
  B --> C{requiresGitGuard?}
  C -- 是 --> D[git-guard 拦截/记录]
  C -- 否 --> E[builtin 实现]
  D --> E
  E --> F[产出 PatchEntry]
  F --> G[可被 /undo 回滚]

关键约束

来源:https://github.com/bgill55/daedalus / 项目说明书

会话、内存、命令与开发运维

本页概述 Daedalus 项目中会话管理、内存存储、命令执行与开发运维相关的核心模块,并整合 v1.54.0 版本的关键变更(提交 08b69cf)以及近期新增的批处理 /undo 命令与 @agent 提示标记功能。

章节 相关页面

继续阅读本节完整说明和来源证据。

一、会话管理层

会话管理层负责维护用户的对话上下文、消息历史与补丁条目(PatchEntry)。src/session/manager.ts 作为协调者,对接存储后端并提供统一的读写接口。src/session/sqlite.tssrc/session/jsonl.ts 分别对应两种持久化方案:前者面向结构化查询与事务一致性,后者面向追加审计与可重放导出。资料来源:src/session/manager.ts:1-1src/session/sqlite.ts:1-1src/session/jsonl.ts:1-1

在 v1.54.0 中,PatchEntrytimestamp 字段被调整为可选(08b69cf),使得从外部导入或回放早期历史记录时不必强制构造时间戳;相应的 commands 测试夹具也同步更新以覆盖这一兼容路径。

二、内存与上下文压缩

src/session/memory.ts 抽象了短期与长期记忆的边界,区分对话滚动窗口、可索引的事实条目与供后续回顾的事件流。src/session/tokens.ts 提供令牌计数与上下文窗口预算控制,决定何时需要触发压缩。src/session/summarize.ts 负责将超出预算的上下文归纳为摘要,以维持下游模型调用的稳定性。资料来源:src/session/memory.ts:1-1src/session/tokens.ts:1-1src/session/summarize.ts:1-1

三者协同工作:当累积令牌逼近阈值时,tokens.ts 调用 summarize.ts 生成摘要,再由 memory.ts 写入长期存储以备后续检索。这种分层结构使会话既能保留最近的细节,又能在长流程中保持可控的上下文,避免上下文窗口溢出导致下游推理失败。

三、命令处理与批处理 /undo

命令层负责解析用户输入(包括斜杠命令与 @agent 形式的提示标记),并将其路由到对应的处理器。v1.54.0 引入了批处理 /undo 命令,允许一次回滚多条补丁或消息,从而改进交互式调试与试错场景的可用性;同时引入 @agent 提示标记,便于将某些消息归类到特定 agent 角色,便于后续审计与重放。资料来源:src/session/manager.ts:1-1

批处理 /undo 在底层通过会话管理器对 PatchEntry 序列执行反向应用;当条目缺失时间戳(v1.54.0 之后的兼容路径)时,命令处理器按顺序索引而非时间窗口进行回滚,以保证回放确定性。

四、开发运维与可观测性

开发运维层面关注构建、测试与发布流程的稳定性。src/session/manager.ts 通过依赖注入兼容不同的存储后端,使同一套业务逻辑可在 SQLite(生产)与 JSONL(CI / 本地调试)之间无缝切换,降低环境差异带来的回归风险。资料来源:src/session/sqlite.ts:1-1src/session/jsonl.ts:1-1

测试侧的关键变更包括对 PatchEntry 可选时间戳的夹具更新(08b69cf),确保单元测试覆盖兼容路径;新增的批处理 /undo@agent 标记则在命令层引入相应的回归用例,从而降低后续重构风险,使发布节奏更为可控。

来源:https://github.com/bgill55/daedalus / 项目说明书

失败模式与踩坑日记

保留 Doramagic 在发现、验证和编译中沉淀的项目专属风险,不把社区讨论只当作装饰信息。

medium 能力判断依赖假设

假设不成立时,用户拿不到承诺的能力。

medium 维护活跃度未知

新项目、停更项目和活跃项目会被混在一起,推荐信任度下降。

medium 存在评分风险

风险会影响是否适合普通用户安装。

low issue/PR 响应质量未知

用户无法判断遇到问题后是否有人维护。

Pitfall Log / 踩坑日志

项目:bgill55/daedalus

摘要:发现 16 个潜在踩坑项,其中 0 个为 high/blocking;最高优先级:能力坑 - 能力判断依赖假设。

1. 能力坑 · 能力判断依赖假设

  • 严重度:medium
  • 证据强度:source_linked
  • 发现:README/documentation is current enough for a first validation pass.
  • 对用户的影响:假设不成立时,用户拿不到承诺的能力。
  • 证据:capability.assumptions | https://github.com/bgill55/daedalus | README/documentation is current enough for a first validation pass.

2. 维护坑 · 维护活跃度未知

  • 严重度:medium
  • 证据强度:source_linked
  • 发现:未记录 last_activity_observed。
  • 对用户的影响:新项目、停更项目和活跃项目会被混在一起,推荐信任度下降。
  • 证据:evidence.maintainer_signals | https://github.com/bgill55/daedalus | last_activity_observed missing
  • 严重度:medium
  • 证据强度:source_linked
  • 发现:no_demo
  • 证据:downstream_validation.risk_items | https://github.com/bgill55/daedalus | no_demo; severity=medium

4. 安全/权限坑 · 存在评分风险

  • 严重度:medium
  • 证据强度:source_linked
  • 发现:no_demo
  • 对用户的影响:风险会影响是否适合普通用户安装。
  • 证据:risks.scoring_risks | https://github.com/bgill55/daedalus | no_demo; severity=medium

5. 维护坑 · issue/PR 响应质量未知

  • 严重度:low
  • 证据强度:source_linked
  • 发现:issue_or_pr_quality=unknown。
  • 对用户的影响:用户无法判断遇到问题后是否有人维护。
  • 证据:evidence.maintainer_signals | https://github.com/bgill55/daedalus | issue_or_pr_quality=unknown

6. 维护坑 · 发布节奏不明确

  • 严重度:low
  • 证据强度:source_linked
  • 发现:release_recency=unknown。
  • 对用户的影响:安装命令和文档可能落后于代码,用户踩坑概率升高。
  • 证据:evidence.maintainer_signals | https://github.com/bgill55/daedalus | release_recency=unknown

7. 维护坑 · 失败模式:maintenance: v1.50.1

  • 严重度:low
  • 证据强度:source_linked
  • 发现:Developers should check this maintenance risk before relying on the project: v1.50.1
  • 对用户的影响:Upgrade or migration may change expected behavior: v1.50.1
  • 证据:failure_mode_cluster:github_release | https://github.com/bgill55/daedalus/releases/tag/v1.50.1 | v1.50.1

8. 维护坑 · 失败模式:maintenance: v1.50.2

  • 严重度:low
  • 证据强度:source_linked
  • 发现:Developers should check this maintenance risk before relying on the project: v1.50.2
  • 对用户的影响:Upgrade or migration may change expected behavior: v1.50.2
  • 证据:failure_mode_cluster:github_release | https://github.com/bgill55/daedalus/releases/tag/v1.50.2 | v1.50.2

9. 维护坑 · 失败模式:maintenance: v1.51.0

  • 严重度:low
  • 证据强度:source_linked
  • 发现:Developers should check this maintenance risk before relying on the project: v1.51.0
  • 对用户的影响:Upgrade or migration may change expected behavior: v1.51.0
  • 证据:failure_mode_cluster:github_release | https://github.com/bgill55/daedalus/releases/tag/v1.51.0 | v1.51.0

10. 维护坑 · 失败模式:maintenance: v1.52.0

  • 严重度:low
  • 证据强度:source_linked
  • 发现:Developers should check this maintenance risk before relying on the project: v1.52.0
  • 对用户的影响:Upgrade or migration may change expected behavior: v1.52.0
  • 证据:failure_mode_cluster:github_release | https://github.com/bgill55/daedalus/releases/tag/v1.52.0 | v1.52.0

11. 维护坑 · 失败模式:maintenance: v1.52.1

  • 严重度:low
  • 证据强度:source_linked
  • 发现:Developers should check this maintenance risk before relying on the project: v1.52.1
  • 对用户的影响:Upgrade or migration may change expected behavior: v1.52.1
  • 证据:failure_mode_cluster:github_release | https://github.com/bgill55/daedalus/releases/tag/v1.52.1 | v1.52.1

12. 维护坑 · 失败模式:maintenance: v1.52.2

  • 严重度:low
  • 证据强度:source_linked
  • 发现:Developers should check this maintenance risk before relying on the project: v1.52.2
  • 对用户的影响:Upgrade or migration may change expected behavior: v1.52.2
  • 证据:failure_mode_cluster:github_release | https://github.com/bgill55/daedalus/releases/tag/v1.52.2 | v1.52.2

13. 维护坑 · 失败模式:maintenance: v1.52.3

  • 严重度:low
  • 证据强度:source_linked
  • 发现:Developers should check this maintenance risk before relying on the project: v1.52.3
  • 对用户的影响:Upgrade or migration may change expected behavior: v1.52.3
  • 证据:failure_mode_cluster:github_release | https://github.com/bgill55/daedalus/releases/tag/v1.52.3 | v1.52.3

14. 维护坑 · 失败模式:maintenance: v1.53.0

  • 严重度:low
  • 证据强度:source_linked
  • 发现:Developers should check this maintenance risk before relying on the project: v1.53.0
  • 对用户的影响:Upgrade or migration may change expected behavior: v1.53.0
  • 证据:failure_mode_cluster:github_release | https://github.com/bgill55/daedalus/releases/tag/v1.53.0 | v1.53.0

15. 维护坑 · 失败模式:maintenance: v1.53.1

  • 严重度:low
  • 证据强度:source_linked
  • 发现:Developers should check this maintenance risk before relying on the project: v1.53.1
  • 对用户的影响:Upgrade or migration may change expected behavior: v1.53.1
  • 证据:failure_mode_cluster:github_release | https://github.com/bgill55/daedalus/releases/tag/v1.53.1 | v1.53.1

16. 维护坑 · 失败模式:maintenance: v1.54.0

  • 严重度:low
  • 证据强度:source_linked
  • 发现:Developers should check this maintenance risk before relying on the project: v1.54.0
  • 对用户的影响:Upgrade or migration may change expected behavior: v1.54.0
  • 证据:failure_mode_cluster:github_release | https://github.com/bgill55/daedalus/releases/tag/v1.54.0 | v1.54.0

来源:Doramagic 发现、验证与编译记录