@zqagent/core 0.2.20 → 0.3.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 (238) hide show
  1. package/README.md +1 -1
  2. package/README.oss.en.md +3 -3
  3. package/README.oss.md +8 -3
  4. package/README.oss.zh-TW.md +3 -3
  5. package/dist/McpClient-CEQBUPuC.d.cts +145 -0
  6. package/dist/McpClient-CEQBUPuC.d.ts +145 -0
  7. package/dist/{ToolRegistry-C3pTFiaJ.d.cts → ToolRegistry-Cy0fQxrb.d.ts} +2 -111
  8. package/dist/{ToolRegistry-C3pTFiaJ.d.ts → ToolRegistry-DouDvn9E.d.cts} +2 -111
  9. package/dist/{explore-RtZtb-V6.d.ts → TurnEngine-BPKhWuSI.d.cts} +108 -73
  10. package/dist/{explore-BgRhj6SP.d.cts → TurnEngine-DtGEuVLT.d.ts} +108 -73
  11. package/dist/conflictGuard-BBOOIxxK.d.cts +42 -0
  12. package/dist/conflictGuard-BBOOIxxK.d.ts +42 -0
  13. package/dist/index.cjs +5930 -1114
  14. package/dist/index.cjs.map +1 -1
  15. package/dist/index.d.cts +577 -195
  16. package/dist/index.d.ts +577 -195
  17. package/dist/index.js +5761 -979
  18. package/dist/index.js.map +1 -1
  19. package/dist/internal/crypto/secrets.cjs +25 -0
  20. package/dist/internal/crypto/secrets.cjs.map +1 -0
  21. package/dist/internal/crypto/secrets.d.cts +2 -0
  22. package/dist/internal/crypto/secrets.d.ts +2 -0
  23. package/dist/internal/crypto/secrets.js +3 -0
  24. package/dist/internal/crypto/secrets.js.map +1 -0
  25. package/dist/internal/engine/FileLogHook.cjs +179 -0
  26. package/dist/internal/engine/FileLogHook.cjs.map +1 -0
  27. package/dist/internal/engine/FileLogHook.d.cts +67 -0
  28. package/dist/internal/engine/FileLogHook.d.ts +67 -0
  29. package/dist/internal/engine/FileLogHook.js +144 -0
  30. package/dist/internal/engine/FileLogHook.js.map +1 -0
  31. package/dist/internal/engine/approvalView.cjs +25 -0
  32. package/dist/internal/engine/approvalView.cjs.map +1 -0
  33. package/dist/internal/engine/approvalView.d.cts +1 -0
  34. package/dist/internal/engine/approvalView.d.ts +1 -0
  35. package/dist/internal/engine/approvalView.js +3 -0
  36. package/dist/internal/engine/approvalView.js.map +1 -0
  37. package/dist/internal/engine/limits.cjs +59 -0
  38. package/dist/internal/engine/limits.cjs.map +1 -0
  39. package/dist/internal/engine/limits.d.cts +32 -0
  40. package/dist/internal/engine/limits.d.ts +32 -0
  41. package/dist/internal/engine/limits.js +31 -0
  42. package/dist/internal/engine/limits.js.map +1 -0
  43. package/dist/internal/engine/sessionNaming.cjs +47 -0
  44. package/dist/internal/engine/sessionNaming.cjs.map +1 -0
  45. package/dist/internal/engine/sessionNaming.d.cts +25 -0
  46. package/dist/internal/engine/sessionNaming.d.ts +25 -0
  47. package/dist/internal/engine/sessionNaming.js +20 -0
  48. package/dist/internal/engine/sessionNaming.js.map +1 -0
  49. package/dist/internal/llmConfig.cjs +561 -0
  50. package/dist/internal/llmConfig.cjs.map +1 -0
  51. package/dist/internal/llmConfig.d.cts +75 -0
  52. package/dist/internal/llmConfig.d.ts +75 -0
  53. package/dist/internal/llmConfig.js +535 -0
  54. package/dist/internal/llmConfig.js.map +1 -0
  55. package/dist/internal/mcp/builtin/index.cjs +685 -0
  56. package/dist/internal/mcp/builtin/index.cjs.map +1 -0
  57. package/dist/internal/mcp/builtin/index.d.cts +21 -0
  58. package/dist/internal/mcp/builtin/index.d.ts +21 -0
  59. package/dist/internal/mcp/builtin/index.js +652 -0
  60. package/dist/internal/mcp/builtin/index.js.map +1 -0
  61. package/dist/internal/mcp/config.cjs +278 -0
  62. package/dist/internal/mcp/config.cjs.map +1 -0
  63. package/dist/internal/mcp/config.d.cts +61 -0
  64. package/dist/internal/mcp/config.d.ts +61 -0
  65. package/dist/internal/mcp/config.js +235 -0
  66. package/dist/internal/mcp/config.js.map +1 -0
  67. package/dist/internal/mcp/presets.cjs +184 -0
  68. package/dist/internal/mcp/presets.cjs.map +1 -0
  69. package/dist/internal/mcp/presets.d.cts +39 -0
  70. package/dist/internal/mcp/presets.d.ts +39 -0
  71. package/dist/internal/mcp/presets.js +158 -0
  72. package/dist/internal/mcp/presets.js.map +1 -0
  73. package/dist/internal/node-name.cjs +45 -0
  74. package/dist/internal/node-name.cjs.map +1 -0
  75. package/dist/internal/node-name.d.cts +3 -0
  76. package/dist/internal/node-name.d.ts +3 -0
  77. package/dist/internal/node-name.js +10 -0
  78. package/dist/internal/node-name.js.map +1 -0
  79. package/dist/internal/paths.cjs +63 -0
  80. package/dist/internal/paths.cjs.map +1 -0
  81. package/dist/internal/paths.d.cts +17 -0
  82. package/dist/internal/paths.d.ts +17 -0
  83. package/dist/internal/paths.js +25 -0
  84. package/dist/internal/paths.js.map +1 -0
  85. package/dist/internal/providers/diagnostics.cjs +288 -0
  86. package/dist/internal/providers/diagnostics.cjs.map +1 -0
  87. package/dist/internal/providers/diagnostics.d.cts +103 -0
  88. package/dist/internal/providers/diagnostics.d.ts +103 -0
  89. package/dist/internal/providers/diagnostics.js +250 -0
  90. package/dist/internal/providers/diagnostics.js.map +1 -0
  91. package/dist/internal/providers/models.cjs +699 -0
  92. package/dist/internal/providers/models.cjs.map +1 -0
  93. package/dist/internal/providers/models.d.cts +136 -0
  94. package/dist/internal/providers/models.d.ts +136 -0
  95. package/dist/internal/providers/models.js +654 -0
  96. package/dist/internal/providers/models.js.map +1 -0
  97. package/dist/internal/terminal.cjs +161 -0
  98. package/dist/internal/terminal.cjs.map +1 -0
  99. package/dist/internal/terminal.d.cts +58 -0
  100. package/dist/internal/terminal.d.ts +58 -0
  101. package/dist/internal/terminal.js +128 -0
  102. package/dist/internal/terminal.js.map +1 -0
  103. package/dist/internal/tools/execAsync.cjs +187 -0
  104. package/dist/internal/tools/execAsync.cjs.map +1 -0
  105. package/dist/internal/tools/execAsync.d.cts +30 -0
  106. package/dist/internal/tools/execAsync.d.ts +30 -0
  107. package/dist/internal/tools/execAsync.js +162 -0
  108. package/dist/internal/tools/execAsync.js.map +1 -0
  109. package/dist/internal/tools/git.cjs +935 -0
  110. package/dist/internal/tools/git.cjs.map +1 -0
  111. package/dist/internal/tools/git.d.cts +206 -0
  112. package/dist/internal/tools/git.d.ts +206 -0
  113. package/dist/internal/tools/git.js +883 -0
  114. package/dist/internal/tools/git.js.map +1 -0
  115. package/dist/internal/tools/pathSafety.cjs +99 -0
  116. package/dist/internal/tools/pathSafety.cjs.map +1 -0
  117. package/dist/internal/tools/pathSafety.d.cts +44 -0
  118. package/dist/internal/tools/pathSafety.d.ts +44 -0
  119. package/dist/internal/tools/pathSafety.js +61 -0
  120. package/dist/internal/tools/pathSafety.js.map +1 -0
  121. package/dist/internal/tools/plan.cjs +146 -0
  122. package/dist/internal/tools/plan.cjs.map +1 -0
  123. package/dist/internal/tools/plan.d.cts +48 -0
  124. package/dist/internal/tools/plan.d.ts +48 -0
  125. package/dist/internal/tools/plan.js +117 -0
  126. package/dist/internal/tools/plan.js.map +1 -0
  127. package/dist/internal/tools/ripgrep.cjs +118 -0
  128. package/dist/internal/tools/ripgrep.cjs.map +1 -0
  129. package/dist/internal/tools/ripgrep.d.cts +6 -0
  130. package/dist/internal/tools/ripgrep.d.ts +6 -0
  131. package/dist/internal/tools/ripgrep.js +89 -0
  132. package/dist/internal/tools/ripgrep.js.map +1 -0
  133. package/dist/internal/tools/sandbox.cjs +253 -0
  134. package/dist/internal/tools/sandbox.cjs.map +1 -0
  135. package/dist/internal/tools/sandbox.d.cts +67 -0
  136. package/dist/internal/tools/sandbox.d.ts +67 -0
  137. package/dist/internal/tools/sandbox.js +213 -0
  138. package/dist/internal/tools/sandbox.js.map +1 -0
  139. package/dist/internal/tools/shell.cjs +771 -0
  140. package/dist/internal/tools/shell.cjs.map +1 -0
  141. package/dist/internal/tools/shell.d.cts +47 -0
  142. package/dist/internal/tools/shell.d.ts +47 -0
  143. package/dist/internal/tools/shell.js +731 -0
  144. package/dist/internal/tools/shell.js.map +1 -0
  145. package/dist/internal/tools/shellRuntime.cjs +220 -0
  146. package/dist/internal/tools/shellRuntime.cjs.map +1 -0
  147. package/dist/internal/tools/shellRuntime.d.cts +67 -0
  148. package/dist/internal/tools/shellRuntime.d.ts +67 -0
  149. package/dist/internal/tools/shellRuntime.js +181 -0
  150. package/dist/internal/tools/shellRuntime.js.map +1 -0
  151. package/dist/internal/update/controller.cjs +1035 -0
  152. package/dist/internal/update/controller.cjs.map +1 -0
  153. package/dist/internal/update/controller.d.cts +150 -0
  154. package/dist/internal/update/controller.d.ts +150 -0
  155. package/dist/internal/update/controller.js +991 -0
  156. package/dist/internal/update/controller.js.map +1 -0
  157. package/dist/internal/update/platform.cjs +234 -0
  158. package/dist/internal/update/platform.cjs.map +1 -0
  159. package/dist/internal/update/platform.d.cts +77 -0
  160. package/dist/internal/update/platform.d.ts +77 -0
  161. package/dist/internal/update/platform.js +184 -0
  162. package/dist/internal/update/platform.js.map +1 -0
  163. package/dist/tools/ask.d.cts +3 -1
  164. package/dist/tools/ask.d.ts +3 -1
  165. package/dist/tools/diff.cjs +17 -6
  166. package/dist/tools/diff.cjs.map +1 -1
  167. package/dist/tools/diff.d.cts +5 -2
  168. package/dist/tools/diff.d.ts +5 -2
  169. package/dist/tools/diff.js +17 -6
  170. package/dist/tools/diff.js.map +1 -1
  171. package/dist/tools/directories.d.cts +3 -1
  172. package/dist/tools/directories.d.ts +3 -1
  173. package/dist/tools/explore.cjs +1778 -204
  174. package/dist/tools/explore.cjs.map +1 -1
  175. package/dist/tools/explore.d.cts +82 -2
  176. package/dist/tools/explore.d.ts +82 -2
  177. package/dist/tools/explore.js +1780 -204
  178. package/dist/tools/explore.js.map +1 -1
  179. package/dist/tools/files.cjs +56 -21
  180. package/dist/tools/files.cjs.map +1 -1
  181. package/dist/tools/files.d.cts +6 -3
  182. package/dist/tools/files.d.ts +6 -3
  183. package/dist/tools/files.js +56 -21
  184. package/dist/tools/files.js.map +1 -1
  185. package/dist/tools/git.cjs +34 -25
  186. package/dist/tools/git.cjs.map +1 -1
  187. package/dist/tools/git.d.cts +4 -204
  188. package/dist/tools/git.d.ts +4 -204
  189. package/dist/tools/git.js +34 -25
  190. package/dist/tools/git.js.map +1 -1
  191. package/dist/tools/media.cjs +280 -3
  192. package/dist/tools/media.cjs.map +1 -1
  193. package/dist/tools/media.d.cts +3 -1
  194. package/dist/tools/media.d.ts +3 -1
  195. package/dist/tools/media.js +278 -1
  196. package/dist/tools/media.js.map +1 -1
  197. package/dist/tools/plan.cjs +62 -0
  198. package/dist/tools/plan.cjs.map +1 -1
  199. package/dist/tools/plan.d.cts +4 -17
  200. package/dist/tools/plan.d.ts +4 -17
  201. package/dist/tools/plan.js +59 -0
  202. package/dist/tools/plan.js.map +1 -1
  203. package/dist/tools/search.cjs +3 -0
  204. package/dist/tools/search.cjs.map +1 -1
  205. package/dist/tools/search.d.cts +3 -1
  206. package/dist/tools/search.d.ts +3 -1
  207. package/dist/tools/search.js +3 -0
  208. package/dist/tools/search.js.map +1 -1
  209. package/dist/tools/shell.cjs +76 -11
  210. package/dist/tools/shell.cjs.map +1 -1
  211. package/dist/tools/shell.d.cts +5 -39
  212. package/dist/tools/shell.d.ts +5 -39
  213. package/dist/tools/shell.js +75 -11
  214. package/dist/tools/shell.js.map +1 -1
  215. package/dist/tools/todo.d.cts +3 -1
  216. package/dist/tools/todo.d.ts +3 -1
  217. package/dist/tools/web.cjs +279 -5
  218. package/dist/tools/web.cjs.map +1 -1
  219. package/dist/tools/web.d.cts +3 -1
  220. package/dist/tools/web.d.ts +3 -1
  221. package/dist/tools/web.js +275 -3
  222. package/dist/tools/web.js.map +1 -1
  223. package/dist/types-BYyXWWPW.d.cts +237 -0
  224. package/dist/types-BYyXWWPW.d.ts +237 -0
  225. package/package.json +26 -37
  226. package/bin/zqagent +0 -2
  227. package/dist/cli/index.cjs +0 -25218
  228. package/dist/cli/index.cjs.map +0 -1
  229. package/dist/cli/index.d.cts +0 -2
  230. package/dist/cli/index.d.ts +0 -2
  231. package/dist/cli/index.js +0 -25201
  232. package/dist/cli/index.js.map +0 -1
  233. package/dist/server/index.cjs +0 -20510
  234. package/dist/server/index.cjs.map +0 -1
  235. package/dist/server/index.d.cts +0 -2
  236. package/dist/server/index.d.ts +0 -2
  237. package/dist/server/index.js +0 -20493
  238. package/dist/server/index.js.map +0 -1
