@sinm/kai 1.9.2 → 1.10.0-alpha

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (133) hide show
  1. package/README.md +183 -111
  2. package/dist-cli/kai-cli.js +9858 -7392
  3. package/dist-electron/renderer/assets/{_baseUniq-CsQsIo3h.js → _baseUniq-TWYIHSYo.js} +1 -1
  4. package/dist-electron/renderer/assets/_baseUniq-TWYIHSYo.js.gz +0 -0
  5. package/dist-electron/renderer/assets/{arc-CnDy2qlp.js → arc-CC0XHE9s.js} +1 -1
  6. package/dist-electron/renderer/assets/arc-CC0XHE9s.js.gz +0 -0
  7. package/dist-electron/renderer/assets/{architectureDiagram-Q4EWVU46-7xdcupg1.js → architectureDiagram-Q4EWVU46-Db99kceI.js} +5 -5
  8. package/dist-electron/renderer/assets/architectureDiagram-Q4EWVU46-Db99kceI.js.gz +0 -0
  9. package/dist-electron/renderer/assets/{blockDiagram-DXYQGD6D-NHzIf6KM.js → blockDiagram-DXYQGD6D-BiHxnzw6.js} +6 -6
  10. package/dist-electron/renderer/assets/blockDiagram-DXYQGD6D-BiHxnzw6.js.gz +0 -0
  11. package/dist-electron/renderer/assets/{c4Diagram-AHTNJAMY-C805hJap.js → c4Diagram-AHTNJAMY-DXZwk3Wh.js} +2 -2
  12. package/dist-electron/renderer/assets/c4Diagram-AHTNJAMY-DXZwk3Wh.js.gz +0 -0
  13. package/dist-electron/renderer/assets/{channel-yHIQhPj2.js → channel-BfTEjFDO.js} +1 -1
  14. package/dist-electron/renderer/assets/{chunk-4BX2VUAB-BW86W7DE.js → chunk-4BX2VUAB-BbzW3sxS.js} +1 -1
  15. package/dist-electron/renderer/assets/{chunk-4TB4RGXK-CiAgH5vp.js → chunk-4TB4RGXK-Bp0IvYVD.js} +5 -5
  16. package/dist-electron/renderer/assets/chunk-4TB4RGXK-Bp0IvYVD.js.gz +0 -0
  17. package/dist-electron/renderer/assets/{chunk-55IACEB6-CLYAwM0u.js → chunk-55IACEB6--tHMS1Fu.js} +1 -1
  18. package/dist-electron/renderer/assets/{chunk-EDXVE4YY-SvJyEgqT.js → chunk-EDXVE4YY-C37AT76M.js} +1 -1
  19. package/dist-electron/renderer/assets/chunk-EDXVE4YY-C37AT76M.js.gz +0 -0
  20. package/dist-electron/renderer/assets/{chunk-FMBD7UC4-CTX3SpFe.js → chunk-FMBD7UC4-BmPFBz66.js} +1 -1
  21. package/dist-electron/renderer/assets/{chunk-OYMX7WX6-yuicy5fD.js → chunk-OYMX7WX6-BK02zRf3.js} +3 -3
  22. package/dist-electron/renderer/assets/chunk-OYMX7WX6-BK02zRf3.js.gz +0 -0
  23. package/dist-electron/renderer/assets/{chunk-QZHKN3VN-8uwLkZ2k.js → chunk-QZHKN3VN-DQblzVJ3.js} +1 -1
  24. package/dist-electron/renderer/assets/{chunk-YZCP3GAM-BOYtvFmP.js → chunk-YZCP3GAM-BBLOUO8q.js} +1 -1
  25. package/dist-electron/renderer/assets/chunk-YZCP3GAM-BBLOUO8q.js.gz +0 -0
  26. package/dist-electron/renderer/assets/{classDiagram-6PBFFD2Q-DdqJHrBR.js → classDiagram-6PBFFD2Q-GoIp7NtF.js} +6 -6
  27. package/dist-electron/renderer/assets/{classDiagram-v2-HSJHXN6E-DdqJHrBR.js → classDiagram-v2-HSJHXN6E-GoIp7NtF.js} +6 -6
  28. package/dist-electron/renderer/assets/{clone-CohPIibk.js → clone-DsJHPXSI.js} +1 -1
  29. package/dist-electron/renderer/assets/{cose-bilkent-S5V4N54A-B1jjJbx2.js → cose-bilkent-S5V4N54A-Bx3Btq3m.js} +1 -1
  30. package/dist-electron/renderer/assets/cose-bilkent-S5V4N54A-Bx3Btq3m.js.gz +0 -0
  31. package/dist-electron/renderer/assets/{dagre-KV5264BT-Cr1UGppV.js → dagre-KV5264BT-UjO7D81D.js} +6 -6
  32. package/dist-electron/renderer/assets/dagre-KV5264BT-UjO7D81D.js.gz +0 -0
  33. package/dist-electron/renderer/assets/{diagram-5BDNPKRD-OQB6O17M.js → diagram-5BDNPKRD-Qnftph66.js} +6 -6
  34. package/dist-electron/renderer/assets/diagram-5BDNPKRD-Qnftph66.js.gz +0 -0
  35. package/dist-electron/renderer/assets/{diagram-G4DWMVQ6-B992OGq3.js → diagram-G4DWMVQ6-hAHLQAYy.js} +6 -6
  36. package/dist-electron/renderer/assets/diagram-G4DWMVQ6-hAHLQAYy.js.gz +0 -0
  37. package/dist-electron/renderer/assets/{diagram-MMDJMWI5-sfDZyGEc.js → diagram-MMDJMWI5-B3L74K7n.js} +5 -5
  38. package/dist-electron/renderer/assets/diagram-MMDJMWI5-B3L74K7n.js.gz +0 -0
  39. package/dist-electron/renderer/assets/{diagram-TYMM5635-SAOHwHvV.js → diagram-TYMM5635-D-tCCI8y.js} +5 -5
  40. package/dist-electron/renderer/assets/diagram-TYMM5635-D-tCCI8y.js.gz +0 -0
  41. package/dist-electron/renderer/assets/{erDiagram-SMLLAGMA-B3lOLLG4.js → erDiagram-SMLLAGMA-BaVMPxLl.js} +4 -4
  42. package/dist-electron/renderer/assets/erDiagram-SMLLAGMA-BaVMPxLl.js.gz +0 -0
  43. package/dist-electron/renderer/assets/{flowDiagram-DWJPFMVM-DM8NWY2I.js → flowDiagram-DWJPFMVM-DZpn2G84.js} +6 -6
  44. package/dist-electron/renderer/assets/flowDiagram-DWJPFMVM-DZpn2G84.js.gz +0 -0
  45. package/dist-electron/renderer/assets/{ganttDiagram-T4ZO3ILL-Ck9cM-4F.js → ganttDiagram-T4ZO3ILL-BoSD-fWq.js} +2 -2
  46. package/dist-electron/renderer/assets/ganttDiagram-T4ZO3ILL-BoSD-fWq.js.gz +0 -0
  47. package/dist-electron/renderer/assets/{gitGraphDiagram-UUTBAWPF-BbTlLKCx.js → gitGraphDiagram-UUTBAWPF-Bsenwzpz.js} +6 -6
  48. package/dist-electron/renderer/assets/gitGraphDiagram-UUTBAWPF-Bsenwzpz.js.gz +0 -0
  49. package/dist-electron/renderer/assets/{graph-SD4HIKJw.js → graph-CAbnGHSS.js} +2 -2
  50. package/dist-electron/renderer/assets/graph-CAbnGHSS.js.gz +0 -0
  51. package/dist-electron/renderer/assets/{index-CHaHfSLU.js → index-3-RVvi2_.js} +4686 -3039
  52. package/dist-electron/renderer/assets/index-3-RVvi2_.js.gz +0 -0
  53. package/dist-electron/renderer/assets/{index-CP1VBw7a.css → index-CmcRKBhc.css} +2066 -1449
  54. package/dist-electron/renderer/assets/index-CmcRKBhc.css.gz +0 -0
  55. package/dist-electron/renderer/assets/{infoDiagram-42DDH7IO-DyxtiwFL.js → infoDiagram-42DDH7IO-Dv3v-UTu.js} +4 -4
  56. package/dist-electron/renderer/assets/{ishikawaDiagram-UXIWVN3A-BUrLWa0T.js → ishikawaDiagram-UXIWVN3A-C0dzSTBj.js} +1 -1
  57. package/dist-electron/renderer/assets/ishikawaDiagram-UXIWVN3A-C0dzSTBj.js.gz +0 -0
  58. package/dist-electron/renderer/assets/{journeyDiagram-VCZTEJTY-BMmtCdj3.js → journeyDiagram-VCZTEJTY-qIcnACCb.js} +4 -4
  59. package/dist-electron/renderer/assets/journeyDiagram-VCZTEJTY-qIcnACCb.js.gz +0 -0
  60. package/dist-electron/renderer/assets/{kanban-definition-6JOO6SKY-OQBC48Se.js → kanban-definition-6JOO6SKY-BE7SkXi1.js} +2 -2
  61. package/dist-electron/renderer/assets/kanban-definition-6JOO6SKY-BE7SkXi1.js.gz +0 -0
  62. package/dist-electron/renderer/assets/{layout-D2Rz390M.js → layout-B9EpUKCa.js} +4 -4
  63. package/dist-electron/renderer/assets/layout-B9EpUKCa.js.gz +0 -0
  64. package/dist-electron/renderer/assets/{linear-CQh0Mysb.js → linear-CCyL68xZ.js} +1 -1
  65. package/dist-electron/renderer/assets/linear-CCyL68xZ.js.gz +0 -0
  66. package/dist-electron/renderer/assets/{min-DlS-oIeB.js → min-BYrYl2E1.js} +2 -2
  67. package/dist-electron/renderer/assets/min-BYrYl2E1.js.gz +0 -0
  68. package/dist-electron/renderer/assets/{mindmap-definition-QFDTVHPH-aTTTq6Nc.js → mindmap-definition-QFDTVHPH-CSoYt4jB.js} +3 -3
  69. package/dist-electron/renderer/assets/mindmap-definition-QFDTVHPH-CSoYt4jB.js.gz +0 -0
  70. package/dist-electron/renderer/assets/{pieDiagram-DEJITSTG-n1e04sg0.js → pieDiagram-DEJITSTG-DpGySR6o.js} +6 -6
  71. package/dist-electron/renderer/assets/pieDiagram-DEJITSTG-DpGySR6o.js.gz +0 -0
  72. package/dist-electron/renderer/assets/{quadrantDiagram-34T5L4WZ-C-xW2Cqp.js → quadrantDiagram-34T5L4WZ-63fCuOAt.js} +2 -2
  73. package/dist-electron/renderer/assets/quadrantDiagram-34T5L4WZ-63fCuOAt.js.gz +0 -0
  74. package/dist-electron/renderer/assets/{requirementDiagram-MS252O5E-pnNGwrTw.js → requirementDiagram-MS252O5E-BJPp47kS.js} +3 -3
  75. package/dist-electron/renderer/assets/requirementDiagram-MS252O5E-BJPp47kS.js.gz +0 -0
  76. package/dist-electron/renderer/assets/{sankeyDiagram-XADWPNL6-CbT_Xb_y.js → sankeyDiagram-XADWPNL6-DTh3hGLh.js} +1 -1
  77. package/dist-electron/renderer/assets/{sankeyDiagram-XADWPNL6-CbT_Xb_y.js.gz → sankeyDiagram-XADWPNL6-DTh3hGLh.js.gz} +0 -0
  78. package/dist-electron/renderer/assets/{sequenceDiagram-FGHM5R23-a-9UfTJq.js → sequenceDiagram-FGHM5R23-0cxZIN2-.js} +3 -3
  79. package/dist-electron/renderer/assets/sequenceDiagram-FGHM5R23-0cxZIN2-.js.gz +0 -0
  80. package/dist-electron/renderer/assets/{stateDiagram-FHFEXIEX-LL3JhZd4.js → stateDiagram-FHFEXIEX-kMxLUpUn.js} +8 -8
  81. package/dist-electron/renderer/assets/stateDiagram-FHFEXIEX-kMxLUpUn.js.gz +0 -0
  82. package/dist-electron/renderer/assets/{stateDiagram-v2-QKLJ7IA2-BQfhbm-p.js → stateDiagram-v2-QKLJ7IA2-BZxbk8dA.js} +4 -4
  83. package/dist-electron/renderer/assets/{timeline-definition-GMOUNBTQ-DeBW6Or5.js → timeline-definition-GMOUNBTQ-Br1nJvtz.js} +2 -2
  84. package/dist-electron/renderer/assets/timeline-definition-GMOUNBTQ-Br1nJvtz.js.gz +0 -0
  85. package/dist-electron/renderer/assets/{vennDiagram-DHZGUBPP-DEq9JF1i.js → vennDiagram-DHZGUBPP-DDvLCVqL.js} +1 -1
  86. package/dist-electron/renderer/assets/vennDiagram-DHZGUBPP-DDvLCVqL.js.gz +0 -0
  87. package/dist-electron/renderer/assets/{wardley-RL74JXVD-ChJWklYY.js → wardley-RL74JXVD-8Clcfhfi.js} +3 -3
  88. package/dist-electron/renderer/assets/wardley-RL74JXVD-8Clcfhfi.js.gz +0 -0
  89. package/dist-electron/renderer/assets/{wardleyDiagram-NUSXRM2D-CIROAFHI.js → wardleyDiagram-NUSXRM2D-8FAhGkRL.js} +5 -5
  90. package/dist-electron/renderer/assets/wardleyDiagram-NUSXRM2D-8FAhGkRL.js.gz +0 -0
  91. package/dist-electron/renderer/assets/{xychartDiagram-5P7HB3ND-BedH4Z65.js → xychartDiagram-5P7HB3ND-BowiCO1z.js} +2 -2
  92. package/dist-electron/renderer/assets/xychartDiagram-5P7HB3ND-BowiCO1z.js.gz +0 -0
  93. package/dist-electron/renderer/index.html +2 -2
  94. package/package.json +2 -2
  95. package/dist-electron/renderer/assets/_baseUniq-CsQsIo3h.js.gz +0 -0
  96. package/dist-electron/renderer/assets/arc-CnDy2qlp.js.gz +0 -0
  97. package/dist-electron/renderer/assets/architectureDiagram-Q4EWVU46-7xdcupg1.js.gz +0 -0
  98. package/dist-electron/renderer/assets/blockDiagram-DXYQGD6D-NHzIf6KM.js.gz +0 -0
  99. package/dist-electron/renderer/assets/c4Diagram-AHTNJAMY-C805hJap.js.gz +0 -0
  100. package/dist-electron/renderer/assets/chunk-4TB4RGXK-CiAgH5vp.js.gz +0 -0
  101. package/dist-electron/renderer/assets/chunk-EDXVE4YY-SvJyEgqT.js.gz +0 -0
  102. package/dist-electron/renderer/assets/chunk-OYMX7WX6-yuicy5fD.js.gz +0 -0
  103. package/dist-electron/renderer/assets/chunk-YZCP3GAM-BOYtvFmP.js.gz +0 -0
  104. package/dist-electron/renderer/assets/cose-bilkent-S5V4N54A-B1jjJbx2.js.gz +0 -0
  105. package/dist-electron/renderer/assets/dagre-KV5264BT-Cr1UGppV.js.gz +0 -0
  106. package/dist-electron/renderer/assets/diagram-5BDNPKRD-OQB6O17M.js.gz +0 -0
  107. package/dist-electron/renderer/assets/diagram-G4DWMVQ6-B992OGq3.js.gz +0 -0
  108. package/dist-electron/renderer/assets/diagram-MMDJMWI5-sfDZyGEc.js.gz +0 -0
  109. package/dist-electron/renderer/assets/diagram-TYMM5635-SAOHwHvV.js.gz +0 -0
  110. package/dist-electron/renderer/assets/erDiagram-SMLLAGMA-B3lOLLG4.js.gz +0 -0
  111. package/dist-electron/renderer/assets/flowDiagram-DWJPFMVM-DM8NWY2I.js.gz +0 -0
  112. package/dist-electron/renderer/assets/ganttDiagram-T4ZO3ILL-Ck9cM-4F.js.gz +0 -0
  113. package/dist-electron/renderer/assets/gitGraphDiagram-UUTBAWPF-BbTlLKCx.js.gz +0 -0
  114. package/dist-electron/renderer/assets/graph-SD4HIKJw.js.gz +0 -0
  115. package/dist-electron/renderer/assets/index-CHaHfSLU.js.gz +0 -0
  116. package/dist-electron/renderer/assets/index-CP1VBw7a.css.gz +0 -0
  117. package/dist-electron/renderer/assets/ishikawaDiagram-UXIWVN3A-BUrLWa0T.js.gz +0 -0
  118. package/dist-electron/renderer/assets/journeyDiagram-VCZTEJTY-BMmtCdj3.js.gz +0 -0
  119. package/dist-electron/renderer/assets/kanban-definition-6JOO6SKY-OQBC48Se.js.gz +0 -0
  120. package/dist-electron/renderer/assets/layout-D2Rz390M.js.gz +0 -0
  121. package/dist-electron/renderer/assets/linear-CQh0Mysb.js.gz +0 -0
  122. package/dist-electron/renderer/assets/min-DlS-oIeB.js.gz +0 -0
  123. package/dist-electron/renderer/assets/mindmap-definition-QFDTVHPH-aTTTq6Nc.js.gz +0 -0
  124. package/dist-electron/renderer/assets/pieDiagram-DEJITSTG-n1e04sg0.js.gz +0 -0
  125. package/dist-electron/renderer/assets/quadrantDiagram-34T5L4WZ-C-xW2Cqp.js.gz +0 -0
  126. package/dist-electron/renderer/assets/requirementDiagram-MS252O5E-pnNGwrTw.js.gz +0 -0
  127. package/dist-electron/renderer/assets/sequenceDiagram-FGHM5R23-a-9UfTJq.js.gz +0 -0
  128. package/dist-electron/renderer/assets/stateDiagram-FHFEXIEX-LL3JhZd4.js.gz +0 -0
  129. package/dist-electron/renderer/assets/timeline-definition-GMOUNBTQ-DeBW6Or5.js.gz +0 -0
  130. package/dist-electron/renderer/assets/vennDiagram-DHZGUBPP-DEq9JF1i.js.gz +0 -0
  131. package/dist-electron/renderer/assets/wardley-RL74JXVD-ChJWklYY.js.gz +0 -0
  132. package/dist-electron/renderer/assets/wardleyDiagram-NUSXRM2D-CIROAFHI.js.gz +0 -0
  133. package/dist-electron/renderer/assets/xychartDiagram-5P7HB3ND-BedH4Z65.js.gz +0 -0
