berry-agent-sdk 0.1.0-alpha.2

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 (263) hide show
  1. package/README.md +78 -0
  2. package/dist/packages/berry-agent-sdk/src/client.d.ts +6 -0
  3. package/dist/packages/berry-agent-sdk/src/client.js +59 -0
  4. package/dist/packages/berry-agent-sdk/src/client.js.map +1 -0
  5. package/dist/packages/berry-agent-sdk/src/http.d.ts +24 -0
  6. package/dist/packages/berry-agent-sdk/src/http.js +232 -0
  7. package/dist/packages/berry-agent-sdk/src/http.js.map +1 -0
  8. package/dist/packages/berry-agent-sdk/src/index.d.ts +25 -0
  9. package/dist/packages/berry-agent-sdk/src/index.js +22 -0
  10. package/dist/packages/berry-agent-sdk/src/index.js.map +1 -0
  11. package/dist/packages/berry-agent-sdk/src/stdio.d.ts +23 -0
  12. package/dist/packages/berry-agent-sdk/src/stdio.js +238 -0
  13. package/dist/packages/berry-agent-sdk/src/stdio.js.map +1 -0
  14. package/dist/packages/berry-agent-sdk/src/types.d.ts +117 -0
  15. package/dist/packages/berry-agent-sdk/src/types.js +19 -0
  16. package/dist/packages/berry-agent-sdk/src/types.js.map +1 -0
  17. package/dist/src/agent/events.d.ts +11 -0
  18. package/dist/src/agent/events.js +2 -0
  19. package/dist/src/agent/events.js.map +1 -0
  20. package/dist/src/agent/index.d.ts +13 -0
  21. package/dist/src/agent/index.js +3 -0
  22. package/dist/src/agent/index.js.map +1 -0
  23. package/dist/src/agent/loop.d.ts +19 -0
  24. package/dist/src/agent/loop.js +140 -0
  25. package/dist/src/agent/loop.js.map +1 -0
  26. package/dist/src/agent/queue.d.ts +105 -0
  27. package/dist/src/agent/queue.js +120 -0
  28. package/dist/src/agent/queue.js.map +1 -0
  29. package/dist/src/agent/stream.d.ts +21 -0
  30. package/dist/src/agent/stream.js +80 -0
  31. package/dist/src/agent/stream.js.map +1 -0
  32. package/dist/src/agent/tools-batch.d.ts +49 -0
  33. package/dist/src/agent/tools-batch.js +222 -0
  34. package/dist/src/agent/tools-batch.js.map +1 -0
  35. package/dist/src/agent/types.d.ts +104 -0
  36. package/dist/src/agent/types.js +9 -0
  37. package/dist/src/agent/types.js.map +1 -0
  38. package/dist/src/channels/ask-queue.d.ts +44 -0
  39. package/dist/src/channels/ask-queue.js +83 -0
  40. package/dist/src/channels/ask-queue.js.map +1 -0
  41. package/dist/src/channels/commands.d.ts +56 -0
  42. package/dist/src/channels/commands.js +130 -0
  43. package/dist/src/channels/commands.js.map +1 -0
  44. package/dist/src/channels/engine/cell.d.ts +55 -0
  45. package/dist/src/channels/engine/cell.js +144 -0
  46. package/dist/src/channels/engine/cell.js.map +1 -0
  47. package/dist/src/channels/engine/diff.d.ts +3 -0
  48. package/dist/src/channels/engine/diff.js +144 -0
  49. package/dist/src/channels/engine/diff.js.map +1 -0
  50. package/dist/src/channels/engine/engine.d.ts +151 -0
  51. package/dist/src/channels/engine/engine.js +417 -0
  52. package/dist/src/channels/engine/engine.js.map +1 -0
  53. package/dist/src/channels/engine/index.d.ts +22 -0
  54. package/dist/src/channels/engine/index.js +9 -0
  55. package/dist/src/channels/engine/index.js.map +1 -0
  56. package/dist/src/channels/engine/input-keys.d.ts +39 -0
  57. package/dist/src/channels/engine/input-keys.js +87 -0
  58. package/dist/src/channels/engine/input-keys.js.map +1 -0
  59. package/dist/src/channels/engine/input.d.ts +174 -0
  60. package/dist/src/channels/engine/input.js +597 -0
  61. package/dist/src/channels/engine/input.js.map +1 -0
  62. package/dist/src/channels/engine/memory-io.d.ts +46 -0
  63. package/dist/src/channels/engine/memory-io.js +72 -0
  64. package/dist/src/channels/engine/memory-io.js.map +1 -0
  65. package/dist/src/channels/engine/process-io.d.ts +23 -0
  66. package/dist/src/channels/engine/process-io.js +39 -0
  67. package/dist/src/channels/engine/process-io.js.map +1 -0
  68. package/dist/src/channels/engine/types.d.ts +202 -0
  69. package/dist/src/channels/engine/types.js +18 -0
  70. package/dist/src/channels/engine/types.js.map +1 -0
  71. package/dist/src/channels/engine/width.d.ts +23 -0
  72. package/dist/src/channels/engine/width.js +123 -0
  73. package/dist/src/channels/engine/width.js.map +1 -0
  74. package/dist/src/channels/index.d.ts +25 -0
  75. package/dist/src/channels/index.js +16 -0
  76. package/dist/src/channels/index.js.map +1 -0
  77. package/dist/src/channels/registry.d.ts +33 -0
  78. package/dist/src/channels/registry.js +57 -0
  79. package/dist/src/channels/registry.js.map +1 -0
  80. package/dist/src/channels/sdk/admit.d.ts +32 -0
  81. package/dist/src/channels/sdk/admit.js +30 -0
  82. package/dist/src/channels/sdk/admit.js.map +1 -0
  83. package/dist/src/channels/sdk/backend.d.ts +19 -0
  84. package/dist/src/channels/sdk/backend.js +103 -0
  85. package/dist/src/channels/sdk/backend.js.map +1 -0
  86. package/dist/src/channels/sdk/cursor.d.ts +51 -0
  87. package/dist/src/channels/sdk/cursor.js +57 -0
  88. package/dist/src/channels/sdk/cursor.js.map +1 -0
  89. package/dist/src/channels/sdk/index.d.ts +20 -0
  90. package/dist/src/channels/sdk/index.js +21 -0
  91. package/dist/src/channels/sdk/index.js.map +1 -0
  92. package/dist/src/channels/sdk/jsonl.d.ts +47 -0
  93. package/dist/src/channels/sdk/jsonl.js +201 -0
  94. package/dist/src/channels/sdk/jsonl.js.map +1 -0
  95. package/dist/src/channels/sdk/protocol.d.ts +297 -0
  96. package/dist/src/channels/sdk/protocol.js +25 -0
  97. package/dist/src/channels/sdk/protocol.js.map +1 -0
  98. package/dist/src/channels/sdk/schema.d.ts +12 -0
  99. package/dist/src/channels/sdk/schema.js +92 -0
  100. package/dist/src/channels/sdk/schema.js.map +1 -0
  101. package/dist/src/channels/sdk/wire-core.d.ts +199 -0
  102. package/dist/src/channels/sdk/wire-core.js +447 -0
  103. package/dist/src/channels/sdk/wire-core.js.map +1 -0
  104. package/dist/src/channels/service.d.ts +66 -0
  105. package/dist/src/channels/service.js +170 -0
  106. package/dist/src/channels/service.js.map +1 -0
  107. package/dist/src/channels/tui/autocomplete/autocomplete.d.ts +32 -0
  108. package/dist/src/channels/tui/autocomplete/autocomplete.js +43 -0
  109. package/dist/src/channels/tui/autocomplete/autocomplete.js.map +1 -0
  110. package/dist/src/channels/tui/autocomplete/file-mentions.d.ts +18 -0
  111. package/dist/src/channels/tui/autocomplete/file-mentions.js +107 -0
  112. package/dist/src/channels/tui/autocomplete/file-mentions.js.map +1 -0
  113. package/dist/src/channels/tui/autocomplete/popup.d.ts +47 -0
  114. package/dist/src/channels/tui/autocomplete/popup.js +149 -0
  115. package/dist/src/channels/tui/autocomplete/popup.js.map +1 -0
  116. package/dist/src/channels/tui/autocomplete/provider.d.ts +38 -0
  117. package/dist/src/channels/tui/autocomplete/provider.js +8 -0
  118. package/dist/src/channels/tui/autocomplete/provider.js.map +1 -0
  119. package/dist/src/channels/tui/autocomplete/token.d.ts +22 -0
  120. package/dist/src/channels/tui/autocomplete/token.js +69 -0
  121. package/dist/src/channels/tui/autocomplete/token.js.map +1 -0
  122. package/dist/src/channels/tui/backend/ansi-rows.d.ts +86 -0
  123. package/dist/src/channels/tui/backend/ansi-rows.js +209 -0
  124. package/dist/src/channels/tui/backend/ansi-rows.js.map +1 -0
  125. package/dist/src/channels/tui/backend/main-screen.d.ts +90 -0
  126. package/dist/src/channels/tui/backend/main-screen.js +208 -0
  127. package/dist/src/channels/tui/backend/main-screen.js.map +1 -0
  128. package/dist/src/channels/tui/backend/osc.d.ts +79 -0
  129. package/dist/src/channels/tui/backend/osc.js +92 -0
  130. package/dist/src/channels/tui/backend/osc.js.map +1 -0
  131. package/dist/src/channels/tui/backend/transcript.d.ts +98 -0
  132. package/dist/src/channels/tui/backend/transcript.js +231 -0
  133. package/dist/src/channels/tui/backend/transcript.js.map +1 -0
  134. package/dist/src/channels/tui/backend/tui-backend.d.ts +324 -0
  135. package/dist/src/channels/tui/backend/tui-backend.js +916 -0
  136. package/dist/src/channels/tui/backend/tui-backend.js.map +1 -0
  137. package/dist/src/channels/tui/editor/editor-model.d.ts +141 -0
  138. package/dist/src/channels/tui/editor/editor-model.js +544 -0
  139. package/dist/src/channels/tui/editor/editor-model.js.map +1 -0
  140. package/dist/src/channels/tui/editor/editor-view.d.ts +36 -0
  141. package/dist/src/channels/tui/editor/editor-view.js +141 -0
  142. package/dist/src/channels/tui/editor/editor-view.js.map +1 -0
  143. package/dist/src/channels/tui/editor/editor.d.ts +50 -0
  144. package/dist/src/channels/tui/editor/editor.js +276 -0
  145. package/dist/src/channels/tui/editor/editor.js.map +1 -0
  146. package/dist/src/channels/tui/editor/undo-stack.d.ts +22 -0
  147. package/dist/src/channels/tui/editor/undo-stack.js +36 -0
  148. package/dist/src/channels/tui/editor/undo-stack.js.map +1 -0
  149. package/dist/src/channels/tui/editor/visual-lines.d.ts +39 -0
  150. package/dist/src/channels/tui/editor/visual-lines.js +127 -0
  151. package/dist/src/channels/tui/editor/visual-lines.js.map +1 -0
  152. package/dist/src/channels/tui/editor/word-nav.d.ts +10 -0
  153. package/dist/src/channels/tui/editor/word-nav.js +107 -0
  154. package/dist/src/channels/tui/editor/word-nav.js.map +1 -0
  155. package/dist/src/channels/tui/history/history-viewer.d.ts +133 -0
  156. package/dist/src/channels/tui/history/history-viewer.js +404 -0
  157. package/dist/src/channels/tui/history/history-viewer.js.map +1 -0
  158. package/dist/src/channels/tui/index.d.ts +16 -0
  159. package/dist/src/channels/tui/index.js +4 -0
  160. package/dist/src/channels/tui/index.js.map +1 -0
  161. package/dist/src/channels/tui/markdown/blocks.d.ts +42 -0
  162. package/dist/src/channels/tui/markdown/blocks.js +112 -0
  163. package/dist/src/channels/tui/markdown/blocks.js.map +1 -0
  164. package/dist/src/channels/tui/markdown/inline.d.ts +24 -0
  165. package/dist/src/channels/tui/markdown/inline.js +76 -0
  166. package/dist/src/channels/tui/markdown/inline.js.map +1 -0
  167. package/dist/src/channels/tui/markdown/markdown.d.ts +34 -0
  168. package/dist/src/channels/tui/markdown/markdown.js +183 -0
  169. package/dist/src/channels/tui/markdown/markdown.js.map +1 -0
  170. package/dist/src/channels/tui/memory/memory-viewer.d.ts +235 -0
  171. package/dist/src/channels/tui/memory/memory-viewer.js +541 -0
  172. package/dist/src/channels/tui/memory/memory-viewer.js.map +1 -0
  173. package/dist/src/channels/tui/overlay/alt-screen.d.ts +79 -0
  174. package/dist/src/channels/tui/overlay/alt-screen.js +106 -0
  175. package/dist/src/channels/tui/overlay/alt-screen.js.map +1 -0
  176. package/dist/src/channels/tui/overlay/overlay.d.ts +53 -0
  177. package/dist/src/channels/tui/overlay/overlay.js +58 -0
  178. package/dist/src/channels/tui/overlay/overlay.js.map +1 -0
  179. package/dist/src/channels/tui/overlay/select-confirm.d.ts +73 -0
  180. package/dist/src/channels/tui/overlay/select-confirm.js +157 -0
  181. package/dist/src/channels/tui/overlay/select-confirm.js.map +1 -0
  182. package/dist/src/channels/tui/panels/todo-panel.d.ts +24 -0
  183. package/dist/src/channels/tui/panels/todo-panel.js +55 -0
  184. package/dist/src/channels/tui/panels/todo-panel.js.map +1 -0
  185. package/dist/src/channels/tui/panels/tool-progress-panel.d.ts +37 -0
  186. package/dist/src/channels/tui/panels/tool-progress-panel.js +94 -0
  187. package/dist/src/channels/tui/panels/tool-progress-panel.js.map +1 -0
  188. package/dist/src/channels/tui/scroll/scroll-view.d.ts +96 -0
  189. package/dist/src/channels/tui/scroll/scroll-view.js +255 -0
  190. package/dist/src/channels/tui/scroll/scroll-view.js.map +1 -0
  191. package/dist/src/channels/tui/status/status-line.d.ts +46 -0
  192. package/dist/src/channels/tui/status/status-line.js +77 -0
  193. package/dist/src/channels/tui/status/status-line.js.map +1 -0
  194. package/dist/src/channels/tui/theme.d.ts +27 -0
  195. package/dist/src/channels/tui/theme.js +42 -0
  196. package/dist/src/channels/tui/theme.js.map +1 -0
  197. package/dist/src/channels/types.d.ts +84 -0
  198. package/dist/src/channels/types.js +12 -0
  199. package/dist/src/channels/types.js.map +1 -0
  200. package/dist/src/channels/ui-core.d.ts +80 -0
  201. package/dist/src/channels/ui-core.js +210 -0
  202. package/dist/src/channels/ui-core.js.map +1 -0
  203. package/dist/src/context/codes.d.ts +1 -0
  204. package/dist/src/context/codes.js +41 -0
  205. package/dist/src/context/codes.js.map +1 -0
  206. package/dist/src/context/events.d.ts +62 -0
  207. package/dist/src/context/events.js +161 -0
  208. package/dist/src/context/events.js.map +1 -0
  209. package/dist/src/context/index.d.ts +16 -0
  210. package/dist/src/context/index.js +14 -0
  211. package/dist/src/context/index.js.map +1 -0
  212. package/dist/src/context/logger.d.ts +67 -0
  213. package/dist/src/context/logger.js +137 -0
  214. package/dist/src/context/logger.js.map +1 -0
  215. package/dist/src/context/scope.d.ts +78 -0
  216. package/dist/src/context/scope.js +183 -0
  217. package/dist/src/context/scope.js.map +1 -0
  218. package/dist/src/context/workspace.d.ts +8 -0
  219. package/dist/src/context/workspace.js +105 -0
  220. package/dist/src/context/workspace.js.map +1 -0
  221. package/dist/src/contracts/agent-events.d.ts +73 -0
  222. package/dist/src/contracts/agent-events.js +17 -0
  223. package/dist/src/contracts/agent-events.js.map +1 -0
  224. package/dist/src/contracts/api.d.ts +249 -0
  225. package/dist/src/contracts/api.js +334 -0
  226. package/dist/src/contracts/api.js.map +1 -0
  227. package/dist/src/contracts/approval.d.ts +37 -0
  228. package/dist/src/contracts/approval.js +10 -0
  229. package/dist/src/contracts/approval.js.map +1 -0
  230. package/dist/src/contracts/env-ref.d.ts +41 -0
  231. package/dist/src/contracts/env-ref.js +33 -0
  232. package/dist/src/contracts/env-ref.js.map +1 -0
  233. package/dist/src/contracts/errors.d.ts +56 -0
  234. package/dist/src/contracts/errors.js +267 -0
  235. package/dist/src/contracts/errors.js.map +1 -0
  236. package/dist/src/contracts/events.d.ts +70 -0
  237. package/dist/src/contracts/events.js +330 -0
  238. package/dist/src/contracts/events.js.map +1 -0
  239. package/dist/src/contracts/index.d.ts +32 -0
  240. package/dist/src/contracts/index.js +27 -0
  241. package/dist/src/contracts/index.js.map +1 -0
  242. package/dist/src/contracts/llm.d.ts +278 -0
  243. package/dist/src/contracts/llm.js +13 -0
  244. package/dist/src/contracts/llm.js.map +1 -0
  245. package/dist/src/contracts/messages.d.ts +63 -0
  246. package/dist/src/contracts/messages.js +66 -0
  247. package/dist/src/contracts/messages.js.map +1 -0
  248. package/dist/src/contracts/redact.d.ts +46 -0
  249. package/dist/src/contracts/redact.js +224 -0
  250. package/dist/src/contracts/redact.js.map +1 -0
  251. package/dist/src/contracts/tools.d.ts +198 -0
  252. package/dist/src/contracts/tools.js +35 -0
  253. package/dist/src/contracts/tools.js.map +1 -0
  254. package/dist/src/contracts/types.d.ts +304 -0
  255. package/dist/src/contracts/types.js +51 -0
  256. package/dist/src/contracts/types.js.map +1 -0
  257. package/dist/src/contracts/ui.d.ts +122 -0
  258. package/dist/src/contracts/ui.js +16 -0
  259. package/dist/src/contracts/ui.js.map +1 -0
  260. package/dist/src/sdk/types.d.ts +144 -0
  261. package/dist/src/sdk/types.js +33 -0
  262. package/dist/src/sdk/types.js.map +1 -0
  263. package/package.json +29 -0
