@sinm/kai 1.9.3 → 1.10.0

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 (134) hide show
  1. package/README.md +46 -15
  2. package/dist-cli/kai-cli.js +34253 -28219
  3. package/dist-electron/renderer/assets/{_baseUniq-DoVY4MSS.js → _baseUniq-BPxrppe8.js} +1 -1
  4. package/dist-electron/renderer/assets/_baseUniq-BPxrppe8.js.gz +0 -0
  5. package/dist-electron/renderer/assets/{arc--9SigsrL.js → arc-BWCOtJfo.js} +1 -1
  6. package/dist-electron/renderer/assets/arc-BWCOtJfo.js.gz +0 -0
  7. package/dist-electron/renderer/assets/{architectureDiagram-Q4EWVU46-B2-KW8QI.js → architectureDiagram-Q4EWVU46-B6aBoJIj.js} +5 -5
  8. package/dist-electron/renderer/assets/architectureDiagram-Q4EWVU46-B6aBoJIj.js.gz +0 -0
  9. package/dist-electron/renderer/assets/{blockDiagram-DXYQGD6D-CY8AyV-u.js → blockDiagram-DXYQGD6D-CFxhVnTA.js} +6 -6
  10. package/dist-electron/renderer/assets/blockDiagram-DXYQGD6D-CFxhVnTA.js.gz +0 -0
  11. package/dist-electron/renderer/assets/{c4Diagram-AHTNJAMY-fsUL-kLH.js → c4Diagram-AHTNJAMY-Dn3rtd9z.js} +2 -2
  12. package/dist-electron/renderer/assets/c4Diagram-AHTNJAMY-Dn3rtd9z.js.gz +0 -0
  13. package/dist-electron/renderer/assets/{channel-DFRrClya.js → channel-BL_zoh4z.js} +1 -1
  14. package/dist-electron/renderer/assets/{chunk-4BX2VUAB-C_b460N6.js → chunk-4BX2VUAB-9jWB_43i.js} +1 -1
  15. package/dist-electron/renderer/assets/{chunk-4TB4RGXK-DznBU0eC.js → chunk-4TB4RGXK-C9WmbeNG.js} +5 -5
  16. package/dist-electron/renderer/assets/chunk-4TB4RGXK-C9WmbeNG.js.gz +0 -0
  17. package/dist-electron/renderer/assets/{chunk-55IACEB6-BEn8Gyw6.js → chunk-55IACEB6-BFkx3JHW.js} +1 -1
  18. package/dist-electron/renderer/assets/{chunk-EDXVE4YY-C6Ylq851.js → chunk-EDXVE4YY-BdzjVCjA.js} +1 -1
  19. package/dist-electron/renderer/assets/chunk-EDXVE4YY-BdzjVCjA.js.gz +0 -0
  20. package/dist-electron/renderer/assets/{chunk-FMBD7UC4-CNXONWYO.js → chunk-FMBD7UC4-CKn1sJZS.js} +1 -1
  21. package/dist-electron/renderer/assets/{chunk-OYMX7WX6-DDnf0PhN.js → chunk-OYMX7WX6-bt6YDeoM.js} +3 -3
  22. package/dist-electron/renderer/assets/chunk-OYMX7WX6-bt6YDeoM.js.gz +0 -0
  23. package/dist-electron/renderer/assets/{chunk-QZHKN3VN-B_Fq1xCk.js → chunk-QZHKN3VN-DjhdiOVH.js} +1 -1
  24. package/dist-electron/renderer/assets/{chunk-YZCP3GAM-DBTMP9qR.js → chunk-YZCP3GAM-BvsloRWu.js} +1 -1
  25. package/dist-electron/renderer/assets/chunk-YZCP3GAM-BvsloRWu.js.gz +0 -0
  26. package/dist-electron/renderer/assets/{classDiagram-6PBFFD2Q-hV0XpFcD.js → classDiagram-6PBFFD2Q-rJLhrTTS.js} +6 -6
  27. package/dist-electron/renderer/assets/{classDiagram-v2-HSJHXN6E-hV0XpFcD.js → classDiagram-v2-HSJHXN6E-rJLhrTTS.js} +6 -6
  28. package/dist-electron/renderer/assets/{clone-CaObVnzv.js → clone-D5j2JPeo.js} +1 -1
  29. package/dist-electron/renderer/assets/{cose-bilkent-S5V4N54A-YSGABmDO.js → cose-bilkent-S5V4N54A-BpNfMIZi.js} +1 -1
  30. package/dist-electron/renderer/assets/cose-bilkent-S5V4N54A-BpNfMIZi.js.gz +0 -0
  31. package/dist-electron/renderer/assets/{dagre-KV5264BT-D-_h7-5B.js → dagre-KV5264BT-DvevUtVv.js} +6 -6
  32. package/dist-electron/renderer/assets/dagre-KV5264BT-DvevUtVv.js.gz +0 -0
  33. package/dist-electron/renderer/assets/{diagram-5BDNPKRD-DUw8aQXg.js → diagram-5BDNPKRD-BEs1nVIP.js} +6 -6
  34. package/dist-electron/renderer/assets/diagram-5BDNPKRD-BEs1nVIP.js.gz +0 -0
  35. package/dist-electron/renderer/assets/{diagram-G4DWMVQ6-B9hMMSLk.js → diagram-G4DWMVQ6-Bab0VbSx.js} +6 -6
  36. package/dist-electron/renderer/assets/diagram-G4DWMVQ6-Bab0VbSx.js.gz +0 -0
  37. package/dist-electron/renderer/assets/{diagram-MMDJMWI5-D-3rSXTw.js → diagram-MMDJMWI5-CD02vhuR.js} +5 -5
  38. package/dist-electron/renderer/assets/diagram-MMDJMWI5-CD02vhuR.js.gz +0 -0
  39. package/dist-electron/renderer/assets/{diagram-TYMM5635-DUP-PBv8.js → diagram-TYMM5635-xAze9LR5.js} +5 -5
  40. package/dist-electron/renderer/assets/diagram-TYMM5635-xAze9LR5.js.gz +0 -0
  41. package/dist-electron/renderer/assets/{erDiagram-SMLLAGMA-DytsFZ__.js → erDiagram-SMLLAGMA-B2HXqBYH.js} +4 -4
  42. package/dist-electron/renderer/assets/erDiagram-SMLLAGMA-B2HXqBYH.js.gz +0 -0
  43. package/dist-electron/renderer/assets/{flowDiagram-DWJPFMVM-CzO3oLSq.js → flowDiagram-DWJPFMVM-DZFPQcpb.js} +6 -6
  44. package/dist-electron/renderer/assets/flowDiagram-DWJPFMVM-DZFPQcpb.js.gz +0 -0
  45. package/dist-electron/renderer/assets/{ganttDiagram-T4ZO3ILL-V2OtiUyi.js → ganttDiagram-T4ZO3ILL-XX0OTBm4.js} +2 -2
  46. package/dist-electron/renderer/assets/ganttDiagram-T4ZO3ILL-XX0OTBm4.js.gz +0 -0
  47. package/dist-electron/renderer/assets/{gitGraphDiagram-UUTBAWPF-Bda-RK4T.js → gitGraphDiagram-UUTBAWPF-CHoEzYqD.js} +6 -6
  48. package/dist-electron/renderer/assets/gitGraphDiagram-UUTBAWPF-CHoEzYqD.js.gz +0 -0
  49. package/dist-electron/renderer/assets/{graph-D-bM-Zax.js → graph-t72OS6pZ.js} +2 -2
  50. package/dist-electron/renderer/assets/graph-t72OS6pZ.js.gz +0 -0
  51. package/dist-electron/renderer/assets/{index-C4yFAlqR.css → index-Hd87F96i.css} +2369 -1410
  52. package/dist-electron/renderer/assets/index-Hd87F96i.css.gz +0 -0
  53. package/dist-electron/renderer/assets/{index-B6AlLjch.js → index-x4Eegt5G.js} +4298 -2442
  54. package/dist-electron/renderer/assets/index-x4Eegt5G.js.gz +0 -0
  55. package/dist-electron/renderer/assets/{infoDiagram-42DDH7IO-D2kpJRbq.js → infoDiagram-42DDH7IO-Cv20woCa.js} +4 -4
  56. package/dist-electron/renderer/assets/{ishikawaDiagram-UXIWVN3A-Dkw87Tbt.js → ishikawaDiagram-UXIWVN3A-BG3mS91T.js} +1 -1
  57. package/dist-electron/renderer/assets/ishikawaDiagram-UXIWVN3A-BG3mS91T.js.gz +0 -0
  58. package/dist-electron/renderer/assets/{journeyDiagram-VCZTEJTY-qJprDQ3l.js → journeyDiagram-VCZTEJTY-D3ONtv9u.js} +4 -4
  59. package/dist-electron/renderer/assets/journeyDiagram-VCZTEJTY-D3ONtv9u.js.gz +0 -0
  60. package/dist-electron/renderer/assets/{kanban-definition-6JOO6SKY-CMq0peT3.js → kanban-definition-6JOO6SKY-BDJXuwNy.js} +2 -2
  61. package/dist-electron/renderer/assets/kanban-definition-6JOO6SKY-BDJXuwNy.js.gz +0 -0
  62. package/dist-electron/renderer/assets/{layout-CxXj_FIV.js → layout-Beu21ILX.js} +4 -4
  63. package/dist-electron/renderer/assets/layout-Beu21ILX.js.gz +0 -0
  64. package/dist-electron/renderer/assets/{linear-CtYMnotP.js → linear-BxRcWGaU.js} +1 -1
  65. package/dist-electron/renderer/assets/linear-BxRcWGaU.js.gz +0 -0
  66. package/dist-electron/renderer/assets/{min-Bqf3mXd1.js → min-J184ABTi.js} +2 -2
  67. package/dist-electron/renderer/assets/min-J184ABTi.js.gz +0 -0
  68. package/dist-electron/renderer/assets/{mindmap-definition-QFDTVHPH-4RDe2kUB.js → mindmap-definition-QFDTVHPH-a-qwDgLY.js} +3 -3
  69. package/dist-electron/renderer/assets/mindmap-definition-QFDTVHPH-a-qwDgLY.js.gz +0 -0
  70. package/dist-electron/renderer/assets/{pieDiagram-DEJITSTG-BCR81MRq.js → pieDiagram-DEJITSTG-CohU6y2K.js} +6 -6
  71. package/dist-electron/renderer/assets/pieDiagram-DEJITSTG-CohU6y2K.js.gz +0 -0
  72. package/dist-electron/renderer/assets/{quadrantDiagram-34T5L4WZ-Bpmh-XvR.js → quadrantDiagram-34T5L4WZ-D8iYiTzN.js} +2 -2
  73. package/dist-electron/renderer/assets/quadrantDiagram-34T5L4WZ-D8iYiTzN.js.gz +0 -0
  74. package/dist-electron/renderer/assets/{requirementDiagram-MS252O5E-DNvlS_Mc.js → requirementDiagram-MS252O5E-5S5xgn9_.js} +3 -3
  75. package/dist-electron/renderer/assets/requirementDiagram-MS252O5E-5S5xgn9_.js.gz +0 -0
  76. package/dist-electron/renderer/assets/{sankeyDiagram-XADWPNL6-CIr3ReOD.js → sankeyDiagram-XADWPNL6-DUYAJ9k7.js} +1 -1
  77. package/dist-electron/renderer/assets/sankeyDiagram-XADWPNL6-DUYAJ9k7.js.gz +0 -0
  78. package/dist-electron/renderer/assets/{sequenceDiagram-FGHM5R23-DXmMVdpu.js → sequenceDiagram-FGHM5R23-B7f6eT66.js} +3 -3
  79. package/dist-electron/renderer/assets/sequenceDiagram-FGHM5R23-B7f6eT66.js.gz +0 -0
  80. package/dist-electron/renderer/assets/{stateDiagram-FHFEXIEX-BXC-CMaD.js → stateDiagram-FHFEXIEX-Cm4iQesY.js} +8 -8
  81. package/dist-electron/renderer/assets/stateDiagram-FHFEXIEX-Cm4iQesY.js.gz +0 -0
  82. package/dist-electron/renderer/assets/{stateDiagram-v2-QKLJ7IA2-Cik6aC4X.js → stateDiagram-v2-QKLJ7IA2-DdStGNJu.js} +4 -4
  83. package/dist-electron/renderer/assets/{timeline-definition-GMOUNBTQ-dWERylNQ.js → timeline-definition-GMOUNBTQ-BA4cLDsg.js} +2 -2
  84. package/dist-electron/renderer/assets/timeline-definition-GMOUNBTQ-BA4cLDsg.js.gz +0 -0
  85. package/dist-electron/renderer/assets/{vennDiagram-DHZGUBPP-CuO9YmxO.js → vennDiagram-DHZGUBPP-D0qEZKPk.js} +1 -1
  86. package/dist-electron/renderer/assets/vennDiagram-DHZGUBPP-D0qEZKPk.js.gz +0 -0
  87. package/dist-electron/renderer/assets/{wardley-RL74JXVD-bHTvhGGa.js → wardley-RL74JXVD-GYpdfATp.js} +3 -3
  88. package/dist-electron/renderer/assets/wardley-RL74JXVD-GYpdfATp.js.gz +0 -0
  89. package/dist-electron/renderer/assets/{wardleyDiagram-NUSXRM2D-B8WNKIUZ.js → wardleyDiagram-NUSXRM2D-Br7mKnLr.js} +5 -5
  90. package/dist-electron/renderer/assets/wardleyDiagram-NUSXRM2D-Br7mKnLr.js.gz +0 -0
  91. package/dist-electron/renderer/assets/{xychartDiagram-5P7HB3ND-D6pt_QSE.js → xychartDiagram-5P7HB3ND-D37yDEDj.js} +2 -2
  92. package/dist-electron/renderer/assets/xychartDiagram-5P7HB3ND-D37yDEDj.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-DoVY4MSS.js.gz +0 -0
  96. package/dist-electron/renderer/assets/arc--9SigsrL.js.gz +0 -0
  97. package/dist-electron/renderer/assets/architectureDiagram-Q4EWVU46-B2-KW8QI.js.gz +0 -0
  98. package/dist-electron/renderer/assets/blockDiagram-DXYQGD6D-CY8AyV-u.js.gz +0 -0
  99. package/dist-electron/renderer/assets/c4Diagram-AHTNJAMY-fsUL-kLH.js.gz +0 -0
  100. package/dist-electron/renderer/assets/chunk-4TB4RGXK-DznBU0eC.js.gz +0 -0
  101. package/dist-electron/renderer/assets/chunk-EDXVE4YY-C6Ylq851.js.gz +0 -0
  102. package/dist-electron/renderer/assets/chunk-OYMX7WX6-DDnf0PhN.js.gz +0 -0
  103. package/dist-electron/renderer/assets/chunk-YZCP3GAM-DBTMP9qR.js.gz +0 -0
  104. package/dist-electron/renderer/assets/cose-bilkent-S5V4N54A-YSGABmDO.js.gz +0 -0
  105. package/dist-electron/renderer/assets/dagre-KV5264BT-D-_h7-5B.js.gz +0 -0
  106. package/dist-electron/renderer/assets/diagram-5BDNPKRD-DUw8aQXg.js.gz +0 -0
  107. package/dist-electron/renderer/assets/diagram-G4DWMVQ6-B9hMMSLk.js.gz +0 -0
  108. package/dist-electron/renderer/assets/diagram-MMDJMWI5-D-3rSXTw.js.gz +0 -0
  109. package/dist-electron/renderer/assets/diagram-TYMM5635-DUP-PBv8.js.gz +0 -0
  110. package/dist-electron/renderer/assets/erDiagram-SMLLAGMA-DytsFZ__.js.gz +0 -0
  111. package/dist-electron/renderer/assets/flowDiagram-DWJPFMVM-CzO3oLSq.js.gz +0 -0
  112. package/dist-electron/renderer/assets/ganttDiagram-T4ZO3ILL-V2OtiUyi.js.gz +0 -0
  113. package/dist-electron/renderer/assets/gitGraphDiagram-UUTBAWPF-Bda-RK4T.js.gz +0 -0
  114. package/dist-electron/renderer/assets/graph-D-bM-Zax.js.gz +0 -0
  115. package/dist-electron/renderer/assets/index-B6AlLjch.js.gz +0 -0
  116. package/dist-electron/renderer/assets/index-C4yFAlqR.css.gz +0 -0
  117. package/dist-electron/renderer/assets/ishikawaDiagram-UXIWVN3A-Dkw87Tbt.js.gz +0 -0
  118. package/dist-electron/renderer/assets/journeyDiagram-VCZTEJTY-qJprDQ3l.js.gz +0 -0
  119. package/dist-electron/renderer/assets/kanban-definition-6JOO6SKY-CMq0peT3.js.gz +0 -0
  120. package/dist-electron/renderer/assets/layout-CxXj_FIV.js.gz +0 -0
  121. package/dist-electron/renderer/assets/linear-CtYMnotP.js.gz +0 -0
  122. package/dist-electron/renderer/assets/min-Bqf3mXd1.js.gz +0 -0
  123. package/dist-electron/renderer/assets/mindmap-definition-QFDTVHPH-4RDe2kUB.js.gz +0 -0
  124. package/dist-electron/renderer/assets/pieDiagram-DEJITSTG-BCR81MRq.js.gz +0 -0
  125. package/dist-electron/renderer/assets/quadrantDiagram-34T5L4WZ-Bpmh-XvR.js.gz +0 -0
  126. package/dist-electron/renderer/assets/requirementDiagram-MS252O5E-DNvlS_Mc.js.gz +0 -0
  127. package/dist-electron/renderer/assets/sankeyDiagram-XADWPNL6-CIr3ReOD.js.gz +0 -0
  128. package/dist-electron/renderer/assets/sequenceDiagram-FGHM5R23-DXmMVdpu.js.gz +0 -0
  129. package/dist-electron/renderer/assets/stateDiagram-FHFEXIEX-BXC-CMaD.js.gz +0 -0
  130. package/dist-electron/renderer/assets/timeline-definition-GMOUNBTQ-dWERylNQ.js.gz +0 -0
  131. package/dist-electron/renderer/assets/vennDiagram-DHZGUBPP-CuO9YmxO.js.gz +0 -0
  132. package/dist-electron/renderer/assets/wardley-RL74JXVD-bHTvhGGa.js.gz +0 -0
  133. package/dist-electron/renderer/assets/wardleyDiagram-NUSXRM2D-B8WNKIUZ.js.gz +0 -0
  134. package/dist-electron/renderer/assets/xychartDiagram-5P7HB3ND-D6pt_QSE.js.gz +0 -0
