thatgfsj-code 3.0.4 → 3.0.7

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 (205) hide show
  1. package/README.md +64 -21
  2. package/dist/app/index.d.ts +93 -22
  3. package/dist/app/index.d.ts.map +1 -1
  4. package/dist/app/index.js +232 -40
  5. package/dist/app/index.js.map +1 -1
  6. package/dist/cmd/index.d.ts +12 -20
  7. package/dist/cmd/index.d.ts.map +1 -1
  8. package/dist/cmd/index.js +192 -146
  9. package/dist/cmd/index.js.map +1 -1
  10. package/dist/config/index.d.ts +4 -0
  11. package/dist/config/index.d.ts.map +1 -1
  12. package/dist/config/index.js +5 -0
  13. package/dist/config/index.js.map +1 -1
  14. package/dist/config/types.d.ts +5 -0
  15. package/dist/config/types.d.ts.map +1 -1
  16. package/dist/llm/anthropic.d.ts +1 -1
  17. package/dist/llm/anthropic.d.ts.map +1 -1
  18. package/dist/llm/anthropic.js +116 -84
  19. package/dist/llm/anthropic.js.map +1 -1
  20. package/dist/llm/gemini.d.ts +27 -3
  21. package/dist/llm/gemini.d.ts.map +1 -1
  22. package/dist/llm/gemini.js +196 -73
  23. package/dist/llm/gemini.js.map +1 -1
  24. package/dist/llm/index.d.ts +20 -1
  25. package/dist/llm/index.d.ts.map +1 -1
  26. package/dist/llm/index.js +66 -6
  27. package/dist/llm/index.js.map +1 -1
  28. package/dist/llm/openai.d.ts +5 -1
  29. package/dist/llm/openai.d.ts.map +1 -1
  30. package/dist/llm/openai.js +126 -66
  31. package/dist/llm/openai.js.map +1 -1
  32. package/dist/mcp/client.d.ts +84 -34
  33. package/dist/mcp/client.d.ts.map +1 -1
  34. package/dist/mcp/client.js +291 -126
  35. package/dist/mcp/client.js.map +1 -1
  36. package/dist/session/compactor.d.ts +27 -7
  37. package/dist/session/compactor.d.ts.map +1 -1
  38. package/dist/session/compactor.js +78 -23
  39. package/dist/session/compactor.js.map +1 -1
  40. package/dist/session/index.d.ts +96 -33
  41. package/dist/session/index.d.ts.map +1 -1
  42. package/dist/session/index.js +278 -60
  43. package/dist/session/index.js.map +1 -1
  44. package/dist/tools/file.d.ts +10 -2
  45. package/dist/tools/file.d.ts.map +1 -1
  46. package/dist/tools/file.js +54 -5
  47. package/dist/tools/file.js.map +1 -1
  48. package/dist/tools/git.d.ts +16 -2
  49. package/dist/tools/git.d.ts.map +1 -1
  50. package/dist/tools/git.js +61 -18
  51. package/dist/tools/git.js.map +1 -1
  52. package/dist/tools/nwt.d.ts.map +1 -1
  53. package/dist/tools/nwt.js +8 -1
  54. package/dist/tools/nwt.js.map +1 -1
  55. package/dist/tools/search.d.ts +8 -1
  56. package/dist/tools/search.d.ts.map +1 -1
  57. package/dist/tools/search.js +105 -34
  58. package/dist/tools/search.js.map +1 -1
  59. package/dist/tools/shell.d.ts +0 -4
  60. package/dist/tools/shell.d.ts.map +1 -1
  61. package/dist/tools/shell.js +11 -26
  62. package/dist/tools/shell.js.map +1 -1
  63. package/dist/tools/types.d.ts +7 -0
  64. package/dist/tools/types.d.ts.map +1 -1
  65. package/dist/tools/types.js.map +1 -1
  66. package/dist/tui/app.d.ts.map +1 -1
  67. package/dist/tui/app.js +90 -18
  68. package/dist/tui/app.js.map +1 -1
  69. package/dist/tui/components/ChatMessage.d.ts.map +1 -1
  70. package/dist/tui/components/ChatMessage.js +9 -2
  71. package/dist/tui/components/ChatMessage.js.map +1 -1
  72. package/dist/tui/components/ConfirmPrompt.d.ts +21 -0
  73. package/dist/tui/components/ConfirmPrompt.d.ts.map +1 -0
  74. package/dist/tui/components/ConfirmPrompt.js +45 -0
  75. package/dist/tui/components/ConfirmPrompt.js.map +1 -0
  76. package/dist/tui/components/Header.d.ts +10 -5
  77. package/dist/tui/components/Header.d.ts.map +1 -1
  78. package/dist/tui/components/Header.js +13 -5
  79. package/dist/tui/components/Header.js.map +1 -1
  80. package/dist/tui/components/StatusBar.d.ts +7 -0
  81. package/dist/tui/components/StatusBar.d.ts.map +1 -1
  82. package/dist/tui/components/StatusBar.js +8 -3
  83. package/dist/tui/components/StatusBar.js.map +1 -1
  84. package/dist/tui/components/Thinking.d.ts +5 -0
  85. package/dist/tui/components/Thinking.d.ts.map +1 -1
  86. package/dist/tui/components/Thinking.js +24 -2
  87. package/dist/tui/components/Thinking.js.map +1 -1
  88. package/dist/tui/components/ToolCall.d.ts +6 -1
  89. package/dist/tui/components/ToolCall.d.ts.map +1 -1
  90. package/dist/tui/components/ToolCall.js +50 -22
  91. package/dist/tui/components/ToolCall.js.map +1 -1
  92. package/dist/tui/components/UserInput.d.ts +5 -0
  93. package/dist/tui/components/UserInput.d.ts.map +1 -1
  94. package/dist/tui/components/UserInput.js +9 -13
  95. package/dist/tui/components/UserInput.js.map +1 -1
  96. package/dist/tui/hooks/useChat.d.ts +1 -0
  97. package/dist/tui/hooks/useChat.d.ts.map +1 -1
  98. package/dist/tui/hooks/useChat.js +36 -16
  99. package/dist/tui/hooks/useChat.js.map +1 -1
  100. package/dist/tui/hooks/useCommands.d.ts +7 -1
  101. package/dist/tui/hooks/useCommands.d.ts.map +1 -1
  102. package/dist/tui/hooks/useCommands.js +77 -41
  103. package/dist/tui/hooks/useCommands.js.map +1 -1
  104. package/dist/tui/theme.d.ts +34 -0
  105. package/dist/tui/theme.d.ts.map +1 -0
  106. package/dist/tui/theme.js +34 -0
  107. package/dist/tui/theme.js.map +1 -0
  108. package/dist/tui/welcome.d.ts.map +1 -1
  109. package/dist/tui/welcome.js +9 -7
  110. package/dist/tui/welcome.js.map +1 -1
  111. package/dist/types.d.ts +16 -1
  112. package/dist/types.d.ts.map +1 -1
  113. package/dist/utils/diff.d.ts +5 -0
  114. package/dist/utils/diff.d.ts.map +1 -1
  115. package/dist/utils/diff.js +15 -0
  116. package/dist/utils/diff.js.map +1 -1
  117. package/dist/version.d.ts +12 -0
  118. package/dist/version.d.ts.map +1 -0
  119. package/dist/version.js +29 -0
  120. package/dist/version.js.map +1 -0
  121. package/package.json +19 -7
  122. package/CHANGELOG.md +0 -192
  123. package/DEVELOPMENT.md +0 -286
  124. package/ROADMAP.md +0 -91
  125. package/docs/API_KEY_GUIDE.md +0 -236
  126. package/docs/FAQ.md +0 -182
  127. package/install.bat +0 -63
  128. package/install.ps1 +0 -238
  129. package/install.sh +0 -113
  130. package/src/app/index.ts +0 -197
  131. package/src/cache/fingerprint.ts +0 -101
  132. package/src/cache/index.ts +0 -21
  133. package/src/cache/smartModel.ts +0 -133
  134. package/src/cache/stats.ts +0 -199
  135. package/src/cache/volatile.ts +0 -47
  136. package/src/cmd/index.tsx +0 -288
  137. package/src/config/index.ts +0 -156
  138. package/src/config/providers.ts +0 -234
  139. package/src/config/types.ts +0 -71
  140. package/src/hooks/index.ts +0 -111
  141. package/src/llm/anthropic.ts +0 -413
  142. package/src/llm/gemini.ts +0 -169
  143. package/src/llm/index.ts +0 -303
  144. package/src/llm/openai.ts +0 -243
  145. package/src/llm/provider.ts +0 -71
  146. package/src/mcp/client.ts +0 -330
  147. package/src/prompts/index.ts +0 -260
  148. package/src/session/compactor.ts +0 -103
  149. package/src/session/index.ts +0 -181
  150. package/src/session/message.ts +0 -42
  151. package/src/skills/brainstorming.ts +0 -43
  152. package/src/skills/code-review.ts +0 -45
  153. package/src/skills/executing-plans.ts +0 -27
  154. package/src/skills/frontend-design.ts +0 -35
  155. package/src/skills/git-workflow.ts +0 -36
  156. package/src/skills/improve-architecture.ts +0 -38
  157. package/src/skills/index.ts +0 -136
  158. package/src/skills/neuroweave.ts +0 -47
  159. package/src/skills/playwright.ts +0 -72
  160. package/src/skills/prototype.ts +0 -30
  161. package/src/skills/subagent.ts +0 -28
  162. package/src/skills/supabase.ts +0 -44
  163. package/src/skills/systematic-debugging.ts +0 -44
  164. package/src/skills/tdd.ts +0 -39
  165. package/src/skills/triage.ts +0 -35
  166. package/src/skills/verification.ts +0 -31
  167. package/src/skills/writing-plans.ts +0 -42
  168. package/src/tools/file.ts +0 -143
  169. package/src/tools/git.ts +0 -132
  170. package/src/tools/index.ts +0 -111
  171. package/src/tools/nwt.ts +0 -598
  172. package/src/tools/search.ts +0 -263
  173. package/src/tools/shell.ts +0 -136
  174. package/src/tools/types.ts +0 -122
  175. package/src/tui/app.tsx +0 -159
  176. package/src/tui/components/ChatList.tsx +0 -41
  177. package/src/tui/components/ChatMessage.tsx +0 -54
  178. package/src/tui/components/Header.tsx +0 -66
  179. package/src/tui/components/InitWizard.tsx +0 -247
  180. package/src/tui/components/Markdown.tsx +0 -35
  181. package/src/tui/components/ModelSelector.tsx +0 -107
  182. package/src/tui/components/StatusBar.tsx +0 -30
  183. package/src/tui/components/Thinking.tsx +0 -17
  184. package/src/tui/components/ToolCall.tsx +0 -102
  185. package/src/tui/components/UserInput.tsx +0 -151
  186. package/src/tui/hooks/useChat.ts +0 -287
  187. package/src/tui/hooks/useCommands.ts +0 -271
  188. package/src/tui/index.ts +0 -6
  189. package/src/tui/welcome.ts +0 -177
  190. package/src/types.ts +0 -104
  191. package/src/utils/diff.ts +0 -71
  192. package/src/utils/project.ts +0 -99
  193. package/src/utils/stableStringify.ts +0 -47
  194. package/src/utils/thinking.ts +0 -119
  195. package/tests/cache/fingerprint.test.ts +0 -75
  196. package/tests/cache/providerCatalog.test.ts +0 -31
  197. package/tests/cache/smartModel.test.ts +0 -100
  198. package/tests/cache/stableStringify.test.ts +0 -43
  199. package/tests/cache/stats.test.ts +0 -146
  200. package/tests/cache/volatile.test.ts +0 -75
  201. package/tests/smoke-pollution.mjs +0 -78
  202. package/tests/smoke-thinking.mjs +0 -110
  203. package/tests/smoke-tool-stream.mjs +0 -69
  204. package/tests/smoke-tool.mjs +0 -117
  205. package/tsconfig.json +0 -21
