-
Notifications
You must be signed in to change notification settings - Fork 3
Engines.zh CN
🌐 Language: English | 中文
KinetAios 内置三代 Direct 引擎(V1/V2/V3),加上走插件系统的 CLI 引擎,每个会话独立选。切换引擎 = 清空跨引擎上下文(几套引擎的历史格式不互通,Direct 存 directHistory: ChatMsg[],Claude/Codex 各有 session id 走 --resume)。在此之上,插件引擎(SDK v3)能把任意外部 CLI agent 注册为 plugin:<name> —— 见 Plugins。
| 引擎 | 实现 | 工具系统 | 适用 |
|---|---|---|---|
| Direct V1 (Kaios) | 内置 ReAct loop,直连 LLM provider |
tools.ts 内置工具 + MCP |
问答、小修改,精确控成本控步骤 |
| Direct V2 | 在 V1 工具上做 Plan-Execute-Verify-Judge | 同 V1 + 任务清单卡 | 带验证的多文件改动 |
| Direct V3 | 意图路由 → fast/std/deep;deep = DAG | 同 V1 + 分析模式 | 数据分析、跨文件重构、不确定用哪个时 |
| Claude Code (插件开关) | spawn claude -p --output-format stream-json
|
Claude Code 自带(Read/Write/Edit/Bash/Glob/Grep) | 已习惯 Claude Code CLI 的流 |
| Codex (插件开关) | spawn codex exec --json
|
Codex 自带 | 已习惯 Codex CLI 的流 |
| DeepSeek Harness (插件引擎) | spawn dsh CLI headless profile |
该 CLI 自带 | DeepSeek 一次性任务 |
| plugin: | spawn 插件声明的任意 CLI | 该 CLI 自带 | 想接入其它 CLI agent(零代码,纯 manifest) |
CLI 引擎需要先在本机装好 CLI。它们由插件开关控制:在 ⚙ → 插件 里启用 claude-code / codex 插件,引擎才进下拉。V1/V2/V3 怎么选见 Choose-Engine。
本仓库的内置 ReAct 引擎。详见 Direct-Engine。
-
协议:
OpenAI 兼容或Anthropic,二选一。Provider 在src/main/glm.ts。 - 流式:SSE,双向 OpenAI ↔ Anthropic 转换。
-
工具:同轮内连续只读工具(
read_file/grep/glob/web_fetch/recall_memory/git_diff)并发;写工具(shell/write_file/edit_file/dispatch_agent)串行。结果按tool_call_id配对回填。 -
历史:
conv.directHistory: ChatMsg[],跨轮持久化,FTS5 同步进history表供recall_memory。 -
超长兜底:反应式 trim —— API 报 context-too-long 时砍半预算重试本轮一次(
AgentLoop.ts:44)。 -
摘要压缩:超 30K 时把头部调一次 LLM 压成摘要,保留尾部完整轮次(
compactHistory)。
详见 Direct-Engine、Tools-and-MCP。
src/main/DirectV2Engine.ts。复杂任务先进规划阶段(只读探查,产出分步计划),再按计划逐步执行,每步可带验证命令(类型检查/测试),失败自动重试(每步 ≤3 次,最多重新规划 2 次)。任务清单实时渲染为聊天流里的清单卡(todo_write)。太简单的任务自动退化为普通模式。
src/main/V3/。零成本规则路由,按查询自动选三条路径之一:
| 路径 | 触发 | 行为 |
|---|---|---|
fast |
查文档、简单问答 | 单轮直出,零额外开销 |
std |
修 bug、写功能、数据分析 | 多轮工具执行 |
deep |
跨文件重构、架构级变更 | 规划为 DAG,无依赖节点并行 |
deep 路径增强(v3.8.0):
-
后台执行 —— deep 任务提交
JobManager(src/main/JobManager.ts),会话立即解锁可继续对话;期间实时显示运行节点数与成本,完成自动回贴。开关:⚙ →「复杂任务后台执行(V3)」(默认开)。 -
节点级 checkpoint —— 每个 DAG 节点完成即落 checkpoint;任务被杀/失败/重启后从最后断点继续,不再整图作废。带断点的 job 重启后标
paused,一键恢复。 -
同层受限并行 —— 同层只读节点按
dagConcurrency(缺省 3)分批并行;写节点保持串行防竞态。 -
分析模式 —— 任务描述里出现数据文件(csv/xlsx/db)时,V3 自动加载
data-analysis工作法:先摸 schema 再下结论、计算交给工具(python/sqlite)不心算、中间产物落盘、结论可溯源、关键数字交叉验证。状态栏出现「📊 分析模式」即已生效。
逐任务对比见 Choose-Engine。
spawn claude -p --output-format stream-json --verbose --include-partial-messages。逐行解析 NDJSON。
| 行为 | 实现 |
|---|---|
| 工具白名单 | --allowedTools Read,Edit,Write,Bash,Glob,Grep |
| 沙箱 |
--permission-mode plan/acceptEdits/bypassPermissions(按 setting 的 sandbox) |
| 工作目录 | --add-dir <cwd> |
| 恢复会话 |
--resume <session_id>(存 conv.engineSessionId,每 turn 后更新) |
| 注入记忆/规则 | --append-system-prompt <rules+context+memory> |
事件模型见 engines.ts:264 附近的 ClaudeCodeEngine。init 抓 session id,assistant 抓 tool_use,user 抓 tool_result,result 抓 cost + done/error。
spawn codex exec --json --skip-git-repo-check -C <cwd> --add-dir <cwd> -s <sandbox>。逐行解析 JSONL。
| 行为 | 实现 |
|---|---|
| 沙箱 |
-s read-only/workspace-write/danger-full-access(按 setting 的 sandbox) |
| 恢复会话 | resume <session_id> |
| 注入记忆/规则 | codex 没有 --append-system-prompt flag → rules + context + memory 前置拼到 prompt |
事件模型见 engines.ts:349 附近的 CodexEngine。
任意外部 CLI agent 都能用纯 manifest 插件注册成引擎 —— 零 JS。引擎以 plugin:<name> 出现在下拉里,跑在与 Claude Code / Codex 同一套 CliEngineAdapter 骨架上(spawn → 逐行解析 → resume → 退出兜底),由 plugin.json 的声明式 spec 配置:
-
bin— 要 spawn 的 CLI(解析方式同 claude/codex) -
protocol— 四选一:ndjson/jsonl-claude/jsonl-codex/plain(行→事件预设) -
resume— 哪个事件字段携带 session id + 续接方式(--resume <id>flag 或 codex 式子命令) -
inject— persona/规则/记忆走--append-system-prompt式 flag 或前置拼 prompt
细节与可跑示例(裸 git 包装成引擎)见 Plugins。
npm-global 装的 CLI 是 .cmd shim(Windows)。Node 不允许直接 spawn .cmd / .bat(CVE-2024-27980),所以 engines.ts:resolveBin 把 .cmd/.bat 走 shell: true,真 .exe / unix bin 直接 spawn(干净的 argv、更小的 prompt 注入面)。
还有 binEnv() 给 PATH 补常见安装目录(%APPDATA%\npm / ~/.npm-global / /opt/homebrew/bin 等),因为 GUI 启动的 Electron 默认拿到的 PATH 很稀疏,会找不到 claude / codex。
abort 时:Windows 上 .cmd shim 把 cmd.exe 作为直接子进程,child.kill() 只杀 cmd.exe,真正的 claude/codex 还在跑(继续计费!)—— 所以走 taskkill /PID <pid> /T /F 杀整棵树。Unix 直接 child.kill()。
切换 conv.engine 时:
-
directHistory保留(切回 Direct 还能继续) -
engineSessionId清掉(对应引擎的 CLI session id 失效) - 跨引擎的对话上下文不互通(各引擎各存各的)
设计上有意如此:三套引擎的世界模型、工具集、状态机都不一样,硬塞会让用户混淆。
不管哪个引擎,以下三块每轮都注入(在 TaskManager.runTurn 拼):
-
memoryBlock —— 长期记忆(
extractMemories抽出来的用户事实)。Direct 走 history[0] user 消息;Claude 走--append-system-prompt;Codex 拼到 prompt 头。详见 Long-Term-Memory。 -
rulesBlock ——
KINET.md(app UI 维护的项目规则) -
contextBlock ——
KINET-CONTEXT.md(项目级背景知识)
Direct 还额外注入 AGENTS.md / CLAUDE.md(约定大于配置)。详见 Rules-and-Context。
- 想用 GLM / DeepSeek / OpenAI / Anthropic 直连 + 自定义工具 → Direct(快任务 V1,多步任务 V3)
- 已经付了 Claude / OpenAI 的订阅,想用本地 CLI 的体验 → Claude Code / Codex
- 不确定 → 默认 V3,它自己路由 fast/std/deep。逐任务对比见 Choose-Engine