package/README.md CHANGED
@@ -23,7 +23,8 @@ KAi 的答案是 Agent 团队。你可以让一个「乔布斯」负责产品判
23
23
 
24
24
  ### 👥 多 Agent 协作
25
25
 
26
- - **群聊与线程**Group 是团队,Thread 是讨论现场;一个 Group 可拥有多个隔离线程。
26
+ - **Session 化对话** 单聊和群聊都以 Session 为主概念;一个群组可拥有多个隔离 Session。
27
+ - **单聊多 Session** — 同一个 Agent 可并行开启多个讨论,适合把不同任务、分支思路和长期陪跑拆开。
27
28
  - **Handoff 交接** — Agent 可以主动交接任务,并附带原因和上下文摘要。
28
29
  - **@mention** — 在消息中 @ 指定 Agent,触发协作或路由。
29
30
  - **Broadcast 广播** — 一次问题并行询问多个 Agent,聚合不同专业判断。
@@ -50,13 +51,16 @@ Agent 开箱即用的能力:
50
51
 
51
52
  - 流式输出,实时渲染 Markdown / 代码高亮 / 推理过程。
52
53
  - 支持图片、文件附件和多模态消息。
53
- - 工具调用、任务结果、广播结果以结构化卡片展示。
54
+ - 工具调用、任务结果、广播结果以结构化卡片展示,并展示状态与耗时。
55
+ - 群聊与单聊都支持顶部 Session Tabs:新建、切换、重命名、归档。
56
+ - 快捷回复支持独立 `⚡` 入口;`/` 命令保留给真正的命令。
54
57
  - 明暗主题自适应。