package/README.md CHANGED
@@ -7,12 +7,16 @@ AI 编程助手 — 终端里的 AI 编程伙伴
7
7
  ## 特性
8
8
 
9
9
  - **Ink TUI** — React 驱动的终端 UI,流式输出、Markdown 渲染
10
- - **工具调用** — AI 可以读写文件、执行命令、搜索代码、操作 Git
10
+ - **Agent 工具调用** — AI 可以读写文件、执行命令、搜索代码、操作 Git,写/删文件前展示 diff 并请求确认
11
+ - **MCP 支持** — 接入 Model Context Protocol 服务器(stdio),工具动态注册进对话,`~/.thatgfsj/mcp.json` 配置
12
+ - **会话持久化** — 每轮自动保存到 `~/.thatgfsj/sessions/`,`/resume` 随时恢复历史会话
13
+ - **Headless 模式** — `gfcode "任务" --json` 输出行分隔 JSON 事件流,可脚本化 / 接 CI
14
+ - **权限管线** — 写/执行类工具调用默认需要确认(y / a / n),`--yolo` 跳过
15
+ - **上下文自动压缩** — 超过阈值按"完整工具调用块"原子压缩,不产生孤儿 tool_calls
16
+ - **Prompt Caching** — Reasonix 式缓存架构:稳定序列化、Anthropic cache_control 断点、智能 TTL、命中率统计
11
17
  - **16 个内置 Skills** — 规划、调试、TDD、架构优化、代码审查等