package/README.md CHANGED
@@ -2,32 +2,34 @@
2
2
 
3
3
  > 开启思考。不是帮你做事,是帮你想得更深、更远。
4
4
 
5
- KAi 是一款**多 AI Agent 协作桌面应用**。你可以创建多个拥有独立人格、记忆和技能的 Agent,让它们在你的桌面上像一个真正的团队一样协作——讨论、交接、互审、分工。
5
+ KAi 是一款**多 AI Agent 协作桌面应用**。你创建的每个 Agent 都有独立的记忆、工作空间和能力边界——它们像一支真正的团队一样协作。
6
+
7
+ **一个人,一支团队。**
6
8
 
7
9
  ## 为什么
8
10
 
9
- 用 ChatGPT 聊天,你得到的是一个无所不能但什么都记不住的通用助手。
11
+ 通用聊天助手的问题不是不聪明,而是没有结构:它什么都能答,却没有稳定身份、长期记忆、职责边界和团队协作。
10
12
 
11
- KAi 不一样。你可以让一个"乔布斯"负责产品思考,一个"Anders Hejlsberg"把控架构,一个"TJ Holowaychuk"写代码,一个"Robert C. Martin"写审查。它们各有各的记忆、工具权限和个性。它们会 @mention 彼此,会交接任务,会监督结果。
12
-
13
- **一个人,一支团队。**
13
+ KAi 的答案是 Agent 团队。你可以让一个「乔布斯」负责产品判断,一个「Anders Hejlsberg」把控类型和架构,一个「TJ Holowaychuk」快速落地,一个「Robert C. Martin」做代码审查。它们各有各的工作空间、记忆、工具和性格;它们会 @mention 彼此,会 handoff,会广播讨论,也会把子任务分派给后台 Agent。
14
14
 