55
58
  - 中英文国际化(i18n)。
56
59
 
57
60
  ### 🔌 连接与自动化
58
61
 
59
62
  - **模型通道** — 支持主模型、备用模型、自动 fallback 和健康状态记录。
63
+ - **模型能力学习** — 根据真实报错学习上下文窗口 / 最大输出限制,自动修正后重试。
60
64
  - **MCP 服务** — 在设置中添加 MCP 服务,并一键应用到指定 Agent。
61
65
  - **Bot 接入** — 支持外部频道接入,让 Agent 不只活在桌面窗口里。
62
66
  - **远程访问** — 可通过远程入口访问本地 KAi。
@@ -71,6 +75,7 @@ Vercel AI SDK + SQLite3 + Zustand + CSS Modules
71
75
  electron-vite + Vitest + Playwright
72
76
  ```
73
77
 
78
+ - **运行形态**:Electron 桌面应用 + CLI + 本地 telemetry dashboard
74
79
  - **Core**:Agent / Message / Tool / Skill 等领域逻辑与端口接口。
75
80
  - **Adapters**:LLM、MCP、DB、文件存储、工具、调度器、外部频道等具体实现。
76
81
  - **Electron Main**:应用启动、IPC、自动更新、崩溃日志、远程访问。
@@ -99,6 +104,13 @@ yarn install
99
104
  yarn dev
100
105
  ```
