@di-code/coding-agent 0.1.7 → 0.1.9

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 (333) hide show
  1. package/README.md +54 -567
  2. package/compositions/base.yml +54 -0
  3. package/compositions/interactive.yml +14 -0
  4. package/compositions/json.yml +6 -0
  5. package/compositions/print.yml +5 -0
  6. package/compositions/rpc.yml +12 -0
  7. package/compositions/webui.yml +9 -0
  8. package/dist/cli.d.ts +22 -1
  9. package/dist/cli.d.ts.map +1 -1
  10. package/dist/cli.js +97 -3
  11. package/dist/cli.js.map +1 -1
  12. package/dist/composition-loader-entry.d.ts +11 -0
  13. package/dist/composition-loader-entry.d.ts.map +1 -0
  14. package/dist/composition-loader-entry.js +12 -0
  15. package/dist/composition-loader-entry.js.map +1 -0
  16. package/dist/compositions.d.ts +32 -0
  17. package/dist/compositions.d.ts.map +1 -0
  18. package/dist/compositions.js +173 -0
  19. package/dist/compositions.js.map +1 -0
  20. package/dist/core/session/session-manager.d.ts +9 -2
  21. package/dist/core/session/session-manager.d.ts.map +1 -1
  22. package/dist/core/session/session-manager.js +28 -0
  23. package/dist/core/session/session-manager.js.map +1 -1
  24. package/dist/core/session/session-storage.d.ts.map +1 -1
  25. package/dist/core/session/session-storage.js +20 -3
  26. package/dist/core/session/session-storage.js.map +1 -1
  27. package/dist/core/session/types.d.ts +11 -2
  28. package/dist/core/session/types.d.ts.map +1 -1
  29. package/dist/core/session/types.js.map +1 -1
  30. package/dist/core/session-tools.d.ts +5 -0
  31. package/dist/core/session-tools.d.ts.map +1 -0
  32. package/dist/core/session-tools.js +17 -0
  33. package/dist/core/session-tools.js.map +1 -0
  34. package/dist/core/session.d.ts +19 -7
  35. package/dist/core/session.d.ts.map +1 -1
  36. package/dist/core/session.js +71 -39
  37. package/dist/core/session.js.map +1 -1
  38. package/dist/core/tools/bash.d.ts +1 -38
  39. package/dist/core/tools/bash.d.ts.map +1 -1
  40. package/dist/core/tools/bash.js +1 -207
  41. package/dist/core/tools/bash.js.map +1 -1
  42. package/dist/core/tools/edit-diff.d.ts +1 -24
  43. package/dist/core/tools/edit-diff.d.ts.map +1 -1
  44. package/dist/core/tools/edit-diff.js +1 -135
  45. package/dist/core/tools/edit-diff.js.map +1 -1
  46. package/dist/core/tools/edit.d.ts +1 -26
  47. package/dist/core/tools/edit.d.ts.map +1 -1
  48. package/dist/core/tools/edit.js +1 -140
  49. package/dist/core/tools/edit.js.map +1 -1
  50. package/dist/core/tools/file-mutation-queue.d.ts +1 -1
  51. package/dist/core/tools/file-mutation-queue.d.ts.map +1 -1
  52. package/dist/core/tools/file-mutation-queue.js +1 -23
  53. package/dist/core/tools/file-mutation-queue.js.map +1 -1
  54. package/dist/core/tools/file-search.d.ts +1 -13
  55. package/dist/core/tools/file-search.d.ts.map +1 -1
  56. package/dist/core/tools/file-search.js +1 -98
  57. package/dist/core/tools/file-search.js.map +1 -1
  58. package/dist/core/tools/glob.d.ts +1 -10
  59. package/dist/core/tools/glob.d.ts.map +1 -1
  60. package/dist/core/tools/glob.js +1 -43
  61. package/dist/core/tools/glob.js.map +1 -1
  62. package/dist/core/tools/grep.d.ts +1 -12
  63. package/dist/core/tools/grep.d.ts.map +1 -1
  64. package/dist/core/tools/grep.js +1 -66
  65. package/dist/core/tools/grep.js.map +1 -1
  66. package/dist/core/tools/load-skill.d.ts +1 -9
  67. package/dist/core/tools/load-skill.d.ts.map +1 -1
  68. package/dist/core/tools/load-skill.js +1 -21
  69. package/dist/core/tools/load-skill.js.map +1 -1
  70. package/dist/core/tools/path-boundary.d.ts +1 -4
  71. package/dist/core/tools/path-boundary.d.ts.map +1 -1
  72. package/dist/core/tools/path-boundary.js +1 -65
  73. package/dist/core/tools/path-boundary.js.map +1 -1
  74. package/dist/core/tools/read.d.ts +1 -16
  75. package/dist/core/tools/read.d.ts.map +1 -1
  76. package/dist/core/tools/read.js +1 -131
  77. package/dist/core/tools/read.js.map +1 -1
  78. package/dist/core/tools/write.d.ts +1 -16
  79. package/dist/core/tools/write.d.ts.map +1 -1
  80. package/dist/core/tools/write.js +1 -44
  81. package/dist/core/tools/write.js.map +1 -1
  82. package/dist/entry.js +30 -28
  83. package/dist/entry.js.map +1 -1
  84. package/dist/index.d.ts +6 -3
  85. package/dist/index.d.ts.map +1 -1
  86. package/dist/index.js +6 -3
  87. package/dist/index.js.map +1 -1
  88. package/dist/interactive/builtin.d.ts +17 -0
  89. package/dist/interactive/builtin.d.ts.map +1 -0
  90. package/dist/interactive/builtin.js +47 -0
  91. package/dist/interactive/builtin.js.map +1 -0
  92. package/dist/interactive/controller.d.ts +85 -0
  93. package/dist/interactive/controller.d.ts.map +1 -0
  94. package/dist/interactive/controller.js +211 -0
  95. package/dist/interactive/controller.js.map +1 -0
  96. package/dist/interactive/index.d.ts +3 -0
  97. package/dist/interactive/index.d.ts.map +1 -0
  98. package/dist/interactive/index.js +3 -0
  99. package/dist/interactive/index.js.map +1 -0
  100. package/dist/interactive-host-entry.d.ts +7 -0
  101. package/dist/interactive-host-entry.d.ts.map +1 -0
  102. package/dist/interactive-host-entry.js +123 -0
  103. package/dist/interactive-host-entry.js.map +1 -0
  104. package/dist/interactive-profile.d.ts +18 -0
  105. package/dist/interactive-profile.d.ts.map +1 -0
  106. package/dist/interactive-profile.js +290 -0
  107. package/dist/interactive-profile.js.map +1 -0
  108. package/dist/interactive-resources-entry.d.ts +7 -0
  109. package/dist/interactive-resources-entry.d.ts.map +1 -0
  110. package/dist/interactive-resources-entry.js +42 -0
  111. package/dist/interactive-resources-entry.js.map +1 -0
  112. package/dist/legacy-main.d.ts +39 -0
  113. package/dist/legacy-main.d.ts.map +1 -0
  114. package/dist/legacy-main.js +611 -0
  115. package/dist/legacy-main.js.map +1 -0
  116. package/dist/main.d.ts +15 -34
  117. package/dist/main.d.ts.map +1 -1
  118. package/dist/main.js +130 -518
  119. package/dist/main.js.map +1 -1
  120. package/dist/mcp/entries.d.ts +42 -0
  121. package/dist/mcp/entries.d.ts.map +1 -0
  122. package/dist/mcp/entries.js +98 -0
  123. package/dist/mcp/entries.js.map +1 -0
  124. package/dist/mcp-client-entry.d.ts +5 -0
  125. package/dist/mcp-client-entry.d.ts.map +1 -0
  126. package/dist/mcp-client-entry.js +6 -0
  127. package/dist/mcp-client-entry.js.map +1 -0
  128. package/dist/mcp-config-entry.d.ts +5 -0
  129. package/dist/mcp-config-entry.d.ts.map +1 -0
  130. package/dist/mcp-config-entry.js +6 -0
  131. package/dist/mcp-config-entry.js.map +1 -0
  132. package/dist/mcp-tools-entry.d.ts +5 -0
  133. package/dist/mcp-tools-entry.d.ts.map +1 -0
  134. package/dist/mcp-tools-entry.js +6 -0
  135. package/dist/mcp-tools-entry.js.map +1 -0
  136. package/dist/mcp-transport-entry.d.ts +5 -0
  137. package/dist/mcp-transport-entry.d.ts.map +1 -0
  138. package/dist/mcp-transport-entry.js +6 -0
  139. package/dist/mcp-transport-entry.js.map +1 -0
  140. package/dist/modes/interactive-entry.d.ts +18 -0
  141. package/dist/modes/interactive-entry.d.ts.map +1 -0
  142. package/dist/modes/interactive-entry.js +21 -0
  143. package/dist/modes/interactive-entry.js.map +1 -0
  144. package/dist/modes/interactive.d.ts +16 -6
  145. package/dist/modes/interactive.d.ts.map +1 -1
  146. package/dist/modes/interactive.js +81 -32
  147. package/dist/modes/interactive.js.map +1 -1
  148. package/dist/modes/json-entry.d.ts +13 -0
  149. package/dist/modes/json-entry.d.ts.map +1 -0
  150. package/dist/modes/json-entry.js +14 -0
  151. package/dist/modes/json-entry.js.map +1 -0
  152. package/dist/modes/json.d.ts +4 -1
  153. package/dist/modes/json.d.ts.map +1 -1
  154. package/dist/modes/json.js +3 -3
  155. package/dist/modes/json.js.map +1 -1
  156. package/dist/modes/print-entry.d.ts +10 -0
  157. package/dist/modes/print-entry.d.ts.map +1 -0
  158. package/dist/modes/print-entry.js +11 -0
  159. package/dist/modes/print-entry.js.map +1 -0
  160. package/dist/modes/tree-selector.d.ts.map +1 -1
  161. package/dist/modes/tree-selector.js +4 -0
  162. package/dist/modes/tree-selector.js.map +1 -1
  163. package/dist/plugin-dump-composition.d.ts +6 -0
  164. package/dist/plugin-dump-composition.d.ts.map +1 -0
  165. package/dist/plugin-dump-composition.js +7 -0
  166. package/dist/plugin-dump-composition.js.map +1 -0
  167. package/dist/plugin-inventory.d.ts +7 -0
  168. package/dist/plugin-inventory.d.ts.map +1 -0
  169. package/dist/plugin-inventory.js +8 -0
  170. package/dist/plugin-inventory.js.map +1 -0
  171. package/dist/plugin-manager.d.ts +6 -0
  172. package/dist/plugin-manager.d.ts.map +1 -0
  173. package/dist/plugin-manager.js +7 -0
  174. package/dist/plugin-manager.js.map +1 -0
  175. package/dist/plugin-trace.d.ts +6 -0
  176. package/dist/plugin-trace.d.ts.map +1 -0
  177. package/dist/plugin-trace.js +7 -0
  178. package/dist/plugin-trace.js.map +1 -0
  179. package/dist/plugins/dynamic-broker.d.ts +76 -0
  180. package/dist/plugins/dynamic-broker.d.ts.map +1 -0
  181. package/dist/plugins/dynamic-broker.js +852 -0
  182. package/dist/plugins/dynamic-broker.js.map +1 -0
  183. package/dist/plugins/profile.d.ts +15 -0
  184. package/dist/plugins/profile.d.ts.map +1 -0
  185. package/dist/plugins/profile.js +34 -0
  186. package/dist/plugins/profile.js.map +1 -0
  187. package/dist/plugins/runtime-host.d.ts +37 -0
  188. package/dist/plugins/runtime-host.d.ts.map +1 -0
  189. package/dist/plugins/runtime-host.js +95 -0
  190. package/dist/plugins/runtime-host.js.map +1 -0
  191. package/dist/plugins/trust.d.ts +8 -0
  192. package/dist/plugins/trust.d.ts.map +1 -0
  193. package/dist/plugins/trust.js +59 -0
  194. package/dist/plugins/trust.js.map +1 -0
  195. package/dist/project-trust-entry.d.ts +15 -0
  196. package/dist/project-trust-entry.d.ts.map +1 -0
  197. package/dist/project-trust-entry.js +15 -0
  198. package/dist/project-trust-entry.js.map +1 -0
  199. package/dist/rpc/client.d.ts +78 -6
  200. package/dist/rpc/client.d.ts.map +1 -1
  201. package/dist/rpc/client.js +172 -4
  202. package/dist/rpc/client.js.map +1 -1
  203. package/dist/rpc/dispatcher.d.ts +121 -0
  204. package/dist/rpc/dispatcher.d.ts.map +1 -0
  205. package/dist/rpc/dispatcher.js +994 -0
  206. package/dist/rpc/dispatcher.js.map +1 -0
  207. package/dist/rpc/index.d.ts +2 -0
  208. package/dist/rpc/index.d.ts.map +1 -1
  209. package/dist/rpc/index.js +2 -0
  210. package/dist/rpc/index.js.map +1 -1
  211. package/dist/rpc/lifecycle.d.ts +6 -0
  212. package/dist/rpc/lifecycle.d.ts.map +1 -0
  213. package/dist/rpc/lifecycle.js +24 -0
  214. package/dist/rpc/lifecycle.js.map +1 -0
  215. package/dist/rpc/protocol.d.ts +112 -31
  216. package/dist/rpc/protocol.d.ts.map +1 -1
  217. package/dist/rpc/protocol.js +569 -117
  218. package/dist/rpc/protocol.js.map +1 -1
  219. package/dist/rpc/server-service.d.ts +7 -0
  220. package/dist/rpc/server-service.d.ts.map +1 -0
  221. package/dist/rpc/server-service.js +3 -0
  222. package/dist/rpc/server-service.js.map +1 -0
  223. package/dist/rpc/server.d.ts +16 -19
  224. package/dist/rpc/server.d.ts.map +1 -1
  225. package/dist/rpc/server.js +59 -115
  226. package/dist/rpc/server.js.map +1 -1
  227. package/dist/rpc-client-sdk-entry.d.ts +12 -0
  228. package/dist/rpc-client-sdk-entry.d.ts.map +1 -0
  229. package/dist/rpc-client-sdk-entry.js +11 -0
  230. package/dist/rpc-client-sdk-entry.js.map +1 -0
  231. package/dist/rpc-entry.js +50 -18
  232. package/dist/rpc-entry.js.map +1 -1
  233. package/dist/rpc-server-entry.d.ts +8 -0
  234. package/dist/rpc-server-entry.d.ts.map +1 -0
  235. package/dist/rpc-server-entry.js +67 -0
  236. package/dist/rpc-server-entry.js.map +1 -0
  237. package/dist/runtime/attachment-store.d.ts +13 -0
  238. package/dist/runtime/attachment-store.d.ts.map +1 -0
  239. package/dist/runtime/attachment-store.js +93 -0
  240. package/dist/runtime/attachment-store.js.map +1 -0
  241. package/dist/runtime/bootstrap.d.ts +14 -0
  242. package/dist/runtime/bootstrap.d.ts.map +1 -0
  243. package/dist/runtime/bootstrap.js +29 -0
  244. package/dist/runtime/bootstrap.js.map +1 -0
  245. package/dist/runtime/interactive-host-service.d.ts +22 -0
  246. package/dist/runtime/interactive-host-service.d.ts.map +1 -0
  247. package/dist/runtime/interactive-host-service.js +2 -0
  248. package/dist/runtime/interactive-host-service.js.map +1 -0
  249. package/dist/runtime/interactive-resource-service.d.ts +11 -0
  250. package/dist/runtime/interactive-resource-service.d.ts.map +1 -0
  251. package/dist/runtime/interactive-resource-service.js +3 -0
  252. package/dist/runtime/interactive-resource-service.js.map +1 -0
  253. package/dist/runtime/plugin-inventory-entry.d.ts +5 -0
  254. package/dist/runtime/plugin-inventory-entry.d.ts.map +1 -0
  255. package/dist/runtime/plugin-inventory-entry.js +18 -0
  256. package/dist/runtime/plugin-inventory-entry.js.map +1 -0
  257. package/dist/runtime/plugin-inventory-service.d.ts +8 -0
  258. package/dist/runtime/plugin-inventory-service.d.ts.map +1 -0
  259. package/dist/runtime/plugin-inventory-service.js +3 -0
  260. package/dist/runtime/plugin-inventory-service.js.map +1 -0
  261. package/dist/runtime/plugin-manager-entry.d.ts +20 -0
  262. package/dist/runtime/plugin-manager-entry.d.ts.map +1 -0
  263. package/dist/runtime/plugin-manager-entry.js +96 -0
  264. package/dist/runtime/plugin-manager-entry.js.map +1 -0
  265. package/dist/runtime/plugin-observability-entry.d.ts +12 -0
  266. package/dist/runtime/plugin-observability-entry.d.ts.map +1 -0
  267. package/dist/runtime/plugin-observability-entry.js +73 -0
  268. package/dist/runtime/plugin-observability-entry.js.map +1 -0
  269. package/dist/runtime/product-host.d.ts +91 -0
  270. package/dist/runtime/product-host.d.ts.map +1 -0
  271. package/dist/runtime/product-host.js +529 -0
  272. package/dist/runtime/product-host.js.map +1 -0
  273. package/dist/runtime/session-factory.d.ts +17 -0
  274. package/dist/runtime/session-factory.d.ts.map +1 -0
  275. package/dist/runtime/session-factory.js +75 -0
  276. package/dist/runtime/session-factory.js.map +1 -0
  277. package/dist/runtime/session-host.d.ts +152 -0
  278. package/dist/runtime/session-host.d.ts.map +1 -0
  279. package/dist/runtime/session-host.js +895 -0
  280. package/dist/runtime/session-host.js.map +1 -0
  281. package/dist/runtime-core-entry.d.ts +11 -0
  282. package/dist/runtime-core-entry.d.ts.map +1 -0
  283. package/dist/runtime-core-entry.js +9 -0
  284. package/dist/runtime-core-entry.js.map +1 -0
  285. package/dist/session-factory-entry.d.ts +7 -0
  286. package/dist/session-factory-entry.d.ts.map +1 -0
  287. package/dist/session-factory-entry.js +9 -0
  288. package/dist/session-factory-entry.js.map +1 -0
  289. package/dist/session-store-jsonl-entry.d.ts +7 -0
  290. package/dist/session-store-jsonl-entry.d.ts.map +1 -0
  291. package/dist/session-store-jsonl-entry.js +33 -0
  292. package/dist/session-store-jsonl-entry.js.map +1 -0
  293. package/dist/startup.d.ts +12 -1
  294. package/dist/startup.d.ts.map +1 -1
  295. package/dist/startup.js +106 -15
  296. package/dist/startup.js.map +1 -1
  297. package/dist/subagents/index.d.ts +2 -0
  298. package/dist/subagents/index.d.ts.map +1 -0
  299. package/dist/subagents/index.js +2 -0
  300. package/dist/subagents/index.js.map +1 -0
  301. package/dist/subagents/service.d.ts +50 -0
  302. package/dist/subagents/service.d.ts.map +1 -0
  303. package/dist/subagents/service.js +521 -0
  304. package/dist/subagents/service.js.map +1 -0
  305. package/dist/ui-host.d.ts +125 -0
  306. package/dist/ui-host.d.ts.map +1 -0
  307. package/dist/ui-host.js +275 -0
  308. package/dist/ui-host.js.map +1 -0
  309. package/dist/web/assets/index-BwfuGMvv.css +1 -0
  310. package/dist/web/assets/index-DPUaJqFJ.js +41 -0
  311. package/dist/web/assets/index-DPUaJqFJ.js.map +1 -0
  312. package/dist/web/index.html +14 -0
  313. package/dist/web-command.d.ts +11 -0
  314. package/dist/web-command.d.ts.map +1 -0
  315. package/dist/web-command.js +114 -0
  316. package/dist/web-command.js.map +1 -0
  317. package/dist/web-frontend.d.ts +73 -0
  318. package/dist/web-frontend.d.ts.map +1 -0
  319. package/dist/web-frontend.js +249 -0
  320. package/dist/web-frontend.js.map +1 -0
  321. package/dist/web.d.ts +254 -0
  322. package/dist/web.d.ts.map +1 -0
  323. package/dist/web.js +740 -0
  324. package/dist/web.js.map +1 -0
  325. package/dist/webui-entry.d.ts +3 -0
  326. package/dist/webui-entry.d.ts.map +1 -0
  327. package/dist/webui-entry.js +73 -0
  328. package/dist/webui-entry.js.map +1 -0
  329. package/dist/webui.d.ts +91 -0
  330. package/dist/webui.d.ts.map +1 -0
  331. package/dist/webui.js +882 -0
  332. package/dist/webui.js.map +1 -0
  333. package/package.json +89 -8