15
15
  ## 特性
16
16
 
17
17
  ### 🧠 Agent 系统
18
18
 
19
- - **独立身份** — 每个 Agent 有自己的名字、头像、个性描述,甚至可以自定义 SOUL(行为准则)
20
- - **持久记忆** — Agent 自主维护 MEMORY.md(长期记忆)和每日笔记,跨会话记住上下文
21
- - **工作空间** — 每个 Agent 拥有独立的文件工作空间(`~/.kai/agents/{id}/workspace/`)
22
- - **Skill 技能系统** 可扩展的技能包,Agent 按需加载,提升专业领域表现
19
+ - **独立身份** — 每个 Agent 有自己的名字、头像、描述和 SOUL(行为准则)。
20
+ - **持久记忆** — Agent 自主维护 `MEMORY.md` 和每日笔记,跨会话保留上下文。
21
+ - **独立工作空间** — 每个 Agent 拥有自己的文件工作区:`~/.kai/agents/{agentId}/workspace/`。
22
+ - **能力边界**可为 Agent 分配 Skills、MCP 服务、禁用工具和监督参数。
23
23
 
24
24
  ### 👥 多 Agent 协作
25
25
 
26
- - **群聊模式**多个 Agent 在同一个对话中协作,支持 sequential / parallel / broadcast 策略
27
- - **Handoff 交接** — Agent 之间可以主动交接任务,附带原因和上下文摘要
28
- - **@mention** — 在回复中 `@AgentName` 触发自动交接
29
- - **Supervisor 监督** 指定一个 Agent 作为监督者,评估执行结果是否达成目标
30
- - **子任务分派**Agent 可以创建前台/后台子任务,委托给其他 Agent 执行
26
+ - **Session 化对话** 单聊和群聊都以 Session 为主概念;一个群组可拥有多个隔离 Session。
27
+ - **单聊多 Session** — 同一个 Agent 可并行开启多个讨论,适合把不同任务、分支思路和长期陪跑拆开。
28
+ - **Handoff 交接** Agent 可以主动交接任务,并附带原因和上下文摘要。
29
+ - **@mention** — 在消息中 @ 指定 Agent,触发协作或路由。
30
+ - **Broadcast 广播** 一次问题并行询问多个 Agent,聚合不同专业判断。
31
+ - **子任务分派** — Agent 可以创建前台或后台任务,委托其他 Agent 执行。
32
+ - **Supervisor 监督** — 指定监督者评估执行结果,决定继续、重试、跳过、修订或终止。
31
33
 