101
106
 
107
+ ### CLI
108
+
109
+ ```bash
110
+ yarn build:cli
111
+ npx @sinm/kai@latest start --port 9529
112
+ ```
113
+
102
114
  ### 构建与打包
103
115
 
104
116
  ```bash
@@ -111,9 +123,18 @@ yarn build:cli # 构建 CLI
111
123
 
112
124
  ```bash
113
125
  yarn test # Vitest
114
- yarn tsc -p tsconfig.web.json --noEmit
115
- yarn tsc -p tsconfig.node.json --noEmit
116
- KAI_DATA_PATH=$HOME/.kai_test yarn test:e2e
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
117
138
  ```
118
139
 
119
140
  ## 架构
@@ -136,16 +157,16 @@ src/
136
157
 
137
158
  ```text
138
159
  SoloExecutor # 单 Agent 对话
139
- SwarmExecutor # 多 Agent 群聊编排:handoff / task / broadcast / supervisor
160
+ SwarmExecutor # 多 Agent 协作编排:handoff / task / broadcast / supervisor
140
161
  ├── TaskOrchestrator # 子任务与广播任务编排
141
- ├── SwarmContext # 群聊运行态:handoff chain、task map 等
162
+ ├── SwarmContext # 协作运行态:handoff chain、task map 等
142
163
  └── AgentExecutor # 当前生产执行器:流式模型调用、工具循环、fallback、压缩