12
18
  - **NeuroWeave Timeline** — 项目演进记忆,自动归档(30天)
13
- - **多 Provider** — 15 个平台 + 自定义中转站
14
- - **上下文压缩** — 超限自动压缩,节省 token
15
- - **Playwright** — 浏览器自动化(测试/抓取/截图)
19
+ - **多 Provider** — 15 个平台 + 自定义中转站,含 Ollama 本地模型
16
20
  - **消息队列** — AI 工作时输入补充说明,完成后自动处理
17
21
  - **中文命令** — `/模型` `/新建` `/压缩` `/技能` 等
18
22
 
@@ -32,7 +36,7 @@ irm https://www.thatgfsj.xyz/install/gfcode.ps1 | iex
32
36
  curl -fsSL https://www.thatgfsj.xyz/install/gfcode.sh | bash
33
37
  ```
34
38
 
35
- **npm(已有 Node.js):**
39
+ **npm(已有 Node.js ≥ 20.19):**
36
40
  ```bash
37
41
  npm install -g thatgfsj-code
38
42
  ```
@@ -56,25 +60,61 @@ gfcode
56
60
  # 单次 prompt
57
61
  gfcode "帮我写一个 Hello World"
58
62
 
63
+ # headless JSON 事件流(可接脚本/CI)
64
+ gfcode "跑一下测试并总结结果" --json
65
+
66
+ # 跳过工具确认(谨慎)
67
+ gfcode --yolo
68
+
59
69
  # 指定模型
60
70
  gfcode -m gpt-4o "你的任务"
61
71
  ```