32
34
  ### 🛠 内置工具
33
35
 
@@ -36,44 +38,62 @@ Agent 开箱即用的能力:
36
38
  | 工具 | 功能 |
37
39
  |------|------|
38
40
  | **Shell** | 执行终端命令 |
39
- | **Read/Write/Edit File** | 读写和精确编辑本地文件 |
41
+ | **File Tools** | 安全读写和精确编辑本地文件 |
40
42
  | **Web Search** | 网络搜索 |
41
43
  | **Web Fetch** | 抓取和解析网页内容 |
42
- | **Database** | 查询应用数据库(只读) |
44
+ | **Database** | 只读查询应用数据库 |
43
45
  | **Scheduler** | 创建和管理定时任务 |
44
- | **Skill** | 加载和执行技能包 |
45
- | **MCP** | 通过 Model Context Protocol 连接外部工具服务器 |
46
+ | **Skill** | 按需加载技能包 |
47
+ | **MCP** | 通过 Model Context Protocol 连接外部工具服务 |
48
+ | **Image** | 图片识别与图片生成 |
46
49
 
47
50
  ### 💬 聊天体验
48
51
 
49
- - 流式输出,实时渲染 Markdown / 代码高亮 / 推理过程
50
- - 支持图片附件
51
- - 明暗主题自适应
52
- - 中英文国际化(i18n)
52
+ - 流式输出,实时渲染 Markdown / 代码高亮 / 推理过程。
53
+ - 支持图片、文件附件和多模态消息。
54
+ - 工具调用、任务结果、广播结果以结构化卡片展示,并展示状态与耗时。
55
+ - 群聊与单聊都支持顶部 Session Tabs:新建、切换、重命名、归档。
56
+ - 快捷回复支持独立 `⚡` 入口;`/` 命令保留给真正的命令。
57
+ - 明暗主题自适应。
58
+ - 中英文国际化(i18n)。
59
+
60
+ ### 🔌 连接与自动化
61
+
62
+ - **模型通道** — 支持主模型、备用模型、自动 fallback 和健康状态记录。
63
+ - **模型能力学习** — 根据真实报错学习上下文窗口 / 最大输出限制,自动修正后重试。
64
+ - **MCP 服务** — 在设置中添加 MCP 服务,并一键应用到指定 Agent。
65
+ - **Bot 接入** — 支持外部频道接入,让 Agent 不只活在桌面窗口里。
66
+ - **远程访问** — 可通过远程入口访问本地 KAi。
67
+ - **定时任务** — 定期触发消息、记忆整理或自动化工作流。
68
+ - **自动更新** — 桌面应用支持检查更新、下载进度和安装更新。
53
69
 