143
164
 
144
165
  AgentLoop # 正在演进的新执行循环抽象:retry / stopWhen / tool loop / usage collect
145
166
  └── AgentKernel # 单次模型调用内核:streamText、工具调用投影、tool-call repair
146
167
  ```
147
168
 
148
- ### 消息与线程
169
+ ### 消息与 Session
149
170
 
150
171
  ```text
151
172
  User Input
@@ -160,8 +181,9 @@ User Input
160
181
  → React UI
161
182
  ```
162
183
 
163
- - 单聊以 Agent 为目标。
164
- - 群聊以 Thread 为讨论现场,`speaker` 是线程级状态。
184
+ - 单聊与群聊都以 `Session` 作为主要运行单元。
185
+ - 单聊的 Session 归属于某个 Agent;群组的 Session 归属于某个 Group。
186
+ - `speaker` 是群组 Session 级状态,而不是全局群组状态。
165
187
  - 消息仍由 SQLite 持久化;长上下文由文件 `context.json` 保存。
166
188
 
167
189
  ### 消息压缩管线
@@ -181,11 +203,14 @@ ToolResultSpill
181
203
  ~/.kai/
182
204
  ├── kai.db # SQLite:消息等结构化数据
183
205
  ├── config/ # 应用配置,加密存储 API Key
206
+ ├── direct-sessions/
207
+ │ └── {sessionId}/
208
+ │ └── context.json # 单聊 Session 上下文
184
209
  ├── agents/
185
210
  │ └── {agentId}/
186
211
  │ ├── meta.json # Agent 身份
187
212
  │ ├── config.json # 模型、fallback、skills、MCP、禁用工具等能力配置
188
- │ ├── context.json # 单聊上下文
213
+ │ ├── context.json # legacy 单聊上下文兼容文件
189
214
  │ └── workspace/
190
215
  │ ├── IDENTITY.md
191
216
  │ ├── SOUL.md
@@ -202,12 +227,12 @@ ToolResultSpill
202
227
  │ ├── GROUP_SETTINGS.md # 人可写,AI 只读
203
228
  │ ├── GROUP_MEMORY.md # 群长期记忆
204
229
  │ ├── memory/ # 群每日记忆
205
- │ └── threads/
206
- │ └── {threadId}/
230
+ │ └── sessions/
231
+ │ └── {sessionId}/
207
232
  │ ├── meta.json
208
233
  │ ├── config.json
209
- │ └── context.json # 线程上下文
210
- ├── conversations/ # 追加式消息日志(jsonl
234
+ │ └── context.json # 群组 Session 上下文
235
+ ├── conversations/ # 追加式消息日志(jsonl,兼容运行链路)
211
236
  └── attachments/ # 对话附件
212
237
  ```
213
238
 
@@ -246,6 +271,12 @@ KAi 采用 Electron 三进程安全架构:
246
271
  - **数据库工具**:只允许只读查询。
247
272
  - **API Key**:使用本地 salt + machineId 派生密钥,并通过 AES-256-GCM 加密存储。
248
273
 
274
+ ## 项目文档
275
+
276
+ - [功能清单](docs/features.md) — 从用户视角查看当前已实现能力
277
+ - [文档索引](docs/README.md) — architecture / design / workflow 等入口
278
+ - [Release Notes](RELEASE_NOTES.md) — 已发布版本记录
279
+
249
280
  ## 进一步阅读
250
281
 
251
282
  - [架构文档](docs/architecture/architecture.md)