package/README.md CHANGED
@@ -22,7 +22,7 @@ ZQAgent 是可自托管的 AI 编码 Agent。它自己读代码、改文件、
22
22
  需要 **Node.js >= 18.17**。
23
23
 
24
24
  ```bash
25
- npm i -g @zqagent/core
25
+ npm i -g @zqagent/cli
26
26
  zqagent
27
27
  ```
28
28
 
package/README.oss.en.md CHANGED
@@ -40,7 +40,7 @@ The script downloads a single-file executable for your architecture, verifies it
40
40
  **Other platforms / npm** (requires Node.js >= 18.17)
41
41
 
42
42
  ```bash
43
- npm i -g @zqagent/core
43
+ npm i -g @zqagent/cli
44
44
  zqagent
45
45
  ```
46
46
 
@@ -51,7 +51,7 @@ To run from source instead:
51
51
  ```bash
52
52
  pnpm install
53
53
  pnpm build
54
- node packages/core/bin/zqagent
54
+ node packages/cli/bin/zqagent
55
55
  ```
56
56
 
57
57
  ## Quick start
@@ -153,7 +153,7 @@ User group (WeChat, mainly in Chinese): scan to join — ask questions, report b
153
153
  features without sending a friend request. When a group fills up, new members are routed to a
154
154
  fresh group automatically, so the same code keeps working.