54
70
  ## 技术栈
55
71
 
56
- ```
57
- Electron 40 + React 19 + TypeScript 5
72
+ ```text
73
+ Electron 42 + React 19 + TypeScript 5
58
74
  Vercel AI SDK + SQLite3 + Zustand + CSS Modules
59
- electron-vite + Vitest
75
+ electron-vite + Vitest + Playwright
60
76
  ```
61
77
 
62
- - **主进程**:Agent 执行引擎、IPC、数据库、文件系统、MCP 客户端
63
- - **渲染进程**:React UI,沙箱化运行(`contextIsolation: true`)
64
- - **预加载层**:`contextBridge` 安全桥接
78
+ - **运行形态**:Electron 桌面应用 + CLI + 本地 telemetry dashboard
79
+ - **Core**:Agent / Message / Tool / Skill 等领域逻辑与端口接口。
80
+ - **Adapters**:LLM、MCP、DB、文件存储、工具、调度器、外部频道等具体实现。
81
+ - **Electron Main**:应用启动、IPC、自动更新、崩溃日志、远程访问。
82
+ - **Renderer**:React UI,沙箱化运行(`contextIsolation: true`)。
83
+ - **Preload**:通过 `contextBridge` 暴露受控 API。
84
+ - **CLI**:复用核心链路的命令行入口。
65
85
 
66
86
  ## 快速开始
67
87
 
68
88
  ### 环境要求
69
89
 
70
90
  - Node.js >= 22
71
- - Yarn
91
+ - Yarn 1.x
72
92
 
73
93
  ### 安装
74
94
 
75
95
  ```bash