62
72
 
73
+ ### 权限确认
74
+
75
+ 写/执行类操作(shell、git 写操作、文件写入/删除)默认需要确认:
76
+
77
+ - 文件写入会展示**逐行 diff**(超长自动截断)
78
+ - `y` 允许一次 · `a` 本会话全部允许 · `n` 拒绝(60 秒无响应自动拒绝)
79
+ - headless / 非 TTY 环境默认**拒绝**,需要放行请加 `--yolo`(TUI 内也可用 `/yolo` 切换)
80
+
63
81
  ### 内置命令
64
82
 
65
83
  | 命令 | 别名 | 说明 |
66
84
  |------|------|------|
67
- | `/model <名称>` | `/模型` | 切换模型 |
85
+ | `/model <名称>` | `/模型` | 切换模型(立即生效,无需重启) |
68
86
  | `/provider` | `/服务商` | 更换服务商 |
69
- | `/new` | `/新建` | 新建会话 |
70
- | `/compact` | `/压缩` | 压缩上下文 |
87
+ | `/new` | `/新建` | 新建会话(保留系统提示) |
88
+ | `/resume [序号]` | `/恢复` | 恢复历史会话 |
89
+ | `/compact` | `/压缩` | 压缩上下文(保持工具调用完整) |
90
+ | `/cache` | `/缓存` | 缓存命中率统计(`/cache reset` 清零) |
91
+ | `/ttl 5m\|1h` | `/ttl` | 设置缓存 TTL(立即生效) |
92
+ | `/thinking on\|off` | `/思考` | 切换思考块显示 |
71
93
  | `/skills [id]` | `/技能` | 管理技能 |
72
- | `/mcp` | - | MCP 设置 |
94
+ | `/mcp` | - | MCP 服务器状态 |
95
+ | `/yolo` | - | 切换写/执行操作自动确认 |
73
96
  | `/help` | `/帮助` | 查看帮助 |
74
97
  | `exit` | - | 退出 |
75
98
 
76
99
  输入 `/` 会弹出命令选择框,↑↓ 选择,Tab 补全。
77
100
 
101
+ ### MCP 配置
102
+
103
+ 编辑 `~/.thatgfsj/mcp.json`(兼容 Claude Code 的 `mcpServers` 键名):
104
+
105
+ ```json
106
+ {
107
+ "mcpServers": {
108
+ "filesystem": {
109
+ "command": "npx",
110
+ "args": ["-y", "@modelcontextprotocol/server-filesystem", "D:\\projects"]
111
+ }
112
+ }
113
+ }
114
+ ```
115
+
116
+ 重启后生效,工具以 `mcp__服务器名__工具名` 注册进对话,`/mcp` 查看连接状态。
117
+
78
118
  ### 消息队列
79
119
 
80
120
  AI 工作时可以继续输入,消息会排队等待:
@@ -117,11 +157,12 @@ AI 工作时可以继续输入,消息会排队等待:
117
157
 
118
158
  | 工具 | 功能 |
119
159
  |------|------|