package/README.md ADDED
@@ -0,0 +1,78 @@
1
+ # berry-agent-sdk
2
+
3
+ berry-agent 的类型化 SDK 客户端。两种传输同一方法面:
4
+
5
+ - **spawn serve stdio**——托管子进程(一条 stdin/stdout NDJSON 线,适合脚本内嵌);
6
+ - **直连 HTTP**——daemon Unix socket 或前台 TCP(POST + SSE,适合常驻服务)。
7
+
8
+ 类型面与线协议词汇与主仓单源同编译(零拷贝漂移):`AgentEvent`、
9
+ `SdkWireFrame` 等帧类型直出自 berry-agent 契约件。
10
+
11
+ ## 安装与快速上手
12
+
13
+ ```bash
14
+ npm install berry-agent-sdk
15
+ ```
16
+
17
+ ### stdio 形(spawn serve 子进程)
18
+
19
+ ```ts
20
+ import { createSdkClient, spawnServeTransport } from 'berry-agent-sdk';
21
+
22
+ const transport = spawnServeTransport({
23
+ // 缺省 command = process.execPath(node 直跑形);args 由调用方知悉安装布局
24
+ args: ['<berry-agent 包路径>/dist/host/main.js', 'serve'],
25
+ });
26
+
27
+ const client = createSdkClient(transport);
28
+
29
+ // 发起会话(sessionId 缺席即新建;messageId 缺省客户端计数器形 sdk-N)
30
+ const ack = await client.prompt({ content: '帮我看看这个仓库' });
31
+
32
+ // 直播订阅:重放段(entries → replay-end)与直播段(event/heartbeat/ask)
33
+ // 一律入 onFrame;订阅柄在 replay-end 后 resolve
34
+ const handle = await client.subscribe({ sessionId: ack.sessionId }, (frame) => {
35
+ if (frame.kind === 'event') console.log(frame.event);
36
+ });
37
+
38
+ await client.close(); // 收线子进程(stdin EOF → 优雅退出)
39
+ ```
40
+
41
+ ### HTTP 形(daemon socket / 前台 TCP)
42
+
43
+ ```ts
44
+ import { createSdkClient, httpSdkTransport } from 'berry-agent-sdk';
45
+
46
+ const transport = httpSdkTransport({
47
+ socketPath: '<daemon socket 路径>', // 或 host + port(TCP 形)
48
+ token: '<面侧预置 token>',
49
+ });
50
+
51
+ const client = createSdkClient(transport);
52
+ const sessions = await client.sessions(); // 会话清单
53
+ const first = sessions[0]!;
54
+ const page = await client.getEntries({ sessionId: first.id }); // 断线对账(since 缺省从头)
55
+ const handle = await client.subscribe(
56
+ { sessionId: first.id, after: 41 }, // after = 已收末条 seq(重放窗口 (after, 高水位])
57
+ (frame) => {
58
+ /* … */
59
+ },
60
+ );
61
+ await client.close();
62
+ ```
63
+
64
+ ## API 面
65
+
66
+ - `createSdkClient(transport)` —— `prompt` / `getEntries` / `sessions` /
67
+ `interrupt` / `decide` / `subscribe` / `close`;错误帧统一投形
68
+ `SdkError`(`code` / `message` / `sessionId?`)。
69
+ - `spawnServeTransport({ args, … })` / `httpSdkTransport({ socketPath | host+port, token })`
70
+ —— 两实装同 `SdkTransport` 三档抽象:请求档(单帧应答)、无应答档
71
+ (interrupt)、直播档(SSE / 线内 hello,replay-end 后建立)。
72
+ - 类型面:`AgentEvent` / `ApprovalAskAnswer` / `SdkRequest` / `SdkWireFrame` /
73
+ `SdkAckFrame` / `SdkEntriesFrame` / `SdkSessionSummary` / `SdkDurableEntry` /
74
+ `SdkEventFrame` / `SdkHelloFrame` / `SdkErrorFrame` / `SDK_PROTOCOL_VERSION`。
75
+
76
+ ## 状态
77
+
78
+ 0.1.0-alpha.2——随主仓演进(版本真源 = 本包 `package.json` 的 `version` 字段);npm 分发走主仓发布机器 `release:sdk`。
@@ -0,0 +1,6 @@
1
+ import type { SdkClient, SdkTransport } from './types.js';
2
+ /**
3
+ * 建客户端。messageId 缺省计数器形(每客户端实例独立 `sdk-N` 自增——
4
+ * 幂等语义未申请即不虚构;跨实例幂等由调用方自选键)。
5
+ */
6
+ export declare function createSdkClient(transport: SdkTransport): SdkClient;
@@ -0,0 +1,59 @@
1
+ import { SdkError } from './types.js';
2
+ /** 错误帧投形位(error 帧抛 SdkError;其余 kind 原样透传——窄卫由调用位断言承接) */
3
+ function ensureNotError(frame) {
4
+ if (frame.kind !== 'error')
5
+ return;
6
+ const err = frame;
7
+ throw new SdkError(err.code, err.message, err.sessionId);
8
+ }
9
+ /**
10
+ * 建客户端。messageId 缺省计数器形(每客户端实例独立 `sdk-N` 自增——
11
+ * 幂等语义未申请即不虚构;跨实例幂等由调用方自选键)。
12
+ */
13
+ export function createSdkClient(transport) {
14
+ let unkeyedSeq = 0;
15
+ return {
16
+ prompt: async (input) => {
17
+ const messageId = input.messageId ?? `sdk-${++unkeyedSeq}`;
18
+ const frame = await transport.request({
19
+ verb: 'prompt',
20
+ messageId,
21
+ content: input.content,
22
+ ...(input.sessionId !== undefined ? { sessionId: input.sessionId } : {}),
23
+ });
24
+ ensureNotError(frame);
25
+ return frame; // 应答闭集 {ack, error}——error 已投形
26
+ },
27
+ getEntries: async (input) => {
28
+ const frame = await transport.request({
29
+ verb: 'getEntries',
30
+ sessionId: input.sessionId,
31
+ since: input.since ?? -1,
32
+ // cursor 分页续读游标回送位——SDK 面亦透传(缺席即省略)
33
+ ...(input.cursor !== undefined ? { cursor: input.cursor } : {}),
34
+ });
35
+ ensureNotError(frame);
36
+ return frame; // 应答闭集 {entries, error}
37
+ },
38
+ sessions: async () => {
39
+ const frame = await transport.request({ verb: 'sessions' });
40
+ ensureNotError(frame);
41
+ return frame.sessions; // 应答闭集 {sessions, error}
42
+ },
43
+ // 无应答档(interrupt 受理经事件流可观察——写后即决;missing 会话错误帧走订阅帧面)
44
+ interrupt: (sessionId) => transport.send({ verb: 'interrupt', sessionId }),
45
+ decide: async (approvalId, answer, note) => {
46
+ const frame = await transport.request({
47
+ verb: 'decide',
48
+ approvalId,
49
+ answer,
50
+ ...(note !== undefined ? { note } : {}),
51
+ });
52
+ ensureNotError(frame);
53
+ return frame.outcome; // 应答闭集 {decide-result, error}
54
+ },
55
+ subscribe: (params, onFrame) => transport.openLive(params, onFrame),
56
+ close: () => transport.close(),
57
+ };
58
+ }
59
+ //# sourceMappingURL=client.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"client.js","sourceRoot":"","sources":["../../../../src/client.ts"],"names":[],"mappings":"AAWA,OAAO,EAAE,QAAQ,EAAE,MAAM,YAAY,CAAC;AActC,yDAAyD;AACzD,SAAS,cAAc,CAAC,KAAmB;IACzC,IAAI,KAAK,CAAC,IAAI,KAAK,OAAO;QAAE,OAAO;IACnC,MAAM,GAAG,GAAG,KAAsB,CAAC;IACnC,MAAM,IAAI,QAAQ,CAAC,GAAG,CAAC,IAAI,EAAE,GAAG,CAAC,OAAO,EAAE,GAAG,CAAC,SAAS,CAAC,CAAC;AAC3D,CAAC;AAED;;;GAGG;AACH,MAAM,UAAU,eAAe,CAAC,SAAuB;IACrD,IAAI,UAAU,GAAG,CAAC,CAAC;IAEnB,OAAO;QACL,MAAM,EAAE,KAAK,EAAE,KAAqB,EAAE,EAAE;YACtC,MAAM,SAAS,GAAG,KAAK,CAAC,SAAS,IAAI,OAAO,EAAE,UAAU,EAAE,CAAC;YAC3D,MAAM,KAAK,GAAG,MAAM,SAAS,CAAC,OAAO,CAAC;gBACpC,IAAI,EAAE,QAAQ;gBACd,SAAS;gBACT,OAAO,EAAE,KAAK,CAAC,OAAO;gBACtB,GAAG,CAAC,KAAK,CAAC,SAAS,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,SAAS,EAAE,KAAK,CAAC,SAAS,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;aACzE,CAAC,CAAC;YACH,cAAc,CAAC,KAAK,CAAC,CAAC;YACtB,OAAO,KAAoB,CAAC,CAAC,+BAA+B;QAC9D,CAAC;QAED,UAAU,EAAE,KAAK,EAAE,KAAsB,EAAE,EAAE;YAC3C,MAAM,KAAK,GAAG,MAAM,SAAS,CAAC,OAAO,CAAC;gBACpC,IAAI,EAAE,YAAY;gBAClB,SAAS,EAAE,KAAK,CAAC,SAAS;gBAC1B,KAAK,EAAE,KAAK,CAAC,KAAK,IAAI,CAAC,CAAC;gBACxB,oCAAoC;gBACpC,GAAG,CAAC,KAAK,CAAC,MAAM,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,MAAM,EAAE,KAAK,CAAC,MAAM,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;aAChE,CAAC,CAAC;YACH,cAAc,CAAC,KAAK,CAAC,CAAC;YACtB,OAAO,KAAwB,CAAC,CAAC,wBAAwB;QAC3D,CAAC;QAED,QAAQ,EAAE,KAAK,IAAI,EAAE;YACnB,MAAM,KAAK,GAAG,MAAM,SAAS,CAAC,OAAO,CAAC,EAAE,IAAI,EAAE,UAAU,EAAE,CAAC,CAAC;YAC5D,cAAc,CAAC,KAAK,CAAC,CAAC;YACtB,OAAQ,KAA2C,CAAC,QAAQ,CAAC,CAAC,yBAAyB;QACzF,CAAC;QAED,qDAAqD;QACrD,SAAS,EAAE,CAAC,SAAiB,EAAE,EAAE,CAAC,SAAS,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,WAAW,EAAE,SAAS,EAAE,CAAC;QAElF,MAAM,EAAE,KAAK,EAAE,UAAkB,EAAE,MAAyB,EAAE,IAAa,EAAE,EAAE;YAC7E,MAAM,KAAK,GAAG,MAAM,SAAS,CAAC,OAAO,CAAC;gBACpC,IAAI,EAAE,QAAQ;gBACd,UAAU;gBACV,MAAM;gBACN,GAAG,CAAC,IAAI,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;aACxC,CAAC,CAAC;YACH,cAAc,CAAC,KAAK,CAAC,CAAC;YACtB,OAAQ,KAA+C,CAAC,OAAO,CAAC,CAAC,8BAA8B;QACjG,CAAC;QAED,SAAS,EAAE,CAAC,MAAqB,EAAE,OAAyB,EAA0B,EAAE,CACtF,SAAS,CAAC,QAAQ,CAAC,MAAM,EAAE,OAAO,CAAC;QAErC,KAAK,EAAE,GAAG,EAAE,CAAC,SAAS,CAAC,KAAK,EAAE;KAC/B,CAAC;AACJ,CAAC"}
@@ -0,0 +1,24 @@
1
+ import type { IncomingMessage } from 'node:http';
2
+ import type { SdkTransport } from './types.js';
3
+ /** HTTP 传输选项(sock 与 host/port 二选一——daemon 缺省接入位即 sock) */
4
+ export interface HttpSdkOptions {
5
+ /** Unix domain socket 路径(daemon 形) */
6
+ readonly socketPath?: string;
7
+ /** TCP 主机(前台形;与 port 成对) */
8
+ readonly host?: string;
9
+ /** TCP 端口(前台形;与 host 成对) */
10
+ readonly port?: number;
11
+ /** 鉴权 token(Bearer 形——面侧每请求验) */
12
+ readonly token: string;
13
+ /** 坏行/SSE 诊断面(缺省静默) */
14
+ readonly onWarn?: (message: string) => void;
15
+ }
16
+ /** 直连 HTTP 传输 */
17
+ export declare function httpSdkTransport(options: HttpSdkOptions): SdkTransport;
18
+ /**
19
+ * 单订阅收口工厂(幂等——流账摘除先于销毁;res 'close' 终局另有摘账兜底)。
20
+ *
21
+ * 模块缝注:具名导出仅供同模块测试件锁账纪纪律(摘账先于销毁),包公开面
22
+ * (index.ts)不转发——外部勿依赖。
23
+ */
24
+ export declare function liveClose(res: IncomingMessage, streams: Set<IncomingMessage>): () => Promise<void>;
@@ -0,0 +1,232 @@
1
+ /**
2
+ * berry-agent-sdk/http — 直连 HTTP 传输(批 13f-3)。
3
+ *
4
+ * 面向 13e 落码的 SDK HTTP face(daemon sock / 前台 TCP 两监听形)。路由与
5
+ * 鉴权头常量单源自 `src/sdk/types.js` 复导入——端点词面漂移在结构上不可能。
6
+ * node:http 直用(fetch 无 Unix socket 支持——daemon 缺省接入位即 sock)。
7
+ *
8
+ * 应答归属:HTTP 请求/响应一一对应,帧归属天然无歧义——无需 stdio 形的
9
+ * 事务串行链。错误帧以非 2xx + 错误体(与线协议错误帧同构)回达 → 本层
10
+ * 还原为帧原样返回(投形归 client);传输级失败(连接拒/断)抛
11
+ * `SDK_TRANSPORT`——建连期错误发在 req、应答期夭折错误发在 res,两期皆
12
+ * 接线 reject(不留悬挂 Promise)。直播档 = GET /v1/events SSE:`data:
13
+ * <单行 JSON>` 块 + `: ping` 注释行——与 face 写侧纪律一一对应;建立期
14
+ * (replay-end 界标前)流终结同样 fail-loud reject,已建立后流错误只诊断。
15
+ */
16
+ import { request as httpRequest } from 'node:http';
17
+ import { decodeWireLine, isSdkRequest } from '../../../src/channels/sdk/jsonl.js';
18
+ import { SDK_PROTOCOL_VERSION } from '../../../src/channels/sdk/protocol.js';
19
+ import { SDK_AUTH_HEADER, SDK_HTTP_ENDPOINTS, SDK_PROTOCOL_HEADER } from '../../../src/sdk/types.js';
20
+ import { SdkError } from './types.js';
21
+ /** 各请求档动词 → 端点路由(GET/POST 与体形由面定形) */
22
+ const ROUTES = {
23
+ prompt: { method: 'POST', path: SDK_HTTP_ENDPOINTS.prompt },
24
+ decide: { method: 'POST', path: SDK_HTTP_ENDPOINTS.decide },
25
+ getEntries: { method: 'POST', path: SDK_HTTP_ENDPOINTS.entries },
26
+ sessions: { method: 'GET', path: SDK_HTTP_ENDPOINTS.sessions },
27
+ };
28
+ /** 直连 HTTP 传输 */
29
+ export function httpSdkTransport(options) {
30
+ if ((options.socketPath === undefined) === (options.host === undefined)) {
31
+ throw new SdkError('SDK_TRANSPORT', 'socketPath 与 host/port 须二选一');
32
+ }
33
+ const warn = options.onWarn ?? (() => { });
34
+ /** 在场 SSE 流账(close 时逐一收口) */
35
+ const liveStreams = new Set();
36
+ /** 单次请求(socketPath XOR host/port——Node 语义自动取舍) */
37
+ const roundTrip = (method, path, body) => new Promise((resolve, reject) => {
38
+ const req = httpRequest({
39
+ socketPath: options.socketPath,
40
+ host: options.host,
41
+ port: options.port,
42
+ method,
43
+ path,
44
+ headers: {
45
+ ...(body !== undefined ? { 'content-type': 'application/json; charset=utf-8' } : {}),
46
+ [SDK_AUTH_HEADER]: `Bearer ${options.token}`,
47
+ [SDK_PROTOCOL_HEADER]: String(SDK_PROTOCOL_VERSION),
48
+ },
49
+ }, (res) => {
50
+ const chunks = [];
51
+ res.on('data', (chunk) => chunks.push(chunk));
52
+ res.on('end', () => resolve({ status: res.statusCode ?? 0, body: Buffer.concat(chunks).toString('utf8') }));
53
+ // 应答阶段连接夭折(ECONNRESET 等)错误发在 res 而非 req——不挂即悬挂
54
+ res.on('error', (err) => reject(new SdkError('SDK_TRANSPORT', `${method} ${path} 传输失败:${err.message}`)));
55
+ });
56
+ req.on('error', (err) => reject(new SdkError('SDK_TRANSPORT', `${method} ${path} 传输失败:${err.message}`)));
57
+ if (body !== undefined)
58
+ req.write(body);
59
+ req.end();
60
+ });
61
+ /** 应答体 → 帧:2xx 解帧;非 2xx 错误体还原错误帧原样返回(投形归 client) */
62
+ const toFrame = (result, what) => {
63
+ if (result.status >= 200 && result.status < 300) {
64
+ try {
65
+ return decodeWireLine(result.body);
66
+ }
67
+ catch (err) {
68
+ // 2xx 却非帧形 = 面侧违约——收进传输错词面(fail-loud 不裸抛解码错)
69
+ throw new SdkError('SDK_TRANSPORT', `${what} → 2xx 应答非帧形:${err instanceof Error ? err.message : String(err)}`);
70
+ }
71
+ }
72
+ try {
73
+ // face 错误体与线协议错误帧同构(码→状态映射——词汇零第二套)
74
+ const frame = decodeWireLine(result.body);
75
+ if (!isSdkRequest(frame) && frame.kind === 'error')
76
+ return frame;
77
+ }
78
+ catch {
79
+ // 落到传输错——非帧形错误体
80
+ }
81
+ throw new SdkError('SDK_TRANSPORT', `${what} → HTTP ${result.status}:${result.body.slice(0, 200)}`);
82
+ };
83
+ const transport = {
84
+ request: async (req) => {
85
+ const route = ROUTES[req.verb];
86
+ if (route === undefined) {
87
+ return Promise.reject(new SdkError('SDK_TRANSPORT', `动词 ${req.verb} 不走请求档(hello→subscribe / interrupt→send)`));
88
+ }
89
+ // 体 = 载荷去 verb(端点即动词——面侧注入权威)
90
+ const { verb: _verb, ...payload } = req;
91
+ const result = await roundTrip(route.method, route.path, route.method === 'POST' ? JSON.stringify(payload) : undefined);
92
+ return toFrame(result, `${route.method} ${route.path}`);
93
+ },
94
+ // 无应答档 HTTP 形:POST /v1/interrupt → 204 空体(写后即决)
95
+ send: async (req) => {
96
+ const { verb: _verb, ...payload } = req;
97
+ const result = await roundTrip('POST', SDK_HTTP_ENDPOINTS.interrupt, JSON.stringify(payload));
98
+ if (result.status < 200 || result.status >= 300) {
99
+ throw new SdkError('SDK_TRANSPORT', `interrupt → HTTP ${result.status}:${result.body.slice(0, 200)}`);
100
+ }
101
+ },
102
+ openLive: (params, onFrame) => new Promise((resolve, reject) => {
103
+ const query = new URLSearchParams({ sessionId: params.sessionId });
104
+ if (params.after !== undefined)
105
+ query.set('after', String(params.after));
106
+ // 布尔词面 = 宿主解码位字面(只认 'true'/'false',其余 400 SDK_DECODE)——'1'/'0' 形恒被拒
107
+ if (params.noDelta !== undefined)
108
+ query.set('noDelta', params.noDelta ? 'true' : 'false');
109
+ const req = httpRequest({
110
+ socketPath: options.socketPath,
111
+ host: options.host,
112
+ port: options.port,
113
+ method: 'GET',
114
+ path: `${SDK_HTTP_ENDPOINTS.events}?${query.toString()}`,
115
+ headers: {
116
+ accept: 'text/event-stream',
117
+ [SDK_AUTH_HEADER]: `Bearer ${options.token}`,
118
+ [SDK_PROTOCOL_HEADER]: String(SDK_PROTOCOL_VERSION),
119
+ },
120
+ }, (res) => {
121
+ if ((res.statusCode ?? 0) !== 200) {
122
+ // 建流失败:错误体还原错误帧投形拒绝(订阅失败即整档失败)
123
+ const chunks = [];
124
+ res.on('data', (chunk) => chunks.push(chunk));
125
+ res.on('end', () => {
126
+ try {
127
+ const frame = decodeWireLine(Buffer.concat(chunks).toString('utf8'));
128
+ if (!isSdkRequest(frame) && frame.kind === 'error') {
129
+ reject(new SdkError(frame.code, frame.message));
130
+ return;
131
+ }
132
+ }
133
+ catch {
134
+ // 落到传输错
135
+ }
136
+ reject(new SdkError('SDK_TRANSPORT', `SSE 建流 → HTTP ${res.statusCode ?? 0}`));
137
+ });
138
+ return;
139
+ }
140
+ liveStreams.add(res);
141
+ let settled = false; // 建立界标守卫:replay-end resolve 置位——界标前终局一律建流失败
142
+ let highWaterSeq = -1;
143
+ let buffer = '';
144
+ res.setEncoding('utf8');
145
+ res.on('data', (chunk) => {
146
+ buffer += chunk;
147
+ // SSE 事件块以空行分隔;注释行(: ping)跳过——与 face 写侧纪律对应
148
+ let sep;
149
+ while ((sep = buffer.indexOf('\n\n')) !== -1) {
150
+ const block = buffer.slice(0, sep);
151
+ buffer = buffer.slice(sep + 2);
152
+ for (const data of sseDataPayloads(block)) {
153
+ try {
154
+ const frame = decodeWireLine(data);
155
+ if (isSdkRequest(frame)) {
156
+ warn(`SSE 反向帧跳过:${data.slice(0, 120)}`);
157
+ continue;
158
+ }
159
+ if (frame.kind === 'hello') {
160
+ // 握手首帧:取快照高水位,不入监听面(与 stdio 形同语义)
161
+ highWaterSeq = frame.highWaterSeq;
162
+ continue;
163
+ }
164
+ onFrame(frame);
165
+ if (frame.kind === 'replay-end') {
166
+ // 衔接界标即建立点——界标帧已入监听面(重放段全量承诺)
167
+ settled = true;
168
+ resolve({ sessionId: params.sessionId, highWaterSeq, close: liveClose(res, liveStreams) });
169
+ }
170
+ }
171
+ catch (err) {
172
+ warn(`SSE 坏载荷跳过:${err instanceof Error ? err.message : String(err)}`);
173
+ }
174
+ }
175
+ }
176
+ });
177
+ // 终局摘账 + 建立期守卫:流终结先摘 liveStreams 账(对端收流/server 侧
178
+ // 断开同族——终局即离场,不滞留已死流对象);replay-end 未至的终局 =
179
+ // 建流失败 fail-loud(调用方拿到悬空 Future 无超时兜底可依,最劣形)。
180
+ const terminate = (why) => {
181
+ liveStreams.delete(res);
182
+ if (!settled)
183
+ reject(new SdkError('SDK_TRANSPORT', `SSE 流在 replay-end 前终止(${why})`));
184
+ };
185
+ res.on('end', () => terminate('应答流结束'));
186
+ res.on('close', () => terminate('连接关闭'));
187
+ res.on('error', (err) => {
188
+ if (settled) {
189
+ // 已建立后的流中断只诊断不打回(收口归 handle.close / transport.close)
190
+ warn(`SSE 流错误:${err.message}`);
191
+ return;
192
+ }
193
+ reject(new SdkError('SDK_TRANSPORT', `SSE 流在 replay-end 前终止(流错误:${err.message})`));
194
+ });
195
+ });
196
+ req.on('error', (err) => reject(new SdkError('SDK_TRANSPORT', `SSE 建流传输失败:${err.message}`)));
197
+ req.end();
198
+ }),
199
+ // 整连接收口(幂等):在场 SSE 流逐一销毁(请求档无长连——keep-alive 由 agent 自理)
200
+ close: async () => {
201
+ for (const res of liveStreams)
202
+ res.destroy();
203
+ liveStreams.clear();
204
+ },
205
+ };
206
+ return transport;
207
+ }
208
+ /** SSE 事件块 → data 载荷列表(`data: ` 前缀行拼接——多行 data 续接;注释行跳过) */
209
+ function sseDataPayloads(block) {
210
+ const data = [];
211
+ for (const line of block.split('\n')) {
212
+ if (line.startsWith(':'))
213
+ continue; // 注释行(30s ping)
214
+ if (line.startsWith('data:'))
215
+ data.push(line.slice(5).trimStart());
216
+ }
217
+ return data;
218
+ }
219
+ /**
220
+ * 单订阅收口工厂(幂等——流账摘除先于销毁;res 'close' 终局另有摘账兜底)。
221
+ *
222
+ * 模块缝注:具名导出仅供同模块测试件锁账纪纪律(摘账先于销毁),包公开面
223
+ * (index.ts)不转发——外部勿依赖。
224
+ */
225
+ export function liveClose(res, streams) {
226
+ return async () => {
227
+ // 摘账先于销毁——滞留已销毁流对象即无界账(每订阅周期一漏,跨会话反复订阅累积)
228
+ streams.delete(res);
229
+ res.destroy();
230
+ };
231
+ }
232
+ //# sourceMappingURL=http.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"http.js","sourceRoot":"","sources":["../../../../src/http.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,25 @@
1
+ /**
2
+ * berry-agent-sdk —— 类型化 SDK 客户端公共面(批 13f-3)。
3
+ *
4
+ * 两传输同面:spawn serve stdio(子进程托管形)与直连 HTTP(daemon sock /
5
+ * 前台 TCP 形);client 方法面传输无关。类型面自仓单源策展 re-export——
6
+ * 进什么出什么逐项过目(见 ./types.ts)。
7
+ *
8
+ * 用法骨架:
9
+ * ```ts
10
+ * import { createSdkClient, spawnServeTransport } from 'berry-agent-sdk';
11
+ * const transport = spawnServeTransport({ args: ['<主包>/dist/host/main.js', 'serve'] });
12
+ * const client = createSdkClient(transport);
13
+ * const ack = await client.prompt({ content: '你好' });
14
+ * const handle = await client.subscribe({ sessionId: ack.sessionId }, (frame) => { … });
15
+ * await client.close();
16
+ * ```
17
+ */
18
+ export { SdkError, SDK_PROTOCOL_VERSION } from './types.js';
19
+ export type { SdkFrameListener, SdkLiveHandle, SdkLiveParams, SdkTransport, SdkClient, SdkPromptInput, SdkEntriesInput, } from './types.js';
20
+ export type { AgentEvent, ApprovalAskAnswer, SdkRequest, SdkWireFrame, SdkAckFrame, SdkEntriesFrame, SdkSessionSummary, SdkDurableEntry, SdkEventFrame, SdkHelloFrame, SdkErrorFrame, } from './types.js';
21
+ export { createSdkClient } from './client.js';
22
+ export { spawnServeTransport } from './stdio.js';
23
+ export type { SpawnServeOptions, SdkStdioTransport } from './stdio.js';
24
+ export { httpSdkTransport } from './http.js';
25
+ export type { HttpSdkOptions } from './http.js';
@@ -0,0 +1,22 @@
1
+ /**
2
+ * berry-agent-sdk —— 类型化 SDK 客户端公共面(批 13f-3)。
3
+ *
4
+ * 两传输同面:spawn serve stdio(子进程托管形)与直连 HTTP(daemon sock /
5
+ * 前台 TCP 形);client 方法面传输无关。类型面自仓单源策展 re-export——
6
+ * 进什么出什么逐项过目(见 ./types.ts)。
7
+ *
8
+ * 用法骨架:
9
+ * ```ts
10
+ * import { createSdkClient, spawnServeTransport } from 'berry-agent-sdk';
11
+ * const transport = spawnServeTransport({ args: ['<主包>/dist/host/main.js', 'serve'] });
12
+ * const client = createSdkClient(transport);
13
+ * const ack = await client.prompt({ content: '你好' });
14
+ * const handle = await client.subscribe({ sessionId: ack.sessionId }, (frame) => { … });
15
+ * await client.close();
16
+ * ```
17
+ */
18
+ export { SdkError, SDK_PROTOCOL_VERSION } from './types.js';
19
+ export { createSdkClient } from './client.js';
20
+ export { spawnServeTransport } from './stdio.js';
21
+ export { httpSdkTransport } from './http.js';
22
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../src/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;GAgBG;AACH,OAAO,EAAE,QAAQ,EAAE,oBAAoB,EAAE,MAAM,YAAY,CAAC;AAyB5D,OAAO,EAAE,eAAe,EAAE,MAAM,aAAa,CAAC;AAC9C,OAAO,EAAE,mBAAmB,EAAE,MAAM,YAAY,CAAC;AAEjD,OAAO,EAAE,gBAAgB,EAAE,MAAM,WAAW,CAAC"}
@@ -0,0 +1,23 @@
1
+ import type { SdkTransport } from './types.js';
2
+ /** spawn 选项(args 必填——serve 启动形由调用方知悉,本件不猜安装布局) */
3
+ export interface SpawnServeOptions {
4
+ /** 可执行(缺省 process.execPath——node 直跑形) */
5
+ readonly command?: string;
6
+ /** 子进程参数(必填——serve 形态启动面) */
7
+ readonly args: readonly string[];
8
+ /** 环境变量(缺省继承 process.env) */
9
+ readonly env?: Record<string, string | undefined>;
10
+ /** 工作目录(缺省继承) */
11
+ readonly cwd?: string;
12
+ /** 子进程 stderr 观察面(诊断——缺省静默;注意 serve 形 stderr 含日志) */
13
+ readonly onStderr?: (chunk: string) => void;
14
+ /** 坏行/反向帧诊断面(缺省静默) */
15
+ readonly onWarn?: (message: string) => void;
16
+ }
17
+ /** stdio 传输柄(传输三档 + 子进程终局) */
18
+ export interface SdkStdioTransport extends SdkTransport {
19
+ /** 子进程退出码终局(close 后落定;spawn 失败形 = -1) */
20
+ readonly exited: Promise<number>;
21
+ }
22
+ /** spawn serve 子进程并建传输 */
23
+ export declare function spawnServeTransport(options: SpawnServeOptions): SdkStdioTransport;