155
155
 
156
- <img src="./docs/assets/wecom-group.png" alt="ZQAgent user group QR code" width="200" />
156
+ <img src="https://agent.cd-zq.com/wecom-group.png" alt="ZQAgent user group QR code" width="200" />
157
157
 
158
158
  Group rules and more ways to reach us: <https://agent.cd-zq.com/en/community/>
159
159
 
package/README.oss.md CHANGED
@@ -40,7 +40,7 @@ curl -fsSL https://agent.cd-zq.com/install.sh | sh
40
40
  **其它平台 / 用 npm 管理版本**(需要 Node.js >= 18.17)
41
41
 
42
42
  ```bash
43
- npm i -g @zqagent/core
43
+ npm i -g @zqagent/cli
44
44
  zqagent
45
45
  ```
46
46
 
@@ -53,9 +53,13 @@ zqagent
53
53
  ```bash
54
54
  pnpm install
55
55
  pnpm build
56
- node packages/core/bin/zqagent
56
+ node packages/cli/bin/zqagent
57
57
  ```
58
58
 
59
+ 在自己的项目里**嵌入**引擎(不需要 CLI / 服务)见
60
+ [docs/embedding.md](./docs/embedding.md),可运行示例在
61
+ [`examples/embed-basic`](./examples/embed-basic/src/main.ts)。
62
+
59
63
  ## 快速开始