120
- | `file` | 读/写/列表/删除文件 |
121
- | `shell` | 执行 shell 命令 |
122
- | `git` | Git 操作 |
123
- | `search` | 代码搜索 |
160
+ | `file` | 读/写/列表/删除文件(写/删需确认,写入带 diff 预览) |
161
+ | `shell` | 执行 shell 命令(每次确认,危险命令黑名单硬拦截) |
162
+ | `git` | Git 操作(写操作确认;参数以数组传递,无 shell 注入) |
163
+ | `search` | 代码搜索(纯 JS grep,Windows 原生可用) |
124
164
  | `nwt` | 项目演进记忆(见下方说明) |
165
+ | `mcp__*` | 来自 MCP 服务器的动态工具 |
125
166
 
126
167
  ### NWT - NeuroWeave Timeline
127
168
 
@@ -163,7 +204,7 @@ AI 工作时可以继续输入,消息会排队等待:
163
204
  | triage | 问题分级 |
164
205
  | git-workflow | Git 最佳实践 |
165
206
  | subagent | 任务分解 |
166
- | playwright | 浏览器自动化 |
207
+ | playwright | 浏览器自动化实践(提示词技能,Playwright 本身按需 `npx` 安装) |
167
208
  | frontend-design | UI/UX 实践 |
168
209
  | supabase | 数据库实践 |
169
210
  | neuroweave | 项目记忆 |
@@ -174,17 +215,18 @@ AI 工作时可以继续输入,消息会排队等待:
174
215
 
175
216
  ```
176
217
  src/
177
- ├── cmd/ # CLI 入口
178
- ├── app/ # 核心服务
218
+ ├── cmd/ # CLI 入口(交互 / 单次 / --json headless)
219
+ ├── app/ # 核心服务(组装、权限决策、模型热切换)
179
220
  ├── config/ # 配置 + Provider
180
- ├── llm/ # LLM 抽象层
181
- ├── session/ # 会话 + 自动压缩
182
- ├── tools/ # 工具系统
221
+ ├── llm/ # LLM 抽象层(openai / anthropic / gemini 三协议)
222
+ ├── cache/ # Prompt caching(稳定序列化、断点、智能 TTL、统计)
223
+ ├── session/ # 会话持久化 / resume / 自动压缩
224
+ ├── tools/ # 工具系统(权限确认、diff 预览)
183
225
  ├── skills/ # 16 个内置 Skills
184
226
  ├── tui/ # Ink TUI 组件
185
- ├── mcp/ # MCP 协议
227
+ ├── mcp/ # MCP stdio 客户端
186
228
  ├── hooks/ # 钩子系统
187
- ├── prompts/ # 系统提示
229
+ ├── prompts/ # 系统提示(分段构建)
188
230
  ├── utils/ # 工具函数
189
231
  └── types.ts # 全局类型
190
232
  ```
@@ -196,6 +238,7 @@ src/
196
238
  - [API Key 获取教程](./docs/API_KEY_GUIDE.md)
197
239
  - [常见问题 FAQ](./docs/FAQ.md)
198
240
  - [版本路线图](./ROADMAP.md)
241
+ - [更新日志](./CHANGELOG.md)
199
242
 
200
243
  ---
201
244
 
@@ -1,10 +1,21 @@
1
1
  /**
2
2
  * App - Core application singleton
3
- * Simplified: directly uses LLMService (which has built-in agent loop)
4
3
  *
5
- * v3.0.0+: streamResponse yields structured StreamChunk
6
- * - runPrompt streams { type: 'text' } chunks to stdout and captures the
7
- * final usage for cache stats recording.
4
+ * v3.0.5 wiring release:
5
+ * - MCP: servers from ~/.thatgfsj/mcp.json are connected at startup
6
+ * (per-server failures are non-fatal) and their tools join the
7
+ * registry before the system prompt is built. Child processes are
8
+ * disconnected on exit.
9
+ * - Permission pipeline: tool confirmations now actually reach the UI —
10
+ * App owns the mode ('ask' default, 'accept' via --yolo) and a
11
+ * pluggable confirmHandler (TUI prompt / headless auto-deny). With no
12
+ * handler and 'ask' mode, write/execute tool calls are DENIED instead
13
+ * of silently executed.
14
+ * - reloadModel(): /model hot-swaps provider+model without restarting;
15
+ * tools and the system prompt are rebuilt, TTL resolution resets.
16
+ * - applyTtl(): /ttl takes effect immediately (config + provider marker).
17
+ * - streamResponse() accepts an AbortSignal that reaches the provider
18
+ * fetch calls, so cancelling a round stops token generation.
8
19
  */
9
20
  import { ConfigManager } from '../config/index.js';
10
21
  import { LLMService } from '../llm/index.js';
@@ -14,7 +25,15 @@ import { HookManager } from '../hooks/index.js';
14
25
  import { SystemPromptBuilder } from '../prompts/index.js';