76
- git clone https://github.com/your-org/kai.git
96
+ git clone https://github.com/pansinm/kai.git
77
97
  cd kai
78
98
  yarn install
79
99
  ```
@@ -81,66 +101,139 @@ yarn install
81
101
  ### 开发
82
102
 
83
103
  ```bash
84
- yarn dev # 启动开发服务器(支持 HMR)
104
+ yarn dev
105
+ ```
106
+
107
+ ### CLI
108
+
109
+ ```bash
110
+ yarn build:cli
111
+ npx @sinm/kai@latest start --port 9529
85
112
  ```
86
113
 
87
- ### 构建
114
+ ### 构建与打包
88
115
 
89
116
  ```bash
90
- yarn build # 构建生产版本
91
- yarn package # 打包为平台安装包(输出到 release/)
117
+ yarn build # 构建 Electron 应用
118
+ yarn package # 打包当前平台安装包,输出到 release/
119
+ yarn build:cli # 构建 CLI
92
120
  ```
93
121
 
94
122
  ### 测试
95
123
 
96
124
  ```bash
97
- yarn test # 运行测试
98
- yarn test:ui # 测试 UI
99
- yarn test:coverage # 覆盖率报告
125
+ yarn test # Vitest
126
+ npx tsc --noEmit -p tsconfig.web.json
127
+ npx tsc --noEmit -p tsconfig.node.json
128
+ yarn test:e2e # 内部会先执行 yarn build
129
+ ```
130
+
131
+ 发布前建议按这个顺序跑完整门禁:
132
+
133
+ ```bash
134
+ npx tsc --noEmit -p tsconfig.web.json
135
+ npx tsc --noEmit -p tsconfig.node.json
136
+ yarn test
137
+ yarn test:e2e
100
138
  ```
101
139
 
102
140
  ## 架构
103
141
 
142
+ KAi 的代码按职责分层,而不是按运行环境硬塞在一起:
143
+
144
+ ```text
145
+ src/
146
+ ├── core/ # 领域核心:Agent、Message、Tools、Skill、Workspace
147
+ ├── adapters/ # 适配器:LLM、DB、MCP、Storage、Tools、Scheduler、Channel
148
+ ├── electron/ # Electron 主进程、preload、updater、crash、remote
149
+ ├── renderer/ # React 渲染进程
150
+ ├── shared/ # 共享类型、配置、工具函数
151
+ ├── app/ # 应用 bootstrap
152
+ ├── cli/ # CLI 入口
153
+ └── telemetry-server/ # 遥测服务端
154
+ ```
155
+
104
156
  ### Agent 执行层
105
157
 
158
+ ```text
159
+ SoloExecutor # 单 Agent 对话
160
+ SwarmExecutor # 多 Agent 协作编排:handoff / task / broadcast / supervisor
161
+ ├── TaskOrchestrator # 子任务与广播任务编排
162
+ ├── SwarmContext # 协作运行态:handoff chain、task map 等
163
+ └── AgentExecutor # 当前生产执行器:流式模型调用、工具循环、fallback、压缩
164
+
165
+ AgentLoop # 正在演进的新执行循环抽象:retry / stopWhen / tool loop / usage collect
166
+ └── AgentKernel # 单次模型调用内核:streamText、工具调用投影、tool-call repair
106
167
  ```
107
- SoloExecutor ← 单 Agent 对话
108
- SwarmExecutor ← Agent 群聊(管理 handoff 循环)
109
- ├── AgentExecutor ← 单次 LLM 调用(流式 + 工具执行循环)
110
- ├── SupervisorLoop ← 监督评估循环
111
- ├── TaskOrchestrator ← 子任务创建和管理
112
- └── SwarmContext ← 共享状态(handoff chain、task map)
168
+
169
+ ### 消息与 Session
170
+
171
+ ```text
172
+ User Input
173
+ window.api.sendUserMessage()
174
+ → MessageQueue
175
+ → MessageProcessor
176
+ → SoloChat / GroupChat
177
+ → SoloExecutor / SwarmExecutor
178
+ → LLM + Tools
179
+ → ConversationEvent stream
180
+ → Zustand Store
181
+ → React UI
113
182
  ```
114
183
 
184
+ - 单聊与群聊都以 `Session` 作为主要运行单元。
185
+ - 单聊的 Session 归属于某个 Agent;群组的 Session 归属于某个 Group。
186
+ - `speaker` 是群组 Session 级状态,而不是全局群组状态。
187
+ - 消息仍由 SQLite 持久化;长上下文由文件 `context.json` 保存。
188
+
115
189
  ### 消息压缩管线
116
190
 
117
- 长对话自动压缩,4 级策略管道:
191
+ 长对话自动压缩,按成本从低到高处理:
118
192
 
119
- ```
120
- ToolResultSpill(合并冗长工具结果)
121
- → ReasoningRemoval(移除推理过程)
122
- → Summarization(摘要旧消息)
123
- → Pruning(裁剪最旧消息)
193
+ ```text
194
+ ToolResultSpill
195
+ → ReasoningRemoval
196
+ → Summarization
197
+ → Pruning
124
198
  ```