60
64
 
61
65
  ```text
@@ -135,6 +139,7 @@ ZQAgent 的前提是**模型输出不可信**:
135
139
  | 主题 | 文档 |
136
140
  | --- | --- |
137
141
  | 架构与事件流 | [docs/architecture.md](./docs/architecture.md) |
142
+ | 作为库嵌入自有项目 | [docs/embedding.md](./docs/embedding.md) |
138
143
  | 线协议(帧 / 消息 / 签名) | [docs/wire-protocol.md](./docs/wire-protocol.md) |
139
144
  | 上下文压缩 | [docs/context-compaction.md](./docs/context-compaction.md) |
140
145
  | 节点服务 REST API | [docs/server-api.md](./docs/server-api.md) |
@@ -157,7 +162,7 @@ ZQAgent 的前提是**模型输出不可信**:
157
162
  用户群(微信群):扫码加入,提问、报 Bug、提需求都行,不用加好友。
158
163
  群满会自动切换到新群,同一个码长期有效。
159
164
 
160
- <img src="./docs/assets/wecom-group.png" alt="ZQAgent 用户群二维码" width="200" />
165
+ <img src="https://agent.cd-zq.com/wecom-group.png" alt="ZQAgent 用户群二维码" width="200" />
161
166
 
162
167
  站点上的说明与群规:<https://agent.cd-zq.com/community/>
163
168
 
@@ -40,7 +40,7 @@ curl -fsSL https://agent.cd-zq.com/install.sh | sh
40
40
  **其它平台 / 用 npm**(需要 Node.js >= 18.17)
41
41
 
42
42
  ```bash
43
- npm i -g @zqagent/core
43
+ npm i -g @zqagent/cli
44
44
  zqagent
45
45
  ```
46
46
 
@@ -53,7 +53,7 @@ zqagent
53
53
  ```bash
54
54
  pnpm install
55
55
  pnpm build