15
26
  import { SkillRegistry } from '../skills/index.js';
16
27
  import { CacheStatsStore } from '../cache/stats.js';
28
+ import { MCPServerManager, type McpConfigFile } from '../mcp/client.js';
17
29
  import type { ChatMessage, ChatResponse, StreamChunk, Usage } from '../types.js';
30
+ /** Read ~/.thatgfsj/mcp.json. Missing or corrupted file = no servers. */
31
+ export declare function loadMcpConfig(): McpConfigFile;
32
+ /** Confirmation request handed to the active UI. */
33
+ export interface ConfirmRequest {
34
+ /** Human-readable description of the action, including a diff preview when relevant. */
35
+ message: string;
36
+ }
18
37
  export declare class App {
19
38
  config: ConfigManager;
20
39
  llm: LLMService;
@@ -29,10 +48,18 @@ export declare class App {
29
48
  * and the /cache command.
30
49
  */
31
50
  cacheStats: CacheStatsStore;
51
+ /** v3.0.5: connected MCP servers (empty manager when none configured). */
52
+ mcp: MCPServerManager;
53
+ /** v3.0.5: startup results per configured MCP server, for /mcp output. */
54
+ mcpStartupResults: Array<{
55
+ name: string;
56
+ ok: boolean;
57
+ error?: string;
58
+ tools: number;
59
+ }>;
32
60
  /**
33
- * v2.2.5 (product 0.4.2): toggle block compression. Default
34
- * true. Toggled by `--show-thinking` on the CLI or `/thinking on|off`
35
- * in the REPL.
61
+ * v2.2.5: toggle thinking block compression. Default true. Toggled by
62
+ * `--show-thinking` on the CLI or `/thinking on|off` in the REPL.
36
63
  */
37
64
  showThinking: boolean;
38
65
  /**
@@ -41,8 +68,58 @@ export declare class App {
41
68
  * is '5m' or '1h' and stays sticky.
42
69
  */
43
70
  resolvedTtl: '5m' | '1h' | null;
71
+ /**
72
+ * v3.0.5: permission mode. 'ask' requires confirmation for write/execute
73
+ * tool actions; 'accept' (--yolo) allows everything.
74
+ */
75
+ permissionMode: 'ask' | 'accept';
76
+ /**
77
+ * v3.0.5: pluggable confirmation UI. The TUI installs an Ink prompt;
78
+ * headless mode leaves it unset → write/execute actions are denied with
79
+ * a note (add --yolo to allow them).
80
+ */
81
+ confirmHandler?: (req: ConfirmRequest) => Promise<boolean>;
44
82
  private constructor();
45
83
  static create(): Promise<App>;
84
+ /**
85
+ * v3.0.5: keep registry and LLMService tool contexts in sync. All asks
86
+ * funnel through requestConfirmation so the permission mode and the
87
+ * active UI handler apply uniformly.
88
+ */
89
+ private applyToolContext;
90
+ /**
91
+ * v3.0.5: central permission decision.
92
+ * - 'accept' mode (--yolo): always allowed.
93
+ * - handler installed (TUI): ask it, 60s timeout denies.
94
+ * - no handler (headless): deny with a hint on stderr.
95
+ */
96
+ requestConfirmation(req: ConfirmRequest): Promise<boolean>;
97
+ /**
98
+ * v3.0.5: single entry for toggling auto-accept. Also refreshes the
99
+ * system prompt's permission-mode section so the model knows tool calls
100
+ * no longer need user approval.
101
+ */
102
+ setYolo(on: boolean): void;
103
+ /**
104
+ * v3.0.5: hot-swap the model (and provider, if /provider changed it on
105
+ * disk). Rebuilds LLMService, re-registers every current tool, resets TTL
106
+ * resolution and refreshes the system prompt. /model previously only
107
+ * wrote the config file and required a restart.
108
+ */
109
+ reloadModel(): Promise<void>;
110
+ /**
111
+ * v3.0.5: apply a TTL pin immediately (config write-through + provider
112
+ * marker). /ttl previously only updated a display value; the wire format
113
+ * kept the old TTL until restart.
114
+ */
115
+ applyTtl(ttl: '5m' | '1h'): Promise<void>;
116
+ /** v3.0.5: rebuild the system prompt (tools / permission mode changed). */
117
+ rebuildSystemPrompt(): void;
118
+ /**
119
+ * v3.0.5: TUI hook-up — show MCP startup results as an in-chat message.
120
+ * Returns a short multi-line report (empty when no servers configured).
121
+ */
122
+ mcpStatusText(): string;
46
123
  /**
47
124
  * Stream a response for the current session messages.
48
125
  * The LLMService handles the full agent loop internally.
@@ -50,26 +127,20 @@ export declare class App {
50
127
  * Yields structured StreamChunks. Returns the final ChatResponse (with usage
51
128
  * if the provider reported it) so the caller can record cache stats.
52
129
  *
53
- * Implementation note: we drain the inner stream manually so the final
54
- * ChatResponse returned by LLMService.chatStream is propagated as this
55
- * generator's return value. Using yield* doesn't carry the return value
56
- * through TS's AsyncGenerator<T, R> type inference in this version of
57
- * TypeScript, so we wrap with an inner for-await and explicit return.
130
+ * v3.0.5: accepts { signal } propagated into provider fetch calls so
131
+ * cancellation actually aborts the HTTP request.
58
132
  */
59
- streamResponse(messages?: ChatMessage[]): AsyncGenerator<StreamChunk, ChatResponse>;
133
+ streamResponse(messages?: ChatMessage[], opts?: {
134
+ signal?: AbortSignal;
135
+ }): AsyncGenerator<StreamChunk, ChatResponse>;
60
136
  /**
61
137
  * Run a single prompt (non-interactive mode)
62
138
  *
63
- * v2.2.4 (port from v2.1.0): persistence of the assistant message
64
- * uses addMessageSafe, which drops the message if it contains
65
- * pollution markers like "[已中断]".
66
- *
67
- * v2.2.5 (product 0.4.2): persistence also strips blocks
68
- * (and similar reasoning delimiters) when showThinking is false,
69
- * so the conversation log stays compact.
139
+ * v2.2.4: persistence of the assistant message uses addMessageSafe, which
140
+ * drops the message if it contains pollution markers like "[已中断]".
70
141
  *
71
- * v3.0.0: yields structured StreamChunks; final usage is captured
72
- * into onUsage callback for cache stats persistence.
142
+ * v3.0.0: yields structured StreamChunks; final usage is captured.
143
+ * v3.0.5: persists the session to disk when the round completes.
73
144
  */
74
145
  runPrompt(prompt: string, onUsage?: (usage: Usage) => void): Promise<string>;
75
146
  }
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/app/index.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAEH,OAAO,EAAE,aAAa,EAAE,MAAM,oBAAoB,CAAC;AACnD,OAAO,EAAE,UAAU,EAAE,MAAM,iBAAiB,CAAC;AAC7C,OAAO,EAAE,cAAc,EAAE,MAAM,qBAAqB,CAAC;AACrD,OAAO,EAAE,YAAY,EAAE,MAAM,mBAAmB,CAAC;AACjD,OAAO,EAAE,WAAW,EAAE,MAAM,mBAAmB,CAAC;AAChD,OAAO,EAAE,mBAAmB,EAAE,MAAM,qBAAqB,CAAC;AAC1D,OAAO,EAAE,aAAa,EAAE,MAAM,oBAAoB,CAAC;AACnD,OAAO,EAAE,eAAe,EAAE,MAAM,mBAAmB,CAAC;AAEpD,OAAO,KAAK,EAAE,WAAW,EAAE,YAAY,EAAE,WAAW,EAAE,KAAK,EAAE,MAAM,aAAa,CAAC;AAEjF,qBAAa,GAAG;IACd,MAAM,EAAE,aAAa,CAAC;IACtB,GAAG,EAAE,UAAU,CAAC;IAChB,OAAO,EAAE,cAAc,CAAC;IACxB,KAAK,EAAE,YAAY,CAAC;IACpB,KAAK,EAAE,WAAW,CAAC;IACnB,OAAO,EAAE,mBAAmB,CAAC;IAC7B,MAAM,EAAE,aAAa,CAAC;IACtB;;;;OAIG;IACH,UAAU,EAAE,eAAe,CAAC;IAC5B;;;;OAIG;IACH,YAAY,EAAE,OAAO,CAAS;IAC9B;;;;OAIG;IACH,WAAW,EAAE,IAAI,GAAG,IAAI,GAAG,IAAI,CAAQ;IAEvC,OAAO;WAoBM,MAAM,IAAI,OAAO,CAAC,GAAG,CAAC;IAyCnC;;;;;;;;;;;;OAYG;IACI,cAAc,CAAC,QAAQ,CAAC,EAAE,WAAW,EAAE,GAAG,cAAc,CAAC,WAAW,EAAE,YAAY,CAAC;IA6B1F;;;;;;;;;;;;;OAaG;IACG,SAAS,CAAC,MAAM,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,CAAC,KAAK,EAAE,KAAK,KAAK,IAAI,GAAG,OAAO,CAAC,MAAM,CAAC;CAgCnF"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/app/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;GAkBG;AAKH,OAAO,EAAE,aAAa,EAAE,MAAM,oBAAoB,CAAC;AACnD,OAAO,EAAE,UAAU,EAAE,MAAM,iBAAiB,CAAC;AAC7C,OAAO,EAAE,cAAc,EAAE,MAAM,qBAAqB,CAAC;AACrD,OAAO,EAAE,YAAY,EAAE,MAAM,mBAAmB,CAAC;AAEjD,OAAO,EAAE,WAAW,EAAE,MAAM,mBAAmB,CAAC;AAChD,OAAO,EAAE,mBAAmB,EAAE,MAAM,qBAAqB,CAAC;AAC1D,OAAO,EAAE,aAAa,EAAE,MAAM,oBAAoB,CAAC;AACnD,OAAO,EAAE,eAAe,EAAE,MAAM,mBAAmB,CAAC;AAEpD,OAAO,EAAE,gBAAgB,EAAE,KAAK,aAAa,EAAE,MAAM,kBAAkB,CAAC;AACxE,OAAO,KAAK,EAAE,WAAW,EAAE,YAAY,EAAE,WAAW,EAAE,KAAK,EAAE,MAAM,aAAa,CAAC;AAEjF,yEAAyE;AACzE,wBAAgB,aAAa,IAAI,aAAa,CAU7C;AAED,oDAAoD;AACpD,MAAM,WAAW,cAAc;IAC7B,wFAAwF;IACxF,OAAO,EAAE,MAAM,CAAC;CACjB;AAED,qBAAa,GAAG;IACd,MAAM,EAAE,aAAa,CAAC;IACtB,GAAG,EAAE,UAAU,CAAC;IAChB,OAAO,EAAE,cAAc,CAAC;IACxB,KAAK,EAAE,YAAY,CAAC;IACpB,KAAK,EAAE,WAAW,CAAC;IACnB,OAAO,EAAE,mBAAmB,CAAC;IAC7B,MAAM,EAAE,aAAa,CAAC;IACtB;;;;OAIG;IACH,UAAU,EAAE,eAAe,CAAC;IAC5B,0EAA0E;IAC1E,GAAG,EAAE,gBAAgB,CAAC;IACtB,0EAA0E;IAC1E,iBAAiB,EAAE,KAAK,CAAC;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,EAAE,EAAE,OAAO,CAAC;QAAC,KAAK,CAAC,EAAE,MAAM,CAAC;QAAC,KAAK,EAAE,MAAM,CAAA;KAAE,CAAC,CAAM;IAC5F;;;OAGG;IACH,YAAY,EAAE,OAAO,CAAS;IAC9B;;;;OAIG;IACH,WAAW,EAAE,IAAI,GAAG,IAAI,GAAG,IAAI,CAAQ;IACvC;;;OAGG;IACH,cAAc,EAAE,KAAK,GAAG,QAAQ,CAAS;IACzC;;;;OAIG;IACH,cAAc,CAAC,EAAE,CAAC,GAAG,EAAE,cAAc,KAAK,OAAO,CAAC,OAAO,CAAC,CAAC;IAE3D,OAAO;WAsBM,MAAM,IAAI,OAAO,CAAC,GAAG,CAAC;IAuEnC;;;;OAIG;IACH,OAAO,CAAC,gBAAgB;IAUxB;;;;;OAKG;IACG,mBAAmB,CAAC,GAAG,EAAE,cAAc,GAAG,OAAO,CAAC,OAAO,CAAC;IAsBhE;;;;OAIG;IACH,OAAO,CAAC,EAAE,EAAE,OAAO,GAAG,IAAI;IAK1B;;;;;OAKG;IACG,WAAW,IAAI,OAAO,CAAC,IAAI,CAAC;IAUlC;;;;OAIG;IACG,QAAQ,CAAC,GAAG,EAAE,IAAI,GAAG,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC;IAO/C,2EAA2E;IAC3E,mBAAmB,IAAI,IAAI;IAO3B;;;OAGG;IACH,aAAa,IAAI,MAAM;IAmCvB;;;;;;;;;OASG;IACI,cAAc,CAAC,QAAQ,CAAC,EAAE,WAAW,EAAE,EAAE,IAAI,CAAC,EAAE;QAAE,MAAM,CAAC,EAAE,WAAW,CAAA;KAAE,GAAG,cAAc,CAAC,WAAW,EAAE,YAAY,CAAC;IAwB3H;;;;;;;;OAQG;IACG,SAAS,CAAC,MAAM,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,CAAC,KAAK,EAAE,KAAK,KAAK,IAAI,GAAG,OAAO,CAAC,MAAM,CAAC;CA+BnF"}