125
199
 
126
200
  ### 数据存储
127
201
 
128
- ```
202
+ ```text
129
203
  ~/.kai/
130
- ├── kai.db # SQLite 主数据库
131
- ├── config/ # 应用配置(加密存储 API Key
204
+ ├── kai.db # SQLite:消息等结构化数据
205
+ ├── config/ # 应用配置,加密存储 API Key
206
+ ├── direct-sessions/
207
+ │ └── {sessionId}/
208
+ │ └── context.json # 单聊 Session 上下文
132
209
  ├── agents/
133
210
  │ └── {agentId}/
134
- └── workspace/ # Agent 工作空间
135
- ├── IDENTITY.md # 身份定义
136
- ├── SOUL.md # 行为准则
137
- ├── MEMORY.md # 长期记忆
138
- │ ├── USER.md # 用户信息
139
- │ ├── AGENTS.md # 工作指南
140
- │ ├── TOOLS.md # 环境配置
141
- └── memory/ # 每日笔记
142
- ├── attachments/ # 对话附件
143
- └── sessions/ # 会话消息存储
211
+ ├── meta.json # Agent 身份
212
+ ├── config.json # 模型、fallback、skills、MCP、禁用工具等能力配置
213
+ ├── context.json # legacy 单聊上下文兼容文件
214
+ └── workspace/
215
+ │ ├── IDENTITY.md
216
+ │ ├── SOUL.md
217
+ │ ├── USER.md
218
+ ├── MEMORY.md
219
+ ├── AGENTS.md
220
+ │ ├── TOOLS.md
221
+ │ └── memory/
222
+ ├── groups/
223
+ │ └── {groupId}/
224
+ │ ├── meta.json
225
+ │ ├── config.json
226
+ │ ├── members.json
227
+ │ ├── GROUP_SETTINGS.md # 人可写,AI 只读
228
+ │ ├── GROUP_MEMORY.md # 群长期记忆
229
+ │ ├── memory/ # 群每日记忆
230
+ │ └── sessions/
231
+ │ └── {sessionId}/
232
+ │ ├── meta.json
233
+ │ ├── config.json
234
+ │ └── context.json # 群组 Session 上下文
235
+ ├── conversations/ # 追加式消息日志(jsonl,兼容运行链路)
236
+ └── attachments/ # 对话附件
144
237
  ```
145
238
 
146
239
  ## 支持的 LLM
@@ -150,69 +243,48 @@ KAi 通过 Vercel AI SDK 连接大语言模型,支持:
150
243
  - OpenAI Compatible(OpenAI、DeepSeek、Moonshot、MiniMax 等)
151
244
  - Anthropic Claude
152
245
  - Google Gemini
153
- - 任何兼容 OpenAI API 的模型
246
+ - 任何兼容 OpenAI API 的模型服务
154
247
 
155
- 在设置的 LLM 通道中配置 API Key 即可使用。
248
+ 在设置的「模型通道」中配置 API Key 即可使用。
156
249
 
157
250
  ## MCP(Model Context Protocol)
158
251
 
159
- KAi 内置 MCP 客户端支持。在设置中配置 MCP 服务器,即可让 Agent 使用外部工具:
252
+ KAi 内置 MCP 客户端。在设置中添加 MCP 服务,然后应用到指定 Agent;只有被授权的 Agent 才会看到对应 MCP 工具。
253
+
254
+ 示例配置形态:
160
255
 
161
256
  ```json