@@ -1,12 +1,27 @@
1
1
  import type { Readable, Writable } from "node:stream";
2
- import type { AssistantMessage } from "@di-code/ai";
3
- import { type RpcErrorCode, type RpcEventRecord, type RpcSessionState } from "./protocol.ts";
2
+ import type { AssistantMessage, Model, ThinkingLevel } from "@di-code/ai";
3
+ import { type OperationState, type RpcAttachmentInfo, type RpcCapabilities, type RpcContextFileInfo, type RpcErrorCode, type RpcEventRecord, type RpcMcpServerInfo, type RpcMethod, type RpcProductState, type RpcProviderSummary, type RpcSessionState, type RpcSettingsSnapshot, type RpcSuccessResult } from "./protocol.ts";
4
4
  export interface RpcTransport {
5
5
  readonly readable: Readable;
6
6
  readonly writable: Writable;
7
7
  onExit?(listener: (code: number | null, signal: NodeJS.Signals | null) => void): () => void;
8
8
  close?(): void;
9
9
  }
10
+ export interface RpcPromptOptions {
11
+ readonly signal?: AbortSignal;
12
+ /** Attachments are uploaded explicitly and consumed by this request; requests are never replayed automatically. */
13
+ readonly attachmentIds?: readonly string[];
14
+ }
15
+ export interface RpcSessionInfo {
16
+ readonly id: string;
17
+ readonly label: string;
18
+ readonly modifiedAt?: number;
19
+ }
20
+ export interface RpcRuntimeSnapshot {
21
+ readonly providerId: string;
22
+ readonly modelId: string;
23
+ readonly thinkingLevel?: ThinkingLevel;
24
+ }
10
25
  export declare class RpcRemoteError extends Error {
11
26
  readonly code: RpcErrorCode;
12
27
  constructor(code: RpcErrorCode, message: string);
@@ -21,12 +36,69 @@ export declare class RpcClient {
21
36
  constructor(transport: RpcTransport);
22
37
  subscribe(listener: (event: RpcEventRecord) => void): () => void;
23
38
  getState(): Promise<RpcSessionState>;
24
- prompt(message: string, options?: {
25
- readonly signal?: AbortSignal;
26
- }): Promise<AssistantMessage>;
39
+ prompt(message: string, options?: RpcPromptOptions): Promise<AssistantMessage>;
27
40
  cancel(requestId: string): Promise<boolean>;
41
+ /**
42
+ * Sends an explicitly named, schema-validated RPC request. Consumers should negotiate capabilities
43
+ * before using extended methods so old process servers remain usable.
44
+ */
45
+ call(method: RpcMethod, params?: Record<string, unknown>, id?: string): Promise<RpcSuccessResult>;
46
+ getCapabilities(events?: readonly string[]): Promise<RpcSuccessResult>;
47
+ negotiate(events?: readonly import("./protocol.ts").RpcExtendedEventName[]): Promise<RpcCapabilities>;
48
+ resumeEvents(lastSequence?: number): Promise<{
49
+ readonly snapshotRequired: boolean;
50
+ }>;
51
+ getOperation(requestId: string): Promise<OperationState>;
52
+ listSessions(): Promise<readonly RpcSessionInfo[]>;
53
+ newSession(): Promise<RpcSessionInfo>;
54
+ openSession(sessionId: string): Promise<RpcSessionInfo>;
55
+ getProductState(): Promise<RpcProductState>;
56
+ getProjectTrust(): Promise<boolean>;
57
+ getTranscript(params?: {
58
+ readonly pageToken?: string;
59
+ readonly pageSize?: number;
60
+ readonly maxBytes?: number;
61
+ }): Promise<RpcSuccessResult>;
62
+ getTree(): Promise<RpcSuccessResult>;
63
+ navigateTree(entryId: string): Promise<RpcSuccessResult>;
64
+ getModels(): Promise<readonly Model[]>;
65
+ setModel(modelId: string): Promise<Model>;
66
+ getRuntime(): Promise<RpcRuntimeSnapshot>;
67
+ setRuntime(providerId: string, modelId: string): Promise<Model>;
68
+ setThinkingLevel(level?: ThinkingLevel): Promise<ThinkingLevel | undefined>;
69
+ compact(): Promise<void>;
70
+ setCompactionEnabled(enabled: boolean): Promise<boolean>;
71
+ getUsage(): Promise<RpcSuccessResult>;
72
+ listSkills(): Promise<RpcSuccessResult>;
73
+ getResources(): Promise<RpcSuccessResult>;
74
+ steer(message: string, options?: RpcPromptOptions): Promise<void>;
75
+ retry(targetRequestId: string): Promise<AssistantMessage>;
76
+ listProviders(): Promise<readonly RpcProviderSummary[]>;
77
+ getSettings(): Promise<RpcSettingsSnapshot>;
78
+ setDefaultProvider(providerId: string): Promise<void>;
79
+ setDefaultModel(modelId: string): Promise<void>;
80
+ setLocale(locale: "en" | "zh-CN"): Promise<void>;
81
+ setPermissionMode(permissionMode: "ask" | "allow" | "deny"): Promise<void>;
82
+ configureCustomProvider(input: {
83
+ readonly api: "openai-responses" | "openai-chat-completions" | "anthropic-messages";
84
+ readonly baseUrl: string;
85
+ readonly apiKey: string;
86
+ readonly modelId: string;
87
+ }): Promise<RpcProviderSummary>;
88
+ login(providerId: string, apiKey: string, options?: {
89
+ readonly modelId?: string;
90
+ readonly api?: string;
91
+ }): Promise<RpcProviderSummary>;
92
+ logout(providerId: string): Promise<void>;
93
+ setProjectTrust(trusted: boolean): Promise<boolean>;
94
+ listContextFiles(): Promise<readonly RpcContextFileInfo[]>;
95
+ listMcpServers(): Promise<readonly RpcMcpServerInfo[]>;
96
+ configureMcpServer(serverId: string, scope: "user" | "project" | "local", config: Record<string, unknown>): Promise<RpcMcpServerInfo>;
97
+ removeMcpServer(serverId: string, scope?: "user" | "project" | "local"): Promise<void>;
98
+ reconnectMcpServer(serverId: string): Promise<RpcMcpServerInfo>;
99
+ createAttachment(name: string, contentType: RpcAttachmentInfo["contentType"], data: string): Promise<RpcAttachmentInfo>;
28
100
  close(): void;
29
- private request;
101
+ private send;
30
102
  private readonly handleData;
31
103
  private readonly handleEnd;
32
104
  private readonly handleError;
@@ -1 +1 @@
1
- {"version":3,"file":"client.d.ts","sourceRoot":"","sources":["../../src/rpc/client.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,QAAQ,EAAE,QAAQ,EAAE,MAAM,aAAa,CAAC;AACtD,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,aAAa,CAAC;AAEpD,OAAO,EAGN,KAAK,YAAY,EACjB,KAAK,cAAc,EAGnB,KAAK,eAAe,EAEpB,MAAM,eAAe,CAAC;AAEvB,MAAM,WAAW,YAAY;IAC5B,QAAQ,CAAC,QAAQ,EAAE,QAAQ,CAAC;IAC5B,QAAQ,CAAC,QAAQ,EAAE,QAAQ,CAAC;IAC5B,MAAM,CAAC,CAAC,QAAQ,EAAE,CAAC,IAAI,EAAE,MAAM,GAAG,IAAI,EAAE,MAAM,EAAE,MAAM,CAAC,OAAO,GAAG,IAAI,KAAK,IAAI,GAAG,MAAM,IAAI,CAAC;IAC5F,KAAK,CAAC,IAAI,IAAI,CAAC;CACf;AAQD,qBAAa,cAAe,SAAQ,KAAK;IACxC,QAAQ,CAAC,IAAI,EAAE,YAAY,CAAC;gBAEhB,IAAI,EAAE,YAAY,EAAE,OAAO,EAAE,MAAM;CAK/C;AAED,qBAAa,SAAS;IACrB,OAAO,CAAC,QAAQ,CAAC,SAAS,CAAe;IACzC,OAAO,CAAC,QAAQ,CAAC,OAAO,CAAmB;IAC3C,OAAO,CAAC,QAAQ,CAAC,OAAO,CAAqC;IAC7D,OAAO,CAAC,QAAQ,CAAC,SAAS,CAA8C;IACxE,OAAO,CAAC,QAAQ,CAAC,kBAAkB,CAAC,CAAa;IACjD,OAAO,CAAC,MAAM,CAAS;gBAEX,SAAS,EAAE,YAAY;IAYnC,SAAS,CAAC,QAAQ,EAAE,CAAC,KAAK,EAAE,cAAc,KAAK,IAAI,GAAG,MAAM,IAAI;IAK1D,QAAQ,IAAI,OAAO,CAAC,eAAe,CAAC;IAMpC,MAAM,CAAC,OAAO,EAAE,MAAM,EAAE,OAAO,GAAE;QAAE,QAAQ,CAAC,MAAM,CAAC,EAAE,WAAW,CAAA;KAAO,GAAG,OAAO,CAAC,gBAAgB,CAAC;IAiBnG,MAAM,CAAC,SAAS,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC;IAMjD,KAAK,IAAI,IAAI;IAQb,OAAO,CAAC,OAAO;IAoBf,OAAO,CAAC,QAAQ,CAAC,UAAU,CAMzB;IAEF,OAAO,CAAC,QAAQ,CAAC,SAAS,CAQxB;IAEF,OAAO,CAAC,QAAQ,CAAC,WAAW,CAA4C;IAExE,OAAO,CAAC,UAAU;IAyBlB,OAAO,CAAC,IAAI;IAOZ,OAAO,CAAC,aAAa;IAKrB,OAAO,CAAC,MAAM;CAOd"}
1
+ {"version":3,"file":"client.d.ts","sourceRoot":"","sources":["../../src/rpc/client.ts"],"names":[],"mappings":"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"}
@@ -32,7 +32,7 @@ export class RpcClient {
32
32
  return () => this.listeners.delete(listener);
33
33
  }
34
34
  async getState() {
35
- const result = await this.request("get_state", {});
35
+ const result = await this.send("get_state", {});
36
36
  if (result.method !== "get_state")
37
37
  throw new Error("RPC get_state returned an incompatible result.");
38
38
  return result.state;
@@ -44,7 +44,7 @@ export class RpcClient {
44
44
  };
45
45
  options.signal?.addEventListener("abort", onAbort, { once: true });
46
46
  try {
47
- const response = this.request("prompt", { message }, requestId);
47
+ const response = this.send("prompt", { message, ...(options.attachmentIds === undefined ? {} : { attachmentIds: [...options.attachmentIds] }) }, requestId);
48
48
  if (options.signal?.aborted)
49
49
  onAbort();
50
50
  const result = await response;
@@ -57,11 +57,179 @@ export class RpcClient {
57
57
  }
58
58
  }
59
59
  async cancel(requestId) {
60
- const result = await this.request("cancel", { requestId });
60
+ const result = await this.send("cancel", { requestId });
61
61
  if (result.method !== "cancel")
62
62
  throw new Error("RPC cancel returned an incompatible result.");
63
63
  return result.cancelled;
64
64
  }
65
+ /**
66
+ * Sends an explicitly named, schema-validated RPC request. Consumers should negotiate capabilities
67
+ * before using extended methods so old process servers remain usable.
68
+ */
69
+ call(method, params = {}, id) {
70
+ return this.send(method, params, id);
71
+ }
72
+ async getCapabilities(events = []) {
73
+ const result = await this.send("get_capabilities", { events: [...events] });
74
+ return result;
75
+ }
76
+ async negotiate(events = []) {
77
+ const result = await this.getCapabilities(events);
78
+ return {
79
+ methods: result.methods,
80
+ events: result.events,
81
+ eventBufferSize: result.eventBufferSize,
82
+ };
83
+ }
84
+ async resumeEvents(lastSequence) {
85
+ const result = await this.send("resume_events", lastSequence === undefined ? {} : { lastSequence });
86
+ return { snapshotRequired: result.snapshotRequired };
87
+ }
88
+ async getOperation(requestId) {
89
+ const result = await this.send("get_operation", { requestId });
90
+ return result.operation;
91
+ }
92
+ async listSessions() {
93
+ const result = await this.send("list_sessions", {});
94
+ return result.sessions;
95
+ }
96
+ async newSession() {
97
+ const result = await this.send("new_session", {});
98
+ return result.session;
99
+ }
100
+ async openSession(sessionId) {
101
+ const result = await this.send("open_session", { sessionId });
102
+ return result.session;
103
+ }
104
+ async getProductState() {
105
+ const result = await this.send("get_product_state", {});
106
+ return result.state;
107
+ }
108
+ async getProjectTrust() {
109
+ const result = await this.send("get_project_trust", {});
110
+ return result.trusted;
111
+ }
112
+ async getTranscript(params = {}) {
113
+ return this.send("get_transcript", params);
114
+ }
115
+ async getTree() {
116
+ return this.send("get_tree", {});
117
+ }
118
+ async navigateTree(entryId) {
119
+ return this.send("navigate_tree", { entryId });
120
+ }
121
+ async getModels() {
122
+ const result = await this.send("get_models", {});
123
+ return result.models;
124
+ }
125
+ async setModel(modelId) {
126
+ const result = await this.send("set_model", { modelId });
127
+ return result.model;
128
+ }
129
+ async getRuntime() {
130
+ const result = await this.send("get_runtime", {});
131
+ return {
132
+ providerId: result.providerId,
133
+ modelId: result.modelId,
134
+ ...(result.thinkingLevel === undefined ? {} : { thinkingLevel: result.thinkingLevel }),
135
+ };
136
+ }
137
+ async setRuntime(providerId, modelId) {
138
+ const result = await this.send("set_runtime", { providerId, modelId });
139
+ return result.model;
140
+ }
141
+ async setThinkingLevel(level) {
142
+ const result = await this.send("set_thinking_level", level === undefined ? {} : { level });
143
+ return result.level;
144
+ }
145
+ async compact() {
146
+ await this.send("compact", {});
147
+ }
148
+ async setCompactionEnabled(enabled) {
149
+ const result = await this.send("set_compaction_enabled", { enabled });
150
+ return result.enabled;
151
+ }
152
+ async getUsage() {
153
+ return this.send("get_usage", {});
154
+ }
155
+ async listSkills() {
156
+ return this.send("list_skills", {});
157
+ }
158
+ async getResources() {
159
+ return this.send("get_resources", {});
160
+ }
161
+ async steer(message, options = {}) {
162
+ const result = await this.send("steer", {
163
+ message,
164
+ ...(options.attachmentIds === undefined ? {} : { attachmentIds: [...options.attachmentIds] }),
165
+ });
166
+ if (result.method !== "steer")
167
+ throw new Error("RPC steer returned an incompatible result.");
168
+ }
169
+ async retry(targetRequestId) {
170
+ const result = await this.send("retry", { targetRequestId });
171
+ if (result.method !== "retry")
172
+ throw new Error("RPC retry returned an incompatible result.");
173
+ return result.message;
174
+ }
175
+ async listProviders() {
176
+ const result = await this.send("list_providers", {});
177
+ return result.providers;
178
+ }
179
+ async getSettings() {
180
+ const result = await this.send("get_settings", {});
181
+ return result.settings;
182
+ }
183
+ async setDefaultProvider(providerId) {
184
+ await this.send("set_default_provider", { providerId });
185
+ }
186
+ async setDefaultModel(modelId) {
187
+ await this.send("set_default_model", { modelId });
188
+ }
189
+ async setLocale(locale) {
190
+ await this.send("set_locale", { locale });
191
+ }
192
+ async setPermissionMode(permissionMode) {
193
+ await this.send("set_permission_mode", { permissionMode });
194
+ }
195
+ async configureCustomProvider(input) {
196
+ const result = await this.send("configure_custom_provider", input);
197
+ return result.provider;
198
+ }
199
+ async login(providerId, apiKey, options = {}) {
200
+ const result = await this.send("login", { providerId, apiKey, ...options });
201
+ return result.provider;
202
+ }
203
+ async logout(providerId) {
204
+ await this.send("logout", { providerId });
205
+ }
206
+ async setProjectTrust(trusted) {
207
+ const result = await this.send("set_project_trust", { trusted });
208
+ return result.trusted;
209
+ }
210
+ async listContextFiles() {
211
+ const result = await this.send("list_context_files", {});
212
+ return result.files;
213
+ }
214
+ async listMcpServers() {
215
+ const result = await this.send("list_mcp_servers", {});
216
+ return result.servers;
217
+ }
218
+ async configureMcpServer(serverId, scope, config) {
219
+ const result = await this.send("configure_mcp_server", { serverId, scope, config });
220
+ return result.server;
221
+ }
222
+ async removeMcpServer(serverId, scope = "project") {
223
+ await this.send("remove_mcp_server", { serverId, scope });
224
+ }
225
+ async reconnectMcpServer(serverId) {
226
+ const result = await this.send("reconnect_mcp_server", { serverId });
227
+ return result.server;
228
+ }
229
+ async createAttachment(name, contentType, data) {
230
+ const result = await this.send("create_attachment", { name, contentType, data });
231
+ return result.attachment;
232
+ }
65
233
  close() {
66
234
  if (this.closed)
67
235
  return;
@@ -70,7 +238,7 @@ export class RpcClient {
70
238
  this.transport.close?.();
71
239
  this.rejectPending(new Error("RPC client is closed."));
72
240
  }
73
- request(method, params, id = randomUUID()) {
241
+ send(method, params, id = randomUUID()) {
74
242
  if (this.closed)
75
243
  return Promise.reject(new Error("RPC client is closed."));
76
244
  const request = { version: RPC_PROTOCOL_VERSION, kind: "request", id, method, params };
@@ -1 +1 @@
1
- {"version":3,"file":"client.js","sourceRoot":"","sources":["../../src/rpc/client.ts"],"names":[],"mappings":"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","sourcesContent":["import { randomUUID } from \"node:crypto\";\nimport type { Readable, Writable } from \"node:stream\";\nimport type { AssistantMessage } from \"@di-code/ai\";\nimport { JsonlLineDecoder, serializeJsonLine } from \"./jsonl.ts\";\nimport {\n\tparseRpcServerMessage,\n\tRPC_PROTOCOL_VERSION,\n\ttype RpcErrorCode,\n\ttype RpcEventRecord,\n\ttype RpcMethod,\n\ttype RpcRequest,\n\ttype RpcSessionState,\n\ttype RpcSuccessResult,\n} from \"./protocol.ts\";\n\nexport interface RpcTransport {\n\treadonly readable: Readable;\n\treadonly writable: Writable;\n\tonExit?(listener: (code: number | null, signal: NodeJS.Signals | null) => void): () => void;\n\tclose?(): void;\n}\n\ninterface PendingRequest {\n\treadonly method: RpcMethod;\n\treadonly resolve: (result: RpcSuccessResult) => void;\n\treadonly reject: (error: Error) => void;\n}\n\nexport class RpcRemoteError extends Error {\n\treadonly code: RpcErrorCode;\n\n\tconstructor(code: RpcErrorCode, message: string) {\n\t\tsuper(message);\n\t\tthis.name = \"RpcRemoteError\";\n\t\tthis.code = code;\n\t}\n}\n\nexport class RpcClient {\n\tprivate readonly transport: RpcTransport;\n\tprivate readonly decoder: JsonlLineDecoder;\n\tprivate readonly pending = new Map<string, PendingRequest>();\n\tprivate readonly listeners = new Set<(event: RpcEventRecord) => void>();\n\tprivate readonly removeExitListener?: () => void;\n\tprivate closed = false;\n\n\tconstructor(transport: RpcTransport) {\n\t\tthis.transport = transport;\n\t\tthis.decoder = new JsonlLineDecoder((line) => this.acceptLine(line));\n\t\ttransport.readable.on(\"data\", this.handleData);\n\t\ttransport.readable.once(\"end\", this.handleEnd);\n\t\ttransport.readable.once(\"error\", this.handleError);\n\t\ttransport.writable.once(\"error\", this.handleError);\n\t\tthis.removeExitListener = transport.onExit?.((code, signal) => {\n\t\t\tthis.fail(new RpcRemoteError(\"PROCESS_EXIT\", `RPC process exited (code=${code} signal=${signal})`));\n\t\t});\n\t}\n\n\tsubscribe(listener: (event: RpcEventRecord) => void): () => void {\n\t\tthis.listeners.add(listener);\n\t\treturn () => this.listeners.delete(listener);\n\t}\n\n\tasync getState(): Promise<RpcSessionState> {\n\t\tconst result = await this.request(\"get_state\", {});\n\t\tif (result.method !== \"get_state\") throw new Error(\"RPC get_state returned an incompatible result.\");\n\t\treturn result.state;\n\t}\n\n\tasync prompt(message: string, options: { readonly signal?: AbortSignal } = {}): Promise<AssistantMessage> {\n\t\tconst requestId = randomUUID();\n\t\tconst onAbort = () => {\n\t\t\tvoid this.cancel(requestId).catch(() => undefined);\n\t\t};\n\t\toptions.signal?.addEventListener(\"abort\", onAbort, { once: true });\n\t\ttry {\n\t\t\tconst response = this.request(\"prompt\", { message }, requestId);\n\t\t\tif (options.signal?.aborted) onAbort();\n\t\t\tconst result = await response;\n\t\t\tif (result.method !== \"prompt\") throw new Error(\"RPC prompt returned an incompatible result.\");\n\t\t\treturn result.message;\n\t\t} finally {\n\t\t\toptions.signal?.removeEventListener(\"abort\", onAbort);\n\t\t}\n\t}\n\n\tasync cancel(requestId: string): Promise<boolean> {\n\t\tconst result = await this.request(\"cancel\", { requestId });\n\t\tif (result.method !== \"cancel\") throw new Error(\"RPC cancel returned an incompatible result.\");\n\t\treturn result.cancelled;\n\t}\n\n\tclose(): void {\n\t\tif (this.closed) return;\n\t\tthis.closed = true;\n\t\tthis.detach();\n\t\tthis.transport.close?.();\n\t\tthis.rejectPending(new Error(\"RPC client is closed.\"));\n\t}\n\n\tprivate request(method: \"prompt\", params: { readonly message: string }, id?: string): Promise<RpcSuccessResult>;\n\tprivate request(method: \"cancel\", params: { readonly requestId: string }, id?: string): Promise<RpcSuccessResult>;\n\tprivate request(method: \"get_state\", params: Record<string, never>, id?: string): Promise<RpcSuccessResult>;\n\tprivate request(\n\t\tmethod: RpcMethod,\n\t\tparams: { readonly message: string } | { readonly requestId: string } | Record<string, never>,\n\t\tid = randomUUID(),\n\t): Promise<RpcSuccessResult> {\n\t\tif (this.closed) return Promise.reject(new Error(\"RPC client is closed.\"));\n\t\tconst request = { version: RPC_PROTOCOL_VERSION, kind: \"request\", id, method, params } as RpcRequest;\n\t\treturn new Promise<RpcSuccessResult>((resolve, reject) => {\n\t\t\tthis.pending.set(id, { method, resolve, reject });\n\t\t\tthis.transport.writable.write(serializeJsonLine(request), (error) => {\n\t\t\t\tif (!error) return;\n\t\t\t\tthis.pending.delete(id);\n\t\t\t\treject(error);\n\t\t\t});\n\t\t});\n\t}\n\n\tprivate readonly handleData = (chunk: string | Buffer): void => {\n\t\ttry {\n\t\t\tthis.decoder.push(chunk);\n\t\t} catch (cause) {\n\t\t\tthis.fail(cause instanceof Error ? cause : new Error(String(cause)));\n\t\t}\n\t};\n\n\tprivate readonly handleEnd = (): void => {\n\t\ttry {\n\t\t\tthis.decoder.end();\n\t\t} catch (cause) {\n\t\t\tthis.fail(cause instanceof Error ? cause : new Error(String(cause)));\n\t\t\treturn;\n\t\t}\n\t\tthis.fail(new Error(\"RPC output ended before the client was closed.\"));\n\t};\n\n\tprivate readonly handleError = (error: Error): void => this.fail(error);\n\n\tprivate acceptLine(line: string): void {\n\t\tconst message = parseRpcServerMessage(line);\n\t\tif (message.kind === \"event\") {\n\t\t\tfor (const listener of this.listeners) listener(structuredClone(message));\n\t\t\treturn;\n\t\t}\n\t\tif (!message.ok && message.id === undefined) {\n\t\t\tthis.fail(new Error(`${message.error.code}: ${message.error.message}`));\n\t\t\treturn;\n\t\t}\n\t\tif (message.id === undefined) return;\n\t\tconst pending = this.pending.get(message.id);\n\t\tif (!pending) return;\n\t\tthis.pending.delete(message.id);\n\t\tif (!message.ok) {\n\t\t\tpending.reject(new RpcRemoteError(message.error.code, message.error.message));\n\t\t\treturn;\n\t\t}\n\t\tif (message.result.method !== pending.method) {\n\t\t\tpending.reject(new Error(`RPC response method mismatch: expected ${pending.method}.`));\n\t\t\treturn;\n\t\t}\n\t\tpending.resolve(message.result);\n\t}\n\n\tprivate fail(error: Error): void {\n\t\tif (this.closed) return;\n\t\tthis.closed = true;\n\t\tthis.detach();\n\t\tthis.rejectPending(error);\n\t}\n\n\tprivate rejectPending(error: Error): void {\n\t\tfor (const pending of this.pending.values()) pending.reject(error);\n\t\tthis.pending.clear();\n\t}\n\n\tprivate detach(): void {\n\t\tthis.transport.readable.off(\"data\", this.handleData);\n\t\tthis.transport.readable.off(\"end\", this.handleEnd);\n\t\tthis.transport.readable.off(\"error\", this.handleError);\n\t\tthis.transport.writable.off(\"error\", this.handleError);\n\t\tthis.removeExitListener?.();\n\t}\n}\n"]}
1
+ {"version":3,"file":"client.js","sourceRoot":"","sources":["../../src/rpc/client.ts"],"names":[],"mappings":"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","sourcesContent":["import { randomUUID } from \"node:crypto\";\nimport type { Readable, Writable } from \"node:stream\";\nimport type { AssistantMessage, Model, ThinkingLevel } from \"@di-code/ai\";\nimport { JsonlLineDecoder, serializeJsonLine } from \"./jsonl.ts\";\nimport {\n\ttype OperationState,\n\tparseRpcServerMessage,\n\tRPC_PROTOCOL_VERSION,\n\ttype RpcAttachmentInfo,\n\ttype RpcCapabilities,\n\ttype RpcContextFileInfo,\n\ttype RpcErrorCode,\n\ttype RpcEventRecord,\n\ttype RpcMcpServerInfo,\n\ttype RpcMethod,\n\ttype RpcProductState,\n\ttype RpcProviderSummary,\n\ttype RpcRequest,\n\ttype RpcSessionState,\n\ttype RpcSettingsSnapshot,\n\ttype RpcSuccessResult,\n} from \"./protocol.ts\";\n\nexport interface RpcTransport {\n\treadonly readable: Readable;\n\treadonly writable: Writable;\n\tonExit?(listener: (code: number | null, signal: NodeJS.Signals | null) => void): () => void;\n\tclose?(): void;\n}\n\nexport interface RpcPromptOptions {\n\treadonly signal?: AbortSignal;\n\t/** Attachments are uploaded explicitly and consumed by this request; requests are never replayed automatically. */\n\treadonly attachmentIds?: readonly string[];\n}\n\nexport interface RpcSessionInfo {\n\treadonly id: string;\n\treadonly label: string;\n\treadonly modifiedAt?: number;\n}\n\nexport interface RpcRuntimeSnapshot {\n\treadonly providerId: string;\n\treadonly modelId: string;\n\treadonly thinkingLevel?: ThinkingLevel;\n}\n\ninterface PendingRequest {\n\treadonly method: RpcMethod;\n\treadonly resolve: (result: RpcSuccessResult) => void;\n\treadonly reject: (error: Error) => void;\n}\n\nexport class RpcRemoteError extends Error {\n\treadonly code: RpcErrorCode;\n\n\tconstructor(code: RpcErrorCode, message: string) {\n\t\tsuper(message);\n\t\tthis.name = \"RpcRemoteError\";\n\t\tthis.code = code;\n\t}\n}\n\nexport class RpcClient {\n\tprivate readonly transport: RpcTransport;\n\tprivate readonly decoder: JsonlLineDecoder;\n\tprivate readonly pending = new Map<string, PendingRequest>();\n\tprivate readonly listeners = new Set<(event: RpcEventRecord) => void>();\n\tprivate readonly removeExitListener?: () => void;\n\tprivate closed = false;\n\n\tconstructor(transport: RpcTransport) {\n\t\tthis.transport = transport;\n\t\tthis.decoder = new JsonlLineDecoder((line) => this.acceptLine(line));\n\t\ttransport.readable.on(\"data\", this.handleData);\n\t\ttransport.readable.once(\"end\", this.handleEnd);\n\t\ttransport.readable.once(\"error\", this.handleError);\n\t\ttransport.writable.once(\"error\", this.handleError);\n\t\tthis.removeExitListener = transport.onExit?.((code, signal) => {\n\t\t\tthis.fail(new RpcRemoteError(\"PROCESS_EXIT\", `RPC process exited (code=${code} signal=${signal})`));\n\t\t});\n\t}\n\n\tsubscribe(listener: (event: RpcEventRecord) => void): () => void {\n\t\tthis.listeners.add(listener);\n\t\treturn () => this.listeners.delete(listener);\n\t}\n\n\tasync getState(): Promise<RpcSessionState> {\n\t\tconst result = await this.send(\"get_state\", {});\n\t\tif (result.method !== \"get_state\") throw new Error(\"RPC get_state returned an incompatible result.\");\n\t\treturn result.state as RpcSessionState;\n\t}\n\n\tasync prompt(message: string, options: RpcPromptOptions = {}): Promise<AssistantMessage> {\n\t\tconst requestId = randomUUID();\n\t\tconst onAbort = () => {\n\t\t\tvoid this.cancel(requestId).catch(() => undefined);\n\t\t};\n\t\toptions.signal?.addEventListener(\"abort\", onAbort, { once: true });\n\t\ttry {\n\t\t\tconst response = this.send(\n\t\t\t\t\"prompt\",\n\t\t\t\t{ message, ...(options.attachmentIds === undefined ? {} : { attachmentIds: [...options.attachmentIds] }) },\n\t\t\t\trequestId,\n\t\t\t);\n\t\t\tif (options.signal?.aborted) onAbort();\n\t\t\tconst result = await response;\n\t\t\tif (result.method !== \"prompt\") throw new Error(\"RPC prompt returned an incompatible result.\");\n\t\t\treturn result.message as AssistantMessage;\n\t\t} finally {\n\t\t\toptions.signal?.removeEventListener(\"abort\", onAbort);\n\t\t}\n\t}\n\n\tasync cancel(requestId: string): Promise<boolean> {\n\t\tconst result = await this.send(\"cancel\", { requestId });\n\t\tif (result.method !== \"cancel\") throw new Error(\"RPC cancel returned an incompatible result.\");\n\t\treturn result.cancelled as boolean;\n\t}\n\n\t/**\n\t * Sends an explicitly named, schema-validated RPC request. Consumers should negotiate capabilities\n\t * before using extended methods so old process servers remain usable.\n\t */\n\tcall(method: RpcMethod, params: Record<string, unknown> = {}, id?: string): Promise<RpcSuccessResult> {\n\t\treturn this.send(method, params, id);\n\t}\n\n\tasync getCapabilities(events: readonly string[] = []): Promise<RpcSuccessResult> {\n\t\tconst result = await this.send(\"get_capabilities\", { events: [...events] });\n\t\treturn result;\n\t}\n\n\tasync negotiate(events: readonly import(\"./protocol.ts\").RpcExtendedEventName[] = []): Promise<RpcCapabilities> {\n\t\tconst result = await this.getCapabilities(events);\n\t\treturn {\n\t\t\tmethods: result.methods as readonly RpcMethod[],\n\t\t\tevents: result.events as readonly import(\"./protocol.ts\").RpcExtendedEventName[],\n\t\t\teventBufferSize: result.eventBufferSize as number,\n\t\t};\n\t}\n\n\tasync resumeEvents(lastSequence?: number): Promise<{ readonly snapshotRequired: boolean }> {\n\t\tconst result = await this.send(\"resume_events\", lastSequence === undefined ? {} : { lastSequence });\n\t\treturn { snapshotRequired: result.snapshotRequired as boolean };\n\t}\n\n\tasync getOperation(requestId: string): Promise<OperationState> {\n\t\tconst result = await this.send(\"get_operation\", { requestId });\n\t\treturn result.operation as OperationState;\n\t}\n\n\tasync listSessions(): Promise<readonly RpcSessionInfo[]> {\n\t\tconst result = await this.send(\"list_sessions\", {});\n\t\treturn result.sessions as readonly RpcSessionInfo[];\n\t}\n\n\tasync newSession(): Promise<RpcSessionInfo> {\n\t\tconst result = await this.send(\"new_session\", {});\n\t\treturn result.session as RpcSessionInfo;\n\t}\n\n\tasync openSession(sessionId: string): Promise<RpcSessionInfo> {\n\t\tconst result = await this.send(\"open_session\", { sessionId });\n\t\treturn result.session as RpcSessionInfo;\n\t}\n\n\tasync getProductState(): Promise<RpcProductState> {\n\t\tconst result = await this.send(\"get_product_state\", {});\n\t\treturn result.state as RpcProductState;\n\t}\n\n\tasync getProjectTrust(): Promise<boolean> {\n\t\tconst result = await this.send(\"get_project_trust\", {});\n\t\treturn result.trusted as boolean;\n\t}\n\n\tasync getTranscript(\n\t\tparams: { readonly pageToken?: string; readonly pageSize?: number; readonly maxBytes?: number } = {},\n\t): Promise<RpcSuccessResult> {\n\t\treturn this.send(\"get_transcript\", params);\n\t}\n\n\tasync getTree(): Promise<RpcSuccessResult> {\n\t\treturn this.send(\"get_tree\", {});\n\t}\n\n\tasync navigateTree(entryId: string): Promise<RpcSuccessResult> {\n\t\treturn this.send(\"navigate_tree\", { entryId });\n\t}\n\n\tasync getModels(): Promise<readonly Model[]> {\n\t\tconst result = await this.send(\"get_models\", {});\n\t\treturn result.models as readonly Model[];\n\t}\n\n\tasync setModel(modelId: string): Promise<Model> {\n\t\tconst result = await this.send(\"set_model\", { modelId });\n\t\treturn result.model as Model;\n\t}\n\n\tasync getRuntime(): Promise<RpcRuntimeSnapshot> {\n\t\tconst result = await this.send(\"get_runtime\", {});\n\t\treturn {\n\t\t\tproviderId: result.providerId as string,\n\t\t\tmodelId: result.modelId as string,\n\t\t\t...(result.thinkingLevel === undefined ? {} : { thinkingLevel: result.thinkingLevel as ThinkingLevel }),\n\t\t};\n\t}\n\n\tasync setRuntime(providerId: string, modelId: string): Promise<Model> {\n\t\tconst result = await this.send(\"set_runtime\", { providerId, modelId });\n\t\treturn result.model as Model;\n\t}\n\n\tasync setThinkingLevel(level?: ThinkingLevel): Promise<ThinkingLevel | undefined> {\n\t\tconst result = await this.send(\"set_thinking_level\", level === undefined ? {} : { level });\n\t\treturn result.level as ThinkingLevel | undefined;\n\t}\n\n\tasync compact(): Promise<void> {\n\t\tawait this.send(\"compact\", {});\n\t}\n\n\tasync setCompactionEnabled(enabled: boolean): Promise<boolean> {\n\t\tconst result = await this.send(\"set_compaction_enabled\", { enabled });\n\t\treturn result.enabled as boolean;\n\t}\n\n\tasync getUsage(): Promise<RpcSuccessResult> {\n\t\treturn this.send(\"get_usage\", {});\n\t}\n\n\tasync listSkills(): Promise<RpcSuccessResult> {\n\t\treturn this.send(\"list_skills\", {});\n\t}\n\n\tasync getResources(): Promise<RpcSuccessResult> {\n\t\treturn this.send(\"get_resources\", {});\n\t}\n\n\tasync steer(message: string, options: RpcPromptOptions = {}): Promise<void> {\n\t\tconst result = await this.send(\"steer\", {\n\t\t\tmessage,\n\t\t\t...(options.attachmentIds === undefined ? {} : { attachmentIds: [...options.attachmentIds] }),\n\t\t});\n\t\tif (result.method !== \"steer\") throw new Error(\"RPC steer returned an incompatible result.\");\n\t}\n\n\tasync retry(targetRequestId: string): Promise<AssistantMessage> {\n\t\tconst result = await this.send(\"retry\", { targetRequestId });\n\t\tif (result.method !== \"retry\") throw new Error(\"RPC retry returned an incompatible result.\");\n\t\treturn result.message as AssistantMessage;\n\t}\n\n\tasync listProviders(): Promise<readonly RpcProviderSummary[]> {\n\t\tconst result = await this.send(\"list_providers\", {});\n\t\treturn result.providers as readonly RpcProviderSummary[];\n\t}\n\n\tasync getSettings(): Promise<RpcSettingsSnapshot> {\n\t\tconst result = await this.send(\"get_settings\", {});\n\t\treturn result.settings as RpcSettingsSnapshot;\n\t}\n\n\tasync setDefaultProvider(providerId: string): Promise<void> {\n\t\tawait this.send(\"set_default_provider\", { providerId });\n\t}\n\n\tasync setDefaultModel(modelId: string): Promise<void> {\n\t\tawait this.send(\"set_default_model\", { modelId });\n\t}\n\n\tasync setLocale(locale: \"en\" | \"zh-CN\"): Promise<void> {\n\t\tawait this.send(\"set_locale\", { locale });\n\t}\n\n\tasync setPermissionMode(permissionMode: \"ask\" | \"allow\" | \"deny\"): Promise<void> {\n\t\tawait this.send(\"set_permission_mode\", { permissionMode });\n\t}\n\n\tasync configureCustomProvider(input: {\n\t\treadonly api: \"openai-responses\" | \"openai-chat-completions\" | \"anthropic-messages\";\n\t\treadonly baseUrl: string;\n\t\treadonly apiKey: string;\n\t\treadonly modelId: string;\n\t}): Promise<RpcProviderSummary> {\n\t\tconst result = await this.send(\"configure_custom_provider\", input);\n\t\treturn result.provider as RpcProviderSummary;\n\t}\n\n\tasync login(\n\t\tproviderId: string,\n\t\tapiKey: string,\n\t\toptions: { readonly modelId?: string; readonly api?: string } = {},\n\t): Promise<RpcProviderSummary> {\n\t\tconst result = await this.send(\"login\", { providerId, apiKey, ...options });\n\t\treturn result.provider as RpcProviderSummary;\n\t}\n\n\tasync logout(providerId: string): Promise<void> {\n\t\tawait this.send(\"logout\", { providerId });\n\t}\n\n\tasync setProjectTrust(trusted: boolean): Promise<boolean> {\n\t\tconst result = await this.send(\"set_project_trust\", { trusted });\n\t\treturn result.trusted as boolean;\n\t}\n\n\tasync listContextFiles(): Promise<readonly RpcContextFileInfo[]> {\n\t\tconst result = await this.send(\"list_context_files\", {});\n\t\treturn result.files as readonly RpcContextFileInfo[];\n\t}\n\n\tasync listMcpServers(): Promise<readonly RpcMcpServerInfo[]> {\n\t\tconst result = await this.send(\"list_mcp_servers\", {});\n\t\treturn result.servers as readonly RpcMcpServerInfo[];\n\t}\n\n\tasync configureMcpServer(\n\t\tserverId: string,\n\t\tscope: \"user\" | \"project\" | \"local\",\n\t\tconfig: Record<string, unknown>,\n\t): Promise<RpcMcpServerInfo> {\n\t\tconst result = await this.send(\"configure_mcp_server\", { serverId, scope, config });\n\t\treturn result.server as RpcMcpServerInfo;\n\t}\n\n\tasync removeMcpServer(serverId: string, scope: \"user\" | \"project\" | \"local\" = \"project\"): Promise<void> {\n\t\tawait this.send(\"remove_mcp_server\", { serverId, scope });\n\t}\n\n\tasync reconnectMcpServer(serverId: string): Promise<RpcMcpServerInfo> {\n\t\tconst result = await this.send(\"reconnect_mcp_server\", { serverId });\n\t\treturn result.server as RpcMcpServerInfo;\n\t}\n\n\tasync createAttachment(\n\t\tname: string,\n\t\tcontentType: RpcAttachmentInfo[\"contentType\"],\n\t\tdata: string,\n\t): Promise<RpcAttachmentInfo> {\n\t\tconst result = await this.send(\"create_attachment\", { name, contentType, data });\n\t\treturn result.attachment as RpcAttachmentInfo;\n\t}\n\n\tclose(): void {\n\t\tif (this.closed) return;\n\t\tthis.closed = true;\n\t\tthis.detach();\n\t\tthis.transport.close?.();\n\t\tthis.rejectPending(new Error(\"RPC client is closed.\"));\n\t}\n\n\tprivate send(\n\t\tmethod: \"prompt\",\n\t\tparams: { readonly message: string; readonly attachmentIds?: readonly string[] },\n\t\tid?: string,\n\t): Promise<RpcSuccessResult>;\n\tprivate send(method: \"cancel\", params: { readonly requestId: string }, id?: string): Promise<RpcSuccessResult>;\n\tprivate send(method: \"get_state\", params: Record<string, never>, id?: string): Promise<RpcSuccessResult>;\n\tprivate send(method: RpcMethod, params: Record<string, unknown>, id?: string): Promise<RpcSuccessResult>;\n\tprivate send(method: RpcMethod, params: Record<string, unknown>, id = randomUUID()): Promise<RpcSuccessResult> {\n\t\tif (this.closed) return Promise.reject(new Error(\"RPC client is closed.\"));\n\t\tconst request = { version: RPC_PROTOCOL_VERSION, kind: \"request\", id, method, params } as RpcRequest;\n\t\treturn new Promise<RpcSuccessResult>((resolve, reject) => {\n\t\t\tthis.pending.set(id, { method, resolve, reject });\n\t\t\tthis.transport.writable.write(serializeJsonLine(request), (error) => {\n\t\t\t\tif (!error) return;\n\t\t\t\tthis.pending.delete(id);\n\t\t\t\treject(error);\n\t\t\t});\n\t\t});\n\t}\n\n\tprivate readonly handleData = (chunk: string | Buffer): void => {\n\t\ttry {\n\t\t\tthis.decoder.push(chunk);\n\t\t} catch (cause) {\n\t\t\tthis.fail(cause instanceof Error ? cause : new Error(String(cause)));\n\t\t}\n\t};\n\n\tprivate readonly handleEnd = (): void => {\n\t\ttry {\n\t\t\tthis.decoder.end();\n\t\t} catch (cause) {\n\t\t\tthis.fail(cause instanceof Error ? cause : new Error(String(cause)));\n\t\t\treturn;\n\t\t}\n\t\tthis.fail(new Error(\"RPC output ended before the client was closed.\"));\n\t};\n\n\tprivate readonly handleError = (error: Error): void => this.fail(error);\n\n\tprivate acceptLine(line: string): void {\n\t\tconst message = parseRpcServerMessage(line);\n\t\tif (message.kind === \"event\") {\n\t\t\tfor (const listener of this.listeners) listener(structuredClone(message));\n\t\t\treturn;\n\t\t}\n\t\tif (!message.ok && message.id === undefined) {\n\t\t\tthis.fail(new Error(`${message.error.code}: ${message.error.message}`));\n\t\t\treturn;\n\t\t}\n\t\tif (message.id === undefined) return;\n\t\tconst pending = this.pending.get(message.id);\n\t\tif (!pending) return;\n\t\tthis.pending.delete(message.id);\n\t\tif (!message.ok) {\n\t\t\tpending.reject(new RpcRemoteError(message.error.code, message.error.message));\n\t\t\treturn;\n\t\t}\n\t\tif (message.result.method !== pending.method) {\n\t\t\tpending.reject(new Error(`RPC response method mismatch: expected ${pending.method}.`));\n\t\t\treturn;\n\t\t}\n\t\tpending.resolve(message.result);\n\t}\n\n\tprivate fail(error: Error): void {\n\t\tif (this.closed) return;\n\t\tthis.closed = true;\n\t\tthis.detach();\n\t\tthis.rejectPending(error);\n\t}\n\n\tprivate rejectPending(error: Error): void {\n\t\tfor (const pending of this.pending.values()) pending.reject(error);\n\t\tthis.pending.clear();\n\t}\n\n\tprivate detach(): void {\n\t\tthis.transport.readable.off(\"data\", this.handleData);\n\t\tthis.transport.readable.off(\"end\", this.handleEnd);\n\t\tthis.transport.readable.off(\"error\", this.handleError);\n\t\tthis.transport.writable.off(\"error\", this.handleError);\n\t\tthis.removeExitListener?.();\n\t}\n}\n"]}
@@ -0,0 +1,121 @@
1
+ import type { AssistantMessage, ImageContent, Message } from "@di-code/ai";
2
+ import type { CommandRegistry } from "@di-code/builtins";
3
+ import type { AgentSessionListener } from "../core/session.ts";
4
+ import type { ProductHost } from "../runtime/product-host.ts";
5
+ import type { SessionHost } from "../runtime/session-host.ts";
6
+ import { type RpcAttachmentInfo, type RpcProductState, type RpcRequest, type RpcResponse, type RpcServerMessage } from "./protocol.ts";
7
+ /** Minimum legacy session shape retained for direct RpcServer embedding. */
8
+ export interface RpcSession {
9
+ readonly sessionId: string;
10
+ readonly modelId: string;
11
+ readonly isStreaming: boolean;
12
+ readonly transcript: readonly Message[];
13
+ prompt(text: string, signal?: AbortSignal): Promise<AssistantMessage>;
14
+ subscribeSession(listener: AgentSessionListener): () => void;
15
+ }
16
+ export interface RpcMethodCatalog {
17
+ readonly has: (name: string) => boolean;
18
+ }
19
+ export interface RpcDispatcherOptions {
20
+ readonly session: RpcSession | SessionHost;
21
+ readonly methods?: RpcMethodCatalog;
22
+ readonly eventBufferSize?: number;
23
+ /** Immutable composition snapshot; changing trust requires a new product host. */
24
+ readonly productState?: RpcProductState;
25
+ readonly productHost?: ProductHost;
26
+ readonly onError?: (error: Error) => void;
27
+ readonly attachmentTtlMs?: number;
28
+ readonly attachmentMaxCount?: number;
29
+ readonly attachmentMaxBytes?: number;
30
+ readonly attachmentStore?: RpcAttachmentStore;
31
+ /** Composition-owned commands that may be listed and invoked by a Web client. */
32
+ readonly commandRegistry?: CommandRegistry;
33
+ /** Completed operations remain queryable for this bounded retention window. */
34
+ readonly operationTtlMs?: number;
35
+ /** Active operations are never evicted; this only limits retained terminal records. */
36
+ readonly operationMaxCount?: number;
37
+ }
38
+ /**
39
+ * Actor-scoped attachment storage. The dispatcher owns validation and opaque IDs; implementations own bytes and
40
+ * must remove consumed, expired, and disposed attachments without exposing their backing paths.
41
+ */
42
+ export interface RpcAttachmentStore {
43
+ create(input: {
44
+ readonly id: string;
45
+ readonly name: string;
46
+ readonly contentType: RpcAttachmentInfo["contentType"];
47
+ readonly data: string;
48
+ readonly bytes: number;
49
+ }): Promise<RpcAttachmentInfo>;
50
+ take(ids: readonly string[]): Promise<readonly ImageContent[]>;
51
+ discard(ids: readonly string[]): Promise<void>;
52
+ dispose(): Promise<void>;
53
+ }
54
+ /**
55
+ * Transport-free protocol dispatcher. It owns request idempotency, operation state, event ordering,
56
+ * and the bounded replay buffer; callers decide whether events go to JSONL, SSE, or another adapter.
57
+ */
58
+ export declare class RpcDispatcher {
59
+ private readonly session;
60
+ private readonly methods?;
61
+ private readonly onError;
62
+ private readonly approvals;
63
+ private readonly maxEvents;
64
+ private productState;
65
+ private readonly productHost?;
66
+ private readonly attachmentTtlMs;
67
+ private readonly commandRegistry?;
68
+ private readonly attachmentMaxCount;
69
+ private readonly attachmentMaxBytes;
70
+ private readonly operationTtlMs;
71
+ private readonly operationMaxCount;
72
+ private readonly listeners;
73
+ private readonly operations;
74
+ private readonly events;
75
+ private readonly attachments;
76
+ private readonly negotiatedEvents;
77
+ private readonly unsubscribe;
78
+ private readonly unsubscribeProduct?;
79
+ private disposed;
80
+ private sequence;
81
+ constructor(options: RpcDispatcherOptions);
82
+ subscribe(listener: (message: RpcServerMessage) => void): () => void;
83
+ dispatch(request: RpcRequest): Promise<RpcResponse>;
84
+ dispose(): Promise<void>;
85
+ private execute;
86
+ /** Waits for the browser to approve a specific tool invocation. */
87
+ requestToolApproval(toolName: string, parameters: unknown, signal?: AbortSignal): Promise<boolean>;
88
+ private runOperation;
89
+ private transcript;
90
+ private requireProduct;
91
+ private assertProductIdle;
92
+ private discardAttachments;
93
+ private prompt;
94
+ private createAttachment;
95
+ private takeAttachments;
96
+ private host;
97
+ private state;
98
+ private activeSessionId;
99
+ private isOperation;
100
+ private listCommands;
101
+ private runCommand;
102
+ private success;
103
+ private failure;
104
+ private capabilities;
105
+ private resumeEvents;
106
+ private cancel;
107
+ private getOperation;
108
+ private listSessions;
109
+ private newSession;
110
+ private openSession;
111
+ private inspectSession;
112
+ private renameSession;
113
+ private deleteSession;
114
+ private branchSession;
115
+ private operationState;
116
+ private pruneOperations;
117
+ private emitOperation;
118
+ private onSessionEvent;
119
+ private emit;
120
+ }
121
+ //# sourceMappingURL=dispatcher.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"dispatcher.d.ts","sourceRoot":"","sources":["../../src/rpc/dispatcher.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,gBAAgB,EAAE,YAAY,EAAE,OAAO,EAAE,MAAM,aAAa,CAAC;AAC3E,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,mBAAmB,CAAC;AAGzD,OAAO,KAAK,EAAqB,oBAAoB,EAAE,MAAM,oBAAoB,CAAC;AAClF,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,4BAA4B,CAAC;AAC9D,OAAO,KAAK,EAAE,WAAW,EAAoB,MAAM,4BAA4B,CAAC;AAChF,OAAO,EAIN,KAAK,iBAAiB,EAMtB,KAAK,eAAe,EAEpB,KAAK,UAAU,EACf,KAAK,WAAW,EAChB,KAAK,gBAAgB,EAGrB,MAAM,eAAe,CAAC;AAEvB,4EAA4E;AAC5E,MAAM,WAAW,UAAU;IAC1B,QAAQ,CAAC,SAAS,EAAE,MAAM,CAAC;IAC3B,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAC;IACzB,QAAQ,CAAC,WAAW,EAAE,OAAO,CAAC;IAC9B,QAAQ,CAAC,UAAU,EAAE,SAAS,OAAO,EAAE,CAAC;IACxC,MAAM,CAAC,IAAI,EAAE,MAAM,EAAE,MAAM,CAAC,EAAE,WAAW,GAAG,OAAO,CAAC,gBAAgB,CAAC,CAAC;IACtE,gBAAgB,CAAC,QAAQ,EAAE,oBAAoB,GAAG,MAAM,IAAI,CAAC;CAC7D;AAED,MAAM,WAAW,gBAAgB;IAChC,QAAQ,CAAC,GAAG,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,OAAO,CAAC;CACxC;AACD,MAAM,WAAW,oBAAoB;IACpC,QAAQ,CAAC,OAAO,EAAE,UAAU,GAAG,WAAW,CAAC;IAC3C,QAAQ,CAAC,OAAO,CAAC,EAAE,gBAAgB,CAAC;IACpC,QAAQ,CAAC,eAAe,CAAC,EAAE,MAAM,CAAC;IAClC,kFAAkF;IAClF,QAAQ,CAAC,YAAY,CAAC,EAAE,eAAe,CAAC;IACxC,QAAQ,CAAC,WAAW,CAAC,EAAE,WAAW,CAAC;IACnC,QAAQ,CAAC,OAAO,CAAC,EAAE,CAAC,KAAK,EAAE,KAAK,KAAK,IAAI,CAAC;IAC1C,QAAQ,CAAC,eAAe,CAAC,EAAE,MAAM,CAAC;IAClC,QAAQ,CAAC,kBAAkB,CAAC,EAAE,MAAM,CAAC;IACrC,QAAQ,CAAC,kBAAkB,CAAC,EAAE,MAAM,CAAC;IACrC,QAAQ,CAAC,eAAe,CAAC,EAAE,kBAAkB,CAAC;IAC9C,iFAAiF;IACjF,QAAQ,CAAC,eAAe,CAAC,EAAE,eAAe,CAAC;IAC3C,+EAA+E;IAC/E,QAAQ,CAAC,cAAc,CAAC,EAAE,MAAM,CAAC;IACjC,uFAAuF;IACvF,QAAQ,CAAC,iBAAiB,CAAC,EAAE,MAAM,CAAC;CACpC;AAED;;;GAGG;AACH,MAAM,WAAW,kBAAkB;IAClC,MAAM,CAAC,KAAK,EAAE;QACb,QAAQ,CAAC,EAAE,EAAE,MAAM,CAAC;QACpB,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;QACtB,QAAQ,CAAC,WAAW,EAAE,iBAAiB,CAAC,aAAa,CAAC,CAAC;QACvD,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;QACtB,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAC;KACvB,GAAG,OAAO,CAAC,iBAAiB,CAAC,CAAC;IAC/B,IAAI,CAAC,GAAG,EAAE,SAAS,MAAM,EAAE,GAAG,OAAO,CAAC,SAAS,YAAY,EAAE,CAAC,CAAC;IAC/D,OAAO,CAAC,GAAG,EAAE,SAAS,MAAM,EAAE,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IAC/C,OAAO,IAAI,OAAO,CAAC,IAAI,CAAC,CAAC;CACzB;AA8HD;;;GAGG;AACH,qBAAa,aAAa;IACzB,OAAO,CAAC,QAAQ,CAAC,OAAO,CAA2B;IACnD,OAAO,CAAC,QAAQ,CAAC,OAAO,CAAC,CAAmB;IAC5C,OAAO,CAAC,QAAQ,CAAC,OAAO,CAAyB;IACjD,OAAO,CAAC,QAAQ,CAAC,SAAS,CAAwE;IAClG,OAAO,CAAC,QAAQ,CAAC,SAAS,CAAS;IACnC,OAAO,CAAC,YAAY,CAAkB;IACtC,OAAO,CAAC,QAAQ,CAAC,WAAW,CAAC,CAAc;IAC3C,OAAO,CAAC,QAAQ,CAAC,eAAe,CAAS;IACzC,OAAO,CAAC,QAAQ,CAAC,eAAe,CAAC,CAAkB;IACnD,OAAO,CAAC,QAAQ,CAAC,kBAAkB,CAAS;IAC5C,OAAO,CAAC,QAAQ,CAAC,kBAAkB,CAAS;IAC5C,OAAO,CAAC,QAAQ,CAAC,cAAc,CAAS;IACxC,OAAO,CAAC,QAAQ,CAAC,iBAAiB,CAAS;IAC3C,OAAO,CAAC,QAAQ,CAAC,SAAS,CAAkD;IAC5E,OAAO,CAAC,QAAQ,CAAC,UAAU,CAAsC;IACjE,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAwB;IAC/C,OAAO,CAAC,QAAQ,CAAC,WAAW,CAAqB;IACjD,OAAO,CAAC,QAAQ,CAAC,gBAAgB,CAAqB;IACtD,OAAO,CAAC,QAAQ,CAAC,WAAW,CAAa;IACzC,OAAO,CAAC,QAAQ,CAAC,kBAAkB,CAAC,CAAa;IACjD,OAAO,CAAC,QAAQ,CAAS;IACzB,OAAO,CAAC,QAAQ,CAAK;gBAET,OAAO,EAAE,oBAAoB;IAsCzC,SAAS,CAAC,QAAQ,EAAE,CAAC,OAAO,EAAE,gBAAgB,KAAK,IAAI,GAAG,MAAM,IAAI;IAK9D,QAAQ,CAAC,OAAO,EAAE,UAAU,GAAG,OAAO,CAAC,WAAW,CAAC;IA2BnD,OAAO,IAAI,OAAO,CAAC,IAAI,CAAC;YAYhB,OAAO;IA0IrB,mEAAmE;IAC7D,mBAAmB,CAAC,QAAQ,EAAE,MAAM,EAAE,UAAU,EAAE,OAAO,EAAE,MAAM,CAAC,EAAE,WAAW,GAAG,OAAO,CAAC,OAAO,CAAC;YAkC1F,YAAY;IAsO1B,OAAO,CAAC,UAAU;IAgClB,OAAO,CAAC,cAAc;IAItB,OAAO,CAAC,iBAAiB;YAIX,kBAAkB;YAMlB,MAAM;YAaN,gBAAgB;YAiBhB,eAAe;IAK7B,OAAO,CAAC,IAAI;IAKZ,OAAO,CAAC,KAAK;IAoBb,OAAO,CAAC,eAAe;IAGvB,OAAO,CAAC,WAAW;IA2BnB,OAAO,CAAC,YAAY;YAcN,UAAU;IAqBxB,OAAO,CAAC,OAAO;IAGf,OAAO,CAAC,OAAO;IAGf,OAAO,CAAC,YAAY;IAuBpB,OAAO,CAAC,YAAY;IAkBpB,OAAO,CAAC,MAAM;IAUd,OAAO,CAAC,YAAY;YAON,YAAY;YAUZ,UAAU;YAYV,WAAW;YAYX,cAAc;YAkBd,aAAa;YAIb,aAAa;YAIb,aAAa;IAO3B,OAAO,CAAC,cAAc;IAUtB,OAAO,CAAC,eAAe;IAYvB,OAAO,CAAC,aAAa;IAWrB,OAAO,CAAC,cAAc;IAmBtB,OAAO,CAAC,IAAI;CASZ"}