56
- node packages/core/bin/zqagent
56
+ node packages/cli/bin/zqagent
57
57
  ```
58
58
 
59
59
  ## 快速開始
@@ -157,7 +157,7 @@ ZQAgent 的前提是**模型輸出不可信**:
157
157
  使用者群(微信群):掃碼加入,提問、回報 Bug、提需求都可以,不需要加好友。
158
158
  群滿會自動切換到新群,同一個碼長期有效。
159
159
 
160
- <img src="./docs/assets/wecom-group.png" alt="ZQAgent 使用者群 QR Code" width="200" />
160
+ <img src="https://agent.cd-zq.com/wecom-group.png" alt="ZQAgent 使用者群 QR Code" width="200" />
161
161
 
162
162
  站點上的說明與群規:<https://agent.cd-zq.com/community/>
163
163
 
@@ -0,0 +1,145 @@
1
+ /**
2
+ * 内置 MCP 服务器的运行时上下文
3
+ *
4
+ * 内置服务器与外部 stdio/http 服务器不同:它运行在同一个进程内,
5
+ * 通过 SDK 的 InMemoryTransport 与 McpClient 通信。上下文用于向内置
6
+ * 服务器注入工作区、环境变量,以及可选的 LLM(多模态 OCR 兜底)配置。
7
+ */
8
+ /** 多模态 LLM 兜底配置(来自当前 provider 连接) */
9
+ interface OcrLlmConfig {
10
+ baseURL?: string;
11
+ apiKey?: string;
12
+ model?: string;
13
+ }
14
+ /** 可注入的运行时依赖(测试用;生产环境使用默认实现) */
15
+ interface OcrRuntimeOverrides {
16
+ platform?: NodeJS.Platform;
17
+ env?: NodeJS.ProcessEnv;
18
+ fileExists?: (p: string) => boolean;
19
+ which?: (name: string) => string | null;
20
+ /** 执行外部命令(返回 stdout/stderr),失败时抛错 */
21
+ run?: (command: string, args: string[], opts?: {
22
+ timeoutMs?: number;
23
+ cwd?: string;
24
+ }) => Promise<{
25
+ stdout: string;
26
+ stderr: string;
27
+ }>;
28
+ /** 抓取远程图片 */
29
+ fetchImpl?: (url: string) => Promise<{
30
+ ok: boolean;
31
+ status: number;
32
+ arrayBuffer(): Promise<ArrayBuffer>;
33
+ }>;
34
+ /** 多模态模型调用(默认走 OpenAI 兼容接口) */
35
+ llmComplete?: (req: {
36
+ model: string;
37
+ prompt: string;
38
+ imageDataUrl: string;
39
+ baseURL?: string;
40
+ apiKey?: string;
41
+ }) => Promise<string>;
42
+ /** 临时目录根(默认 os.tmpdir()) */
43
+ tmpDir?: string;
44
+ }
45
+ /** 内置 MCP 服务器上下文 */
46
+ interface McpBuiltinContext {
47
+ /** 工作区根目录(用于缓存编译产物,如 .agent/bin/ocr-vision) */
48
+ workspace?: string;
49
+ /** 进程环境变量(默认 process.env) */
50
+ env?: NodeJS.ProcessEnv;
51
+ /** 多模态 LLM 兜底配置 */
52
+ llm?: OcrLlmConfig;
53
+ /** OCR 运行时依赖覆盖(测试用) */
54
+ ocr?: OcrRuntimeOverrides;
55
+ }
56
+
57
+ /**
58
+ * MCP 客户端(McpClient)
59
+ *
60
+ * 基于 @modelcontextprotocol/sdk 封装单个 MCP 服务器的连接与工具调用,
61
+ * 支持四种传输:
62
+ * - stdio:本地子进程(如 `npx -y @some/mcp-server`)
63
+ * - http :远程 streamable HTTP 端点
64
+ * - sse :远程 SSE 端点(旧协议,兼容 Claude/Cursor 配置)
65
+ * - builtin:进程内内置服务器(InMemoryTransport,如内置 OCR)
66
+ *
67
+ * 提供工具列表拉取、工具调用(结果归一化为文本)、连接生命周期管理,
68
+ * 以及 OpenAI 工具名兼容的命名工具(sanitize + 前缀)。
69
+ */
70
+
71
+ /** 传输类型 */
72
+ type McpTransportType = "stdio" | "http" | "sse" | "builtin";
73
+ /** MCP 服务器配置 */
74
+ interface McpServerConfig {
75
+ /** 服务器名称(唯一标识,也是注册到 ToolRegistry 的工具名前缀) */
76
+ name: string;
77
+ /** 传输类型:stdio=本地子进程 / http=远程端点 / sse=旧版远程端点 / builtin=进程内内置服务器 */
78
+ type: McpTransportType;
79
+ /** stdio 传输:启动命令,如 ["npx","-y","@modelcontextprotocol/server-filesystem","/tmp"] */
80
+ command?: string[];
81
+ /** stdio 传输:子进程工作目录(相对路径按当前进程 cwd 解析) */
82
+ cwd?: string;
83
+ /** http 传输:远程端点 URL */
84
+ url?: string;
85
+ /** http 传输:自定义请求头(如 Authorization) */
86
+ headers?: Record<string, string>;
87
+ /** stdio 传输:子进程环境变量 */
88
+ env?: Record<string, string>;
89
+ /** 是否启用(默认 true;禁用时不连接、不注册工具) */
90
+ enabled?: boolean;
91
+ /** builtin 传输:内置服务器标识(缺省时使用 name,如 "ocr") */
92
+ builtin?: string;
93
+ }
94
+ /** McpClient 构造选项 */
95
+ interface McpClientOptions {
96
+ /** 内置服务器运行时上下文(仅 type=builtin 时使用) */
97
+ builtin?: McpBuiltinContext;
98
+ }
99
+ /** 从服务器拉取到的单个工具信息 */
100
+ interface McpToolInfo {
101
+ /** 原始工具名(未加前缀) */
102
+ name: string;
103
+ description?: string;
104
+ /** JSON Schema 参数定义 */
105
+ inputSchema: Record<string, unknown>;
106
+ }
107
+ /**
108
+ * 工具名净化:OpenAI 工具名仅允许 [a-zA-Z0-9_-],
109
+ * 其余字符替换为 `_` 并截断到 maxLen。
110
+ * 净化后不含任何字母/数字(纯符号)时回退为 "tool"。
111
+ */
112
+ declare function sanitizeToolName(name: string, maxLen?: number): string;
113
+ /**
114
+ * 注册到 ToolRegistry 的完整工具键:
115
+ * `mcp__<server>__<tool>`(server 与 tool 均净化,避免冲突与非法字符)
116
+ */
117
+ declare function mcpToolKey(server: string, tool: string): string;
118
+ declare class McpClient {
119
+ readonly config: McpServerConfig;
120
+ private options;
121
+ private client;
122
+ private transport;
123
+ private _tools;
124
+ constructor(config: McpServerConfig, options?: McpClientOptions);
125
+ get name(): string;
126
+ get connected(): boolean;
127
+ /**
128
+ * 建立连接并拉取工具列表。
129
+ * 已连接时幂等(直接返回)。
130
+ */
131
+ connect(): Promise<void>;
132
+ /** 当前服务器提供的工具列表(副本) */
133
+ listTools(): McpToolInfo[];
134
+ /**
135
+ * 调用工具,把 MCP 结果归一化为文本(或错误对象)。
136
+ *
137
+ * 服务器返回 isError=true 时不抛异常,而是返回
138
+ * `{ error, isError: true }`,让模型看到错误信息继续处理。
139
+ */
140
+ callTool(name: string, args: Record<string, unknown>): Promise<unknown>;
141
+ /** 关闭连接,释放子进程/HTTP 会话 */
142
+ close(): Promise<void>;
143
+ }
144
+
145
+ export { type McpBuiltinContext as M, type OcrLlmConfig as O, type McpServerConfig as a, McpClient as b, type McpClientOptions as c, type McpToolInfo as d, type McpTransportType as e, type OcrRuntimeOverrides as f, mcpToolKey as m, sanitizeToolName as s };
@@ -0,0 +1,145 @@
1
+ /**
2
+ * 内置 MCP 服务器的运行时上下文
3
+ *
4
+ * 内置服务器与外部 stdio/http 服务器不同:它运行在同一个进程内,
5
+ * 通过 SDK 的 InMemoryTransport 与 McpClient 通信。上下文用于向内置
6
+ * 服务器注入工作区、环境变量,以及可选的 LLM(多模态 OCR 兜底)配置。
7
+ */
8
+ /** 多模态 LLM 兜底配置(来自当前 provider 连接) */
9
+ interface OcrLlmConfig {
10
+ baseURL?: string;
11
+ apiKey?: string;
12
+ model?: string;
13
+ }
14
+ /** 可注入的运行时依赖(测试用;生产环境使用默认实现) */
15
+ interface OcrRuntimeOverrides {
16
+ platform?: NodeJS.Platform;
17
+ env?: NodeJS.ProcessEnv;
18
+ fileExists?: (p: string) => boolean;
19
+ which?: (name: string) => string | null;
20
+ /** 执行外部命令(返回 stdout/stderr),失败时抛错 */
21
+ run?: (command: string, args: string[], opts?: {
22
+ timeoutMs?: number;
23
+ cwd?: string;
24
+ }) => Promise<{
25
+ stdout: string;
26
+ stderr: string;
27
+ }>;
28
+ /** 抓取远程图片 */
29
+ fetchImpl?: (url: string) => Promise<{
30
+ ok: boolean;
31
+ status: number;
32
+ arrayBuffer(): Promise<ArrayBuffer>;
33
+ }>;
34
+ /** 多模态模型调用(默认走 OpenAI 兼容接口) */
35
+ llmComplete?: (req: {
36
+ model: string;
37
+ prompt: string;
38
+ imageDataUrl: string;
39
+ baseURL?: string;
40
+ apiKey?: string;
41
+ }) => Promise<string>;
42
+ /** 临时目录根(默认 os.tmpdir()) */
43
+ tmpDir?: string;
44
+ }
45
+ /** 内置 MCP 服务器上下文 */
46
+ interface McpBuiltinContext {
47
+ /** 工作区根目录(用于缓存编译产物,如 .agent/bin/ocr-vision) */
48
+ workspace?: string;
49
+ /** 进程环境变量(默认 process.env) */
50
+ env?: NodeJS.ProcessEnv;
51
+ /** 多模态 LLM 兜底配置 */
52
+ llm?: OcrLlmConfig;
53
+ /** OCR 运行时依赖覆盖(测试用) */
54
+ ocr?: OcrRuntimeOverrides;
55
+ }
56
+
57
+ /**
58
+ * MCP 客户端(McpClient)
59
+ *
60
+ * 基于 @modelcontextprotocol/sdk 封装单个 MCP 服务器的连接与工具调用,
61
+ * 支持四种传输:
62
+ * - stdio:本地子进程(如 `npx -y @some/mcp-server`)
63
+ * - http :远程 streamable HTTP 端点
64
+ * - sse :远程 SSE 端点(旧协议,兼容 Claude/Cursor 配置)
65
+ * - builtin:进程内内置服务器(InMemoryTransport,如内置 OCR)
66
+ *
67
+ * 提供工具列表拉取、工具调用(结果归一化为文本)、连接生命周期管理,
68
+ * 以及 OpenAI 工具名兼容的命名工具(sanitize + 前缀)。
69
+ */
70
+
71
+ /** 传输类型 */
72
+ type McpTransportType = "stdio" | "http" | "sse" | "builtin";
73
+ /** MCP 服务器配置 */
74
+ interface McpServerConfig {
75
+ /** 服务器名称(唯一标识,也是注册到 ToolRegistry 的工具名前缀) */
76
+ name: string;
77
+ /** 传输类型:stdio=本地子进程 / http=远程端点 / sse=旧版远程端点 / builtin=进程内内置服务器 */
78
+ type: McpTransportType;
79
+ /** stdio 传输:启动命令,如 ["npx","-y","@modelcontextprotocol/server-filesystem","/tmp"] */
80
+ command?: string[];
81
+ /** stdio 传输:子进程工作目录(相对路径按当前进程 cwd 解析) */
82
+ cwd?: string;
83
+ /** http 传输:远程端点 URL */
84
+ url?: string;
85
+ /** http 传输:自定义请求头(如 Authorization) */
86
+ headers?: Record<string, string>;
87
+ /** stdio 传输:子进程环境变量 */
88
+ env?: Record<string, string>;
89
+ /** 是否启用(默认 true;禁用时不连接、不注册工具) */
90
+ enabled?: boolean;
91
+ /** builtin 传输:内置服务器标识(缺省时使用 name,如 "ocr") */
92
+ builtin?: string;
93
+ }
94
+ /** McpClient 构造选项 */
95
+ interface McpClientOptions {
96
+ /** 内置服务器运行时上下文(仅 type=builtin 时使用) */
97
+ builtin?: McpBuiltinContext;
98
+ }
99
+ /** 从服务器拉取到的单个工具信息 */
100
+ interface McpToolInfo {
101
+ /** 原始工具名(未加前缀) */
102
+ name: string;
103
+ description?: string;
104
+ /** JSON Schema 参数定义 */
105
+ inputSchema: Record<string, unknown>;
106
+ }
107
+ /**
108
+ * 工具名净化:OpenAI 工具名仅允许 [a-zA-Z0-9_-],
109
+ * 其余字符替换为 `_` 并截断到 maxLen。
110
+ * 净化后不含任何字母/数字(纯符号)时回退为 "tool"。
111
+ */
112
+ declare function sanitizeToolName(name: string, maxLen?: number): string;
113
+ /**
114
+ * 注册到 ToolRegistry 的完整工具键:
115
+ * `mcp__<server>__<tool>`(server 与 tool 均净化,避免冲突与非法字符)
116
+ */
117
+ declare function mcpToolKey(server: string, tool: string): string;
118
+ declare class McpClient {
119
+ readonly config: McpServerConfig;
120
+ private options;
121
+ private client;
122
+ private transport;
123
+ private _tools;
124
+ constructor(config: McpServerConfig, options?: McpClientOptions);
125
+ get name(): string;
126
+ get connected(): boolean;
127
+ /**
128
+ * 建立连接并拉取工具列表。
129
+ * 已连接时幂等(直接返回)。
130
+ */
131
+ connect(): Promise<void>;
132
+ /** 当前服务器提供的工具列表(副本) */
133
+ listTools(): McpToolInfo[];
134
+ /**
135
+ * 调用工具,把 MCP 结果归一化为文本(或错误对象)。
136
+ *
137
+ * 服务器返回 isError=true 时不抛异常,而是返回
138
+ * `{ error, isError: true }`,让模型看到错误信息继续处理。
139
+ */
140
+ callTool(name: string, args: Record<string, unknown>): Promise<unknown>;
141
+ /** 关闭连接,释放子进程/HTTP 会话 */
142
+ close(): Promise<void>;
143
+ }
144
+
145
+ export { type McpBuiltinContext as M, type OcrLlmConfig as O, type McpServerConfig as a, McpClient as b, type McpClientOptions as c, type McpToolInfo as d, type McpTransportType as e, type OcrRuntimeOverrides as f, mcpToolKey as m, sanitizeToolName as s };
@@ -1,113 +1,4 @@
1
- /**
2
- * 基础类型定义
3
- *
4
- * 与 Python 版 zqagent 对齐的基础类型。这里定义了 Agent 引擎内部
5
- * 流转的核心数据模型:LLM 工具调用、助手回复、Token 用量、流式 chunk、
6
- * 对话消息以及 OpenAI 工具 Schema。
7
- */
8
- /** LLM 请求的工具调用 */
9
- interface ToolCall {
10
- /** 工具调用 ID(OpenAI 格式,用于把 tool 结果消息关联回对应的调用) */
11
- id: string;
12
- /** 工具名称 */
13
- name: string;
14
- /** 工具参数(已解析为对象的形态) */
15
- arguments: Record<string, unknown>;
16
- }
17
- /** LLM 一次回复 */
18
- interface AssistantTurn {
19
- /** 回复正文文本;无文本时为 null */
20
- text: string | null;
21
- /** 本次回复请求的工具调用列表(可能为空) */
22
- toolCalls: ToolCall[];
23
- /** 结束原因(stop / tool_calls / length 等),由 Provider 提供 */
24
- finishReason: string | null;
25
- /** 推理过程内容(如 OpenAI o 系列模型的 reasoning_content) */
26
- reasoning: string | null;
27
- /** 本次调用的 Token 用量统计 */
28
- usage: TokenUsage | null;
29
- }
30
- /** 标准化的 Token 用量 */
31
- interface TokenUsage {
32
- /** 输入 token 数 */
33
- input: number;
34
- /** 输出 token 数 */
35
- output: number;
36
- /** 命中缓存(缓存读取)的 token 数 */
37
- cacheRead: number;
38
- /** 写入缓存的 token 数 */
39
- cacheWrite: number;
40
- }
41
- /** 流式输出的单个 chunk */
42
- interface StreamChunk {
43
- /** 文本增量;该 chunk 无文本时为 null */
44
- content: string | null;
45
- /** 推理内容增量 */
46
- reasoning: string | null;
47
- /**
48
- * 工具调用:流式过程中为 null;
49
- * 流结束的最终 chunk 中,有工具调用时为完整列表,否则为 null
50
- */
51
- toolCalls: ToolCall[] | null;
52
- /** 累计 Token 用量(OpenAI 在流结束前的最后一个 chunk 中返回) */
53
- usage: TokenUsage | null;
54
- /** 结束原因(仅在流结束 chunk 中出现) */
55
- finishReason: string | null;
56
- }
57
- /** 对话消息 */
58
- interface Message {
59
- /** 本轮任务ID */
60
- taskId?: string;
61
- /** 消息角色 */
62
- role: "system" | "user" | "assistant" | "tool" | "notice";
63
- /** 消息正文 */
64
- content: string;
65
- /** 附加来源信息(展示用) */
66
- source?: Record<string, unknown>;
67
- /** 展示用的替代文本(展示用) */
68
- _display?: string;
69
- /** 消息时间戳 */
70
- ts?: number;
71
- /** 推理过程文本(assistant 消息) */
72
- reasoning?: string;
73
- /** Token 用量(assistant 消息) */
74
- usage?: Record<string, unknown>;
75
- /** 关联的工具调用 ID(tool 消息回填用) */
76
- tool_call_id?: string;
77
- /** 工具调用名称(tool 消息回填用) */
78
- tool_call_name?: string;
79
- /** 工具调用列表(assistant 消息,OpenAI 格式) */
80
- tool_calls?: {
81
- id: string;
82
- type: "function";
83
- function: {
84
- name: string;
85
- arguments: string;
86
- };
87
- }[];
88
- /** 通知类型:错误 / 中断 / 上下文压缩 / 模型切换 */
89
- kind?: "error" | "interrupted" | "compacted" | "model_switch" | "retry";
90
- /** 通知附加文本 */
91
- text?: string;
92
- }
93
- /**
94
- * 推理强度(reasoning effort)
95
- *
96
- * 控制模型在生成答案前投入的推理计算量(OpenAI 的
97
- * reasoning_effort / Responses 的 reasoning.effort 参数)。
98
- * 仅对支持该参数的非 DeepSeek 模型生效(DeepSeek 用 thinking
99
- * 布尔开关,不支持级别控制,Provider 层会跳过)。
100
- */
101
- type ReasoningEffort = "low" | "medium" | "high";
102
- /** OpenAI 工具 Schema */
103
- interface ToolSchema {
104
- type: "function";
105
- function: {
106
- name: string;
107
- description: string;
108
- parameters: Record<string, unknown>;
109
- };
110
- }
1
+ import { a as ToolSchema } from './types-BYyXWWPW.js';
111
2
 
112
3
  /**
113
4
  * 工具注册表
@@ -215,4 +106,4 @@ declare class ToolRegistry {
215
106
  private _defaultSchema;
216
107
  }
217
108
 
218
- export { type AssistantTurn as A, type Message as M, type ReasoningEffort as R, type StreamChunk as S, ToolRegistry as T, type TokenUsage as a, type ToolMetadata as b, type ToolSchema as c, RiskClass as d, type ToolCall as e, type ToolSpec as f };
109
+ export { RiskClass as R, ToolRegistry as T, type ToolMetadata as a, type ToolSpec as b };
@@ -1,113 +1,4 @@
1
- /**
2
- * 基础类型定义
3
- *
4
- * 与 Python 版 zqagent 对齐的基础类型。这里定义了 Agent 引擎内部
5
- * 流转的核心数据模型:LLM 工具调用、助手回复、Token 用量、流式 chunk、
6
- * 对话消息以及 OpenAI 工具 Schema。
7
- */
8
- /** LLM 请求的工具调用 */
9
- interface ToolCall {
10
- /** 工具调用 ID(OpenAI 格式,用于把 tool 结果消息关联回对应的调用) */
11
- id: string;
12
- /** 工具名称 */
13
- name: string;
14
- /** 工具参数(已解析为对象的形态) */
15
- arguments: Record<string, unknown>;
16
- }
17
- /** LLM 一次回复 */
18
- interface AssistantTurn {
19
- /** 回复正文文本;无文本时为 null */
20
- text: string | null;
21
- /** 本次回复请求的工具调用列表(可能为空) */
22
- toolCalls: ToolCall[];
23
- /** 结束原因(stop / tool_calls / length 等),由 Provider 提供 */
24
- finishReason: string | null;
25
- /** 推理过程内容(如 OpenAI o 系列模型的 reasoning_content) */
26
- reasoning: string | null;
27
- /** 本次调用的 Token 用量统计 */
28
- usage: TokenUsage | null;
29
- }
30
- /** 标准化的 Token 用量 */
31
- interface TokenUsage {
32
- /** 输入 token 数 */
33
- input: number;
34
- /** 输出 token 数 */
35
- output: number;
36
- /** 命中缓存(缓存读取)的 token 数 */
37
- cacheRead: number;
38
- /** 写入缓存的 token 数 */
39
- cacheWrite: number;
40
- }
41
- /** 流式输出的单个 chunk */
42
- interface StreamChunk {
43
- /** 文本增量;该 chunk 无文本时为 null */
44
- content: string | null;
45
- /** 推理内容增量 */
46
- reasoning: string | null;
47
- /**
48
- * 工具调用:流式过程中为 null;
49
- * 流结束的最终 chunk 中,有工具调用时为完整列表,否则为 null
50
- */
51
- toolCalls: ToolCall[] | null;
52
- /** 累计 Token 用量(OpenAI 在流结束前的最后一个 chunk 中返回) */
53
- usage: TokenUsage | null;
54
- /** 结束原因(仅在流结束 chunk 中出现) */
55
- finishReason: string | null;
56
- }
57
- /** 对话消息 */
58
- interface Message {
59
- /** 本轮任务ID */
60
- taskId?: string;
61
- /** 消息角色 */
62
- role: "system" | "user" | "assistant" | "tool" | "notice";
63
- /** 消息正文 */
64
- content: string;
65
- /** 附加来源信息(展示用) */
66
- source?: Record<string, unknown>;
67
- /** 展示用的替代文本(展示用) */
68
- _display?: string;
69
- /** 消息时间戳 */
70
- ts?: number;
71
- /** 推理过程文本(assistant 消息) */
72
- reasoning?: string;
73
- /** Token 用量(assistant 消息) */
74
- usage?: Record<string, unknown>;
75
- /** 关联的工具调用 ID(tool 消息回填用) */
76
- tool_call_id?: string;
77
- /** 工具调用名称(tool 消息回填用) */
78
- tool_call_name?: string;
79
- /** 工具调用列表(assistant 消息,OpenAI 格式) */
80
- tool_calls?: {
81
- id: string;
82
- type: "function";
83
- function: {
84
- name: string;
85
- arguments: string;
86
- };
87
- }[];
88
- /** 通知类型:错误 / 中断 / 上下文压缩 / 模型切换 */
89
- kind?: "error" | "interrupted" | "compacted" | "model_switch" | "retry";
90
- /** 通知附加文本 */
91
- text?: string;
92
- }
93
- /**
94
- * 推理强度(reasoning effort)
95
- *
96
- * 控制模型在生成答案前投入的推理计算量(OpenAI 的
97
- * reasoning_effort / Responses 的 reasoning.effort 参数)。
98
- * 仅对支持该参数的非 DeepSeek 模型生效(DeepSeek 用 thinking
99
- * 布尔开关,不支持级别控制,Provider 层会跳过)。
100
- */
101
- type ReasoningEffort = "low" | "medium" | "high";
102
- /** OpenAI 工具 Schema */
103
- interface ToolSchema {
104
- type: "function";
105
- function: {
106
- name: string;
107
- description: string;
108
- parameters: Record<string, unknown>;
109
- };
110
- }
1
+ import { a as ToolSchema } from './types-BYyXWWPW.cjs';
111
2
 
112
3
  /**
113
4
  * 工具注册表
@@ -215,4 +106,4 @@ declare class ToolRegistry {
215
106
  private _defaultSchema;
216
107
  }
217
108
 
218
- export { type AssistantTurn as A, type Message as M, type ReasoningEffort as R, type StreamChunk as S, ToolRegistry as T, type TokenUsage as a, type ToolMetadata as b, type ToolSchema as c, RiskClass as d, type ToolCall as e, type ToolSpec as f };
109
+ export { RiskClass as R, ToolRegistry as T, type ToolMetadata as a, type ToolSpec as b };