162
257
  {
163
- "mcp": {
164
- "servers": {
165
- "my-server": {
166
- "command": "npx",
167
- "args": ["-y", "@my/mcp-server"]
168
- }
169
- }
170
- }
258
+ "command": "npx",
259
+ "args": ["-y", "@modelcontextprotocol/server-filesystem", "/tmp"]
171
260
  }
172
261
  ```
173
262
 
174
- ## 项目结构
175
-
176
- ```
177
- src/
178
- ├── main/ # Electron 主进程
179
- │ ├── agent/ # Agent 执行引擎
180
- │ │ ├── SoloExecutor # 单 Agent 执行器
181
- │ │ ├── SwarmExecutor # 群聊执行器
182
- │ │ ├── AgentExecutor # LLM 调用执行器
183
- │ │ ├── SupervisorLoop # 监督循环
184
- │ │ ├── TaskOrchestrator # 任务编排
185
- │ │ ├── SwarmContext # 共享上下文
186
- │ │ ├── HandoffResolver # Handoff 解析
187
- │ │ └── factory/ # Prompt/Tools 构建
188
- │ ├── compression/ # 消息压缩管线
189
- │ ├── config/ # 配置管理(加密)
190
- │ ├── db/ # SQLite 数据层
191
- │ ├── handlers/ # IPC 处理器
192
- │ ├── mcp/ # MCP 客户端
193
- │ ├── scheduler/ # 定时任务系统
194
- │ ├── skill/ # Skill 技能系统
195
- │ ├── storage/ # 会话/附件存储
196
- │ ├── tools/ # 内置工具
197
- │ └── workspace/ # Agent 工作空间管理
198
- ├── renderer/ # React 渲染进程
199
- │ └── src/
200
- │ ├── components/ # UI 组件
201
- │ ├── stores/ # Zustand 状态管理
202
- │ ├── locales/ # i18n 翻译文件
203
- │ └── styles/ # 设计令牌 + CSS Modules
204
- ├── preload/ # 安全桥接层
205
- └── shared/ # 主进程/渲染进程共享类型
206
- ```
207
-
208
263
  ## 安全模型
209
264
 
210
265
  KAi 采用 Electron 三进程安全架构:
211
266
 
212
- - **渲染进程**:完全沙箱化,无 Node.js 访问
213
- - **预加载层**:`contextIsolation: true` + `nodeIntegration: false`
214
- - **主进程**:所有文件系统、网络操作通过 IPC 暴露给渲染进程
215
- - **API Key**:AES-256 加密存储,使用机器唯一标识派生密钥
267
+ - **渲染进程**:沙箱化,无 Node.js 直接访问。
268
+ - **预加载层**:`contextIsolation: true` + `nodeIntegration: false`。
269
+ - **主进程**:文件系统、网络、数据库和工具调用通过 IPC 受控暴露。
270
+ - **文件工具**:要求绝对 `workdir` + 相对 `path`,拒绝路径逃逸。
271
+ - **数据库工具**:只允许只读查询。
272
+ - **API Key**:使用本地 salt + machineId 派生密钥,并通过 AES-256-GCM 加密存储。
273
+
274
+ ## 项目文档
275
+
276
+ - [功能清单](docs/features.md) — 从用户视角查看当前已实现能力
277
+ - [文档索引](docs/README.md) — architecture / design / workflow 等入口
278
+ - [Release Notes](RELEASE_NOTES.md) — 已发布版本记录
279
+
280
+ ## 进一步阅读
281
+
282
+ - [架构文档](docs/architecture/architecture.md)
283
+ - [功能清单](docs/features.md)
284
+ - [发版流程](docs/workflow/发版流程.md)
285
+ - [基于 worktree 的开发流程](docs/workflow/ai-worktree-workflow.md)
286
+ - [Swarm Supervisor 设计](docs/design/swarm-supervisor-design.md)
287
+ - [Agent Kernel / Loop 设计](docs/design/agent-kernel-loop-design.md)
216
288
 
217
289
  ## License
218
290