Slug: ai
功能介绍
AI 能力层统一管理 Tower 中所有的 AI 调用,提供 5 种核心 AI 能力:
| 能力 | 说明 | 触发时机 | 建议模型 |
|---|---|---|---|
| 助手聊天 | 多轮流式对话,支持图片输入 | 用户在助手面板发起对话 | 当前默认 |
| 小总结 | 50 字执行摘要 | 任务停止时自动生成 | Haiku 4.5 |
| 大总结 Dreaming | 结构化洞察 JSON | 任务完成(DONE)时自动生成 | Sonnet 4.6 |
| 项目分析 | 分析目录结构生成描述 | 点击项目「生成描述」按钮 | Sonnet 4.6 |
| 任务执行 | PTY 终端交互式执行 | 启动任务执行 | 当前默认 |
不同能力建议使用不同模型(Haiku 适合轻量级摘要,Sonnet 适合深度分析),后续支持为每种能力独立配置模型。
详细说明
AI 能力调用点
| 能力 | 文件 | 调用方式 |
|---|---|---|
| 助手聊天 | api/internal/assistant/chat/route.ts | Agent SDK query() |
| 小总结 | lib/claude-session.ts → generateSummaryFromLog | Agent SDK aiQuery() |
| 大总结(Dreaming) | lib/claude-session.ts → generateDreamingInsight | Agent SDK aiQuery() |
| 项目分析 | actions/project-actions.ts → analyzeProjectDirectory | Agent SDK aiQuery() |
| 任务执行 | actions/agent-actions.ts → startPtyExecution | PTY spawn CLI |
CLI Adapter 接口(TODO)
当前硬编码 Claude Code,后续接入第二个 CLI 时抽象:
spawn(cwd, args, env) — 启动 CLI 进程(PTY)
resume(sessionId) — 恢复会话
continue() — 继续最近会话
getSessionId() — 获取会话 ID
getHooks() / installHooks() — Hook 配置注册
buildEnvOverrides(taskId) — 环境变量注入文件清单
核心库
| 文件 | 说明 |
|---|---|
lib/claude-session.ts | AI 统一入口:aiQuery()、generateSummaryFromLog()、generateDreamingInsight() |
lib/assistant-sessions.ts | 助手会话管理(localStorage 注册表) |
lib/assistant-constants.ts | ASSISTANT_SESSION_KEY 等常量 |
lib/assistant-message-converter.ts | SDK 消息 → UI 消息格式转换 |
lib/build-multimodal-prompt.ts | 多模态 prompt 构建(文本+图片) |
lib/execution-summary.ts | 执行后摘要和 Dreaming 洞察生成 |
lib/cli-test.ts | CLI Adapter 环境检测 |
Server Actions
| 文件 | 函数 | 说明 |
|---|---|---|
actions/agent-actions.ts | startPtyExecution | 启动 Claude CLI PTY |
actions/agent-actions.ts | resumePtyExecution | 恢复会话 |
actions/agent-actions.ts | continueLatestPtyExecution | 继续最近会话 |
actions/cli-profile-actions.ts | getDefaultCliProfile | 获取活跃 CLI 配置 |
actions/prompt-actions.ts | getPrompts / createPrompt | Prompt 模板管理 |
actions/project-actions.ts | analyzeProjectDirectory | AI 项目分析 |
API Routes
| 路由 | 说明 |
|---|---|
/api/internal/assistant/chat | 助手聊天 SSE 流式 |
/api/internal/assistant/sessions | 会话消息检索 |
/api/internal/assistant/images | 图片服务 |
/api/adapters/test | CLI Adapter 连接测试 |
数据模型
| 模型 | 说明 |
|---|---|
CliProfile | CLI 命令、参数、环境变量配置。command 仅允许 claude/claude-code |
AgentConfig | Agent 特定配置,唯一约束 (agent, configName) |
AgentPrompt | Prompt 模板,支持全局/workspace 级别 |
TaskExecution | 执行记录,含 sessionId、summary、gitLog、insightNoteId |
组件
| 组件 | 说明 |
|---|---|
settings/cli-profile-config.tsx | CLI Profile 配置 UI |
settings/cli-adapter-tester.tsx | CLI 连接测试 UI |
settings/prompts-config.tsx | Prompt 模板管理 UI |
settings/ai-tools-config.tsx | Agent 配置 UI |
约束
CliProfile.command仅白名单claude、claude-codebaseArgs禁止 shell 元字符;&|$()envVars禁止危险 key:PATH,LD_PRELOAD,NODE_OPTIONS等- 环境变量通过
envOverrides注入,禁止修改process.env
